diff --git a/DEPS b/DEPS
index c44e57f2b..028c506 100644
--- a/DEPS
+++ b/DEPS
@@ -280,15 +280,15 @@
   # 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': '46df6fed41442f0c28bf56534530bbd6e24193e5',
+  'skia_revision': 'e0114876f8a048dc5f1577938a03c14836d78763',
   # 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': '18b88b53e8590ab3c1ba1dbfd585537b9aed9f4a',
+  'v8_revision': '0be76c241b2702d09c8dfa75e774b62c553aaa80',
   # 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': '81a41e4f10f960a290d89147c7a152fcd48f09a4',
+  'angle_revision': '501f07a6dd53937d83dfad11928a75d0c0c88f73',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -300,7 +300,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
-  'boringssl_revision': 'cf6dc5d38385e4ff6faf9bf0883a67c2f511076b',
+  'boringssl_revision': '822902749a5956bba09c7e9e451104e8a74f02c5',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
@@ -372,7 +372,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': 'e1d00f2492b661b760afb2faa9f1ddd8a5223114',
+  'devtools_frontend_revision': 'c7ac38777ac61afd51fcf85ca72a659d660908a8',
   # 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.
@@ -396,7 +396,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': '23bb5c06534109dcbdcf41174be544f2836b430f',
+  'dawn_revision': '63466f66842cd912b81dbc7c496f76d96794a877',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -1304,7 +1304,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '2bf79a00d99f68d4fab6a186f66f856748e24972',
+    'bf9cb3c0d3d3c0bb540a67a3072f4c5483728f2b',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -1769,7 +1769,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' + '@' + 'c396776c5a046662beb82bed76490b46cc80b2fb',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '68a28e35463cc96b8f2dd4be623d357a7cb0227a',
       'condition': 'checkout_chromeos',
   },
 
@@ -2157,7 +2157,7 @@
     Var('chromium_git') + '/chromiumos/platform/libva-fake-driver.git' + '@' + 'a9bcab9cd6b15d4e3634ca44d5e5f7652c612194',
 
   'src/third_party/libvpx/source/libvpx':
-    Var('chromium_git') + '/webm/libvpx.git' + '@' +  '62df56d12b1ebf1db154c3f82761747397ea2731',
+    Var('chromium_git') + '/webm/libvpx.git' + '@' +  '8ae5601c5f8288968a158a6fa1746a7021db505a',
 
   'src/third_party/libwebm/source':
     Var('chromium_git') + '/webm/libwebm.git' + '@' + '26d9f667170dc75e8d759a997bb61c64dec42dda',
@@ -2301,7 +2301,7 @@
     Var('pdfium_git') + '/pdfium.git' + '@' +  Var('pdfium_revision'),
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '7bf1bcbc57dff90be8ff68c017832c47a1d03a24',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '146a77bab9680922a17d665a206e51891f644eae',
 
   'src/base/tracing/test/data': {
     'bucket': 'perfetto',
@@ -2795,7 +2795,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/boca_app/app',
-        'version': 'fIJyA0gj8vqgnXwMPAqAH7ID9hsa7Zo5XZa7uhcTefwC',
+        'version': 'ok033_HaXUpUhKGhWXDPPxmrNAPRA-54i_woIcFybSgC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -2806,7 +2806,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'BYzotWtdugXo4sM6szh0LKu6EZ9t7uXpQHOjvEPm9pwC',
+        'version': 'yQvM5lF7t2xXPkFGMh3VRYV5i9dEEGWR1Cic1wXPytcC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -2817,7 +2817,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': '6gsn3VqGgMIeJQ4RK2fMlQ2WVxptPKxYpMYpjMCaeawC',
+        'version': '0N1DNAX7NLo3z7s9wUZhJzgdwTGdd0BEo82yBFjOGYkC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -2850,7 +2850,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'mU6sjQCLUISqBDt6KgC_gFF0JXpKCjIUjTQdOcywLL8C',
+        'version': 'zn0oiyduOIWQ2t9k4K2FUW4hLB1CgEDaHYxGQrWINV8C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -4431,7 +4431,7 @@
 
   'src/components/optimization_guide/internal': {
       'url': Var('chrome_git') + '/chrome/components/optimization_guide.git' + '@' +
-        'ad25fb362531d62c3c06cbf57e18b3ce5a016473',
+        'bfb00333807212903408145b1b2fd0e3f43d2237',
       'condition': 'checkout_src_internal',
   },
 
@@ -4497,7 +4497,7 @@
 
   'src/ios_internal':  {
       'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' +
-        'd4240f6c622349bab9877c20fcacba15f5da9ae9',
+        '78e59ed0707683eaf1ed43101be35d3f03ff675e',
       'condition': 'checkout_ios and checkout_src_internal',
   },
 
diff --git a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index d81ce44..1bbc10a 100644
--- a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -115,15 +115,6 @@
     getter currentTime
     getter duration
     method constructor
-interface AsyncDisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.asyncDispose)
-    method adopt
-    method defer
-    method disposeAsync
-    method move
-    method use
 interface Attr : Node
     attribute @@toStringTag
     getter localName
@@ -1597,15 +1588,6 @@
     getter beta
     getter gamma
     method constructor
-interface DisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.dispose)
-    method adopt
-    method defer
-    method dispose
-    method move
-    method use
 interface Document : Node
     static method parseHTMLUnsafe
     attribute @@toStringTag
@@ -8453,10 +8435,6 @@
     method unwrapKey
     method verify
     method wrapKey
-interface SuppressedError : Error
-    attribute message
-    attribute name
-    method constructor
 interface SyncManager
     attribute @@toStringTag
     method constructor
diff --git a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
index 01c7efeb..8f3040ce 100644
--- a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
@@ -222,15 +222,6 @@
     getter duration
     method constructor
     method getCurrentTime
-interface AsyncDisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.asyncDispose)
-    method adopt
-    method defer
-    method disposeAsync
-    method move
-    method use
 interface Attr : Node
     attribute @@toStringTag
     getter localName
@@ -1875,15 +1866,6 @@
     getter type
     method constructor
     method toString
-interface DisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.dispose)
-    method adopt
-    method defer
-    method dispose
-    method move
-    method use
 interface Document : Node
     static method parseHTML
     static method parseHTMLUnsafe
@@ -9196,10 +9178,6 @@
     method unwrapKey
     method verify
     method wrapKey
-interface SuppressedError : Error
-    attribute message
-    attribute name
-    method constructor
 interface SyncManager
     attribute @@toStringTag
     method constructor
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 6bc8ec6..45cfad17 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -1647,6 +1647,7 @@
 <translation id="6539852571005954999">Downloaden scannes: <ph name="FILENAME" /></translation>
 <translation id="6542521951477560771">Caster til <ph name="RECEIVER_NAME" /></translation>
 <translation id="6542891623636520977">Emojis, giffer m.m.</translation>
+<translation id="6543942526104794893">Er du sikker på, at du vil deaktivere ansigtsbevægelser?</translation>
 <translation id="6545382064335350438">Din pinkode kan stadig ikke verificeres. Prøv igen.</translation>
 <translation id="6555373427270923730">Skriv en webadresse i adresselinjen, og tryk derefter på <ph name="MODIFIER" /><ph name="KEY" /></translation>
 <translation id="655633303491376835"><ph name="APP_NAME" />
@@ -2313,6 +2314,7 @@
 <translation id="8855885154700222542">Tast til fuld skærm</translation>
 <translation id="8858369206579825206">Privatlivsindstillinger</translation>
 <translation id="8860366331836346216">Tilføj eSIM</translation>
+<translation id="8869149849311827122">Er du sikker på, at du vil deaktivere styring via musemarkøren?</translation>
 <translation id="8870509716567206129">Appen understøtter ikke opdelt skærm.</translation>
 <translation id="8873203135446552888">Bekræft, at du vil deaktivere den indbyggede touchplade</translation>
 <translation id="8874184842967597500">Ikke forbundet</translation>
diff --git a/ash/system/audio/audio_detailed_view.cc b/ash/system/audio/audio_detailed_view.cc
index cd5b5b29..e7fb61d2 100644
--- a/ash/system/audio/audio_detailed_view.cc
+++ b/ash/system/audio/audio_detailed_view.cc
@@ -529,7 +529,7 @@
     if (device.active) {
       views::AsViewClass<QuickSettingsSlider>(
           views::AsViewClass<UnifiedVolumeView>(slider.get())->slider())
-          ->SetIsToggleableVolumeSlider(true);
+          ->set_is_toggleable_volume_slider(true);
     }
   }
 
diff --git a/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc b/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
index 7b2bae2..3a93688 100644
--- a/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
+++ b/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
@@ -7,7 +7,6 @@
 #include "ash/accessibility/accessibility_controller.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
-#include "ash/strings/grit/ash_strings.h"
 #include "ash/style/switch.h"
 #include "ash/system/audio/audio_detailed_view.h"
 #include "ash/system/audio/mic_gain_slider_controller.h"
@@ -36,8 +35,6 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/cros_system_api/dbus/audio/dbus-constants.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/events/base_event_utils.h"
 #include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/controls/button/toggle_button.h"
@@ -286,18 +283,6 @@
         .GetAccessibleNodeData(&node_data);
     EXPECT_EQ(node_data.role, ax::mojom::Role::kSlider);
 
-    auto* focused_view = slider->GetFocusManager()->GetFocusedView();
-    auto* slider_view = static_cast<QuickSettingsSlider*>(focused_view);
-    std::u16string volume_level = base::UTF8ToUTF16(base::StringPrintf(
-        "%d%%", static_cast<int>(slider_view->GetValue() * 100 + 0.5)));
-    EXPECT_EQ(
-        node_data.GetString16Attribute(ax::mojom::StringAttribute::kValue),
-        is_input_slider
-            ? volume_level
-            : l10n_util::GetStringFUTF16(
-                  IDS_ASH_STATUS_TRAY_VOLUME_SLIDER_ACCESSIBILITY_ANNOUNCEMENT,
-                  volume_level));
-
     const bool is_muted =
         is_input_slider
             ? cras_audio_handler_->IsInputMutedForDevice(device_id)
diff --git a/ash/system/unified/quick_settings_slider.cc b/ash/system/unified/quick_settings_slider.cc
index dff06ca..9cd3094 100644
--- a/ash/system/unified/quick_settings_slider.cc
+++ b/ash/system/unified/quick_settings_slider.cc
@@ -92,10 +92,6 @@
 
 QuickSettingsSlider::~QuickSettingsSlider() = default;
 
-void QuickSettingsSlider::AddedToWidget() {
-  UpdateAccessibleValue();
-}
-
 void QuickSettingsSlider::SetSliderStyle(Style style) {
   if (slider_style_ == style)
     return;
@@ -106,7 +102,6 @@
     SetFocusBehavior(FocusBehavior::NEVER);
 
   SchedulePaint();
-  UpdateAccessibleValue();
 }
 
 gfx::Rect QuickSettingsSlider::GetInactiveRadioSliderRect() {
@@ -122,6 +117,24 @@
   return kInactiveRadioSliderRoundedRadius + kFocusOffset;
 }
 
+void QuickSettingsSlider::GetAccessibleNodeData(ui::AXNodeData* node_data) {
+  View::GetAccessibleNodeData(node_data);
+  std::u16string volume_level = base::UTF8ToUTF16(
+      base::StringPrintf("%d%%", static_cast<int>(GetValue() * 100 + 0.5)));
+
+  if (is_toggleable_volume_slider_) {
+    std::u16string message = l10n_util::GetStringFUTF16(
+        slider_style_ == Style::kDefaultMuted
+            ? IDS_ASH_STATUS_TRAY_VOLUME_SLIDER_MUTED_ACCESSIBILITY_ANNOUNCEMENT
+            : IDS_ASH_STATUS_TRAY_VOLUME_SLIDER_ACCESSIBILITY_ANNOUNCEMENT,
+        volume_level);
+
+    node_data->SetValue(message);
+  } else {
+    node_data->SetValue(volume_level);
+  }
+}
+
 SkColor QuickSettingsSlider::GetThumbColor() const {
   switch (slider_style_) {
     case Style::kDefault:
@@ -228,29 +241,6 @@
   SchedulePaint();
 }
 
-void QuickSettingsSlider::UpdateAccessibleValue() {
-  std::u16string volume_level = base::UTF8ToUTF16(
-      base::StringPrintf("%d%%", static_cast<int>(GetValue() * 100 + 0.5)));
-
-  if (is_toggleable_volume_slider_) {
-    std::u16string message = l10n_util::GetStringFUTF16(
-        slider_style_ == Style::kDefaultMuted
-            ? IDS_ASH_STATUS_TRAY_VOLUME_SLIDER_MUTED_ACCESSIBILITY_ANNOUNCEMENT
-            : IDS_ASH_STATUS_TRAY_VOLUME_SLIDER_ACCESSIBILITY_ANNOUNCEMENT,
-        volume_level);
-
-    GetViewAccessibility().SetValue(message);
-  } else {
-    GetViewAccessibility().SetValue(volume_level);
-  }
-}
-
-void QuickSettingsSlider::SetIsToggleableVolumeSlider(
-    bool is_toggleable_volume_slider) {
-  is_toggleable_volume_slider_ = is_toggleable_volume_slider;
-  UpdateAccessibleValue();
-}
-
 ReadOnlySlider::ReadOnlySlider(Style slider_style)
     : QuickSettingsSlider(/*listener=*/nullptr, slider_style) {}
 
diff --git a/ash/system/unified/quick_settings_slider.h b/ash/system/unified/quick_settings_slider.h
index ec05a40..ced1d12 100644
--- a/ash/system/unified/quick_settings_slider.h
+++ b/ash/system/unified/quick_settings_slider.h
@@ -74,15 +74,16 @@
   gfx::Rect GetInactiveRadioSliderRect();
   int GetInactiveRadioSliderRoundedCornerRadius();
 
-  void SetIsToggleableVolumeSlider(bool is_toggleable_volume_slider);
+  void set_is_toggleable_volume_slider(bool is_toggleable_volume_slider) {
+    is_toggleable_volume_slider_ = is_toggleable_volume_slider;
+  }
   bool is_toggleable_volume_slider() { return is_toggleable_volume_slider_; }
 
  private:
   // views::Slider:
+  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   SkColor GetThumbColor() const override;
   SkColor GetTroughColor() const override;
-  void AddedToWidget() override;
-  void UpdateAccessibleValue() override;
 
   // views::View:
   void OnPaint(gfx::Canvas* canvas) override;
diff --git a/ash/system/unified/unified_system_tray_controller.cc b/ash/system/unified/unified_system_tray_controller.cc
index 9dc39bc..807fce3 100644
--- a/ash/system/unified/unified_system_tray_controller.cc
+++ b/ash/system/unified/unified_system_tray_controller.cc
@@ -128,7 +128,7 @@
       qs_view->AddSliderView(volume_slider_controller_->CreateView());
   views::AsViewClass<QuickSettingsSlider>(
       views::AsViewClass<UnifiedVolumeView>(unified_volume_view_)->slider())
-      ->SetIsToggleableVolumeSlider(true);
+      ->set_is_toggleable_volume_slider(true);
 
   brightness_slider_controller_ =
       std::make_unique<UnifiedBrightnessSliderController>(
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 97bec1f..a3adebb 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2387,11 +2387,8 @@
       "trace_event/trace_event.h",
       "trace_event/trace_event_impl.cc",
       "trace_event/trace_event_impl.h",
-      "trace_event/trace_event_memory_overhead.cc",
-      "trace_event/trace_event_memory_overhead.h",
       "trace_event/trace_log.cc",
       "trace_event/trace_log.h",
-      "trace_event/trace_log_constants.cc",
       "trace_event/traced_value.cc",
       "trace_event/traced_value.h",
       "trace_event/traced_value_support.h",
@@ -2399,8 +2396,6 @@
       "trace_event/tracing_agent.h",
       "trace_event/typed_macros.h",
       "trace_event/typed_macros_embedder_support.h",
-      "trace_event/typed_macros_internal.cc",
-      "trace_event/typed_macros_internal.h",
       "tracing/perfetto_platform.cc",
       "tracing/perfetto_platform.h",
       "tracing/perfetto_task_runner.cc",
@@ -4150,7 +4145,6 @@
       "trace_event/trace_event_unittest.cc",
       "trace_event/traced_value_support_unittest.cc",
       "trace_event/traced_value_unittest.cc",
-      "trace_event/typed_macros_unittest.cc",
       "tracing/perfetto_task_runner_unittest.cc",
     ]
 
diff --git a/base/containers/buffer_iterator_unittest.cc b/base/containers/buffer_iterator_unittest.cc
index 15996e7..f8e1644 100644
--- a/base/containers/buffer_iterator_unittest.cc
+++ b/base/containers/buffer_iterator_unittest.cc
@@ -77,9 +77,9 @@
   }
 }
 
-TEST(BufferIteratorTest, ObjectSizeOverflow) {
+TEST(BufferIteratorTest, ObjectDoesNotFit) {
   char buffer[64];
-  BufferIterator<char> iterator(buffer, std::numeric_limits<size_t>::max());
+  BufferIterator<char> iterator(buffer);
 
   auto* pointer = iterator.Object<uint64_t>();
   EXPECT_TRUE(pointer);
diff --git a/base/threading/hang_watcher_unittest.cc b/base/threading/hang_watcher_unittest.cc
index 042152fa..dd59e16 100644
--- a/base/threading/hang_watcher_unittest.cc
+++ b/base/threading/hang_watcher_unittest.cc
@@ -284,7 +284,9 @@
   ASSERT_FALSE(hang_event_.IsSignaled());
 }
 
-TEST_F(HangWatcherTest, NewInnerWatchHangsInScopeAfterInvalidationDetectsHang) {
+// TODO(crbug.com/385732561): Test is flaky.
+TEST_F(HangWatcherTest,
+       DISABLED_NewInnerWatchHangsInScopeAfterInvalidationDetectsHang) {
   // Register the main test thread for hang watching.
   auto unregister_thread_closure =
       HangWatcher::RegisterThread(base::HangWatcher::ThreadType::kMainThread);
diff --git a/base/trace_event/log_message.cc b/base/trace_event/log_message.cc
index c6dcd56..3c848fd7 100644
--- a/base/trace_event/log_message.cc
+++ b/base/trace_event/log_message.cc
@@ -31,12 +31,6 @@
   out->append("}");
 }
 
-void LogMessage::EstimateTraceMemoryOverhead(
-    TraceEventMemoryOverhead* overhead) {
-  overhead->Add(TraceEventMemoryOverhead::kOther, sizeof(*this));
-  overhead->AddString(message_);
-}
-
 bool LogMessage::AppendToProto(ProtoAppender* appender) const {
   // LogMessage is handled in a special way in
   // track_event_thread_local_event_sink.cc in the function |AddTraceEvent|, so
diff --git a/base/trace_event/log_message.h b/base/trace_event/log_message.h
index 0e717a52..deca85a 100644
--- a/base/trace_event/log_message.h
+++ b/base/trace_event/log_message.h
@@ -29,8 +29,6 @@
   void AppendAsTraceFormat(std::string* out) const override;
   bool AppendToProto(ProtoAppender* appender) const override;
 
-  void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead) override;
-
   const char* file() const { return file_; }
   const std::string& message() const LIFETIME_BOUND { return message_; }
   int line_number() const { return line_number_; }
diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc
index 4d59e27..ba433195 100644
--- a/base/trace_event/memory_dump_manager.cc
+++ b/base/trace_event/memory_dump_manager.cc
@@ -336,10 +336,6 @@
 void MemoryDumpManager::ContinueAsyncProcessDump(
     ProcessMemoryDumpAsyncState* owned_pmd_async_state) {
   HEAP_PROFILER_SCOPED_IGNORE;
-  // Initalizes the ThreadLocalEventBuffer to guarantee that the TRACE_EVENTs
-  // in the PostTask below don't end up registering their own dump providers
-  // (for discounting trace memory overhead) while holding the |lock_|.
-  TraceLog::GetInstance()->InitializeThreadLocalEventBufferIfSupported();
 
   // In theory |owned_pmd_async_state| should be a unique_ptr. The only reason
   // why it isn't is because of the corner case logic of |did_post_task|
diff --git a/base/trace_event/process_memory_dump.cc b/base/trace_event/process_memory_dump.cc
index 86f6875a..1fe8b26 100644
--- a/base/trace_event/process_memory_dump.cc
+++ b/base/trace_event/process_memory_dump.cc
@@ -353,17 +353,6 @@
   return GetAllocatorDump(GetSharedGlobalAllocatorDumpName(guid));
 }
 
-void ProcessMemoryDump::DumpHeapUsage(
-    const std::unordered_map<base::trace_event::AllocationContext,
-                             base::trace_event::AllocationMetrics>&
-        metrics_by_context,
-    base::trace_event::TraceEventMemoryOverhead& overhead,
-    const char* allocator_name) {
-  std::string base_name = base::StringPrintf("tracing/heap_profiler_%s",
-                                             allocator_name);
-  overhead.DumpInto(base_name.c_str(), this);
-}
-
 void ProcessMemoryDump::SetAllocatorDumpsForSerialization(
     std::vector<std::unique_ptr<MemoryAllocatorDump>> dumps) {
   DCHECK(allocator_dumps_.empty());
diff --git a/base/trace_event/process_memory_dump.h b/base/trace_event/process_memory_dump.h
index b13329c..d991579 100644
--- a/base/trace_event/process_memory_dump.h
+++ b/base/trace_event/process_memory_dump.h
@@ -41,7 +41,6 @@
 
 namespace trace_event {
 
-class TraceEventMemoryOverhead;
 class TracedValue;
 
 // ProcessMemoryDump is as a strongly typed container which holds the dumps
@@ -165,14 +164,6 @@
   std::vector<MemoryAllocatorDumpEdge> GetAllEdgesForSerialization() const;
   void SetAllEdgesForSerialization(const std::vector<MemoryAllocatorDumpEdge>&);
 
-  // Dumps heap usage with |allocator_name|.
-  void DumpHeapUsage(
-      const std::unordered_map<base::trace_event::AllocationContext,
-                               base::trace_event::AllocationMetrics>&
-          metrics_by_context,
-      base::trace_event::TraceEventMemoryOverhead& overhead,
-      const char* allocator_name);
-
   // Adds an ownership relationship between two MemoryAllocatorDump(s) with the
   // semantics: |source| owns |target|, and has the effect of attributing
   // the memory usage of |target| to |source|. |importance| is optional and
diff --git a/base/trace_event/process_memory_dump_unittest.cc b/base/trace_event/process_memory_dump_unittest.cc
index d651f4f..e625874e 100644
--- a/base/trace_event/process_memory_dump_unittest.cc
+++ b/base/trace_event/process_memory_dump_unittest.cc
@@ -165,70 +165,6 @@
   pmd1.reset();
 }
 
-TEST(ProcessMemoryDumpTest, TakeAllDumpsFrom) {
-  std::unique_ptr<TracedValue> traced_value(new TracedValue);
-  std::unordered_map<AllocationContext, AllocationMetrics> metrics_by_context;
-  metrics_by_context[AllocationContext()] = {1, 1};
-  TraceEventMemoryOverhead overhead;
-
-  std::unique_ptr<ProcessMemoryDump> pmd1(
-      new ProcessMemoryDump(kDetailedDumpArgs));
-  auto* mad1_1 = pmd1->CreateAllocatorDump("pmd1/mad1");
-  auto* mad1_2 = pmd1->CreateAllocatorDump("pmd1/mad2");
-  pmd1->AddOwnershipEdge(mad1_1->guid(), mad1_2->guid());
-  pmd1->DumpHeapUsage(metrics_by_context, overhead, "pmd1/heap_dump1");
-  pmd1->DumpHeapUsage(metrics_by_context, overhead, "pmd1/heap_dump2");
-
-  std::unique_ptr<ProcessMemoryDump> pmd2(
-      new ProcessMemoryDump(kDetailedDumpArgs));
-  auto* mad2_1 = pmd2->CreateAllocatorDump("pmd2/mad1");
-  auto* mad2_2 = pmd2->CreateAllocatorDump("pmd2/mad2");
-  pmd2->AddOwnershipEdge(mad2_1->guid(), mad2_2->guid());
-  pmd2->DumpHeapUsage(metrics_by_context, overhead, "pmd2/heap_dump1");
-  pmd2->DumpHeapUsage(metrics_by_context, overhead, "pmd2/heap_dump2");
-
-  MemoryAllocatorDumpGuid shared_mad_guid1(1);
-  MemoryAllocatorDumpGuid shared_mad_guid2(2);
-  auto* shared_mad1 = pmd2->CreateSharedGlobalAllocatorDump(shared_mad_guid1);
-  auto* shared_mad2 =
-      pmd2->CreateWeakSharedGlobalAllocatorDump(shared_mad_guid2);
-
-  pmd1->TakeAllDumpsFrom(pmd2.get());
-
-  // Make sure that pmd2 is empty but still usable after it has been emptied.
-  ASSERT_TRUE(pmd2->allocator_dumps().empty());
-  ASSERT_TRUE(pmd2->allocator_dumps_edges().empty());
-  pmd2->CreateAllocatorDump("pmd2/this_mad_stays_with_pmd2");
-  ASSERT_EQ(1u, pmd2->allocator_dumps().size());
-  ASSERT_EQ(1u, pmd2->allocator_dumps().count("pmd2/this_mad_stays_with_pmd2"));
-  pmd2->AddOwnershipEdge(MemoryAllocatorDumpGuid(42),
-                         MemoryAllocatorDumpGuid(4242));
-
-  // Check that calling serialization routines doesn't cause a crash.
-  pmd2->SerializeAllocatorDumpsInto(traced_value.get());
-
-  // Free the |pmd2| to check that the memory ownership of the two MAD(s)
-  // has been transferred to |pmd1|.
-  pmd2.reset();
-
-  // Now check that |pmd1| has been effectively merged.
-  ASSERT_EQ(6u, pmd1->allocator_dumps().size());
-  ASSERT_EQ(1u, pmd1->allocator_dumps().count("pmd1/mad1"));
-  ASSERT_EQ(1u, pmd1->allocator_dumps().count("pmd1/mad2"));
-  ASSERT_EQ(1u, pmd1->allocator_dumps().count("pmd2/mad1"));
-  ASSERT_EQ(1u, pmd1->allocator_dumps().count("pmd1/mad2"));
-  ASSERT_EQ(2u, pmd1->allocator_dumps_edges().size());
-  ASSERT_EQ(shared_mad1, pmd1->GetSharedGlobalAllocatorDump(shared_mad_guid1));
-  ASSERT_EQ(shared_mad2, pmd1->GetSharedGlobalAllocatorDump(shared_mad_guid2));
-  ASSERT_TRUE(MemoryAllocatorDump::Flags::kWeak & shared_mad2->flags());
-
-  // Check that calling serialization routines doesn't cause a crash.
-  traced_value = std::make_unique<TracedValue>();
-  pmd1->SerializeAllocatorDumpsInto(traced_value.get());
-
-  pmd1.reset();
-}
-
 TEST(ProcessMemoryDumpTest, OverrideOwnershipEdge) {
   std::unique_ptr<ProcessMemoryDump> pmd(
       new ProcessMemoryDump(kDetailedDumpArgs));
diff --git a/base/trace_event/trace_arguments.h b/base/trace_event/trace_arguments.h
index 418fee9..6e6b2a6b 100644
--- a/base/trace_event/trace_arguments.h
+++ b/base/trace_event/trace_arguments.h
@@ -140,8 +140,6 @@
 
 namespace trace_event {
 
-class TraceEventMemoryOverhead;
-
 // For any argument of type TRACE_VALUE_TYPE_CONVERTABLE the provided
 // class must implement this interface. Note that unlike other values,
 // these objects will be owned by the TraceArguments instance that points
@@ -176,8 +174,6 @@
   };
   virtual bool AppendToProto(ProtoAppender* appender) const;
 
-  virtual void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead);
-
   // DebugAnnotation implementation.
   void Add(perfetto::protos::pbzero::DebugAnnotation*) const override;
 };
@@ -552,12 +548,6 @@
   // storage area.
   bool Contains(const TraceArguments& args) const;
 
-  // Return an estimate of the memory overhead of this instance. This doesn't
-  // count the size of |data_| itself.
-  constexpr size_t EstimateTraceMemoryOverhead() const {
-    return data_ ? sizeof(size_t) + data_->size : 0u;
-  }
-
  private:
   // Heap allocated data block (variable size), made of:
   //
diff --git a/base/trace_event/trace_arguments_unittest.cc b/base/trace_event/trace_arguments_unittest.cc
index c166c906..cb81ff7e 100644
--- a/base/trace_event/trace_arguments_unittest.cc
+++ b/base/trace_event/trace_arguments_unittest.cc
@@ -80,15 +80,6 @@
   EXPECT_EQ(storage.data() + kSize, storage.end());
 }
 
-TEST(TraceArguments, StringStorageEstimateTraceMemoryOverhead) {
-  StringStorage storage;
-  EXPECT_EQ(0u, storage.EstimateTraceMemoryOverhead());
-
-  const size_t kSize = 128;
-  storage.Reset(kSize);
-  EXPECT_EQ(sizeof(size_t) + kSize, storage.EstimateTraceMemoryOverhead());
-}
-
 static void CheckJSONFor(TraceValue v, char type, const char* expected) {
   std::string out;
   v.AppendAsJSON(type, &out);
diff --git a/base/trace_event/trace_buffer.cc b/base/trace_event/trace_buffer.cc
index d864c7d..1f35d24 100644
--- a/base/trace_event/trace_buffer.cc
+++ b/base/trace_event/trace_buffer.cc
@@ -11,300 +11,12 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
-#include "base/containers/heap_array.h"
 #include "base/functional/bind.h"
-#include "base/trace_event/heap_profiler.h"
-#include "base/trace_event/trace_event_impl.h"
 
 namespace base {
 namespace trace_event {
 
-namespace {
-
-class TraceBufferRingBuffer : public TraceBuffer {
- public:
-  TraceBufferRingBuffer(size_t max_chunks)
-      : max_chunks_(max_chunks),
-        recyclable_chunks_queue_(HeapArray<size_t>::Uninit(queue_capacity())),
-        queue_tail_(max_chunks) {
-    chunks_.reserve(max_chunks);
-    for (size_t i = 0; i < max_chunks; ++i)
-      recyclable_chunks_queue_[i] = i;
-  }
-
-  TraceBufferRingBuffer(const TraceBufferRingBuffer&) = delete;
-  TraceBufferRingBuffer& operator=(const TraceBufferRingBuffer&) = delete;
-
-  std::unique_ptr<TraceBufferChunk> GetChunk(size_t* index) override {
-    HEAP_PROFILER_SCOPED_IGNORE;
-
-    // Because the number of threads is much less than the number of chunks,
-    // the queue should never be empty.
-    DCHECK(!QueueIsEmpty());
-
-    *index = recyclable_chunks_queue_[queue_head_];
-    queue_head_ = NextQueueIndex(queue_head_);
-    current_iteration_index_ = queue_head_;
-
-    if (*index >= chunks_.size())
-      chunks_.resize(*index + 1);
-
-    TraceBufferChunk* chunk = chunks_[*index].release();
-    chunks_[*index] = nullptr;  // Put nullptr in the slot of a in-flight chunk.
-    if (chunk)
-      chunk->Reset(current_chunk_seq_++);
-    else
-      chunk = new TraceBufferChunk(current_chunk_seq_++);
-
-    return std::unique_ptr<TraceBufferChunk>(chunk);
-  }
-
-  void ReturnChunk(size_t index,
-                   std::unique_ptr<TraceBufferChunk> chunk) override {
-    // When this method is called, the queue should not be full because it
-    // can contain all chunks including the one to be returned.
-    DCHECK(!QueueIsFull());
-    DCHECK(chunk);
-    DCHECK_LT(index, chunks_.size());
-    DCHECK(!chunks_[index]);
-    chunks_[index] = std::move(chunk);
-    recyclable_chunks_queue_[queue_tail_] = index;
-    queue_tail_ = NextQueueIndex(queue_tail_);
-  }
-
-  bool IsFull() const override { return false; }
-
-  size_t Size() const override {
-    // This is approximate because not all of the chunks are full.
-    return chunks_.size() * TraceBufferChunk::kTraceBufferChunkSize;
-  }
-
-  size_t Capacity() const override {
-    return max_chunks_ * TraceBufferChunk::kTraceBufferChunkSize;
-  }
-
-  TraceEvent* GetEventByHandle(TraceEventHandle handle) override {
-    if (handle.chunk_index >= chunks_.size())
-      return nullptr;
-    TraceBufferChunk* chunk = chunks_[handle.chunk_index].get();
-    if (!chunk || chunk->seq() != handle.chunk_seq)
-      return nullptr;
-    return chunk->GetEventAt(handle.event_index);
-  }
-
-  const TraceBufferChunk* NextChunk() override {
-    if (chunks_.empty())
-      return nullptr;
-
-    while (current_iteration_index_ != queue_tail_) {
-      size_t chunk_index = recyclable_chunks_queue_[current_iteration_index_];
-      current_iteration_index_ = NextQueueIndex(current_iteration_index_);
-      if (chunk_index >= chunks_.size())  // Skip uninitialized chunks.
-        continue;
-      DCHECK(chunks_[chunk_index]);
-      return chunks_[chunk_index].get();
-    }
-    return nullptr;
-  }
-
-  void EstimateTraceMemoryOverhead(
-      TraceEventMemoryOverhead* overhead) override {
-    overhead->Add(TraceEventMemoryOverhead::kTraceBuffer, sizeof(*this));
-    for (size_t queue_index = queue_head_; queue_index != queue_tail_;
-         queue_index = NextQueueIndex(queue_index)) {
-      size_t chunk_index = recyclable_chunks_queue_[queue_index];
-      if (chunk_index >= chunks_.size())  // Skip uninitialized chunks.
-        continue;
-      chunks_[chunk_index]->EstimateTraceMemoryOverhead(overhead);
-    }
-  }
-
- private:
-  bool QueueIsEmpty() const { return queue_head_ == queue_tail_; }
-
-  size_t QueueSize() const {
-    return queue_tail_ > queue_head_
-               ? queue_tail_ - queue_head_
-               : queue_tail_ + queue_capacity() - queue_head_;
-  }
-
-  bool QueueIsFull() const { return QueueSize() == queue_capacity() - 1; }
-
-  size_t queue_capacity() const {
-    // One extra space to help distinguish full state and empty state.
-    return max_chunks_ + 1;
-  }
-
-  size_t NextQueueIndex(size_t index) const {
-    index++;
-    if (index >= queue_capacity())
-      index = 0;
-    return index;
-  }
-
-  size_t max_chunks_;
-  std::vector<std::unique_ptr<TraceBufferChunk>> chunks_;
-
-  HeapArray<size_t> recyclable_chunks_queue_;
-  size_t queue_head_ = 0;
-  size_t queue_tail_;
-
-  size_t current_iteration_index_ = 0;
-  uint32_t current_chunk_seq_ = 1;
-};
-
-class TraceBufferVector : public TraceBuffer {
- public:
-  TraceBufferVector(size_t max_chunks)
-      : in_flight_chunk_count_(0),
-        current_iteration_index_(0),
-        max_chunks_(max_chunks) {
-    chunks_.reserve(max_chunks_);
-  }
-
-  TraceBufferVector(const TraceBufferVector&) = delete;
-  TraceBufferVector& operator=(const TraceBufferVector&) = delete;
-
-  std::unique_ptr<TraceBufferChunk> GetChunk(size_t* index) override {
-    HEAP_PROFILER_SCOPED_IGNORE;
-
-    // This function may be called when adding normal events or indirectly from
-    // AddMetadataEventsWhileLocked(). We can not DECHECK(!IsFull()) because we
-    // have to add the metadata events and flush thread-local buffers even if
-    // the buffer is full.
-    *index = chunks_.size();
-    // Put nullptr in the slot of a in-flight chunk.
-    chunks_.push_back(nullptr);
-    ++in_flight_chunk_count_;
-    // + 1 because zero chunk_seq is not allowed.
-    return std::make_unique<TraceBufferChunk>(static_cast<uint32_t>(*index) +
-                                              1);
-  }
-
-  void ReturnChunk(size_t index,
-                   std::unique_ptr<TraceBufferChunk> chunk) override {
-    DCHECK_GT(in_flight_chunk_count_, 0u);
-    DCHECK_LT(index, chunks_.size());
-    DCHECK(!chunks_[index]);
-    --in_flight_chunk_count_;
-    chunks_[index] = std::move(chunk);
-  }
-
-  bool IsFull() const override { return chunks_.size() >= max_chunks_; }
-
-  size_t Size() const override {
-    // This is approximate because not all of the chunks are full.
-    return chunks_.size() * TraceBufferChunk::kTraceBufferChunkSize;
-  }
-
-  size_t Capacity() const override {
-    return max_chunks_ * TraceBufferChunk::kTraceBufferChunkSize;
-  }
-
-  TraceEvent* GetEventByHandle(TraceEventHandle handle) override {
-    if (handle.chunk_index >= chunks_.size())
-      return nullptr;
-    TraceBufferChunk* chunk = chunks_[handle.chunk_index].get();
-    if (!chunk || chunk->seq() != handle.chunk_seq)
-      return nullptr;
-    return chunk->GetEventAt(handle.event_index);
-  }
-
-  const TraceBufferChunk* NextChunk() override {
-    while (current_iteration_index_ < chunks_.size()) {
-      // Skip in-flight chunks.
-      const TraceBufferChunk* chunk = chunks_[current_iteration_index_++].get();
-      if (chunk)
-        return chunk;
-    }
-    return nullptr;
-  }
-
-  void EstimateTraceMemoryOverhead(
-      TraceEventMemoryOverhead* overhead) override {
-    const size_t chunks_ptr_vector_allocated_size =
-        sizeof(*this) + max_chunks_ * sizeof(decltype(chunks_)::value_type);
-    const size_t chunks_ptr_vector_resident_size =
-        sizeof(*this) + chunks_.size() * sizeof(decltype(chunks_)::value_type);
-    overhead->Add(TraceEventMemoryOverhead::kTraceBuffer,
-                  chunks_ptr_vector_allocated_size,
-                  chunks_ptr_vector_resident_size);
-    for (size_t i = 0; i < chunks_.size(); ++i) {
-      TraceBufferChunk* chunk = chunks_[i].get();
-      // Skip the in-flight (nullptr) chunks. They will be accounted by the
-      // per-thread-local dumpers, see ThreadLocalEventBuffer::OnMemoryDump.
-      if (chunk)
-        chunk->EstimateTraceMemoryOverhead(overhead);
-    }
-  }
-
- private:
-  size_t in_flight_chunk_count_;
-  size_t current_iteration_index_;
-  size_t max_chunks_;
-  std::vector<std::unique_ptr<TraceBufferChunk>> chunks_;
-};
-
-}  // namespace
-
-TraceBufferChunk::TraceBufferChunk(uint32_t seq) : next_free_(0), seq_(seq) {}
-
-TraceBufferChunk::~TraceBufferChunk() = default;
-
-void TraceBufferChunk::Reset(uint32_t new_seq) {
-  for (size_t i = 0; i < next_free_; ++i)
-    chunk_[i].Reset();
-  next_free_ = 0;
-  seq_ = new_seq;
-  cached_overhead_estimate_.reset();
-}
-
-TraceEvent* TraceBufferChunk::AddTraceEvent(size_t* event_index) {
-  DCHECK(!IsFull());
-  *event_index = next_free_++;
-  return &chunk_[*event_index];
-}
-
-void TraceBufferChunk::EstimateTraceMemoryOverhead(
-    TraceEventMemoryOverhead* overhead) {
-  if (!cached_overhead_estimate_) {
-    cached_overhead_estimate_ = std::make_unique<TraceEventMemoryOverhead>();
-
-    // When estimating the size of TraceBufferChunk, exclude the array of trace
-    // events, as they are computed individually below.
-    cached_overhead_estimate_->Add(TraceEventMemoryOverhead::kTraceBufferChunk,
-                                   sizeof(*this) - sizeof(chunk_));
-  }
-
-  const size_t num_cached_estimated_events =
-      cached_overhead_estimate_->GetCount(
-          TraceEventMemoryOverhead::kTraceEvent);
-  DCHECK_LE(num_cached_estimated_events, size());
-
-  if (IsFull() && num_cached_estimated_events == size()) {
-    overhead->Update(*cached_overhead_estimate_);
-    return;
-  }
-
-  for (size_t i = num_cached_estimated_events; i < size(); ++i)
-    chunk_[i].EstimateTraceMemoryOverhead(cached_overhead_estimate_.get());
-
-  if (IsFull()) {
-    cached_overhead_estimate_->AddSelf();
-  } else {
-    // The unused TraceEvents in |chunks_| are not cached. They will keep
-    // changing as new TraceEvents are added to this chunk, so they are
-    // computed on the fly.
-    const size_t num_unused_trace_events = capacity() - size();
-    overhead->Add(TraceEventMemoryOverhead::kUnusedTraceEvent,
-                  num_unused_trace_events * sizeof(TraceEvent));
-  }
-
-  overhead->Update(*cached_overhead_estimate_);
-}
-
 TraceResultBuffer::OutputCallback
 TraceResultBuffer::SimpleOutput::GetCallback() {
   return BindRepeating(&SimpleOutput::Append, Unretained(this));
@@ -339,13 +51,5 @@
   output_callback_.Run("]");
 }
 
-TraceBuffer* TraceBuffer::CreateTraceBufferRingBuffer(size_t max_chunks) {
-  return new TraceBufferRingBuffer(max_chunks);
-}
-
-TraceBuffer* TraceBuffer::CreateTraceBufferVectorOfSize(size_t max_chunks) {
-  return new TraceBufferVector(max_chunks);
-}
-
 }  // namespace trace_event
 }  // namespace base
diff --git a/base/trace_event/trace_buffer.h b/base/trace_event/trace_buffer.h
index ea213983..1178428 100644
--- a/base/trace_event/trace_buffer.h
+++ b/base/trace_event/trace_buffer.h
@@ -15,78 +15,11 @@
 
 #include "base/base_export.h"
 #include "base/check.h"
-#include "base/trace_event/trace_event.h"
-#include "base/trace_event/trace_event_impl.h"
+#include "base/functional/callback.h"
 
 namespace base {
-
 namespace trace_event {
 
-// TraceBufferChunk is the basic unit of TraceBuffer.
-class BASE_EXPORT TraceBufferChunk {
- public:
-  explicit TraceBufferChunk(uint32_t seq);
-  ~TraceBufferChunk();
-
-  void Reset(uint32_t new_seq);
-  TraceEvent* AddTraceEvent(size_t* event_index);
-  bool IsFull() const { return next_free_ == kTraceBufferChunkSize; }
-
-  uint32_t seq() const { return seq_; }
-  size_t capacity() const { return kTraceBufferChunkSize; }
-  size_t size() const { return next_free_; }
-
-  TraceEvent* GetEventAt(size_t index) {
-    DCHECK(index < size());
-    return &chunk_[index];
-  }
-  const TraceEvent* GetEventAt(size_t index) const {
-    DCHECK(index < size());
-    return &chunk_[index];
-  }
-
-  void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead);
-
-  // These values must be kept consistent with the numbers of bits of
-  // chunk_index and event_index fields in TraceEventHandle
-  // (in trace_event_impl.h).
-  static const size_t kMaxChunkIndex = (1u << 26) - 1;
-  static const size_t kTraceBufferChunkSize = 64;
-
- private:
-  size_t next_free_;
-  std::unique_ptr<TraceEventMemoryOverhead> cached_overhead_estimate_;
-  TraceEvent chunk_[kTraceBufferChunkSize];
-  uint32_t seq_;
-};
-
-// TraceBuffer holds the events as they are collected.
-class BASE_EXPORT TraceBuffer {
- public:
-  virtual ~TraceBuffer() = default;
-
-  virtual std::unique_ptr<TraceBufferChunk> GetChunk(size_t* index) = 0;
-  virtual void ReturnChunk(size_t index,
-                           std::unique_ptr<TraceBufferChunk> chunk) = 0;
-
-  virtual bool IsFull() const = 0;
-  virtual size_t Size() const = 0;
-  virtual size_t Capacity() const = 0;
-  virtual TraceEvent* GetEventByHandle(TraceEventHandle handle) = 0;
-
-  // For iteration. Each TraceBuffer can only be iterated once.
-  virtual const TraceBufferChunk* NextChunk() = 0;
-
-
-  // Computes an estimate of the size of the buffer, including all the retained
-  // objects.
-  virtual void EstimateTraceMemoryOverhead(
-      TraceEventMemoryOverhead* overhead) = 0;
-
-  static TraceBuffer* CreateTraceBufferRingBuffer(size_t max_chunks);
-  static TraceBuffer* CreateTraceBufferVectorOfSize(size_t max_chunks);
-};
-
 // TraceResultBuffer collects and converts trace fragments returned by TraceLog
 // to JSON output.
 class BASE_EXPORT TraceResultBuffer {
diff --git a/base/trace_event/trace_event.h b/base/trace_event/trace_event.h
index be6db0b..4719194 100644
--- a/base/trace_event/trace_event.h
+++ b/base/trace_event/trace_event.h
@@ -40,20 +40,6 @@
 //                    unsigned int flags)
 #define TRACE_EVENT_API_ADD_TRACE_EVENT trace_event_internal::AddTraceEvent
 
-// Add a trace event to the platform tracing system.
-// base::trace_event::TraceEventHandle
-// TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_BIND_ID(
-//                    char phase,
-//                    const unsigned char* category_group_enabled,
-//                    const char* name,
-//                    const char* scope,
-//                    uint64_t id,
-//                    uint64_t bind_id,
-//                    base::trace_event::TraceArguments* args,
-//                    unsigned int flags)
-#define TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_BIND_ID \
-  trace_event_internal::AddTraceEventWithBindId
-
 // Add a trace event to the platform tracing system overriding the pid.
 // The resulting event will have tid = pid == (process_id passed here).
 // base::trace_event::TraceEventHandle
@@ -93,26 +79,6 @@
 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
   trace_event_internal::UpdateTraceEventDuration
 
-// Adds a metadata event to the trace log. The |AppendValueAsTraceFormat| method
-// on the convertable value will be called at flush time.
-// TRACE_EVENT_API_ADD_METADATA_EVENT(
-//     const unsigned char* category_group_enabled,
-//     const char* event_name,
-//     const char* arg_name,
-//     std::unique_ptr<ConvertableToTraceFormat> arg_value)
-#define TRACE_EVENT_API_ADD_METADATA_EVENT \
-    trace_event_internal::AddMetadataEvent
-
-// Defines atomic operations used internally by the tracing system.
-// Acquire/release barriers are important here: crbug.com/1330114#c8.
-#define TRACE_EVENT_API_ATOMIC_WORD std::atomic<intptr_t>
-#define TRACE_EVENT_API_ATOMIC_LOAD(var) (var).load(std::memory_order_acquire)
-#define TRACE_EVENT_API_ATOMIC_STORE(var, value) \
-  (var).store((value), std::memory_order_release)
-
-// Defines visibility for classes in trace_event.h
-#define TRACE_EVENT_API_CLASS_EXPORT BASE_EXPORT
-
 ////////////////////////////////////////////////////////////////////////////////
 
 namespace trace_event_internal {
@@ -123,94 +89,6 @@
 const std::nullptr_t kGlobalScope = nullptr;
 const uint64_t kNoId = 0;
 
-// TraceID encapsulates an ID that can either be an integer or pointer.
-class BASE_EXPORT TraceID {
- public:
-  // Can be combined with WithScope.
-  class LocalId {
-   public:
-    explicit LocalId(const void* raw_id)
-        : raw_id_(static_cast<uint64_t>(reinterpret_cast<uintptr_t>(raw_id))) {}
-    explicit LocalId(uint64_t raw_id) : raw_id_(raw_id) {}
-    uint64_t raw_id() const { return raw_id_; }
-
-   private:
-    uint64_t raw_id_;
-  };
-
-  // Can be combined with WithScope.
-  class GlobalId {
-   public:
-    explicit GlobalId(uint64_t raw_id) : raw_id_(raw_id) {}
-    uint64_t raw_id() const { return raw_id_; }
-
-   private:
-    uint64_t raw_id_;
-  };
-
-  class WithScope {
-   public:
-    WithScope(const char* scope, uint64_t raw_id)
-        : scope_(scope), raw_id_(raw_id) {}
-    WithScope(const char* scope, LocalId local_id)
-        : scope_(scope), raw_id_(local_id.raw_id()) {
-      id_flags_ = TRACE_EVENT_FLAG_HAS_LOCAL_ID;
-    }
-    WithScope(const char* scope, GlobalId global_id)
-        : scope_(scope), raw_id_(global_id.raw_id()) {
-      id_flags_ = TRACE_EVENT_FLAG_HAS_GLOBAL_ID;
-    }
-    uint64_t raw_id() const { return raw_id_; }
-    const char* scope() const { return scope_; }
-    unsigned int id_flags() const { return id_flags_; }
-
-   private:
-    const char* scope_ = nullptr;
-    uint64_t raw_id_;
-    unsigned int id_flags_ = TRACE_EVENT_FLAG_HAS_ID;
-  };
-
-  explicit TraceID(const void* raw_id)
-      : raw_id_(static_cast<uint64_t>(reinterpret_cast<uintptr_t>(raw_id))) {
-    id_flags_ = TRACE_EVENT_FLAG_HAS_LOCAL_ID;
-  }
-  explicit TraceID(unsigned long long raw_id)
-      : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(unsigned long raw_id)
-      : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(unsigned int raw_id)
-      : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(unsigned short raw_id)
-      : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(unsigned char raw_id)
-      : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(long long raw_id) : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(long raw_id) : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(int raw_id) : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(short raw_id) : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(signed char raw_id)
-      : raw_id_(static_cast<uint64_t>(raw_id)) {}
-  explicit TraceID(LocalId raw_id) : raw_id_(raw_id.raw_id()) {
-    id_flags_ = TRACE_EVENT_FLAG_HAS_LOCAL_ID;
-  }
-  explicit TraceID(GlobalId raw_id) : raw_id_(raw_id.raw_id()) {
-    id_flags_ = TRACE_EVENT_FLAG_HAS_GLOBAL_ID;
-  }
-  explicit TraceID(WithScope scoped_id)
-      : scope_(scoped_id.scope()),
-        raw_id_(scoped_id.raw_id()),
-        id_flags_(scoped_id.id_flags()) {}
-
-  uint64_t raw_id() const { return raw_id_; }
-  const char* scope() const { return scope_; }
-  unsigned int id_flags() const { return id_flags_; }
-
- private:
-  const char* scope_ = nullptr;
-  uint64_t raw_id_;
-  unsigned int id_flags_ = TRACE_EVENT_FLAG_HAS_ID;
-};
-
 // These functions all internally call
 // base::trace_event::TraceLog::GetInstance() then call the method with the same
 // name on it. This is used to reduce the generated machine code at each
@@ -226,16 +104,6 @@
               unsigned int flags);
 
 base::trace_event::TraceEventHandle BASE_EXPORT
-AddTraceEventWithBindId(char phase,
-                        const unsigned char* category_group_enabled,
-                        const char* name,
-                        const char* scope,
-                        uint64_t id,
-                        uint64_t bind_id,
-                        base::trace_event::TraceArguments* args,
-                        unsigned int flags);
-
-base::trace_event::TraceEventHandle BASE_EXPORT
 AddTraceEventWithProcessId(char phase,
                            const unsigned char* category_group_enabled,
                            const char* name,
@@ -252,18 +120,6 @@
     const char* name,
     const char* scope,
     uint64_t id,
-    base::PlatformThreadId thread_id,
-    const base::TimeTicks& timestamp,
-    base::trace_event::TraceArguments* args,
-    unsigned int flags);
-
-base::trace_event::TraceEventHandle BASE_EXPORT
-AddTraceEventWithThreadIdAndTimestamp(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
     uint64_t bind_id,
     base::PlatformThreadId thread_id,
     const base::TimeTicks& timestamp,
@@ -282,156 +138,11 @@
     const base::ThreadTicks& thread_timestamp,
     unsigned int flags);
 
-void BASE_EXPORT AddMetadataEvent(const unsigned char* category_group_enabled,
-                                  const char* name,
-                                  base::trace_event::TraceArguments* args,
-                                  unsigned int flags);
-
-int BASE_EXPORT GetNumTracesRecorded();
-
 void BASE_EXPORT
 UpdateTraceEventDuration(const unsigned char* category_group_enabled,
                          const char* name,
                          base::trace_event::TraceEventHandle handle);
 
-void BASE_EXPORT
-UpdateTraceEventDurationExplicit(const unsigned char* category_group_enabled,
-                                 const char* name,
-                                 base::trace_event::TraceEventHandle handle,
-                                 base::PlatformThreadId thread_id,
-                                 bool explicit_timestamps,
-                                 const base::TimeTicks& now,
-                                 const base::ThreadTicks& thread_now);
-
-// These AddTraceEvent and AddTraceEventWithThreadIdAndTimestamp template
-// functions are defined here instead of in the macro, because the arg_values
-// could be temporary objects, such as `std::string`. In order to store
-// pointers to the internal c_str and pass through to the tracing API,
-// the arg_values must live throughout these procedures.
-
-template <class ARG1_TYPE>
-inline base::trace_event::TraceEventHandle
-AddTraceEventWithThreadIdAndTimestamp(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    base::PlatformThreadId thread_id,
-    const base::TimeTicks& timestamp,
-    unsigned int flags,
-    uint64_t bind_id,
-    const char* arg1_name,
-    ARG1_TYPE&& arg1_val) {
-  base::trace_event::TraceArguments args(arg1_name,
-                                         std::forward<ARG1_TYPE>(arg1_val));
-  return TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
-      phase, category_group_enabled, name, scope, id, bind_id, thread_id,
-      timestamp, &args, flags);
-}
-
-template <class ARG1_TYPE, class ARG2_TYPE>
-inline base::trace_event::TraceEventHandle
-AddTraceEventWithThreadIdAndTimestamp(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    base::PlatformThreadId thread_id,
-    const base::TimeTicks& timestamp,
-    unsigned int flags,
-    uint64_t bind_id,
-    const char* arg1_name,
-    ARG1_TYPE&& arg1_val,
-    const char* arg2_name,
-    ARG2_TYPE&& arg2_val) {
-  base::trace_event::TraceArguments args(
-      arg1_name, std::forward<ARG1_TYPE>(arg1_val), arg2_name,
-      std::forward<ARG2_TYPE>(arg2_val));
-  return TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
-      phase, category_group_enabled, name, scope, id, bind_id, thread_id,
-      timestamp, &args, flags);
-}
-
-inline base::trace_event::TraceEventHandle
-AddTraceEventWithThreadIdAndTimestamp(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    base::PlatformThreadId thread_id,
-    const base::TimeTicks& timestamp,
-    unsigned int flags,
-    uint64_t bind_id) {
-  return TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
-      phase, category_group_enabled, name, scope, id, bind_id, thread_id,
-      timestamp, nullptr, flags);
-}
-
-inline base::trace_event::TraceEventHandle AddTraceEvent(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    unsigned int flags,
-    uint64_t bind_id) {
-  return AddTraceEventWithThreadIdAndTimestamp(
-      phase, category_group_enabled, name, scope, id,
-      TRACE_EVENT_API_CURRENT_THREAD_ID, TRACE_TIME_TICKS_NOW(), flags,
-      bind_id);
-}
-
-template <class ARG1_TYPE>
-inline base::trace_event::TraceEventHandle AddTraceEvent(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    unsigned int flags,
-    uint64_t bind_id,
-    const char* arg1_name,
-    ARG1_TYPE&& arg1_val) {
-  return AddTraceEventWithThreadIdAndTimestamp(
-      phase, category_group_enabled, name, scope, id,
-      TRACE_EVENT_API_CURRENT_THREAD_ID, TRACE_TIME_TICKS_NOW(), flags, bind_id,
-      arg1_name, std::forward<ARG1_TYPE>(arg1_val));
-}
-
-template <class ARG1_TYPE, class ARG2_TYPE>
-inline base::trace_event::TraceEventHandle AddTraceEvent(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    unsigned int flags,
-    uint64_t bind_id,
-    const char* arg1_name,
-    ARG1_TYPE&& arg1_val,
-    const char* arg2_name,
-    ARG2_TYPE&& arg2_val) {
-  return AddTraceEventWithThreadIdAndTimestamp(
-      phase, category_group_enabled, name, scope, id,
-      TRACE_EVENT_API_CURRENT_THREAD_ID, TRACE_TIME_TICKS_NOW(), flags, bind_id,
-      arg1_name, std::forward<ARG1_TYPE>(arg1_val), arg2_name,
-      std::forward<ARG2_TYPE>(arg2_val));
-}
-
-template <class ARG1_TYPE>
-void AddMetadataEvent(const unsigned char* category_group_enabled,
-                      const char* event_name,
-                      const char* arg_name,
-                      ARG1_TYPE&& arg_val) {
-  base::trace_event::TraceArguments args(arg_name,
-                                         std::forward<ARG1_TYPE>(arg_val));
-  trace_event_internal::AddMetadataEvent(category_group_enabled, event_name,
-                                         &args, TRACE_EVENT_FLAG_NONE);
-}
-
 }  // namespace trace_event_internal
 
 namespace base {
diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc
index 8fefc06..60f4cbf 100644
--- a/base/trace_event/trace_event_impl.cc
+++ b/base/trace_event/trace_event_impl.cc
@@ -79,7 +79,6 @@
                        const char* name,
                        const char* scope,
                        unsigned long long id,
-                       unsigned long long bind_id,
                        TraceArguments* args,
                        unsigned int flags)
     : timestamp_(timestamp),
@@ -90,7 +89,6 @@
       name_(name),
       thread_id_(thread_id),
       flags_(flags),
-      bind_id_(bind_id),
       phase_(phase) {
   InitArgs(args);
 }
@@ -116,7 +114,6 @@
                        const char* name,
                        const char* scope,
                        unsigned long long id,
-                       unsigned long long bind_id,
                        TraceArguments* args,
                        unsigned int flags) {
   Reset();
@@ -128,7 +125,6 @@
   name_ = name;
   thread_id_ = thread_id;
   flags_ = flags;
-  bind_id_ = bind_id;
   phase_ = phase;
 
   InitArgs(args);
@@ -152,17 +148,6 @@
     thread_duration_ = thread_now - thread_timestamp_;
 }
 
-void TraceEvent::EstimateTraceMemoryOverhead(
-    TraceEventMemoryOverhead* overhead) {
-  overhead->Add(TraceEventMemoryOverhead::kTraceEvent,
-                parameter_copy_storage_.EstimateTraceMemoryOverhead());
-
-  for (size_t i = 0; i < arg_size(); ++i) {
-    if (arg_type(i) == TRACE_VALUE_TYPE_CONVERTABLE)
-      arg_value(i).as_convertable->EstimateTraceMemoryOverhead(overhead);
-  }
-}
-
 void TraceEvent::AppendAsJSON(
     std::string* out,
     const ArgumentFilterPredicate& argument_filter_predicate) const {
@@ -281,7 +266,7 @@
   if ((flags_ & TRACE_EVENT_FLAG_FLOW_OUT) ||
       (flags_ & TRACE_EVENT_FLAG_FLOW_IN)) {
     StringAppendF(out, ",\"bind_id\":\"0x%" PRIx64 "\"",
-                  static_cast<uint64_t>(bind_id_));
+                  static_cast<uint64_t>(0));
   }
   if (flags_ & TRACE_EVENT_FLAG_FLOW_IN)
     StringAppendF(out, ",\"flow_in\":true");
diff --git a/base/trace_event/trace_event_impl.h b/base/trace_event/trace_event_impl.h
index dbc560f..9c21dcd 100644
--- a/base/trace_event/trace_event_impl.h
+++ b/base/trace_event/trace_event_impl.h
@@ -25,7 +25,6 @@
 #include "base/time/time.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_arguments.h"
-#include "base/trace_event/trace_event_memory_overhead.h"
 #include "build/build_config.h"
 
 namespace base {
@@ -66,7 +65,6 @@
              const char* name,
              const char* scope,
              unsigned long long id,
-             unsigned long long bind_id,
              TraceArguments* args,
              unsigned int flags);
 
@@ -96,14 +94,11 @@
              const char* name,
              const char* scope,
              unsigned long long id,
-             unsigned long long bind_id,
              TraceArguments* args,
              unsigned int flags);
 
   void UpdateDuration(const TimeTicks& now, const ThreadTicks& thread_now);
 
-  void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead);
-
   // Serialize event data to JSON
   void AppendAsJSON(
       std::string* out,
@@ -120,7 +115,6 @@
   const char* scope() const { return scope_; }
   unsigned long long id() const { return id_; }
   unsigned int flags() const { return flags_; }
-  unsigned long long bind_id() const { return bind_id_; }
   // Exposed for unittesting:
 
   const StringStorage& parameter_copy_storage() const LIFETIME_BOUND {
@@ -173,7 +167,6 @@
     ProcessId process_id_;
   };
   unsigned int flags_ = 0;
-  unsigned long long bind_id_ = 0;
   char phase_ = TRACE_EVENT_PHASE_BEGIN;
 };
 
diff --git a/base/trace_event/trace_event_memory_overhead.cc b/base/trace_event/trace_event_memory_overhead.cc
deleted file mode 100644
index 479184b..0000000
--- a/base/trace_event/trace_event_memory_overhead.cc
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2015 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/trace_event/trace_event_memory_overhead.h"
-
-#include <algorithm>
-
-#include "base/bits.h"
-#include "base/memory/ref_counted_memory.h"
-#include "base/notreached.h"
-#include "base/strings/stringprintf.h"
-#include "base/trace_event/memory_allocator_dump.h"
-#include "base/trace_event/memory_usage_estimator.h"
-#include "base/trace_event/process_memory_dump.h"
-#include "base/values.h"
-
-namespace base::trace_event {
-
-namespace {
-
-const char* ObjectTypeToString(TraceEventMemoryOverhead::ObjectType type) {
-  switch (type) {
-    case TraceEventMemoryOverhead::kOther:
-      return "(Other)";
-    case TraceEventMemoryOverhead::kTraceBuffer:
-      return "TraceBuffer";
-    case TraceEventMemoryOverhead::kTraceBufferChunk:
-      return "TraceBufferChunk";
-    case TraceEventMemoryOverhead::kTraceEvent:
-      return "TraceEvent";
-    case TraceEventMemoryOverhead::kUnusedTraceEvent:
-      return "TraceEvent(Unused)";
-    case TraceEventMemoryOverhead::kTracedValue:
-      return "TracedValue";
-    case TraceEventMemoryOverhead::kConvertableToTraceFormat:
-      return "ConvertableToTraceFormat";
-    case TraceEventMemoryOverhead::kHeapProfilerAllocationRegister:
-      return "AllocationRegister";
-    case TraceEventMemoryOverhead::kHeapProfilerTypeNameDeduplicator:
-      return "TypeNameDeduplicator";
-    case TraceEventMemoryOverhead::kHeapProfilerStackFrameDeduplicator:
-      return "StackFrameDeduplicator";
-    case TraceEventMemoryOverhead::kStdString:
-      return "std::string";
-    case TraceEventMemoryOverhead::kBaseValue:
-      return "base::Value";
-    case TraceEventMemoryOverhead::kTraceEventMemoryOverhead:
-      return "TraceEventMemoryOverhead";
-    case TraceEventMemoryOverhead::kFrameMetrics:
-      return "FrameMetrics";
-    case TraceEventMemoryOverhead::kLast:
-      NOTREACHED();
-  }
-  NOTREACHED();
-}
-
-}  // namespace
-
-TraceEventMemoryOverhead::TraceEventMemoryOverhead() : allocated_objects_() {}
-
-TraceEventMemoryOverhead::~TraceEventMemoryOverhead() = default;
-
-void TraceEventMemoryOverhead::AddInternal(ObjectType object_type,
-                                           size_t count,
-                                           size_t allocated_size_in_bytes,
-                                           size_t resident_size_in_bytes) {
-  ObjectCountAndSize& count_and_size =
-      allocated_objects_[static_cast<uint32_t>(object_type)];
-  count_and_size.count += count;
-  count_and_size.allocated_size_in_bytes += allocated_size_in_bytes;
-  count_and_size.resident_size_in_bytes += resident_size_in_bytes;
-}
-
-void TraceEventMemoryOverhead::Add(ObjectType object_type,
-                                   size_t allocated_size_in_bytes) {
-  Add(object_type, allocated_size_in_bytes, allocated_size_in_bytes);
-}
-
-void TraceEventMemoryOverhead::Add(ObjectType object_type,
-                                   size_t allocated_size_in_bytes,
-                                   size_t resident_size_in_bytes) {
-  AddInternal(object_type, 1, allocated_size_in_bytes, resident_size_in_bytes);
-}
-
-void TraceEventMemoryOverhead::AddString(const std::string& str) {
-  Add(kStdString, EstimateMemoryUsage(str));
-}
-
-void TraceEventMemoryOverhead::AddRefCountedString(
-    const RefCountedString& str) {
-  Add(kOther, sizeof(RefCountedString));
-  AddString(str.as_string());
-}
-
-void TraceEventMemoryOverhead::AddValue(const Value& value) {
-  switch (value.type()) {
-    case Value::Type::NONE:
-    case Value::Type::BOOLEAN:
-    case Value::Type::INTEGER:
-    case Value::Type::DOUBLE:
-      Add(kBaseValue, sizeof(Value));
-      break;
-
-    case Value::Type::STRING:
-      Add(kBaseValue, sizeof(Value));
-      AddString(value.GetString());
-      break;
-
-    case Value::Type::BINARY:
-      Add(kBaseValue, sizeof(Value) + value.GetBlob().size());
-      break;
-
-    case Value::Type::DICT:
-      Add(kBaseValue, sizeof(Value));
-      for (const auto pair : value.GetDict()) {
-        AddString(pair.first);
-        AddValue(pair.second);
-      }
-      break;
-
-    case Value::Type::LIST:
-      Add(kBaseValue, sizeof(Value));
-      for (const auto& v : value.GetList())
-        AddValue(v);
-      break;
-  }
-}
-
-void TraceEventMemoryOverhead::AddSelf() {
-  Add(kTraceEventMemoryOverhead, sizeof(*this));
-}
-
-size_t TraceEventMemoryOverhead::GetCount(ObjectType object_type) const {
-  CHECK(object_type < kLast);
-  return allocated_objects_[static_cast<uint32_t>(object_type)].count;
-}
-
-void TraceEventMemoryOverhead::Update(const TraceEventMemoryOverhead& other) {
-  for (uint32_t i = 0; i < kLast; i++) {
-    const ObjectCountAndSize& other_entry = other.allocated_objects_[i];
-    AddInternal(static_cast<ObjectType>(i), other_entry.count,
-                other_entry.allocated_size_in_bytes,
-                other_entry.resident_size_in_bytes);
-  }
-}
-
-void TraceEventMemoryOverhead::DumpInto(const char* base_name,
-                                        ProcessMemoryDump* pmd) const {
-  for (uint32_t i = 0; i < kLast; i++) {
-    const ObjectCountAndSize& count_and_size = allocated_objects_[i];
-    if (count_and_size.allocated_size_in_bytes == 0)
-      continue;
-    std::string dump_name = StringPrintf(
-        "%s/%s", base_name, ObjectTypeToString(static_cast<ObjectType>(i)));
-    MemoryAllocatorDump* mad = pmd->CreateAllocatorDump(dump_name);
-    mad->AddScalar(MemoryAllocatorDump::kNameSize,
-                   MemoryAllocatorDump::kUnitsBytes,
-                   count_and_size.allocated_size_in_bytes);
-    mad->AddScalar("resident_size", MemoryAllocatorDump::kUnitsBytes,
-                   count_and_size.resident_size_in_bytes);
-    mad->AddScalar(MemoryAllocatorDump::kNameObjectCount,
-                   MemoryAllocatorDump::kUnitsObjects, count_and_size.count);
-  }
-}
-
-}  // namespace base::trace_event
diff --git a/base/trace_event/trace_event_memory_overhead.h b/base/trace_event/trace_event_memory_overhead.h
deleted file mode 100644
index e906115..0000000
--- a/base/trace_event/trace_event_memory_overhead.h
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2015 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_TRACE_EVENT_TRACE_EVENT_MEMORY_OVERHEAD_H_
-#define BASE_TRACE_EVENT_TRACE_EVENT_MEMORY_OVERHEAD_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <array>
-#include <string>
-
-#include "base/base_export.h"
-
-namespace base {
-
-class RefCountedString;
-class Value;
-
-namespace trace_event {
-
-class ProcessMemoryDump;
-
-// Used to estimate the memory overhead of the tracing infrastructure.
-class BASE_EXPORT TraceEventMemoryOverhead {
- public:
-  enum ObjectType : uint32_t {
-    kOther = 0,
-    kTraceBuffer,
-    kTraceBufferChunk,
-    kTraceEvent,
-    kUnusedTraceEvent,
-    kTracedValue,
-    kConvertableToTraceFormat,
-    kHeapProfilerAllocationRegister,
-    kHeapProfilerTypeNameDeduplicator,
-    kHeapProfilerStackFrameDeduplicator,
-    kStdString,
-    kBaseValue,
-    kTraceEventMemoryOverhead,
-    kFrameMetrics,
-    kLast
-  };
-
-  TraceEventMemoryOverhead();
-  TraceEventMemoryOverhead(const TraceEventMemoryOverhead&) = delete;
-  TraceEventMemoryOverhead& operator=(const TraceEventMemoryOverhead&) = delete;
-  ~TraceEventMemoryOverhead();
-
-  // Use this method to account the overhead of an object for which an estimate
-  // is known for both the allocated and resident memory.
-  void Add(ObjectType object_type,
-           size_t allocated_size_in_bytes,
-           size_t resident_size_in_bytes);
-
-  // Similar to Add() above, but assumes that
-  // |resident_size_in_bytes| == |allocated_size_in_bytes|.
-  void Add(ObjectType object_type, size_t allocated_size_in_bytes);
-
-  // Specialized profiling functions for commonly used object types.
-  void AddString(const std::string& str);
-  void AddValue(const Value& value);
-  void AddRefCountedString(const RefCountedString& str);
-
-  // Call this after all the Add* methods above to account the memory used by
-  // this TraceEventMemoryOverhead instance itself.
-  void AddSelf();
-
-  // Retrieves the count, that is, the count of Add*(|object_type|, ...) calls.
-  size_t GetCount(ObjectType object_type) const;
-
-  // Adds up and merges all the values from |other| to this instance.
-  void Update(const TraceEventMemoryOverhead& other);
-
-  void DumpInto(const char* base_name, ProcessMemoryDump* pmd) const;
-
- private:
-  struct ObjectCountAndSize {
-    size_t count;
-    size_t allocated_size_in_bytes;
-    size_t resident_size_in_bytes;
-  };
-  std::array<ObjectCountAndSize, ObjectType::kLast> allocated_objects_;
-
-  void AddInternal(ObjectType object_type,
-                   size_t count,
-                   size_t allocated_size_in_bytes,
-                   size_t resident_size_in_bytes);
-};
-
-}  // namespace trace_event
-}  // namespace base
-
-#endif  // BASE_TRACE_EVENT_TRACE_EVENT_MEMORY_OVERHEAD_H_
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc
index 9f06d7a..145f9667 100644
--- a/base/trace_event/trace_event_unittest.cc
+++ b/base/trace_event/trace_event_unittest.cc
@@ -938,49 +938,6 @@
   EndTraceAndFlush();
 }
 
-TEST_F(TraceEventTestFixture, AddMetadataEvent) {
-  int num_calls = 0;
-
-  class Convertable : public ConvertableToTraceFormat {
-   public:
-    explicit Convertable(int* num_calls) : num_calls_(num_calls) {}
-    ~Convertable() override = default;
-    void AppendAsTraceFormat(std::string* out) const override {
-      (*num_calls_)++;
-      out->append("\"metadata_value\"");
-    }
-
-   private:
-    raw_ptr<int> num_calls_;
-  };
-
-  std::unique_ptr<ConvertableToTraceFormat> conv1(new Convertable(&num_calls));
-  std::unique_ptr<Convertable> conv2(new Convertable(&num_calls));
-
-  BeginTrace();
-  TRACE_EVENT_API_ADD_METADATA_EVENT(
-      TraceLog::GetCategoryGroupEnabled("__metadata"), "metadata_event_1",
-      "metadata_arg_name", std::move(conv1));
-  TRACE_EVENT_API_ADD_METADATA_EVENT(
-      TraceLog::GetCategoryGroupEnabled("__metadata"), "metadata_event_2",
-      "metadata_arg_name", std::move(conv2));
-  // |AppendAsTraceFormat| should only be called on flush, not when the event
-  // is added.
-  ASSERT_EQ(0, num_calls);
-  EndTraceAndFlush();
-  ASSERT_EQ(2, num_calls);
-  EXPECT_TRUE(FindNamePhaseKeyValue("metadata_event_1", "M",
-                                    "metadata_arg_name", "metadata_value"));
-  EXPECT_TRUE(FindNamePhaseKeyValue("metadata_event_2", "M",
-                                    "metadata_arg_name", "metadata_value"));
-
-  // The metadata event should only be adde to the current trace. In this new
-  // trace, the event should not appear.
-  BeginTrace();
-  EndTraceAndFlush();
-  ASSERT_EQ(2, num_calls);
-}
-
 // Test that categories work.
 TEST_F(TraceEventTestFixture, Categories) {
   const std::vector<std::string> empty_categories;
@@ -1127,45 +1084,6 @@
   EXPECT_STREQ(async_begin_id_str.c_str(), async_end_id_str.c_str());
 }
 
-// Test that static strings are not copied.
-TEST_F(TraceEventTestFixture, StaticStringVsString) {
-  TraceLog* tracer = TraceLog::GetInstance();
-  // Make sure old events are flushed:
-  EXPECT_EQ(0u, tracer->GetStatus().event_count);
-  const unsigned char* category_group_enabled =
-      TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED("base");
-
-  {
-    BeginTrace();
-    // Test that string arguments are copied.
-    [[maybe_unused]] TraceEventHandle handle1 =
-        trace_event_internal::AddTraceEvent(
-            TRACE_EVENT_PHASE_INSTANT, category_group_enabled, "name1",
-            trace_event_internal::kGlobalScope, trace_event_internal::kNoId, 0,
-            trace_event_internal::kNoId, "arg1", std::string("argval"), "arg2",
-            std::string("argval"));
-    // Test that static TRACE_STR_COPY string arguments are copied.
-    [[maybe_unused]] TraceEventHandle handle2 =
-        trace_event_internal::AddTraceEvent(
-            TRACE_EVENT_PHASE_INSTANT, category_group_enabled, "name2",
-            trace_event_internal::kGlobalScope, trace_event_internal::kNoId, 0,
-            trace_event_internal::kNoId, "arg1", TRACE_STR_COPY("argval"),
-            "arg2", TRACE_STR_COPY("argval"));
-    EndTraceAndFlush();
-  }
-
-  {
-    BeginTrace();
-    // Test that static literal string arguments are not copied.
-    [[maybe_unused]] TraceEventHandle handle1 =
-        trace_event_internal::AddTraceEvent(
-            TRACE_EVENT_PHASE_INSTANT, category_group_enabled, "name1",
-            trace_event_internal::kGlobalScope, trace_event_internal::kNoId, 0,
-            trace_event_internal::kNoId, "arg1", "argval", "arg2", "argval");
-    EndTraceAndFlush();
-  }
-}
-
 // Test that data sent from other threads is gathered
 TEST_F(TraceEventTestFixture, DataCapturedOnThread) {
   BeginTrace();
@@ -1657,90 +1575,6 @@
   task_stop_event->Wait();
 }
 
-TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) {
-  BeginTrace();
-
-  Thread thread("1");
-  WaitableEvent task_complete_event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                                    WaitableEvent::InitialState::NOT_SIGNALED);
-  thread.Start();
-  thread.task_runner()->PostTask(
-      FROM_HERE, BindOnce(&TraceLog::SetCurrentThreadBlocksMessageLoop,
-                          Unretained(TraceLog::GetInstance())));
-
-  thread.task_runner()->PostTask(
-      FROM_HERE, BindOnce(&TraceWithAllMacroVariants, &task_complete_event));
-  task_complete_event.Wait();
-
-  WaitableEvent task_start_event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                                 WaitableEvent::InitialState::NOT_SIGNALED);
-  WaitableEvent task_stop_event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                                WaitableEvent::InitialState::NOT_SIGNALED);
-  thread.task_runner()->PostTask(
-      FROM_HERE,
-      BindOnce(&BlockUntilStopped, &task_start_event, &task_stop_event));
-  task_start_event.Wait();
-
-  EndTraceAndFlush();
-  ValidateAllTraceMacrosCreatedData(trace_parsed_);
-
-  task_stop_event.Signal();
-  thread.Stop();
-}
-
-TEST_F(TraceEventTestFixture, ConvertTraceConfigToInternalOptions) {
-  TraceLog* trace_log = TraceLog::GetInstance();
-  EXPECT_EQ(TraceLog::kInternalRecordUntilFull,
-            trace_log->GetInternalOptionsFromTraceConfig(
-                TraceConfig(kRecordAllCategoryFilter, RECORD_UNTIL_FULL)));
-
-  EXPECT_EQ(TraceLog::kInternalRecordContinuously,
-            trace_log->GetInternalOptionsFromTraceConfig(
-                TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY)));
-
-  EXPECT_EQ(TraceLog::kInternalEchoToConsole,
-            trace_log->GetInternalOptionsFromTraceConfig(
-                TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE)));
-
-  EXPECT_EQ(TraceLog::kInternalEchoToConsole,
-            trace_log->GetInternalOptionsFromTraceConfig(
-                TraceConfig("*", "trace-to-console,enable-systrace")));
-}
-
-void SetBlockingFlagAndBlockUntilStopped(WaitableEvent* task_start_event,
-                                         WaitableEvent* task_stop_event) {
-  TraceLog::GetInstance()->SetCurrentThreadBlocksMessageLoop();
-  BlockUntilStopped(task_start_event, task_stop_event);
-}
-
-TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopAfterTracing) {
-  BeginTrace();
-
-  Thread thread("1");
-  WaitableEvent task_complete_event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                                    WaitableEvent::InitialState::NOT_SIGNALED);
-  thread.Start();
-
-  thread.task_runner()->PostTask(
-      FROM_HERE, BindOnce(&TraceWithAllMacroVariants, &task_complete_event));
-  task_complete_event.Wait();
-
-  WaitableEvent task_start_event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                                 WaitableEvent::InitialState::NOT_SIGNALED);
-  WaitableEvent task_stop_event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                                WaitableEvent::InitialState::NOT_SIGNALED);
-  thread.task_runner()->PostTask(FROM_HERE,
-                                 BindOnce(&SetBlockingFlagAndBlockUntilStopped,
-                                          &task_start_event, &task_stop_event));
-  task_start_event.Wait();
-
-  EndTraceAndFlush();
-  ValidateAllTraceMacrosCreatedData(trace_parsed_);
-
-  task_stop_event.Signal();
-  thread.Stop();
-}
-
 TEST_F(TraceEventTestFixture, ThreadOnceBlocking) {
   BeginTrace();
 
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc
index fffc14d..5cacc7c 100644
--- a/base/trace_event/trace_log.cc
+++ b/base/trace_event/trace_log.cc
@@ -10,21 +10,15 @@
 #include "base/trace_event/trace_log.h"
 
 #include <cmath>
-#include <limits>
 #include <memory>
 #include <string_view>
-#include <unordered_set>
 #include <utility>
 
-#include "base/auto_reset.h"
-#include "base/base_switches.h"
-#include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/debug/leak_annotations.h"
 #include "base/format_macros.h"
 #include "base/functional/bind.h"
 #include "base/location.h"
-#include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted_memory.h"
@@ -41,22 +35,11 @@
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
-#include "base/task/current_thread.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/task/thread_pool.h"
-#include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_id_name_manager.h"
 #include "base/time/time.h"
-#include "base/trace_event/heap_profiler.h"
-#include "base/trace_event/heap_profiler_allocation_context_tracker.h"
-#include "base/trace_event/memory_dump_manager.h"
-#include "base/trace_event/memory_dump_provider.h"
-#include "base/trace_event/process_memory_dump.h"
-#include "base/trace_event/trace_buffer.h"
 #include "base/trace_event/trace_event.h"
-#include "base/tracing/perfetto_platform.h"
 #include "build/build_config.h"
 #include "third_party/perfetto/include/perfetto/ext/trace_processor/export_json.h"  // nogncheck
 #include "third_party/perfetto/include/perfetto/trace_processor/trace_processor_storage.h"  // nogncheck
@@ -79,35 +62,10 @@
 
 namespace {
 
-// Controls the number of trace events we will buffer in-memory
-// before throwing them away.
-const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize;
-
-const size_t kTraceEventVectorBigBufferChunks =
-    512000000 / kTraceBufferChunkSize;
-static_assert(
-    kTraceEventVectorBigBufferChunks <= TraceBufferChunk::kMaxChunkIndex,
-    "Too many big buffer chunks");
-const size_t kTraceEventVectorBufferChunks = 256000 / kTraceBufferChunkSize;
-static_assert(
-    kTraceEventVectorBufferChunks <= TraceBufferChunk::kMaxChunkIndex,
-    "Too many vector buffer chunks");
-const size_t kTraceEventRingBufferChunks = kTraceEventVectorBufferChunks / 4;
-
-// ECHO_TO_CONSOLE needs a small buffer to hold the unfinished COMPLETE events.
-const size_t kEchoToConsoleTraceEventBufferChunks = 256;
-
-const size_t kTraceEventBufferSizeInBytes = 100 * 1024;
-
 bool g_perfetto_initialized_by_tracelog = false;
 
 TraceLog* g_trace_log_for_testing = nullptr;
 
-constinit thread_local TraceLog::ThreadLocalEventBuffer*
-    thread_local_event_buffer = nullptr;
-constinit thread_local bool thread_blocks_message_loop = false;
-constinit thread_local bool thread_is_in_trace_event = false;
-
 ThreadTicks ThreadNow() {
   return ThreadTicks::IsSupported()
              ? base::subtle::ThreadTicksNowIgnoringOverride()
@@ -132,33 +90,9 @@
       metadata_name,
       trace_event_internal::kGlobalScope,  // scope
       trace_event_internal::kNoId,         // id
-      trace_event_internal::kNoId,         // bind_id
       &args, TRACE_EVENT_FLAG_NONE);
 }
 
-// Use this function instead of TraceEventHandle constructor to keep the
-// overhead of ScopedTracer (trace_event.h) constructor minimum.
-void MakeHandle(uint32_t chunk_seq,
-                size_t chunk_index,
-                size_t event_index,
-                TraceEventHandle* handle) {
-  DCHECK(chunk_seq);
-  DCHECK(chunk_index <= TraceBufferChunk::kMaxChunkIndex);
-  DCHECK(event_index < TraceBufferChunk::kTraceBufferChunkSize);
-  DCHECK(chunk_index <= std::numeric_limits<uint16_t>::max());
-  handle->chunk_seq = chunk_seq;
-  handle->chunk_index = static_cast<uint16_t>(chunk_index);
-  handle->event_index = static_cast<uint16_t>(event_index);
-}
-
-// The fallback arguments filtering function will filter away every argument.
-bool DefaultIsTraceEventArgsAllowlisted(
-    const char* category_group_name,
-    const char* event_name,
-    base::trace_event::ArgumentNameFilterPredicate* arg_name_filter) {
-  return false;
-}
-
 class PerfettoProtoAppender
     : public base::trace_event::ConvertableToTraceFormat::ProtoAppender {
  public:
@@ -246,9 +180,12 @@
   }
 }
 
-void OnAddLegacyTraceEvent(TraceEvent* trace_event,
-                           bool thread_will_flush,
-                           base::trace_event::TraceEventHandle* handle) {
+// TRACE_EVENT macros will bypass TraceLog entirely. However, trace event
+// embedders which haven't been ported to Perfetto yet will still be using
+// TRACE_EVENT_API_ADD_TRACE_EVENT, so we need to route these events to Perfetto
+// using an override here.
+// TODO(crbug.com/343404899): Remove when all embedders migrate to Perfetto.
+void OnAddLegacyTraceEvent(TraceEvent* trace_event) {
   perfetto::DynamicCategory category(
       TraceLog::GetInstance()->GetCategoryGroupName(
           trace_event->category_group_enabled()));
@@ -324,7 +261,6 @@
 void OnUpdateLegacyTraceEventDuration(
     const unsigned char* category_group_enabled,
     const char* name,
-    TraceEventHandle handle,
     PlatformThreadId thread_id,
     bool explicit_timestamps,
     const TimeTicks& now,
@@ -420,174 +356,6 @@
 };
 #endif  // BUILDFLAG(USE_PERFETTO_TRACE_PROCESSOR)
 
-// A helper class that allows the lock to be acquired in the middle of the scope
-// and unlocks at the end of scope if locked.
-class TraceLog::OptionalAutoLock {
-  STACK_ALLOCATED();
-
- public:
-  explicit OptionalAutoLock(Lock* lock) : lock_(lock) {}
-
-  OptionalAutoLock(const OptionalAutoLock&) = delete;
-  OptionalAutoLock& operator=(const OptionalAutoLock&) = delete;
-
-  ~OptionalAutoLock() {
-    if (locked_)
-      lock_->Release();
-  }
-
-  void EnsureAcquired() EXCLUSIVE_LOCK_FUNCTION(lock_) {
-    if (!locked_) {
-      lock_->Acquire();
-      locked_ = true;
-    } else {
-      lock_->AssertAcquired();
-    }
-  }
-
- private:
-  Lock* lock_;
-  bool locked_ = false;
-};
-
-class TraceLog::ThreadLocalEventBuffer
-    : public CurrentThread::DestructionObserver,
-      public MemoryDumpProvider {
- public:
-  explicit ThreadLocalEventBuffer(TraceLog* trace_log);
-  ThreadLocalEventBuffer(const ThreadLocalEventBuffer&) = delete;
-  ThreadLocalEventBuffer& operator=(const ThreadLocalEventBuffer&) = delete;
-  ~ThreadLocalEventBuffer() override;
-
-  TraceEvent* AddTraceEvent(TraceEventHandle* handle);
-
-  TraceEvent* GetEventByHandle(TraceEventHandle handle) {
-    if (!chunk_ || handle.chunk_seq != chunk_->seq() ||
-        handle.chunk_index != chunk_index_) {
-      return nullptr;
-    }
-
-    return chunk_->GetEventAt(handle.event_index);
-  }
-
-  int generation() const { return generation_; }
-
- private:
-  // CurrentThread::DestructionObserver
-  void WillDestroyCurrentMessageLoop() override;
-
-  // MemoryDumpProvider implementation.
-  bool OnMemoryDump(const MemoryDumpArgs& args,
-                    ProcessMemoryDump* pmd) override;
-
-  void FlushWhileLocked();
-
-  void CheckThisIsCurrentBuffer() const {
-    DCHECK_EQ(thread_local_event_buffer, this);
-  }
-
-  const AutoReset<ThreadLocalEventBuffer*> resetter_{&thread_local_event_buffer,
-                                                     this, nullptr};
-  // Since TraceLog is a leaky singleton, trace_log_ will always be valid
-  // as long as the thread exists.
-  raw_ptr<TraceLog> trace_log_;
-  std::unique_ptr<TraceBufferChunk> chunk_;
-  size_t chunk_index_ = 0;
-  int generation_;
-};
-
-TraceLog::ThreadLocalEventBuffer::ThreadLocalEventBuffer(TraceLog* trace_log)
-    : trace_log_(trace_log),
-      generation_(trace_log->generation()) {
-  // ThreadLocalEventBuffer is created only if the thread has a message loop, so
-  // the following message_loop won't be NULL.
-  CurrentThread::Get()->AddDestructionObserver(this);
-
-  // This is to report the local memory usage when memory-infra is enabled.
-  MemoryDumpManager::GetInstance()->RegisterDumpProvider(
-      this, "ThreadLocalEventBuffer",
-      SingleThreadTaskRunner::GetCurrentDefault());
-
-  auto thread_id = PlatformThread::CurrentId();
-
-  AutoLock lock(trace_log->lock_);
-  trace_log->thread_task_runners_[thread_id] =
-      SingleThreadTaskRunner::GetCurrentDefault();
-}
-
-TraceLog::ThreadLocalEventBuffer::~ThreadLocalEventBuffer() {
-  CheckThisIsCurrentBuffer();
-  CurrentThread::Get()->RemoveDestructionObserver(this);
-  MemoryDumpManager::GetInstance()->UnregisterDumpProvider(this);
-
-  AutoLock lock(trace_log_->lock_);
-  FlushWhileLocked();
-  trace_log_->thread_task_runners_.erase(PlatformThread::CurrentId());
-}
-
-TraceEvent* TraceLog::ThreadLocalEventBuffer::AddTraceEvent(
-    TraceEventHandle* handle) {
-  CheckThisIsCurrentBuffer();
-
-  if (chunk_ && chunk_->IsFull()) {
-    AutoLock lock(trace_log_->lock_);
-    FlushWhileLocked();
-    chunk_.reset();
-  }
-  if (!chunk_) {
-    AutoLock lock(trace_log_->lock_);
-    chunk_ = trace_log_->logged_events_->GetChunk(&chunk_index_);
-    trace_log_->CheckIfBufferIsFullWhileLocked();
-  }
-  if (!chunk_)
-    return nullptr;
-
-  size_t event_index;
-  TraceEvent* trace_event = chunk_->AddTraceEvent(&event_index);
-  if (trace_event && handle)
-    MakeHandle(chunk_->seq(), chunk_index_, event_index, handle);
-
-  return trace_event;
-}
-
-void TraceLog::ThreadLocalEventBuffer::WillDestroyCurrentMessageLoop() {
-  delete this;
-}
-
-bool TraceLog::ThreadLocalEventBuffer::OnMemoryDump(const MemoryDumpArgs& args,
-                                                    ProcessMemoryDump* pmd) {
-  if (!chunk_)
-    return true;
-  std::string dump_base_name =
-      "tracing/thread_" + NumberToString(PlatformThread::CurrentId());
-  TraceEventMemoryOverhead overhead;
-  chunk_->EstimateTraceMemoryOverhead(&overhead);
-  overhead.DumpInto(dump_base_name.c_str(), pmd);
-  return true;
-}
-
-void TraceLog::ThreadLocalEventBuffer::FlushWhileLocked() {
-  if (!chunk_)
-    return;
-
-  trace_log_->lock_.AssertAcquired();
-  if (trace_log_->CheckGeneration(generation_)) {
-    // Return the chunk to the buffer only if the generation matches.
-    trace_log_->logged_events_->ReturnChunk(chunk_index_, std::move(chunk_));
-  }
-  // Otherwise this method may be called from the destructor, or TraceLog will
-  // find the generation mismatch and delete this buffer soon.
-}
-
-void TraceLog::SetAddTraceEventOverrides(
-    const AddTraceEventOverrideFunction& add_event_override,
-    const OnFlushFunction& on_flush_override,
-    const UpdateDurationFunction& update_duration_override) {
-  add_trace_event_override_.store(add_event_override);
-  on_flush_override_.store(on_flush_override);
-  update_duration_override_.store(update_duration_override);
-}
-
 struct TraceLog::RegisteredAsyncObserver {
   explicit RegisteredAsyncObserver(WeakPtr<AsyncEnabledStateObserver> observer)
       : observer(observer),
@@ -598,10 +366,6 @@
   scoped_refptr<SequencedTaskRunner> task_runner;
 };
 
-TraceLogStatus::TraceLogStatus() : event_capacity(0), event_count(0) {}
-
-TraceLogStatus::~TraceLogStatus() = default;
-
 // static
 TraceLog* TraceLog::GetInstance() {
   static base::NoDestructor<TraceLog> instance(0);
@@ -619,32 +383,13 @@
 }
 
 TraceLog::TraceLog(int generation)
-    : process_sort_index_(0),
-      process_id_hash_(0),
-      process_id_(base::kNullProcessId),
-      trace_options_(kInternalRecordUntilFull),
-      trace_config_(TraceConfig()),
-      thread_shared_chunk_index_(0),
-      generation_(generation),
-      use_worker_thread_(false) {
+    : process_sort_index_(0), process_id_(base::kNullProcessId) {
 #if BUILDFLAG(IS_NACL)  // NaCl shouldn't expose the process id.
   SetProcessID(0);
 #else
   SetProcessID(GetCurrentProcId());
 #endif
-
-  logged_events_.reset(CreateTraceBuffer());
-
-  MemoryDumpManager::GetInstance()->RegisterDumpProvider(this, "TraceLog",
-                                                         nullptr);
   TrackEvent::AddSessionObserver(this);
-  // When using the Perfetto client library, TRACE_EVENT macros will bypass
-  // TraceLog entirely. However, trace event embedders which haven't been ported
-  // to Perfetto yet will still be using TRACE_EVENT_API_ADD_TRACE_EVENT, so we
-  // need to route these events to Perfetto using an override here. This
-  // override is also used to capture internal metadata events.
-  SetAddTraceEventOverrides(&OnAddLegacyTraceEvent, nullptr,
-                            &OnUpdateLegacyTraceEventDuration);
   g_trace_log_for_testing = this;
 }
 
@@ -652,45 +397,6 @@
   TrackEvent::RemoveSessionObserver(this);
 }
 
-void TraceLog::InitializeThreadLocalEventBufferIfSupported() {
-  // A ThreadLocalEventBuffer needs the message loop with a task runner
-  // - to know when the thread exits;
-  // - to handle the final flush.
-  // For a thread without a message loop or if the message loop may be blocked,
-  // the trace events will be added into the main buffer directly.
-  if (thread_blocks_message_loop || !CurrentThread::IsSet() ||
-      !SingleThreadTaskRunner::HasCurrentDefault()) {
-    return;
-  }
-  HEAP_PROFILER_SCOPED_IGNORE;
-  if (thread_local_event_buffer &&
-      !CheckGeneration(thread_local_event_buffer->generation())) {
-    delete thread_local_event_buffer;
-  }
-  if (!thread_local_event_buffer) {
-    thread_local_event_buffer = new ThreadLocalEventBuffer(this);
-  }
-}
-
-bool TraceLog::OnMemoryDump(const MemoryDumpArgs& args,
-                            ProcessMemoryDump* pmd) {
-  // TODO(ssid): Use MemoryDumpArgs to create light dumps when requested
-  // (crbug.com/499731).
-  TraceEventMemoryOverhead overhead;
-  overhead.Add(TraceEventMemoryOverhead::kOther, sizeof(*this));
-  {
-    AutoLock lock(lock_);
-    if (logged_events_)
-      logged_events_->EstimateTraceMemoryOverhead(&overhead);
-
-    for (auto& metadata_event : metadata_events_)
-      metadata_event->EstimateTraceMemoryOverhead(&overhead);
-  }
-  overhead.AddSelf();
-  overhead.DumpInto("tracing/main_trace_log", pmd);
-  return true;
-}
-
 const unsigned char* TraceLog::GetCategoryGroupEnabled(
     const char* category_group) {
   return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(category_group);
@@ -848,7 +554,6 @@
   DCHECK(!TrackEvent::IsEnabled());
   lock_.AssertAcquired();
   InitializePerfettoIfNeeded();
-  trace_config_ = trace_config;
   perfetto_config_ = perfetto_config;
   tracing_session_ = perfetto::Tracing::NewTrace();
 
@@ -891,24 +596,6 @@
   return record_host_app_package_name_;
 }
 
-TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceConfig(
-    const TraceConfig& config) {
-  InternalTraceOptions ret = config.IsArgumentFilterEnabled()
-                                 ? kInternalEnableArgumentFilter
-                                 : kInternalNone;
-  switch (config.GetTraceRecordMode()) {
-    case RECORD_UNTIL_FULL:
-      return ret | kInternalRecordUntilFull;
-    case RECORD_CONTINUOUSLY:
-      return ret | kInternalRecordContinuously;
-    case ECHO_TO_CONSOLE:
-      return ret | kInternalEchoToConsole;
-    case RECORD_AS_MUCH_AS_POSSIBLE:
-      return ret | kInternalRecordAsMuchAsPossible;
-  }
-  NOTREACHED();
-}
-
 TraceConfig TraceLog::GetCurrentTraceConfig() const {
   const auto chrome_config =
       GetCurrentTrackEventDataSourceConfig().chrome_config();
@@ -925,8 +612,6 @@
     return;
 
   AddMetadataEventsWhileLocked();
-  // Remove metadata events so they will not get added to a subsequent trace.
-  metadata_events_.clear();
 
   TrackEvent::Flush();
   // If the current thread has an active task runner, allow nested tasks to run
@@ -945,11 +630,6 @@
   }
 }
 
-int TraceLog::GetNumTracesRecorded() {
-  AutoLock lock(lock_);
-  return enabled_ ? num_traces_recorded_ : -1;
-}
-
 void TraceLog::AddEnabledStateObserver(EnabledStateObserver* listener) {
   AutoLock lock(observers_lock_);
   enabled_state_observers_.push_back(listener);
@@ -992,68 +672,6 @@
   return Contains(async_observers_, listener);
 }
 
-void TraceLog::AddIncrementalStateObserver(IncrementalStateObserver* listener) {
-  AutoLock lock(observers_lock_);
-  incremental_state_observers_.push_back(listener);
-}
-
-void TraceLog::RemoveIncrementalStateObserver(
-    IncrementalStateObserver* listener) {
-  AutoLock lock(observers_lock_);
-  incremental_state_observers_.erase(
-      ranges::remove(incremental_state_observers_, listener),
-      incremental_state_observers_.end());
-}
-
-void TraceLog::OnIncrementalStateCleared() {
-  AutoLock lock(observers_lock_);
-  for (IncrementalStateObserver* observer : incremental_state_observers_)
-    observer->OnIncrementalStateCleared();
-}
-
-TraceLogStatus TraceLog::GetStatus() const {
-  AutoLock lock(lock_);
-  TraceLogStatus result;
-  result.event_capacity = static_cast<uint32_t>(logged_events_->Capacity());
-  result.event_count = static_cast<uint32_t>(logged_events_->Size());
-  return result;
-}
-
-TraceEvent* TraceLog::AddEventToThreadSharedChunkWhileLocked(
-    TraceEventHandle* handle,
-    bool check_buffer_is_full) {
-  if (thread_shared_chunk_ && thread_shared_chunk_->IsFull()) {
-    logged_events_->ReturnChunk(thread_shared_chunk_index_,
-                                std::move(thread_shared_chunk_));
-  }
-
-  if (!thread_shared_chunk_) {
-    thread_shared_chunk_ =
-        logged_events_->GetChunk(&thread_shared_chunk_index_);
-    if (check_buffer_is_full)
-      CheckIfBufferIsFullWhileLocked();
-  }
-  if (!thread_shared_chunk_)
-    return nullptr;
-
-  size_t event_index;
-  TraceEvent* trace_event = thread_shared_chunk_->AddTraceEvent(&event_index);
-  if (trace_event && handle) {
-    MakeHandle(thread_shared_chunk_->seq(), thread_shared_chunk_index_,
-               event_index, handle);
-  }
-  return trace_event;
-}
-
-void TraceLog::CheckIfBufferIsFullWhileLocked() {
-  if (logged_events_->IsFull()) {
-    if (buffer_limit_reached_timestamp_.is_null()) {
-      buffer_limit_reached_timestamp_ = OffsetNow();
-    }
-    SetDisabledWhileLocked();
-  }
-}
-
 // Flush() works as the following:
 // 1. Flush() is called in thread A whose task runner is saved in
 //    flush_task_runner_;
@@ -1077,8 +695,6 @@
 void TraceLog::FlushInternal(const TraceLog::OutputCallback& cb,
                              bool use_worker_thread,
                              bool discard_events) {
-  use_worker_thread_ = use_worker_thread;
-
 #if BUILDFLAG(USE_PERFETTO_TRACE_PROCESSOR)
   TrackEvent::Flush();
 
@@ -1162,210 +778,6 @@
 }
 #endif  // BUILDFLAG(USE_PERFETTO_TRACE_PROCESSOR)
 
-// Usually it runs on a different thread.
-void TraceLog::ConvertTraceEventsToTraceFormat(
-    std::unique_ptr<TraceBuffer> logged_events,
-    const OutputCallback& flush_output_callback,
-    const ArgumentFilterPredicate& argument_filter_predicate) {
-  if (flush_output_callback.is_null())
-    return;
-
-  HEAP_PROFILER_SCOPED_IGNORE;
-  // The callback need to be called at least once even if there is no events
-  // to let the caller know the completion of flush.
-  scoped_refptr<RefCountedString> json_events_str_ptr = new RefCountedString();
-  const size_t kReserveCapacity = kTraceEventBufferSizeInBytes * 5 / 4;
-  json_events_str_ptr->as_string().reserve(kReserveCapacity);
-  while (const TraceBufferChunk* chunk = logged_events->NextChunk()) {
-    for (size_t j = 0; j < chunk->size(); ++j) {
-      size_t size = json_events_str_ptr->size();
-      if (size > kTraceEventBufferSizeInBytes) {
-        flush_output_callback.Run(json_events_str_ptr, true);
-        json_events_str_ptr = new RefCountedString();
-        json_events_str_ptr->as_string().reserve(kReserveCapacity);
-      } else if (size) {
-        json_events_str_ptr->as_string().append(",\n");
-      }
-      chunk->GetEventAt(j)->AppendAsJSON(&(json_events_str_ptr->as_string()),
-                                         argument_filter_predicate);
-    }
-  }
-  flush_output_callback.Run(json_events_str_ptr, false);
-}
-
-void TraceLog::FinishFlush(int generation, bool discard_events) {
-  std::unique_ptr<TraceBuffer> previous_logged_events;
-  OutputCallback flush_output_callback;
-  ArgumentFilterPredicate argument_filter_predicate;
-
-  if (!CheckGeneration(generation))
-    return;
-
-  {
-    AutoLock lock(lock_);
-
-    previous_logged_events.swap(logged_events_);
-    UseNextTraceBuffer();
-    thread_task_runners_.clear();
-
-    flush_task_runner_ = nullptr;
-    flush_output_callback = flush_output_callback_;
-    flush_output_callback_.Reset();
-
-    if (trace_options() & kInternalEnableArgumentFilter) {
-      // If argument filtering is activated and there is no filtering predicate,
-      // use the safe default filtering predicate.
-      if (argument_filter_predicate_.is_null()) {
-        argument_filter_predicate =
-            base::BindRepeating(&DefaultIsTraceEventArgsAllowlisted);
-      } else {
-        argument_filter_predicate = argument_filter_predicate_;
-      }
-    }
-  }
-
-  if (discard_events) {
-    if (!flush_output_callback.is_null()) {
-      scoped_refptr<RefCountedString> empty_result = new RefCountedString;
-      flush_output_callback.Run(empty_result, false);
-    }
-    return;
-  }
-
-  if (use_worker_thread_) {
-    base::ThreadPool::PostTask(
-        FROM_HERE,
-        {MayBlock(), TaskPriority::BEST_EFFORT,
-         TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-        BindOnce(&TraceLog::ConvertTraceEventsToTraceFormat,
-                 std::move(previous_logged_events), flush_output_callback,
-                 argument_filter_predicate));
-    return;
-  }
-
-  ConvertTraceEventsToTraceFormat(std::move(previous_logged_events),
-                                  flush_output_callback,
-                                  argument_filter_predicate);
-}
-
-// Run in each thread holding a local event buffer.
-void TraceLog::FlushCurrentThread(int generation, bool discard_events) {
-  {
-    AutoLock lock(lock_);
-    if (!CheckGeneration(generation) || !flush_task_runner_) {
-      // This is late. The corresponding flush has finished.
-      return;
-    }
-  }
-
-  // This will flush the thread local buffer.
-  delete thread_local_event_buffer;
-
-  auto on_flush_override = on_flush_override_.load(std::memory_order_relaxed);
-  if (on_flush_override) {
-    on_flush_override();
-  }
-
-  // Scheduler uses TRACE_EVENT macros when posting a task, which can lead
-  // to acquiring a tracing lock. Given that posting a task requires grabbing
-  // a scheduler lock, we need to post this task outside tracing lock to avoid
-  // deadlocks.
-  scoped_refptr<SequencedTaskRunner> cached_flush_task_runner;
-  {
-    AutoLock lock(lock_);
-    cached_flush_task_runner = flush_task_runner_;
-    if (!CheckGeneration(generation) || !flush_task_runner_ ||
-        !thread_task_runners_.empty())
-      return;
-  }
-  cached_flush_task_runner->PostTask(
-      FROM_HERE, BindOnce(&TraceLog::FinishFlush, Unretained(this), generation,
-                          discard_events));
-}
-
-void TraceLog::OnFlushTimeout(int generation, bool discard_events) {
-  {
-    AutoLock lock(lock_);
-    if (!CheckGeneration(generation) || !flush_task_runner_) {
-      // Flush has finished before timeout.
-      return;
-    }
-
-    LOG(WARNING)
-        << "The following threads haven't finished flush in time. "
-           "If this happens stably for some thread, please call "
-           "TraceLog::GetInstance()->SetCurrentThreadBlocksMessageLoop() from "
-           "the thread to avoid its trace events from being lost.";
-    for (const auto& it : thread_task_runners_) {
-      LOG(WARNING) << "Thread: "
-                   << ThreadIdNameManager::GetInstance()->GetName(it.first);
-    }
-  }
-  FinishFlush(generation, discard_events);
-}
-
-void TraceLog::UseNextTraceBuffer() {
-  logged_events_.reset(CreateTraceBuffer());
-  generation_.fetch_add(1, std::memory_order_relaxed);
-  thread_shared_chunk_.reset();
-  thread_shared_chunk_index_ = 0;
-}
-
-bool TraceLog::ShouldAddAfterUpdatingState(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    uint64_t id,
-    PlatformThreadId thread_id,
-    const TimeTicks timestamp,
-    TraceArguments* args) {
-  if (!*category_group_enabled)
-    return false;
-
-  // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when
-  // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) ->
-  // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ...
-  if (thread_is_in_trace_event) {
-    return false;
-  }
-
-  // Check and update the current thread name only if the event is for the
-  // current thread to avoid locks in most cases.
-  if (thread_id == PlatformThread::CurrentId()) {
-    const char* new_name =
-        ThreadIdNameManager::GetInstance()->GetNameForCurrentThread();
-    // Check if the thread name has been set or changed since the previous
-    // call (if any), but don't bother if the new name is empty. Note this will
-    // not detect a thread name change within the same char* buffer address: we
-    // favor common case performance over corner case correctness.
-    thread_local const char* current_thread_name = nullptr;
-    if (new_name != current_thread_name && new_name && *new_name) {
-      current_thread_name = new_name;
-
-      AutoLock thread_info_lock(thread_info_lock_);
-
-      auto existing_name = thread_names_.find(thread_id);
-      if (existing_name == thread_names_.end()) {
-        // This is a new thread id, and a new name.
-        thread_names_[thread_id] = new_name;
-      } else {
-        // This is a thread id that we've seen before, but potentially with a
-        // new name.
-        std::vector<std::string_view> existing_names = base::SplitStringPiece(
-            existing_name->second, ",", base::KEEP_WHITESPACE,
-            base::SPLIT_WANT_NONEMPTY);
-        if (!Contains(existing_names, new_name)) {
-          if (!existing_names.empty()) {
-            existing_name->second.push_back(',');
-          }
-          existing_name->second.append(new_name);
-        }
-      }
-    }
-  }
-  return true;
-}
-
 TraceEventHandle TraceLog::AddTraceEvent(
     char phase,
     const unsigned char* category_group_enabled,
@@ -1382,22 +794,6 @@
       thread_id, now, args, flags);
 }
 
-TraceEventHandle TraceLog::AddTraceEventWithBindId(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    uint64_t bind_id,
-    TraceArguments* args,
-    unsigned int flags) {
-  auto thread_id = base::PlatformThread::CurrentId();
-  base::TimeTicks now = TRACE_TIME_TICKS_NOW();
-  return AddTraceEventWithThreadIdAndTimestamp(
-      phase, category_group_enabled, name, scope, id, bind_id, thread_id, now,
-      args, flags | TRACE_EVENT_FLAG_HAS_CONTEXT_ID);
-}
-
 TraceEventHandle TraceLog::AddTraceEventWithProcessId(
     char phase,
     const unsigned char* category_group_enabled,
@@ -1415,24 +811,6 @@
       flags | TRACE_EVENT_FLAG_HAS_PROCESS_ID);
 }
 
-// Handle legacy calls to AddTraceEventWithThreadIdAndTimestamp
-// with kNoId as bind_id
-TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    PlatformThreadId thread_id,
-    const TimeTicks& timestamp,
-    TraceArguments* args,
-    unsigned int flags) {
-  return AddTraceEventWithThreadIdAndTimestamp(
-      phase, category_group_enabled, name, scope, id,
-      trace_event_internal::kNoId,  // bind_id
-      thread_id, timestamp, args, flags);
-}
-
 TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
     char phase,
     const unsigned char* category_group_enabled,
@@ -1471,151 +849,19 @@
     TraceArguments* args,
     unsigned int flags) NO_THREAD_SAFETY_ANALYSIS {
   TraceEventHandle handle = {0, 0, 0};
-  if (!ShouldAddAfterUpdatingState(phase, category_group_enabled, name, id,
-                                   thread_id, timestamp, args)) {
+  if (!*category_group_enabled) {
     return handle;
   }
   DCHECK(!timestamp.is_null());
 
-  const AutoReset<bool> resetter(&thread_is_in_trace_event, true, false);
+  TraceEvent new_trace_event(thread_id, timestamp, thread_timestamp, phase,
+                             category_group_enabled, name, scope, id, args,
+                             flags);
 
-  // Flow bind_ids don't have scopes, so we need to mangle in-process ones to
-  // avoid collisions.
-  bool has_flow =
-      flags & (TRACE_EVENT_FLAG_FLOW_OUT | TRACE_EVENT_FLAG_FLOW_IN);
-  if (has_flow && (flags & TRACE_EVENT_FLAG_HAS_LOCAL_ID))
-    bind_id = MangleEventId(bind_id);
-
-  TimeTicks offset_event_timestamp = OffsetTimestamp(timestamp);
-
-  ThreadLocalEventBuffer* event_buffer = nullptr;
-  if (*category_group_enabled) {
-    // |thread_local_event_buffer| can be null if the current thread doesn't
-    // have a message loop or the message loop is blocked.
-    InitializeThreadLocalEventBufferIfSupported();
-    event_buffer = thread_local_event_buffer;
-  }
-
-  if (*category_group_enabled) {
-    auto trace_event_override =
-        add_trace_event_override_.load(std::memory_order_relaxed);
-    if (trace_event_override) {
-      TraceEvent new_trace_event(
-          thread_id, offset_event_timestamp, thread_timestamp, phase,
-          category_group_enabled, name, scope, id, bind_id, args, flags);
-
-      trace_event_override(&new_trace_event,
-                           /*thread_will_flush=*/event_buffer != nullptr,
-                           &handle);
-      return handle;
-    }
-  }
-
-  std::string console_message;
-
-  // If enabled for recording, the event should be added only if one of the
-  // filters indicates or category is not enabled for filtering.
-  if (*category_group_enabled) {
-    OptionalAutoLock lock(&lock_);
-
-    TraceEvent* trace_event = nullptr;
-    if (event_buffer) {
-      trace_event = event_buffer->AddTraceEvent(&handle);
-    } else {
-      lock.EnsureAcquired();
-      trace_event = AddEventToThreadSharedChunkWhileLocked(&handle, true);
-    }
-
-    // NO_THREAD_SAFETY_ANALYSIS: Conditional locking above.
-    if (trace_event) {
-      trace_event->Reset(thread_id, offset_event_timestamp, thread_timestamp,
-                         phase, category_group_enabled, name, scope, id,
-                         bind_id, args, flags);
-    }
-
-    if (trace_options() & kInternalEchoToConsole) {
-      console_message = EventToConsoleMessage(
-          phase == TRACE_EVENT_PHASE_COMPLETE ? TRACE_EVENT_PHASE_BEGIN : phase,
-          timestamp, trace_event);
-    }
-  }
-
-  if (!console_message.empty())
-    LOG(ERROR) << console_message;
-
+  OnAddLegacyTraceEvent(&new_trace_event);
   return handle;
 }
 
-void TraceLog::AddMetadataEvent(const unsigned char* category_group_enabled,
-                                const char* name,
-                                TraceArguments* args,
-                                unsigned int flags) {
-  HEAP_PROFILER_SCOPED_IGNORE;
-  auto thread_id = base::PlatformThread::CurrentId();
-  ThreadTicks thread_now = ThreadNow();
-  TimeTicks now = OffsetNow();
-  AutoLock lock(lock_);
-  auto trace_event = std::make_unique<TraceEvent>(
-      thread_id, now, thread_now, TRACE_EVENT_PHASE_METADATA,
-      category_group_enabled, name,
-      trace_event_internal::kGlobalScope,  // scope
-      trace_event_internal::kNoId,         // id
-      trace_event_internal::kNoId,         // bind_id
-      args, flags);
-  metadata_events_.push_back(std::move(trace_event));
-}
-
-// May be called when a COMPELETE event ends and the unfinished event has been
-// recycled (phase == TRACE_EVENT_PHASE_END and trace_event == NULL).
-std::string TraceLog::EventToConsoleMessage(char phase,
-                                            const TimeTicks& timestamp,
-                                            TraceEvent* trace_event) {
-  HEAP_PROFILER_SCOPED_IGNORE;
-  AutoLock thread_info_lock(thread_info_lock_);
-
-  // The caller should translate TRACE_EVENT_PHASE_COMPLETE to
-  // TRACE_EVENT_PHASE_BEGIN or TRACE_EVENT_END.
-  DCHECK(phase != TRACE_EVENT_PHASE_COMPLETE);
-
-  TimeDelta duration;
-  auto thread_id =
-      trace_event ? trace_event->thread_id() : PlatformThread::CurrentId();
-  if (phase == TRACE_EVENT_PHASE_END) {
-    duration = timestamp - thread_event_start_times_[thread_id].top();
-    thread_event_start_times_[thread_id].pop();
-  }
-
-  const std::string& thread_name = thread_names_[thread_id];
-  if (thread_colors_.find(thread_name) == thread_colors_.end()) {
-    size_t next_color = (thread_colors_.size() % 6) + 1;
-    thread_colors_[thread_name] = next_color;
-  }
-
-  std::ostringstream log;
-  log << base::StringPrintf("%s: \x1b[0;3%" PRIuS "m", thread_name.c_str(),
-                            thread_colors_[thread_name]);
-
-  size_t depth = 0;
-  auto it = thread_event_start_times_.find(thread_id);
-  if (it != thread_event_start_times_.end())
-    depth = it->second.size();
-
-  for (size_t i = 0; i < depth; ++i)
-    log << "| ";
-
-  if (trace_event)
-    trace_event->AppendPrettyPrinted(&log);
-  if (phase == TRACE_EVENT_PHASE_END)
-    log << base::StringPrintf(" (%.3f ms)", duration.InMillisecondsF());
-
-  log << "\x1b[0;m";
-
-  if (phase == TRACE_EVENT_PHASE_BEGIN)
-    thread_event_start_times_[thread_id].push(timestamp);
-
-  return log.str();
-}
-
 void TraceLog::UpdateTraceEventDuration(
     const unsigned char* category_group_enabled,
     const char* name,
@@ -1623,63 +869,10 @@
   if (!*category_group_enabled)
     return;
 
-  UpdateTraceEventDurationExplicit(
-      category_group_enabled, name, handle, base::PlatformThread::CurrentId(),
-      /*explicit_timestamps=*/false, OffsetNow(), ThreadNow());
-}
-
-void TraceLog::UpdateTraceEventDurationExplicit(
-    const unsigned char* category_group_enabled,
-    const char* name,
-    TraceEventHandle handle,
-    PlatformThreadId thread_id,
-    bool explicit_timestamps,
-    const TimeTicks& now,
-    const ThreadTicks& thread_now) {
-  if (!*category_group_enabled)
-    return;
-
-  // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when
-  // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) ->
-  // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ...
-  if (thread_is_in_trace_event) {
-    return;
-  }
-  const AutoReset<bool> resetter(&thread_is_in_trace_event, true);
-
-  if (*category_group_enabled) {
-    auto update_duration_override =
-        update_duration_override_.load(std::memory_order_relaxed);
-    if (update_duration_override) {
-      update_duration_override(category_group_enabled, name, handle, thread_id,
-                               explicit_timestamps, now, thread_now);
-      return;
-    }
-  }
-
-  std::string console_message;
-  if (*category_group_enabled) {
-    OptionalAutoLock lock(&lock_);
-
-    TraceEvent* trace_event = GetEventByHandleInternal(handle, &lock);
-    if (trace_event) {
-      DCHECK(trace_event->phase() == TRACE_EVENT_PHASE_COMPLETE);
-
-      trace_event->UpdateDuration(now, thread_now);
-    }
-
-    if (trace_options() & kInternalEchoToConsole) {
-      console_message =
-          EventToConsoleMessage(TRACE_EVENT_PHASE_END, now, trace_event);
-    }
-  }
-
-  if (!console_message.empty())
-    LOG(ERROR) << console_message;
-}
-
-uint64_t TraceLog::MangleEventId(uint64_t id) {
-  return id ^ process_id_hash_;
+  OnUpdateLegacyTraceEventDuration(
+      category_group_enabled, name, base::PlatformThread::CurrentId(),
+      /*explicit_timestamps=*/false,
+      base::subtle::TimeTicksNowIgnoringOverride(), ThreadNow());
 }
 
 template <typename T>
@@ -1687,40 +880,13 @@
                                            const char* metadata_name,
                                            const char* arg_name,
                                            const T& value) {
-  auto trace_event_override =
-      add_trace_event_override_.load(std::memory_order_relaxed);
-  if (trace_event_override) {
-    TraceEvent trace_event;
-    InitializeMetadataEvent(&trace_event, thread_id, metadata_name, arg_name,
-                            value);
-    trace_event_override(&trace_event, /*thread_will_flush=*/true, nullptr);
-  } else {
-    InitializeMetadataEvent(
-        AddEventToThreadSharedChunkWhileLocked(nullptr, false), thread_id,
-        metadata_name, arg_name, value);
-  }
+  TraceEvent trace_event;
+  InitializeMetadataEvent(&trace_event, thread_id, metadata_name, arg_name,
+                          value);
+  OnAddLegacyTraceEvent(&trace_event);
 }
 
 void TraceLog::AddMetadataEventsWhileLocked() {
-  auto trace_event_override =
-      add_trace_event_override_.load(std::memory_order_relaxed);
-
-  // Move metadata added by |AddMetadataEvent| into the trace log.
-  if (trace_event_override) {
-    while (!metadata_events_.empty()) {
-      trace_event_override(metadata_events_.back().get(),
-                           /*thread_will_flush=*/true, nullptr);
-      metadata_events_.pop_back();
-    }
-  } else {
-    while (!metadata_events_.empty()) {
-      TraceEvent* event =
-          AddEventToThreadSharedChunkWhileLocked(nullptr, false);
-      *event = std::move(*metadata_events_.back());
-      metadata_events_.pop_back();
-    }
-  }
-
 #if !BUILDFLAG(IS_NACL)  // NaCl shouldn't expose the process id.
   AddMetadataEventWhileLocked(0, "num_cpus", "number",
                               base::SysInfo::NumberOfProcessors());
@@ -1760,60 +926,10 @@
     AddMetadataEventWhileLocked(it.first, "thread_sort_index", "sort_index",
                                 it.second);
   }
-
-  // If buffer is full, add a metadata record to report this.
-  if (!buffer_limit_reached_timestamp_.is_null()) {
-    AddMetadataEventWhileLocked(current_thread_id, "trace_buffer_overflowed",
-                                "overflowed_at_ts",
-                                buffer_limit_reached_timestamp_);
-  }
-}
-
-TraceEvent* TraceLog::GetEventByHandle(TraceEventHandle handle) {
-  return GetEventByHandleInternal(handle, nullptr);
-}
-
-TraceEvent* TraceLog::GetEventByHandleInternal(TraceEventHandle handle,
-                                               OptionalAutoLock* lock)
-    NO_THREAD_SAFETY_ANALYSIS {
-  if (!handle.chunk_seq)
-    return nullptr;
-
-  DCHECK(handle.chunk_seq);
-  DCHECK(handle.chunk_index <= TraceBufferChunk::kMaxChunkIndex);
-  DCHECK(handle.event_index <= TraceBufferChunk::kTraceBufferChunkSize - 1);
-
-  if (thread_local_event_buffer) {
-    TraceEvent* trace_event =
-        thread_local_event_buffer->GetEventByHandle(handle);
-    if (trace_event)
-      return trace_event;
-  }
-
-  // The event has been out-of-control of the thread local buffer.
-  // Try to get the event from the main buffer with a lock.
-  // NO_THREAD_SAFETY_ANALYSIS: runtime-dependent locking here.
-  if (lock)
-    lock->EnsureAcquired();
-
-  if (thread_shared_chunk_ &&
-      handle.chunk_index == thread_shared_chunk_index_) {
-    return handle.chunk_seq == thread_shared_chunk_->seq()
-               ? thread_shared_chunk_->GetEventAt(handle.event_index)
-               : nullptr;
-  }
-
-  return logged_events_->GetEventByHandle(handle);
 }
 
 void TraceLog::SetProcessID(ProcessId process_id) {
   process_id_ = process_id;
-  // Create a FNV hash from the process ID for XORing.
-  // See http://isthe.com/chongo/tech/comp/fnv/ for algorithm details.
-  const uint64_t kOffsetBasis = 14695981039346656037ull;
-  const uint64_t kFnvPrime = 1099511628211ull;
-  const uint64_t pid = static_cast<uint64_t>(process_id_);
-  process_id_hash_ = (kOffsetBasis ^ pid) * kFnvPrime;
 }
 
 void TraceLog::SetProcessSortIndex(int sort_index) {
@@ -1867,43 +983,6 @@
   return enabled_state_observers_.size();
 }
 
-void TraceLog::SetCurrentThreadBlocksMessageLoop() {
-  thread_blocks_message_loop = true;
-  // This will flush the thread local buffer.
-  delete thread_local_event_buffer;
-}
-
-TraceBuffer* TraceLog::CreateTraceBuffer() {
-  HEAP_PROFILER_SCOPED_IGNORE;
-  InternalTraceOptions options = trace_options();
-  const size_t config_buffer_chunks =
-      trace_config_.GetTraceBufferSizeInEvents() / kTraceBufferChunkSize;
-  if (options & kInternalRecordContinuously) {
-    return TraceBuffer::CreateTraceBufferRingBuffer(
-        config_buffer_chunks > 0 ? config_buffer_chunks
-                                 : kTraceEventRingBufferChunks);
-  }
-  if (options & kInternalEchoToConsole) {
-    return TraceBuffer::CreateTraceBufferRingBuffer(
-        config_buffer_chunks > 0 ? config_buffer_chunks
-                                 : kEchoToConsoleTraceEventBufferChunks);
-  }
-  if (options & kInternalRecordAsMuchAsPossible) {
-    return TraceBuffer::CreateTraceBufferVectorOfSize(
-        config_buffer_chunks > 0 ? config_buffer_chunks
-                                 : kTraceEventVectorBigBufferChunks);
-  }
-  return TraceBuffer::CreateTraceBufferVectorOfSize(
-      config_buffer_chunks > 0 ? config_buffer_chunks
-                               : kTraceEventVectorBufferChunks);
-}
-
-void TraceLog::SetTraceBufferForTesting(
-    std::unique_ptr<TraceBuffer> trace_buffer) {
-  AutoLock lock(lock_);
-  logged_events_ = std::move(trace_buffer);
-}
-
 void TraceLog::OnSetup(const perfetto::DataSourceBase::SetupArgs& args) {
   AutoLock lock(track_event_lock_);
   track_event_sessions_.emplace_back(args.internal_instance_index, *args.config,
@@ -1966,12 +1045,6 @@
   }
 }
 
-void ConvertableToTraceFormat::EstimateTraceMemoryOverhead(
-    TraceEventMemoryOverhead* overhead) {
-  overhead->Add(TraceEventMemoryOverhead::kConvertableToTraceFormat,
-                sizeof(*this));
-}
-
 }  // namespace trace_event
 }  // namespace base
 
@@ -1989,19 +1062,6 @@
       phase, category_group_enabled, name, scope, id, args, flags);
 }
 
-base::trace_event::TraceEventHandle AddTraceEventWithBindId(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
-    uint64_t bind_id,
-    base::trace_event::TraceArguments* args,
-    unsigned int flags) {
-  return base::trace_event::TraceLog::GetInstance()->AddTraceEventWithBindId(
-      phase, category_group_enabled, name, scope, id, bind_id, args, flags);
-}
-
 base::trace_event::TraceEventHandle AddTraceEventWithProcessId(
     char phase,
     const unsigned char* category_group_enabled,
@@ -2021,22 +1081,6 @@
     const char* name,
     const char* scope,
     uint64_t id,
-    base::PlatformThreadId thread_id,
-    const base::TimeTicks& timestamp,
-    base::trace_event::TraceArguments* args,
-    unsigned int flags) {
-  return base::trace_event::TraceLog::GetInstance()
-      ->AddTraceEventWithThreadIdAndTimestamp(phase, category_group_enabled,
-                                              name, scope, id, thread_id,
-                                              timestamp, args, flags);
-}
-
-base::trace_event::TraceEventHandle AddTraceEventWithThreadIdAndTimestamp(
-    char phase,
-    const unsigned char* category_group_enabled,
-    const char* name,
-    const char* scope,
-    uint64_t id,
     uint64_t bind_id,
     base::PlatformThreadId thread_id,
     const base::TimeTicks& timestamp,
@@ -2061,20 +1105,8 @@
   return base::trace_event::TraceLog::GetInstance()
       ->AddTraceEventWithThreadIdAndTimestamps(
           phase, category_group_enabled, name, scope, id,
-          /*bind_id=*/trace_event_internal::kNoId, thread_id, timestamp,
-          thread_timestamp, nullptr, flags);
-}
-
-void AddMetadataEvent(const unsigned char* category_group_enabled,
-                      const char* name,
-                      base::trace_event::TraceArguments* args,
-                      unsigned int flags) {
-  return base::trace_event::TraceLog::GetInstance()->AddMetadataEvent(
-      category_group_enabled, name, args, flags);
-}
-
-int GetNumTracesRecorded() {
-  return base::trace_event::TraceLog::GetInstance()->GetNumTracesRecorded();
+          trace_event_internal::kNoId,  // bind_id,
+          thread_id, timestamp, thread_timestamp, nullptr, flags);
 }
 
 void UpdateTraceEventDuration(const unsigned char* category_group_enabled,
@@ -2084,18 +1116,4 @@
       category_group_enabled, name, handle);
 }
 
-void UpdateTraceEventDurationExplicit(
-    const unsigned char* category_group_enabled,
-    const char* name,
-    base::trace_event::TraceEventHandle handle,
-    base::PlatformThreadId thread_id,
-    bool explicit_timestamps,
-    const base::TimeTicks& now,
-    const base::ThreadTicks& thread_now) {
-  return base::trace_event::TraceLog::GetInstance()
-      ->UpdateTraceEventDurationExplicit(category_group_enabled, name, handle,
-                                         thread_id, explicit_timestamps, now,
-                                         thread_now);
-}
-
 }  // namespace trace_event_internal
diff --git a/base/trace_event/trace_log.h b/base/trace_event/trace_log.h
index 3557083..9e3cd28c 100644
--- a/base/trace_event/trace_log.h
+++ b/base/trace_event/trace_log.h
@@ -8,16 +8,13 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <atomic>
 #include <map>
 #include <memory>
-#include <optional>
 #include <string>
 #include <unordered_map>
 #include <vector>
 
 #include "base/base_export.h"
-#include "base/containers/stack.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
@@ -26,7 +23,6 @@
 #include "base/threading/platform_thread.h"
 #include "base/time/time_override.h"
 #include "base/trace_event/builtin_categories.h"
-#include "base/trace_event/memory_dump_provider.h"
 #include "base/trace_event/trace_config.h"
 #include "base/trace_event/trace_event_impl.h"
 #include "build/build_config.h"
@@ -43,24 +39,10 @@
 
 namespace trace_event {
 
-class TraceBuffer;
-class TraceBufferChunk;
-class TraceEvent;
-class TraceEventMemoryOverhead;
 class JsonStringOutputWriter;
 
-struct BASE_EXPORT TraceLogStatus {
-  TraceLogStatus();
-  ~TraceLogStatus();
-  uint32_t event_capacity;
-  uint32_t event_count;
-};
-
-class BASE_EXPORT TraceLog :
-    public perfetto::TrackEventSessionObserver,
-    public MemoryDumpProvider {
+class BASE_EXPORT TraceLog : public perfetto::TrackEventSessionObserver {
  public:
-  class ThreadLocalEventBuffer;
 
   static TraceLog* GetInstance();
 
@@ -70,10 +52,6 @@
   // Retrieves a copy (for thread-safety) of the current TraceConfig.
   TraceConfig GetCurrentTraceConfig() const;
 
-  // Initializes the thread-local event buffer, if not already initialized and
-  // if the current thread supports that (has a message loop).
-  void InitializeThreadLocalEventBufferIfSupported();
-
   // See TraceConfig comments for details on how to control which categories
   // will be traced.
   void SetEnabled(const TraceConfig& trace_config);
@@ -105,13 +83,6 @@
     return active_track_event_sessions_ > 0;
   }
 
-  // The number of times we have begun recording traces. If tracing is off,
-  // returns -1. If tracing is on, then it returns the number of times we have
-  // recorded a trace. By watching for this number to increment, you can
-  // passively discover when a new trace has begun. This is then used to
-  // implement the TRACE_EVENT_IS_NEW_TRACE() primitive.
-  int GetNumTracesRecorded();
-
   // Enabled state listeners give a callback when tracing is enabled or
   // disabled. This can be used to tie into other library's tracing systems
   // on-demand.
@@ -165,27 +136,6 @@
   void RemoveAsyncEnabledStateObserver(AsyncEnabledStateObserver* listener);
   bool HasAsyncEnabledStateObserver(AsyncEnabledStateObserver* listener) const;
 
-  // Observers that are notified when incremental state is cleared. This only
-  // happens when tracing using the perfetto backend.
-  class BASE_EXPORT IncrementalStateObserver {
-   public:
-    virtual ~IncrementalStateObserver() = default;
-
-    // Called just after the tracing system has cleared incremental state, while
-    // a tracing session is active.
-    virtual void OnIncrementalStateCleared() = 0;
-  };
-  // Adds an observer. Cannot be called from within the observer callback.
-  void AddIncrementalStateObserver(IncrementalStateObserver* listener);
-  // Removes an observer. Cannot be called from within the observer callback.
-  void RemoveIncrementalStateObserver(IncrementalStateObserver* listener);
-
-  TraceLogStatus GetStatus() const;
-
-  // Computes an estimate of the size of the TraceLog including all the retained
-  // objects.
-  void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead);
-
   void SetArgumentFilterPredicate(
       const ArgumentFilterPredicate& argument_filter_predicate);
   ArgumentFilterPredicate GetArgumentFilterPredicate() const;
@@ -215,26 +165,6 @@
   // Cancels tracing and discards collected data.
   void CancelTracing(const OutputCallback& cb);
 
-  using AddTraceEventOverrideFunction = void (*)(TraceEvent*,
-                                                 bool thread_will_flush,
-                                                 TraceEventHandle* handle);
-  using OnFlushFunction = void (*)();
-  using UpdateDurationFunction =
-      void (*)(const unsigned char* category_group_enabled,
-               const char* name,
-               TraceEventHandle handle,
-               PlatformThreadId thread_id,
-               bool explicit_timestamps,
-               const TimeTicks& now,
-               const ThreadTicks& thread_now);
-  // The callbacks will be called up until the point where the flush is
-  // finished, i.e. must be callable until OutputCallback is called with
-  // has_more_events==false.
-  void SetAddTraceEventOverrides(
-      const AddTraceEventOverrideFunction& add_event_override,
-      const OnFlushFunction& on_flush_callback,
-      const UpdateDurationFunction& update_duration_callback);
-
   // Called by TRACE_EVENT* macros, don't call this directly.
   // The name parameter is a category group for example:
   // TRACE_EVENT0("renderer,webkit", "WebViewImpl::HandleInputEvent")
@@ -245,13 +175,6 @@
   // Called by TRACE_EVENT* macros, don't call this directly.
   // If |copy| is set, |name|, |arg_name1| and |arg_name2| will be deep copied
   // into the event; see "Memory scoping note" and TRACE_EVENT_COPY_XXX above.
-  bool ShouldAddAfterUpdatingState(char phase,
-                                   const unsigned char* category_group_enabled,
-                                   const char* name,
-                                   uint64_t id,
-                                   PlatformThreadId thread_id,
-                                   const TimeTicks timestamp,
-                                   TraceArguments* args);
   TraceEventHandle AddTraceEvent(char phase,
                                  const unsigned char* category_group_enabled,
                                  const char* name,
@@ -259,15 +182,6 @@
                                  uint64_t id,
                                  TraceArguments* args,
                                  unsigned int flags);
-  TraceEventHandle AddTraceEventWithBindId(
-      char phase,
-      const unsigned char* category_group_enabled,
-      const char* name,
-      const char* scope,
-      uint64_t id,
-      uint64_t bind_id,
-      TraceArguments* args,
-      unsigned int flags);
   TraceEventHandle AddTraceEventWithProcessId(
       char phase,
       const unsigned char* category_group_enabled,
@@ -283,16 +197,6 @@
       const char* name,
       const char* scope,
       uint64_t id,
-      PlatformThreadId thread_id,
-      const TimeTicks& timestamp,
-      TraceArguments* args,
-      unsigned int flags);
-  TraceEventHandle AddTraceEventWithThreadIdAndTimestamp(
-      char phase,
-      const unsigned char* category_group_enabled,
-      const char* name,
-      const char* scope,
-      uint64_t id,
       uint64_t bind_id,
       PlatformThreadId thread_id,
       const TimeTicks& timestamp,
@@ -311,25 +215,10 @@
       TraceArguments* args,
       unsigned int flags);
 
-  // Adds a metadata event that will be written when the trace log is flushed.
-  void AddMetadataEvent(const unsigned char* category_group_enabled,
-                        const char* name,
-                        TraceArguments* args,
-                        unsigned int flags);
-
   void UpdateTraceEventDuration(const unsigned char* category_group_enabled,
                                 const char* name,
                                 TraceEventHandle handle);
 
-  void UpdateTraceEventDurationExplicit(
-      const unsigned char* category_group_enabled,
-      const char* name,
-      TraceEventHandle handle,
-      PlatformThreadId thread_id,
-      bool explicit_timestamps,
-      const TimeTicks& now,
-      const ThreadTicks& thread_now);
-
   ProcessId process_id() const { return process_id_; }
 
   std::unordered_map<int, std::string> process_labels() const {
@@ -337,15 +226,10 @@
     return process_labels_;
   }
 
-  uint64_t MangleEventId(uint64_t id);
-
   // Exposed for unittesting:
   // Allows clearing up our singleton instance.
   static void ResetForTesting();
 
-  // Allow tests to inspect TraceEvents.
-  TraceEvent* GetEventByHandle(TraceEventHandle handle);
-
   void SetProcessID(ProcessId process_id);
 
   // Process sort indices, if set, override the order of a process will appear
@@ -369,14 +253,6 @@
 
   size_t GetObserverCountForTest() const;
 
-  // Call this method if the current thread may block the message loop to
-  // prevent the thread from using the thread-local buffer because the thread
-  // may not handle the flush request in time causing lost of unflushed events.
-  void SetCurrentThreadBlocksMessageLoop();
-
-  // Replaces |logged_events_| with a new TraceBuffer for testing.
-  void SetTraceBufferForTesting(std::unique_ptr<TraceBuffer> trace_buffer);
-
   struct TrackEventSession {
     uint32_t internal_instance_index;
     perfetto::DataSourceConfig config;
@@ -400,35 +276,9 @@
   void OnStart(const perfetto::DataSourceBase::StartArgs&) override;
   void OnStop(const perfetto::DataSourceBase::StopArgs&) override;
 
-  // Called by the perfetto backend just after incremental state was cleared.
-  void OnIncrementalStateCleared();
-
  private:
-  typedef unsigned int InternalTraceOptions;
-
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
-                           TraceBufferRingBufferGetReturnChunk);
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
-                           TraceBufferRingBufferHalfIteration);
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
-                           TraceBufferRingBufferFullIteration);
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, TraceBufferVectorReportFull);
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
-                           ConvertTraceConfigToInternalOptions);
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
-                           TraceRecordAsMuchAsPossibleMode);
-  FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, ConfigTraceBufferLimit);
-
   friend class base::NoDestructor<TraceLog>;
 
-  // MemoryDumpProvider implementation.
-  bool OnMemoryDump(const MemoryDumpArgs& args,
-                    ProcessMemoryDump* pmd) override;
-
-  InternalTraceOptions GetInternalOptionsFromTraceConfig(
-      const TraceConfig& config);
-
-  class OptionalAutoLock;
   struct RegisteredAsyncObserver;
 
   explicit TraceLog(int generation);
@@ -441,76 +291,17 @@
                                    const T& value)
       EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
-  InternalTraceOptions trace_options() const {
-    return trace_options_.load(std::memory_order_relaxed);
-  }
-
-  TraceBuffer* trace_buffer() const { return logged_events_.get(); }
-  TraceBuffer* CreateTraceBuffer();
-
-  std::string EventToConsoleMessage(char phase,
-                                    const TimeTicks& timestamp,
-                                    TraceEvent* trace_event);
-
-  TraceEvent* AddEventToThreadSharedChunkWhileLocked(TraceEventHandle* handle,
-                                                     bool check_buffer_is_full)
-      EXCLUSIVE_LOCKS_REQUIRED(lock_);
-  void CheckIfBufferIsFullWhileLocked() EXCLUSIVE_LOCKS_REQUIRED(lock_);
   void SetDisabledWhileLocked() EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
-  TraceEvent* GetEventByHandleInternal(TraceEventHandle handle,
-                                       OptionalAutoLock* lock);
-
   void FlushInternal(const OutputCallback& cb,
                      bool use_worker_thread,
                      bool discard_events);
 
   void OnTraceData(const char* data, size_t size, bool has_more);
 
-  // |generation| is used in the following callbacks to check if the callback
-  // is called for the flush of the current |logged_events_|.
-  void FlushCurrentThread(int generation, bool discard_events);
-  // Usually it runs on a different thread.
-  static void ConvertTraceEventsToTraceFormat(
-      std::unique_ptr<TraceBuffer> logged_events,
-      const TraceLog::OutputCallback& flush_output_callback,
-      const ArgumentFilterPredicate& argument_filter_predicate);
-  void FinishFlush(int generation, bool discard_events);
-  void OnFlushTimeout(int generation, bool discard_events);
-
-  int generation() const {
-    return generation_.load(std::memory_order_relaxed);
-  }
-  bool CheckGeneration(int generation) const {
-    return generation == this->generation();
-  }
-  void UseNextTraceBuffer();
-
-  TimeTicks OffsetNow() const {
-    // This should be TRACE_TIME_TICKS_NOW but include order makes that hard.
-    return OffsetTimestamp(base::subtle::TimeTicksNowIgnoringOverride());
-  }
-  TimeTicks OffsetTimestamp(const TimeTicks& timestamp) const {
-    return timestamp - time_offset_;
-  }
-
-  // Internal representation of trace options since we store the currently used
-  // trace option as an AtomicWord.
-  static const InternalTraceOptions kInternalNone;
-  static const InternalTraceOptions kInternalRecordUntilFull;
-  static const InternalTraceOptions kInternalRecordContinuously;
-  static const InternalTraceOptions kInternalEchoToConsole;
-  static const InternalTraceOptions kInternalRecordAsMuchAsPossible;
-  static const InternalTraceOptions kInternalEnableArgumentFilter;
-
   // This lock protects TraceLog member accesses (except for members protected
   // by thread_info_lock_) from arbitrary threads.
   mutable Lock lock_;
-  Lock thread_info_lock_;
-  bool enabled_{false};
-  int num_traces_recorded_{0};
-  std::unique_ptr<TraceBuffer> logged_events_;
-  std::vector<std::unique_ptr<TraceEvent>> metadata_events_;
 
   // The lock protects observers access.
   mutable Lock observers_lock_;
@@ -523,56 +314,18 @@
   // added to |enabled_state_observers_|.
   std::vector<std::unique_ptr<EnabledStateObserver>>
       owned_enabled_state_observer_copy_ GUARDED_BY(observers_lock_);
-  std::vector<raw_ptr<IncrementalStateObserver, VectorExperimental>>
-      incremental_state_observers_ GUARDED_BY(observers_lock_);
 
   int next_process_label_id_ GUARDED_BY(lock_) = 0;
   std::unordered_map<int, std::string> process_labels_;
   int process_sort_index_;
   std::unordered_map<PlatformThreadId, int> thread_sort_indices_;
-  std::unordered_map<PlatformThreadId, std::string> thread_names_
-      GUARDED_BY(thread_info_lock_);
-
-  // The following two maps are used only when ECHO_TO_CONSOLE.
-  std::unordered_map<PlatformThreadId, base::stack<TimeTicks>>
-      thread_event_start_times_ GUARDED_BY(thread_info_lock_);
-  std::unordered_map<std::string, size_t> thread_colors_
-      GUARDED_BY(thread_info_lock_);
-
-  TimeTicks buffer_limit_reached_timestamp_;
-
-  // XORed with TraceID to make it unlikely to collide with other processes.
-  uint64_t process_id_hash_;
 
   ProcessId process_id_;
 
-  TimeDelta time_offset_;
-
-  std::atomic<InternalTraceOptions> trace_options_;
-
-  TraceConfig trace_config_;
-
-  // Contains task runners for the threads that have had at least one event
-  // added into the local event buffer.
-  std::unordered_map<PlatformThreadId, scoped_refptr<SingleThreadTaskRunner>>
-      thread_task_runners_;
-
-  // For events which can't be added into the thread local buffer, e.g. events
-  // from threads without a message loop.
-  std::unique_ptr<TraceBufferChunk> thread_shared_chunk_;
-  size_t thread_shared_chunk_index_;
-
   // Set when asynchronous Flush is in progress.
-  OutputCallback flush_output_callback_;
-  scoped_refptr<SequencedTaskRunner> flush_task_runner_;
   ArgumentFilterPredicate argument_filter_predicate_;
   MetadataFilterPredicate metadata_filter_predicate_;
   bool record_host_app_package_name_{false};
-  std::atomic<int> generation_;
-  bool use_worker_thread_;
-  std::atomic<AddTraceEventOverrideFunction> add_trace_event_override_{nullptr};
-  std::atomic<OnFlushFunction> on_flush_override_{nullptr};
-  std::atomic<UpdateDurationFunction> update_duration_override_{nullptr};
 
   std::unique_ptr<perfetto::TracingSession> tracing_session_;
   perfetto::TraceConfig perfetto_config_;
@@ -586,10 +339,6 @@
   std::unique_ptr<JsonStringOutputWriter> json_output_writer_;
   OutputCallback proto_output_callback_;
 #endif  // BUILDFLAG(USE_PERFETTO_TRACE_PROCESSOR)
-
-#if BUILDFLAG(IS_ANDROID)
-  std::optional<TraceConfig> atrace_startup_config_;
-#endif
 };
 
 }  // namespace trace_event
diff --git a/base/trace_event/trace_log_constants.cc b/base/trace_event/trace_log_constants.cc
deleted file mode 100644
index 6eb6191b..0000000
--- a/base/trace_event/trace_log_constants.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2013 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/trace_event/trace_log.h"
-
-namespace base {
-namespace trace_event {
-
-// Constant used by TraceLog's internal implementation of trace_option.
-const TraceLog::InternalTraceOptions
-    TraceLog::kInternalNone = 0;
-const TraceLog::InternalTraceOptions
-    TraceLog::kInternalRecordUntilFull = 1 << 0;
-const TraceLog::InternalTraceOptions
-    TraceLog::kInternalRecordContinuously = 1 << 1;
-// 1 << 2 is reserved for the DEPRECATED kInternalEnableSampling. DO NOT USE.
-const TraceLog::InternalTraceOptions
-    TraceLog::kInternalEchoToConsole = 1 << 3;
-const TraceLog::InternalTraceOptions
-    TraceLog::kInternalRecordAsMuchAsPossible = 1 << 4;
-const TraceLog::InternalTraceOptions
-    TraceLog::kInternalEnableArgumentFilter = 1 << 5;
-
-}  // namespace trace_event
-}  // namespace base
diff --git a/base/trace_event/traced_value.cc b/base/trace_event/traced_value.cc
index 886f54e..f5ace9f 100644
--- a/base/trace_event/traced_value.cc
+++ b/base/trace_event/traced_value.cc
@@ -22,7 +22,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/trace_event_impl.h"
-#include "base/trace_event/trace_event_memory_overhead.h"
 #include "base/trace_event/trace_log.h"
 #include "base/values.h"
 
@@ -325,15 +324,6 @@
     DCHECK(state_stack.empty());
   }
 
-  void EstimateTraceMemoryOverhead(
-      TraceEventMemoryOverhead* overhead) override {
-    overhead->Add(TraceEventMemoryOverhead::kTracedValue,
-                  /* allocated size */
-                  pickle_.GetTotalAllocatedSize(),
-                  /* resident size */
-                  pickle_.size());
-  }
-
   std::unique_ptr<base::Value> ToBaseValue() const {
     base::Value root(base::Value::Type::DICT);
     Value* cur_dict = &root;
@@ -650,11 +640,6 @@
   return writer_->AppendToProto(appender);
 }
 
-void TracedValue::EstimateTraceMemoryOverhead(
-    TraceEventMemoryOverhead* overhead) {
-  writer_->EstimateTraceMemoryOverhead(overhead);
-}
-
 TracedValue::Array::Array(const std::initializer_list<ArrayItem> items) {
   items_ = std::move(items);
 }
diff --git a/base/trace_event/traced_value.h b/base/trace_event/traced_value.h
index 727543c..7675286 100644
--- a/base/trace_event/traced_value.h
+++ b/base/trace_event/traced_value.h
@@ -24,8 +24,6 @@
 
 namespace trace_event {
 
-class TraceEventMemoryOverhead;
-
 class BASE_EXPORT TracedValue : public ConvertableToTraceFormat {
  public:
   // TODO(oysteine): |capacity| is not used in any production code. Consider
@@ -70,8 +68,6 @@
   void AppendAsTraceFormat(std::string* out) const override;
   bool AppendToProto(ProtoAppender* appender) const override;
 
-  void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead) override;
-
   // Helper to auto-close an array. The call to |ArrayScope::~ArrayScope| closes
   // the array.
   //
@@ -377,9 +373,6 @@
 
     virtual bool AppendToProto(ProtoAppender* appender);
 
-    virtual void EstimateTraceMemoryOverhead(
-        TraceEventMemoryOverhead* overhead) = 0;
-
     virtual bool IsPickleWriter() const = 0;
     virtual bool IsProtoWriter() const = 0;
   };
diff --git a/base/trace_event/typed_macros_internal.cc b/base/trace_event/typed_macros_internal.cc
deleted file mode 100644
index 0f54c58..0000000
--- a/base/trace_event/typed_macros_internal.cc
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright 2019 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/trace_event/typed_macros_internal.h"
-
-#include "base/notreached.h"
-#include "base/time/time.h"
-#include "base/trace_event/trace_event.h"
-#include "base/trace_event/typed_macros.h"
-
-namespace {
-
-base::ThreadTicks ThreadNow() {
-  return base::ThreadTicks::IsSupported()
-             ? base::subtle::ThreadTicksNowIgnoringOverride()
-             : base::ThreadTicks();
-}
-
-base::trace_event::PrepareTrackEventFunction g_typed_event_callback = nullptr;
-base::trace_event::PrepareTracePacketFunction g_trace_packet_callback = nullptr;
-base::trace_event::EmitEmptyTracePacketFunction g_empty_packet_callback =
-    nullptr;
-
-std::pair<char /*phase*/, unsigned long long /*id*/>
-GetPhaseAndIdForTraceLog(bool explicit_track, uint64_t track_uuid, char phase) {
-  if (!explicit_track)
-    return std::make_pair(phase, trace_event_internal::kNoId);
-
-  switch (phase) {
-    case TRACE_EVENT_PHASE_BEGIN:
-      phase = TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN;
-      break;
-    case TRACE_EVENT_PHASE_END:
-      phase = TRACE_EVENT_PHASE_NESTABLE_ASYNC_END;
-      break;
-    case TRACE_EVENT_PHASE_INSTANT:
-      phase = TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT;
-      break;
-    default:
-      NOTREACHED();
-  }
-  return std::make_pair(phase, static_cast<unsigned long long>(track_uuid));
-}
-
-}  // namespace
-
-namespace trace_event_internal {
-const perfetto::Track kDefaultTrack{};
-}  // namespace trace_event_internal
-
-namespace base {
-namespace trace_event {
-
-void EnableTypedTraceEvents(
-    PrepareTrackEventFunction typed_event_callback,
-    PrepareTracePacketFunction trace_packet_callback,
-    EmitEmptyTracePacketFunction empty_packet_callback) {
-  g_typed_event_callback = typed_event_callback;
-  g_trace_packet_callback = trace_packet_callback;
-  g_empty_packet_callback = empty_packet_callback;
-}
-
-void ResetTypedTraceEventsForTesting() {
-  g_typed_event_callback = nullptr;
-  g_trace_packet_callback = nullptr;
-  g_empty_packet_callback = nullptr;
-}
-
-TrackEventHandle::TrackEventHandle(TrackEvent* event,
-                                   IncrementalState* incremental_state,
-                                   CompletionListener* listener,
-                                   bool filter_debug_annotations)
-    : event_(event),
-      incremental_state_(incremental_state),
-      listener_(listener),
-      filter_debug_annotations_(filter_debug_annotations) {}
-
-TrackEventHandle::TrackEventHandle()
-    : TrackEventHandle(nullptr, nullptr, nullptr, false) {}
-
-TrackEventHandle::~TrackEventHandle() {
-  if (listener_)
-    listener_->OnTrackEventCompleted();
-}
-
-TrackEventHandle::CompletionListener::~CompletionListener() = default;
-
-TracePacketHandle::TracePacketHandle(PerfettoPacketHandle packet,
-                                     CompletionListener* listener)
-    : packet_(std::move(packet)), listener_(listener) {}
-
-TracePacketHandle::TracePacketHandle()
-    : TracePacketHandle(PerfettoPacketHandle(), nullptr) {}
-
-TracePacketHandle::~TracePacketHandle() {
-  if (listener_)
-    listener_->OnTracePacketCompleted();
-}
-
-TracePacketHandle::TracePacketHandle(TracePacketHandle&& handle) noexcept {
-  *this = std::move(handle);
-}
-
-TracePacketHandle& TracePacketHandle::operator=(TracePacketHandle&& handle) {
-  this->packet_ = std::move(handle.packet_);
-  this->listener_ = handle.listener_;
-  return *this;
-}
-
-TracePacketHandle::CompletionListener::~CompletionListener() = default;
-
-}  // namespace trace_event
-}  // namespace base
-
-namespace trace_event_internal {
-
-base::trace_event::TrackEventHandle CreateTrackEvent(
-    char phase,
-    const unsigned char* category_group_enabled,
-    perfetto::StaticString name,
-    base::TimeTicks ts,
-    uint64_t track_uuid,
-    bool explicit_track) {
-  DCHECK(phase == TRACE_EVENT_PHASE_BEGIN || phase == TRACE_EVENT_PHASE_END ||
-         phase == TRACE_EVENT_PHASE_INSTANT);
-  DCHECK(category_group_enabled);
-
-  if (!g_typed_event_callback)
-    return base::trace_event::TrackEventHandle();
-
-  const auto thread_id = base::PlatformThread::CurrentId();
-  auto* trace_log = base::trace_event::TraceLog::GetInstance();
-  DCHECK(trace_log);
-
-  // Provide events emitted onto different tracks as NESTABLE_ASYNC events to
-  // TraceLog, so that e.g. ETW export is aware of them not being a sync event
-  // for the current thread.
-  auto phase_and_id_for_trace_log =
-      GetPhaseAndIdForTraceLog(explicit_track, track_uuid, phase);
-
-  unsigned int flags = TRACE_EVENT_FLAG_NONE;
-  if (ts.is_null()) {
-    ts = TRACE_TIME_TICKS_NOW();
-  } else {
-    flags |= TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP;
-  }
-
-  if (!trace_log->ShouldAddAfterUpdatingState(
-          phase_and_id_for_trace_log.first, category_group_enabled, name.value,
-          phase_and_id_for_trace_log.second, thread_id, ts, nullptr)) {
-    return base::trace_event::TrackEventHandle();
-  }
-
-  if (phase == TRACE_EVENT_PHASE_INSTANT && !explicit_track) {
-    flags |= TRACE_EVENT_SCOPE_THREAD;
-  }
-
-  // Only emit thread time / instruction count for events on the default track
-  // without explicit timestamp.
-  base::ThreadTicks thread_now;
-  if ((flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP) == 0 && !explicit_track) {
-    thread_now = ThreadNow();
-  }
-
-  base::trace_event::TraceEvent event(
-      thread_id, ts, thread_now, phase, category_group_enabled, name.value,
-      trace_event_internal::kGlobalScope, trace_event_internal::kNoId,
-      trace_event_internal::kNoId, nullptr, flags);
-
-  return g_typed_event_callback(&event);
-}
-
-base::trace_event::TracePacketHandle CreateTracePacket() {
-  // We only call CreateTracePacket() if the embedder installed a valid
-  // g_typed_event_callback, and in that case we also expect a valid
-  // g_trace_packet_callback.
-  DCHECK(g_trace_packet_callback);
-  return g_trace_packet_callback();
-}
-
-void AddEmptyPacket() {
-  if (g_empty_packet_callback)
-    g_empty_packet_callback();
-}
-
-bool ShouldEmitTrackDescriptor(
-    uint64_t track_uuid,
-    base::trace_event::TrackEventHandle::IncrementalState* incr_state) {
-  auto it_and_inserted = incr_state->seen_tracks.insert(track_uuid);
-  return it_and_inserted.second;
-}
-
-}  // namespace trace_event_internal
diff --git a/base/trace_event/typed_macros_internal.h b/base/trace_event/typed_macros_internal.h
deleted file mode 100644
index 19582dc..0000000
--- a/base/trace_event/typed_macros_internal.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2019 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_TRACE_EVENT_TYPED_MACROS_INTERNAL_H_
-#define BASE_TRACE_EVENT_TYPED_MACROS_INTERNAL_H_
-
-#include "base/base_export.h"
-#include "base/macros/uniquify.h"
-#include "base/time/time.h"
-#include "base/trace_event/trace_event.h"
-#include "base/trace_event/typed_macros_embedder_support.h"
-#include "build/build_config.h"
-#include "third_party/perfetto/include/perfetto/protozero/message_handle.h"
-#include "third_party/perfetto/include/perfetto/tracing/event_context.h"
-#include "third_party/perfetto/include/perfetto/tracing/internal/write_track_event_args.h"
-#include "third_party/perfetto/include/perfetto/tracing/string_helpers.h"
-#include "third_party/perfetto/include/perfetto/tracing/track.h"
-#include "third_party/perfetto/protos/perfetto/trace/track_event/track_event.pbzero.h"
-
-// These macros should not be called directly. They are intended to be used by
-// macros in //base/trace_event/typed_macros.h only. With the Perfetto client
-// library, these macros are either implemented by Perfetto or unneeded.
-
-namespace trace_event_internal {
-
-extern BASE_EXPORT const perfetto::Track kDefaultTrack;
-
-// The perfetto client library does not use event names for
-// TRACE_EVENT_PHASE_END. However, TraceLog expects all TraceEvents to have
-// event names. So, until we move over to the client library, we will use this
-// empty name for all TRACE_EVENT_PHASE_END typed events.
-inline constexpr char kTraceEventEndName[] = "";
-
-base::trace_event::TrackEventHandle BASE_EXPORT
-CreateTrackEvent(char phase,
-                 const unsigned char* category_group_enabled,
-                 perfetto::StaticString name,
-                 base::TimeTicks timestamp,
-                 uint64_t track_uuid,
-                 bool explicit_track);
-
-base::trace_event::TracePacketHandle BASE_EXPORT CreateTracePacket();
-
-void BASE_EXPORT AddEmptyPacket();
-
-bool BASE_EXPORT ShouldEmitTrackDescriptor(
-    uint64_t track_uuid,
-    base::trace_event::TrackEventHandle::IncrementalState* incr_state);
-
-template <typename TrackType>
-void WriteTrackDescriptor(const TrackType& track) {
-  base::trace_event::TracePacketHandle packet = CreateTracePacket();
-  if (!packet)
-    return;
-  perfetto::internal::TrackRegistry::Get()->SerializeTrack(
-      track, packet.TakePerfettoHandle());
-}
-
-template <typename... Args>
-inline void AddTypedTraceEventImpl(char phase,
-                                   const unsigned char* category_group_enabled,
-                                   perfetto::StaticString name,
-                                   const perfetto::Track& track,
-                                   base::TimeTicks timestamp,
-                                   Args&&... args) {
-  bool emit_track_descriptor = false;
-  {
-    bool explicit_track = &track != &kDefaultTrack;
-    base::trace_event::TrackEventHandle track_event =
-        CreateTrackEvent(phase, category_group_enabled, name, timestamp,
-                         track.uuid, explicit_track);
-    if (!track_event)
-      return;
-
-    if (explicit_track) {
-      track_event->set_track_uuid(track.uuid);
-      emit_track_descriptor = ShouldEmitTrackDescriptor(
-          track.uuid, track_event.incremental_state());
-    }
-
-    perfetto::internal::WriteTrackEventArgs(
-        perfetto::EventContext(track_event.get(),
-                               track_event.incremental_state(),
-                               track_event.ShouldFilterDebugAnnotations()),
-        std::forward<Args>(args)...);
-  }
-
-  if (emit_track_descriptor)
-    WriteTrackDescriptor(track);
-}
-
-template <typename TrackType,
-          typename... Args,
-          typename TrackTypeCheck = std::enable_if_t<
-              std::is_convertible_v<TrackType, perfetto::Track>>>
-inline void AddTypedTraceEvent(char phase,
-                               const unsigned char* category_group_enabled,
-                               perfetto::StaticString name,
-                               TrackType&& track,
-                               base::TimeTicks timestamp,
-                               Args&&... args) {
-  AddTypedTraceEventImpl(phase, category_group_enabled, name,
-                         std::forward<TrackType>(track), timestamp,
-                         std::forward<Args>(args)...);
-}
-
-template <typename TrackType,
-          typename... Args,
-          typename TrackTypeCheck = std::enable_if_t<
-              std::is_convertible_v<TrackType, perfetto::Track>>>
-inline void AddTypedTraceEvent(char phase,
-                               const unsigned char* category_group_enabled,
-                               perfetto::StaticString name,
-                               TrackType&& track,
-                               Args&&... args) {
-  AddTypedTraceEventImpl(phase, category_group_enabled, name,
-                         std::forward<TrackType>(track), base::TimeTicks(),
-                         std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-inline void AddTypedTraceEvent(char phase,
-                               const unsigned char* category_group_enabled,
-                               perfetto::StaticString name,
-                               base::TimeTicks timestamp,
-                               Args&&... args) {
-  AddTypedTraceEventImpl(phase, category_group_enabled, name, kDefaultTrack,
-                         timestamp, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-inline void AddTypedTraceEvent(char phase,
-                               const unsigned char* category_group_enabled,
-                               perfetto::StaticString name,
-                               Args&&... args) {
-  AddTypedTraceEventImpl(phase, category_group_enabled, name, kDefaultTrack,
-                         base::TimeTicks(), std::forward<Args>(args)...);
-}
-
-}  // namespace trace_event_internal
-
-#endif  // BASE_TRACE_EVENT_TYPED_MACROS_INTERNAL_H_
diff --git a/base/trace_event/typed_macros_unittest.cc b/base/trace_event/typed_macros_unittest.cc
deleted file mode 100644
index 6ff1119..0000000
--- a/base/trace_event/typed_macros_unittest.cc
+++ /dev/null
@@ -1,434 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/trace_event/typed_macros.h"
-
-#include "base/location.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/test/trace_test_utils.h"
-#include "base/trace_event/interned_args_helper.h"
-#include "base/trace_event/trace_log.h"
-#include "base/trace_event/typed_macros_embedder_support.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/perfetto/include/perfetto/protozero/scattered_heap_buffer.h"
-#include "third_party/perfetto/include/perfetto/tracing/track_event_interned_data_index.h"
-#include "third_party/perfetto/protos/perfetto/trace/interned_data/interned_data.pb.h"
-#include "third_party/perfetto/protos/perfetto/trace/trace.pb.h"
-#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_mojo_event_info.pbzero.h"
-#include "third_party/perfetto/protos/perfetto/trace/track_event/log_message.pbzero.h"
-#include "third_party/perfetto/protos/perfetto/trace/track_event/source_location.pb.h"
-#include "third_party/perfetto/protos/perfetto/trace/track_event/source_location.pbzero.h"
-
-#include "base/tracing/perfetto_platform.h"
-
-namespace base {
-namespace trace_event {
-
-namespace {
-
-std::unique_ptr<perfetto::TracingSession> g_tracing_session;
-
-perfetto::protos::gen::TraceConfig GetDefaultTraceConfig() {
-  perfetto::protos::gen::TraceConfig trace_config;
-  auto* buffer_config = trace_config.add_buffers();
-  buffer_config->set_size_kb(32 * 1024);
-  auto* data_source = trace_config.add_data_sources();
-  auto* source_config = data_source->mutable_config();
-  source_config->set_name("track_event");
-  source_config->set_target_buffer(0);
-  return trace_config;
-}
-
-void EnableTrace(bool filter_debug_annotations = false) {
-  g_tracing_session = perfetto::Tracing::NewTrace();
-  auto config = GetDefaultTraceConfig();
-  if (filter_debug_annotations) {
-    for (auto& data_source : *config.mutable_data_sources()) {
-      perfetto::protos::gen::TrackEventConfig track_event_config;
-      track_event_config.set_filter_debug_annotations(true);
-      data_source.mutable_config()->set_track_event_config_raw(
-          track_event_config.SerializeAsString());
-    }
-  }
-  g_tracing_session->Setup(config);
-  g_tracing_session->StartBlocking();
-}
-
-
-void CancelTrace() {
-  g_tracing_session.reset();
-}
-
-struct TestTrackEvent;
-struct TestTracePacket;
-TestTrackEvent* g_test_track_event;
-TestTracePacket* g_test_trace_packet;
-
-struct TestTrackEvent : public TrackEventHandle::CompletionListener {
- public:
-  TestTrackEvent() {
-    CHECK_EQ(g_test_track_event, nullptr)
-        << "Another instance of TestTrackEvent is already active";
-    g_test_track_event = this;
-  }
-
-  ~TestTrackEvent() override { g_test_track_event = nullptr; }
-
-  void OnTrackEventCompleted() override {
-    EXPECT_FALSE(event_completed);
-    event_completed = true;
-  }
-
-  protozero::HeapBuffered<perfetto::protos::pbzero::TrackEvent> event;
-  perfetto::internal::TrackEventIncrementalState incremental_state;
-  bool prepare_called = false;
-  bool event_completed = false;
-};
-
-struct TestTracePacket : public TracePacketHandle::CompletionListener {
- public:
-  TestTracePacket() {
-    CHECK_EQ(g_test_trace_packet, nullptr)
-        << "Another instance of TestTracePacket is already active";
-    g_test_trace_packet = this;
-  }
-
-  ~TestTracePacket() override { g_test_trace_packet = nullptr; }
-
-  void OnTracePacketCompleted() override {
-    EXPECT_FALSE(packet_completed);
-    packet_completed = true;
-  }
-
-  protozero::HeapBuffered<perfetto::protos::pbzero::TracePacket> packet;
-  bool prepare_called = false;
-  bool packet_completed = false;
-  bool emit_empty_called = false;
-};
-
-TrackEventHandle PrepareTrackEvent(bool filter_debug_annotations) {
-  CHECK_NE(g_test_track_event, nullptr) << "TestTrackEvent not set yet";
-  g_test_track_event->prepare_called = true;
-  return TrackEventHandle(g_test_track_event->event.get(),
-                          &g_test_track_event->incremental_state,
-                          g_test_track_event, filter_debug_annotations);
-}
-
-TrackEventHandle PrepareTrackEventWithDebugAnnotations(TraceEvent*) {
-  return PrepareTrackEvent(/*filter_debug_annotations=*/false);
-}
-
-TrackEventHandle PrepareTrackEventFilterDebugAnnotations(TraceEvent*) {
-  return PrepareTrackEvent(/*filter_debug_annotations=*/true);
-}
-
-TracePacketHandle PrepareTracePacket() {
-  CHECK_NE(g_test_track_event, nullptr) << "TestTracePacket not set yet";
-  g_test_trace_packet->prepare_called = true;
-  return TracePacketHandle(TracePacketHandle::PerfettoPacketHandle(
-                               g_test_trace_packet->packet.get()),
-                           g_test_trace_packet);
-}
-
-void EmitEmptyPacket() {
-  CHECK_NE(g_test_track_event, nullptr) << "TestTracePacket not set yet";
-  g_test_trace_packet->emit_empty_called = true;
-}
-
-class TypedTraceEventTest : public testing::Test {
- public:
-  TypedTraceEventTest() {
-    perfetto::internal::TrackRegistry::InitializeInstance();
-    EnableTypedTraceEvents(&PrepareTrackEventWithDebugAnnotations,
-                           &PrepareTracePacket, &EmitEmptyPacket);
-  }
-
-  ~TypedTraceEventTest() override { ResetTypedTraceEventsForTesting(); }
-
-  void FlushTrace() {
-    TrackEvent::Flush();
-    g_tracing_session->StopBlocking();
-    std::vector<char> serialized_data = g_tracing_session->ReadTraceBlocking();
-    perfetto::protos::Trace trace;
-    EXPECT_TRUE(
-        trace.ParseFromArray(serialized_data.data(), serialized_data.size()));
-    for (const auto& packet : trace.packet()) {
-      if (packet.has_track_event()) {
-        std::string serialized_event = packet.track_event().SerializeAsString();
-        event_.prepare_called = true;
-        event_.event->AppendRawProtoBytes(serialized_event.data(),
-                                          serialized_event.size());
-        event_.OnTrackEventCompleted();
-
-        std::string serialized_interned_data =
-            packet.interned_data().SerializeAsString();
-        event_.incremental_state.serialized_interned_data->AppendRawProtoBytes(
-            serialized_interned_data.data(), serialized_interned_data.size());
-
-        std::string serialized_packet = packet.SerializeAsString();
-        packet_.prepare_called = true;
-        packet_.packet->AppendRawProtoBytes(serialized_packet.data(),
-                                            serialized_packet.size());
-        packet_.OnTracePacketCompleted();
-        break;
-      }
-    }
-  }
-
-  perfetto::protos::TrackEvent ParseTrackEvent() {
-    FlushTrace();
-    auto serialized_data = event_.event.SerializeAsArray();
-    perfetto::protos::TrackEvent track_event;
-    EXPECT_TRUE(track_event.ParseFromArray(serialized_data.data(),
-                                           serialized_data.size()));
-    return track_event;
-  }
-
- protected:
-  test::TracingEnvironment tracing_environment_;
-  TestTrackEvent event_;
-  TestTracePacket packet_;
-};
-
-}  // namespace
-
-TEST_F(TypedTraceEventTest, CallbackExecutedWhenTracingEnabled) {
-  EnableTrace();
-
-  TRACE_EVENT("cat", "Name", [&](perfetto::EventContext ctx) {
-    perfetto::protos::pbzero::LogMessage* log = ctx.event()->set_log_message();
-    log->set_body_iid(1);
-  });
-  FlushTrace();
-
-  EXPECT_TRUE(event_.prepare_called);
-  EXPECT_FALSE(event_.event.empty());
-  EXPECT_TRUE(event_.event_completed);
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, CallbackNotExecutedWhenTracingDisabled) {
-  TRACE_EVENT("cat", "Name", [this](perfetto::EventContext ctx) {
-    EXPECT_EQ(ctx.event(), event_.event.get());
-    perfetto::protos::pbzero::LogMessage* log = ctx.event()->set_log_message();
-    log->set_body_iid(1);
-  });
-
-  EXPECT_FALSE(event_.prepare_called);
-  EXPECT_TRUE(event_.event.empty());
-  EXPECT_FALSE(event_.event_completed);
-}
-
-TEST_F(TypedTraceEventTest, DescriptorPacketWrittenForEventWithTrack) {
-  EnableTrace();
-
-  TRACE_EVENT("cat", "Name", perfetto::Track(1234));
-
-  FlushTrace();
-  EXPECT_TRUE(event_.prepare_called);
-  EXPECT_FALSE(event_.event.empty());
-  EXPECT_TRUE(event_.event_completed);
-
-  EXPECT_TRUE(packet_.prepare_called);
-  EXPECT_FALSE(packet_.packet.empty());
-  EXPECT_TRUE(packet_.packet_completed);
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, InternedData) {
-  EnableTrace();
-  const TraceSourceLocation location("TestFunction", "test.cc", 123);
-  size_t iid = 0;
-
-  TRACE_EVENT("cat", "Name", [&location, &iid](perfetto::EventContext ctx) {
-    auto* log = ctx.event()->set_log_message();
-    iid = InternedSourceLocation::Get(&ctx, location);
-    EXPECT_NE(0u, iid);
-    log->set_body_iid(iid);
-
-    size_t iid2 = InternedSourceLocation::Get(&ctx, location);
-    EXPECT_EQ(iid, iid2);
-
-    TraceSourceLocation location2("TestFunction2", "test.cc", 456);
-    size_t iid3 = InternedSourceLocation::Get(&ctx, location2);
-    EXPECT_NE(0u, iid3);
-    EXPECT_NE(iid, iid3);
-
-    // Test getting an interned ID directly from a base::Location object, the
-    // only attributes that are compared are function_name, file_name and
-    // line_number.
-    const void* dummy_pc = &iid;
-    base::Location base_location = base::Location::CreateForTesting(
-        "TestFunction", "test.cc", 123, dummy_pc);
-    TraceSourceLocation location3(base_location);
-    size_t iid4 = InternedSourceLocation::Get(&ctx, location3);
-    EXPECT_EQ(iid, iid4);
-  });
-  FlushTrace();
-
-  auto serialized_data =
-      event_.incremental_state.serialized_interned_data.SerializeAsArray();
-  perfetto::protos::InternedData interned_data;
-  EXPECT_TRUE(interned_data.ParseFromArray(serialized_data.data(),
-                                           serialized_data.size()));
-  EXPECT_EQ(2, interned_data.source_locations_size());
-  auto interned_loc = interned_data.source_locations()[0];
-  EXPECT_EQ(iid, interned_loc.iid());
-  EXPECT_EQ("TestFunction", interned_loc.function_name());
-  EXPECT_EQ("test.cc", interned_loc.file_name());
-  interned_loc = interned_data.source_locations()[1];
-  EXPECT_EQ("TestFunction2", interned_loc.function_name());
-  EXPECT_EQ("test.cc", interned_loc.file_name());
-
-  // Make sure the in-memory interning index persists between trace events by
-  // recording another event.
-  event_.incremental_state.serialized_interned_data.Reset();
-  event_.event_completed = false;
-
-  TRACE_EVENT("cat", "Name", [&location](perfetto::EventContext ctx) {
-    auto* log = ctx.event()->set_log_message();
-    size_t iid = InternedSourceLocation::Get(&ctx, location);
-    EXPECT_NE(0u, iid);
-    log->set_body_iid(iid);
-  });
-  FlushTrace();
-
-  // No new data should have been interned the second time around.
-  EXPECT_EQ(
-      "",
-      event_.incremental_state.serialized_interned_data.SerializeAsString());
-
-  CancelTrace();
-}
-
-// TODO: crbug/334063999 - The test is disabled due to flakiness.
-TEST_F(TypedTraceEventTest, DISABLED_InstantThreadEvent) {
-  EnableTrace();
-
-  TRACE_EVENT_INSTANT("cat", "ThreadEvent", [](perfetto::EventContext) {});
-  auto track_event = ParseTrackEvent();
-  EXPECT_FALSE(track_event.has_track_uuid());
-
-  CancelTrace();
-}
-
-// TODO: crbug/334063999 - The test is disabled due to flakiness.
-TEST_F(TypedTraceEventTest, DISABLED_InstantProcessEvent) {
-  EnableTrace();
-
-  TRACE_EVENT_INSTANT("cat", "ProcessEvent", perfetto::ProcessTrack::Current(),
-                      [](perfetto::EventContext) {});
-  auto track_event = ParseTrackEvent();
-  EXPECT_TRUE(track_event.has_track_uuid());
-  EXPECT_EQ(track_event.track_uuid(), perfetto::ProcessTrack::Current().uuid);
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, InstantGlobalEvent) {
-  EnableTrace();
-
-  TRACE_EVENT_INSTANT("cat", "GlobalEvent", perfetto::Track::Global(1234),
-                      [](perfetto::EventContext) {});
-  auto track_event = ParseTrackEvent();
-  EXPECT_TRUE(track_event.has_track_uuid());
-  EXPECT_EQ(track_event.track_uuid(), perfetto::Track::Global(1234).uuid);
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, InstantGlobalDefaultEvent) {
-  EnableTrace();
-
-  TRACE_EVENT_INSTANT("cat", "GlobalDefaultEvent", perfetto::Track::Global(0),
-                      [](perfetto::EventContext) {});
-  auto track_event = ParseTrackEvent();
-  EXPECT_TRUE(track_event.has_track_uuid());
-  EXPECT_EQ(track_event.track_uuid(), perfetto::Track::Global(0).uuid);
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, BeginEventOnDefaultTrackDoesNotWriteTrackUuid) {
-  EnableTrace();
-
-  TRACE_EVENT_BEGIN("cat", "Name");
-  auto begin_event = ParseTrackEvent();
-  EXPECT_FALSE(begin_event.has_track_uuid());
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, EndEventOnDefaultTrackDoesNotWriteTrackUuid) {
-  EnableTrace();
-
-  TRACE_EVENT_END("cat");
-  auto end_event = ParseTrackEvent();
-  EXPECT_FALSE(end_event.has_track_uuid());
-
-  CancelTrace();
-}
-
-// In the client library, EmitEmptyPacket() isn't called and the packet
-// disappears from the trace. This functionality is instead tested in Perfetto's
-// API integration tests. We just verify that the macro builds correctly here
-// when building with the client library.
-#define MAYBE_EmptyEvent DISABLED_EmptyEvent
-TEST_F(TypedTraceEventTest, MAYBE_EmptyEvent) {
-  EnableTrace();
-
-  EXPECT_FALSE(g_test_trace_packet->emit_empty_called);
-  EXPECT_TRUE(g_test_trace_packet->emit_empty_called);
-
-  CancelTrace();
-}
-
-TEST_F(TypedTraceEventTest, ChromeMojoInterfaceTag) {
-  EnableTrace();
-
-  TRACE_EVENT("cat", "Name", [](perfetto::EventContext ctx) {
-    auto* info = ctx.event()->set_chrome_mojo_event_info();
-    if (!ctx.ShouldFilterDebugAnnotations()) {
-      info->set_mojo_interface_tag("MojoInterface");
-    }
-  });
-  auto track_event = ParseTrackEvent();
-  // Be default, debug annotations are enabled in the tests. So
-  // mojo_interface_tag should be emitted.
-  EXPECT_EQ(track_event.chrome_mojo_event_info().mojo_interface_tag(),
-            "MojoInterface");
-
-  CancelTrace();
-}
-
-class TypedTraceEventFilterDebugAnnotationsTest : public TypedTraceEventTest {
- public:
-  TypedTraceEventFilterDebugAnnotationsTest() {
-    EnableTypedTraceEvents(&PrepareTrackEventFilterDebugAnnotations,
-                           &PrepareTracePacket, &EmitEmptyPacket);
-  }
-};
-
-TEST_F(TypedTraceEventFilterDebugAnnotationsTest, ChromeMojoInterfaceTag) {
-  EnableTrace(/*filter_debug_annotations=*/true);
-
-  TRACE_EVENT("cat", "Name", [](perfetto::EventContext ctx) {
-    auto* info = ctx.event()->set_chrome_mojo_event_info();
-    if (!ctx.ShouldFilterDebugAnnotations()) {
-      info->set_mojo_interface_tag("MojoInterface");
-    }
-  });
-  auto track_event = ParseTrackEvent();
-  // Debug annotations are disabled. So mojo_interface_tag should not be
-  // emitted.
-  EXPECT_FALSE(track_event.chrome_mojo_event_info().has_mojo_interface_tag());
-
-  CancelTrace();
-}
-
-}  // namespace trace_event
-}  // namespace base
diff --git a/build/config/sanitizers/BUILD.gn b/build/config/sanitizers/BUILD.gn
index 6370c7b..350e967 100644
--- a/build/config/sanitizers/BUILD.gn
+++ b/build/config/sanitizers/BUILD.gn
@@ -543,6 +543,7 @@
       "-fsanitize=null",
       "-fsanitize=nonnull-attribute",
       "-fsanitize=object-size",
+      "-fsanitize=pointer-overflow",
       "-fsanitize=return",
       "-fsanitize=returns-nonnull-attribute",
       "-fsanitize=shift",
diff --git a/build/config/unsafe_buffers_paths.txt b/build/config/unsafe_buffers_paths.txt
index 1c8e7e9a..016c8bf 100644
--- a/build/config/unsafe_buffers_paths.txt
+++ b/build/config/unsafe_buffers_paths.txt
@@ -54,10 +54,6 @@
 -base/allocator/
 -base/third_party/
 -chrome/browser/platform_experience/win/
--chrome/browser/thumbnail/
--chrome/browser/ui/android/hats/
--chrome/browser/ui/webui/lens/
--chrome/browser/ui/webui/media_router/
 -chrome/chrome_elf/third_party_dlls/
 -chrome/common/profiler/
 -chrome/credential_provider/
diff --git a/cc/metrics/compositor_frame_reporting_controller.h b/cc/metrics/compositor_frame_reporting_controller.h
index de126f1..a41d62b 100644
--- a/cc/metrics/compositor_frame_reporting_controller.h
+++ b/cc/metrics/compositor_frame_reporting_controller.h
@@ -10,6 +10,7 @@
 #include <queue>
 #include <vector>
 
+#include "base/containers/circular_deque.h"
 #include "base/memory/raw_ptr.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
diff --git a/chrome/VERSION b/chrome/VERSION
index c3522d945..fe5fdbc 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=133
 MINOR=0
-BUILD=6914
+BUILD=6915
 PATCH=0
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index 7a0f7e1e..7b79b18f 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -491,7 +491,6 @@
   "javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsWithFakeSyncServiceImplTest.java",
   "javatests/src/org/chromium/chrome/browser/sync/OpenTabsTest.java",
   "javatests/src/org/chromium/chrome/browser/sync/PersonalizeGoogleServicesSettingsTest.java",
-  "javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java",
   "javatests/src/org/chromium/chrome/browser/sync/SyncTest.java",
   "javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java",
   "javatests/src/org/chromium/chrome/browser/sync/UkmTest.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/backup/ChromeBackupAgentImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/backup/ChromeBackupAgentImpl.java
index 2ccbe14..f69a2fa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/backup/ChromeBackupAgentImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/backup/ChromeBackupAgentImpl.java
@@ -39,8 +39,6 @@
 import org.chromium.components.signin.AccountManagerFacade;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
 import org.chromium.components.signin.AccountUtils;
-import org.chromium.components.signin.SigninFeatureMap;
-import org.chromium.components.signin.SigninFeatures;
 import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
@@ -444,32 +442,29 @@
             return;
         }
 
-        if (SigninFeatureMap.isEnabled(
-                SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP)) {
-            final CountDownLatch accountsLatch = new CountDownLatch(1);
-            PostTask.runSynchronously(
-                    TaskTraits.UI_DEFAULT,
-                    () -> {
-                        AccountManagerFacadeProvider.getInstance()
-                                .getCoreAccountInfos()
-                                .then(
-                                        (ignored) -> {
-                                            accountsLatch.countDown();
-                                        });
-                    });
-            try {
-                // Explicit timeout is not needed here. In the scenario where accounts are not
-                // available - the restore flow will be stopped several lines below. So, having an
-                // explicit timeout would still result in the state not getting restored. Thus, it
-                // is cleaner to just wait without an explicit timeout and rely on the BackupManager
-                // killing the process if accounts never become available.
-                accountsLatch.await();
-            } catch (InterruptedException e) {
-                // Normally, this shouldn't happen (Chrome process will just get killed). Use
-                // `RESTORE_STARTED_NOT_FINISHED` as fallback in the unlikely scenario it happens.
-                setRestoreStatus(RestoreStatus.RESTORE_STARTED_NOT_FINISHED);
-                return;
-            }
+        final CountDownLatch accountsLatch = new CountDownLatch(1);
+        PostTask.runSynchronously(
+                TaskTraits.UI_DEFAULT,
+                () -> {
+                    AccountManagerFacadeProvider.getInstance()
+                            .getCoreAccountInfos()
+                            .then(
+                                    (ignored) -> {
+                                        accountsLatch.countDown();
+                                    });
+                });
+        try {
+            // Explicit timeout is not needed here. In the scenario where accounts are not
+            // available - the restore flow will be stopped several lines below. So, having an
+            // explicit timeout would still result in the state not getting restored. Thus, it
+            // is cleaner to just wait without an explicit timeout and rely on the BackupManager
+            // killing the process if accounts never become available.
+            accountsLatch.await();
+        } catch (InterruptedException e) {
+            // Normally, this shouldn't happen (Chrome process will just get killed). Use
+            // `RESTORE_STARTED_NOT_FINISHED` as fallback in the unlikely scenario it happens.
+            setRestoreStatus(RestoreStatus.RESTORE_STARTED_NOT_FINISHED);
+            return;
         }
 
         @Nullable
@@ -478,11 +473,7 @@
         CoreAccountInfo syncAccountInfo = getDeviceAccountWithEmail(restoredSyncUserEmail);
 
         // If the user hasn't signed in, or can't sign in, then don't restore anything.
-        if (syncAccountInfo == null
-                && (signedInAccountInfo == null
-                        || !SigninFeatureMap.isEnabled(
-                                SigninFeatures
-                                        .RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP))) {
+        if (syncAccountInfo == null && signedInAccountInfo == null) {
             setRestoreStatus(RestoreStatus.NOT_SIGNED_IN);
             Log.i(TAG, "Chrome was not signed in with a known account name, not restoring");
             return;
@@ -508,10 +499,7 @@
                     // It should be done after the restoration of the existing per-account settings
                     // from the backup to avoid override, as mentioned above.
                     final boolean shouldRestoreSelectedTypesAsAccountSettings =
-                            syncAccountInfo != null
-                                    && SigninFeatureMap.isEnabled(
-                                            SigninFeatures
-                                                    .RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP);
+                            syncAccountInfo != null;
                     if (shouldRestoreSelectedTypesAsAccountSettings) {
                         final String gaiaID =
                                 syncAccountInfo != null
@@ -555,11 +543,9 @@
             editor.apply();
 
             // signedInAccountInfo and syncAccountInfo should not be null at the same at this point.
-            // If there's no valid syncing account and the signed-in account restore is disabled,
-            // the restore should already be stopped and the restore state set to `NOT_SIGNED_IN`.
-            if (signedInAccountInfo == null
-                    || !SigninFeatureMap.isEnabled(
-                            SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP)) {
+            // Otherwise the restore should already be stopped and the restore state set to
+            // `NOT_SIGNED_IN`.
+            if (signedInAccountInfo == null) {
                 throw new IllegalStateException("No valid account can be signed-in");
             }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/backup/DictPrefBackupSerializer.java b/chrome/android/java/src/org/chromium/chrome/browser/backup/DictPrefBackupSerializer.java
index a74d157..6c12c22 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/backup/DictPrefBackupSerializer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/backup/DictPrefBackupSerializer.java
@@ -8,8 +8,6 @@
 import org.jni_zero.NativeMethods;
 
 import org.chromium.components.prefs.PrefService;
-import org.chromium.components.signin.SigninFeatureMap;
-import org.chromium.components.signin.SigninFeatures;
 import org.chromium.components.sync.internal.SyncPrefNames;
 
 import java.util.Set;
@@ -35,14 +33,6 @@
     @Override
     protected void setPrefValueFromSerializedBytes(
             PrefService prefService, String prefName, byte[] bytes) {
-        if (prefName.equals(SyncPrefNames.SELECTED_TYPES_PER_ACCOUNT)
-                && !SigninFeatureMap.isEnabled(
-                        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP)) {
-            // In this case the pref is not restored and this is not exposed to tryDeserialize()
-            // but that doesn't affect the restore in any significant way and this code is going
-            // away when the restore flag is cleaned up.
-            return;
-        }
         DictPrefBackupSerializerJni.get().setDict(prefService, prefName, new String(bytes));
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/HistorySyncFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/HistorySyncFirstRunFragment.java
index 7a16dac..2f86ad6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/HistorySyncFirstRunFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/HistorySyncFirstRunFragment.java
@@ -18,11 +18,13 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
+import org.chromium.chrome.browser.signin.services.SigninMetricsUtils;
 import org.chromium.chrome.browser.ui.signin.history_sync.HistorySyncConfig;
 import org.chromium.chrome.browser.ui.signin.history_sync.HistorySyncCoordinator;
 import org.chromium.chrome.browser.ui.signin.history_sync.HistorySyncView;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 
 public class HistorySyncFirstRunFragment extends Fragment
         implements FirstRunFragment, HistorySyncCoordinator.HistorySyncDelegate {
@@ -112,8 +114,26 @@
 
     /** Implements {@link HistorySyncDelegate} */
     @Override
-    public void maybeRecordFreProgress(@MobileFreProgress int state) {
-        getPageDelegate().recordFreProgressHistogram(state);
+    public void recordHistorySyncOptIn(
+            @SigninAccessPoint int accessPoint, @SyncButtonClicked int syncButtonClicked) {
+        switch (syncButtonClicked) {
+            case SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED:
+            case SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED:
+                getPageDelegate()
+                        .recordFreProgressHistogram(MobileFreProgress.HISTORY_SYNC_ACCEPTED);
+                SigninMetricsUtils.logHistorySyncAcceptButtonClicked(
+                        SigninAccessPoint.START_PAGE, syncButtonClicked);
+                break;
+            case SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED:
+            case SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED:
+                getPageDelegate()
+                        .recordFreProgressHistogram(MobileFreProgress.HISTORY_SYNC_DISMISSED);
+                SigninMetricsUtils.logHistorySyncDeclineButtonClicked(
+                        SigninAccessPoint.START_PAGE, syncButtonClicked);
+                break;
+            default:
+                throw new IllegalStateException("Unrecognized sync button type");
+        }
     }
 
     @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
index 25fc2f7..1bdc80b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
@@ -76,6 +76,8 @@
 import org.chromium.components.policy.test.annotations.Policies;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
 import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.ui.test.util.DeviceRestriction;
@@ -322,9 +324,16 @@
 
     @Test
     @MediumTest
-    @Features.EnableFeatures(ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS)
     @Restriction({DeviceRestriction.RESTRICTION_TYPE_NON_AUTO})
     public void acceptingHistorySyncEndsFreAndEnablesHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord(
+                                "Signin.HistorySyncOptIn.Completed", SigninAccessPoint.START_PAGE)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED)
+                        .build();
         when(mExternalAuthUtilsMock.canUseGooglePlayServices(any())).thenReturn(true);
         mAccountManagerTestRule.addAccount(TestAccounts.AADC_ADULT_ACCOUNT);
         launchFirstRunActivityAndWaitForNativeInitialization();
@@ -338,13 +347,49 @@
 
         ApplicationTestUtils.waitForActivityState(mFirstRunActivity, Stage.DESTROYED);
         SyncTestUtil.waitForHistorySyncEnabled();
+        historySyncHistogramWatcher.assertExpected();
     }
 
     @Test
     @MediumTest
-    @Features.EnableFeatures(ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS)
+    @Restriction({DeviceRestriction.RESTRICTION_TYPE_NON_AUTO})
+    public void aadcMinorAccount_acceptsHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord(
+                                "Signin.HistorySyncOptIn.Completed", SigninAccessPoint.START_PAGE)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED)
+                        .build();
+        when(mExternalAuthUtilsMock.canUseGooglePlayServices(any())).thenReturn(true);
+        mAccountManagerTestRule.addAccount(TestAccounts.AADC_MINOR_ACCOUNT);
+        launchFirstRunActivityAndWaitForNativeInitialization();
+        waitUntilCurrentPageIs(SigninFirstRunFragment.class);
+        clickButton(R.id.signin_fre_continue_button);
+        completeAutoDeviceLockIfNeeded();
+        waitUntilCurrentPageIs(HistorySyncFirstRunFragment.class);
+
+        onViewWaiting(withId(R.id.button_primary));
+        clickButton(R.id.button_primary);
+
+        ApplicationTestUtils.waitForActivityState(mFirstRunActivity, Stage.DESTROYED);
+        SyncTestUtil.waitForHistorySyncEnabled();
+        historySyncHistogramWatcher.assertExpected();
+    }
+
+    @Test
+    @MediumTest
     @Restriction({DeviceRestriction.RESTRICTION_TYPE_NON_AUTO})
     public void refusingHistorySyncEndsFreAndDoesNotEnableHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord(
+                                "Signin.HistorySyncOptIn.Declined", SigninAccessPoint.START_PAGE)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED)
+                        .build();
         mAccountManagerTestRule.addAccount(TestAccounts.AADC_ADULT_ACCOUNT);
         launchFirstRunActivityAndWaitForNativeInitialization();
         waitUntilCurrentPageIs(SigninFirstRunFragment.class);
@@ -358,6 +403,35 @@
         ApplicationTestUtils.waitForActivityState(mFirstRunActivity, Stage.DESTROYED);
 
         assertFalse(SyncTestUtil.isHistorySyncEnabled());
+        historySyncHistogramWatcher.assertExpected();
+    }
+
+    @Test
+    @MediumTest
+    @Restriction({DeviceRestriction.RESTRICTION_TYPE_NON_AUTO})
+    public void aadcMinorAccount_refuseHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord(
+                                "Signin.HistorySyncOptIn.Declined", SigninAccessPoint.START_PAGE)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED)
+                        .build();
+        mAccountManagerTestRule.addAccount(TestAccounts.AADC_MINOR_ACCOUNT);
+        launchFirstRunActivityAndWaitForNativeInitialization();
+        waitUntilCurrentPageIs(SigninFirstRunFragment.class);
+        clickButton(R.id.signin_fre_continue_button);
+        completeAutoDeviceLockIfNeeded();
+        waitUntilCurrentPageIs(HistorySyncFirstRunFragment.class);
+
+        onViewWaiting(withId(R.id.button_secondary));
+        clickButton(R.id.button_secondary);
+
+        ApplicationTestUtils.waitForActivityState(mFirstRunActivity, Stage.DESTROYED);
+
+        assertFalse(SyncTestUtil.isHistorySyncEnabled());
+        historySyncHistogramWatcher.assertExpected();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
index c9d9886..f2d72de 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
@@ -142,6 +142,7 @@
 import org.chromium.components.signin.test.util.AccountCapabilitiesBuilder;
 import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.ui.test.util.RenderTestRule;
+import org.chromium.ui.test.util.ViewUtils;
 
 import java.io.IOException;
 
@@ -608,10 +609,8 @@
     @Test
     @LargeTest
     @Feature({"RenderTest"})
-    @EnableFeatures(ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS)
-    @DisabledTest(message = "https://crbug.com/380957937")
-    public void testRenderOnIdentityErrorForSignedInUsers_withReplaceSyncPromos()
-            throws IOException {
+    @EnableFeatures({ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS})
+    public void testRenderOnIdentityErrorForSignedInUsers() throws IOException {
         FakeSyncServiceImpl fakeSyncService =
                 ThreadUtils.runOnUiThreadBlocking(
                         () -> {
@@ -637,13 +636,15 @@
                             .hasProfileDataForTesting(accountInfo.getEmail());
                 });
 
+        // Wait for the default browser promo view to disappear to avoid flakiness due to race
+        // conditions.
+        ViewUtils.waitForViewCheckingState(withId(R.id.promo_card_view), ViewUtils.VIEW_NULL);
         View view =
                 mSettingsActivityTestRule
                         .getActivity()
                         .findViewById(android.R.id.content)
                         .getRootView();
-        mRenderTestRule.render(
-                view, "main_settings_signed_in_identity_error_with_replace_sync_promos");
+        mRenderTestRule.render(view, "main_settings_signed_in_identity_error");
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java
index 2f06b58..be1cde3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java
@@ -71,6 +71,7 @@
 import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.components.sync.SyncService;
 import org.chromium.components.sync.UserSelectableType;
@@ -142,6 +143,13 @@
     @Test
     @MediumTest
     public void testWithExistingAccount_signIn_requiredHistoryOptIn() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Completed", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED)
+                        .build();
         mSigninTestRule.addAccount(TestAccounts.AADC_ADULT_ACCOUNT);
 
         launchActivity(
@@ -151,6 +159,29 @@
 
         verifyCollapsedBottomSheetAndSignin(TestAccounts.AADC_ADULT_ACCOUNT);
         acceptHistorySyncAndVerifyFlowCompletion(/* checkDialogRoot= */ true);
+        historySyncHistogramWatcher.assertExpected();
+    }
+
+    @Test
+    @MediumTest
+    public void testWithAadcMinorAccount_requiredHistoryOptIn() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Completed", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED)
+                        .build();
+        mSigninTestRule.addAccount(TestAccounts.AADC_MINOR_ACCOUNT);
+
+        launchActivity(
+                NoAccountSigninMode.BOTTOM_SHEET,
+                WithAccountSigninMode.DEFAULT_ACCOUNT_BOTTOM_SHEET,
+                HistorySyncConfig.OptInMode.REQUIRED);
+
+        verifyCollapsedBottomSheetAndSignin(TestAccounts.AADC_MINOR_ACCOUNT);
+        acceptHistorySyncAndVerifyFlowCompletion(/* checkDialogRoot= */ true);
+        historySyncHistogramWatcher.assertExpected();
     }
 
     @Test
@@ -230,6 +261,13 @@
     @Test
     @MediumTest
     public void testWithExistingAccount_signIn_optOutHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Declined", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED)
+                        .build();
         mSigninTestRule.addAccount(TestAccounts.AADC_ADULT_ACCOUNT);
 
         launchActivity(
@@ -264,6 +302,39 @@
 
         // Verify history sync state.
         assertFalse(SyncTestUtil.isHistorySyncEnabled());
+        historySyncHistogramWatcher.assertExpected();
+    }
+
+    @Test
+    @MediumTest
+    public void testWithAadcMinorAccount_signIn_optOutHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Declined", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED)
+                        .build();
+        mSigninTestRule.addAccount(TestAccounts.AADC_MINOR_ACCOUNT);
+
+        launchActivity(
+                NoAccountSigninMode.BOTTOM_SHEET,
+                WithAccountSigninMode.DEFAULT_ACCOUNT_BOTTOM_SHEET,
+                HistorySyncConfig.OptInMode.REQUIRED);
+
+        verifyCollapsedBottomSheetAndSignin(TestAccounts.AADC_MINOR_ACCOUNT);
+
+        // Verify that the history opt-in dialog is shown and decline.
+        onViewWaiting(withId(R.id.history_sync_illustration), /* checkRootDialog= */ true)
+                .check(matches(isDisplayed()));
+        onViewWaiting(withId(R.id.button_secondary), /* checkRootDialog= */ true).perform(click());
+
+        // Verify that the flow completion callback, which finishes the activity, is called.
+        ApplicationTestUtils.waitForActivityState(mActivity, Stage.DESTROYED);
+
+        // Verify history sync state.
+        assertFalse(SyncTestUtil.isHistorySyncEnabled());
+        historySyncHistogramWatcher.assertExpected();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncIntegrationTest.java
index 40d5589..bbb9492 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncIntegrationTest.java
@@ -70,6 +70,7 @@
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.metrics.AccountConsistencyPromoAction;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
 import org.chromium.ui.test.util.BlankUiTestActivity;
@@ -342,6 +343,13 @@
     @Test
     @MediumTest
     public void testUserAlreadySignedIn_onlyShowsHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Completed", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED)
+                        .build();
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_ADULT_ACCOUNT);
         when(mHistorySyncHelperMock.shouldSuppressHistorySync()).thenReturn(false);
 
@@ -355,11 +363,45 @@
 
         // Verify that the flow completion callback, which finishes the activity, is called.
         ApplicationTestUtils.waitForActivityState(mActivity, Stage.DESTROYED);
+        historySyncHistogramWatcher.assertExpected();
+    }
+
+    @Test
+    @MediumTest
+    public void testAadcMinorAccount_acceptsHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Completed", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED)
+                        .build();
+        mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_MINOR_ACCOUNT);
+        when(mHistorySyncHelperMock.shouldSuppressHistorySync()).thenReturn(false);
+
+        launchActivity(/* shouldReplaceProgressBars= */ false);
+
+        // Verify that the history opt-in dialog is shown and accept.
+        onView(withId(R.id.history_sync)).check(matches(isDisplayed()));
+        onViewWaiting(withId(R.id.button_primary)).perform(click());
+
+        SyncTestUtil.waitForHistorySyncEnabled();
+
+        // Verify that the flow completion callback, which finishes the activity, is called.
+        ApplicationTestUtils.waitForActivityState(mActivity, Stage.DESTROYED);
+        historySyncHistogramWatcher.assertExpected();
     }
 
     @Test
     @MediumTest
     public void testUserAlreadySignedIn_refuseHistorySync_historySyncRequired() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Declined", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED)
+                        .build();
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_ADULT_ACCOUNT);
         when(mHistorySyncHelperMock.shouldSuppressHistorySync()).thenReturn(false);
         mHistoryOptInMode = HistorySyncConfig.OptInMode.REQUIRED;
@@ -377,6 +419,34 @@
 
         // Verify that the user is not signed-out.
         Assert.assertNotNull(mSigninTestRule.getPrimaryAccount(ConsentLevel.SIGNIN));
+        historySyncHistogramWatcher.assertExpected();
+    }
+
+    @Test
+    @MediumTest
+    public void testAadcMinorAccount_refuseHistorySync() {
+        HistogramWatcher historySyncHistogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord("Signin.HistorySyncOptIn.Declined", mSigninAccessPoint)
+                        .expectIntRecord(
+                                "Signin.SyncButtons.Clicked",
+                                SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED)
+                        .build();
+        mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_MINOR_ACCOUNT);
+        when(mHistorySyncHelperMock.shouldSuppressHistorySync()).thenReturn(false);
+        mHistoryOptInMode = HistorySyncConfig.OptInMode.REQUIRED;
+
+        launchActivity(/* shouldReplaceProgressBars= */ false);
+
+        // Verify that the history opt-in dialog is shown and refuse.
+        onView(withId(R.id.history_sync)).check(matches(isDisplayed()));
+        onViewWaiting(withId(org.chromium.chrome.test.R.id.button_secondary)).perform(click());
+
+        // Verify that the flow completion callback, which finishes the activity, is called.
+        ApplicationTestUtils.waitForActivityState(mActivity, Stage.DESTROYED);
+        assertFalse(SyncTestUtil.isHistorySyncEnabled());
+        verify(mHistorySyncHelperMock, never()).recordHistorySyncNotShown(anyInt());
+        historySyncHistogramWatcher.assertExpected();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java
index 455823a9..8b164fc 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java
@@ -478,6 +478,7 @@
                 () -> {
                     Assert.assertTrue(mIdentityManager.hasPrimaryAccount(ConsentLevel.SIGNIN));
                     Assert.assertFalse(mAccountManagerFacade.getCoreAccountInfos().isFulfilled());
+                    Assert.assertFalse(mAccountManagerFacade.getAccounts().isFulfilled());
                     Assert.assertEquals(
                             List.of(TestAccounts.ACCOUNT1),
                             Arrays.asList(mIdentityManager.getAccountsWithRefreshTokens()));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
deleted file mode 100644
index f2407c16..0000000
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.sync;
-
-import static androidx.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
-import android.view.View;
-
-import androidx.test.filters.LargeTest;
-
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import org.chromium.base.ThreadUtils;
-import org.chromium.base.test.params.ParameterAnnotations;
-import org.chromium.base.test.params.ParameterizedRunner;
-import org.chromium.base.test.util.CallbackHelper;
-import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.Feature;
-import org.chromium.base.test.util.HistogramWatcher;
-import org.chromium.chrome.browser.flags.ChromeSwitches;
-import org.chromium.chrome.browser.night_mode.ChromeNightModeTestUtils;
-import org.chromium.chrome.browser.password_manager.PasswordManagerUtilBridge;
-import org.chromium.chrome.browser.password_manager.PasswordManagerUtilBridgeJni;
-import org.chromium.chrome.browser.profiles.ProfileManager;
-import org.chromium.chrome.browser.settings.SettingsActivityTestRule;
-import org.chromium.chrome.browser.sync.settings.ManageSyncSettings;
-import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils;
-import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
-import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
-import org.chromium.chrome.test.R;
-import org.chromium.chrome.test.util.ChromeRenderTestRule;
-import org.chromium.chrome.test.util.browser.signin.SigninTestRule;
-import org.chromium.components.signin.base.GoogleServiceAuthError;
-import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider;
-import org.chromium.ui.test.util.NightModeTestUtils;
-import org.chromium.ui.test.util.ViewUtils;
-
-import java.util.concurrent.TimeoutException;
-
-/** Test suite for SyncErrorCardPreference */
-@RunWith(ParameterizedRunner.class)
-@ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
-@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
-public class SyncErrorCardPreferenceTest {
-    private final SettingsActivityTestRule<ManageSyncSettings> mSettingsActivityTestRule =
-            new SettingsActivityTestRule<>(ManageSyncSettings.class);
-
-    private final ChromeTabbedActivityTestRule mActivityTestRule =
-            new ChromeTabbedActivityTestRule();
-
-    // SettingsActivity has to be finished before the outer CTA can be finished or trying to finish
-    // CTA won't work.
-    @Rule
-    public final RuleChain mRuleChain =
-            RuleChain.outerRule(mActivityTestRule).around(mSettingsActivityTestRule);
-
-    @Rule public final SigninTestRule mSigninTestRule = new SigninTestRule();
-
-    @Rule
-    public final ChromeRenderTestRule mRenderTestRule =
-            ChromeRenderTestRule.Builder.withPublicCorpus()
-                    .setRevision(8)
-                    .setBugComponent(ChromeRenderTestRule.Component.SERVICES_SYNC)
-                    .build();
-
-    @Mock private PasswordManagerUtilBridge.Natives mPasswordManagerUtilBridgeJniMock;
-
-    private FakeSyncServiceImpl mFakeSyncServiceImpl;
-
-    @ParameterAnnotations.UseMethodParameterBefore(NightModeTestUtils.NightModeParams.class)
-    public void setupNightMode(boolean nightModeEnabled) {
-        ChromeNightModeTestUtils.setUpNightModeForChromeActivity(nightModeEnabled);
-        mRenderTestRule.setNightModeEnabled(nightModeEnabled);
-    }
-
-    @BeforeClass
-    public static void setUpBeforeActivityLaunched() {
-        ChromeNightModeTestUtils.setUpNightModeBeforeChromeActivityLaunched();
-    }
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        PasswordManagerUtilBridgeJni.setInstanceForTesting(mPasswordManagerUtilBridgeJniMock);
-
-        // Start main activity before because native side needs to be initialized before overriding
-        // SyncService.
-        mActivityTestRule.startMainActivityOnBlankPage();
-
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> {
-                    mFakeSyncServiceImpl = new FakeSyncServiceImpl();
-                    SyncServiceFactory.setInstanceForTesting(mFakeSyncServiceImpl);
-                });
-    }
-
-    @AfterClass
-    public static void tearDownAfterActivityDestroyed() {
-        ChromeNightModeTestUtils.tearDownNightModeAfterChromeActivityDestroyed();
-    }
-
-    private void assertSyncError(@SyncSettingsUtils.SyncError int expectedSyncError) {
-        @SyncSettingsUtils.SyncError
-        int currentSyncError =
-                ThreadUtils.runOnUiThreadBlocking(
-                        () ->
-                                SyncSettingsUtils.getSyncError(
-                                        ProfileManager.getLastUsedRegularProfile()));
-        Assert.assertEquals(
-                "SyncError did not match expected value", expectedSyncError, currentSyncError);
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForAuthErrorWithUpmEnabled(boolean nightModeEnabled)
-            throws Exception {
-        mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.AUTH_ERROR);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.AuthError", SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_auth_error_with_new_title_and_upm");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForClientOutOfDate(boolean nightModeEnabled) throws Exception {
-        mFakeSyncServiceImpl.setRequiresClientUpgrade(true);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.CLIENT_OUT_OF_DATE);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.ClientOutOfDate",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_client_out_of_date_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForOtherErrors(boolean nightModeEnabled) throws Exception {
-        mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.CONNECTION_FAILED);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.OTHER_ERRORS);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.OtherErrors", SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(), "sync_error_card_other_errors_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForPassphraseRequired(boolean nightModeEnabled) throws Exception {
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setPassphraseRequiredForPreferredDataTypes(true);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.PASSPHRASE_REQUIRED);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.PassphraseRequired",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_passphrase_required_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForTrustedVaultKey(boolean nightModeEnabled) throws Exception {
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setTrustedVaultKeyRequiredForPreferredDataTypes(true);
-        mFakeSyncServiceImpl.setEncryptEverythingEnabled(true);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.TRUSTED_VAULT_KEY_REQUIRED_FOR_EVERYTHING);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.TrustedVaultKeyRequiredForEverything",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_trusted_vault_key_required_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForTrustedVaultKeyForPasswords(boolean nightModeEnabled)
-            throws Exception {
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setTrustedVaultKeyRequiredForPreferredDataTypes(true);
-        mFakeSyncServiceImpl.setEncryptEverythingEnabled(false);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.TRUSTED_VAULT_KEY_REQUIRED_FOR_PASSWORDS);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.TrustedVaultKeyRequiredForPasswords",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_trusted_vault_key_required_for_passwords_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForTrustedVaultRecoverabilityDegradedForEverything(
-            boolean nightModeEnabled) throws Exception {
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setTrustedVaultRecoverabilityDegraded(true);
-        mFakeSyncServiceImpl.setEncryptEverythingEnabled(true);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(
-                SyncSettingsUtils.SyncError.TRUSTED_VAULT_RECOVERABILITY_DEGRADED_FOR_EVERYTHING);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.TrustedVaultRecoverabilityDegradedForEverything",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_trusted_vault_recoverability_degraded_for_everything_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForTrustedVaultRecoverabilityDegradedForPasswords(
-            boolean nightModeEnabled) throws Exception {
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setTrustedVaultRecoverabilityDegraded(true);
-        mFakeSyncServiceImpl.setEncryptEverythingEnabled(false);
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(
-                SyncSettingsUtils.SyncError.TRUSTED_VAULT_RECOVERABILITY_DEGRADED_FOR_PASSWORDS);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.TrustedVaultRecoverabilityDegradedForPasswords",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_trusted_vault_recoverability_degraded_for_passwords_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForSyncSetupIncomplete(boolean nightModeEnabled) throws Exception {
-        // Passing a null SyncService instance here would sign-in the user but
-        // FirstSetupComplete will be unset.
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(/* syncService= */ null);
-        assertSyncError(SyncSettingsUtils.SyncError.SYNC_SETUP_INCOMPLETE);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.SyncSetupIncomplete",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(),
-                "sync_error_card_sync_setup_incomplete_with_new_title");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
-    public void testSyncErrorCardForUpmBackendOutdated(boolean nightModeEnabled) throws Exception {
-        when(mPasswordManagerUtilBridgeJniMock.isGmsCoreUpdateRequired(any(), any()))
-                .thenReturn(true);
-
-        mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl);
-        assertSyncError(SyncSettingsUtils.SyncError.UPM_BACKEND_OUTDATED);
-
-        try (HistogramWatcher watchIdentityErrorCardShownHistogram =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Sync.SyncErrorCard.UpmBackendOutdated",
-                        SyncSettingsUtils.ErrorUiAction.SHOWN)) {
-            mSettingsActivityTestRule.startSettingsActivity();
-        }
-
-        mRenderTestRule.render(
-                getPersonalizedSyncPromoView(), "sync_error_card_upm_backend_outdated");
-    }
-
-    private View getPersonalizedSyncPromoView() {
-        // Ensure that AccountInfoServiceProvider populated ProfileDataCache before checking the
-        // view.
-        CallbackHelper callbackHelper = new CallbackHelper();
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> {
-                    AccountInfoServiceProvider.getPromise()
-                            .then(
-                                    accountInfoService -> {
-                                        callbackHelper.notifyCalled();
-                                    });
-                });
-        try {
-            callbackHelper.waitForOnly();
-        } catch (TimeoutException e) {
-            throw new RuntimeException("Timed out waiting for callback", e);
-        }
-
-        ViewUtils.waitForVisibleView(withId(R.id.signin_promo_view_wrapper));
-        View view =
-                ThreadUtils.runOnUiThreadBlocking(
-                        () -> {
-                            return mSettingsActivityTestRule
-                                    .getActivity()
-                                    .findViewById(R.id.signin_promo_view_wrapper);
-                        });
-        Assert.assertNotNull("No sync error card view found.", view);
-        return view;
-    }
-}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java
index e1049c4..0c0f047 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java
@@ -15,9 +15,9 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.description;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 import static org.chromium.ui.test.util.ViewUtils.onViewWaiting;
 
@@ -54,16 +54,13 @@
 import org.chromium.chrome.browser.sync.SyncTestRule;
 import org.chromium.chrome.browser.sync.settings.ManageSyncSettings;
 import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils;
-import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils.SyncError;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.R;
 import org.chromium.chrome.test.util.ChromeRenderTestRule;
-import org.chromium.chrome.test.util.browser.sync.SyncTestUtil;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.components.messages.MessageBannerProperties;
 import org.chromium.components.messages.MessageDispatcher;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
-import org.chromium.components.sync.SyncFirstSetupCompleteSource;
 import org.chromium.ui.modelutil.PropertyModel;
 
 import java.io.IOException;
@@ -118,185 +115,6 @@
 
     @Test
     @LargeTest
-    public void testSyncErrorMessageShownForAuthError() throws Exception {
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        verifyHasShownMessage();
-
-        // Resolving the error should dismiss the current message.
-        mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.NONE);
-        verifyHasDismissedMessage();
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageShownForSyncSetupIncomplete() throws Exception {
-        mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete();
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        verifyHasShownMessage();
-
-        // Resolving the error should dismiss the current message.
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> {
-                    mFakeSyncServiceImpl.setInitialSyncFeatureSetupComplete(
-                            SyncFirstSetupCompleteSource.BASIC_FLOW);
-                });
-        verifyHasDismissedMessage();
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageShownForPassphraseRequired() throws Exception {
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setPassphraseRequiredForPreferredDataTypes(true);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        verifyHasShownMessage();
-
-        // Resolving the error should dismiss the current message.
-        mFakeSyncServiceImpl.setPassphraseRequiredForPreferredDataTypes(false);
-        verifyHasDismissedMessage();
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageShownForClientOutOfDate() throws Exception {
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setRequiresClientUpgrade(true);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        verifyHasShownMessage();
-
-        // Not possible to resolve this error from within chrome unlike the other
-        // SyncErrorMessage-s.
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageShownForTrustedVaultKeyRequired() throws Exception {
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setTrustedVaultKeyRequiredForPreferredDataTypes(true);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        verifyHasShownMessage();
-
-        // Resolving the error should dismiss the current message.
-        mFakeSyncServiceImpl.setTrustedVaultKeyRequiredForPreferredDataTypes(false);
-        verifyHasDismissedMessage();
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageShownForTrustedVaultRecoverabilityDegraded() throws Exception {
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setTrustedVaultRecoverabilityDegraded(true);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        verifyHasShownMessage();
-
-        // Resolving the error should dismiss the current message.
-        mFakeSyncServiceImpl.setTrustedVaultRecoverabilityDegraded(false);
-        verifyHasDismissedMessage();
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageNotShownWhenNoError() throws Exception {
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        SyncTestUtil.waitForSyncFeatureActive();
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-
-        @SyncError
-        int syncError =
-                ThreadUtils.runOnUiThreadBlocking(
-                        () -> {
-                            return SyncSettingsUtils.getSyncError(
-                                    mSyncTestRule.getProfile(/* incognito= */ false));
-                        });
-
-        Assert.assertEquals(SyncError.NO_ERROR, syncError);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-
-        verifyHasNeverShownMessage();
-    }
-
-    @Test
-    @LargeTest
-    public void testSyncErrorMessageNotShownForUpmBackendOutdated() {
-        when(mPasswordManagerUtilBridgeJniMock.isGmsCoreUpdateRequired(any(), any()))
-                .thenReturn(true);
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        @SyncError
-        int syncError =
-                ThreadUtils.runOnUiThreadBlocking(
-                        () -> {
-                            return SyncSettingsUtils.getSyncError(
-                                    mSyncTestRule.getProfile(/* incognito= */ false));
-                        });
-        Assert.assertEquals(SyncError.UPM_BACKEND_OUTDATED, syncError);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-
-        verifyHasNeverShownMessage();
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    public void testSyncErrorMessageForAuthErrorViewModern() throws IOException {
-        SyncErrorMessage.setMessageDispatcherForTesting(null);
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        ViewGroup view = mSyncTestRule.getActivity().findViewById(R.id.message_container);
-        // Wait until the message ui is shown.
-        CriteriaHelper.pollUiThread(() -> Criteria.checkThat(view.getChildCount(), Matchers.is(1)));
-        mRenderTestRule.render(view, "sync_error_message_auth_error_modern");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    public void testSyncErrorMessageForSyncSetupIncompleteView() throws IOException {
-        SyncErrorMessage.setMessageDispatcherForTesting(null);
-        mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete();
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        ViewGroup view = mSyncTestRule.getActivity().findViewById(R.id.message_container);
-        // Wait until the message ui is shown.
-        CriteriaHelper.pollUiThread(() -> Criteria.checkThat(view.getChildCount(), Matchers.is(1)));
-        mRenderTestRule.render(view, "sync_error_message_sync_setup_incomplete");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    public void testSyncErrorMessageForPassphraseRequiredView() throws IOException {
-        SyncErrorMessage.setMessageDispatcherForTesting(null);
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setEngineInitialized(true);
-        mFakeSyncServiceImpl.setPassphraseRequiredForPreferredDataTypes(true);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        ViewGroup view = mSyncTestRule.getActivity().findViewById(R.id.message_container);
-        // Wait until the message ui is shown.
-        CriteriaHelper.pollUiThread(() -> Criteria.checkThat(view.getChildCount(), Matchers.is(1)));
-        mRenderTestRule.render(view, "sync_error_message_passphrase_required");
-    }
-
-    @Test
-    @LargeTest
-    @Feature("RenderTest")
-    public void testSyncErrorMessageForClientOutOfDateView() throws IOException {
-        SyncErrorMessage.setMessageDispatcherForTesting(null);
-        mSyncTestRule.setUpAccountAndEnableSyncForTesting();
-        mFakeSyncServiceImpl.setRequiresClientUpgrade(true);
-        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
-        ViewGroup view = mSyncTestRule.getActivity().findViewById(R.id.message_container);
-        // Wait until the message ui is shown.
-        CriteriaHelper.pollUiThread(() -> Criteria.checkThat(view.getChildCount(), Matchers.is(1)));
-        mRenderTestRule.render(view, "sync_error_message_client_out_of_date");
-    }
-
-    @Test
-    @LargeTest
     public void testSyncErrorMessageShownForAuthErrorForSignedInUsers() throws Exception {
         HistogramWatcher watchIdentityErrorMessageShownHistogram =
                 HistogramWatcher.newSingleRecordWatcher(
@@ -415,6 +233,27 @@
 
     @Test
     @LargeTest
+    public void testSyncErrorMessageNotShownForUpmBackendOutdatedSignedInUsers() {
+        // Sign in.
+        doReturn(true)
+                .when(mPasswordManagerUtilBridgeJniMock)
+                .isGmsCoreUpdateRequired(any(), any());
+        mSyncTestRule.setUpAccountAndSignInForTesting();
+        @SyncSettingsUtils.SyncError
+        int syncError =
+                ThreadUtils.runOnUiThreadBlocking(
+                        () -> {
+                            return SyncSettingsUtils.getIdentityError(
+                                    mSyncTestRule.getProfile(/* incognito= */ false));
+                        });
+        Assert.assertEquals(SyncSettingsUtils.SyncError.UPM_BACKEND_OUTDATED, syncError);
+
+        mSyncTestRule.loadUrl(UrlConstants.VERSION_URL);
+        verifyHasNeverShownMessage();
+    }
+
+    @Test
+    @LargeTest
     @Feature("RenderTest")
     public void testSyncErrorMessageForAuthErrorViewForSignedInUsers() throws IOException {
         SyncErrorMessage.setMessageDispatcherForTesting(null);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/backup/ChromeBackupAgentTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/backup/ChromeBackupAgentTest.java
index 653c5012..41632e4 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/backup/ChromeBackupAgentTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/backup/ChromeBackupAgentTest.java
@@ -58,8 +58,6 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.Features.DisableFeatures;
-import org.chromium.base.test.util.Features.EnableFeatures;
 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
 import org.chromium.chrome.browser.init.AsyncInitTaskRunner;
 import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
@@ -70,7 +68,6 @@
 import org.chromium.chrome.browser.signin.services.SigninManager;
 import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
 import org.chromium.components.prefs.PrefService;
-import org.chromium.components.signin.SigninFeatures;
 import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
@@ -708,33 +705,10 @@
 
     /**
      * Test method for {@link ChromeBackupAgent#onRestore}. The backup contains the previously
-     * syncing user only.
-     */
-    @Test
-    @DisableFeatures({SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP})
-    public void testOnRestore_withSyncUser_signInRestoreDisabled() throws IOException {
-        executeNormalRestoreAndCheckPrefs(
-                /* withSyncingUser= */ true,
-                /* withSignedInUser= */ false,
-                /* withAccountSettings= */ true);
-
-        verifyRestoreFinishWithSignin();
-        verifySyncTypeBoolPrefsRestored(true);
-        verifyAccountSettingsBackupRestored(false);
-        // Verify that bool prefs are not migrated to account settings, since account settings
-        // restore flag is disabled.
-        verifyBoolPrefsMigratedToAccountSettings(false);
-    }
-
-    /**
-     * Test method for {@link ChromeBackupAgent#onRestore}. The backup contains the previously
      * signed-in user only.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSignInUser_signInRestoreEnabled() throws IOException {
+    public void testOnRestore_withSignInUser() throws IOException {
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ false,
                 /* withSignedInUser= */ true,
@@ -753,11 +727,7 @@
      * signed-in user only, and does not contain account settings backup.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSignInUser_signInRestoreEnabled_noAccountSettings()
-            throws IOException {
+    public void testOnRestore_withSignInUser_noAccountSettings() throws IOException {
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ false,
                 /* withSignedInUser= */ true,
@@ -776,10 +746,7 @@
      * signed-in user only.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSignInUser() throws IOException {
+    public void testOnRestore_withSignInUser_isManaged() throws IOException {
         mIsAccountManaged = true;
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ false,
@@ -799,9 +766,6 @@
      * signed-in user only.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
     public void testOnRestore_withSignInUser_notManaged() throws IOException {
         mIsAccountManaged = false;
         executeNormalRestoreAndCheckPrefs(
@@ -822,10 +786,7 @@
      * previously signed-in user and another for the syncing user.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSignInAndSyncUser_signInRestoreEnabled() throws IOException {
+    public void testOnRestore_withSignInAndSyncUser() throws IOException {
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ true,
                 /* withSignedInUser= */ true,
@@ -845,11 +806,7 @@
      * previously signed-in user and another for the syncing user, and no account settings.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSignInAndSyncUser_signInRestoreEnabled_noAccountSettings()
-            throws IOException {
+    public void testOnRestore_withSignInAndSyncUser_noAccountSettings() throws IOException {
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ true,
                 /* withSignedInUser= */ true,
@@ -866,34 +823,10 @@
 
     /**
      * Test method for {@link ChromeBackupAgent#onRestore}. The backup contains a record for the
-     * previously signed-in user and another for the syncing user.
-     */
-    @Test
-    @DisableFeatures({SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP})
-    public void testOnRestore_withSignInAndSyncUser_signInRestoreDisabled() throws IOException {
-        executeNormalRestoreAndCheckPrefs(
-                /* withSyncingUser= */ true,
-                /* withSignedInUser= */ true,
-                /* withAccountSettings= */ true);
-
-        verifyRestoreFinishWithSignin();
-        verifySyncTypeBoolPrefsRestored(true);
-        verifyAccountSettingsBackupRestored(false);
-        // Verify that bool prefs are not migrated to account settings, since account settings
-        // restore flag is disabled.
-        verifyBoolPrefsMigratedToAccountSettings(false);
-    }
-
-    /**
-     * Test method for {@link ChromeBackupAgent#onRestore}. The backup contains a record for the
      * previously syncing user, and a record for account settings.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSyncUserAndAccountSettings_signInRestoreEnabled()
-            throws IOException {
+    public void testOnRestore_withSyncUserAndAccountSettings() throws IOException {
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ true,
                 /* withSignedInUser= */ false,
@@ -923,11 +856,7 @@
      * previously syncing user only, and the backup value for SYNC_KEEP_EVERYTHING_SYNCED is true.
      */
     @Test
-    @EnableFeatures({
-        SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP,
-    })
-    public void testOnRestore_withSyncUser_syncEverything_signInRestoreEnabled()
-            throws IOException {
+    public void testOnRestore_withSyncUser_syncEverything() throws IOException {
         mNativeBoolPrefBackupValues.put(SyncPrefNames.SYNC_KEEP_EVERYTHING_SYNCED, true);
         executeNormalRestoreAndCheckPrefs(
                 /* withSyncingUser= */ true,
@@ -948,8 +877,7 @@
      * signed-in, the restore should be skipped.
      */
     @Test
-    @EnableFeatures({SigninFeatures.RESTORE_SIGNED_IN_ACCOUNT_AND_SETTINGS_FROM_BACKUP})
-    public void testOnRestore_badUser_signedInRestoreEnabled() throws IOException {
+    public void testOnRestore_badUser() throws IOException {
         BackupDataInput backupData =
                 createMockBackupData(
                         /* hasSyncingUser= */ true,
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
index 5a5525e..0ff90779 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
@@ -41,7 +41,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.CallbackUtils;
-import org.chromium.base.Promise;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.Features.EnableFeatures;
 import org.chromium.chrome.browser.bookmarks.BookmarkModel;
@@ -57,13 +56,11 @@
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.services.SigninManager;
 import org.chromium.chrome.browser.signin.services.SigninPreferencesManager;
+import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
 import org.chromium.components.externalauth.ExternalAuthUtils;
 import org.chromium.components.prefs.PrefService;
-import org.chromium.components.signin.AccountManagerFacade;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
-import org.chromium.components.signin.AccountUtils;
 import org.chromium.components.signin.SigninFeatures;
-import org.chromium.components.signin.base.AccountInfo;
 import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
@@ -74,7 +71,7 @@
 import org.chromium.components.signin.identitymanager.PrimaryAccountError;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
 import org.chromium.components.signin.metrics.SignoutReason;
-import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
+import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.components.sync.SyncService;
 import org.chromium.components.sync.UserSelectableType;
 import org.chromium.components.user_prefs.UserPrefs;
@@ -94,12 +91,8 @@
 public class SigninManagerImplTest {
     private static final long NATIVE_SIGNIN_MANAGER = 10001L;
     private static final long NATIVE_IDENTITY_MANAGER = 10002L;
-    private static final AccountInfo ACCOUNT_INFO =
-            new AccountInfo.Builder(
-                            "user@domain.com", FakeAccountManagerFacade.toGaiaId("user@domain.com"))
-                    .fullName("full name")
-                    .givenName("given name")
-                    .build();
+
+    @Rule public AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule();
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule().strictness(Strictness.LENIENT);
@@ -118,8 +111,6 @@
 
     private final IdentityManager mIdentityManager =
             IdentityManager.create(NATIVE_IDENTITY_MANAGER, null /* OAuth2TokenService */);
-    private final FakeAccountManagerFacade mFakeAccountManagerFacade =
-            new FakeAccountManagerFacade();
     private SigninManagerImpl mSigninManager;
 
     @Before
@@ -138,12 +129,10 @@
         when(mExternalAuthUtils.isGooglePlayServicesMissing(any())).thenReturn(false);
         // Suppose that the accounts are already seeded
         when(mIdentityManagerNativeMock.findExtendedAccountInfoByEmailAddress(
-                        NATIVE_IDENTITY_MANAGER, ACCOUNT_INFO.getEmail()))
-                .thenReturn(ACCOUNT_INFO);
+                        NATIVE_IDENTITY_MANAGER, TestAccounts.ACCOUNT1.getEmail()))
+                .thenReturn(TestAccounts.ACCOUNT1);
         when(mIdentityManagerNativeMock.isClearPrimaryAccountAllowed(NATIVE_IDENTITY_MANAGER))
                 .thenReturn(true);
-
-        AccountManagerFacadeProvider.setInstanceForTests(mFakeAccountManagerFacade);
     }
 
     @After
@@ -154,54 +143,34 @@
     }
 
     @Test
-    public void testAccountManagerFacadeObserverAddedOnCreate_accountFetchSucceeded() {
-        CoreAccountInfo coreAccountInfo =
-                CoreAccountInfo.createFromEmailAndGaiaId("email@domain.com", "gaia-id");
-        AccountManagerFacade accountManagerFacadeMock = Mockito.mock(AccountManagerFacade.class);
-        when(accountManagerFacadeMock.getCoreAccountInfos())
-                .thenReturn(Promise.fulfilled(List.of(coreAccountInfo)));
-        when(accountManagerFacadeMock.didAccountFetchSucceed()).thenReturn(true);
-        AccountManagerFacadeProvider.setInstanceForTests(accountManagerFacadeMock);
+    public void testSeedAccountsCalled_accountFetchSucceeded() {
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
 
         createSigninManager();
 
-        verify(accountManagerFacadeMock).addObserver(mSigninManager);
         verify(mIdentityMutator)
                 .seedAccountsThenReloadAllAccountsWithPrimaryAccount(
-                        List.of(coreAccountInfo), null);
+                        List.of(TestAccounts.ACCOUNT1), null);
     }
 
     @Test
-    public void
-            testAccountManagerFacadeObserverAddedOnCreate_accountFetchFailed_accountListPopulated() {
-        CoreAccountInfo coreAccountInfo =
-                CoreAccountInfo.createFromEmailAndGaiaId("email@domain.com", "gaia-id");
-        AccountManagerFacade accountManagerFacadeMock = Mockito.mock(AccountManagerFacade.class);
-        when(accountManagerFacadeMock.getCoreAccountInfos())
-                .thenReturn(Promise.fulfilled(List.of(coreAccountInfo)));
-        when(accountManagerFacadeMock.didAccountFetchSucceed()).thenReturn(false);
-        AccountManagerFacadeProvider.setInstanceForTests(accountManagerFacadeMock);
+    public void testSeedAccountsCalled_accountFetchFailed_accountListPopulated() {
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
+        mAccountManagerTestRule.setAccountFetchFailed();
 
         createSigninManager();
 
-        verify(accountManagerFacadeMock).addObserver(mSigninManager);
         verify(mIdentityMutator)
                 .seedAccountsThenReloadAllAccountsWithPrimaryAccount(
-                        List.of(coreAccountInfo), null);
+                        List.of(TestAccounts.ACCOUNT1), null);
     }
 
     @Test
-    public void
-            testAccountManagerFacadeObserverAddedOnCreate_accountFetchFailed_accountListEmpty() {
-        AccountManagerFacade accountManagerFacadeMock = Mockito.mock(AccountManagerFacade.class);
-        when(accountManagerFacadeMock.getCoreAccountInfos())
-                .thenReturn(Promise.fulfilled(List.of()));
-        when(accountManagerFacadeMock.didAccountFetchSucceed()).thenReturn(false);
-        AccountManagerFacadeProvider.setInstanceForTests(accountManagerFacadeMock);
+    public void testSeedAccountsCalled_accountFetchFailed_accountListEmpty() {
+        mAccountManagerTestRule.setAccountFetchFailed();
 
         createSigninManager();
 
-        verify(accountManagerFacadeMock).addObserver(mSigninManager);
         verify(mIdentityMutator, never())
                 .seedAccountsThenReloadAllAccountsWithPrimaryAccount(any(), any());
     }
@@ -209,10 +178,10 @@
     @Test
     public void testOnCoreAccountInfosChanged() {
         createSigninManager();
-        mFakeAccountManagerFacade.addAccount(ACCOUNT_INFO);
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
 
         List<CoreAccountInfo> coreAccountInfos =
-                mFakeAccountManagerFacade.getCoreAccountInfos().getResult();
+                AccountManagerFacadeProvider.getInstance().getCoreAccountInfos().getResult();
         verify(mIdentityMutator)
                 .seedAccountsThenReloadAllAccountsWithPrimaryAccount(coreAccountInfos, null);
     }
@@ -221,7 +190,7 @@
     public void signinAndTurnSyncOn() {
         createSigninManager();
         when(mNativeMock.getUserAcceptedAccountManagement(anyLong())).thenReturn(true);
-        mFakeAccountManagerFacade.addAccount(ACCOUNT_INFO);
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
         when(mIdentityMutator.setPrimaryAccount(any(), anyInt(), anyInt(), any()))
                 .thenReturn(PrimaryAccountError.NO_ERROR);
         when(mSyncService.getSelectedTypes()).thenReturn(Set.of(UserSelectableType.BOOKMARKS));
@@ -233,9 +202,7 @@
         assertFalse(mSigninManager.isSignOutAllowed());
 
         List<CoreAccountInfo> coreAccountInfos =
-                mFakeAccountManagerFacade.getCoreAccountInfos().getResult();
-        CoreAccountInfo primaryAccountInfo =
-                AccountUtils.findCoreAccountInfoByEmail(coreAccountInfos, ACCOUNT_INFO.getEmail());
+                AccountManagerFacadeProvider.getInstance().getCoreAccountInfos().getResult();
 
         doAnswer(
                         (args) -> {
@@ -249,17 +216,19 @@
                             return null;
                         })
                 .when(mNativeMock)
-                .fetchAndApplyCloudPolicy(eq(NATIVE_SIGNIN_MANAGER), eq(primaryAccountInfo), any());
+                .fetchAndApplyCloudPolicy(
+                        eq(NATIVE_SIGNIN_MANAGER), eq(TestAccounts.ACCOUNT1), any());
 
         SigninManager.SignInCallback callback = mock(SigninManager.SignInCallback.class);
-        mSigninManager.signinAndEnableSync(ACCOUNT_INFO, SigninAccessPoint.START_PAGE, callback);
+        mSigninManager.signinAndEnableSync(
+                TestAccounts.ACCOUNT1, SigninAccessPoint.START_PAGE, callback);
 
         verify(mIdentityMutator)
                 .seedAccountsThenReloadAllAccountsWithPrimaryAccount(
-                        coreAccountInfos, primaryAccountInfo.getId());
+                        coreAccountInfos, TestAccounts.ACCOUNT1.getId());
         verify(mIdentityMutator)
                 .setPrimaryAccount(
-                        eq(primaryAccountInfo.getId()),
+                        eq(TestAccounts.ACCOUNT1.getId()),
                         eq(ConsentLevel.SYNC),
                         eq(SigninAccessPoint.START_PAGE),
                         any());
@@ -272,7 +241,7 @@
         // another account to be signed in.
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
         assertFalse(mSigninManager.isSigninAllowed());
         assertFalse(mSigninManager.isSyncOptInAllowed());
         // Signing out is allowed.
@@ -307,13 +276,13 @@
         assertTrue(mSigninManager.isSyncOptInAllowed());
 
         SigninManager.SignInCallback callback = mock(SigninManager.SignInCallback.class);
-        mSigninManager.signin(ACCOUNT_INFO, SigninAccessPoint.START_PAGE, callback);
+        mSigninManager.signin(TestAccounts.ACCOUNT1, SigninAccessPoint.START_PAGE, callback);
 
         // Signin without turning on sync should still apply policies.
         verify(mNativeMock).fetchAndApplyCloudPolicy(anyLong(), any(), any());
         verify(mIdentityMutator)
                 .setPrimaryAccount(
-                        eq(ACCOUNT_INFO.getId()),
+                        eq(TestAccounts.ACCOUNT1.getId()),
                         eq(ConsentLevel.SIGNIN),
                         eq(SigninAccessPoint.START_PAGE),
                         any());
@@ -326,7 +295,7 @@
         // The primary account is now present and consented to sign in.
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), eq(ConsentLevel.SIGNIN)))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
         assertFalse(mSigninManager.isSigninAllowed());
         assertTrue(mSigninManager.isSyncOptInAllowed());
     }
@@ -375,7 +344,7 @@
         // Simulate sign-out with non-managed account.
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.signOut(SignoutReason.TEST);
 
@@ -404,7 +373,7 @@
         // Simulate sign-out with non-managed account.
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.signOut(SignoutReason.TEST);
 
@@ -427,7 +396,7 @@
         createSigninManager();
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.signOut(SignoutReason.TEST, null, true);
 
@@ -452,7 +421,7 @@
         SigninManager.SignOutCallback callback = mock(SigninManager.SignOutCallback.class);
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.revokeSyncConsent(SignoutReason.TEST, callback, false);
 
@@ -474,7 +443,7 @@
                 .thenReturn(false);
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.revokeSyncConsent(
                 SignoutReason.TEST,
@@ -509,7 +478,7 @@
                 .thenReturn(true);
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.revokeSyncConsent(
                 SignoutReason.TEST,
@@ -543,7 +512,7 @@
                 .thenReturn(false);
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.wipeSyncUserData(
                 CallbackUtils.emptyRunnable(), SigninManager.DataWipeOption.WIPE_SYNC_DATA);
@@ -576,7 +545,7 @@
                 .thenReturn(true);
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mSigninManager.wipeSyncUserData(
                 CallbackUtils.emptyRunnable(), SigninManager.DataWipeOption.WIPE_SYNC_DATA);
@@ -604,7 +573,7 @@
     @Test
     public void clearingAccountCookieDoesNotTriggerSignoutWhenUserIsSignedOut() {
         createSigninManager();
-        mFakeAccountManagerFacade.addAccount(ACCOUNT_INFO);
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
 
         mIdentityManager.onAccountsCookieDeletedByUserAction();
 
@@ -616,8 +585,7 @@
     @Test
     public void clearingAccountCookieDoesNotTriggerSignoutWhenUserIsSignedInAndSync() {
         createSigninManager();
-        mFakeAccountManagerFacade.addAccount(
-                AccountUtils.createAccountFromName(ACCOUNT_INFO.getEmail()));
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
 
         mIdentityManager.onAccountsCookieDeletedByUserAction();
 
@@ -629,13 +597,10 @@
     @Test
     public void clearingAccountCookieDoesNotTriggerSignoutWhenUserIsSignedInWithoutSync() {
         createSigninManager();
-        mFakeAccountManagerFacade.addAccount(ACCOUNT_INFO);
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         NATIVE_IDENTITY_MANAGER, ConsentLevel.SIGNIN))
-                .thenReturn(
-                        AccountUtils.findCoreAccountInfoByEmail(
-                                mFakeAccountManagerFacade.getCoreAccountInfos().getResult(),
-                                ACCOUNT_INFO.getEmail()));
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mIdentityManager.onAccountsCookieDeletedByUserAction();
 
@@ -680,19 +645,19 @@
     public void callbackNotifiedOnSignin() {
         createSigninManager();
         when(mNativeMock.getUserAcceptedAccountManagement(anyLong())).thenReturn(true);
-        mFakeAccountManagerFacade.addAccount(ACCOUNT_INFO);
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
         final Answer<Integer> setPrimaryAccountAnswer =
                 invocation -> {
                     // From now on getPrimaryAccountInfo should return account.
                     when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                                     eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                            .thenReturn(ACCOUNT_INFO);
+                            .thenReturn(TestAccounts.ACCOUNT1);
                     return PrimaryAccountError.NO_ERROR;
                 };
         doAnswer(setPrimaryAccountAnswer)
                 .when(mIdentityMutator)
                 .setPrimaryAccount(
-                        eq(ACCOUNT_INFO.getId()),
+                        eq(TestAccounts.ACCOUNT1.getId()),
                         eq(ConsentLevel.SYNC),
                         eq(SigninAccessPoint.UNKNOWN),
                         any());
@@ -709,7 +674,7 @@
                 .when(mNativeMock)
                 .fetchAndApplyCloudPolicy(anyLong(), any(), any());
 
-        mSigninManager.signinAndEnableSync(ACCOUNT_INFO, SigninAccessPoint.UNKNOWN, null);
+        mSigninManager.signinAndEnableSync(TestAccounts.ACCOUNT1, SigninAccessPoint.UNKNOWN, null);
         assertEquals(1, callCount.get());
     }
 
@@ -717,23 +682,19 @@
     public void signInStateObserverCallOnSignIn() {
         createSigninManager();
         when(mNativeMock.getUserAcceptedAccountManagement(anyLong())).thenReturn(true);
-        mFakeAccountManagerFacade.addAccount(ACCOUNT_INFO);
-        List<CoreAccountInfo> coreAccountInfos =
-                mFakeAccountManagerFacade.getCoreAccountInfos().getResult();
-        CoreAccountInfo primaryAccountInfo =
-                AccountUtils.findCoreAccountInfoByEmail(coreAccountInfos, ACCOUNT_INFO.getEmail());
+        mAccountManagerTestRule.addAccount(TestAccounts.ACCOUNT1);
         final Answer<Integer> setPrimaryAccountAnswer =
                 invocation -> {
                     // From now on getPrimaryAccountInfo should return account.
                     when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                                     eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                            .thenReturn(primaryAccountInfo);
+                            .thenReturn(TestAccounts.ACCOUNT1);
                     return PrimaryAccountError.NO_ERROR;
                 };
         doAnswer(setPrimaryAccountAnswer)
                 .when(mIdentityMutator)
                 .setPrimaryAccount(
-                        eq(primaryAccountInfo.getId()),
+                        eq(TestAccounts.ACCOUNT1.getId()),
                         eq(ConsentLevel.SYNC),
                         eq(SigninAccessPoint.START_PAGE),
                         any());
@@ -749,7 +710,8 @@
                 .when(mNativeMock)
                 .fetchAndApplyCloudPolicy(anyLong(), any(), any());
 
-        mSigninManager.signinAndEnableSync(ACCOUNT_INFO, SigninAccessPoint.START_PAGE, null);
+        mSigninManager.signinAndEnableSync(
+                TestAccounts.ACCOUNT1, SigninAccessPoint.START_PAGE, null);
 
         ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
         verify(mSignInStateObserver).onSignOutAllowedChanged();
@@ -762,7 +724,7 @@
         createSigninManager();
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
         assertTrue(mSigninManager.isSignOutAllowed());
 
         mSigninManager.signOut(SignoutReason.TEST);
@@ -776,7 +738,7 @@
         createSigninManager();
         when(mIdentityManagerNativeMock.getPrimaryAccountInfo(
                         eq(NATIVE_IDENTITY_MANAGER), anyInt()))
-                .thenReturn(ACCOUNT_INFO);
+                .thenReturn(TestAccounts.ACCOUNT1);
         when(mIdentityManagerNativeMock.isClearPrimaryAccountAllowed(NATIVE_IDENTITY_MANAGER))
                 .thenReturn(false);
 
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd
index 04a9377..7a51150 100644
--- a/chrome/app/chromium_strings.grd
+++ b/chrome/app/chromium_strings.grd
@@ -1550,12 +1550,18 @@
       <message name="IDS_SYNC_ERROR_USER_MENU_UPGRADE_BUTTON" desc="Button in the header of desktop user menu that prompts the user to update Chrome to fix the out-of-date Chrome client error.">
         Update Chromium
       </message>
-      <message name="IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY" desc="Title of the sync/signin error header of desktop user menu. Shown for users who are signed-in but not syncing.">
-        To use and save Chromium data in your Google Account, enter your passphrase
+      <message name="IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION" desc="Error description of the sync/signin error header of desktop user menu.">
+        Enter your passphrase to use and save Chromium data in your account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
+      </message>
+      <message name="IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION" desc="Error description of the sync/signin error header of desktop user menu.">
+        Verify it's you to use and save Chromium data in your account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
       </message>
        <message name="IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_TITLE" desc="Error message to resolve sync protocol error for out-of-date client.">
         To use and save Chromium data in your Google Account, update Chromium
       </message>
+      <message name="IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION" desc="Error message to resolve sync protocol error for out-of-date client.">
+        Update Chromium to keeping using the Chromium data in your Google Account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
+      </message>
 
       <!-- Sync errors. -->
       <message name="IDS_SYNC_UPGRADE_CLIENT" desc="Message indicating client needs to be upgraded to the latest version.">
diff --git a/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..634f72d
--- /dev/null
+++ b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+3b56d431fe3caf3d143445b40c0818541f1ef640
\ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY.png.sha1 b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY.png.sha1
deleted file mode 100644
index 9e3ce0baa..0000000
--- a/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-39e9e22bc08e1dba037fbcdfb68ae11d8d76e668
\ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..5585109
--- /dev/null
+++ b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+bc132e8fe38368d4c90a79aa9515fe9cf3ead123
\ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9a58722b
--- /dev/null
+++ b/chrome/app/chromium_strings_grd/IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+c6eee121cf8f5d107c32d46605f5d31f97a10a8f
\ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 11894896..fe56908 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -14392,12 +14392,18 @@
       <message name="IDS_SYNC_ERROR_PASSWORDS_USER_MENU_TITLE" desc="Title of the sync/signin error header of desktop user menu for the case where the error only affects sync-ed passwords..">
         Password sync isn't working
       </message>
+      <message name="IDS_SYNC_ERROR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION" desc="Error description of the sync/signin error header of desktop user menu.">
+        Verify it's you to use and save passwords in your account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
+      </message>
       <message name="IDS_SYNC_ERROR_PASSWORDS_USER_MENU_TITLE_SIGNED_IN_ONLY" desc="Title of the sync/signin error header of desktop user menu. Shown for users who are signed-in but not syncing.">
         To continue saving passwords in your Google Account, verify it’s you
       </message>
       <message name="IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_EVERYTHING_USER_MENU_TITLE" desc="Title of a sync error header of desktop user menu that prompts the user to add recovery options.">
         Make sure you can always access your sync data
       </message>
+      <message name="IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION" desc="Error description of a sync error header of desktop user menu that prompts the user to add recovery options.">
+        Verify it's you to make sure you can always use the passwords in your account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
+      </message>
       <message name="IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_TITLE" desc="Title of a sync error header of desktop user menu that prompts the user to add recovery options.">
         Make sure you can always access your saved passwords
       </message>
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..832f651c
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+5c4161697bc705d1ac05362d2b09fa176863a84a
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..2718417
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+4bbc3b01d0a5a3250c3fd6844b983ef4afbed000
\ No newline at end of file
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd
index fe664b8d..a4174e3 100644
--- a/chrome/app/google_chrome_strings.grd
+++ b/chrome/app/google_chrome_strings.grd
@@ -1719,12 +1719,18 @@
       <message name="IDS_SYNC_ERROR_USER_MENU_UPGRADE_BUTTON" desc="Button in the header of desktop user menu that prompts the user to update Chrome to fix the out-of-date Chrome client error.">
         Update Chrome
       </message>
-      <message name="IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY" desc="Title of the sync/signin error header of desktop user menu. Shown for users who are signed-in but not syncing.">
-        To use and save Chrome data in your Google Account, enter your passphrase
+      <message name="IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION" desc="Error description of the sync/signin error header of desktop user menu.">
+        Enter your passphrase to use and save Chrome data in your account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
+      </message>
+      <message name="IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION" desc="Error description of the sync/signin error header of desktop user menu.">
+        Verify it's you to use and save Chrome data in your account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
       </message>
       <message name="IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_TITLE" desc="Error message to resolve sync protocol error for out-of-date client.">
         To use and save Chrome data in your Google Account, update Chrome
       </message>
+      <message name="IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION" desc="Error message to resolve sync protocol error for out-of-date client.">
+        Update Chrome to keeping using the Chrome data in your Google Account, <ph name="ACCOUNT_EMAIL">$1<ex>elisa.beckett@gmail.com</ex></ph>
+      </message>
 
       <!-- Sync errors. -->
       <message name="IDS_SYNC_UPGRADE_CLIENT" desc="Message indicating client needs to be upgraded to the latest version.">
diff --git a/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..634f72d
--- /dev/null
+++ b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+3b56d431fe3caf3d143445b40c0818541f1ef640
\ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY.png.sha1
deleted file mode 100644
index 9e3ce0baa..0000000
--- a/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-39e9e22bc08e1dba037fbcdfb68ae11d8d76e668
\ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..5585109
--- /dev/null
+++ b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+bc132e8fe38368d4c90a79aa9515fe9cf3ead123
\ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9a58722b
--- /dev/null
+++ b/chrome/app/google_chrome_strings_grd/IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+c6eee121cf8f5d107c32d46605f5d31f97a10a8f
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index 01723504..2741d45 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -4687,7 +4687,7 @@
   <message name="IDS_SETTINGS_INTERNET_KNOWN_NETWORKS_BUTTON" desc="Text for button that opens the known networks subpage.">
     Known networks
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_INTERNET_KNOWN_NETWORKS_MESSAGE" desc="Message describing the behavior of the known networks page.">
+  <message name="IDS_OS_SETTINGS_INTERNET_KNOWN_NETWORKS_MESSAGE" desc="Message describing the behavior of the known networks page.">
     Preferred networks will be used if more than one previous network is available
   </message>
   <message name="IDS_SETTINGS_INTERNET_KNOWN_NETWORKS_PREFFERED" desc="Title for list of preferred networks.">
@@ -4885,7 +4885,7 @@
   <message name="IDS_SETTINGS_INTERNET_NETWORK_PREFER" desc="Settings > Internet > Network details: Label for the checkbox determining whether a network is preferred over other networks.">
     Prefer this network
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_PREFER_DESCRIPTION" desc="Settings > Internet > Network details: Description of the label for the checkbox determining whether a network is preferred over other networks.">
+  <message name="IDS_OS_SETTINGS_INTERNET_NETWORK_PREFER_DESCRIPTION" desc="Settings > Internet > Network details: Description of the label for the checkbox determining whether a network is preferred over other networks.">
     This network will be preferred if more than one previously connected or configured network is available
   </message>
   <message name="IDS_SETTINGS_INTERNET_NETWORK_PRIMARY_USER_CONTROLLED" desc="Settings > Internet > Network details: Text to show when a network configuration is controlled by the primary user.">
@@ -4927,7 +4927,7 @@
   <message name="IDS_SETTINGS_INTERNET_NETWORK_SHARED" desc="Settings > Internet > Network details: Text to show when a network is shared.">
     Other users of this device can use this network
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_SHARED_OWNER" desc="Settings > Internet > Network details: Text to show when a network is shared and was configured by the current user.">
+  <message name="IDS_OS_SETTINGS_INTERNET_NETWORK_SHARED_OWNER" desc="Settings > Internet > Network details: Text to show when a network is shared and was configured by the current user.">
     Other users on this device can also use this network
   </message>
   <message name="IDS_SETTINGS_INTERNET_NETWORK_SHARED_NOT_OWNER" desc="Settings > Internet > Network details: Text to show when a network is shared with you (by another user or configured before login).">
@@ -6867,31 +6867,22 @@
 
   <!-- Privacy Page -->
   <if expr="reven">
-    <message name="IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in ChromeOS Flex.">
-      Help improve ChromeOS Flex features and performance
-    </message>
-    <message name="IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in ChromeOS Flex.">
+    <message name="IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in ChromeOS Flex.">
       Send crash reports and diagnostic and usage data to ChromeOS Flex
     </message>
-    <message name="IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_DESCRIPTION" desc="The description of the checkbox to enable/disable crash and user metrics logging in ChromeOS Flex for user of the device.">
+    <message name="IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESCRIPTION" desc="The description of the checkbox to enable/disable crash and user metrics logging in ChromeOS Flex for user of the device.">
       Help improve ChromeOS Flex features and performance. Data is aggregated and highly protected.
     </message>
   </if>
   <if expr="not reven">
-    <message name="IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in ChromeOS.">
-      Help improve ChromeOS features and performance
-    </message>
-    <message name="IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in ChromeOS.">
+    <message name="IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in ChromeOS.">
       Send crash reports and diagnostic and usage data to ChromeOS
     </message>
-    <message name="IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_DESCRIPTION" desc="The description of the checkbox to enable/disable crash and user metrics logging in ChromeOS for user of the device.">
+    <message name="IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESCRIPTION" desc="The description of the checkbox to enable/disable crash and user metrics logging in ChromeOS for user of the device.">
       Help improve ChromeOS features and performance. Data is aggregated and highly protected.
     </message>
   </if>
   <message name="IDS_OS_SETTINGS_PRIVACY_TITLE" desc="Name of the privacy settings page.">
-    Security and Privacy
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_PRIVACY_TITLE" desc="Name of the privacy settings page.">
     Privacy and security
   </message>
   <message name="IDS_OS_SETTINGS_PRIVACY_MENU_ITEM_DESCRIPTION" desc="Description for the Privacy menu item in the left menu.">
@@ -6900,49 +6891,28 @@
   <message name="IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESC" desc="The description of the checkbox to enable/disable crash and user metrics logging in ChromeOS for user of the device.">
     Automatically sends crash reports as well as diagnostic and usage data to Google
   </message>
-  <message name="IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE" desc="The label of the checkbox to enable/disable Suggested Content in ChromeOS settings. Suggested Content includes app search recommendations and website recommendations which can show up in places such as the launcher search and suggestion chips.">
-    Suggest new content to explore
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_TITLE" desc="The label of the checkbox to enable/disable Suggested Content in ChromeOS settings. Suggested Content includes app search recommendations and website recommendations which can show up in places such as the launcher search and suggestion chips.">
+  <message name="IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE" desc="The label of the checkbox to enable/disable Suggested Content in ChromeOS settings. Suggested Content includes app search recommendations and website recommendations which can show up in places such as the launcher search and suggestion chips.">
     Get content recommendations
   </message>
-  <message name="IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESC" desc="The description of the checkbox to enable/disable Suggested Content in ChromeOS settings. Suggested Content includes app search recommendations and website recommendations which can show up in places such as the launcher search and suggestion chips.">
-    Includes apps, webpages, and more. Sends statistics to improve suggestions only if you’ve chosen to share usage data.
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_DESCRIPTION" desc="The description of the checkbox to enable/disable Suggested Content in ChromeOS settings. Suggested Content includes app search recommendations and website recommendations which can show up in places such as the launcher search and suggestion chips.">
+  <message name="IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESCRIPTION" desc="The description of the checkbox to enable/disable Suggested Content in ChromeOS settings. Suggested Content includes app search recommendations and website recommendations which can show up in places such as the launcher search and suggestion chips.">
   See suggestions for new apps and web content in Launcher and search results. Sends statistics to improve suggestions only if you have chosen to send crash reports and diagnostics and usage data to ChromeOS.
   </message>
   <message name="IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION" desc="description label for verified access about premium contents">
     Enable Verified Access
   </message>
   <message name="IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_TITLE" desc="The title of the toggle to enable/disable peripheral data access protection. Peripheral data access protection refers to the system (ChromeOS) preventing external peripherals (e.g. Thunderbolt docks) from accessing the device's memory.">
-    Data access protection for peripherals
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_TITLE" desc="The title of the toggle to enable/disable peripheral data access protection. Peripheral data access protection refers to the system (ChromeOS) preventing external peripherals (e.g. Thunderbolt docks) from accessing the device's memory.">
     Block Thunderbolt or USB4 accessories from accessing and sharing memory (RAM)
   </message>
   <message name="IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION" desc="The description of the toggle to enable/disable peripheral data access protection. Peripheral data access protection refers to the system (ChromeOS) preventing external peripherals (e.g. Thunderbolt docks) from accessing the device's memory.">
-    Some devices require you to disable data access protection to work properly or at full performance.
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION" desc="The description of the toggle to enable/disable peripheral data access protection. Peripheral data access protection refers to the system (ChromeOS) preventing external peripherals (e.g. Thunderbolt docks) from accessing the device's memory.">
     Some Thunderbolt or USB4 accessories need memory access to work properly.
   </message>
   <message name="IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE" desc="The title of the dialog that asks users for confirmation that they indeed do want to disable Data Access Protection.">
-    Disable data access protection for peripherals
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE" desc="The title of the dialog that asks users for confirmation that they indeed do want to disable Data Access Protection.">
     Allow external accessories to access memory?
   </message>
   <message name="IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION" desc="The description of the dialog that asks users for confirmation that they indeed do want to disable Data Access Protection.">
-    Disabling can make your peripherals perform better, but may expose your personal data through unauthorized usage.
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION" desc="The description of the dialog that asks users for confirmation that they indeed do want to disable Data Access Protection.">
     External accessories may be able to access or share personal data.
   </message>
   <message name="IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION" desc="The description of the dialog that states that disabling peripheral data access protection may reset the user's peripherals and may take a few seconds.">
-    Your displays and peripherals may reset briefly. For this change to take effect, unplug and replug your peripherals.
-  </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION" desc="The description of the dialog that states that disabling peripheral data access protection may reset the user's peripherals and may take a few seconds.">
     For this change to take effect, reconnect your external accessories.
   </message>
   <message name="IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_CANCEL_BUTTON_LABEL" desc="The label of the cancel button for the data access protection confirmation dialog">
@@ -6951,7 +6921,7 @@
   <message name="IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DISABLE_BUTTON_LABEL" desc="The label of the confirmation button to disable data access protection">
     Disable
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL" desc="The label of the confirmation button to disable data access protection">
+  <message name="IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL" desc="The label of the confirmation button to disable data access protection">
     Allow
   </message>
   <message name="IDS_OS_SETTINGS_SMART_PRIVACY_TITLE" desc="Text on the privacy page that opens up the smart privacy section.">
@@ -7134,16 +7104,16 @@
   <message name="IDS_OS_SETTINGS_SECURE_DNS_DESCRIPTION" desc="Description of secure DNS in Privacy options">
     Make it harder for people with access to your internet traffic to see which sites you visit. <ph name="PRODUCT_NAME">$1<ex>ChromeOS</ex></ph> uses a secure connection to look up a site's IP address in the DNS (Domain Name System).
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TITLE" desc="Text for secure DNS dialog title in Privacy options for ChromeOS">
+  <message name="IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TITLE" desc="Text for secure DNS dialog title in Privacy options for ChromeOS">
     Turn off URL encryption?
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_BODY" desc="Text for secure DNS dialog body in Privacy options for ChromeOS">
+  <message name="IDS_OS_SETTINGS_SECURE_DNS_DIALOG_BODY" desc="Text for secure DNS dialog body in Privacy options for ChromeOS">
     Those with access to your internet traffic can see what websites you visit
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_CANCEL" desc="Text for secure DNS dialog to cancel action in Privacy options for ChromeOS">
+  <message name="IDS_OS_SETTINGS_SECURE_DNS_DIALOG_CANCEL" desc="Text for secure DNS dialog to cancel action in Privacy options for ChromeOS">
     Cancel
   </message>
-  <message name="IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TURN_OFF" desc="Text for secure DNS dialog to turn off DNS in Privacy options for ChromeOS">
+  <message name="IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TURN_OFF" desc="Text for secure DNS dialog to turn off DNS in Privacy options for ChromeOS">
     Turn off
   </message>
   <message name="IDS_OS_SETTINGS_SECURE_DNS_AUTOMATIC_MODE_DESCRIPTION" desc="Text of the select option that puts secure DNS in Network Default mode">
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1
index b1c00e93..c328284a 100644
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1
@@ -1 +1 @@
-f4818662aa88cbcc029f6b31c196a11d8c112e23
\ No newline at end of file
+372ca7cf37486895d5e2add06c6ac05f2790979d
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1
index b1c00e93..d40aec48 100644
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1
@@ -1 +1 @@
-f4818662aa88cbcc029f6b31c196a11d8c112e23
\ No newline at end of file
+a695bda5eb8f09ee29468331fd84ed3c48f6e2c5
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1
index 10457dd7..9469415 100644
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1
@@ -1 +1 @@
-c5715ed51ce61663a6201ad994315bc14b6d5f6e
\ No newline at end of file
+8308b60f6b037ce9d3cb3d09752097c369f186e6
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1
index 1d7d402..bcf0bdf 100644
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1
@@ -1 +1 @@
-f5b3ea6328dfb3a9b91e00ba18eecb14fe00d682
\ No newline at end of file
+cdea4fe9376a45565afa038d67f0a08c7a30b553
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1
index 10457dd7..536f0c9 100644
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1
@@ -1 +1 @@
-c5715ed51ce61663a6201ad994315bc14b6d5f6e
\ No newline at end of file
+01b06ba96ca7a00a0b518a157d724d5945000a0c
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESCRIPTION.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_DESCRIPTION.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESCRIPTION.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESCRIPTION.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_DESCRIPTION.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESCRIPTION.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_INTERNET_KNOWN_NETWORKS_MESSAGE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_INTERNET_KNOWN_NETWORKS_MESSAGE.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_INTERNET_KNOWN_NETWORKS_MESSAGE.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_INTERNET_KNOWN_NETWORKS_MESSAGE.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_PREFER_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_INTERNET_NETWORK_PREFER_DESCRIPTION.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_PREFER_DESCRIPTION.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_INTERNET_NETWORK_PREFER_DESCRIPTION.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_SHARED_OWNER.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_INTERNET_NETWORK_SHARED_OWNER.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_SHARED_OWNER.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_INTERNET_NETWORK_SHARED_OWNER.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_PRIVACY_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_PRIVACY_TITLE.png.sha1
index 2db2adf..cf27767 100644
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_PRIVACY_TITLE.png.sha1
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_PRIVACY_TITLE.png.sha1
@@ -1 +1 @@
-c7c953571fc3f43a825ad96d9e7cd35126f62c1c
\ No newline at end of file
+8a93390f68ebe2c04a0c19fd1dd8e8824d5ace77
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1
deleted file mode 100644
index c328284a..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-372ca7cf37486895d5e2add06c6ac05f2790979d
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1
deleted file mode 100644
index d40aec48..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a695bda5eb8f09ee29468331fd84ed3c48f6e2c5
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1
deleted file mode 100644
index 9469415..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8308b60f6b037ce9d3cb3d09752097c369f186e6
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1
deleted file mode 100644
index bcf0bdf..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cdea4fe9376a45565afa038d67f0a08c7a30b553
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1
deleted file mode 100644
index 536f0c9..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01b06ba96ca7a00a0b518a157d724d5945000a0c
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_PRIVACY_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_PRIVACY_TITLE.png.sha1
deleted file mode 100644
index cf27767..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_PRIVACY_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8a93390f68ebe2c04a0c19fd1dd8e8824d5ace77
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_BODY.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_BODY.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_BODY.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_BODY.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_CANCEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_CANCEL.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_CANCEL.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_CANCEL.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TITLE.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TITLE.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TITLE.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TURN_OFF.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TURN_OFF.png.sha1
similarity index 100%
rename from chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TURN_OFF.png.sha1
rename to chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TURN_OFF.png.sha1
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
deleted file mode 100644
index 9f010e9..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-67463ff9cd3e69a7b5632059add91ba5b73d29f6
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESC.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESC.png.sha1
deleted file mode 100644
index 334e5f73..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dfa4fc0027d5b6ebf37cf56d1b2245a3a7f01727
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1
deleted file mode 100644
index 334e5f73..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dfa4fc0027d5b6ebf37cf56d1b2245a3a7f01727
\ No newline at end of file
diff --git a/chrome/app/password_manager_ui_strings.grdp b/chrome/app/password_manager_ui_strings.grdp
index 3fb218c..9eff3f6 100644
--- a/chrome/app/password_manager_ui_strings.grdp
+++ b/chrome/app/password_manager_ui_strings.grdp
@@ -950,4 +950,10 @@
   <message name="IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_CANCEL" desc="The caption on the button, which cancels the password change flow.">
     Cancel
   </message>
+  <message name="IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_TITLE" desc="This is the title of the dialog appearing during password change flow. It appears while password change is ongoing.">
+    Changing your password...
+  </message>
+  <message name="IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS" desc="This is the detailed explanation in the dialog appearing during password change flow. It appears while password change is ongoing.">
+    Chrome is creating a strong password for you. You don't need to remember it because it's saved for you in <ph name="GOOGLE_PASSWORD_MANAGER">$1<ex>Google Password Manager</ex></ph> for <ph name="EMAIL">$2<ex>user@gmail.com</ex></ph>.
+  </message>
 </grit-part>
diff --git a/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS.png.sha1 b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS.png.sha1
new file mode 100644
index 0000000..bb935cb
--- /dev/null
+++ b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS.png.sha1
@@ -0,0 +1 @@
+4b6103c37f7e37e323c2017f3b7add1507c2de2a
\ No newline at end of file
diff --git a/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS_ON_DEVICE.png.sha1 b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS_ON_DEVICE.png.sha1
new file mode 100644
index 0000000..de7bb40
--- /dev/null
+++ b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS_ON_DEVICE.png.sha1
@@ -0,0 +1 @@
+d85feb1b40383e3265978aa46622f8c661905b6a
\ No newline at end of file
diff --git a/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS_SYNCED_TO_ACCOUNT.png.sha1 b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS_SYNCED_TO_ACCOUNT.png.sha1
new file mode 100644
index 0000000..bb935cb
--- /dev/null
+++ b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS_SYNCED_TO_ACCOUNT.png.sha1
@@ -0,0 +1 @@
+4b6103c37f7e37e323c2017f3b7add1507c2de2a
\ No newline at end of file
diff --git a/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_TITLE.png.sha1 b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_TITLE.png.sha1
new file mode 100644
index 0000000..de7bb40
--- /dev/null
+++ b/chrome/app/password_manager_ui_strings_grdp/IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_TITLE.png.sha1
@@ -0,0 +1 @@
+d85feb1b40383e3265978aa46622f8c661905b6a
\ No newline at end of file
diff --git a/chrome/app/profiles_strings.grdp b/chrome/app/profiles_strings.grdp
index 5de301a8..7767837f 100644
--- a/chrome/app/profiles_strings.grdp
+++ b/chrome/app/profiles_strings.grdp
@@ -678,7 +678,7 @@
       You can try again or contact your administrator for help
     </message>
     <message name="IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE" desc="Subtitle the value proposition dialog for creating an enterprise profile.">
-      Sign in to get your bookmarks, passwords, and more on all your devices
+      Sign in to get your passwords and more on all your devices
     </message>
     <message name="IDS_ENTERPRISE_WELCOME_SEPARATE_BROWSING_WORK_TITLE" desc="Title of the dialog that asks the user to either keep their browsing data in the work profile they will create or keep it separate.">
       Keep existing browsing data separate from your work profile?
diff --git a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1
index eaf2ed7..e40b1a76 100644
--- a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1
+++ b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1
@@ -1 +1 @@
-fc022e6c6e688cc193ee06d6ba5c87c844568847
\ No newline at end of file
+70fae124c5d498097004247611fcd1ad31c8bfe7
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb
index c61991f..22d6e06 100644
--- a/chrome/app/resources/chromium_strings_ar.xtb
+++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -110,6 +110,7 @@
 <translation id="2483889755041906834">‏في Chromium</translation>
 <translation id="2485422356828889247">إزالة التثبيت</translation>
 <translation id="2513154137948333830"><ph name="INSTALL_SUCCESS" />: يجب إعادة التشغيل.</translation>
+<translation id="2522009821193247726">‏للمتابعة، يجب تسجيل الدخول إلى Chromium باستخدام <ph name="EMAIL" />. ويضمن ذلك الامتثال لسياسات مؤسستك.</translation>
 <translation id="2542968102051442371">اختيار نص باستخدام ميزة "بحث بالصور"</translation>
 <translation id="2554739539410784893">‏يحاول Chromium استبدال كلمات المرور الحالية. للسماح بذلك، يُرجى كتابة كلمة المرور المستخدَمة في Windows.</translation>
 <translation id="2560420686485554789">‏يحتاج Chromium إلى الوصول إلى مساحة التخزين لتنزيل الملفات.</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb
index 9d8a72d3..ec8239f 100644
--- a/chrome/app/resources/chromium_strings_bg.xtb
+++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -112,6 +112,7 @@
 <translation id="2483889755041906834">В Chromium</translation>
 <translation id="2485422356828889247">Деинсталиране</translation>
 <translation id="2513154137948333830">Изисква се рестартиране: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">За да продължите, трябва да влезете в профила си в Chromium чрез <ph name="EMAIL" />. Това гарантира спазване на правилата на организацията ви.</translation>
 <translation id="2542968102051442371">Изберете текст с търсенето на изображения</translation>
 <translation id="2554739539410784893">Chromium опитва да замени съществуващите пароли. За да разрешите това, въведете паролата си за Windows.</translation>
 <translation id="2560420686485554789">Chromium се нуждае от достъп до хранилището, за да изтегля файлове</translation>
diff --git a/chrome/app/resources/chromium_strings_cy.xtb b/chrome/app/resources/chromium_strings_cy.xtb
index 503467ee..fcf80bd 100644
--- a/chrome/app/resources/chromium_strings_cy.xtb
+++ b/chrome/app/resources/chromium_strings_cy.xtb
@@ -114,6 +114,7 @@
 <translation id="2483889755041906834">Yn Chromium</translation>
 <translation id="2485422356828889247">Dadosod</translation>
 <translation id="2513154137948333830">Mae angen ailgychwyn: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">I barhau, bydd angen i chi fewngofnodi i Chromium gyda <ph name="EMAIL" />. Mae hyn yn sicrhau cydymffurfiaeth â pholisïau eich sefydliad.</translation>
 <translation id="2542968102051442371">Dewis testun gyda Chwilio Lluniau</translation>
 <translation id="2554739539410784893">Mae Chromium yn ceisio disodli cyfrineiriau presennol. Teipiwch eich cyfrinair Windows i ganiatáu hyn.</translation>
 <translation id="2560420686485554789">Mae angen mynediad storfa ar Chromium i lawrlwytho ffeiliau</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index 5d6202c..45f89d84 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -111,6 +111,7 @@
 <translation id="2483889755041906834">In Chromium</translation>
 <translation id="2485422356828889247">Deinstallieren</translation>
 <translation id="2513154137948333830">Neustart erforderlich: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Du musst dich mit <ph name="EMAIL" /> in Chromium anmelden, um fortzufahren. So wird die Einhaltung der Richtlinien deiner Organisation sichergestellt.</translation>
 <translation id="2542968102051442371">Text mit der Bildersuche auswählen</translation>
 <translation id="2554739539410784893">Chromium versucht, vorhandene Passwörter zu ersetzen. Gib dein Windows-Passwort ein, um dies zuzulassen.</translation>
 <translation id="2560420686485554789">Chromium benötigt Speicherzugriff, um Dateien herunterladen zu können</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb
index acc86903..1f958718 100644
--- a/chrome/app/resources/chromium_strings_el.xtb
+++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -112,6 +112,7 @@
 <translation id="2483889755041906834">Στο Chromium</translation>
 <translation id="2485422356828889247">Απεγκατάσταση</translation>
 <translation id="2513154137948333830">Απαιτείται επανεκκίνηση: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Για να συνεχίσετε, θα πρέπει να συνδεθείτε στο Chromium με τον λογαριασμό <ph name="EMAIL" />. Με αυτόν τον τρόπο, διασφαλίζεται η συμμόρφωση με τις πολιτικές του οργανισμού σας.</translation>
 <translation id="2542968102051442371">Επιλογή κειμένου με την Αναζήτηση με εικόνες</translation>
 <translation id="2554739539410784893">Το Chromium προσπαθεί να αντικαταστήσει τους υπάρχοντες κωδικούς πρόσβασης. Πληκτρολογήστε τον κωδικό πρόσβασης των Windows για να επιτρέψετε αυτή την ενέργεια.</translation>
 <translation id="2560420686485554789">Το Chromium χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για τη λήψη αρχείων</translation>
diff --git a/chrome/app/resources/chromium_strings_hy.xtb b/chrome/app/resources/chromium_strings_hy.xtb
index 023db1c..802d0bf3 100644
--- a/chrome/app/resources/chromium_strings_hy.xtb
+++ b/chrome/app/resources/chromium_strings_hy.xtb
@@ -114,6 +114,7 @@
 <translation id="2483889755041906834">Chromium-ի մեջ</translation>
 <translation id="2485422356828889247">Ապատեղադրել</translation>
 <translation id="2513154137948333830">Հարկավոր է վերաբեռնել. <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Շարունակելու համար դուք պետք է մուտք գործեք <ph name="EMAIL" /> հաշիվ Chromium-ում, որպեսզի պահպանվեն ձեր կազմակերպության կանոնները։</translation>
 <translation id="2542968102051442371">Ընտրեք տեքստ «Որոնում պատկերով» գործառույթի միջոցով</translation>
 <translation id="2554739539410784893">Chromium-ը փորձում է փոխարինել գոյություն ունեցող գաղտնաբառերը։ Թույլատրելու համար մուտքագրեք Windows-ի ձեր գաղտնաբառը։</translation>
 <translation id="2560420686485554789">Ֆայլեր ներբեռնելու համար Chromium-ին անհրաժեշտ է պահեստի օգտագործման թույլտվություն</translation>
diff --git a/chrome/app/resources/chromium_strings_is.xtb b/chrome/app/resources/chromium_strings_is.xtb
index 32cb399..3fad3a6 100644
--- a/chrome/app/resources/chromium_strings_is.xtb
+++ b/chrome/app/resources/chromium_strings_is.xtb
@@ -114,6 +114,7 @@
 <translation id="2483889755041906834">í Chromium</translation>
 <translation id="2485422356828889247">Fjarlægja</translation>
 <translation id="2513154137948333830">Endurræsingar er krafist: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Til að halda áfram þarftu að skrá þig inn í Chromium með <ph name="EMAIL" />. Það tryggir fylgni við reglur fyrirtækisins/stofnunarinnar þinnar.</translation>
 <translation id="2542968102051442371">Veldu texta fyrir myndaleit</translation>
 <translation id="2554739539410784893">Chromium er að reyna að skipta núverandi aðgangsorðum út. Sláðu inn Windows-aðgangsorðið þitt til að leyfa það.</translation>
 <translation id="2560420686485554789">Chromium þarf aðgang að geymslu til að geta sótt skrár</translation>
diff --git a/chrome/app/resources/chromium_strings_ko.xtb b/chrome/app/resources/chromium_strings_ko.xtb
index c9cca42d..054f54b 100644
--- a/chrome/app/resources/chromium_strings_ko.xtb
+++ b/chrome/app/resources/chromium_strings_ko.xtb
@@ -113,6 +113,7 @@
 <translation id="2483889755041906834">Chromium에서</translation>
 <translation id="2485422356828889247">제거</translation>
 <translation id="2513154137948333830">재부팅 필요: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">계속하려면 <ph name="EMAIL" /> 계정으로 Chromium에 로그인해야 합니다. 이렇게 하면 조직의 정책을 준수할 수 있습니다.</translation>
 <translation id="2542968102051442371">이미지 검색으로 텍스트 선택</translation>
 <translation id="2554739539410784893">Chromium에서 기존 비밀번호를 바꾸려고 합니다. 허용하려면 Windows 비밀번호를 입력하세요.</translation>
 <translation id="2560420686485554789">파일을 다운로드하려면 Chromium에 저장소 액세스 권한이 있어야 합니다</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb
index 58e0f61b..5028f0a5 100644
--- a/chrome/app/resources/chromium_strings_sr-Latn.xtb
+++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -114,6 +114,7 @@
 <translation id="2483889755041906834">U Chromium-u</translation>
 <translation id="2485422356828889247">Deinstaliraj</translation>
 <translation id="2513154137948333830">Potrebno je restartovanje: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Da biste nastavili, morate da se prijavite u Chromium pomoću naloga <ph name="EMAIL" />. Ovo obezbeđuje usklađenost sa smernicama organizacije.</translation>
 <translation id="2542968102051442371">Izaberite tekst pomoću pretrage slika</translation>
 <translation id="2554739539410784893">Chromium pokušava da zameni postojeće lozinke. Unesite lozinku za Windows da biste to omogućili.</translation>
 <translation id="2560420686485554789">Chromium traži pristup memorijskom prostoru da bi preuzimao datoteke</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index f55c00be5..a597a7ae 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -114,6 +114,7 @@
 <translation id="2483889755041906834">У Chromium-у</translation>
 <translation id="2485422356828889247">Деинсталирај</translation>
 <translation id="2513154137948333830">Потребно је рестартовање: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Да бисте наставили, морате да се пријавите у Chromium помоћу налога <ph name="EMAIL" />. Ово обезбеђује усклађеност са смерницама организације.</translation>
 <translation id="2542968102051442371">Изаберите текст помоћу претраге слика</translation>
 <translation id="2554739539410784893">Chromium покушава да замени постојеће лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation>
 <translation id="2560420686485554789">Chromium тражи приступ меморијском простору да би преузимао датотеке</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb
index 16accad..1d8dd95fa 100644
--- a/chrome/app/resources/chromium_strings_sv.xtb
+++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -114,6 +114,7 @@
 <translation id="2483889755041906834">I Chromium</translation>
 <translation id="2485422356828889247">Avinstallera</translation>
 <translation id="2513154137948333830">Omstart krävs: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">Du måste logga in i Chromium med <ph name="EMAIL" /> om du vill fortsätta. Detta säkerställer att organisationens policyer följs.</translation>
 <translation id="2542968102051442371">Välj text med Bildsökning</translation>
 <translation id="2554739539410784893">Skriv ditt Windows-lösenord om du vill tillåta att de befintliga lösenorden i Chromium ersätts.</translation>
 <translation id="2560420686485554789">Du behöver ge Chromium åtkomst till lagringsutrymmet om det ska gå att ladda ned filer</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb
index a206b85..6a6230c 100644
--- a/chrome/app/resources/chromium_strings_te.xtb
+++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -112,6 +112,7 @@
 <translation id="2483889755041906834">Chromiumలో</translation>
 <translation id="2485422356828889247">అన్ఇన్‌స్టాల్ చేయి</translation>
 <translation id="2513154137948333830">రీబూట్ అవసరం: <ph name="INSTALL_SUCCESS" /></translation>
+<translation id="2522009821193247726">కొనసాగించడానికి, మీరు <ph name="EMAIL" />‌తో Chromiumకు సైన్ ఇన్ చేయాలి. మీ సంస్థ పాలసీలకు అనుగుణంగా ఉండేలా ఇది చేస్తుంది.</translation>
 <translation id="2542968102051442371">ఇమేజ్ సెర్చ్‌ను ఉపయోగించి టెక్స్ట్‌ను ఎంచుకోండి</translation>
 <translation id="2554739539410784893">Chromium ఇప్పటికే ఉన్న పాస్‌వర్డ్‌లను రీప్లేస్ చేయడానికి ట్రై చేస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్‌వర్డ్‌ను టైప్ చేయండి.</translation>
 <translation id="2560420686485554789">ఫైళ్లను డౌన్‌లోడ్ చేయడానికి Chromiumకు స్టోరేజ్‌ యాక్సెస్ అవసరం</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index d83ebe4..470c5b95f 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -4611,6 +4611,7 @@
 <translation id="4220648711404560261">حدث خطأ أثناء التفعيل.</translation>
 <translation id="4222917615373664617">‏تم تفعيل ميزة تتبُّع السعر. يبلغ السعر ‎<ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">تم رفض طلب الوصول إلى الميكروفون.</translation>
+<translation id="4224541845943007092">قراءة إدخالات لوحة المفاتيح وحفظها من شريط العناوين</translation>
 <translation id="4225397296022057997">على جميع المواقع</translation>
 <translation id="4228071595943929139">استخدام عنوان البريد الإلكتروني لمؤسستك</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{هذه الإضافة غير مسموح بها}zero{هذه الإضافات غير مسموح بها}two{هاتان الإضافتان غير مسموح بهما}few{بعض الإضافات غير مسموح بها}many{بعض الإضافات غير مسموح بها}other{بعض الإضافات غير مسموح بها}}</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 327a486b..c71cbad 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -4618,6 +4618,7 @@
 <translation id="4220648711404560261">При активирането възникна грешка.</translation>
 <translation id="4222917615373664617">Проследяването на цената е активирано. Цената е <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Достъпът до микрофона не е разрешен</translation>
+<translation id="4224541845943007092">Четене и запазване на въведен с клавиатурата текст от адресната лента</translation>
 <translation id="4225397296022057997">На всички сайтове</translation>
 <translation id="4228071595943929139">Използване на имейл адреса на организацията ви</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Това разширение не е разрешено}other{Някои разширения не са разрешени}}</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index b1a9feda..9e5d9bc1e 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -4624,6 +4624,7 @@
 <translation id="4220648711404560261">Bu gwall wrth weithredu.</translation>
 <translation id="4222917615373664617">Mae olrhain prisiau wedi'i alluogi. Y pris yw <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Ni chaniateir meicroffon</translation>
+<translation id="4224541845943007092">Darllen a chadw mewnbwn bysellfwrdd o'r bar cyfeiriad</translation>
 <translation id="4225397296022057997">Ar bob gwefan</translation>
 <translation id="4228071595943929139">Defnyddiwch gyfeiriad e-bost eich sefydliad</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Ni chaniateir yr estyniad hwn}zero{Ni chaniateir rhai estyniadau}two{Ni chaniateir rhai estyniadau}few{Ni chaniateir rhai estyniadau}many{Ni chaniateir rhai estyniadau}other{Ni chaniateir rhai estyniadau}}</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 87f8e9f..f1b02e4 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -540,6 +540,7 @@
 <translation id="1368603372088757436">Linux understøttes ikke på din <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="1370249617397887619">Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto</translation>
 <translation id="1370384480654163477">Se og redigere filer fra sidste gang, du besøgte dette website:</translation>
+<translation id="1372259917802609049">Der opstod en fejl under forsøget på at slette begrænsningen</translation>
 <translation id="1372841398847029212">Synkroniser med din konto</translation>
 <translation id="1373176046406139583">Din enheds synlighed styrer, hvem der kan dele indhold med dig, når din skærm er låst op. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="1374844444528092021">Det certifikat, som netværket "<ph name="NETWORK_NAME" />" kræver, er enten ikke installeret eller ikke længere gyldigt.  Få fat i et nyt certifikat, og prøv at oprette forbindelse igen.</translation>
@@ -1490,6 +1491,7 @@
     Dette påvirker ikke apps eller indhold på andre enheder.</translation>
 <translation id="2018189721942291407">Er du ikke sikker på, om du bør tilmelde dig?</translation>
 <translation id="2018352199541442911">Vi beklager, men din eksterne lagerenhed understøttes ikke på nuværende tidspunkt.</translation>
+<translation id="2019213483156307334">Der opstod en fejl under forsøget på at tilføje begrænsningen</translation>
 <translation id="2019718679933488176">&amp;Åbn lyd på ny fane</translation>
 <translation id="2020183425253392403">Vis indstillinger for netværksadresser</translation>
 <translation id="2020225359413970060">Scan fil</translation>
@@ -3156,6 +3158,7 @@
 <translation id="3188257591659621405">Mine filer</translation>
 <translation id="3188465121994729530">Glidende gennemsnit</translation>
 <translation id="3189187154924005138">Stor markør</translation>
+<translation id="3189533916970342007">{PASSWORD_COUNT,plural, =1{1 adgangskode og andre elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}one{{PASSWORD_COUNT} adgangskode og andre elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}other{{PASSWORD_COUNT} adgangskoder og andre elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}}</translation>
 <translation id="3190558889382726167">Adgangskoden er blevet gemt</translation>
 <translation id="3192586965067888278">Beskriv problemet i detaljer. Feedbacken sendes til Google med henblik på menneskelig gennemgang og kan anvendes til at forbedre eller udvikle Googles produkter og tjenester.</translation>
 <translation id="3192947282887913208">Lydfiler</translation>
@@ -3626,6 +3629,7 @@
 <translation id="3537881477201137177">Du kan ændre dette senere i indstillingerne</translation>
 <translation id="3538066758857505094">Der opstod en fejl under installationen af Linux. Prøv igen.</translation>
 <translation id="3539537154248488260">Slå Inspiration til/fra</translation>
+<translation id="3539791442352537591">Der opstod en fejl under forsøget på at gemme ændringen af tilstanden for pålidelighed</translation>
 <translation id="3540173484406326944">Intet netværk via <ph name="HOST_DEVICE_NAME" /></translation>
 <translation id="354060433403403521">Vekselstrømsadapter</translation>
 <translation id="354068948465830244">Udvidelsen kan læse og ændre websitedata</translation>
@@ -4814,6 +4818,7 @@
 <translation id="4361745360460842907">Åbn som fane</translation>
 <translation id="4363262124589131906">Nye filer i Mit drev vil ikke blive synkroniseret med denne Chromebook automatisk</translation>
 <translation id="4364327530094270451">Melon</translation>
+<translation id="4364417397164696363">{ITEM_COUNT,plural, =1{1 element gemmes kun på denne enhed. Hvis du vil bruge det på dine andre enheder, skal du gemme det på din Google-konto.}one{{ITEM_COUNT} element gemmes kun på denne enhed. Hvis du vil bruge det på dine andre enheder, skal du gemme det på din Google-konto.}other{{ITEM_COUNT} elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}}</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> deler et vindue.</translation>
 <translation id="4364830672918311045">Vis notifikationer</translation>
 <translation id="4367971618859387374">Vist navn</translation>
@@ -5736,6 +5741,7 @@
 <translation id="5029287942302939687">Din adgangskode er indstillet</translation>
 <translation id="5029873138381728058">Det var ikke muligt at tjekke VM'er</translation>
 <translation id="503155457707535043">De valgte apps downloades</translation>
+<translation id="5031769842769721381">{SELECTED_ITEMS,plural, =0{Adresser}=1{Adresser ({SELECTED_ITEMS})}one{Addresses ({SELECTED_ITEMS})}other{Adresser ({SELECTED_ITEMS})}}</translation>
 <translation id="5032430150487044192">QR-koden kan ikke oprettes</translation>
 <translation id="5033137252639132982">Har ikke tilladelse til at bruge bevægelsessensorer</translation>
 <translation id="5035846135112863536">Vælg "Flere oplysninger" nedenfor for at få flere oplysninger fra <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" />.</translation>
@@ -6485,6 +6491,7 @@
 <translation id="5568069709869097550">Kan ikke logge ind</translation>
 <translation id="5568525251731145240">Vil du slette websitedata og tilladelser for <ph name="SITE_NAME" />, alle websites under det samt installerede apps?</translation>
 <translation id="5568602038816065197">Websites kan bruge avancerede funktioner fra enhver printer, der er tilgængelig for din enhed, uden at skulle gennemgå standardmeddelelsen for Udskriv</translation>
+<translation id="5570149859473005144">{SELECTED_ITEMS,plural, =0{Adgangskoder}=1{Adgangskoder ({SELECTED_ITEMS})}one{Passwords ({SELECTED_ITEMS})}other{Adgangskoder ({SELECTED_ITEMS})}}</translation>
 <translation id="5571066253365925590">Bluetooth er aktiveret</translation>
 <translation id="5571092938913434726">Global mediestyring</translation>
 <translation id="5571832155627049070">Tilpas din profil</translation>
@@ -6989,6 +6996,7 @@
 <translation id="5941153596444580863">Tilføj person...</translation>
 <translation id="5941343993301164315">Log ind på <ph name="TOKEN_NAME" />.</translation>
 <translation id="5941711191222866238">Minimer</translation>
+<translation id="5941854976565320351">{PASSWORD_COUNT,plural, =1{1 adgangskode gemmes kun på denne enhed. Hvis du vil bruge den på dine andre enheder, skal du gemme den på din Google-konto.}one{{PASSWORD_COUNT} adgangskode gemmes kun på denne enhed. Hvis du vil bruge den på dine andre enheder, skal du gemme den på din Google-konto.}other{{PASSWORD_COUNT} adgangskoder gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}}</translation>
 <translation id="594221546068848596">Søg på siden med <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="5942779427914696408">Enhedens synlighed</translation>
 <translation id="5943127421590245687">Verificering er gennemført. Angiv din gamle <ph name="DEVICE_TYPE" /> adgangskode for at låse op for og gendanne dine lokale data.</translation>
@@ -8508,6 +8516,7 @@
 <translation id="7036706669646341689">Du bør have mindst <ph name="DISK_SIZE" /> plads til Linux. Du kan frigøre plads ved at slette filer fra enheden.</translation>
 <translation id="7037157058268992880">Har du glemt pinkoden?</translation>
 <translation id="7037509989619051237">Tekst til eksempel på oplæsning</translation>
+<translation id="7037633074390821254">DNS- eller CIDR-begrænsning</translation>
 <translation id="7038632520572155338">Kontaktadgang</translation>
 <translation id="7038710352229712897">Tilføj en anden Google-konto for <ph name="USER_NAME" /></translation>
 <translation id="7039326228527141150">Få adgang til USB-enheder fra <ph name="VENDOR_NAME" /></translation>
@@ -8635,6 +8644,7 @@
 <translation id="7134951043985383439">En skadelig fil er blevet downloadet</translation>
 <translation id="7135729336746831607">Vil du aktivere Bluetooth?</translation>
 <translation id="7136694880210472378">Gør til standard</translation>
+<translation id="7137277889990479760">Fortsæt som <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Denne handling sletter <ph name="TOTAL_USAGE" /> data, der er gemt af websites og installerede apps</translation>
 <translation id="7138678301420049075">Andet</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> bruger din mikrofon</translation>
@@ -8756,6 +8766,7 @@
 <translation id="7231260028442989757">Se, afvis og reager på notifikationer fra din telefon</translation>
 <translation id="7231347196745816203">Bruge din telefon til at låse din <ph name="DEVICE_TYPE" /> op.</translation>
 <translation id="7232750842195536390">Omdøbningen mislykkedes</translation>
+<translation id="7232962679391151113">{BOOKMARK_COUNT,plural, =1{1 bogmærke og andre elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}one{{BOOKMARK_COUNT} bogmærke og andre elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}other{{BOOKMARK_COUNT} bogmærker og andre elementer gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}}</translation>
 <translation id="723343421145275488">Søg efter billeder med <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="7234010996000898150">Annullerer Linux-gendannelse</translation>
 <translation id="7235305658956131898">Android-app, der er installeret af din enhedsadministrator.</translation>
@@ -8882,6 +8893,7 @@
 <translation id="7327989755579928735"><ph name="MANAGER" /> har deaktiveret ADB-fejlretning. Når du har genstartet din <ph name="DEVICE_TYPE" />, vil du ikke kunne sideindlæse apps.</translation>
 <translation id="7328119182036084494">Gemt i <ph name="WEB_DRIVE" /></translation>
 <translation id="7328162502911382168">(<ph name="COUNT" />)</translation>
+<translation id="732845903678043302">{BOOKMARK_COUNT,plural, =1{1 bogmærke gemmes kun på denne enhed. Hvis du vil bruge det på dine andre enheder, skal du gemme det på din Google-konto.}one{{BOOKMARK_COUNT} bogmærke gemmes kun på denne enhed. Hvis du vil bruge det på dine andre enheder, skal du gemme det på din Google-konto.}other{{BOOKMARK_COUNT} bogmærker gemmes kun på denne enhed. Hvis du vil bruge dem på dine andre enheder, skal du gemme dem på din Google-konto.}}</translation>
 <translation id="7328867076235380839">Ugyldig kombination</translation>
 <translation id="7329154610228416156">Login mislykkedes, da det er konfigureret til at anvende en webadresse, der ikke er sikker (<ph name="BLOCKED_URL" />). Kontakt din administrator.</translation>
 <translation id="7330533963640151632">Indstillinger for <ph name="FEATURE_NAME" /> på enheden, der tilhører <ph name="USER_NAME" />. Deles under kontoen <ph name="USER_EMAIL" />.</translation>
@@ -9213,6 +9225,7 @@
 <translation id="7561196759112975576">Altid</translation>
 <translation id="7561759921596375678">Slå lyden til</translation>
 <translation id="7561982940498449837">Luk menu</translation>
+<translation id="7563970324931922582">[placeholder text]</translation>
 <translation id="756445078718366910">Åbn browservindue</translation>
 <translation id="7564847347806291057">Afslut proces</translation>
 <translation id="756503097602602175">I <ph name="LINK_BEGIN" />Indstillinger<ph name="LINK_END" /> kan du administrere de Google-konti, du er logget ind på. De tilladelser, du har givet til websites og apps, gælder muligvis for alle konti. Hvis du ikke vil have, at websites eller apps kan få adgang til dine kontooplysninger, kan du logge ind på <ph name="DEVICE_TYPE" /> som gæst eller gå på nettet i et <ph name="LINK_2_BEGIN" />inkognitovindue<ph name="LINK_2_END" />.</translation>
@@ -10424,6 +10437,7 @@
 <translation id="8398877366907290961">Fortsæt alligevel</translation>
 <translation id="8399282673057829204">Se adgangskode</translation>
 <translation id="839949601275221554">Der opstod en fejl på enheden. Genstart din enhed, og prøv igen.</translation>
+<translation id="8399889560226245071">{SELECTED_ITEMS,plural, =0{Bogmærker}=1{Bogmærker ({SELECTED_ITEMS})}one{Bookmarks ({SELECTED_ITEMS})}other{Bogmærker ({SELECTED_ITEMS})}}</translation>
 <translation id="8401432541486058167">Brug den pinkode, der hører til dit chipkort.</translation>
 <translation id="8403807918453631441"><ph name="BRAND" /> kan tjekke dine adgangskoder, når du gemmer dem</translation>
 <translation id="8405046151008197676">Få højdepunkter fra den seneste opdatering</translation>
@@ -10904,6 +10918,7 @@
 <translation id="8737966899544698733">Lokationsnøjagtighed (kun Android)</translation>
 <translation id="8738418093147087440">Søg efter lande, sprog eller navne på indtastningsmetode</translation>
 <translation id="8740086188450289493">Brug adgangskoden til din Google-konto</translation>
+<translation id="874023689350909633">Prøv det</translation>
 <translation id="8740247629089392745">Nu er denne Chromebook klar til <ph name="SUPERVISED_USER_NAME" />. Konfigurationen er næsten gennemført, og det er snart tid til at gå på opdagelse.</translation>
 <translation id="8740672167979365981">ChromeOS Flex skal opdateres</translation>
 <translation id="8741944563400125534">Konfigurationsvejledning til Kontaktadgang</translation>
@@ -11680,6 +11695,7 @@
 <translation id="97905529126098460">Dette vindue lukkes, når annulleringen er fuldført.</translation>
 <translation id="980731642137034229">Knappen Handlingsmenu</translation>
 <translation id="981121421437150478">Offline</translation>
+<translation id="982083952953998237">Tilføj begrænsninger</translation>
 <translation id="98235653036850093">Hej <ph name="PROFILE_NAME" /></translation>
 <translation id="983192555821071799">Luk alle faner</translation>
 <translation id="983531994960412650"><ph name="WINDOW_TITLE" /> – kamera- og mikrofonoptagelse</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 7a496c6..e9c03e2 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -4603,6 +4603,7 @@
 <translation id="4220648711404560261">Bei der Aktivierung ist ein Fehler aufgetreten.</translation>
 <translation id="4222917615373664617">Preis-Tracking ist aktiviert. Aktueller Preis: <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Mikrofonnutzung nicht zulässig</translation>
+<translation id="4224541845943007092">Tastatureingaben aus der Adressleiste lesen und speichern</translation>
 <translation id="4225397296022057997">Auf allen Websites</translation>
 <translation id="4228071595943929139">E-Mail-Adresse der Organisation verwenden</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Diese Erweiterung ist nicht zulässig}other{Einige Erweiterungen sind nicht zulässig}}</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 9edfc43..7621164 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -4621,6 +4621,7 @@
 <translation id="4220648711404560261">Παρουσιάστηκε σφάλμα κατά την ενεργοποίηση.</translation>
 <translation id="4222917615373664617">Η παρακολούθηση τιμής είναι ενεργοποιημένη. Η τιμή είναι <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Η πρόσβαση στο μικρόφωνο δεν επιτράπηκε</translation>
+<translation id="4224541845943007092">Ανάγνωση και αποθήκευση εισόδου πληκτρολογίου από τη γραμμή διευθύνσεων</translation>
 <translation id="4225397296022057997">Σε όλους τους ιστοτόπους</translation>
 <translation id="4228071595943929139">Χρησιμοποιήστε τη διεύθυνση ηλεκτρονικού ταχυδρομείου του οργανισμού σας</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Δεν επιτρέπεται αυτή η επέκταση}other{Δεν επιτρέπονται ορισμένες επεκτάσεις}}</translation>
@@ -8633,6 +8634,7 @@
 <translation id="7134951043985383439">Έγινε λήψη επικίνδυνου αρχείου</translation>
 <translation id="7135729336746831607">Ενεργοποίηση Bluetooth;</translation>
 <translation id="7136694880210472378">Ορισμός ως προεπιλογής</translation>
+<translation id="7137277889990479760">Συνέχεια ως <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Με αυτή την ενέργεια θα διαγραφούν <ph name="TOTAL_USAGE" /> δεδομένων που έχουν αποθηκευτεί από ιστοτόπους και εγκατεστημένες εφαρμογές</translation>
 <translation id="7138678301420049075">Άλλο</translation>
 <translation id="7139627972753429585">Η εφαρμογή <ph name="APP_NAME" /> χρησιμοποιεί το μικρόφωνό σας</translation>
@@ -9211,6 +9213,7 @@
 <translation id="7561196759112975576">Πάντα</translation>
 <translation id="7561759921596375678">Ενεργοποίηση έντασης ήχου</translation>
 <translation id="7561982940498449837">Κλείσιμο μενού</translation>
+<translation id="7563970324931922582">[placeholder text]</translation>
 <translation id="756445078718366910">Άνοιγμα παραθύρου προγράμματος περιήγησης</translation>
 <translation id="7564847347806291057">Τερματισμός διαδικασίας</translation>
 <translation id="756503097602602175">Μπορείτε να διαχειριστείτε τους συνδεδεμένους Λογαριασμούς Google από τις <ph name="LINK_BEGIN" />Ρυθμίσεις<ph name="LINK_END" />. Οι άδειες που έχετε εκχωρήσει σε ιστοτόπους και εφαρμογές ενδέχεται να ισχύουν για όλους τους λογαριασμούς. Εάν δεν θέλετε οι ιστότοποι ή οι εφαρμογές να έχουν πρόσβαση στις πληροφορίες του λογαριασμού σας, μπορείτε να συνδεθείτε στη συσκευή <ph name="DEVICE_TYPE" /> ως επισκέπτης ή να περιηγηθείτε στον ιστό μέσω ενός <ph name="LINK_2_BEGIN" />παραθύρου για ανώνυμη περιήγηση<ph name="LINK_2_END" />.</translation>
@@ -10903,6 +10906,7 @@
 <translation id="8737966899544698733">Ακρίβεια τοποθεσίας (μόνο Android)</translation>
 <translation id="8738418093147087440">Αναζήτηση κατά χώρες, γλώσσα ή ονόματα εισόδου</translation>
 <translation id="8740086188450289493">Χρήση κωδικού πρόσβασης Λογαριασμού Google</translation>
+<translation id="874023689350909633">Δοκιμάστε το</translation>
 <translation id="8740247629089392745">Μπορείτε να δώσετε αυτό το Chromebook στον χρήστη <ph name="SUPERVISED_USER_NAME" />. Η ρύθμιση έχει σχεδόν ολοκληρωθεί, είναι ώρα για εξερεύνηση.</translation>
 <translation id="8740672167979365981">Απαιτείται ενημέρωση ChromeOS Flex</translation>
 <translation id="8741944563400125534">Οδηγός ρύθμισης της πρόσβασης με διακόπτη</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index c378fa1..0bf98d8 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -8617,6 +8617,7 @@
 <translation id="7134951043985383439">Se ha descargado un archivo peligroso</translation>
 <translation id="7135729336746831607">¿Activar Bluetooth?</translation>
 <translation id="7136694880210472378">Elegir como predeterminado</translation>
+<translation id="7137277889990479760">Continuar como <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Esta acción eliminará <ph name="TOTAL_USAGE" /> de datos almacenados por sitios y aplicaciones instaladas</translation>
 <translation id="7138678301420049075">Otro</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> está usando tu micrófono</translation>
@@ -9195,6 +9196,7 @@
 <translation id="7561196759112975576">Siempre</translation>
 <translation id="7561759921596375678">Activar volumen</translation>
 <translation id="7561982940498449837">Cerrar menú</translation>
+<translation id="7563970324931922582">[texto genérico]</translation>
 <translation id="756445078718366910">Abrir ventana del navegador</translation>
 <translation id="7564847347806291057">Finalizar proceso</translation>
 <translation id="756503097602602175">Puedes gestionar las cuentas de Google con las que se haya iniciado sesión en <ph name="LINK_BEGIN" />Configuración<ph name="LINK_END" />. Es posible que los permisos que hayas dado a sitios web y aplicaciones se apliquen a todas las cuentas. Si no quieres que los sitios ni las aplicaciones accedan a la información de tu cuenta, puedes iniciar sesión en tu <ph name="DEVICE_TYPE" /> como invitado o navegar por Internet en una <ph name="LINK_2_BEGIN" />ventana de Incógnito<ph name="LINK_2_END" />.</translation>
@@ -10887,6 +10889,7 @@
 <translation id="8737966899544698733">Precisión de la ubicación (solo en Android)</translation>
 <translation id="8738418093147087440">Buscar por países, idiomas o nombres de entrada</translation>
 <translation id="8740086188450289493">Usar contraseña de la cuenta de Google</translation>
+<translation id="874023689350909633">Pruébalo</translation>
 <translation id="8740247629089392745">Puedes darle este Chromebook a <ph name="SUPERVISED_USER_NAME" />. La configuración ya casi está lista, así que ha llegado la hora de explorar.</translation>
 <translation id="8740672167979365981">Actualización de ChromeOS necesaria</translation>
 <translation id="8741944563400125534">Guía de configuración de Accesibilidad con interruptores</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index db5a709..12e8967 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -8635,6 +8635,7 @@
 <translation id="7134951043985383439">Na-download ang mapanganib na file</translation>
 <translation id="7135729336746831607">I-on ang Bluetooth?</translation>
 <translation id="7136694880210472378">Gawing default</translation>
+<translation id="7137277889990479760">Magpatuloy bilang <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Ide-delete nito ang <ph name="TOTAL_USAGE" /> na data na na-store ng mga site at naka-install na app</translation>
 <translation id="7138678301420049075">Iba pa</translation>
 <translation id="7139627972753429585">Ginagamit ng <ph name="APP_NAME" /> ang iyong mikropono</translation>
@@ -9213,6 +9214,7 @@
 <translation id="7561196759112975576">Palagi</translation>
 <translation id="7561759921596375678">I-on ang volume</translation>
 <translation id="7561982940498449837">Isara ang menu</translation>
+<translation id="7563970324931922582">[placeholder text]</translation>
 <translation id="756445078718366910">Magbukas ng Window ng Browser</translation>
 <translation id="7564847347806291057">Tapusin ang proseso</translation>
 <translation id="756503097602602175">Puwede mong pamahalaan ang mga naka-sign in na Google Account mula sa <ph name="LINK_BEGIN" />Mga Setting<ph name="LINK_END" />. Posibleng malapat sa lahat ng account ang mga pahintulot na ibinigay mo sa mga website at app. Kung ayaw mong ma-access ng mga site o app ang impormasyon ng iyong account, puwede kang mag-sign in sa iyong <ph name="DEVICE_TYPE" /> bilang bisita o mag-browse sa web sa isang <ph name="LINK_2_BEGIN" />Incognito window<ph name="LINK_2_END" />.</translation>
@@ -10906,6 +10908,7 @@
 <translation id="8737966899544698733">Katumpakan ng Lokasyon (Android lang)</translation>
 <translation id="8738418093147087440">Maghanap ayon sa mga bansa, wika, o mga pangalan ng input</translation>
 <translation id="8740086188450289493">Gamitin ang password ng Google Account</translation>
+<translation id="874023689350909633">Subukan Ito</translation>
 <translation id="8740247629089392745">Puwede mong ibigay ang Chromebook na ito kay <ph name="SUPERVISED_USER_NAME" />. Malapit nang matapos ang pag-set up, puwede nang mag-explore pagkatapos nito.</translation>
 <translation id="8740672167979365981">Kinakailangang i-update ang ChromeOS Flex</translation>
 <translation id="8741944563400125534">Gabay sa pag-set up ng Switch Access</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index ab8d6ee73..eaab42d 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -4606,6 +4606,7 @@
 <translation id="4220648711404560261">Ակտիվացման ժամանակ սխալ առաջացավ։</translation>
 <translation id="4222917615373664617">Գնի հետագծումը միացված է։ Գինը <ph name="CURRENT_PRICE" /> է։</translation>
 <translation id="4223404254440398437">Խոսափողի օգտագործումն արգելված է</translation>
+<translation id="4224541845943007092">Կարդալ և պահել ստեղնաշարի մուտքագրման տվյալները հասցեագոտուց</translation>
 <translation id="4225397296022057997">Բոլոր կայքերում</translation>
 <translation id="4228071595943929139">Օգտագործել կազմակերպության էլ․ հասցեն</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Այս ընդլայնումը չի թույլատրվում օգտագործել}one{Այս ընդլայնումը չի թույլատրվում օգտագործել}other{Այս ընդլայնումները չի թույլատրվում օգտագործել}}</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 807975cd..774bde5 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -4622,6 +4622,7 @@
 <translation id="4220648711404560261">Villa kom upp við virkjun.</translation>
 <translation id="4222917615373664617">Kveikt er á verðvöktun. Núverandi verð er <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Hljóðnemi ekki leyfður</translation>
+<translation id="4224541845943007092">Lesa og vista lyklaborðsinnslátt af veffangastikunni</translation>
 <translation id="4225397296022057997">Á öllum vefsvæðum</translation>
 <translation id="4228071595943929139">Nota netfang fyrirtækisins</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Þessi viðbót er bönnuð}one{Sumar viðbætur eru bannaðar}other{Sumar viðbætur eru bannaðar}}</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index e8d5673..a3ed874c 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -8601,6 +8601,7 @@
 <translation id="7134951043985383439">危険なファイルをダウンロードしました</translation>
 <translation id="7135729336746831607">Bluetooth をオンにしますか?</translation>
 <translation id="7136694880210472378">デフォルトに設定</translation>
+<translation id="7137277889990479760"><ph name="EMAIL" /> として続行</translation>
 <translation id="7137771508221868414">サイトにより保存された <ph name="TOTAL_USAGE" /> のデータとインストールされたアプリが削除されます</translation>
 <translation id="7138678301420049075">その他</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> がマイクを使用しています</translation>
@@ -9179,6 +9180,7 @@
 <translation id="7561196759112975576">常に使用</translation>
 <translation id="7561759921596375678">音量をオンにする</translation>
 <translation id="7561982940498449837">メニューを閉じる</translation>
+<translation id="7563970324931922582">[プレースホルダ テキスト]</translation>
 <translation id="756445078718366910">ブラウザ ウィンドウを開く</translation>
 <translation id="7564847347806291057">プロセスを終了</translation>
 <translation id="756503097602602175">ログインする Google アカウントは、<ph name="LINK_BEGIN" />設定<ph name="LINK_END" />で管理できます。ウェブサイトとアプリに許可した権限はすべてのアカウントに適用されます。サイトやアプリがアカウント情報にアクセスしないようにするには、<ph name="DEVICE_TYPE" /> にゲストとしてログインするか、<ph name="LINK_2_BEGIN" />シークレット ウィンドウ<ph name="LINK_2_END" />でウェブ ブラウジングします。</translation>
@@ -10870,6 +10872,7 @@
 <translation id="8737966899544698733">位置情報の精度(Android のみ)</translation>
 <translation id="8738418093147087440">国、言語、入力名で検索</translation>
 <translation id="8740086188450289493">Google アカウントのパスワードを使用</translation>
+<translation id="874023689350909633">試してみる</translation>
 <translation id="8740247629089392745">この Chromebook を <ph name="SUPERVISED_USER_NAME" /> に渡す準備ができました。設定はあと少しで完了です。</translation>
 <translation id="8740672167979365981">ChromeOS Flex の更新が必要です</translation>
 <translation id="8741944563400125534">スイッチ アクセス設定ガイド</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 959aa06..cff3d4bd 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -4621,6 +4621,7 @@
 <translation id="4220648711404560261">활성화 중 오류가 발생했습니다.</translation>
 <translation id="4222917615373664617">가격 추적이 사용 설정되었습니다. 가격은 <ph name="CURRENT_PRICE" />입니다.</translation>
 <translation id="4223404254440398437">마이크가 허용되지 않음</translation>
+<translation id="4224541845943007092">주소 표시줄의 키보드 입력 읽기 및 저장</translation>
 <translation id="4225397296022057997">모든 사이트에서</translation>
 <translation id="4228071595943929139">조직의 이메일 주소 사용</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{확장 프로그램이 허용되지 않음}other{일부 확장 프로그램이 허용되지 않음}}</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index b10b476f..e7e678d 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -8619,6 +8619,7 @@
 <translation id="7134951043985383439">Lejupielādēts bīstams fails</translation>
 <translation id="7135729336746831607">Vai ieslēgt Bluetooth?</translation>
 <translation id="7136694880210472378">Iestatīt par noklusējumu</translation>
+<translation id="7137277889990479760">Turpināt kā: <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Tādējādi tiks dzēsti <ph name="TOTAL_USAGE" /> datu, kas tiek glabāti vietnēs un instalētajās lietotnēs.</translation>
 <translation id="7138678301420049075">Cits</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> izmanto jūsu mikrofonu</translation>
@@ -9197,6 +9198,7 @@
 <translation id="7561196759112975576">Vienmēr</translation>
 <translation id="7561759921596375678">Ieslēgt skaņu</translation>
 <translation id="7561982940498449837">Aizvērt izvēlni</translation>
+<translation id="7563970324931922582">[placeholder text]</translation>
 <translation id="756445078718366910">Atvērt pārlūkprogrammas logu</translation>
 <translation id="7564847347806291057">Pārtraukt procesu</translation>
 <translation id="756503097602602175">Varat pārvaldīt Google kontus, kuros esat pierakstījies, sadaļā <ph name="LINK_BEGIN" />Iestatījumi<ph name="LINK_END" />. Jūsu piešķirtās atļaujas vietnēm un lietotnēm var būt spēkā visos kontos. Ja nevēlaties atļaut vietnēm vai lietotnēm piekļūt jūsu konta informācijai, varat pierakstīties <ph name="DEVICE_TYPE" /> ierīcē kā viesis vai pārlūkot tīmekli <ph name="LINK_2_BEGIN" />inkognito režīma logā<ph name="LINK_2_END" />.</translation>
@@ -10888,6 +10890,7 @@
 <translation id="8737966899544698733">Atrašanās vietas precizitāte (tikai Android ierīcēs)</translation>
 <translation id="8738418093147087440">Meklēt pēc valsts, valodas vai ievades metodes nosaukuma</translation>
 <translation id="8740086188450289493">Izmantot Google konta paroli</translation>
+<translation id="874023689350909633">Izmēģināt</translation>
 <translation id="8740247629089392745">Varat iedot šo Chromebook datoru lietotājam <ph name="SUPERVISED_USER_NAME" />. Kad iestatīšana būs pabeigta, šo datoru varēs izmantot.</translation>
 <translation id="8740672167979365981">Nepieciešama Chrome OS Flex atjaunināšana</translation>
 <translation id="8741944563400125534">Slēdžu piekļuves iestatīšanas ceļvedis</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index 4738012..5cac384 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -8626,6 +8626,7 @@
 <translation id="7134951043985383439">Аюултай файл татсан</translation>
 <translation id="7135729336746831607">Bluetooth-г асаах уу?</translation>
 <translation id="7136694880210472378">Байнга ашиглагдах болгох</translation>
+<translation id="7137277889990479760"><ph name="EMAIL" />-р үргэлжлүүлэх</translation>
 <translation id="7137771508221868414">Энэ нь сайтууд болон суулгасан аппуудын хадгалсан <ph name="TOTAL_USAGE" />-н өгөгдлийг устгана</translation>
 <translation id="7138678301420049075">Бусад</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> таны микрофоныг ашиглаж байна</translation>
@@ -9204,6 +9205,7 @@
 <translation id="7561196759112975576">Үргэлж</translation>
 <translation id="7561759921596375678">Дууг асаах</translation>
 <translation id="7561982940498449837">Цэсийг хаах</translation>
+<translation id="7563970324931922582">[орлуулагч текст]</translation>
 <translation id="756445078718366910">Хөтөч цонхыг нээх</translation>
 <translation id="7564847347806291057">Процессийг дуусга</translation>
 <translation id="756503097602602175">Та нэвтэрсэн Google Бүртгэлүүдийг <ph name="LINK_BEGIN" />Тохиргоо<ph name="LINK_END" /> хэсэгт удирдах боломжтой. Таны вебсайтууд болон аппуудад өгсөн зөвшөөрөл нь бүх бүртгэлд хэрэгжиж болзошгүй. Хэрэв та сайтууд болон аппуудыг таны бүртгэлийн мэдээлэлд хандахыг хүсэхгүй байвал <ph name="DEVICE_TYPE" />-д зочноор нэвтрэх эсвэл <ph name="LINK_2_BEGIN" />Нууцлалтай цонх<ph name="LINK_2_END" />-оор веб үзэх боломжтой.</translation>
@@ -10893,6 +10895,7 @@
 <translation id="8737966899544698733">Байршлын нарийвчлал (зөвхөн Android)</translation>
 <translation id="8738418093147087440">Улс, хэл эсвэл оролтын нэрээр хайх</translation>
 <translation id="8740086188450289493">Google Бүртгэлийн нууц үгийг ашиглах</translation>
+<translation id="874023689350909633">Үүнийг туршиж үзэх</translation>
 <translation id="8740247629089392745">Та энэ Chromebook-г <ph name="SUPERVISED_USER_NAME" />-д өгч болно. Тохируулга бараг дуусаж, одоо судлах цаг боллоо.</translation>
 <translation id="8740672167979365981">ChromeOS Flex-г шинэчлэх шаардлагатай</translation>
 <translation id="8741944563400125534">Сэлгүүрийн тохируулгын хөтөч</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 7dd6d03..a024c7f7 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -8611,6 +8611,7 @@
 <translation id="7134951043985383439">Gevaarlijk bestand gedownload</translation>
 <translation id="7135729336746831607">Bluetooth aanzetten?</translation>
 <translation id="7136694880210472378">Instellen als standaard</translation>
+<translation id="7137277889990479760">Doorgaan als <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Hiermee verwijder je <ph name="TOTAL_USAGE" /> van de gegevens die zijn opgeslagen door sites en geïnstalleerde apps</translation>
 <translation id="7138678301420049075">Overige</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> gebruikt je microfoon</translation>
@@ -9188,6 +9189,7 @@
 <translation id="7561196759112975576">Altijd</translation>
 <translation id="7561759921596375678">Volume aanzetten</translation>
 <translation id="7561982940498449837">Menu sluiten</translation>
+<translation id="7563970324931922582">[placeholder text]</translation>
 <translation id="756445078718366910">Browservenster openen</translation>
 <translation id="7564847347806291057">Proces beëindigen</translation>
 <translation id="756503097602602175">Je kunt ingelogde Google-accounts beheren via <ph name="LINK_BEGIN" />Instellingen<ph name="LINK_END" />. Rechten die je hebt gegeven aan websites en apps kunnen van toepassing zijn op alle accounts. Als je niet wilt dat sites of apps toegang tot je accountgegevens hebben, kun je als gast inloggen op je <ph name="DEVICE_TYPE" /> of in een <ph name="LINK_2_BEGIN" />incognitovenster<ph name="LINK_2_END" /> op internet browsen.</translation>
@@ -10879,6 +10881,7 @@
 <translation id="8737966899544698733">Locatienauwkeurigheid (alleen Android)</translation>
 <translation id="8738418093147087440">Zoeken op landen, taal of invoernamen</translation>
 <translation id="8740086188450289493">Wachtwoord van Google-account gebruiken</translation>
+<translation id="874023689350909633">Nu proberen</translation>
 <translation id="8740247629089392745">Je kunt deze Chromebook aan <ph name="SUPERVISED_USER_NAME" /> geven. Het instellen is bijna afgerond. Daarna is het tijd om te verkennen.</translation>
 <translation id="8740672167979365981">Chrome OS Flex-update vereist</translation>
 <translation id="8741944563400125534">Instelgids voor Toegang via schakelaar</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 8ae304f..440a9cf 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -8621,6 +8621,7 @@
 <translation id="7134951043985383439">Lastet ned en farlig fil</translation>
 <translation id="7135729336746831607">Vil du slå på Bluetooth?</translation>
 <translation id="7136694880210472378">Bruk som standard</translation>
+<translation id="7137277889990479760">Fortsett som <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Dette medfører sletting av <ph name="TOTAL_USAGE" /> data som er lagret av nettsteder og installerte apper</translation>
 <translation id="7138678301420049075">Annet</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> bruker mikrofonen din</translation>
@@ -9199,6 +9200,7 @@
 <translation id="7561196759112975576">Alltid</translation>
 <translation id="7561759921596375678">Slå på lyd</translation>
 <translation id="7561982940498449837">Lukk menyen</translation>
+<translation id="7563970324931922582">[plassholdertekst]</translation>
 <translation id="756445078718366910">Åpne nettleservindu</translation>
 <translation id="7564847347806291057">Avslutt prosessen</translation>
 <translation id="756503097602602175">Du kan administrere påloggede Google-kontoer i <ph name="LINK_BEGIN" />Innstillinger<ph name="LINK_END" />. Tillatelser du har gitt nettsteder og apper, kan gjelde for alle kontoer. Hvis du ikke vil at nettsteder eller apper skal ha tilgang til kontoinformasjonen din, kan du logge på <ph name="DEVICE_TYPE" /> som gjest eller surfe på nettet i et <ph name="LINK_2_BEGIN" />inkognitovindu<ph name="LINK_2_END" />.</translation>
@@ -10891,6 +10893,7 @@
 <translation id="8737966899544698733">Posisjonsnøyaktighet (bare Android)</translation>
 <translation id="8738418093147087440">Søk etter land, språk eller inndatanavn</translation>
 <translation id="8740086188450289493">Bruk passordet for Google-kontoen</translation>
+<translation id="874023689350909633">Prøv det</translation>
 <translation id="8740247629089392745">Du kan gi Chromebooken til <ph name="SUPERVISED_USER_NAME" />. Konfigureringen er nesten ferdig, og så er det tid for å utforske.</translation>
 <translation id="8740672167979365981">ChromeOS Flex må oppdateres</translation>
 <translation id="8741944563400125534">Konfigureringsveiledning for brytertilgang</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index 3e253918..5f84500 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -7248,7 +7248,7 @@
 <translation id="6147253937684562370">ପ୍ରୋଫାଇଲକୁ ଅନଲକ କରିବା ପାଇଁ ଆପଣଙ୍କର ଏହି ମୁଖ୍ୟ ଆକାଉଣ୍ଟ ଇମେଲ ମାଧ୍ୟମରେ ସାଇନ ଇନ କରନ୍ତୁ: <ph name="EMAIL" /></translation>
 <translation id="6148576794665275391">ବର୍ତ୍ତମାନ ଖୋଲନ୍ତୁ</translation>
 <translation id="614890671148262506">ଏହି ସାଇଟର ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ</translation>
-<translation id="6149015141270619212">ଇଣ୍ଟର୍ନେଟ୍ ସହ ସଂଯୋଗ ହୋଇପାରୁ ନାହିଁ</translation>
+<translation id="6149015141270619212">ଇଣ୍ଟର୍ନେଟ ସହ କନେକ୍ଟ ହୋଇପାରୁନାହିଁ</translation>
 <translation id="6149061208933997199">ପାସୱାର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="6149791593592044995">ମଡର୍ନ ଟୋନ ମାର୍କ ପ୍ଲେସମେଣ୍ଟ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="6150116777338468525">ଅଡିଓ ଗୁଣବତ୍ତା</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index b32961c..96b706c 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -8631,6 +8631,7 @@
 <translation id="7134951043985383439">Ficheiro perigoso transferido</translation>
 <translation id="7135729336746831607">Ativar o Bluetooth?</translation>
 <translation id="7136694880210472378">Predefinir</translation>
+<translation id="7137277889990479760">Continuar como <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Esta ação vai eliminar <ph name="TOTAL_USAGE" /> de dados armazenados pelos sites e apps instaladas</translation>
 <translation id="7138678301420049075">Outros</translation>
 <translation id="7139627972753429585">A app <ph name="APP_NAME" /> está a utilizar o seu microfone.</translation>
@@ -9211,6 +9212,7 @@
 <translation id="7561196759112975576">Sempre</translation>
 <translation id="7561759921596375678">Ative o volume</translation>
 <translation id="7561982940498449837">Fechar menu</translation>
+<translation id="7563970324931922582">[placeholder text]</translation>
 <translation id="756445078718366910">Abrir janela do navegador</translation>
 <translation id="7564847347806291057">Concluir processo</translation>
 <translation id="756503097602602175">Pode gerir Contas Google com sessão iniciada nas <ph name="LINK_BEGIN" />Definições<ph name="LINK_END" />. As autorizações que concedeu aos Websites e às apps podem aplicar-se a todas as contas. Se não pretender que os sites ou as apps acedam às informações da sua conta, pode iniciar sessão no dispositivo <ph name="DEVICE_TYPE" /> como convidado ou navegar na Web numa <ph name="LINK_2_BEGIN" />janela de navegação anónima<ph name="LINK_2_END" />.</translation>
@@ -10904,6 +10906,7 @@
 <translation id="8737966899544698733">Precisão da localização (só no Android)</translation>
 <translation id="8738418093147087440">Pesquise por países, idioma ou nomes de introdução</translation>
 <translation id="8740086188450289493">Usar palavra-passe da Conta Google</translation>
+<translation id="874023689350909633">Experimentar</translation>
 <translation id="8740247629089392745">Pode entregar este Chromebook a <ph name="SUPERVISED_USER_NAME" />. A configuração está quase concluída. Depois, pode começar a explorar.</translation>
 <translation id="8740672167979365981">Atualização do ChromeOS Flex necessária</translation>
 <translation id="8741944563400125534">Guia de configuração do acesso por interruptor</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index a2b1e89..3218ecc8 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -4610,6 +4610,7 @@
 <translation id="4220648711404560261">Došlo je do greške pri aktivaciji.</translation>
 <translation id="4222917615373664617">Praćenje cena je omogućeno. Cena je <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Mikrofon nije dozvoljen</translation>
+<translation id="4224541845943007092">Čitanje i čuvanje unosa na tastaturi sa trake za adresu</translation>
 <translation id="4225397296022057997">Na svim sajtovima</translation>
 <translation id="4228071595943929139">Koristite imejl adresu organizacije</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Ovaj dodatak nije dozvoljen}one{Neki dodaci nisu dozvoljeni}few{Neki dodaci nisu dozvoljeni}other{Neki dodaci nisu dozvoljeni}}</translation>
@@ -8629,6 +8630,7 @@
 <translation id="7134951043985383439">Preuzet je opasan fajl</translation>
 <translation id="7135729336746831607">Želite li da uključite Bluetooth?</translation>
 <translation id="7136694880210472378">Postavi kao podrazumevano</translation>
+<translation id="7137277889990479760">Nastavi kao <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Ovim brišete <ph name="TOTAL_USAGE" /> podataka koje čuvaju sajtovi i instalirane aplikacije</translation>
 <translation id="7138678301420049075">Drugo</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> koristi mikrofon</translation>
@@ -9209,6 +9211,7 @@
 <translation id="7561196759112975576">Uvek</translation>
 <translation id="7561759921596375678">Uključite zvuk</translation>
 <translation id="7561982940498449837">Zatvori meni</translation>
+<translation id="7563970324931922582">[tekst čuvara mesta]</translation>
 <translation id="756445078718366910">Otvori prozor pregledača</translation>
 <translation id="7564847347806291057">Završi proces</translation>
 <translation id="756503097602602175">Možete da upravljate Google nalozima na koje ste prijavljeni u <ph name="LINK_BEGIN" />Podešavanjima<ph name="LINK_END" />. Dozvole koje ste dali veb-sajtovima i aplikacijama mogu da važe za sve naloge. Ako ne želite da sajtovi ili aplikacije pristupaju informacijama o nalogu, možete da se prijavite na <ph name="DEVICE_TYPE" /> kao gost ili da pregledate veb u <ph name="LINK_2_BEGIN" />prozoru bez arhiviranja<ph name="LINK_2_END" />.</translation>
@@ -10902,6 +10905,7 @@
 <translation id="8737966899544698733">Preciznost lokacije (samo za Android)</translation>
 <translation id="8738418093147087440">Pretražite prema zemljama, jeziku ili nazivima unosa</translation>
 <translation id="8740086188450289493">Koristite lozinku za Google nalog</translation>
+<translation id="874023689350909633">Isprobajte</translation>
 <translation id="8740247629089392745">Možete da predate ovaj Chromebook korisniku <ph name="SUPERVISED_USER_NAME" />. Podešavanje je skoro gotove, pa dolazi vreme za istraživanje.</translation>
 <translation id="8740672167979365981">Treba da ažurirate Chrome OS Flex</translation>
 <translation id="8741944563400125534">Vodič za podešavanje pristupa pomoću prekidača</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 04e6c111..9cb8577 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -4610,6 +4610,7 @@
 <translation id="4220648711404560261">Дошло је до грешке при активацији.</translation>
 <translation id="4222917615373664617">Праћење цена је омогућено. Цена је <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Микрофон није дозвољен</translation>
+<translation id="4224541845943007092">Читање и чување уноса на тастатури са траке за адресу</translation>
 <translation id="4225397296022057997">На свим сајтовима</translation>
 <translation id="4228071595943929139">Користите имејл адресу организације</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Овај додатак није дозвољен}one{Неки додаци нису дозвољени}few{Неки додаци нису дозвољени}other{Неки додаци нису дозвољени}}</translation>
@@ -8629,6 +8630,7 @@
 <translation id="7134951043985383439">Преузет је опасан фајл</translation>
 <translation id="7135729336746831607">Желите ли да укључите Bluetooth?</translation>
 <translation id="7136694880210472378">Постави као подразумевано</translation>
+<translation id="7137277889990479760">Настави као <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">Овим бришете <ph name="TOTAL_USAGE" /> података које чувају сајтови и инсталиране апликације</translation>
 <translation id="7138678301420049075">Друго</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> користи микрофон</translation>
@@ -9209,6 +9211,7 @@
 <translation id="7561196759112975576">Увек</translation>
 <translation id="7561759921596375678">Укључите звук</translation>
 <translation id="7561982940498449837">Затвори мени</translation>
+<translation id="7563970324931922582">[текст чувара места]</translation>
 <translation id="756445078718366910">Отвори прозор прегледача</translation>
 <translation id="7564847347806291057">Заврши процес</translation>
 <translation id="756503097602602175">Можете да управљате Google налозима на које сте пријављени у <ph name="LINK_BEGIN" />Подешавањима<ph name="LINK_END" />. Дозволе које сте дали веб-сајтовима и апликацијама могу да важе за све налоге. Ако не желите да сајтови или апликације приступају информацијама о налогу, можете да се пријавите на <ph name="DEVICE_TYPE" /> као гост или да прегледате веб у <ph name="LINK_2_BEGIN" />прозору без архивирања<ph name="LINK_2_END" />.</translation>
@@ -10902,6 +10905,7 @@
 <translation id="8737966899544698733">Прецизност локације (само за Android)</translation>
 <translation id="8738418093147087440">Претражите према земљама, језику или називима уноса</translation>
 <translation id="8740086188450289493">Користите лозинку за Google налог</translation>
+<translation id="874023689350909633">Испробајте</translation>
 <translation id="8740247629089392745">Можете да предате овај Chromebook кориснику <ph name="SUPERVISED_USER_NAME" />. Подешавање је скоро готове, па долази време за истраживање.</translation>
 <translation id="8740672167979365981">Треба да ажурирате Chrome OS Flex</translation>
 <translation id="8741944563400125534">Водич за подешавање приступа помоћу прекидача</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 90f99a5..af2ea99 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -4621,6 +4621,7 @@
 <translation id="4220648711404560261">Ett fel inträffade under aktiveringen.</translation>
 <translation id="4222917615373664617">Prisbevakning har aktiverats. Priset är <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">Mikrofon tillåts inte</translation>
+<translation id="4224541845943007092">Läs och spara tangentbordsinmatningar från adressfältet</translation>
 <translation id="4225397296022057997">På alla webbplatser</translation>
 <translation id="4228071595943929139">Använd organisationens e-postadress</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Detta tillägg är inte tillåtet}other{Vissa tillägg är inte tillåtna}}</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 1c394833..7d987c7 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -4619,6 +4619,7 @@
 <translation id="4220648711404560261">యాక్టివేషన్ సమయంలో ఎర్రర్ ఏర్పడింది.</translation>
 <translation id="4222917615373664617">ధర ట్రాకింగ్ ఎనేబుల్ చేయబడింది. ప్రస్తుతం ధర <ph name="CURRENT_PRICE" />.</translation>
 <translation id="4223404254440398437">మైక్రోఫోన్‌కు అనుమతి లేదు</translation>
+<translation id="4224541845943007092">అడ్రస్ బార్ నుండి కీబోర్డ్ ఇన్‌పుట్‌ను చదవండి, సేవ్ చేయండి</translation>
 <translation id="4225397296022057997">అన్ని సైట్‌లలో</translation>
 <translation id="4228071595943929139">మీ సంస్థకు సంబంధించిన ఈమెయిల్ అడ్రస్‌ను ఉపయోగించండి</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{ఈ ఎక్స్‌టెన్షన్ అనుమతించబడదు}other{కొన్ని ఎక్స్‌టెన్షన్‌లు అనుమతించబడవు}}</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index ce32b49..cf65717 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -8612,6 +8612,7 @@
 <translation id="7134951043985383439">ดาวน์โหลดไฟล์อันตรายแล้ว</translation>
 <translation id="7135729336746831607">เปิดบลูทูธไหม</translation>
 <translation id="7136694880210472378">ทำให้เป็นค่าเริ่มต้น</translation>
+<translation id="7137277889990479760">ดำเนินการต่อในชื่อ <ph name="EMAIL" /></translation>
 <translation id="7137771508221868414">การดำเนินการนี้จะลบข้อมูลที่เว็บไซต์และแอปที่ติดตั้งไว้นั้นจัดเก็บไว้รวมทั้งสิ้น <ph name="TOTAL_USAGE" /></translation>
 <translation id="7138678301420049075">อื่นๆ</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> กำลังใช้ไมโครโฟน</translation>
@@ -9189,6 +9190,7 @@
 <translation id="7561196759112975576">ทุกครั้ง</translation>
 <translation id="7561759921596375678">เปิดระดับเสียง</translation>
 <translation id="7561982940498449837">ปิดเมนู</translation>
+<translation id="7563970324931922582">[ข้อความตัวยึดตำแหน่ง]</translation>
 <translation id="756445078718366910">เปิดหน้าต่างเบราว์เซอร์</translation>
 <translation id="7564847347806291057">สิ้นสุดกระบวนการ</translation>
 <translation id="756503097602602175">คุณจัดการบัญชี Google ที่ลงชื่อเข้าใช้ได้จาก<ph name="LINK_BEGIN" />การตั้งค่า<ph name="LINK_END" /> สิทธิ์ที่คุณให้กับเว็บไซต์และแอปต่างๆ อาจมีผลกับทุกบัญชี หากไม่ต้องการให้เว็บไซต์หรือแอปเข้าถึงข้อมูลบัญชี คุณอาจลงชื่อเข้าใช้ <ph name="DEVICE_TYPE" /> เป็นผู้มาเยือนหรือท่องเว็บใน<ph name="LINK_2_BEGIN" />หน้าต่างที่ไม่ระบุตัวตน<ph name="LINK_2_END" /></translation>
@@ -10881,6 +10883,7 @@
 <translation id="8737966899544698733">ความแม่นยำของตำแหน่ง (Android เท่านั้น)</translation>
 <translation id="8738418093147087440">ค้นหาตามประเทศ ภาษา หรือชื่อการป้อนข้อมูล</translation>
 <translation id="8740086188450289493">ใช้รหัสผ่านของบัญชี Google</translation>
+<translation id="874023689350909633">ลองเลย</translation>
 <translation id="8740247629089392745">คุณส่งมอบ Chromebook เครื่องนี้ให้ <ph name="SUPERVISED_USER_NAME" /> ได้ การตั้งค่าใกล้เสร็จแล้ว จากนั้นก็ได้เวลาแห่งการสำรวจ</translation>
 <translation id="8740672167979365981">ต้องอัปเดต Chrome OS Flex</translation>
 <translation id="8741944563400125534">คู่มือการตั้งค่าการเข้าถึงด้วยสวิตช์</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb
index 0ba3148..1ed2fc6 100644
--- a/chrome/app/resources/google_chrome_strings_ar.xtb
+++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -390,6 +390,7 @@
 <translation id="5941830788786076944">‏جعل Google Chrome المتصفّح التلقائي</translation>
 <translation id="5947104538377036631">‏اختصار Chrome</translation>
 <translation id="5953954252731207958">‏لم تزر هذا الموقع الإلكتروني مؤخرًا، لذلك أزال Chrome إذن <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">‏إنّ الإضافات والتطبيقات والمظاهر الواردة من مصادر غير معروفة يمكن أن تتسبّب في إلحاق الضرر بجهازك. ينصح Chrome بإجراء عملية التثبيت من خلال <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> فقط.</translation>
 <translation id="6003112304606738118">جارٍ التنزيل… الساعات المتبقّية: <ph name="HOURS" /></translation>
 <translation id="6014316319780893079">‏باستخدام <ph name="BEGIN_LINK" />أدوات من Chrome<ph name="END_LINK" />، يمكنك التصفُّح بأمان والتحكُّم بشكل كامل.</translation>
 <translation id="6022659036123304283">‏اجعل Chrome متصفِّحك الدائم</translation>
@@ -606,6 +607,7 @@
 <translation id="842386925677997438">‏أدوات الأمان في Chrome</translation>
 <translation id="8425765582779547329">‏للحفاظ على أمانك على الإنترنت من خلال خيارات أحد والدَيك، سجِّل الدخول إلى Chrome</translation>
 <translation id="8428213095426709021">الإعدادات</translation>
+<translation id="8429214465555795676">‏للمتابعة، يجب تسجيل الدخول إلى Chrome باستخدام <ph name="EMAIL" />. ويضمن ذلك الامتثال لسياسات مؤسستك.</translation>
 <translation id="8433638294851456451">‏لإرسال رقم من هذا الجهاز إلى جهازك الذي يعمل بنظام التشغيل Android، يُرجى تسجيل الدخول إلى متصفِّح Chrome على الجهازَين.</translation>
 <translation id="8451192282033883849">‏تتم إدارة حسابك من خلال <ph name="MANAGER_NAME" />. وبإمكان المشرف الاطّلاع على الملف الشخصي لمتصفّح Chrome وتعديل بياناته، مثل الإشارات المرجعية والسجلّ وكلمات المرور.</translation>
 <translation id="8496177819998570653">‏مدير كلمات المرور في Google</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb
index 5b40bb1..076c46d 100644
--- a/chrome/app/resources/google_chrome_strings_bg.xtb
+++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -388,6 +388,7 @@
 <translation id="5941830788786076944">Искам Google Chrome да бъде браузърът по подразбиране</translation>
 <translation id="5947104538377036631">Пряк път към Chrome</translation>
 <translation id="5953954252731207958">Не сте посещавали този сайт наскоро. Chrome премахна разрешението „<ph name="PERMISSION" />“</translation>
+<translation id="5980111191913430208">Разширения, приложения и теми от неизвестни източници могат да навредят на устройството ви. Chrome препоръчва да инсталирате такива само от <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
 <translation id="6003112304606738118">Изтегля се... Оставащо време: <ph name="HOURS" /> ч</translation>
 <translation id="6014316319780893079">С помощта на <ph name="BEGIN_LINK" />инструментите от Chrome<ph name="END_LINK" /> можете да сърфирате безопасно и да запазите контрол</translation>
 <translation id="6022659036123304283">Персонализирайте Chrome според вкуса си</translation>
@@ -606,6 +607,7 @@
 <translation id="842386925677997438">Инструменти за безопасност на Chrome</translation>
 <translation id="8425765582779547329">За да сърфирате по-безопасно онлайн с избраните от родителя ви настройки, влезте в Chrome</translation>
 <translation id="8428213095426709021">Настройки</translation>
+<translation id="8429214465555795676">За да продължите, трябва да влезете в Chrome чрез <ph name="EMAIL" />. Това гарантира спазване на правилата на организацията ви.</translation>
 <translation id="8433638294851456451">За да изпратите номер от тук до телефона си с Android, влезте в Chrome и на двете устройства.</translation>
 <translation id="8451192282033883849">Профилът ви се управлява от <ph name="MANAGER_NAME" />. Администраторът ви може да вижда и редактира този потребителски профил в браузъра Chrome, както и данните му – например отметките, историята и паролите.</translation>
 <translation id="8496177819998570653">Google Мениджър на пароли</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cy.xtb b/chrome/app/resources/google_chrome_strings_cy.xtb
index 206aee7..915329b 100644
--- a/chrome/app/resources/google_chrome_strings_cy.xtb
+++ b/chrome/app/resources/google_chrome_strings_cy.xtb
@@ -394,6 +394,7 @@
 <translation id="5941830788786076944">Gwneud Google Chrome y porwr diofyn</translation>
 <translation id="5947104538377036631">Llwybr Byr Chrome</translation>
 <translation id="5953954252731207958">Nid ydych wedi ymweld yn ddiweddar. Mae Chrome wedi tynnu <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">Gall estyniadau, apiau a themâu o ffynonellau anhysbys niweidio'ch dyfais. Mae Chrome yn argymell eu gosod o'r <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> yn unig</translation>
 <translation id="6003112304606738118">Wrthi'n lawrlwytho... Mae <ph name="HOURS" /> awr ar ôl</translation>
 <translation id="6014316319780893079">Gydag <ph name="BEGIN_LINK" />offer gan Chrome<ph name="END_LINK" />, gallwch bori'n ddiogel ac aros mewn rheolaeth</translation>
 <translation id="6022659036123304283">Personoleiddio Chrome</translation>
@@ -612,6 +613,7 @@
 <translation id="842386925677997438">Offer diogelwch Chrome</translation>
 <translation id="8425765582779547329">I aros yn fwy diogel ar-lein gyda dewisiadau dy riant, mewngofnoda i Chrome</translation>
 <translation id="8428213095426709021">Gosodiadau</translation>
+<translation id="8429214465555795676">I barhau, bydd angen i chi fewngofnodi i Chrome gyda <ph name="EMAIL" />. Mae hyn yn sicrhau cydymffurfiaeth â pholisïau eich sefydliad.</translation>
 <translation id="8433638294851456451">I anfon rhif oddi yma i'ch ffôn Android, mewngofnodwch i Chrome ar y ddwy ddyfais.</translation>
 <translation id="8451192282033883849">Rheolir eich cyfrif gan <ph name="MANAGER_NAME" />. Gall eich gweinyddwr weld a golygu'r proffil porwr Chrome hwn a'i ddata megis nodau tudalen, hanes a chyfrineiriau.</translation>
 <translation id="8496177819998570653">Rheolwr C&amp;yfrineiriau Google</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 7cb2a7a..24f01ad 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -385,6 +385,7 @@
 <translation id="5941830788786076944">Google Chrome als Standardbrowser festlegen</translation>
 <translation id="5947104538377036631">Chrome-Verknüpfung</translation>
 <translation id="5953954252731207958">Du hast diese Website in letzter Zeit nicht besucht. Chrome hat „<ph name="PERMISSION" />“ entfernt.</translation>
+<translation id="5980111191913430208">Erweiterungen, Apps und Designs aus unbekannten Quellen können Schäden auf deinem Gerät verursachen. Chrome empfiehlt, sie nur über den <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> zu installieren.</translation>
 <translation id="6003112304606738118">Wird heruntergeladen… Noch <ph name="HOURS" /> Stunde(n)</translation>
 <translation id="6014316319780893079">Die <ph name="BEGIN_LINK" />Tools von Chrome<ph name="END_LINK" /> helfen dir, sicher zu surfen und deine Daten zu schützen</translation>
 <translation id="6022659036123304283">Chrome personalisieren</translation>
@@ -603,6 +604,7 @@
 <translation id="842386925677997438">Sicherheitstools von Chrome</translation>
 <translation id="8425765582779547329">Wenn du die von deinen Eltern festgelegten Einstellungen nutzen möchtest, um im Internet besser geschützt zu sein, melde dich in Chrome an</translation>
 <translation id="8428213095426709021">Einstellungen</translation>
+<translation id="8429214465555795676">Du musst dich mit <ph name="EMAIL" /> in Chrome anmelden, um fortzufahren. So wird die Einhaltung der Richtlinien deiner Organisation sichergestellt.</translation>
 <translation id="8433638294851456451">Wenn du eine Nummer von diesem Gerät an dein Android-Smartphone senden möchtest, musst du dich auf beiden Geräten in Chrome anmelden.</translation>
 <translation id="8451192282033883849">Dein Konto wird von <ph name="MANAGER_NAME" /> verwaltet. Dein Administrator kann das Profil dieses Chrome-Browsers und seine Daten wie Lesezeichen, den Verlauf und Passwörter ansehen und bearbeiten.</translation>
 <translation id="8496177819998570653">Google P&amp;asswortmanager</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb
index e8dcd54..c281b1e 100644
--- a/chrome/app/resources/google_chrome_strings_el.xtb
+++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -390,6 +390,7 @@
 <translation id="5941830788786076944">Ορισμός Google Chrome ως προεπιλεγμένο πρόγραμμα περιήγησης</translation>
 <translation id="5947104538377036631">Συντόμευση Chrome</translation>
 <translation id="5953954252731207958">Δεν έχετε επισκεφτεί πρόσφατα τον ιστότοπο. Το Chrome κατάργησε την άδεια <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">Οι επεκτάσεις, οι εφαρμογές και τα θέματα από άγνωστες πηγές μπορούν να βλάψουν τη συσκευή σας. Το Chrome συνιστά την εγκατάστασή τους μόνο από το <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
 <translation id="6003112304606738118">Λήψη… Απομένουν <ph name="HOURS" /> ώρες</translation>
 <translation id="6014316319780893079">Με τα <ph name="BEGIN_LINK" />εργαλεία του Chrome<ph name="END_LINK" />, μπορείτε να περιηγείστε με ασφάλεια και να διατηρείτε τον έλεγχο</translation>
 <translation id="6022659036123304283">Προσαρμόστε το Chrome για εσάς</translation>
@@ -608,6 +609,7 @@
 <translation id="842386925677997438">Εργαλεία ασφάλειας του Chrome</translation>
 <translation id="8425765582779547329">Για να είσαι πιο ασφαλής στο διαδίκτυο με τις επιλογές του γονέα σου, συνδέσου στο Chrome</translation>
 <translation id="8428213095426709021">Ρυθμίσεις</translation>
+<translation id="8429214465555795676">Για να συνεχίσετε, θα χρειαστεί να συνδεθείτε στο Chrome με τον λογαριασμό <ph name="EMAIL" />. Με αυτόν τον τρόπο, διασφαλίζεται η συμμόρφωση με τις πολιτικές του οργανισμού σας.</translation>
 <translation id="8433638294851456451">Για να στείλετε από εδώ έναν αριθμό στο τηλέφωνό σας Android, συνδεθείτε στο Chrome και στις δύο συσκευές.</translation>
 <translation id="8451192282033883849">Η διαχείριση του λογαριασμού σας γίνεται από τον τομέα <ph name="MANAGER_NAME" />. Ο διαχειριστής σας μπορεί να δει και να επεξεργαστεί αυτό το προφίλ προγράμματος περιήγησης Chrome και τα δεδομένα του, όπως σελιδοδείκτες, ιστορικό και κωδικούς πρόσβασης.</translation>
 <translation id="8496177819998570653">Διαχειριστής κ&amp;ωδικών πρόσβασης Google</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hy.xtb b/chrome/app/resources/google_chrome_strings_hy.xtb
index 0c405d4..e532b35 100644
--- a/chrome/app/resources/google_chrome_strings_hy.xtb
+++ b/chrome/app/resources/google_chrome_strings_hy.xtb
@@ -391,6 +391,7 @@
 <translation id="5941830788786076944">Դարձնել Google Chrome-ը կանխադրված դիտարկիչը</translation>
 <translation id="5947104538377036631">Chrome-ի դյուրանցում</translation>
 <translation id="5953954252731207958">Դուք վաղուց չեք այցելել կայք։ Chrome-ը հեռացրել է «<ph name="PERMISSION" />» թույլտվությունը։</translation>
+<translation id="5980111191913430208">Անհայտ աղբյուրներից ընդլայնումները, հավելվածներն ու թեմաները կարող են վնասել ձեր սարքը։ Chrome-ը խորհուրդ է տալիս դրանք տեղադրել միայն <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />-ից։</translation>
 <translation id="6003112304606738118">Ներբեռնում… Մնաց <ph name="HOURS" /> ժամ</translation>
 <translation id="6014316319780893079"><ph name="BEGIN_LINK" />Chrome-ի գործիքների<ph name="END_LINK" /> միջոցով դուք կարող եք ապահով դիտարկել և կառավարել կարգավորումները</translation>
 <translation id="6022659036123304283">Անհատականացրեք Chrome դիտարկիչը</translation>
@@ -609,6 +610,7 @@
 <translation id="842386925677997438">Chrome-ի անվտանգության գործիքներ</translation>
 <translation id="8425765582779547329">Ձեր ծնողների ընտրած ավելի անվտանգ կարգավորումներն օգտագործելու համար մուտք գործեք Chrome</translation>
 <translation id="8428213095426709021">Կարգավորումներ</translation>
+<translation id="8429214465555795676">Շարունակելու համար դուք պետք է մուտք գործեք <ph name="EMAIL" /> հաշիվ Chrome-ում, որպեսզի պահպանվեն ձեր կազմակերպության կանոնները։</translation>
 <translation id="8433638294851456451">Հեռախոսահամարն այստեղից ձեր Android հեռախոսին ուղարկելու համար երկու սարքերի Chrome դիտարկիչներում մտեք հաշիվ։</translation>
 <translation id="8451192282033883849">Ձեր հաշիվը կառավարվում է <ph name="MANAGER_NAME" /> տիրույթի կողմից։ Ձեր ադմինիստրատորը կարող է տեսնել և խմբագրել Chrome դիտարկիչի այս պրոֆիլը և դրա տվյալները, օրինակ՝ էջանիշները, պատմությունը և գաղտնաբառերը։</translation>
 <translation id="8496177819998570653">Google գ&amp;աղտնաբառերի կառավարիչ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_is.xtb b/chrome/app/resources/google_chrome_strings_is.xtb
index f8618ec..408e1adb 100644
--- a/chrome/app/resources/google_chrome_strings_is.xtb
+++ b/chrome/app/resources/google_chrome_strings_is.xtb
@@ -394,6 +394,7 @@
 <translation id="5941830788786076944">Gera Google Chrome að sjálfgefnum vafra</translation>
 <translation id="5947104538377036631">Chrome-flýtilykill</translation>
 <translation id="5953954252731207958">Þú hefur ekki skoðað vefsvæðið nýlega. Chrome fjarlægði <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">Viðbætur, forrit og þemu frá óþekktum uppruna geta skaðað tækið þitt. Chrome mælir með að sækja slíkar skrár aðeins í <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
 <translation id="6003112304606738118">Sækir... <ph name="HOURS" /> klst. eftir</translation>
 <translation id="6014316319780893079"><ph name="BEGIN_LINK" />Verkfæri Chrome<ph name="END_LINK" /> gera þér kleift að vafra á öruggan hátt og vera við stjórnvölinn</translation>
 <translation id="6022659036123304283">Gerðu Chrome að þínu</translation>
@@ -612,6 +613,7 @@
 <translation id="842386925677997438">Öryggisverkfæri Chrome</translation>
 <translation id="8425765582779547329">Til að vera öruggari á netinu með vali foreldra þinna skaltu skrá þig inn í Chrome</translation>
 <translation id="8428213095426709021">Stillingar</translation>
+<translation id="8429214465555795676">Til að halda áfram þarftu að skrá þig inn í Chrome með <ph name="EMAIL" />. Það tryggir fylgni við reglur fyrirtækisins/stofnunarinnar þinnar.</translation>
 <translation id="8433638294851456451">Til að senda númer héðan í Android símann þinn skaltu skrá þig inn á Chrome í báðum tækjunum.</translation>
 <translation id="8451192282033883849">Reikningnum þínum er stjórnað af <ph name="MANAGER_NAME" />. Stjórnandinn þinn getur séð og breytt þessum Chrome vafraprófíl og gögnum hans á borð við bókamerki, feril og aðgangsorð.</translation>
 <translation id="8496177819998570653">Google-aðgangsorðastjórnun</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ko.xtb b/chrome/app/resources/google_chrome_strings_ko.xtb
index 62717dd..20712ce 100644
--- a/chrome/app/resources/google_chrome_strings_ko.xtb
+++ b/chrome/app/resources/google_chrome_strings_ko.xtb
@@ -393,6 +393,7 @@
 <translation id="5941830788786076944">Chrome을 기본 브라우저로</translation>
 <translation id="5947104538377036631">Chrome 단축키</translation>
 <translation id="5953954252731207958">최근에 사이트를 방문하지 않았습니다. Chrome에서 <ph name="PERMISSION" /> 권한을 삭제했습니다.</translation>
+<translation id="5980111191913430208">알 수 없는 소스의 확장 프로그램, 앱, 테마는 기기를 손상시킬 수 있습니다. Chrome에서는 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />에서 다운로드한 확장 프로그램, 앱, 테마만 설치할 것을 권장합니다.</translation>
 <translation id="6003112304606738118">다운로드 중... <ph name="HOURS" />시간 남음</translation>
 <translation id="6014316319780893079"><ph name="BEGIN_LINK" />Chrome의 도구<ph name="END_LINK" />로 안전하게 탐색하고 관리할 수 있습니다.</translation>
 <translation id="6022659036123304283">나만의 Chrome 만들기</translation>
@@ -611,6 +612,7 @@
 <translation id="842386925677997438">Chrome의 안전 도구</translation>
 <translation id="8425765582779547329">부모님의 선택을 통해 온라인에서 더 안전하게 보호받으려면 Chromium에 로그인하세요</translation>
 <translation id="8428213095426709021">설정</translation>
+<translation id="8429214465555795676">계속하려면 <ph name="EMAIL" /> 계정으로 Chrome에 로그인해야 합니다. 이렇게 하면 조직의 정책을 준수할 수 있습니다.</translation>
 <translation id="8433638294851456451">여기에서 Android 휴대전화로 번호를 전송하려면 두 기기 모두에서 Chrome에 로그인하세요.</translation>
 <translation id="8451192282033883849">내 계정은 <ph name="MANAGER_NAME" />에서 관리합니다. 관리자가 이 Chrome 브라우저 프로필과 북마크, 방문 기록, 비밀번호 등의 데이터를 보고 수정할 수 있습니다.</translation>
 <translation id="8496177819998570653">Google 비밀번호 관리자(&amp;A)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
index eef362a..c401748 100644
--- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -394,6 +394,7 @@
 <translation id="5941830788786076944">Podesite Google Chrome kao podrazumevani pregledač</translation>
 <translation id="5947104538377036631">Chrome prečica</translation>
 <translation id="5953954252731207958">Niste skoro posećivali sajt. Chrome je uklonio dozvolu <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">Dodaci, aplikacije i teme iz nepoznatih izvora mogu da naškode uređaju. Chrome preporučuje da ih instalirate samo iz: <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
 <translation id="6003112304606738118">Preuzima se... Još <ph name="HOURS" /> č</translation>
 <translation id="6014316319780893079">Pomoću <ph name="BEGIN_LINK" />Chrome alatki<ph name="END_LINK" /> možete bezbedno da pregledate i zadržite kontrolu</translation>
 <translation id="6022659036123304283">Prilagodite Chrome sebi</translation>
@@ -612,6 +613,7 @@
 <translation id="842386925677997438">Chrome alatke za bezbednost</translation>
 <translation id="8425765582779547329">Ako želiš veću bezbednost onlajn uz izbore roditelja, prijavi se u Chrome</translation>
 <translation id="8428213095426709021">Podešavanja</translation>
+<translation id="8429214465555795676">Da biste nastavili, morate da se prijavite u Chrome pomoću naloga <ph name="EMAIL" />. Ovo obezbeđuje usklađenost sa smernicama organizacije.</translation>
 <translation id="8433638294851456451">Da biste poslali broj sa ovog uređaja na Android telefon, prijavite se u Chrome na oba uređaja.</translation>
 <translation id="8451192282033883849">Vašim nalogom upravlja <ph name="MANAGER_NAME" />. Administrator može da vidi i menja ovaj profil u Chrome pregledaču i njegove podatke, poput obeleživača, istorije i lozinki.</translation>
 <translation id="8496177819998570653">Google menadžer lozinki</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index f091943..edaab22 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -394,6 +394,7 @@
 <translation id="5941830788786076944">Подесите Google Chrome као подразумевани прегледач</translation>
 <translation id="5947104538377036631">Chrome пречица</translation>
 <translation id="5953954252731207958">Нисте скоро посећивали сајт. Chrome је уклонио дозволу <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">Додаци, апликације и теме из непознатих извора могу да нашкоде уређају. Chrome препоручује да их инсталирате само из: <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
 <translation id="6003112304606738118">Преузима се... Још <ph name="HOURS" /> ч</translation>
 <translation id="6014316319780893079">Помоћу <ph name="BEGIN_LINK" />Chrome алатки<ph name="END_LINK" /> можете безбедно да прегледате и задржите контролу</translation>
 <translation id="6022659036123304283">Прилагодите Chrome себи</translation>
@@ -612,6 +613,7 @@
 <translation id="842386925677997438">Chrome алатке за безбедност</translation>
 <translation id="8425765582779547329">Ако желиш већу безбедност онлајн уз изборе родитеља, пријави се у Chrome</translation>
 <translation id="8428213095426709021">Подешавања</translation>
+<translation id="8429214465555795676">Да бисте наставили, морате да се пријавите у Chrome помоћу налога <ph name="EMAIL" />. Ово обезбеђује усклађеност са смерницама организације.</translation>
 <translation id="8433638294851456451">Да бисте послали број са овог уређаја на Android телефон, пријавите се у Chrome на оба уређаја.</translation>
 <translation id="8451192282033883849">Вашим налогом управља <ph name="MANAGER_NAME" />. Администратор може да види и мења овај профил у Chrome прегледачу и његове податке, попут обележивача, историје и лозинки.</translation>
 <translation id="8496177819998570653">Google менаџер лозинки</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb
index 28bdeb52..a6a7eec 100644
--- a/chrome/app/resources/google_chrome_strings_sv.xtb
+++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -394,6 +394,7 @@
 <translation id="5941830788786076944">Använd Google Chrome som standardwebbläsare</translation>
 <translation id="5947104538377036631">Chrome-genväg</translation>
 <translation id="5953954252731207958">Du har inte besökt webbplatsen nyligen. Chrome har tagit bort <ph name="PERMISSION" /></translation>
+<translation id="5980111191913430208">Tillägg, appar och teman från okända källor kan skada enheten. Vi rekommenderar att du bara installerar dem från <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
 <translation id="6003112304606738118">Laddar ned … <ph name="HOURS" /> timme/timmar kvar</translation>
 <translation id="6014316319780893079">Med <ph name="BEGIN_LINK" />verktyg från Chrome<ph name="END_LINK" /> kan du surfa säkert och behålla kontrollen</translation>
 <translation id="6022659036123304283">Anpassa Chrome</translation>
@@ -612,6 +613,7 @@
 <translation id="842386925677997438">Säkerhetsverktyg i Chrome</translation>
 <translation id="8425765582779547329">Du kan skydda dig online med dina föräldrars val genom att logga in i Chrome</translation>
 <translation id="8428213095426709021">Inställningar</translation>
+<translation id="8429214465555795676">Du måste logga in på Chrome med <ph name="EMAIL" /> om du vill fortsätta. Detta säkerställer att organisationens policyer följs.</translation>
 <translation id="8433638294851456451">Logga in på Chrome på båda enheterna om du vill skicka ett nummer från Android-telefonen.</translation>
 <translation id="8451192282033883849">Kontot hanteras av <ph name="MANAGER_NAME" />. Administratören kan se och redigera den här Chrome-profilen och tillhörande data som bokmärken, historik och lösenord.</translation>
 <translation id="8496177819998570653">Googles Lösenordshantering</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb
index c36ecff..c68cf8a3 100644
--- a/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -386,6 +386,7 @@
 <translation id="5941830788786076944">Google Chromeను డిఫాల్ట్ బ్రౌజర్‌గా చేసుకోండి</translation>
 <translation id="5947104538377036631">Chrome షార్ట్‌కట్</translation>
 <translation id="5953954252731207958">మీరు ఇటీవల వెళ్లలేదు. Chrome <ph name="PERMISSION" />‌ను తీసివేసింది</translation>
+<translation id="5980111191913430208">తెలియని సోర్స్‌లకు చెందిన ఎక్స్‌టెన్షన్‌లు, యాప్‌లు, థీమ్‌లు మీ పరికరానికి హాని కలిగించవచ్చు. <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> నుండి మాత్రమే వాటిని ఇన్‌స్టాల్ చేయని Chrome సిఫార్సు చేస్తోంది</translation>
 <translation id="6003112304606738118">డౌన్‌లోడ్ అవుతోంది... <ph name="HOURS" /> గంట(లు) సమయం మిగిలి ఉంది</translation>
 <translation id="6014316319780893079"><ph name="BEGIN_LINK" />Chrome నుండి టూల్స్‌<ph name="END_LINK" />‌తో, మీరు సురక్షితంగా బ్రౌజ్ చేయవచ్చు, కంట్రోల్‌లో ఉండవచ్చు</translation>
 <translation id="6022659036123304283">Chromeని మీకు నచ్చినట్లు తయారు చేసుకోండి</translation>
@@ -604,6 +605,7 @@
 <translation id="842386925677997438">Chrome భద్రతా టూల్స్</translation>
 <translation id="8425765582779547329">మీ తల్లి/తండ్రి ఛాయిస్‌లతో ఆన్‌లైన్‌లో సురక్షితంగా ఉండటానికి, Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="8428213095426709021">సెట్టింగ్‌లు</translation>
+<translation id="8429214465555795676">కొనసాగించడానికి, మీరు <ph name="EMAIL" />‌తో Chromeకు సైన్ ఇన్ చేయాలి. మీ సంస్థ పాలసీలకు అనుగుణంగా ఉండేలా ఇది చేస్తుంది.</translation>
 <translation id="8433638294851456451">ఇక్కడి నుండి మీ Android ఫోన్‌కు నంబర్‌ను పంపడానికి, రెండు పరికరాలలోని Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="8451192282033883849">మీ ఖాతాను <ph name="MANAGER_NAME" /> మేనేజ్ చేస్తున్నారు. మీ అడ్మినిస్ట్రేటర్ ఈ Chrome బ్రౌజర్ ప్రొఫైల్‌ను, అలాగే బుక్‌మార్క్‌లు, హిస్టరీ, ఇంకా పాస్‌వర్డ్‌ల వంటి దాని డేటాను చూడగలరు, ఎడిట్ చేయగలరు.</translation>
 <translation id="8496177819998570653">Google Password Manager</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 0ab8796..14430d6 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4621,6 +4621,49 @@
   <message name="IDS_SETTINGS_GLIC_PAGE_TITLE" translateable="false" desc="Name of the Glic settings page.">
     Glic
   </message>
+  <message name="IDS_SETTINGS_GLIC_PREFERENCES_SECTION" translateable="false" desc="Name of the Glic settings section for general preferences.">
+    Preferences
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_SECTION" translateable="false" desc="Name of the Glic settings section related to user data.">
+    Data
+  </message>
+  <message name="IDS_SETTINGS_GLIC_OS_WIDGET_TOGGLE" translateable="false" desc="Name of the Glic setting for the toggle enabling feature in the menu.">
+    Feature in your menu
+  </message>
+  <message name="IDS_SETTINGS_GLIC_OS_WIDGET_TOGGLE_SUBLABEL" translateable="false" desc="Subheading for the 'feature in your menu' toggle.">
+    Access feature on the toolbar
+  </message>
+  <message name="IDS_SETTINGS_GLIC_KEYBOARD_SHORTCUT" translateable="false" desc="Name of the Glic setting for the keyboard shortcut.">
+    Keyboard shortcut
+  </message>
+  <message name="IDS_SETTINGS_GLIC_KEYBOARD_SHORTCUT_SUBLABEL" translateable="false" desc="Subheading for the 'keyboard shortcut' toggle.">
+    Open with shortcut
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_LOCATION_TOGGLE" translateable="false" desc="Name of the 'enable location sharing' setting.">
+    Location
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_LOCATION_TOGGLE_SUBLABEL" translateable="false" desc="Sublabel describing the 'enable location sharing' setting.">
+    Use your location to allow enhanced accuracy
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_MICROPHONE_TOGGLE" translateable="false" desc="Name of the 'enable microphone' setting.">
+    Microphone
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_MICROPHONE_TOGGLE_SUBLABEL" translateable="false" desc="Sublabel describing the 'enable microphone' setting.">
+    Enable use of your microphone
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_TAB_ACCESS_TOGGLE" translateable="false" desc="Name of the 'enable tab access' setting.">
+    Current tab access
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_TAB_ACCESS_TOGGLE_SUBLABEL" translateable="false" desc="Sublabel describing the 'tab access' setting.">
+    Allow feature
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_ACTIVITY_BUTTON" translateable="false" desc="Name of the 'activity' button.">
+    Activity
+  </message>
+  <message name="IDS_SETTINGS_GLIC_DATA_ACTIVITY_BUTTON_SUBLABEL" translateable="false" desc="Sublabel describing the 'activity' button.">
+    View and manage your activity
+  </message>
+
 
 
   <!-- Security settings toast confirmation -->
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index cdafc17..a3acf17d 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -3058,8 +3058,6 @@
       "password_manager/android/password_generation_controller.h",
       "password_manager/android/password_generation_controller_impl.cc",
       "password_manager/android/password_generation_controller_impl.h",
-      "password_manager/android/password_infobar_utils.cc",
-      "password_manager/android/password_infobar_utils.h",
       "password_manager/android/password_manager_error_message_delegate.cc",
       "password_manager/android/password_manager_error_message_delegate.h",
       "password_manager/android/password_manager_error_message_helper_bridge.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index cbb5e3da..f76de44 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -6289,6 +6289,11 @@
      flag_descriptions::kAndroidAppIntegrationV2Description, kOsAndroid,
      FEATURE_VALUE_TYPE(chrome::android::kAndroidAppIntegrationV2)},
 
+    {"new-tab-page-customization",
+     flag_descriptions::kNewTabPageCustomizationName,
+     flag_descriptions::kNewTabPageCustomizationDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(chrome::android::kNewTabPageCustomization)},
+
     {"android-app-integration-with-favicon",
      flag_descriptions::kAndroidAppIntegrationWithFaviconName,
      flag_descriptions::kAndroidAppIntegrationWithFaviconDescription,
diff --git a/chrome/browser/ash/policy/status_collector/device_status_collector.cc b/chrome/browser/ash/policy/status_collector/device_status_collector.cc
index 393a59d9..f39eeeb 100644
--- a/chrome/browser/ash/policy/status_collector/device_status_collector.cc
+++ b/chrome/browser/ash/policy/status_collector/device_status_collector.cc
@@ -30,7 +30,6 @@
 #include "ash/constants/ash_features.h"
 #include "base/check.h"
 #include "base/check_op.h"
-#include "base/feature_list.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/format_macros.h"
@@ -70,7 +69,6 @@
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/browser/ui/webui/ash/settings/pages/storage/device_storage_util.h"
 #include "chrome/common/channel_info.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "chromeos/ash/components/audio/cras_audio_handler.h"
 #include "chromeos/ash/components/dbus/attestation/attestation_client.h"
@@ -2309,9 +2307,7 @@
         if (session_type == em::ActiveTimePeriod::SESSION_AFFILIATED_USER) {
           active_period->set_user_email(user_email);
         }
-        if (session_type != em::ActiveTimePeriod::SESSION_UNKNOWN &&
-            base::FeatureList::IsEnabled(
-                features::kActivityReportingSessionType)) {
+        if (session_type != em::ActiveTimePeriod::SESSION_UNKNOWN) {
           active_period->set_session_type(session_type);
         }
       }
diff --git a/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc b/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
index b03fb87..3eb74da 100644
--- a/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
+++ b/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
@@ -69,7 +69,6 @@
 #include "chrome/browser/chrome_content_browser_client.h"
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/common/chrome_content_client.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/chrome_unit_test_suite.h"
@@ -1526,8 +1525,6 @@
 
 TEST_F(DeviceStatusCollectorTest, ActivityNoUser) {
   DisableDefaultSettings();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kActivityReportingSessionType);
   ui::IdleState test_states[] = {ui::IDLE_STATE_ACTIVE, ui::IDLE_STATE_ACTIVE,
                                  ui::IDLE_STATE_ACTIVE};
   scoped_testing_cros_settings_.device_settings()->SetBoolean(
@@ -1547,8 +1544,6 @@
 
 TEST_F(DeviceStatusCollectorTest, ActivityWithPublicSessionUser) {
   DisableDefaultSettings();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kActivityReportingSessionType);
   ui::IdleState test_states[] = {ui::IDLE_STATE_ACTIVE, ui::IDLE_STATE_ACTIVE,
                                  ui::IDLE_STATE_ACTIVE};
   scoped_testing_cros_settings_.device_settings()->SetBoolean(
@@ -1576,8 +1571,6 @@
 
 TEST_F(DeviceStatusCollectorTest, ActivityWithKioskUser) {
   DisableDefaultSettings();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kActivityReportingSessionType);
   ui::IdleState test_states[] = {ui::IDLE_STATE_ACTIVE, ui::IDLE_STATE_ACTIVE,
                                  ui::IDLE_STATE_ACTIVE};
   scoped_testing_cros_settings_.device_settings()->SetBoolean(
@@ -1605,8 +1598,6 @@
 
 TEST_F(DeviceStatusCollectorTest, ActivityWithIwaKioskUser) {
   DisableDefaultSettings();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kActivityReportingSessionType);
   ui::IdleState test_states[] = {ui::IDLE_STATE_ACTIVE, ui::IDLE_STATE_ACTIVE,
                                  ui::IDLE_STATE_ACTIVE};
   scoped_testing_cros_settings_.device_settings()->SetBoolean(
@@ -1634,8 +1625,6 @@
 
 TEST_F(DeviceStatusCollectorTest, ActivityWithAffiliatedUser) {
   DisableDefaultSettings();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kActivityReportingSessionType);
   ui::IdleState test_states[] = {ui::IDLE_STATE_ACTIVE, ui::IDLE_STATE_ACTIVE,
                                  ui::IDLE_STATE_ACTIVE};
   scoped_testing_cros_settings_.device_settings()->SetBoolean(
@@ -1677,8 +1666,6 @@
 
 TEST_F(DeviceStatusCollectorTest, ActivityWithNotAffiliatedUser) {
   DisableDefaultSettings();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kActivityReportingSessionType);
   ui::IdleState test_states[] = {ui::IDLE_STATE_ACTIVE, ui::IDLE_STATE_ACTIVE,
                                  ui::IDLE_STATE_ACTIVE};
   scoped_testing_cros_settings_.device_settings()->SetBoolean(
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index 0680714..937002a 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -1469,6 +1469,13 @@
         "//components/enterprise/data_controls/core/browser",
       ]
     }
+
+    if (enable_glic) {
+      deps += [
+        "//chrome/browser/glic:enabling",
+        "//chrome/browser/glic:glic",
+      ]
+    }
   }  # if (enable_extensions)
 }
 
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
index ef05604..4a38c37d 100644
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -18,6 +18,8 @@
 #include "chrome/browser/extensions/api/settings_private/generated_prefs.h"
 #include "chrome/browser/extensions/api/settings_private/generated_prefs_factory.h"
 #include "chrome/browser/extensions/settings_api_helpers.h"
+#include "chrome/browser/glic/glic_enabling.h"
+#include "chrome/browser/glic/glic_pref_names.h"
 #include "chrome/browser/metrics/profile_pref_names.h"
 #include "chrome/browser/nearby_sharing/common/nearby_share_prefs.h"
 #include "chrome/browser/password_manager/generated_password_leak_detection_pref.h"
@@ -1258,6 +1260,20 @@
                      kProductSpecificationsEnterprisePolicyAllowed] =
       settings_api::PrefType::kNumber;
 
+  // Glic prefs
+#if BUILDFLAG(ENABLE_GLIC)
+  if (GlicEnabling::IsEnabledByFlags()) {
+    (*s_allowlist)[glic::prefs::kGlicLauncherEnabled] =
+        settings_api::PrefType::kBoolean;
+    (*s_allowlist)[glic::prefs::kGlicGeolocationEnabled] =
+        settings_api::PrefType::kBoolean;
+    (*s_allowlist)[glic::prefs::kGlicMicrophoneEnabled] =
+        settings_api::PrefType::kBoolean;
+    (*s_allowlist)[glic::prefs::kGlicTabContextEnabled] =
+        settings_api::PrefType::kBoolean;
+  }
+#endif
+
   return *s_allowlist;
 }
 
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index bbe1ad2..c7b096c 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -6081,6 +6081,11 @@
     "expiry_milestone": 133
   },
   {
+    "name": "new-tab-page-customization",
+    "owners": ["hanxi@chromium.org", "yanlinghu@google.com", "clank-start@google.com"],
+    "expiry_milestone": 150
+  },
+  {
     "name": "notification-one-tap-unsubscribe",
     "owners": [ "engedy@chromium.org" ],
     "expiry_milestone": 132
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 8d0c69b..32cd09b9 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -93,6 +93,12 @@
     "If enabled, allows Chrome to integrate with the Android App Search "
     "directly without using internal library.";
 
+#if BUILDFLAG(IS_ANDROID)
+const char kNewTabPageCustomizationName[] = "Customize the new tab page";
+const char kNewTabPageCustomizationDescription[] =
+    "If enabled, allows users to customize the new tab page";
+#endif  // BUILDFLAG(IS_ANDROID)
+
 const char kAndroidAppIntegrationWithFaviconName[] =
     "Integrate with Android App Search with favicons";
 const char kAndroidAppIntegrationWithFaviconDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index d95305f..a5cda21f 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -810,6 +810,11 @@
 extern const char kNewMacNotificationAPIName[];
 extern const char kNewMacNotificationAPIDescription[];
 
+#if BUILDFLAG(IS_ANDROID)
+extern const char kNewTabPageCustomizationName[];
+extern const char kNewTabPageCustomizationDescription[];
+#endif  // BUILDFLAG(IS_ANDROID)
+
 extern const char kEnableGenericSensorExtraClassesName[];
 extern const char kEnableGenericSensorExtraClassesDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index fcf0168..afc254b 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -185,6 +185,7 @@
     &kAndroidAppIntegration,
     &kAndroidAppIntegrationModule,
     &kAndroidAppIntegrationV2,
+    &kNewTabPageCustomization,
     &kAndroidAppIntegrationWithFavicon,
     &kAndroidBookmarkBar,
     &kAndroidBottomToolbar,
@@ -465,6 +466,10 @@
              "AndroidAppIntegrationV2",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kNewTabPageCustomization,
+             "NewTabPageCustomization",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kAndroidAppIntegrationWithFavicon,
              "AndroidAppIntegrationWithFavicon",
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index b456455..1877e0f 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -20,6 +20,7 @@
 BASE_DECLARE_FEATURE(kAndroidAppIntegration);
 BASE_DECLARE_FEATURE(kAndroidAppIntegrationModule);
 BASE_DECLARE_FEATURE(kAndroidAppIntegrationV2);
+BASE_DECLARE_FEATURE(kNewTabPageCustomization);
 BASE_DECLARE_FEATURE(kAndroidAppIntegrationWithFavicon);
 BASE_DECLARE_FEATURE(kAndroidBookmarkBar);
 BASE_DECLARE_FEATURE(kAndroidBottomToolbar);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 45a2c65..56e02f0e 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -164,6 +164,7 @@
     public static final String ANDROID_APP_INTEGRATION = "AndroidAppIntegration";
     public static final String ANDROID_APP_INTEGRATION_MODULE = "AndroidAppIntegrationModule";
     public static final String ANDROID_APP_INTEGRATION_V2 = "AndroidAppIntegrationV2";
+    public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization";
     public static final String ANDROID_APP_INTEGRATION_WITH_FAVICON =
             "AndroidAppIntegrationWithFavicon";
     public static final String ANDROID_BOOKMARK_BAR = "AndroidBookmarkBar";
@@ -590,6 +591,8 @@
             newCachedFlag(ANDROID_APP_INTEGRATION_MODULE, false);
     public static final CachedFlag sAndroidAppIntegrationV2 =
             newCachedFlag(ANDROID_APP_INTEGRATION_V2, false);
+    public static final CachedFlag sNewTabPageCustomization =
+            newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION, false);
     public static final CachedFlag sAndroidAppIntegrationWithFavicon =
             newCachedFlag(ANDROID_APP_INTEGRATION_WITH_FAVICON, false);
     public static final CachedFlag sAndroidBottomToolbar =
@@ -801,6 +804,7 @@
                     sAndroidAppIntegration,
                     sAndroidAppIntegrationModule,
                     sAndroidAppIntegrationV2,
+                    sNewTabPageCustomization,
                     sAndroidAppIntegrationWithFavicon,
                     sAndroidBottomToolbar,
                     sAndroidElegantTextHeight,
diff --git a/chrome/browser/glic/glic_pref_names.h b/chrome/browser/glic/glic_pref_names.h
index 1c4979508..dd09b03 100644
--- a/chrome/browser/glic/glic_pref_names.h
+++ b/chrome/browser/glic/glic_pref_names.h
@@ -10,6 +10,7 @@
 // ************* LOCAL STATE PREFS ***************
 // These prefs are per-Chrome-installation
 
+// Boolean pref that enables or disables the launcher.
 inline constexpr char kGlicLauncherEnabled[] = "glic.launcher_enabled";
 
 // Dictionary pref that keeps track of the registered hotkey for Glic.
diff --git a/chrome/browser/ip_protection/BUILD.gn b/chrome/browser/ip_protection/BUILD.gn
index fbfc28a..2eedb9f3 100644
--- a/chrome/browser/ip_protection/BUILD.gn
+++ b/chrome/browser/ip_protection/BUILD.gn
@@ -26,6 +26,7 @@
     "//base",
     "//base/version_info:channel",
     "//build:branding_buildflags",
+    "//chrome/browser:browser_process",
     "//chrome/browser/profiles:profile",
     "//chrome/common:channel_info",
     "//components/ip_protection:get_proxy_config_proto",
@@ -39,6 +40,7 @@
     "//components/privacy_sandbox:tracking_protection_prefs",
     "//components/privacy_sandbox:tracking_protection_settings",
     "//components/signin/public/identity_manager:identity_manager",
+    "//components/variations/service:service",
     "//content/public/browser",
     "//google_apis:google_apis",
     "//google_apis/common:request_util",
@@ -94,12 +96,14 @@
   deps = [
     ":ip_protection",
     "//base/test:test_support",
+    "//chrome/browser:browser_process",
     "//chrome/browser/policy:test_support",
     "//chrome/test:test_support",
     "//components/ip_protection/common:ip_protection_data_types",
     "//components/privacy_sandbox:features",
     "//components/signin/public/identity_manager:identity_manager",
     "//components/signin/public/identity_manager:test_support",
+    "//components/variations/service:service",
     "//third_party/anonymous_tokens:anonymous_tokens_cc_proto",
   ]
 
diff --git a/chrome/browser/ip_protection/ip_protection_core_host.cc b/chrome/browser/ip_protection/ip_protection_core_host.cc
index fb7302a..ebcac2b 100644
--- a/chrome/browser/ip_protection/ip_protection_core_host.cc
+++ b/chrome/browser/ip_protection/ip_protection_core_host.cc
@@ -21,6 +21,8 @@
 #include "base/threading/sequence_bound.h"
 #include "base/time/time.h"
 #include "build/branding_buildflags.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/ip_protection/ip_protection_switches.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/channel_info.h"
@@ -28,10 +30,12 @@
 #include "components/ip_protection/common/ip_protection_proxy_config_direct_fetcher.h"
 #include "components/ip_protection/common/ip_protection_telemetry.h"
 #include "components/ip_protection/common/ip_protection_token_direct_fetcher.h"
+#include "components/policy/core/common/management/management_service.h"
 #include "components/prefs/pref_service.h"
 #include "components/privacy_sandbox/privacy_sandbox_features.h"
 #include "components/privacy_sandbox/tracking_protection_prefs.h"
 #include "components/privacy_sandbox/tracking_protection_settings.h"
+#include "components/variations/service/variations_service.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/storage_partition.h"
 #include "google_apis/common/api_key_request_util.h"
@@ -54,15 +58,18 @@
 IpProtectionCoreHost::IpProtectionCoreHost(
     signin::IdentityManager* identity_manager,
     privacy_sandbox::TrackingProtectionSettings* tracking_protection_settings,
+    policy::ManagementService* management_service,
     PrefService* pref_service,
     Profile* profile)
     : identity_manager_(identity_manager),
       tracking_protection_settings_(tracking_protection_settings),
+      management_service_(management_service),
       pref_service_(pref_service),
       profile_(profile) {
   CHECK(identity_manager);
   identity_manager_->AddObserver(this);
   CHECK(tracking_protection_settings);
+  CHECK(management_service);
   CHECK(pref_service_);
   tracking_protection_settings_->AddObserver(this);
 }
@@ -290,6 +297,7 @@
   CHECK(tracking_protection_settings_);
   tracking_protection_settings_->RemoveObserver(this);
   tracking_protection_settings_ = nullptr;
+  management_service_ = nullptr;
   pref_service_ = nullptr;
   profile_ = nullptr;
   ip_protection_token_fetcher_.reset();
@@ -391,16 +399,54 @@
              switches::kDisableIpProtectionProxy);
 }
 
+bool IpProtectionCoreHost::ShouldDisableIpProtectionForManagedForTesting() {
+  return ShouldDisableIpProtectionForManaged();
+}
+
+bool IpProtectionCoreHost::ShouldDisableIpProtectionForManaged() {
+#if BUILDFLAG(IS_CHROMEOS)
+  // On ChromeOS the `IsManaged()` checks work differently than on other
+  // platforms, but to accomplish disabling by default for enterprise users we
+  // use the `default_for_enterprise_users=false` option in the enterprise
+  // policy definition. Thus, check whether the preference has been set via
+  // that (or by the admins overriding this).
+  if (pref_service_->IsManagedPreference(prefs::kIpProtectionEnabled)) {
+#else
+  if (management_service_->IsManaged() ||
+      policy::ManagementServiceFactory::GetForPlatform()->IsManaged()) {
+#endif
+
+    variations::VariationsService* variations_service =
+        g_browser_process->variations_service();
+    if (variations_service && variations_service->IsLikelyDogfoodClient()) {
+      // For Googler/Dogfood devices we don't want to disable IP Protection by
+      // default so that we can carry out dogfood experiments via Finch instead
+      // of also needing to coordinate internal enterprise policy rollouts.
+      return false;
+    }
+
+    // If the user's enterprise has a policy for IP, use this regardless of user
+    // UX feature status. Enterprises should have the ability to enable or
+    // disable IPP even when users do not have UX access to the feature.
+    if (pref_service_->IsManagedPreference(prefs::kIpProtectionEnabled)) {
+      return !pref_service_->GetBoolean(prefs::kIpProtectionEnabled);
+    }
+
+    // Disable IP Protection for managed browsers and managed devices when the
+    // admins haven't explicitly opted in to it via enterprise policy.
+    return true;
+  }
+
+  return false;
+}
+
 bool IpProtectionCoreHost::IsIpProtectionEnabled() {
   if (is_shutting_down_) {
     return false;
   }
 
-  // If the user's enterprise has a policy for IP, use this regardless of user
-  // UX feature status. Enterprises should have the ability to enable or
-  // disable IPP even when users do not have UX access to the feature.
-  if (pref_service_->IsManagedPreference(prefs::kIpProtectionEnabled)) {
-    return pref_service_->GetBoolean(prefs::kIpProtectionEnabled);
+  if (ShouldDisableIpProtectionForManaged()) {
+    return false;
   }
 
   // TODO(crbug.com/41494110): We should ultimately use
diff --git a/chrome/browser/ip_protection/ip_protection_core_host.h b/chrome/browser/ip_protection/ip_protection_core_host.h
index f379df6..eaabbc7 100644
--- a/chrome/browser/ip_protection/ip_protection_core_host.h
+++ b/chrome/browser/ip_protection/ip_protection_core_host.h
@@ -19,6 +19,7 @@
 #include "components/ip_protection/common/ip_protection_telemetry.h"
 #include "components/ip_protection/common/ip_protection_token_direct_fetcher.h"
 #include "components/ip_protection/mojom/core.mojom.h"
+#include "components/policy/core/common/management/management_service.h"
 #include "components/privacy_sandbox/tracking_protection_settings.h"
 #include "components/privacy_sandbox/tracking_protection_settings_observer.h"
 #include "components/signin/public/identity_manager/access_token_info.h"
@@ -56,6 +57,7 @@
   IpProtectionCoreHost(
       signin::IdentityManager* identity_manager,
       privacy_sandbox::TrackingProtectionSettings* tracking_protection_settings,
+      policy::ManagementService* management_service,
       PrefService* pref_service,
       Profile* profile);
 
@@ -110,6 +112,10 @@
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       std::unique_ptr<quiche::BlindSignAuthInterface> bsa);
 
+  // Returns whether IP Protection should be disabled for managed users and/or
+  // devices, for testing.
+  bool ShouldDisableIpProtectionForManagedForTesting();
+
  private:
   friend class IpProtectionCoreHostTest;
   FRIEND_TEST_ALL_PREFIXES(IpProtectionCoreHostIdentityBrowserTest,
@@ -163,6 +169,10 @@
   // available) or extend them (if not).
   void AccountStatusChanged(bool account_available);
 
+  // Returns whether IP Protection should be disabled for managed users and/or
+  // devices.
+  bool ShouldDisableIpProtectionForManaged();
+
   // The object used to get an OAuth token. `identity_manager_` will be set to
   // nullptr after `Shutdown()` is called, but will otherwise be non-null.
   raw_ptr<signin::IdentityManager> identity_manager_;
@@ -171,12 +181,14 @@
   // is called, but will otherwise be non-null.
   raw_ptr<privacy_sandbox::TrackingProtectionSettings>
       tracking_protection_settings_;
+  // Used to check whether the browser is being managed. Will be set to nullptr
+  // after `Shutdown()`, but will otherwise be non-null.
+  raw_ptr<policy::ManagementService> management_service_;
   // Used to request the state of the IP Protection user setting. Will be set to
   // nullptr after `Shutdown()` is called.
   raw_ptr<PrefService> pref_service_;
-  // The `Profile` object associated with this
-  // `IpProtectionCoreHost()`. Will be reset to nullptr after
-  // `Shutdown()` is called.
+  // The `Profile` object associated with this `IpProtectionCoreHost()`. Will be
+  // reset to nullptr after `Shutdown()` is called.
   // NOTE: If this is used in any `GetForProfile()` call, ensure that there is a
   // corresponding dependency (if needed) registered in the factory class.
   raw_ptr<Profile> profile_;
diff --git a/chrome/browser/ip_protection/ip_protection_core_host_browsertest.cc b/chrome/browser/ip_protection/ip_protection_core_host_browsertest.cc
index fccac13..30f2ba5a 100644
--- a/chrome/browser/ip_protection/ip_protection_core_host_browsertest.cc
+++ b/chrome/browser/ip_protection/ip_protection_core_host_browsertest.cc
@@ -13,6 +13,8 @@
 #include "base/test/test_future.h"
 #include "base/time/time.h"
 #include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/ip_protection/ip_protection_core_host_factory.h"
 #include "chrome/browser/policy/policy_test_utils.h"
 #include "chrome/browser/profiles/profile_test_util.h"
@@ -26,12 +28,14 @@
 #include "components/ip_protection/mojom/core.mojom.h"
 #include "components/ip_protection/mojom/data_types.mojom-test-utils.h"
 #include "components/ip_protection/mojom/data_types.mojom.h"
+#include "components/policy/core/common/management/scoped_management_service_override_for_testing.h"
 #include "components/policy/core/common/policy_map.h"
 #include "components/policy/core/common/policy_types.h"
 #include "components/policy/policy_constants.h"
 #include "components/privacy_sandbox/privacy_sandbox_features.h"
 #include "components/signin/public/base/consent_level.h"
 #include "components/signin/public/identity_manager/identity_test_utils.h"
+#include "components/variations/service/variations_service.h"
 #include "content/public/browser/network_service_util.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_test.h"
@@ -42,7 +46,7 @@
 #include "services/network/public/mojom/network_context.mojom-test-utils.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
+#if BUILDFLAG(IS_CHROMEOS)
 #include "components/signin/public/identity_manager/primary_account_change_event.h"
 #endif
 
@@ -154,6 +158,13 @@
   bool should_intercept_;
 };
 
+void SetIsLikelyDogfoodClient(bool is_dogfood) {
+  CHECK(g_browser_process);
+  CHECK(g_browser_process->variations_service());
+  g_browser_process->variations_service()->SetIsLikelyDogfoodClientForTesting(
+      is_dogfood);
+}
+
 constexpr base::Time kDontRetry = base::Time::Max();
 }  // namespace
 
@@ -339,6 +350,56 @@
   ASSERT_EQ(getter->receivers_for_testing().size(), 2U);
 }
 
+// If the device is considered managed and IP Protection isn't enabled via
+// enterprise policy, IP Protection should be disabled. Note that we don't rely
+// on managed device detection for ChromeOS and instead just default the
+// enterprise policy value to false (disabling IP Protection) for enterprise
+// users on ChromeOS.
+#if !BUILDFLAG(IS_CHROMEOS)
+IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostBrowserTest,
+                       DisabledForManagedDevice) {
+  IpProtectionCoreHost* getter =
+      IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(getter);
+
+  // If this test is running on a device that is already managed, we expect IP
+  // Protection to be disabled. Verify this and then skip the rest of the test.
+  if (getter->ShouldDisableIpProtectionForManagedForTesting()) {
+    EXPECT_FALSE(getter->IsIpProtectionEnabled());
+    return;
+  }
+  ASSERT_TRUE(getter->IsIpProtectionEnabled());
+
+  {
+    policy::ScopedManagementServiceOverrideForTesting browser_management{
+        policy::ManagementServiceFactory::GetForPlatform(),
+        policy::EnterpriseManagementAuthority::COMPUTER_LOCAL};
+
+    EXPECT_FALSE(getter->IsIpProtectionEnabled());
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostBrowserTest,
+                       NotDisabledForManagedDogfoodDevice) {
+  IpProtectionCoreHost* getter =
+      IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(getter);
+
+  {
+    policy::ScopedManagementServiceOverrideForTesting browser_management{
+        policy::ManagementServiceFactory::GetForPlatform(),
+        policy::EnterpriseManagementAuthority::COMPUTER_LOCAL};
+
+    EXPECT_FALSE(getter->IsIpProtectionEnabled());
+
+    SetIsLikelyDogfoodClient(true);
+    EXPECT_TRUE(getter->IsIpProtectionEnabled());
+
+    SetIsLikelyDogfoodClient(false);
+  }
+}
+#endif
+
 class IpProtectionBrowserTestIncognitoOnlyModeDisabled
     : public IpProtectionCoreHostBrowserTest {
  public:
@@ -457,7 +518,7 @@
   CreateIncognitoNetworkContextAndInterceptors();
   // Simulate logging the user out, which should make the provider indicate that
   // `TryGetAuthTokens()` calls should not be retried on the next request.
-#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_CHROMEOS_LACROS)
+#if !BUILDFLAG(IS_CHROMEOS)
   ClearPrimaryAccount();
 #else
   IpProtectionCoreHost* provider =
@@ -520,7 +581,7 @@
   // to notify the network contexts. No need to flush the remotes after, since
   // the messages generated will be in order with the
   // `VerifyIpProtectionCoreHostForTesting()` messages used below.
-#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_CHROMEOS_LACROS)
+#if !BUILDFLAG(IS_CHROMEOS)
   MakePrimaryAccountAvailable();
 #else
   provider->OnPrimaryAccountChanged(signin::PrimaryAccountChangeEvent(
@@ -574,12 +635,19 @@
 
 IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostUserSettingBrowserTest,
                        OnIpProtectionEnabledChanged) {
-  CreateIncognitoNetworkContextAndInterceptors();
-
   IpProtectionCoreHost* provider =
       IpProtectionCoreHostFactory::GetForProfile(GetProfile());
   ASSERT_TRUE(provider);
 
+  // If this test is running on a device that is already managed, we expect IP
+  // Protection to be disabled. Verify this and then skip the rest of the test.
+  if (provider->ShouldDisableIpProtectionForManagedForTesting()) {
+    EXPECT_FALSE(provider->IsIpProtectionEnabled());
+    return;
+  }
+
+  CreateIncognitoNetworkContextAndInterceptors();
+
   // Simulate the user disabling the IP Protection setting.
   GetProfile()->GetPrefs()->SetBoolean(prefs::kIpProtectionEnabled, false);
   provider->OnIpProtectionEnabledChanged();
@@ -690,7 +758,27 @@
     provider_.UpdateChromePolicy(policies);
   }
 
-  void UnsetIpProtectionEnterprisePolicyValue() {
+  // Enable an unrelated policy (currently BuiltInDnsClientEnabled, chosen
+  // arbitrarily) that will cause the browser to be considered managed. Note
+  // that this method will unset any previously set IP Protection enterprise
+  // policy values when called.
+  void EnableUnrelatedPolicy() {
+    policy::PolicyMap policies;
+    policies.Set(policy::key::kBuiltInDnsClientEnabled,
+                 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
+                 policy::POLICY_SOURCE_CLOUD, base::Value(true), nullptr);
+    provider_.UpdateChromePolicy(policies);
+  }
+
+#if BUILDFLAG(IS_CHROMEOS)
+  void SetChromeOSEnterpriseUserDefaults() {
+    policy::PolicyMap policies;
+    policy::SetEnterpriseUsersDefaults(&policies);
+    provider_.UpdateChromePolicy(policies);
+  }
+#endif
+
+  void UnsetPolicyValues() {
     policy::PolicyMap policies;
     provider_.UpdateChromePolicy(policies);
   }
@@ -707,7 +795,14 @@
                        IpProtectionEnterprisePolicyDisableAndEnable) {
   IpProtectionCoreHost* provider =
       IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(provider);
 
+  // If this test is running on a device that is already managed, we expect IP
+  // Protection to be disabled. Verify this and then skip the rest of the test.
+  if (provider->ShouldDisableIpProtectionForManagedForTesting()) {
+    EXPECT_FALSE(provider->IsIpProtectionEnabled());
+    return;
+  }
   ASSERT_TRUE(provider->IsIpProtectionEnabled());
 
   // Setting the enterprise policy value to "Disabled" should change the default
@@ -728,10 +823,89 @@
                        IpProtectionEnterprisePolicyUnsetAfterSet) {
   IpProtectionCoreHost* provider =
       IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(provider);
+
+  // The initial state likely indicates that IP protection is enabled, unless
+  // the machine this test is running on is managed.
+  bool initial_state = provider->IsIpProtectionEnabled();
 
   UpdateIpProtectionEnterpisePolicyValue(/*enabled=*/false);
   EXPECT_FALSE(provider->IsIpProtectionEnabled());
 
-  UnsetIpProtectionEnterprisePolicyValue();
+  UnsetPolicyValues();
+  EXPECT_EQ(provider->IsIpProtectionEnabled(), initial_state);
+}
+
+// If the browser is considered managed and IP Protection isn't enabled via
+// enterprise policy, IP Protection should be disabled. For ChromeOS, setting a
+// user policy isn't enough to make the profile/device be considered managed,
+// but instead a default value will be applied to managed users (via the
+// "default_for_enterprise_users" policy setting).
+#if !BUILDFLAG(IS_CHROMEOS)
+IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostPolicyBrowserTest,
+                       DisabledForManagedBrowser) {
+  IpProtectionCoreHost* provider =
+      IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(provider);
+
+  // If this test is running on a device that is already managed, we expect IP
+  // Protection to be disabled. Verify this and then skip the rest of the test.
+  if (provider->ShouldDisableIpProtectionForManagedForTesting()) {
+    EXPECT_FALSE(provider->IsIpProtectionEnabled());
+    return;
+  }
+  ASSERT_TRUE(provider->IsIpProtectionEnabled());
+
+  EnableUnrelatedPolicy();
+
+  EXPECT_FALSE(provider->IsIpProtectionEnabled());
+
+  UnsetPolicyValues();
   EXPECT_TRUE(provider->IsIpProtectionEnabled());
 }
+IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostPolicyBrowserTest,
+                       NotDisabledForManagedDogfoodBrowser) {
+  IpProtectionCoreHost* provider =
+      IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(provider);
+
+  EnableUnrelatedPolicy();
+  EXPECT_FALSE(provider->IsIpProtectionEnabled());
+
+  SetIsLikelyDogfoodClient(true);
+  EXPECT_TRUE(provider->IsIpProtectionEnabled());
+
+  UnsetPolicyValues();
+  SetIsLikelyDogfoodClient(false);
+}
+#else
+IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostPolicyBrowserTest,
+                       DisabledForEnterpriseUser) {
+  IpProtectionCoreHost* provider =
+      IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(provider);
+  ASSERT_TRUE(provider->IsIpProtectionEnabled());
+
+  SetChromeOSEnterpriseUserDefaults();
+  EXPECT_FALSE(provider->IsIpProtectionEnabled());
+
+  UnsetPolicyValues();
+  ASSERT_TRUE(provider->IsIpProtectionEnabled());
+}
+
+IN_PROC_BROWSER_TEST_F(IpProtectionCoreHostPolicyBrowserTest,
+                       NotDisabledForEnterpriseDogfoodUser) {
+  IpProtectionCoreHost* provider =
+      IpProtectionCoreHostFactory::GetForProfile(GetProfile());
+  ASSERT_TRUE(provider);
+
+  SetChromeOSEnterpriseUserDefaults();
+  EXPECT_FALSE(provider->IsIpProtectionEnabled());
+
+  SetIsLikelyDogfoodClient(true);
+  EXPECT_TRUE(provider->IsIpProtectionEnabled());
+
+  UnsetPolicyValues();
+  SetIsLikelyDogfoodClient(false);
+}
+#endif
diff --git a/chrome/browser/ip_protection/ip_protection_core_host_factory.cc b/chrome/browser/ip_protection/ip_protection_core_host_factory.cc
index 5c8410fe..f76b5085 100644
--- a/chrome/browser/ip_protection/ip_protection_core_host_factory.cc
+++ b/chrome/browser/ip_protection/ip_protection_core_host_factory.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ip_protection/ip_protection_core_host_factory.h"
 
+#include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/ip_protection/ip_protection_core_host.h"
 #include "chrome/browser/privacy_sandbox/tracking_protection_settings_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -54,6 +55,7 @@
                                  CreateProfileSelections()) {
   DependsOn(IdentityManagerFactory::GetInstance());
   DependsOn(TrackingProtectionSettingsFactory::GetInstance());
+  DependsOn(policy::ManagementServiceFactory::GetInstance());
 }
 
 IpProtectionCoreHostFactory::~IpProtectionCoreHostFactory() = default;
@@ -65,6 +67,7 @@
   return std::make_unique<IpProtectionCoreHost>(
       IdentityManagerFactory::GetForProfile(profile),
       TrackingProtectionSettingsFactory::GetForProfile(profile),
+      policy::ManagementServiceFactory::GetForProfile(profile),
       profile->GetPrefs(), profile);
 }
 
diff --git a/chrome/browser/ip_protection/ip_protection_core_host_unittest.cc b/chrome/browser/ip_protection/ip_protection_core_host_unittest.cc
index d116504..878fbad 100644
--- a/chrome/browser/ip_protection/ip_protection_core_host_unittest.cc
+++ b/chrome/browser/ip_protection/ip_protection_core_host_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include <optional>
+#include <vector>
 
 #include "base/memory/scoped_refptr.h"
 #include "base/notreached.h"
@@ -22,6 +23,7 @@
 #include "components/ip_protection/common/ip_protection_data_types.h"
 #include "components/ip_protection/common/ip_protection_proxy_config_direct_fetcher.h"
 #include "components/ip_protection/common/mock_blind_sign_auth.h"
+#include "components/policy/core/common/management/management_service.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/privacy_sandbox/privacy_sandbox_features.h"
 #include "components/privacy_sandbox/privacy_sandbox_prefs.h"
@@ -40,6 +42,11 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/status/status.h"
 
+#if BUILDFLAG(IS_CHROMEOS)
+#include "chromeos/ash/components/install_attributes/install_attributes.h"
+#include "chromeos/ash/components/install_attributes/stub_install_attributes.h"
+#endif
+
 using ::ip_protection::BlindSignedAuthToken;
 using ::ip_protection::GeoHint;
 
@@ -102,8 +109,15 @@
             /*is_incognito=*/false);
     auto bsa = std::make_unique<ip_protection::MockBlindSignAuth>();
     bsa_ = bsa.get();
+#if BUILDFLAG(IS_CHROMEOS)
+    install_attributes_ = std::make_unique<ash::StubInstallAttributes>();
+    ash::InstallAttributes::SetForTesting(install_attributes_.get());
+#endif
+    management_service_ = std::make_unique<policy::ManagementService>(
+        std::vector<std::unique_ptr<policy::ManagementStatusProvider>>());
     core_host_ = std::make_unique<IpProtectionCoreHost>(
-        IdentityManager(), tracking_protection_settings_.get(), prefs(),
+        IdentityManager(), tracking_protection_settings_.get(),
+        management_service_.get(), prefs(),
         /*profile=*/nullptr);
     core_host_->SetUpForTesting(test_url_loader_factory_.GetSafeWeakWrapper(),
                                 std::move(bsa));
@@ -127,6 +141,9 @@
     host_content_settings_map_->ShutdownOnUIThread();
     tracking_protection_settings_->Shutdown();
     core_host_->Shutdown();
+#if BUILDFLAG(IS_CHROMEOS)
+    ash::InstallAttributes::ShutdownForTesting();
+#endif
   }
 
   // Get the IdentityManager for this test.
@@ -136,7 +153,7 @@
 
   void SetupAccount() {
     if (primary_account_behavior_ == PrimaryAccountBehavior::kNone) {
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
+#if !BUILDFLAG(IS_CHROMEOS)
       // Simulate a log out event on all platforms except ChromeOS Ash where
       // this is not supported.
       identity_test_env_.ClearPrimaryAccount();
@@ -258,6 +275,10 @@
   sync_preferences::TestingPrefServiceSyncable prefs_;
   std::unique_ptr<privacy_sandbox::TrackingProtectionSettings>
       tracking_protection_settings_;
+#if BUILDFLAG(IS_CHROMEOS)
+  std::unique_ptr<ash::StubInstallAttributes> install_attributes_;
+#endif
+  std::unique_ptr<policy::ManagementService> management_service_;
 
   scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
 
@@ -601,7 +622,7 @@
 
 // No primary account initially but this changes when the account status
 // changes.
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
+#if !BUILDFLAG(IS_CHROMEOS)
 TEST_F(IpProtectionCoreHostTest, AccountLoginTriggersBackoffReset) {
   primary_account_behavior_ = PrimaryAccountBehavior::kNone;
 
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn
index ea3fcc1..fbb44cd2 100644
--- a/chrome/browser/password_manager/android/BUILD.gn
+++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -571,7 +571,6 @@
     "mock_password_sync_controller_delegate_bridge.cc",
     "mock_password_sync_controller_delegate_bridge.h",
     "password_generation_controller_impl_unittest.cc",
-    "password_infobar_utils_unittest.cc",
     "password_manager_android_util_unittest.cc",
     "password_manager_error_message_delegate_unittest.cc",
     "password_manager_eviction_util_unittest.cc",
diff --git a/chrome/browser/password_manager/android/password_generation_controller_impl.cc b/chrome/browser/password_manager/android/password_generation_controller_impl.cc
index e07ac6d..ab468fe 100644
--- a/chrome/browser/password_manager/android/password_generation_controller_impl.cc
+++ b/chrome/browser/password_manager/android/password_generation_controller_impl.cc
@@ -16,13 +16,13 @@
 #include "chrome/browser/keyboard_accessory/android/accessory_sheet_enums.h"
 #include "chrome/browser/keyboard_accessory/android/manual_filling_controller.h"
 #include "chrome/browser/keyboard_accessory/android/password_accessory_controller.h"
-#include "chrome/browser/password_manager/android/password_infobar_utils.h"
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/touch_to_fill/password_manager/password_generation/android/touch_to_fill_password_generation_bridge_impl.h"
 #include "chrome/browser/touch_to_fill/password_manager/password_generation/android/touch_to_fill_password_generation_controller.h"
+#include "chrome/browser/ui/passwords/ui_utils.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/password_generation_util.h"
 #include "components/autofill/core/common/signatures.h"
@@ -303,9 +303,9 @@
       create_touch_to_fill_generation_controller_.Run();
   Profile* profile =
       Profile::FromBrowserContext(GetWebContents().GetBrowserContext());
-  std::string account = password_manager::GetDisplayableAccountName(
-      SyncServiceFactory::GetForProfile(profile),
-      IdentityManagerFactory::GetForProfile(profile));
+  std::string account =
+      GetDisplayableAccountName(SyncServiceFactory::GetForProfile(profile),
+                                IdentityManagerFactory::GetForProfile(profile));
   if (!touch_to_fill_generation_controller_->ShowTouchToFill(
           std::move(account), type, client_->GetPrefs())) {
     return false;
diff --git a/chrome/browser/password_manager/android/password_infobar_utils.cc b/chrome/browser/password_manager/android/password_infobar_utils.cc
deleted file mode 100644
index b2ad5f6..0000000
--- a/chrome/browser/password_manager/android/password_infobar_utils.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/password_manager/android/password_infobar_utils.h"
-
-#include <optional>
-
-#include "components/password_manager/core/browser/password_sync_util.h"
-#include "components/signin/public/identity_manager/account_info.h"
-#include "components/signin/public/identity_manager/identity_manager.h"
-
-namespace password_manager {
-
-std::optional<AccountInfo> GetAccountInfoForPasswordMessages(
-    syncer::SyncService* sync_service,
-    signin::IdentityManager* identity_manager) {
-  if (!password_manager::sync_util::HasChosenToSyncPasswords(sync_service)) {
-    return std::nullopt;
-  }
-  CoreAccountId account_id =
-      identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin);
-  return identity_manager->FindExtendedAccountInfoByAccountId(account_id);
-}
-
-std::string GetDisplayableAccountName(
-    syncer::SyncService* sync_service,
-    signin::IdentityManager* identity_manager) {
-  std::optional<AccountInfo> account_info =
-      password_manager::GetAccountInfoForPasswordMessages(sync_service,
-                                                          identity_manager);
-  if (!account_info.has_value()) {
-    return "";
-  }
-  return account_info->CanHaveEmailAddressDisplayed()
-             ? account_info.value().email
-             : account_info.value().full_name;
-}
-
-}  // namespace password_manager
diff --git a/chrome/browser/password_manager/android/password_infobar_utils.h b/chrome/browser/password_manager/android/password_infobar_utils.h
deleted file mode 100644
index bb9b9cd..0000000
--- a/chrome/browser/password_manager/android/password_infobar_utils.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// 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_PASSWORD_INFOBAR_UTILS_H_
-#define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_INFOBAR_UTILS_H_
-
-#include "components/signin/public/identity_manager/account_info.h"
-
-namespace signin {
-class IdentityManager;
-}  // namespace signin
-
-namespace syncer {
-class SyncService;
-}  // namespace syncer
-
-namespace password_manager {
-
-std::optional<AccountInfo> GetAccountInfoForPasswordMessages(
-    syncer::SyncService* sync_service,
-    signin::IdentityManager* identity_manager);
-
-std::string GetDisplayableAccountName(
-    syncer::SyncService* sync_service,
-    signin::IdentityManager* identity_manager);
-
-}  // namespace password_manager
-
-#endif  // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_INFOBAR_UTILS_H_
diff --git a/chrome/browser/password_manager/android/save_update_password_message_delegate.cc b/chrome/browser/password_manager/android/save_update_password_message_delegate.cc
index ffc426d..6c078d1 100644
--- a/chrome/browser/password_manager/android/save_update_password_message_delegate.cc
+++ b/chrome/browser/password_manager/android/save_update_password_message_delegate.cc
@@ -19,7 +19,6 @@
 #include "chrome/browser/android/resource_mapper.h"
 #include "chrome/browser/flags/android/chrome_feature_list.h"
 #include "chrome/browser/password_manager/android/access_loss/password_access_loss_warning_bridge_impl.h"
-#include "chrome/browser/password_manager/android/password_infobar_utils.h"
 #include "chrome/browser/password_manager/android/password_manager_android_util.h"
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/profiles/profile.h"
@@ -144,10 +143,9 @@
   Profile* profile =
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
 
-  std::optional<AccountInfo> account_info =
-      password_manager::GetAccountInfoForPasswordMessages(
-          SyncServiceFactory::GetForProfile(profile),
-          IdentityManagerFactory::GetForProfile(profile));
+  std::optional<AccountInfo> account_info = GetAccountInfoForPasswordMessages(
+      SyncServiceFactory::GetForProfile(profile),
+      IdentityManagerFactory::GetForProfile(profile));
   DisplaySaveUpdatePasswordPromptInternal(
       web_contents, std::move(form_to_save), std::move(account_info),
       update_password, password_manager_client);
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.cc
index 66af2d4..1de2a5c 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.cc
@@ -93,8 +93,6 @@
   switch (status) {
     case SearchPrefetchStatus::kNotStarted:
       return "NotStarted";
-    case SearchPrefetchStatus::kInFlight:
-      return "InFlight";
     case SearchPrefetchStatus::kCanBeServed:
       return "CanBeServed";
     case SearchPrefetchStatus::kComplete:
@@ -315,7 +313,7 @@
   }
 
   prefetch_url_ = resource_request->url;
-  SetSearchPrefetchStatus(SearchPrefetchStatus::kInFlight);
+  SetSearchPrefetchStatus(SearchPrefetchStatus::kCanBeServed);
   streaming_url_loader_ =
       base::MakeRefCounted<StreamingSearchPrefetchURLLoader>(
           this, profile, navigation_prefetch_, std::move(resource_request),
@@ -343,7 +341,6 @@
       attempt.SetEligibility(ToPreloadingEligibility(
           ChromePreloadingEligibility::kPrefetchNotStarted));
       return;
-    case SearchPrefetchStatus::kInFlight:
     case SearchPrefetchStatus::kCanBeServed:
     case SearchPrefetchStatus::kComplete:
       break;
@@ -393,10 +390,6 @@
       canonical_search_url_, prerender_url_, prerender_preloading_attempt_);
 }
 
-void SearchPrefetchRequest::MarkPrefetchAsServable() {
-  SetSearchPrefetchStatus(SearchPrefetchStatus::kCanBeServed);
-}
-
 void SearchPrefetchRequest::ResetPrerenderUpgrader() {
   prerender_manager_ = nullptr;
   prerender_preloading_attempt_ = nullptr;
@@ -500,9 +493,6 @@
   static const base::NoDestructor<base::StateTransitions<SearchPrefetchStatus>>
       allowed_transitions(base::StateTransitions<SearchPrefetchStatus>({
           {SearchPrefetchStatus::kNotStarted,
-           {SearchPrefetchStatus::kInFlight}},
-
-          {SearchPrefetchStatus::kInFlight,
            {SearchPrefetchStatus::kCanBeServed,
             SearchPrefetchStatus::kRequestFailed}},
 
@@ -531,11 +521,6 @@
       // PreloadingTriggeringOutcome as kUnspecified. The exact reason why
       // prefetch is not started is recorded in PreloadingEligibility.
       return;
-    case SearchPrefetchStatus::kInFlight:
-      // Once prefetch started set TriggeringOutcome to kRunning.
-      SetPrefetchAttemptTriggeringOutcome(
-          content::PreloadingTriggeringOutcome::kRunning);
-      return;
     case SearchPrefetchStatus::kCanBeServed:
       // Mark prefetch to ready, once we can serve prefetch. With
       // PreloadingAttempt, ready means the attempt can be used when needed.
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.h b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.h
index a8042d2..7d66b30b 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.h
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.h
@@ -35,8 +35,9 @@
   // fetcher (as of now).
   kNotStarted = 0,
 
-  // The request is on the network and may move to any other state.
-  kInFlight = 1,
+  // The request is on the network and may move to any other state. Removed
+  // after https://crbug.com/40217275 is implemented.
+  // kInFlight = 1,
 
   // The request can be served to the navigation stack, but may still encounter
   // errors and move to |kRequestFailed| or it may complete and move to
@@ -111,9 +112,6 @@
   // Called on the URL loader receives servable response.
   void OnServableResponseCodeReceived();
 
-  // Update the status when the request is serveable.
-  void MarkPrefetchAsServable();
-
   // Update the status when the request is complete.
   void MarkPrefetchAsComplete();
 
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service.cc
index 8c320cb..30dc0955 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service.cc
@@ -540,14 +540,6 @@
 
   auto status = iter->second->current_status();
 
-  if (status == SearchPrefetchStatus::kInFlight) {
-    recorder.reason_ = SearchPrefetchServingReason::kRequestInFlightNotReady;
-    // Set the failure reason when prefetch is not served.
-    iter->second->SetPrefetchAttemptFailureReason(ToPreloadingFailureReason(
-        SearchPrefetchServingReason::kRequestInFlightNotReady));
-    return {};
-  }
-
   bool is_servable =
       status == SearchPrefetchStatus::kComplete ||
       status == SearchPrefetchStatus::kCanBeServed;
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc b/chrome/browser/preloading/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc
index 819c796..c7496ec7 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc
@@ -281,7 +281,6 @@
       network_traffic_annotation_(network_traffic_annotation),
       navigation_prefetch_(navigation_prefetch) {
   CHECK(streaming_prefetch_request_);
-  streaming_prefetch_request_->MarkPrefetchAsServable();
 
   // Maybe proxies the prefetch URL loader via the Extension Web Request API, so
   // that extensions can be informed of any prefetches.
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragment.java
index ed4ae65..643ab77 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragment.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragment.java
@@ -122,6 +122,7 @@
     }
 
     private void onPrivacyPolicyLinkClicked() {
+        RecordUserAction.record("Settings.PrivacySandbox.AdMeasurement.PrivacyPolicyLinkClicked");
         getCustomTabLauncher().openUrlInCct(getContext(), UrlConstants.GOOGLE_PRIVACY_POLICY);
     }
 }
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragment.java
index 9b81965..77d379f 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragment.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragment.java
@@ -199,6 +199,8 @@
     }
 
     private void onPrivacyPolicyLinkClicked(View unused) {
+        RecordUserAction.record(
+                "Settings.PrivacySandbox.SiteSuggestedAds.PrivacyPolicyLinkClicked");
         getCustomTabLauncher().openUrlInCct(getContext(), UrlConstants.GOOGLE_PRIVACY_POLICY);
     }
 
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogConsentEEA.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogConsentEEA.java
index 434be617..be2005f 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogConsentEEA.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogConsentEEA.java
@@ -182,9 +182,11 @@
     public void onClick(View view) {
         int id = view.getId();
         if (id == R.id.ack_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.ConsentDialog.AckClicked");
             mPrivacySandboxBridge.promptActionOccurred(PromptAction.CONSENT_ACCEPTED, mSurfaceType);
             dismissAndMaybeShowNotice();
         } else if (id == R.id.no_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.ConsentDialog.NoClicked");
             mPrivacySandboxBridge.promptActionOccurred(PromptAction.CONSENT_DECLINED, mSurfaceType);
             dismissAndMaybeShowNotice();
         } else if (id == R.id.more_button) {
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java
index d7bc036..13fe6cf5 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java
@@ -11,6 +11,7 @@
 import android.widget.LinearLayout;
 import android.widget.ScrollView;
 
+import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.components.browser_ui.widget.ChromeDialog;
 import org.chromium.ui.widget.ButtonCompat;
 import org.chromium.ui.widget.CheckableImageView;
@@ -91,10 +92,12 @@
     public void onClick(View view) {
         int id = view.getId();
         if (id == R.id.ack_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.NoticeEeaDialog.AckClicked");
             mPrivacySandboxBridge.promptActionOccurred(
                     PromptAction.NOTICE_ACKNOWLEDGE, mSurfaceType);
             dismiss();
         } else if (id == R.id.settings_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.NoticeEeaDialog.OpenSettingsClicked");
             mPrivacySandboxBridge.promptActionOccurred(
                     PromptAction.NOTICE_OPEN_SETTINGS, mSurfaceType);
             dismiss();
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeROW.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeROW.java
index 13ac8fc..2947258a 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeROW.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeROW.java
@@ -191,10 +191,12 @@
     public void onClick(View view) {
         int id = view.getId();
         if (id == R.id.ack_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.NoticeRowDialog.AckClicked");
             mPrivacySandboxBridge.promptActionOccurred(
                     PromptAction.NOTICE_ACKNOWLEDGE, mSurfaceType);
             dismiss();
         } else if (id == R.id.settings_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.NoticeRowDialog.OpenSettingsClicked");
             mPrivacySandboxBridge.promptActionOccurred(
                     PromptAction.NOTICE_OPEN_SETTINGS, mSurfaceType);
             dismiss();
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeRestricted.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeRestricted.java
index 909c3ff..46a8bf604 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeRestricted.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeRestricted.java
@@ -11,6 +11,7 @@
 import android.widget.LinearLayout;
 import android.widget.ScrollView;
 
+import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.browser.settings.SettingsNavigationFactory;
 import org.chromium.components.browser_ui.widget.ChromeDialog;
 import org.chromium.ui.widget.ButtonCompat;
@@ -78,10 +79,13 @@
     public void onClick(View view) {
         int id = view.getId();
         if (id == R.id.ack_button) {
+            RecordUserAction.record("Settings.PrivacySandbox.RestrictedNoticeDialog.AckClicked");
             mPrivacySandboxBridge.promptActionOccurred(
                     PromptAction.RESTRICTED_NOTICE_ACKNOWLEDGE, mSurfaceType);
             dismiss();
         } else if (id == R.id.settings_button) {
+            RecordUserAction.record(
+                    "Settings.PrivacySandbox.RestrictedNoticeDialog.OpenSettingsClicked");
             mPrivacySandboxBridge.promptActionOccurred(
                     PromptAction.RESTRICTED_NOTICE_OPEN_SETTINGS, mSurfaceType);
             dismiss();
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragment.java
index f5f3c10e..f949f10 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragment.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragment.java
@@ -172,6 +172,7 @@
     }
 
     private void onPrivacyPolicyLinkClicked(View unused) {
+        RecordUserAction.record("Settings.PrivacySandbox.AdTopics.PrivacyPolicyLinkClicked");
         getCustomTabLauncher().openUrlInCct(getContext(), UrlConstants.GOOGLE_PRIVACY_POLICY);
     }
 
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java
index 5d07949..217be875 100644
--- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java
+++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java
@@ -18,9 +18,12 @@
 import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.hasItems;
 import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import static org.chromium.ui.test.util.ViewUtils.clickOnClickableSpan;
+
 import android.view.View;
 
 import androidx.annotation.StringRes;
@@ -152,9 +155,8 @@
 
     @Test
     @SmallTest
-    @Feature({"RenderTest"})
     @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS)
-    public void adMeasurementDisclaimerIsDisplayed() throws IOException {
+    public void adMeasurementDisclaimerMetrics() throws IOException {
         setAdMeasurementPrefEnabled(true);
         startAdMeasuremenSettings();
         String disclaimerText =
@@ -165,6 +167,11 @@
         String matcherText = disclaimerText.replaceAll("<link>|</link>", "");
         scrollToSetting(withText(matcherText));
         onView(withText(matcherText)).check(matches(isDisplayed()));
+        onView(withText(matcherText)).perform(clickOnClickableSpan(0));
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.AdMeasurement.PrivacyPolicyLinkClicked"));
     }
 
     @Test
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragmentTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragmentTest.java
index 0a27c9d..95a8c92 100644
--- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragmentTest.java
+++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FledgeFragmentTest.java
@@ -21,6 +21,7 @@
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.hasItems;
 import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -248,6 +249,27 @@
 
     @Test
     @SmallTest
+    @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS)
+    public void siteSuggestedAdsDisclaimerMetrics() throws IOException {
+        setFledgePrefEnabled(true);
+        startFledgeSettings();
+        String disclaimerText =
+                mSettingsActivityTestRule
+                        .getActivity()
+                        .getResources()
+                        .getString(R.string.settings_site_suggested_ads_page_disclaimer_clank);
+        String matcherText = disclaimerText.replaceAll("<link>|</link>", "");
+        scrollToSetting(withText(matcherText));
+        onView(withText(matcherText)).check(matches(isDisplayed()));
+        onView(withText(matcherText)).perform(clickOnClickableSpan(0));
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.SiteSuggestedAds.PrivacyPolicyLinkClicked"));
+    }
+
+    @Test
+    @SmallTest
     @Feature({"RenderTest"})
     @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS)
     public void renderFledgePageOffV2() throws IOException {
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java
index d8cc4b8..f01c1d0 100644
--- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java
+++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java
@@ -731,6 +731,10 @@
         // Accept the consent and verify it worked correctly.
         tryClickOn(withId(R.id.ack_button));
         assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.ConsentDialog.AckClicked"));
+        assertEquals(
                 "Last dialog action",
                 PromptAction.CONSENT_ACCEPTED,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
@@ -769,6 +773,10 @@
                 PromptAction.CONSENT_DECLINED,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
         onView(withId(R.id.privacy_sandbox_consent_eea_dropdown)).check(doesNotExist());
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.ConsentDialog.NoClicked"));
     }
 
     @Test
@@ -838,6 +846,11 @@
                 PromptAction.NOTICE_ACKNOWLEDGE,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
         onView(withId(R.id.privacy_sandbox_notice_title)).check(doesNotExist());
+        // check for notice ack here
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.NoticeEeaDialog.AckClicked"));
 
         launchDialog();
         // Click on the expanding section and verify it worked correctly.
@@ -868,6 +881,10 @@
                 "Last dialog action",
                 PromptAction.NOTICE_OPEN_SETTINGS,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.NoticeEeaDialog.OpenSettingsClicked"));
         Mockito.verify(mSettingsNavigation)
                 .startSettings(
                         any(Context.class),
@@ -893,6 +910,10 @@
                 PromptAction.NOTICE_ACKNOWLEDGE,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
         onView(withId(R.id.privacy_sandbox_notice_title)).check(doesNotExist());
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.NoticeRowDialog.AckClicked"));
 
         launchDialog();
         // Click on the expanding section and verify it worked correctly.
@@ -917,6 +938,10 @@
                 "Last dialog action",
                 PromptAction.NOTICE_OPEN_SETTINGS,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.NoticeRowDialog.OpenSettingsClicked"));
         onView(withId(R.id.privacy_sandbox_notice_title)).check(doesNotExist());
         Mockito.verify(mSettingsNavigation)
                 .startSettings(
@@ -943,6 +968,11 @@
                 PromptAction.RESTRICTED_NOTICE_ACKNOWLEDGE,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
         onView(withId(R.id.privacy_sandbox_notice_title)).check(doesNotExist());
+        // check for histogram here
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.RestrictedNoticeDialog.AckClicked"));
 
         // Click on the settings button and verify it worked correctly.
         launchDialog();
@@ -951,6 +981,10 @@
                 "Last dialog action",
                 PromptAction.RESTRICTED_NOTICE_OPEN_SETTINGS,
                 (int) mFakePrivacySandboxBridge.getLastPromptAction());
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.RestrictedNoticeDialog.OpenSettingsClicked"));
         onView(withId(R.id.privacy_sandbox_notice_title)).check(doesNotExist());
         Mockito.verify(mSettingsNavigation)
                 .startSettings(any(Context.class), eq(AdMeasurementFragment.class));
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragmentTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragmentTest.java
index 385fd56..7361463 100644
--- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragmentTest.java
+++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/TopicsFragmentTest.java
@@ -21,6 +21,7 @@
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.hasItems;
 import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -32,6 +33,7 @@
 import android.view.View;
 
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.espresso.contrib.RecyclerViewActions;
 import androidx.test.filters.SmallTest;
 
 import org.hamcrest.Matcher;
@@ -60,6 +62,7 @@
 import org.chromium.components.prefs.PrefService;
 import org.chromium.components.user_prefs.UserPrefs;
 import org.chromium.ui.test.util.RenderTestRule;
+import org.chromium.ui.test.util.ViewUtils;
 
 import java.io.IOException;
 
@@ -200,6 +203,28 @@
 
     @Test
     @SmallTest
+    @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS)
+    public void adTopicsDisclaimerMetrics() throws IOException {
+        setTopicsPrefEnabled(true);
+        startTopicsSettings();
+        String disclaimerText =
+                mSettingsActivityTestRule
+                        .getActivity()
+                        .getResources()
+                        .getString(R.string.settings_ad_topics_page_disclaimer_clank);
+        String matcherText = disclaimerText.replaceAll("<link>|</link>", "");
+        ViewUtils.onViewWaiting(withId(R.id.recycler_view))
+                .perform(RecyclerViewActions.scrollTo(hasDescendant(withText(matcherText))));
+        onView(withText(matcherText)).check(matches(isDisplayed()));
+        onView(withText(matcherText)).perform(clickOnClickableSpan(0));
+        assertEquals(
+                1,
+                mUserActionTester.getActionCount(
+                        "Settings.PrivacySandbox.AdTopics.PrivacyPolicyLinkClicked"));
+    }
+
+    @Test
+    @SmallTest
     @Feature({"RenderTest"})
     @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS)
     public void testRenderTopicsOffV2() throws IOException {
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.h b/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
index 10b99fb4..fc948248 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
@@ -189,6 +189,30 @@
     kMaxValue = kNoticeShownToGuardian,
   };
 
+  // Contains the possible states of the prompt start up states for m1.
+  // LINT.IfChange(SettingsPrivacySandboxPromptStartupState)
+  enum class PromptStartupState {
+    kEEAConsentPromptWaiting = 0,
+    kEEANoticePromptWaiting = 1,
+    kROWNoticePromptWaiting = 2,
+    kEEAFlowCompletedWithTopicsAccepted = 3,
+    kEEAFlowCompletedWithTopicsDeclined = 4,
+    kROWNoticeFlowCompleted = 5,
+    kPromptNotShownDueToPrivacySandboxRestricted = 6,
+    kPromptNotShownDueTo3PCBlocked = 7,
+    kPromptNotShownDueToTrialConsentDeclined = 8,
+    kPromptNotShownDueToTrialsDisabledAfterNoticeShown = 9,
+    kPromptNotShownDueToManagedState = 10,
+    kRestrictedNoticeNotShownDueToNoticeShownToGuardian = 11,
+    kRestrictedNoticePromptWaiting = 12,
+    kRestrictedNoticeFlowCompleted = 13,
+    kRestrictedNoticeNotShownDueToFullNoticeAcknowledged = 14,
+    kWaitingForGraduationRestrictedNoticeFlowNotCompleted = 15,
+    kWaitingForGraduationRestrictedNoticeFlowCompleted = 16,
+    kMaxValue = kWaitingForGraduationRestrictedNoticeFlowCompleted,
+  };
+  // LINT.ThenChange(//tools/metrics/histograms/metadata/settings/enums.xml:SettingsPrivacySandboxPromptStartupState)
+
   // Returns whether |url| is suitable to display the Privacy Sandbox prompt
   // over. Only about:blank and certain chrome:// URLs are considered
   // suitable.
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc
index e633d6ed..2426981 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc
@@ -77,6 +77,7 @@
 
 using PromptAction = ::PrivacySandboxService::PromptAction;
 using SurfaceType = ::PrivacySandboxService::SurfaceType;
+using PromptStartupState = ::PrivacySandboxService::PromptStartupState;
 using NoticeQueueState = ::PrivacySandboxService::NoticeQueueState;
 using FakeNoticePromptSuppressionReason =
     ::PrivacySandboxService::FakeNoticePromptSuppressionReason;
@@ -1238,6 +1239,20 @@
       prefs::kPrivacySandboxRelatedWebsiteSetsEnabled);
 }
 
+void PrivacySandboxServiceImpl::RecordPromptStartupStateHistograms(
+    PromptStartupState state) {
+  std::string profile_bucket = privacy_sandbox::GetProfileBucketName(profile_);
+
+  if (!profile_bucket.empty()) {
+    base::UmaHistogramEnumeration(
+        base::StrCat({"Settings.PrivacySandbox.", profile_bucket,
+                      ".PromptStartupState"}),
+        state);
+    base::UmaHistogramEnumeration("Settings.PrivacySandbox.PromptStartupState",
+                                  state);
+  }
+}
+
 base::flat_map<net::SchemefulSite, net::SchemefulSite>
 PrivacySandboxServiceImpl::GetSampleRelatedWebsiteSets() const {
   if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get() &&
@@ -1386,9 +1401,6 @@
       "Settings.PrivacySandbox.AdMeasurement.Enabled",
       pref_service_->GetBoolean(prefs::kPrivacySandboxM1AdMeasurementEnabled));
 
-  const std::string privacy_sandbox_prompt_startup_histogram =
-      "Settings.PrivacySandbox.PromptStartupState";
-
   const bool user_reported_restricted =
       pref_service_->GetBoolean(prefs::kPrivacySandboxM1Restricted);
   const bool user_is_currently_unrestricted =
@@ -1406,44 +1418,38 @@
     }
 
     case PromptSuppressedReason::kRestricted: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kPromptNotShownDueToPrivacySandboxRestricted);
       return;
     }
 
     case PromptSuppressedReason::kThirdPartyCookiesBlocked: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kPromptNotShownDueTo3PCBlocked);
       return;
     }
 
     case PromptSuppressedReason::kTrialsConsentDeclined: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kPromptNotShownDueToTrialConsentDeclined);
       return;
     }
 
     case PromptSuppressedReason::kTrialsDisabledAfterNotice: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::
               kPromptNotShownDueToTrialsDisabledAfterNoticeShown);
       return;
     }
 
     case PromptSuppressedReason::kPolicy: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kPromptNotShownDueToManagedState);
       return;
     }
 
     case PromptSuppressedReason::kEEAFlowCompletedBeforeRowMigration: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           topics_enabled
               ? PromptStartupState::kEEAFlowCompletedWithTopicsAccepted
               : PromptStartupState::kEEAFlowCompletedWithTopicsDeclined);
@@ -1452,8 +1458,7 @@
 
     case PromptSuppressedReason::
         kROWFlowCompletedAndTopicsDisabledBeforeEEAMigration: {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kROWNoticeFlowCompleted);
       return;
     }
@@ -1462,8 +1467,7 @@
       // Check for users waiting for graduation: If a user was ever reported as
       // restricted and is currently unrestricted it means they are ready for
       // graduation.
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           user_reported_restricted && user_is_currently_unrestricted
               ? PromptStartupState::
                     kWaitingForGraduationRestrictedNoticeFlowNotCompleted
@@ -1478,8 +1482,7 @@
 
   // Check if prompt was suppressed implicitly.
   if (IsM1PrivacySandboxEffectivelyManaged(pref_service_)) {
-    base::UmaHistogramEnumeration(
-        privacy_sandbox_prompt_startup_histogram,
+    RecordPromptStartupStateHistograms(
         PromptStartupState::kPromptNotShownDueToManagedState);
     return;
   }
@@ -1491,8 +1494,7 @@
   // restricted and is currently unrestricted it means they are ready for
   // graduation.
   if (user_reported_restricted && user_is_currently_unrestricted) {
-    base::UmaHistogramEnumeration(
-        privacy_sandbox_prompt_startup_histogram,
+    RecordPromptStartupStateHistograms(
         restricted_notice_acknowledged
             ? PromptStartupState::
                   kWaitingForGraduationRestrictedNoticeFlowCompleted
@@ -1514,15 +1516,13 @@
     // Acknowledgement of any of the prompt types implies acknowledgement of the
     // restricted notice as well.
     if (row_notice_acknowledged || eaa_notice_acknowledged) {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::
               kRestrictedNoticeNotShownDueToFullNoticeAcknowledged);
 
       return;
     }
-    base::UmaHistogramEnumeration(
-        privacy_sandbox_prompt_startup_histogram,
+    RecordPromptStartupStateHistograms(
         restricted_notice_acknowledged
             ? PromptStartupState::kRestrictedNoticeFlowCompleted
             : PromptStartupState::kRestrictedNoticePromptWaiting);
@@ -1534,8 +1534,7 @@
     // Consent decision not made
     if (!pref_service_->GetBoolean(
             prefs::kPrivacySandboxM1ConsentDecisionMade)) {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kEEAConsentPromptWaiting);
       return;
     }
@@ -1544,14 +1543,12 @@
 
     // Notice Acknowledged
     if (eaa_notice_acknowledged) {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           topics_enabled
               ? PromptStartupState::kEEAFlowCompletedWithTopicsAccepted
               : PromptStartupState::kEEAFlowCompletedWithTopicsDeclined);
     } else {
-      base::UmaHistogramEnumeration(
-          privacy_sandbox_prompt_startup_histogram,
+      RecordPromptStartupStateHistograms(
           PromptStartupState::kEEANoticePromptWaiting);
     }
     return;
@@ -1559,8 +1556,7 @@
 
   // ROW
   if (privacy_sandbox::IsNoticeRequired()) {
-    base::UmaHistogramEnumeration(
-        privacy_sandbox_prompt_startup_histogram,
+    RecordPromptStartupStateHistograms(
         row_notice_acknowledged ? PromptStartupState::kROWNoticeFlowCompleted
                                 : PromptStartupState::kROWNoticePromptWaiting);
     return;
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h
index 3115697..d176bbc 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h
@@ -283,33 +283,6 @@
     kMaxValue = kNoPromptRequiredDisabled,
   };
 
-  // Contains the possible states of the prompt start up states for m1.
-  // Must be kept in sync with SettingsPrivacySandboxPromptStartupState in
-  // histograms/enums.xml
-  enum class PromptStartupState {
-    kEEAConsentPromptWaiting = 0,
-    kEEANoticePromptWaiting = 1,
-    kROWNoticePromptWaiting = 2,
-    kEEAFlowCompletedWithTopicsAccepted = 3,
-    kEEAFlowCompletedWithTopicsDeclined = 4,
-    kROWNoticeFlowCompleted = 5,
-    kPromptNotShownDueToPrivacySandboxRestricted = 6,
-    kPromptNotShownDueTo3PCBlocked = 7,
-    kPromptNotShownDueToTrialConsentDeclined = 8,
-    kPromptNotShownDueToTrialsDisabledAfterNoticeShown = 9,
-    kPromptNotShownDueToManagedState = 10,
-    kRestrictedNoticeNotShownDueToNoticeShownToGuardian = 11,
-    kRestrictedNoticePromptWaiting = 12,
-    kRestrictedNoticeFlowCompleted = 13,
-    kRestrictedNoticeNotShownDueToFullNoticeAcknowledged = 14,
-    kWaitingForGraduationRestrictedNoticeFlowNotCompleted = 15,
-    kWaitingForGraduationRestrictedNoticeFlowCompleted = 16,
-
-    // Add values above this line with a corresponding label in
-    // tools/metrics/histograms/enums.xml
-    kMaxValue = kWaitingForGraduationRestrictedNoticeFlowCompleted,
-  };
-
   // Helper function to log first party sets state.
   void RecordFirstPartySetsStateHistogram(FirstPartySetsState state);
 
@@ -401,6 +374,10 @@
   // Record user action metrics based on the |action|.
   void RecordPromptActionMetrics(PrivacySandboxService::PromptAction action);
 
+  // Record user startup state metrics on both client and profile level.
+  void RecordPromptStartupStateHistograms(
+      PrivacySandboxService::PromptStartupState state);
+
   // Called when the Topics preference is changed.
   void OnTopicsPrefChanged();
 
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
index cb198d9..da45c8c 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
@@ -2352,6 +2352,9 @@
   base::HistogramTester histogram_tester;
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  // TODO(crbug.com/385345006): Add support for multi profile testing.
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
                       static_cast<int>(PromptSuppressedReason::kRestricted));
@@ -2361,6 +2364,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kPromptNotShownDueToPrivacySandboxRestricted),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kPromptNotShownDueToPrivacySandboxRestricted),
+      /*expected_count=*/1);
 
   prefs()->SetInteger(
       prefs::kPrivacySandboxM1PromptSuppressed,
@@ -2371,6 +2379,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kPromptNotShownDueTo3PCBlocked),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kPromptNotShownDueTo3PCBlocked),
+      /*expected_count=*/1);
 
   prefs()->SetInteger(
       prefs::kPrivacySandboxM1PromptSuppressed,
@@ -2381,6 +2394,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kPromptNotShownDueToTrialConsentDeclined),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kPromptNotShownDueToTrialConsentDeclined),
+      /*expected_count=*/1);
 
   prefs()->SetInteger(
       prefs::kPrivacySandboxM1PromptSuppressed,
@@ -2391,6 +2409,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kPromptNotShownDueToTrialsDisabledAfterNoticeShown),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kPromptNotShownDueToTrialsDisabledAfterNoticeShown),
+      /*expected_count=*/1);
 
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
                       static_cast<int>(PromptSuppressedReason::kPolicy));
@@ -2400,6 +2423,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kPromptNotShownDueToManagedState),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kPromptNotShownDueToManagedState),
+      /*expected_count=*/1);
 
   prefs()->SetInteger(
       prefs::kPrivacySandboxM1PromptSuppressed,
@@ -2410,6 +2438,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kRestrictedNoticeNotShownDueToNoticeShownToGuardian),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kRestrictedNoticeNotShownDueToNoticeShownToGuardian),
+      /*expected_count=*/1);
 }
 
 TEST_F(PrivacySandboxServiceTest,
@@ -2417,6 +2450,8 @@
   base::HistogramTester histogram_tester;
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   // Ensure prompt not suppressed.
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
@@ -2431,6 +2466,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kPromptNotShownDueToManagedState),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kPromptNotShownDueToManagedState),
+      /*expected_count=*/1);
 }
 
 TEST_F(PrivacySandboxServiceTest,
@@ -2438,6 +2478,8 @@
   base::HistogramTester histogram_tester;
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   // Ensure prompt not suppressed.
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
@@ -2463,6 +2505,12 @@
                            kEEAConsentPromptWaiting),
       /*expected_count=*/1);
 
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kEEAConsentPromptWaiting),
+      /*expected_count=*/1);
+
   // Consent decision made and notice acknowledged.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1ConsentDecisionMade, true);
   prefs()->SetBoolean(prefs::kPrivacySandboxM1EEANoticeAcknowledged, true);
@@ -2475,6 +2523,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kEEAFlowCompletedWithTopicsAccepted),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kEEAFlowCompletedWithTopicsAccepted),
+      /*expected_count=*/1);
 
   // With topics disabled.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1TopicsEnabled, false);
@@ -2484,6 +2537,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kEEAFlowCompletedWithTopicsDeclined),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kEEAFlowCompletedWithTopicsDeclined),
+      /*expected_count=*/1);
 
   // Consent decision made but notice was not acknowledged.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1EEANoticeAcknowledged, false);
@@ -2493,6 +2551,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kEEANoticePromptWaiting),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kEEANoticePromptWaiting),
+      /*expected_count=*/1);
 }
 
 TEST_F(PrivacySandboxServiceTest,
@@ -2500,7 +2563,8 @@
   base::HistogramTester histogram_tester;
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
-
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
   // Ensure prompt not suppressed.
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
                       static_cast<int>(PromptSuppressedReason::kNone));
@@ -2523,6 +2587,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kROWNoticePromptWaiting),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kROWNoticePromptWaiting),
+      /*expected_count=*/1);
 
   // Notice flow completed.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1RowNoticeAcknowledged, true);
@@ -2532,6 +2601,12 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kROWNoticeFlowCompleted),
       /*expected_count=*/1);
+
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kROWNoticeFlowCompleted),
+      /*expected_count=*/1);
 }
 
 TEST_F(PrivacySandboxServiceTest, RecordPrivacySandbox4StartupMetrics_APIs) {
@@ -3698,6 +3773,8 @@
   base::HistogramTester histogram_tester;
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   // Ensure prompt not suppressed.
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
@@ -3722,6 +3799,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kRestrictedNoticePromptWaiting),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kRestrictedNoticePromptWaiting),
+      /*expected_count=*/1);
 
   // Notice flow completed.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1RestrictedNoticeAcknowledged,
@@ -3732,6 +3814,11 @@
       static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                            kRestrictedNoticeFlowCompleted),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                           kRestrictedNoticeFlowCompleted),
+      /*expected_count=*/1);
 
   // ROW flow completed, which implies no restricted prompt.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1RestrictedNoticeAcknowledged,
@@ -3744,6 +3831,12 @@
           PrivacySandboxServiceImpl::PromptStartupState::
               kRestrictedNoticeNotShownDueToFullNoticeAcknowledged),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(
+          PrivacySandboxServiceImpl::PromptStartupState::
+              kRestrictedNoticeNotShownDueToFullNoticeAcknowledged),
+      /*expected_count=*/1);
 
   // EAA flow completed, which implies no restricted prompt.
   prefs()->SetBoolean(prefs::kPrivacySandboxM1RestrictedNoticeAcknowledged,
@@ -3758,6 +3851,12 @@
       // One when the ROW notice acknowledged pref was set, plus the latest
       // call.
       /*expected_count=*/2);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(
+          PrivacySandboxServiceImpl::PromptStartupState::
+              kRestrictedNoticeNotShownDueToFullNoticeAcknowledged),
+      /*expected_count=*/2);
 }
 
 class PrivacySandboxServiceM1RestrictedNoticeUserCurrentlyUnrestricted
@@ -3788,6 +3887,8 @@
        RecordPrivacySandbox4StartupMetrics_GraduationFlow) {
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   // Ensure prompt not suppressed.
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
@@ -3808,6 +3909,12 @@
             PrivacySandboxServiceImpl::PromptStartupState::
                 kWaitingForGraduationRestrictedNoticeFlowNotCompleted),
         /*expected_count=*/1);
+    histogram_tester.ExpectBucketCount(
+        privacy_sandbox_prompt_startup_histogram_profile_level,
+        static_cast<int>(
+            PrivacySandboxServiceImpl::PromptStartupState::
+                kWaitingForGraduationRestrictedNoticeFlowNotCompleted),
+        /*expected_count=*/1);
   }
 
   // Restricted Notice flow completed
@@ -3826,6 +3933,12 @@
             PrivacySandboxServiceImpl::PromptStartupState::
                 kWaitingForGraduationRestrictedNoticeFlowCompleted),
         /*expected_count=*/1);
+    histogram_tester.ExpectBucketCount(
+        privacy_sandbox_prompt_startup_histogram_profile_level,
+        static_cast<int>(
+            PrivacySandboxServiceImpl::PromptStartupState::
+                kWaitingForGraduationRestrictedNoticeFlowCompleted),
+        /*expected_count=*/1);
   }
 }
 
@@ -3834,6 +3947,8 @@
     RecordPrivacySandbox4StartupMetrics_GraduationFlowWhenNoticeShownToGuardian) {
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   base::HistogramTester histogram_tester;
 
@@ -3852,6 +3967,12 @@
           PrivacySandboxServiceImpl::PromptStartupState::
               kWaitingForGraduationRestrictedNoticeFlowNotCompleted),
       /*expected_count=*/1);
+  histogram_tester.ExpectBucketCount(
+      privacy_sandbox_prompt_startup_histogram_profile_level,
+      static_cast<int>(
+          PrivacySandboxServiceImpl::PromptStartupState::
+              kWaitingForGraduationRestrictedNoticeFlowNotCompleted),
+      /*expected_count=*/1);
 }
 
 class PrivacySandboxServiceM1RestrictedNoticeUserCurrentlyRestricted
@@ -3882,6 +4003,8 @@
        RecordPrivacySandbox4StartupMetrics_GraduationFlow) {
   const std::string privacy_sandbox_prompt_startup_histogram =
       "Settings.PrivacySandbox.PromptStartupState";
+  const std::string privacy_sandbox_prompt_startup_histogram_profile_level =
+      "Settings.PrivacySandbox.Profile_1.PromptStartupState";
 
   // Ensure prompt not suppressed.
   prefs()->SetInteger(prefs::kPrivacySandboxM1PromptSuppressed,
@@ -3901,6 +4024,11 @@
         static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                              kRestrictedNoticeFlowCompleted),
         /*expected_count=*/1);
+    histogram_tester.ExpectBucketCount(
+        privacy_sandbox_prompt_startup_histogram_profile_level,
+        static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                             kRestrictedNoticeFlowCompleted),
+        /*expected_count=*/1);
   }
 
   // Restricted Notice flow NOT completed
@@ -3917,6 +4045,11 @@
         static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
                              kRestrictedNoticePromptWaiting),
         /*expected_count=*/1);
+    histogram_tester.ExpectBucketCount(
+        privacy_sandbox_prompt_startup_histogram_profile_level,
+        static_cast<int>(PrivacySandboxServiceImpl::PromptStartupState::
+                             kRestrictedNoticePromptWaiting),
+        /*expected_count=*/1);
   }
 }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler.js
index e5d6d3d2..e7d4007 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler.js
@@ -79,6 +79,9 @@
     this.lastRootUrl_ = '';
 
     /** @private {boolean} */
+    this.isSubMenuShowing_ = false;
+
+    /** @private {boolean} */
     this.shouldIgnoreDocumentSelectionFromAction_ = false;
 
     /** @private {number?} */
@@ -115,6 +118,8 @@
         EventType.LOAD_COMPLETE, event => this.onLoadComplete_(event));
     this.addListener_(
         EventType.FOCUS_AFTER_MENU_CLOSE, event => this.onMenuEnd_(event));
+    this.addListener_(
+        EventType.MENU_POPUP_START, event => this.onMenuPopupStart_(event));
     this.addListener_(EventType.MENU_START, event => this.onMenuStart_(event));
     this.addListener_(
         EventType.RANGE_VALUE_CHANGED, event => this.onValueChanged_(event));
@@ -139,6 +144,8 @@
         EventType.AUTOFILL_AVAILABILITY_CHANGED,
         this.onAutofillAvailabilityChanged);
     this.addListener_(EventType.ORIENTATION_CHANGED, this.onOrientationChanged);
+    // Called when a child MenuItem is collapsed.
+    this.addListener_(EventType.COLLAPSED, this.onMenuItemCollapsed);
 
     await AutomationObjectConstructorInstaller.init(node);
     const focus = await AsyncUtil.getFocus();
@@ -351,6 +358,10 @@
 
     // Refresh the handler, if needed, now that ChromeVox focus is up to date.
     this.createTextEditHandlerIfNeeded_(node);
+
+    // Reset `isSubMenuShowing_` when a focus changes because focus
+    // changes should automatically close any menus.
+    this.isSubMenuShowing_ = false;
   }
 
   /**
@@ -771,6 +782,24 @@
         ChromeVoxRange.set(range);
       }
     });
+
+    // Reset the state to stop handling a Collapsed event.
+    this.isSubMenuShowing_ = false;
+  }
+
+  /**
+   * @param {!ChromeVoxEvent} event
+   * @private
+   */
+  onMenuPopupStart_(event) {
+    // Handles a MenuPopupStart event only if it's from a menu node. This event
+    // will be fired from a menu node, instead of a menu item node, when its
+    // sub-menu gets expanded.
+    if (!event.target || !AutomationPredicate.menu(event.target)) {
+      return;
+    }
+    // Set a state to start handling a Collapsed event.
+    this.isSubMenuShowing_ = true;
   }
 
   /**
@@ -840,6 +869,20 @@
   }
 
   /**
+   * Handles focus back to a parent MenuItem when its child is collapsed.
+   * @param {!ChromeVoxEvent} evt
+   */
+  onMenuItemCollapsed(evt) {
+    const target = evt.target;
+    if (!this.isSubMenuShowing_ || !AutomationPredicate.menuItem(target) ||
+        !target.state.collapsed || !target.selected) {
+      return;
+    }
+
+    this.onEventDefault(evt);
+  }
+
+  /**
    * Create an editable text handler for the given node if needed.
    * @param {!AutomationNode} node
    * @param {boolean=} opt_onFocus True if called within a focus event
@@ -944,6 +987,10 @@
     }
 
     o.withRichSpeechAndBraille(ChromeVoxRange.current, null, evt.type).go();
+
+    // Reset `isSubMenuShowing_` when a focus changes because focus
+    // changes should automatically close any menus.
+    this.isSubMenuShowing_ = false;
   }
 
   /** Initializes global state for DesktopAutomationHandler. */
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler_test.js
index de037ea..65a9c94 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/event/desktop_automation_handler_test.js
@@ -401,3 +401,98 @@
   assertOutputFlush();
   assertEventDefault();
 });
+
+AX_TEST_F(
+    'ChromeVoxDesktopAutomationHandlerTest',
+    'NoActiononMenuItemCollapsedWhenNoMenuPopupStart', async function() {
+      const site = `
+        <ol role="menu">
+          <li role="menuitem" aria-expanded="false" id="1">
+          </li>
+        </ol>`;
+      const root = await this.runWithLoadedTree(site);
+      const menuItem = root.find({role: RoleType.MENU_ITEM});
+      assertTrue(Boolean(menuItem));
+      const state = {[StateType.COLLAPSED]: false, [StateType.EXPANDED]: true};
+      Object.defineProperty(menuItem, 'state', {get: () => state});
+      Object.defineProperty(menuItem, 'selected', {get: () => true});
+      assertTrue(menuItem.state.expanded);
+      assertFalse(DesktopAutomationInterface.instance.isSubMenuShowing_);
+
+      const assertNoEventDefault = this.prepareToExpectMethodNotCalled(
+          DesktopAutomationInterface.instance, 'onEventDefault');
+      state[StateType.COLLAPSED] = true;
+      state[StateType.EXPANDED] = false;
+      const collapsedEvent =
+          new CustomAutomationEvent(EventType.COLLAPSED, menuItem);
+      this.handler_.onMenuItemCollapsed(collapsedEvent);
+      await this.waitForPendingMethods();
+      assertTrue(menuItem.state.collapsed);
+      assertTrue(menuItem.selected);
+      assertNoEventDefault();
+    });
+
+AX_TEST_F(
+    'ChromeVoxDesktopAutomationHandlerTest',
+    'onMenuItemCollapsedAfterMenuPopupStart', async function() {
+      const site = `
+      <ol role="menu">
+        <li role="menuitem" aria-expanded="false" id="1">
+        </li>
+      </ol>`;
+      const root = await this.runWithLoadedTree(site);
+      const menu = root.find({role: RoleType.MENU});
+      const menuItem = root.find({role: RoleType.MENU_ITEM});
+      assertTrue(Boolean(menu));
+      assertTrue(Boolean(menuItem));
+
+      const state = {[StateType.COLLAPSED]: false, [StateType.EXPANDED]: true};
+      Object.defineProperty(menuItem, 'state', {get: () => state});
+      Object.defineProperty(menuItem, 'selected', {get: () => true});
+      const event = new CustomAutomationEvent(EventType.MENU_POPUP_START, menu);
+      this.handler_.onMenuPopupStart_(event);
+      assertTrue(DesktopAutomationInterface.instance.isSubMenuShowing_);
+
+      const assertEventDefault = this.prepareToExpectMethodCall(
+          DesktopAutomationInterface.instance, 'onEventDefault');
+      state[StateType.COLLAPSED] = true;
+      state[StateType.EXPANDED] = false;
+      const collapsedEvent =
+          new CustomAutomationEvent(EventType.COLLAPSED, menuItem);
+      this.handler_.onMenuItemCollapsed(collapsedEvent);
+      await this.waitForPendingMethods();
+      assertTrue(menuItem.state.collapsed);
+      assertTrue(menuItem.selected);
+      assertEventDefault();
+    });
+
+AX_TEST_F(
+    'ChromeVoxDesktopAutomationHandlerTest',
+    'ResetIsSubMenuShowingStateWhenFocusChanges', async function() {
+      const site = `
+      <ol role="menu">
+        <li role="menuitem" aria-expanded="false" id="1">
+        </li>
+      </ol>
+      <button>`;
+      const root = await this.runWithLoadedTree(site);
+      const menu = root.find({role: RoleType.MENU});
+      const menuItem = root.find({role: RoleType.MENU_ITEM});
+      const button = root.find({role: RoleType.BUTTON});
+      assertTrue(Boolean(menu));
+      assertTrue(Boolean(menuItem));
+      assertTrue(Boolean(button));
+
+      const state = {[StateType.COLLAPSED]: false, [StateType.EXPANDED]: true};
+      Object.defineProperty(menuItem, 'state', {get: () => state});
+      Object.defineProperty(menuItem, 'selected', {get: () => true});
+      const event = new CustomAutomationEvent(EventType.MENU_POPUP_START, menu);
+      this.handler_.onMenuPopupStart_(event);
+      assertTrue(DesktopAutomationInterface.instance.isSubMenuShowing_);
+
+      const focusEvent = new CustomAutomationEvent(EventType.FOCUS, button);
+      this.handler_.onFocus_(focusEvent);
+      await this.waitForPendingMethods();
+
+      assertFalse(DesktopAutomationInterface.instance.isSubMenuShowing_);
+    });
diff --git a/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.ts b/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.ts
index 174e36b..293e02c 100644
--- a/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.ts
+++ b/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.ts
@@ -845,6 +845,9 @@
   export const supportsImageData =
       AutomationPredicate.roles([Role.CANVAS, Role.IMAGE, Role.VIDEO]);
 
+  /** Matches against menu like nodes. */
+  export const menu = AutomationPredicate.roles([Role.MENU, Role.MENU_BAR]);
+
   /** Matches against menu item like nodes. */
   export const menuItem = AutomationPredicate.roles(
       [Role.MENU_ITEM, Role.MENU_ITEM_CHECK_BOX, Role.MENU_ITEM_RADIO]);
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn
index af16cc0..ce3f4692 100644
--- a/chrome/browser/resources/settings/BUILD.gn
+++ b/chrome/browser/resources/settings/BUILD.gn
@@ -204,6 +204,13 @@
     "site_settings_page/site_settings_page.ts",
   ]
 
+  if (enable_glic) {
+    web_component_files += [
+      "glic_page/glic_data_page.ts",
+      "glic_page/glic_page.ts",
+    ]
+  }
+
   if (!is_chromeos_ash) {
     web_component_files += [
       "languages_page/add_languages_dialog.ts",
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.html b/chrome/browser/resources/settings/basic_page/basic_page.html
index a9e2c01a..d79fef3c 100644
--- a/chrome/browser/resources/settings/basic_page/basic_page.html
+++ b/chrome/browser/resources/settings/basic_page/basic_page.html
@@ -82,14 +82,20 @@
             </settings-privacy-page>
           </settings-section>
         </template>
-        <template is="dom-if"
-            if="[[showGlicPage_(pageVisibility.glic)]]"
+<if expr="enable_glic">
+        <template is="dom-if" if="[[showGlicPage_(pageVisibility.glic)]]"
             restamp>
-          <settings-section page-title="$i18n{glicPageTitle}" section="glic">
-            <!-- TODO(crbug.com/379166610): Fill out page in follow up -->
-            <p>Glic</p>
+          <settings-section page-title="$i18n{glicPreferencesSection}"
+              section="glic">
+            <settings-glic-page prefs="{{prefs}}"></settings-glic-page>
+          </settings-section>
+          <settings-section page-title="$i18n{glicDataSection}"
+              section="glicData" nest-under-section="glic">
+            <settings-glic-data-page prefs="{{prefs}}">
+            </settings-glic-data-page>
           </settings-section>
         </template>
+</if>
         <template is="dom-if"
             if="[[showPage_(pageVisibility.performance)]]"
             restamp>
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.ts b/chrome/browser/resources/settings/basic_page/basic_page.ts
index 1fe57fb7..14dd4f5 100644
--- a/chrome/browser/resources/settings/basic_page/basic_page.ts
+++ b/chrome/browser/resources/settings/basic_page/basic_page.ts
@@ -16,6 +16,10 @@
 import '../safety_hub/safety_hub_entry_point.js';
 import '../autofill_page/autofill_page.js';
 import '../controls/settings_idle_load.js';
+// <if expr="enable_glic">
+import '../glic_page/glic_data_page.js';
+import '../glic_page/glic_page.js';
+// </if>
 import '../on_startup_page/on_startup_page.js';
 import '../people_page/people_page.js';
 import '../performance_page/battery_page.js';
@@ -343,10 +347,12 @@
     return this.inSearchMode || routes.BASIC.contains(this.currentRoute_);
   }
 
+  // <if expr="enable_glic">
   private showGlicPage_(visibility?: boolean): boolean {
     return loadTimeData.getBoolean('showGlicSettings') &&
         this.showPage_(visibility);
   }
+  // </if>
 
   private showAdvancedSettings_(visibility?: boolean): boolean {
     return this.showPage_(visibility);
diff --git a/chrome/browser/resources/settings/glic_page/glic_data_page.html b/chrome/browser/resources/settings/glic_page/glic_data_page.html
new file mode 100644
index 0000000..7a7b375
--- /dev/null
+++ b/chrome/browser/resources/settings/glic_page/glic_data_page.html
@@ -0,0 +1,23 @@
+<style include="settings-shared"></style>
+
+<settings-toggle-button
+    id="geolocationToggle" pref="{{prefs.glic.geolocation_enabled}}"
+    label="$i18n{glicLocationToggle}"
+    sub-label="$i18n{glicLocationToggleSublabel}" icon="settings:location-on">
+</settings-toggle-button>
+
+<settings-toggle-button
+    id="microphoneToggle" pref="{{prefs.glic.microphone_enabled}}"
+    label="$i18n{glicMicrophoneToggle}"
+    sub-label="$i18n{glicMicrophoneToggleSublabel}" icon="privacy:mic">
+</settings-toggle-button>
+
+<settings-toggle-button
+    id="tabAccessToggle" pref="{{prefs.glic.tab_context_enabled}}"
+    label="$i18n{glicTabAccessToggle}"
+    sub-label="$i18n{glicTabAccessToggleSublabel}" icon="settings:tab">
+</settings-toggle-button>
+
+<cr-link-row
+    label="$i18n{glicActivityButton}"
+    sub-label="$i18n{glicActivityButtonSublabel}" external></cr-link-row>
diff --git a/chrome/browser/resources/settings/glic_page/glic_data_page.ts b/chrome/browser/resources/settings/glic_page/glic_data_page.ts
new file mode 100644
index 0000000..14e2674
--- /dev/null
+++ b/chrome/browser/resources/settings/glic_page/glic_data_page.ts
@@ -0,0 +1,58 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
+import '../controls/settings_toggle_button.js';
+
+import {PrefsMixin} from '/shared/settings/prefs/prefs_mixin.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import type {SettingsToggleButtonElement} from '../controls/settings_toggle_button.js';
+
+import {getTemplate} from './glic_data_page.html.js';
+
+export enum SettingsGlicDataPageFeaturePrefName {
+  GEOLOCATION_ENABLED = 'glic.geolocation_enabled',
+  MICROPHONE_ENABLED = 'glic.microphone_enabled',
+  TAB_CONTEXT_ENABLED = 'glic.tab_context_enabled',
+}
+
+const SettingsGlicDataPageElementBase = PrefsMixin(PolymerElement);
+
+export interface SettingsGlicDataPageElement {
+  $: {
+    geolocationToggle: SettingsToggleButtonElement,
+    microphoneToggle: SettingsToggleButtonElement,
+    tabAccessToggle: SettingsToggleButtonElement,
+  };
+}
+
+export class SettingsGlicDataPageElement extends
+    SettingsGlicDataPageElementBase {
+  static get is() {
+    return 'settings-glic-data-page';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      prefs: {
+        type: Object,
+        notify: true,
+      },
+    };
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'settings-glic-data-page': SettingsGlicDataPageElement;
+  }
+}
+
+customElements.define(
+    SettingsGlicDataPageElement.is, SettingsGlicDataPageElement);
diff --git a/chrome/browser/resources/settings/glic_page/glic_page.html b/chrome/browser/resources/settings/glic_page/glic_page.html
new file mode 100644
index 0000000..4d78ae8
--- /dev/null
+++ b/chrome/browser/resources/settings/glic_page/glic_page.html
@@ -0,0 +1,19 @@
+<style include="settings-shared cr-icons"></style>
+<settings-toggle-button
+    id="launcherToggle" pref="{{prefs.glic.launcher_enabled}}"
+    label="$i18n{glicOsWidgetToggle}"
+    sub-label="$i18n{glicOsWidgetToggleSublabel}">
+</settings-toggle-button>
+
+<div class="cr-row">
+  <div class="flex cr-padded-text">
+    <div id="keyboardShortcut" aria-hidden>$i18n{glicKeyboardShortcut}</div>
+    <div class="secondary">$i18n{glicKeyboardShortcutSublabel}</div>
+  </div>
+  <!-- TODO(crbug.com/379166610): This is a placeholder until keyboard shortcut
+       is implemented. -->
+  <cr-input disabled aria-labelledby="keyboardShortcut"></cr-input>
+  <cr-icon-button id="editIconButton" class="icon-edit" title="$i18n{edit}"
+    aria-label="[[getEditButtonAriaLabel_(engine)]]"
+    disabled$="[[!engine.canBeEdited]]"></cr-icon-button>
+</div>
diff --git a/chrome/browser/resources/settings/glic_page/glic_page.ts b/chrome/browser/resources/settings/glic_page/glic_page.ts
new file mode 100644
index 0000000..22ca2bc
--- /dev/null
+++ b/chrome/browser/resources/settings/glic_page/glic_page.ts
@@ -0,0 +1,55 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://resources/cr_elements/cr_icons.css.js';
+import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
+import 'chrome://resources/cr_elements/cr_input/cr_input.js';
+import '../controls/settings_toggle_button.js';
+
+import {PrefsMixin} from '/shared/settings/prefs/prefs_mixin.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import type {SettingsToggleButtonElement} from '../controls/settings_toggle_button.js';
+
+import {getTemplate} from './glic_page.html.js';
+
+export enum SettingsGlicPageFeaturePrefName {
+  LAUNCHER_ENABLED = 'glic.launcher_enabled',
+  // TODO(crbug.com/379166610): Keyboard shortcut
+}
+
+const SettingsGlicPageElementBase = PrefsMixin(PolymerElement);
+
+export interface SettingsGlicPageElement {
+  $: {
+    launcherToggle: SettingsToggleButtonElement,
+  };
+}
+
+export class SettingsGlicPageElement extends SettingsGlicPageElementBase {
+  static get is() {
+    return 'settings-glic-page';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      prefs: {
+        type: Object,
+        notify: true,
+      },
+    };
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'settings-glic-page': SettingsGlicPageElement;
+  }
+}
+
+customElements.define(SettingsGlicPageElement.is, SettingsGlicPageElement);
diff --git a/chrome/browser/resources/settings/icons.html b/chrome/browser/resources/settings/icons.html
index fa4306e5..3ad580d 100644
--- a/chrome/browser/resources/settings/icons.html
+++ b/chrome/browser/resources/settings/icons.html
@@ -258,6 +258,7 @@
       <g id="rotate-right"><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11c-.17-1.39-.72-2.73-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"></path></g>
       <g id="sync-disabled"><path d="M10 6.35V4.26c-.8.21-1.55.54-2.23.96l1.46 1.46c.25-.12.5-.24.77-.33zm-7.14-.94l2.36 2.36C4.45 8.99 4 10.44 4 12c0 2.21.91 4.2 2.36 5.64L4 20h6v-6l-2.24 2.24C6.68 15.15 6 13.66 6 12c0-1 .25-1.94.68-2.77l8.08 8.08c-.25.13-.5.25-.77.34v2.09c.8-.21 1.55-.54 2.23-.96l2.36 2.36 1.27-1.27L4.14 4.14 2.86 5.41zM20 4h-6v6l2.24-2.24C17.32 8.85 18 10.34 18 12c0 1-.25 1.94-.68 2.77l1.46 1.46C19.55 15.01 20 13.56 20 12c0-2.21-.91-4.2-2.36-5.64L20 4z"></path></g>
       <g id="sync-problem"><path d="M3 12c0 2.21.91 4.2 2.36 5.64L3 20h6v-6l-2.24 2.24C5.68 15.15 5 13.66 5 12c0-2.61 1.67-4.83 4-5.65V4.26C5.55 5.15 3 8.27 3 12zm8 5h2v-2h-2v2zM21 4h-6v6l2.24-2.24C18.32 8.85 19 10.34 19 12c0 2.61-1.67 4.83-4 5.65v2.09c3.45-.89 6-4.01 6-7.74 0-2.21-.91-4.2-2.36-5.64L21 4zm-10 9h2V7h-2v6z"></path></g>
+      <g id="tab"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h10v4h8v10z"></path></g>
       <g id="volume-down"><path d="M1 13H4.46667L8 16.5V3.5L4.46667 7H1V13ZM10 6.5V13.5C11.776 12.8652 12.5 11.0043 12.5 10C12.5 8.99565 11.776 7.14348 10 6.5Z"></path></g>
       <g id="volume-up"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"></path></g>
       <g id="volume-up-off"><path d="M16.25,13.42C16.4,12.97,16.5,12.5,16.5,12c0-1.77-1.02-3.29-2.5-4.03v3.2L16.25,13.42z"></path><path d="M19,12c0,1.21-0.31,2.34-0.85,3.32l1.46,1.46C20.48,15.39,21,13.76,21,12c0-4.28-2.99-7.86-7-8.77v2.06 C16.89,6.15,19,8.83,19,12z"></path><path d="M2.81,2.81L1.39,4.22L6.17,9H3v6h4l5,5v-5.17l3.32,3.32c-0.42,0.23-0.85,0.43-1.32,0.56v2.06c1-0.23,1.94-0.62,2.79-1.15 l2.99,2.99l1.41-1.41L2.81,2.81z"></path><polygon points="12,9.17 12,4 9.41,6.59"></polygon></g>
diff --git a/chrome/browser/resources/settings/settings.ts b/chrome/browser/resources/settings/settings.ts
index 8fc6cac1..e2a64aae 100644
--- a/chrome/browser/resources/settings/settings.ts
+++ b/chrome/browser/resources/settings/settings.ts
@@ -62,6 +62,10 @@
 export {DefaultBrowserBrowserProxy, DefaultBrowserBrowserProxyImpl, DefaultBrowserInfo} from './default_browser_page/default_browser_browser_proxy.js';
 export {SettingsDefaultBrowserPageElement} from './default_browser_page/default_browser_page.js';
 // </if>
+// <if expr="enable_glic">
+export {SettingsGlicDataPageElement, SettingsGlicDataPageFeaturePrefName} from './glic_page/glic_data_page.js';
+export {SettingsGlicPageElement, SettingsGlicPageFeaturePrefName} from './glic_page/glic_page.js';
+// </if>
 export {HatsBrowserProxy, HatsBrowserProxyImpl, SafeBrowsingSetting, SecurityPageInteraction, TrustSafetyInteraction} from './hats_browser_proxy.js';
 export {loadTimeData} from './i18n_setup.js';
 export {AiPageCompareInteractions, AiPageComposeInteractions, AiPageHistorySearchInteractions, AiPageInteractions, AiPageTabOrganizationInteractions, CardBenefitsUserAction, CvcDeletionUserAction, DeleteBrowsingDataAction, MetricsBrowserProxy, MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyGuideInteractions, PrivacyGuideSettingsStates, PrivacyGuideStepsEligibleAndReached, SafeBrowsingInteractions, SafetyCheckNotificationsModuleInteractions, SafetyCheckUnusedSitePermissionsModuleInteractions, SafetyHubCardState, SafetyHubEntryPoint, SafetyHubModuleType, SafetyHubSurfaces} from './metrics_browser_proxy.js';
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html b/chrome/browser/resources/settings/settings_menu/settings_menu.html
index 236682f..20e21e7 100644
--- a/chrome/browser/resources/settings/settings_menu/settings_menu.html
+++ b/chrome/browser/resources/settings/settings_menu/settings_menu.html
@@ -99,13 +99,15 @@
           $i18n{searchPageTitle}
           <cr-ripple></cr-ripple>
         </a>
+<if expr="enable_glic">
         <a role="menuitem" href="/glic" class="cr-nav-menu-item"
             hidden="[[!showGlicMenuItem_(glicEnabled_, pageVisibility.glic)]]">
           <cr-icon icon="cr:chrome-product"></cr-icon>
           $i18n{glicPageTitle}
           <cr-ripple></cr-ripple>
         </a>
-  <if expr="not is_chromeos">
+</if>
+<if expr="not is_chromeos">
         <a role="menuitem" id="defaultBrowser" class="cr-nav-menu-item"
           href="/defaultBrowser"
           hidden="[[!pageVisibility.defaultBrowser]]">
@@ -113,7 +115,7 @@
           $i18n{defaultBrowser}
           <cr-ripple></cr-ripple>
         </a>
-  </if>
+</if>
         <a role="menuitem" id="onStartup" href="/onStartup"
             class="cr-nav-menu-item"
             hidden="[[!pageVisibility.onStartup]]">
@@ -143,14 +145,14 @@
           $i18n{a11yPageTitle}
           <cr-ripple></cr-ripple>
         </a>
-  <if expr="not chromeos_ash">
+<if expr="not chromeos_ash">
         <a role="menuitem" id="system" href="/system" class="cr-nav-menu-item"
             hidden="[[!pageVisibility.system]]">
           <cr-icon icon="settings:system"></cr-icon>
           $i18n{systemPageTitle}
           <cr-ripple></cr-ripple>
         </a>
-  </if>
+</if>
         <a role="menuitem" id="reset" href="/reset"
             hidden="[[!pageVisibility.reset]]" class="cr-nav-menu-item">
           <cr-icon icon="settings:restore"></cr-icon>
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.ts b/chrome/browser/resources/settings/settings_menu/settings_menu.ts
index f53ae4b..d5c8e22 100644
--- a/chrome/browser/resources/settings/settings_menu/settings_menu.ts
+++ b/chrome/browser/resources/settings/settings_menu/settings_menu.ts
@@ -76,10 +76,12 @@
         computed: 'computeAiPageTitle_(enableAiSettingsPageRefresh_)',
       },
 
+      // <if expr="enable_glic">
       glicEnabled_: {
         type: Boolean,
         value: () => loadTimeData.getBoolean('showGlicSettings'),
       },
+      // </if>
     };
   }
 
@@ -91,7 +93,9 @@
   private aiPageTitle_: string;
   private metricsBrowserProxy_: MetricsBrowserProxy =
       MetricsBrowserProxyImpl.getInstance();
+  // <if expr="enable_glic">
   private glicEnabled_: boolean;
+  // </if>
 
   override ready() {
     super.ready();
@@ -103,10 +107,12 @@
         (!this.pageVisibility || this.pageVisibility.ai !== false);
   }
 
+  // <if expr="enable_glic">
   private showGlicMenuItem_(): boolean {
     return this.glicEnabled_ &&
         (!this.pageVisibility || this.pageVisibility.glic !== false);
   }
+  // </if>
 
   private computeAiPageIcon_(): string {
     return this.enableAiSettingsPageRefresh_ ? 'settings20:magic' :
diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc
index dd7b5342..78839c5 100644
--- a/chrome/browser/sync/sync_ui_util.cc
+++ b/chrome/browser/sync/sync_ui_util.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/feature_list.h"
+#include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/profiles/profile.h"
@@ -19,6 +20,7 @@
 #include "components/password_manager/core/browser/features/password_manager_features_util.h"
 #include "components/prefs/pref_service.h"
 #include "components/signin/public/base/signin_switches.h"
+#include "components/signin/public/identity_manager/account_info.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/sync/base/features.h"
@@ -310,44 +312,63 @@
 }
 
 std::u16string GetAvatarSyncErrorDescription(AvatarSyncErrorType error,
-                                             bool is_sync_feature_enabled) {
+                                             bool is_sync_feature_enabled,
+                                             const std::string& user_email) {
   switch (error) {
     case AvatarSyncErrorType::kSyncPaused:
       return l10n_util::GetStringUTF16(IDS_PROFILES_DICE_SYNC_PAUSED_TITLE);
     case AvatarSyncErrorType::kTrustedVaultKeyMissingForPasswordsError:
+      if (switches::IsImprovedSigninUIOnDesktopEnabled()) {
+        return l10n_util::GetStringFUTF16(
+            IDS_SYNC_ERROR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION,
+            base::UTF8ToUTF16(user_email));
+      }
       return l10n_util::GetStringUTF16(
           is_sync_feature_enabled
               ? IDS_SYNC_ERROR_PASSWORDS_USER_MENU_TITLE
               : IDS_SYNC_ERROR_PASSWORDS_USER_MENU_TITLE_SIGNED_IN_ONLY);
     case AvatarSyncErrorType::
         kTrustedVaultRecoverabilityDegradedForPasswordsError:
+      if (switches::IsImprovedSigninUIOnDesktopEnabled()) {
+        return l10n_util::GetStringFUTF16(
+            IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_ERROR_DESCRIPTION,
+            base::UTF8ToUTF16(user_email));
+      }
       return l10n_util::GetStringUTF16(
           IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_PASSWORDS_USER_MENU_TITLE);
     case AvatarSyncErrorType::
         kTrustedVaultRecoverabilityDegradedForEverythingError:
+      if (switches::IsImprovedSigninUIOnDesktopEnabled()) {
+        return l10n_util::GetStringFUTF16(
+            IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION,
+            base::UTF8ToUTF16(user_email));
+      }
       return l10n_util::GetStringUTF16(
           IDS_SYNC_ERROR_RECOVERABILITY_DEGRADED_FOR_EVERYTHING_USER_MENU_TITLE);
     case AvatarSyncErrorType::kPassphraseError:
       if (switches::IsImprovedSigninUIOnDesktopEnabled()) {
-        return l10n_util::GetStringUTF16(
-            is_sync_feature_enabled
-                ? IDS_SYNC_STATUS_NEEDS_PASSWORD
-                : IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_TITLE_SIGNED_IN_ONLY);
-      } else {
-        return l10n_util::GetStringUTF16(IDS_SYNC_ERROR_USER_MENU_TITLE);
+        return l10n_util::GetStringFUTF16(
+            IDS_SYNC_ERROR_PASSPHRASE_USER_MENU_ERROR_DESCRIPTION,
+            base::UTF8ToUTF16(user_email));
       }
+      return l10n_util::GetStringUTF16(IDS_SYNC_ERROR_USER_MENU_TITLE);
     case AvatarSyncErrorType::kUpgradeClientError:
-      if (switches::IsImprovedSigninUIOnDesktopEnabled() &&
-          !is_sync_feature_enabled) {
-        return l10n_util::GetStringUTF16(
-            IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_TITLE);
-      } else {
-        return l10n_util::GetStringUTF16(IDS_SYNC_ERROR_USER_MENU_TITLE);
+      if (switches::IsImprovedSigninUIOnDesktopEnabled()) {
+        return l10n_util::GetStringFUTF16(
+            IDS_SYNC_ERROR_UPGRADE_CLIENT_USER_MENU_ERROR_DESCRIPTION,
+            base::UTF8ToUTF16(user_email));
       }
+      return l10n_util::GetStringUTF16(IDS_SYNC_ERROR_USER_MENU_TITLE);
+    case AvatarSyncErrorType::kTrustedVaultKeyMissingForEverythingError:
+      if (switches::IsImprovedSigninUIOnDesktopEnabled()) {
+        return l10n_util::GetStringFUTF16(
+            IDS_SYNC_ERROR_TRUSTED_VAULT_USER_MENU_ERROR_DESCRIPTION,
+            base::UTF8ToUTF16(user_email));
+      }
+      return l10n_util::GetStringUTF16(IDS_SYNC_ERROR_USER_MENU_TITLE);
     case AvatarSyncErrorType::kSettingsUnconfirmedError:
     case AvatarSyncErrorType::kManagedUserUnrecoverableError:
     case AvatarSyncErrorType::kUnrecoverableError:
-    case AvatarSyncErrorType::kTrustedVaultKeyMissingForEverythingError:
       return l10n_util::GetStringUTF16(IDS_SYNC_ERROR_USER_MENU_TITLE);
   }
 }
diff --git a/chrome/browser/sync/sync_ui_util.h b/chrome/browser/sync/sync_ui_util.h
index 18f856c6..b8022ed0 100644
--- a/chrome/browser/sync/sync_ui_util.h
+++ b/chrome/browser/sync/sync_ui_util.h
@@ -116,7 +116,8 @@
 // tooltip of the avatar button, and in the profile menu body (the menu opened
 // by clicking the avatar button).
 std::u16string GetAvatarSyncErrorDescription(AvatarSyncErrorType error,
-                                             bool is_sync_feature_enabled);
+                                             bool is_sync_feature_enabled,
+                                             const std::string& user_email);
 #endif
 
 // Whether sync is currently blocked from starting because the sync
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 7a234383..4a95926 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3171,38 +3171,6 @@
       "webui/settings/settings_manage_profile_handler.h",
       "webui/settings/system_handler.cc",
       "webui/settings/system_handler.h",
-      "webui/signin/managed_user_profile_notice_handler.cc",
-      "webui/signin/managed_user_profile_notice_handler.h",
-      "webui/signin/managed_user_profile_notice_ui.cc",
-      "webui/signin/managed_user_profile_notice_ui.h",
-      "webui/signin/profile_customization_handler.cc",
-      "webui/signin/profile_customization_handler.h",
-      "webui/signin/profile_customization_ui.cc",
-      "webui/signin/profile_customization_ui.h",
-      "webui/signin/profile_picker_handler.cc",
-      "webui/signin/profile_picker_handler.h",
-      "webui/signin/profile_picker_ui.cc",
-      "webui/signin/profile_picker_ui.h",
-      "webui/signin/signin_email_confirmation_ui.cc",
-      "webui/signin/signin_email_confirmation_ui.h",
-      "webui/signin/signin_error_handler.cc",
-      "webui/signin/signin_error_handler.h",
-      "webui/signin/signin_error_ui.cc",
-      "webui/signin/signin_error_ui.h",
-      "webui/signin/signin_reauth_handler.cc",
-      "webui/signin/signin_reauth_handler.h",
-      "webui/signin/signin_reauth_ui.cc",
-      "webui/signin/signin_reauth_ui.h",
-      "webui/signin/signin_ui_error.cc",
-      "webui/signin/signin_ui_error.h",
-      "webui/signin/signin_utils_desktop.cc",
-      "webui/signin/signin_utils_desktop.h",
-      "webui/signin/turn_sync_on_helper.cc",
-      "webui/signin/turn_sync_on_helper.h",
-      "webui/signin/turn_sync_on_helper_delegate_impl.cc",
-      "webui/signin/turn_sync_on_helper_delegate_impl.h",
-      "webui/signin/turn_sync_on_helper_policy_fetch_tracker.cc",
-      "webui/signin/turn_sync_on_helper_policy_fetch_tracker.h",
     ]
 
     deps += [
@@ -4416,10 +4384,10 @@
       "views/passwords/password_auto_sign_in_view.h",
       "views/passwords/password_bubble_view_base.cc",
       "views/passwords/password_bubble_view_base.h",
+      "views/passwords/password_change/password_change_info_bubble_view.cc",
+      "views/passwords/password_change/password_change_info_bubble_view.h",
       "views/passwords/password_change/password_change_view_factory.cc",
       "views/passwords/password_change/password_change_view_factory.h",
-      "views/passwords/password_change/sign_in_check_bubble_view.cc",
-      "views/passwords/password_change/sign_in_check_bubble_view.h",
       "views/passwords/password_cross_domain_confirmation_popup_view_views.cc",
       "views/passwords/password_cross_domain_confirmation_popup_view_views.h",
       "views/passwords/password_default_store_changed_view.cc",
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/BottomSheetSigninAndHistorySyncCoordinator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/BottomSheetSigninAndHistorySyncCoordinator.java
index b19ae2d..df18c30 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/BottomSheetSigninAndHistorySyncCoordinator.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/BottomSheetSigninAndHistorySyncCoordinator.java
@@ -37,6 +37,7 @@
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 import org.chromium.components.sync.SyncService;
 import org.chromium.components.sync.UserSelectableType;
 import org.chromium.ui.base.WindowAndroid;
@@ -282,6 +283,25 @@
         onFlowComplete(flowResult);
     }
 
+    /** Implements {@link HistorySyncDelegate} */
+    @Override
+    public void recordHistorySyncOptIn(int accessPoint, int syncButtonClicked) {
+        switch (syncButtonClicked) {
+            case SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED:
+            case SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED:
+                SigninMetricsUtils.logHistorySyncAcceptButtonClicked(
+                        accessPoint, syncButtonClicked);
+                break;
+            case SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED:
+            case SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED:
+                SigninMetricsUtils.logHistorySyncDeclineButtonClicked(
+                        accessPoint, syncButtonClicked);
+                break;
+            default:
+                throw new IllegalStateException("Unrecognized sync button type");
+        }
+    }
+
     private void onProfileAvailable(Profile profile) {
         if (profile.isOffTheRecord()) {
             throw new IllegalStateException(
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/FullscreenSigninAndHistorySyncCoordinator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/FullscreenSigninAndHistorySyncCoordinator.java
index 20bd370..48d728e5 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/FullscreenSigninAndHistorySyncCoordinator.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/FullscreenSigninAndHistorySyncCoordinator.java
@@ -38,6 +38,7 @@
 import org.chromium.components.signin.metrics.AccountConsistencyPromoAction;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
 import org.chromium.components.signin.metrics.SignoutReason;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 
 import java.lang.annotation.Retention;
@@ -323,6 +324,26 @@
         mDelegate.onFlowComplete(flowResult);
     }
 
+    /** Implements {@link HistorySyncDelegate} */
+    @Override
+    public void recordHistorySyncOptIn(
+            @SigninAccessPoint int accessPoint, @SyncButtonClicked int syncButtonClicked) {
+        switch (syncButtonClicked) {
+            case SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED:
+            case SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED:
+                SigninMetricsUtils.logHistorySyncAcceptButtonClicked(
+                        accessPoint, syncButtonClicked);
+                break;
+            case SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED:
+            case SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED:
+                SigninMetricsUtils.logHistorySyncDeclineButtonClicked(
+                        accessPoint, syncButtonClicked);
+                break;
+            default:
+                throw new IllegalStateException("Unrecognized sync button type");
+        }
+    }
+
     private void inflateViewBundle() {
         boolean useLandscapeLayout = SigninUtils.shouldShowDualPanesHorizontalLayout(mActivity);
         ViewGroup viewBundle =
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncCoordinator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncCoordinator.java
index af10c68..c1ed6a2 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncCoordinator.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncCoordinator.java
@@ -11,7 +11,6 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.chrome.browser.firstrun.MobileFreProgress;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
@@ -20,6 +19,7 @@
 import org.chromium.chrome.browser.ui.signin.SigninUtils;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.signin.metrics.SyncButtonClicked;
 import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
 
 public class HistorySyncCoordinator {
@@ -28,7 +28,8 @@
     public interface HistorySyncDelegate {
         void dismissHistorySync(boolean isHistorySyncAccepted);
 
-        default void maybeRecordFreProgress(@MobileFreProgress int state) {}
+        void recordHistorySyncOptIn(
+                @SigninAccessPoint int accessPoint, @SyncButtonClicked int syncButtonType);
     }
 
     private final Activity mActivity;
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncMediator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncMediator.java
index f54dc99..00ab393 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncMediator.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncMediator.java
@@ -9,13 +9,11 @@
 import android.view.View;
 
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.chrome.browser.firstrun.MobileFreProgress;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.services.DisplayableProfileData;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.ProfileDataCache;
 import org.chromium.chrome.browser.signin.services.SigninManager;
-import org.chromium.chrome.browser.signin.services.SigninMetricsUtils;
 import org.chromium.chrome.browser.sync.SyncServiceFactory;
 import org.chromium.chrome.browser.ui.signin.MinorModeHelper;
 import org.chromium.chrome.browser.ui.signin.MinorModeHelper.ScreenMode;
@@ -119,18 +117,17 @@
         switch (syncButtonType) {
             case ScreenMode.RESTRICTED:
             case ScreenMode.DEADLINED:
-                SigninMetricsUtils.logHistorySyncAcceptButtonClicked(
+                mDelegate.recordHistorySyncOptIn(
                         mAccessPoint, SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED);
                 break;
             case ScreenMode.UNRESTRICTED:
-                SigninMetricsUtils.logHistorySyncAcceptButtonClicked(
+                mDelegate.recordHistorySyncOptIn(
                         mAccessPoint, SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED);
                 break;
             case ScreenMode.UNSUPPORTED:
             case ScreenMode.PENDING:
                 throw new IllegalStateException("Unrecognized restriction status.");
         }
-        mDelegate.maybeRecordFreProgress(MobileFreProgress.HISTORY_SYNC_ACCEPTED);
 
         mSyncService.setSelectedType(UserSelectableType.HISTORY, /* isTypeOn= */ true);
         mSyncService.setSelectedType(UserSelectableType.TABS, /* isTypeOn= */ true);
@@ -144,18 +141,17 @@
         switch (syncButtonType) {
             case ScreenMode.RESTRICTED:
             case ScreenMode.DEADLINED:
-                SigninMetricsUtils.logHistorySyncDeclineButtonClicked(
+                mDelegate.recordHistorySyncOptIn(
                         mAccessPoint, SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED);
                 break;
             case ScreenMode.UNRESTRICTED:
-                SigninMetricsUtils.logHistorySyncDeclineButtonClicked(
+                mDelegate.recordHistorySyncOptIn(
                         mAccessPoint, SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED);
                 break;
             case ScreenMode.UNSUPPORTED:
             case ScreenMode.PENDING:
                 throw new IllegalStateException("Unrecognized restriction status.");
         }
-        mDelegate.maybeRecordFreProgress(MobileFreProgress.HISTORY_SYNC_DISMISSED);
 
         if (mShouldSignOutOnDecline) {
             mSigninManager.signOut(
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncTest.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncTest.java
index 038c97d..a91b420 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncTest.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/history_sync/HistorySyncTest.java
@@ -44,7 +44,6 @@
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.DoNotBatch;
 import org.chromium.base.test.util.HistogramWatcher;
-import org.chromium.chrome.browser.firstrun.MobileFreProgress;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.profiles.ProfileManager;
 import org.chromium.chrome.browser.sync.SyncServiceFactory;
@@ -147,15 +146,9 @@
     @MediumTest
     public void testPositiveButtonWithNonMinorModeAccount() {
         HistogramWatcher histogramWatcher =
-                HistogramWatcher.newBuilder()
-                        .expectIntRecord("Signin.HistorySyncOptIn.Completed", SIGNIN_ACCESS_POINT)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Clicked",
-                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Shown",
-                                SyncButtonsType.HISTORY_SYNC_NOT_EQUAL_WEIGHTED)
-                        .build();
+                HistogramWatcher.newSingleRecordWatcher(
+                        "Signin.SyncButtons.Shown",
+                        SyncButtonsType.HISTORY_SYNC_NOT_EQUAL_WEIGHTED);
 
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_ADULT_ACCOUNT);
         buildHistorySyncCoordinator();
@@ -166,7 +159,9 @@
         verify(mSyncServiceMock).setSelectedType(UserSelectableType.HISTORY, true);
         verify(mSyncServiceMock).setSelectedType(UserSelectableType.TABS, true);
         verify(mHistorySyncDelegateMock)
-                .maybeRecordFreProgress(MobileFreProgress.HISTORY_SYNC_ACCEPTED);
+                .recordHistorySyncOptIn(
+                        SIGNIN_ACCESS_POINT,
+                        SyncButtonClicked.HISTORY_SYNC_OPT_IN_NOT_EQUAL_WEIGHTED);
         verify(mHistorySyncDelegateMock).dismissHistorySync(/* isHistorySyncAccepted= */ true);
         verify(mHistorySyncHelperMock).clearHistorySyncDeclinedPrefs();
     }
@@ -175,15 +170,9 @@
     @MediumTest
     public void testNegativeButtonNonMinorModeAccount() {
         HistogramWatcher histogramWatcher =
-                HistogramWatcher.newBuilder()
-                        .expectIntRecord("Signin.HistorySyncOptIn.Declined", SIGNIN_ACCESS_POINT)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Clicked",
-                                SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Shown",
-                                SyncButtonsType.HISTORY_SYNC_NOT_EQUAL_WEIGHTED)
-                        .build();
+                HistogramWatcher.newSingleRecordWatcher(
+                        "Signin.SyncButtons.Shown",
+                        SyncButtonsType.HISTORY_SYNC_NOT_EQUAL_WEIGHTED);
 
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_ADULT_ACCOUNT);
         buildHistorySyncCoordinator();
@@ -193,7 +182,9 @@
         histogramWatcher.assertExpected();
         verifyNoInteractions(mSyncServiceMock);
         verify(mHistorySyncDelegateMock)
-                .maybeRecordFreProgress(MobileFreProgress.HISTORY_SYNC_DISMISSED);
+                .recordHistorySyncOptIn(
+                        SIGNIN_ACCESS_POINT,
+                        SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED);
         verify(mHistorySyncDelegateMock).dismissHistorySync(/* isHistorySyncAccepted= */ false);
         assertNotNull(mSigninTestRule.getPrimaryAccount(ConsentLevel.SIGNIN));
     }
@@ -202,15 +193,9 @@
     @MediumTest
     public void testPositiveButtonWithMinorModeAccount() {
         HistogramWatcher histogramWatcher =
-                HistogramWatcher.newBuilder()
-                        .expectIntRecord("Signin.HistorySyncOptIn.Completed", SIGNIN_ACCESS_POINT)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Clicked",
-                                SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Shown",
-                                SyncButtonsType.HISTORY_SYNC_EQUAL_WEIGHTED_FROM_CAPABILITY)
-                        .build();
+                HistogramWatcher.newSingleRecordWatcher(
+                        "Signin.SyncButtons.Shown",
+                        SyncButtonsType.HISTORY_SYNC_EQUAL_WEIGHTED_FROM_CAPABILITY);
 
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_MINOR_ACCOUNT);
         buildHistorySyncCoordinator();
@@ -221,7 +206,8 @@
         verify(mSyncServiceMock).setSelectedType(UserSelectableType.HISTORY, true);
         verify(mSyncServiceMock).setSelectedType(UserSelectableType.TABS, true);
         verify(mHistorySyncDelegateMock)
-                .maybeRecordFreProgress(MobileFreProgress.HISTORY_SYNC_ACCEPTED);
+                .recordHistorySyncOptIn(
+                        SIGNIN_ACCESS_POINT, SyncButtonClicked.HISTORY_SYNC_OPT_IN_EQUAL_WEIGHTED);
         verify(mHistorySyncDelegateMock).dismissHistorySync(/* isHistorySyncAccepted= */ true);
     }
 
@@ -229,15 +215,9 @@
     @MediumTest
     public void testNegativeButtonWithMinorModeAccount() {
         HistogramWatcher histogramWatcher =
-                HistogramWatcher.newBuilder()
-                        .expectIntRecord("Signin.HistorySyncOptIn.Declined", SIGNIN_ACCESS_POINT)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Clicked",
-                                SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED)
-                        .expectIntRecord(
-                                "Signin.SyncButtons.Shown",
-                                SyncButtonsType.HISTORY_SYNC_EQUAL_WEIGHTED_FROM_CAPABILITY)
-                        .build();
+                HistogramWatcher.newSingleRecordWatcher(
+                        "Signin.SyncButtons.Shown",
+                        SyncButtonsType.HISTORY_SYNC_EQUAL_WEIGHTED_FROM_CAPABILITY);
 
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_MINOR_ACCOUNT);
         buildHistorySyncCoordinator();
@@ -247,7 +227,8 @@
         histogramWatcher.assertExpected();
         verifyNoInteractions(mSyncServiceMock);
         verify(mHistorySyncDelegateMock)
-                .maybeRecordFreProgress(MobileFreProgress.HISTORY_SYNC_DISMISSED);
+                .recordHistorySyncOptIn(
+                        SIGNIN_ACCESS_POINT, SyncButtonClicked.HISTORY_SYNC_CANCEL_EQUAL_WEIGHTED);
         verify(mHistorySyncDelegateMock).dismissHistorySync(/* isHistorySyncAccepted= */ false);
         assertNotNull(mSigninTestRule.getPrimaryAccount(ConsentLevel.SIGNIN));
         verify(mHistorySyncHelperMock).recordHistorySyncDeclinedPrefs();
@@ -259,14 +240,14 @@
         mSigninTestRule.addAccountThenSignin(TestAccounts.AADC_ADULT_ACCOUNT);
         buildHistorySyncCoordinator(
                 /* showEmailInFooter= */ false, /* shouldSignOutOnDecline= */ true);
-        HistogramWatcher histogramWatcher =
-                HistogramWatcher.newSingleRecordWatcher(
-                        "Signin.HistorySyncOptIn.Declined", SIGNIN_ACCESS_POINT);
 
         onView(withText(R.string.history_sync_secondary_action)).perform(click());
 
-        histogramWatcher.assertExpected();
         verifyNoInteractions(mSyncServiceMock);
+        verify(mHistorySyncDelegateMock)
+                .recordHistorySyncOptIn(
+                        SIGNIN_ACCESS_POINT,
+                        SyncButtonClicked.HISTORY_SYNC_CANCEL_NOT_EQUAL_WEIGHTED);
         verify(mHistorySyncDelegateMock, atLeastOnce())
                 .dismissHistorySync(/* isHistorySyncAccepted= */ false);
         CriteriaHelper.pollUiThread(
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
index ca29397..ec65cdd 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">ছাইটলৈ উভতি যাওক</translation>
 <translation id="544776284582297024">একে সময়তে টেবসমূহ খুলিবলৈ আৰু বেলেগ বেলেগ পৃষ্ঠাসমূহলৈ যাবলৈ, টেবসমূহ খোলক বুটামটো টিপক</translation>
 <translation id="5454166040603940656"><ph name="PROVIDER" />ৰ সৈতে</translation>
+<translation id="5454215368971121976">আপোনাৰ ডিভাইচটো ভাঁজ কৰা থাকিলে, স্থানটো সলনি কৰিবলৈ আপুনি এটা বিকল্প বাছনি কৰিব পাৰে বা ঠিকনাৰ বাৰডালত স্পৰ্শ কৰি ধৰি ৰাখিব পাৰে।</translation>
 <translation id="5458366071038729214">আপুনি নিজে ফ'ল' কৰা ছাইটসমূহ ইয়াত বিচাৰি পাব</translation>
 <translation id="5468068603361015296">আপুনি তথাপি <ph name="FILE_NAME" /> ডাউনল’ড কৰিব বিচাৰেনে?</translation>
 <translation id="548278423535722844">maps এপত খোলক</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
index 81425f9..0cd82a11 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Вярнуцца на сайт</translation>
 <translation id="544776284582297024">Каб праглядаць некалькі старонак адначасова, націсніце кнопку "Адкрыць укладкі"</translation>
 <translation id="5454166040603940656">крыніца: <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Калі прылада знаходзіцца ў складзеным стане, вы можаце выбраць адзін з варыянтаў ці дакрануцца і ўтрымліваць палец на адрасным радку, каб змяніць яго пазіцыю.</translation>
 <translation id="5458366071038729214">Тут будуць паказвацца сайты, на якія вы падпішацеся</translation>
 <translation id="5468068603361015296">Усё роўна спампаваць файл "<ph name="FILE_NAME" />"?</translation>
 <translation id="548278423535722844">Адкрыць у праграме карт</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index cefe1d8..edd1c44 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Назад към сайта</translation>
 <translation id="544776284582297024">За да отваряте раздели и да посещавате различни страници едновременно, докоснете бутона за отворени раздели</translation>
 <translation id="5454166040603940656">с/ъс <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Когато устройството ви е сгънато, можете да изберете опция или да докоснете и задържите адресната лента, за да промените позицията.</translation>
 <translation id="5458366071038729214">Тук ще виждате сайтовете, които следите</translation>
 <translation id="5468068603361015296">Искате ли да изтеглите <ph name="FILE_NAME" /> въпреки това?</translation>
 <translation id="548278423535722844">Отваряне в приложение за карти</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index a0b6cda..1eb8e97 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">সাইটে ফিরে যান</translation>
 <translation id="544776284582297024">ট্যাব খুলে বিভিন্ন পৃষ্ঠা একইসাথে ব্রাউজ করার জন্য 'ট্যাব খুলুন' বোতাম টিপুন</translation>
 <translation id="5454166040603940656"><ph name="PROVIDER" /> সহ</translation>
+<translation id="5454215368971121976">আপনার ডিভাইস ফোল্ড করা থাকলে, কোনও একটি বিকল্প বেছে নিতে পারেন অথবা পজিশন পরিবর্তন করার জন্য অ্যাড্রেস বার টাচ করে ধরে রাখুন।</translation>
 <translation id="5458366071038729214">যেসব সাইট ফলো করছেন সেগুলো এখানে দেখতে পাবেন</translation>
 <translation id="5468068603361015296">আপনি কি তবুও <ph name="FILE_NAME" /> ডাউনলোড করতে চান?</translation>
 <translation id="548278423535722844">ম্যাপ অ্যাপ্লিকেশানে খুলুন</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
index f73a4a2..91bc474 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Mynd yn ôl i'r wefan</translation>
 <translation id="544776284582297024">I agor tabiau ac i fynd i wahanol dudalennau ar yr un pryd, tapiwch y botwm tabiau sydd ar agor</translation>
 <translation id="5454166040603940656">gyda <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Pan fydd eich dyfais wedi'i phlygu, gallwch ddewis opsiwn neu gyffwrdd a dal y bar cyfeiriad i newid y sefyllfa.</translation>
 <translation id="5458366071038729214">Byddwch yn gweld gwefannau rydych yn eu dilyn yma</translation>
 <translation id="5468068603361015296">Ydych chi am lawrlwytho <ph name="FILE_NAME" /> beth bynnag?</translation>
 <translation id="548278423535722844">Agor yn ap mapiau</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
index d8b5248..1bb63ff 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -19,6 +19,7 @@
 <translation id="107147699690128016">Hvis du ændrer filtypen, åbnes filen muligvis i en anden app og kan være skadelig for din enhed.</translation>
 <translation id="1080365971383768617">Adgangskoder på alle dine enheder</translation>
 <translation id="1082920045291562218">Feedback om Oversigtsark til deling er lukket</translation>
+<translation id="1087176310396019910">Muligt spam</translation>
 <translation id="1089606299949659462">Gennemgangen er fuldført</translation>
 <translation id="1094555143448724771">Hvis du vil se faner fra dine andre enheder, skal du synkronisere dine faner og din historik</translation>
 <translation id="1095761715416917775">Sørg for, at du altid kan få adgang til dine synkroniserede data</translation>
@@ -508,6 +509,7 @@
 <translation id="3282568296779691940">Log ind i Chrome</translation>
 <translation id="3285065882678541460">{TAB_COUNT,plural, =1{<ph name="TAB_GROUPS_PART" />, <ph name="TAB_COUNT_ONE" /> fane}one{<ph name="TAB_GROUPS_PART" />, <ph name="TAB_COUNT_MANY" /> fane}other{<ph name="TAB_GROUPS_PART" />, <ph name="TAB_COUNT_MANY" /> faner}}</translation>
 <translation id="3293181007446299124">Din browserhistorik holdes privat på din enhed, og rapporter sendes med forsinkelse for at beskytte din identitet</translation>
+<translation id="3301936297336370235">Bekræftelse af adgangskodeforslag</translation>
 <translation id="3302615849591357577">Gendan fanegruppen <ph name="TITLE_OF_GROUP" /> med farven <ph name="COLOR_NAME" /> som en ny fanegruppe i baggrunden.</translation>
 <translation id="3303414029551471755">Vil du fortsætte og downloade indholdet?</translation>
 <translation id="3303855915957856445">Der blev ikke fundet nogen søgeresultater</translation>
@@ -972,6 +974,7 @@
 <translation id="5444999712122199445">Gå tilbage til websitet</translation>
 <translation id="544776284582297024">Hvis du vil åbne faner og besøge forskellige sider på samme tid, skal du trykke på faneknappen</translation>
 <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Når din enhed er foldet, kan du vælge en indstilling eller holde fingeren på adresselinjen for at ændre placeringen.</translation>
 <translation id="5458366071038729214">Du kan finde de websites, du følger, her</translation>
 <translation id="5468068603361015296">Vil du downloade <ph name="FILE_NAME" /> alligevel?</translation>
 <translation id="548278423535722844">Åbn i kortapp</translation>
@@ -1135,6 +1138,7 @@
 <translation id="6193448654517602979">Vælg faner</translation>
 <translation id="6196315980958524839">Adgangskoder gemmes i Google Adgangs­kode­admin­istrator på denne enhed</translation>
 <translation id="6202812185118613467">Log ind igen for at synkronisere</translation>
+<translation id="6204781143409202534">Chrome har registreret muligt spam fra <ph name="DOMAIN" />.</translation>
 <translation id="6205314730813004066">Privatliv vedrørende annoncering</translation>
 <translation id="6210748933810148297">Ikke <ph name="EMAIL" />?</translation>
 <translation id="6211386937064921208">Forhåndsvisning af denne side</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
index a5dbeb96..5ab8abc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Επιστροφή στον ιστότοπο</translation>
 <translation id="544776284582297024">Για να ανοίξετε καρτέλες και να επισκεφτείτε διαφορετικές σελίδες ταυτόχρονα, πατήστε το κουμπί Άνοιγμα καρτελών.</translation>
 <translation id="5454166040603940656">με <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Όταν η συσκευή σας είναι διπλωμένη, μπορείτε να ορίσετε μια επιλογή ή να αγγίξετε παρατεταμένα τη γραμμή διευθύνσεων, για να αλλάξετε τη θέση.</translation>
 <translation id="5458366071038729214">Εδώ θα βρίσκετε τους ιστοτόπους που ακολουθείτε.</translation>
 <translation id="5468068603361015296">Θέλετε να κατεβάσετε ούτως ή άλλως το αρχείο <ph name="FILE_NAME" />;</translation>
 <translation id="548278423535722844">Άνοιγμα σε εφαρμογή χαρτών</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 dd704b9..e16081a 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
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Volver al sitio</translation>
 <translation id="544776284582297024">Para abrir pestañas y visitar varias páginas al mismo tiempo, toca el botón "pestañas abiertas"</translation>
 <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Cuando el dispositivo está plegado, puedes elegir una opción o mantener pulsada la barra de direcciones para cambiar la posición.</translation>
 <translation id="5458366071038729214">Los sitios que sigas aparecerán aquí</translation>
 <translation id="5468068603361015296">¿Quieres descargar <ph name="FILE_NAME" /> de todos modos?</translation>
 <translation id="548278423535722844">Abrirla en una aplicación de mapas</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index 90d7c6fd8..677f47be 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Volver ao sitio</translation>
 <translation id="544776284582297024">Para abrir pestanas e visitar distintas páxinas ao mesmo tempo, toca o botón de pestanas abertas</translation>
 <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Cando o dispositivo está pregado, podes escoller unha opción ou manter premida a barra de enderezos para cambiar a posición.</translation>
 <translation id="5458366071038729214">Aquí atoparás os sitios que segues</translation>
 <translation id="5468068603361015296">Queres descargar <ph name="FILE_NAME" /> de todas as formas?</translation>
 <translation id="548278423535722844">Abrir na aplicación de mapas</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 4f638a1..5c4bd1e 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
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">સાઇટ પર પાછા ફરો</translation>
 <translation id="544776284582297024">ટૅબ ખોલી અને વિવિધ પેજની એક સાથે મુલાકાત લેવા માટે, ટૅબ ખોલો બટન પર ટૅપ કરો</translation>
 <translation id="5454166040603940656"><ph name="PROVIDER" /> સાથે</translation>
+<translation id="5454215368971121976">જ્યારે તમારું ડિવાઇસ ફોલ્ડ કરવામાં આવે, ત્યારે સ્થિતિ બદલવા માટે તમે કોઈ વિકલ્પ પસંદ કરી શકો છો અથવા ઍડ્રેસ બાર ટચ કરીને થોડીવાર દબાવી રાખી શકો છો</translation>
 <translation id="5458366071038729214">તમે જે સાઇટ ફૉલો કરશો, તે અહીં દેખાશે</translation>
 <translation id="5468068603361015296">શું તમે તેમ છતાં <ph name="FILE_NAME" /> ડાઉનલોડ કરવા માગો છો?</translation>
 <translation id="548278423535722844">નકશા અ‍ૅપ્લિકેશનમાં ખોલો</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index c401914..c65bbe1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Kembali ke situs</translation>
 <translation id="544776284582297024">Untuk membuka tab dan mengunjungi halaman yang berbeda secara bersamaan, ketuk tombol tab terbuka</translation>
 <translation id="5454166040603940656">dengan <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Saat perangkat dilipat, Anda dapat memilih opsi atau menyentuh lama kolom URL untuk mengubah posisi.</translation>
 <translation id="5458366071038729214">Anda akan menemukan situs yang Anda ikuti di sini</translation>
 <translation id="5468068603361015296">Ingin tetap mendownload <ph name="FILE_NAME" />?</translation>
 <translation id="548278423535722844">Buka di aplikasi peta</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index 94d1ccf..6e5f1c7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">חזרה לאתר</translation>
 <translation id="544776284582297024">כדי לפתוח כרטיסיות ולהיכנס לדפים שונים בו-זמנית, יש להקיש על לחצן הכרטיסיות הפתוחות</translation>
 <translation id="5454166040603940656">עם <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">כשהמכשיר מקופל, אפשר לבחור מהאפשרויות למטה או ללחוץ לחיצה ארוכה על סרגל הכתובות כדי לשנות את המיקום שלו.</translation>
 <translation id="5458366071038729214">כאן יוצגו האתרים שיתווספו למעקב</translation>
 <translation id="5468068603361015296">רוצה להוריד את <ph name="FILE_NAME" /> בכל זאת?</translation>
 <translation id="548278423535722844">פתיחה באפליקציית מפות</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 8c85c19..06de3851f 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
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">サイトに戻ってください</translation>
 <translation id="544776284582297024">タブを開いて複数のページに同時にアクセスするには、タブを開くボタンをタップします</translation>
 <translation id="5454166040603940656">- <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">デバイスが折りたたまれた状態のときに、オプションを選択するか、アドレスバーを長押しして位置を変更できます。</translation>
 <translation id="5458366071038729214">フォローしたサイトがここに表示されます</translation>
 <translation id="5468068603361015296"><ph name="FILE_NAME" /> のダウンロードを続行しますか?</translation>
 <translation id="548278423535722844">マップアプリで開く</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 00fea5d..25de56c 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
@@ -971,6 +971,7 @@
 <translation id="5444999712122199445">ಸೈಟ್‌ಗೆ ಹಿಂತಿರುಗಿ</translation>
 <translation id="544776284582297024">ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಒಂದೇ ಸಮಯದಲ್ಲಿ ವಿಭಿನ್ನ ಪುಟಗಳಿಗೆ ಭೇಟಿ ನೀಡಲು, ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ ಬಟನ್ ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="5454166040603940656"><ph name="PROVIDER" /> ಜೊತೆಗೆ</translation>
+<translation id="5454215368971121976">ನಿಮ್ಮ ಸಾಧನವನ್ನು ಫೋಲ್ಡ್ ಮಾಡಿದಾಗ, ನೀವು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿಕೊಳ್ಳಬಹುದು ಅಥವಾ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸಲು ವಿಳಾಸ ಪಟ್ಟಿಯನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಒತ್ತಿ ಹಿಡಿಯಿರಿ.</translation>
 <translation id="5458366071038729214">ನೀವು ಫಾಲೋ ಮಾಡುವ ಸೈಟ್‌ಗಳನ್ನು ಇಲ್ಲಿ ಹುಡುಕಬಹುದು</translation>
 <translation id="5468068603361015296">ಹೇಗಿದ್ದರೂ <ph name="FILE_NAME" /> ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ನೀವು ಬಯಸುವಿರಾ?</translation>
 <translation id="548278423535722844">ನಕ್ಷೆಗಳ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index e16d715..8b553749 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">사이트로 돌아가기</translation>
 <translation id="544776284582297024">탭을 열어 동시에 여러 페이지를 방문하려면 탭 열기 버튼 탭하기</translation>
 <translation id="5454166040603940656">제공업체: <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">기기를 접은 상태에서 옵션을 선택하거나 주소 표시줄을 길게 터치하여 위치를 변경할 수 있습니다.</translation>
 <translation id="5458366071038729214">팔로우하는 사이트가 여기에 표시됩니다</translation>
 <translation id="5468068603361015296">그래도 <ph name="FILE_NAME" /> 파일을 다운로드하시겠습니까?</translation>
 <translation id="548278423535722844">지도 앱에서 열기</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
index baaa26d6..9ad0f1a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Atgriezieties vietnē.</translation>
 <translation id="544776284582297024">Lai atvērtu cilnes un vienlaikus apmeklētu vairākas lapas, pieskarieties pogai “atvērt cilnes”</translation>
 <translation id="5454166040603940656">izmantojot <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Kad ierīce ir salocīta, varat izvēlēties opciju vai pieskarties adreses joslai un turēt to, lai mainītu tās pozīciju.</translation>
 <translation id="5458366071038729214">Šeit būs redzamas vietnes, kurām sekojat</translation>
 <translation id="5468068603361015296">Vai tomēr vēlaties lejupielādēt failu “<ph name="FILE_NAME" />”?</translation>
 <translation id="548278423535722844">Atvērt karšu lietotnē</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 10d1901..c2dee07 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
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Сайт руу буцах</translation>
 <translation id="544776284582297024">Табуудыг нээн, өөр хуудаснуудад нэгэн зэрэг зочлохын тулд табуудыг нээх товчлуурыг товшино уу</translation>
 <translation id="5454166040603940656"><ph name="PROVIDER" />-тэй</translation>
+<translation id="5454215368971121976">Төхөөрөмжөө эвхэгдсэн үед та байрлалыг нь өөрчлөхийн тулд сонголт сонгох, хаяг оруулах хэсэг дээр хүрээд удаан дарах боломжтой.</translation>
 <translation id="5458366071038729214">Та дагадаг сайтуудаа эндээс олно</translation>
 <translation id="5468068603361015296">Та <ph name="FILE_NAME" />-г ямартай ч татахыг хүсэж байна уу?</translation>
 <translation id="548278423535722844">Газрын зургийн апп-д нээх</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
index 56a4168..a0c7586 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">ਸਾਈਟ 'ਤੇ ਵਾਪਸ ਜਾਓ</translation>
 <translation id="544776284582297024">ਟੈਬਾਂ ਨੂੰ ਖੋਲ੍ਹਣ ਅਤੇ ਇੱਕੋ ਵੇਲੇ ਵੱਖ-ਵੱਖ ਪੰਨਿਆਂ 'ਤੇ ਜਾਣ ਲਈ, 'ਟੈਬਾਂ ਖੋਲ੍ਹੋ' ਬਟਨ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="5454166040603940656"><ph name="PROVIDER" /> ਨਾਲ</translation>
+<translation id="5454215368971121976">ਜਦੋਂ ਡੀਵਾਈਸ ਫੋਲਡ ਕੀਤਾ ਹੁੰਦਾ ਹੈਂ, ਤਾਂ ਤੁਸੀਂ ਸਥਿਤੀ ਨੂੰ ਬਦਲਣ ਲਈ ਕੋਈ ਵਿਕਲਪ ਚੁਣ ਸਕਦੇ ਹੋ ਜਾਂ ਪਤਾ ਬਾਰ ਨੂੰ ਸਪਰਸ਼ ਕਰ ਕੇ ਰੱਖ ਸਕਦੇ ਹੋ।</translation>
 <translation id="5458366071038729214">ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਨੁਸਰਣ ਕੀਤੀਆਂ ਸਾਈਟਾਂ ਤੁਹਾਨੂੰ ਇੱਥੇ ਦਿਸਣਗੀਆਂ</translation>
 <translation id="5468068603361015296">ਕੀ ਤੁਸੀਂ ਫਿਰ ਵੀ <ph name="FILE_NAME" /> ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="548278423535722844">'ਨਕਸ਼ੇ ਐਪ' ਵਿੱਚ ਖੋਲ੍ਹੋ</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 f094f40c..e701f44 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
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Wróć do witryny</translation>
 <translation id="544776284582297024">Aby otworzyć karty i jednocześnie wejść na kilka stron, kliknij przycisk otwierania kart</translation>
 <translation id="5454166040603940656">za pomocą <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Gdy urządzenie jest złożone, możesz wybrać opcję lub nacisnąć i przytrzymać pasek adresu, aby zmienić jego pozycję.</translation>
 <translation id="5458366071038729214">Tu znajdziesz witryny, które obserwujesz</translation>
 <translation id="5468068603361015296">Czy mimo wszystko chcesz pobrać plik <ph name="FILE_NAME" />?</translation>
 <translation id="548278423535722844">Otwórz w aplikacji z mapami</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index 653f4366..561048c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Revino pe site</translation>
 <translation id="544776284582297024">Pentru a deschide file și a accesa pagini diferite în același timp, atinge butonul Deschide file</translation>
 <translation id="5454166040603940656">cu <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Când dispozitivul este pliat, poți să alegi o opțiune sau să atingi lung bara de adrese pentru a-i schimba poziția.</translation>
 <translation id="5458366071038729214">Aici vei vedea site-urile pe care le urmărești</translation>
 <translation id="5468068603361015296">Vrei să descarci oricum <ph name="FILE_NAME" />?</translation>
 <translation id="548278423535722844">Deschide în aplicația Maps</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index 5fcaeb3..4acf657 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -973,6 +973,7 @@
 <translation id="5444999712122199445">Gå tillbaka till webbplatsen</translation>
 <translation id="544776284582297024">Tryck på Öppna flikar om du vill öppna flikar och besöka olika sidor samtidigt</translation>
 <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">När enheten är hopfälld kan du välja ett alternativ eller trycka länge på adressfältet om du vill ändra placeringen.</translation>
 <translation id="5458366071038729214">Här hittar du webbplatser som du följer</translation>
 <translation id="5468068603361015296">Vill du ladda ned <ph name="FILE_NAME" /> ändå?</translation>
 <translation id="548278423535722844">Öppna i kartapp</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index 356627cb..76f6a80 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">Rudi kwenye tovuti</translation>
 <translation id="544776284582297024">Ili ufungue vichupo na utembelee kurasa mbalimbali kwa wakati mmoja, gusa kitufe cha 'vichupo vilivyofunguliwa'</translation>
 <translation id="5454166040603940656">na <ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">Kifaa chako kinapokunjwa, unaweza kuteua chaguo au uguse na ushikilie sehemu ya anwani ili ubadilishe nafasi.</translation>
 <translation id="5458366071038729214">Utapata tovuti unazofuatilia hapa</translation>
 <translation id="5468068603361015296">Je, ungependa kupakia <ph name="FILE_NAME" /> licha ya hayo?</translation>
 <translation id="548278423535722844">Fungua katika programu ya ramani</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index b0772ca..323dcd0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -972,6 +972,7 @@
 <translation id="5444999712122199445">返回网站</translation>
 <translation id="544776284582297024">若要打开多个标签页并同时访问不同网页,请点按“打开的标签页”按钮</translation>
 <translation id="5454166040603940656">提供方:<ph name="PROVIDER" /></translation>
+<translation id="5454215368971121976">当设备折叠时,如果想调整地址栏的位置,可以轻触并按住地址栏或者选择以下一项:</translation>
 <translation id="5458366071038729214">您会在此处看到自己已关注的网站</translation>
 <translation id="5468068603361015296">您仍要下载 <ph name="FILE_NAME" /> 吗?</translation>
 <translation id="548278423535722844">在地图应用中打开</translation>
diff --git a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc
index 7bb5341f..0febdd9 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc
@@ -7,7 +7,11 @@
 #include "base/notimplemented.h"
 #include "base/notreached.h"
 #include "chrome/browser/password_manager/password_change_delegate.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
+#include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/ui/passwords/passwords_model_delegate.h"
+#include "chrome/browser/ui/passwords/ui_utils.h"
 #include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/url_formatter/elide_url.h"
@@ -35,12 +39,13 @@
 }
 
 std::u16string PasswordChangeInfoBubbleController::GetTitle() const {
-  CHECK(password_change_delegate_);
-  switch (password_change_delegate_->GetCurrentState()) {
+  switch (state_) {
     case PasswordChangeDelegate::State::kWaitingForChangePasswordForm:
       return l10n_util::GetStringUTF16(
           IDS_PASSWORD_MANAGER_UI_SIGN_IN_CHECK_TITLE);
     case PasswordChangeDelegate::State::kChangingPassword:
+      return l10n_util::GetStringUTF16(
+          IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_TITLE);
     case PasswordChangeDelegate::State::kPasswordSuccessfullyChanged:
     case PasswordChangeDelegate::State::kPasswordChangeFailed:
       NOTIMPLEMENTED();
@@ -76,5 +81,18 @@
   return url_formatter::FormatUrlForSecurityDisplay(
       password_change_delegate_->GetChangePasswordUrl(),
       url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC);
-  ;
+}
+
+void PasswordChangeInfoBubbleController::OnGooglePasswordManagerLinkClicked() {
+  if (delegate_) {
+    delegate_->NavigateToPasswordManagerSettingsPage(
+        password_manager::ManagePasswordsReferrer::kPasswordChangeInfoBubble);
+  }
+}
+
+std::u16string PasswordChangeInfoBubbleController::GetPrimaryAccountEmail() {
+  Profile* profile = GetProfile();
+  return base::UTF8ToUTF16(GetDisplayableAccountName(
+      SyncServiceFactory::GetForProfile(profile),
+      IdentityManagerFactory::GetForProfile(profile)));
 }
diff --git a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h
index 5ab4043..4c9133b6 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h
+++ b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h
@@ -33,6 +33,8 @@
   void CancelPasswordChange();
   // Get the change password origin to be displayed in UI.
   std::u16string GetDisplayOrigin();
+  void OnGooglePasswordManagerLinkClicked();
+  std::u16string GetPrimaryAccountEmail();
 
  private:
   PasswordChangeDelegate::State state_;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc
index 5fa93b6..d95933e 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc
@@ -55,3 +55,11 @@
   EXPECT_CALL(*password_change_delegate(), Stop);
   controller()->CancelPasswordChange();
 }
+
+TEST_F(PasswordChangeBubbleControllerTest, OpensPasswordManagerPage) {
+  CreateController();
+  EXPECT_CALL(*delegate(), NavigateToPasswordManagerSettingsPage(
+                               password_manager::ManagePasswordsReferrer::
+                                   kPasswordChangeInfoBubble));
+  controller()->OnGooglePasswordManagerLinkClicked();
+}
diff --git a/chrome/browser/password_manager/android/password_infobar_utils_unittest.cc b/chrome/browser/ui/passwords/display_account_info_unittest.cc
similarity index 87%
rename from chrome/browser/password_manager/android/password_infobar_utils_unittest.cc
rename to chrome/browser/ui/passwords/display_account_info_unittest.cc
index 5fb007c..50e46d7c 100644
--- a/chrome/browser/password_manager/android/password_infobar_utils_unittest.cc
+++ b/chrome/browser/ui/passwords/display_account_info_unittest.cc
@@ -2,9 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/password_manager/android/password_infobar_utils.h"
-
 #include "base/test/task_environment.h"
+#include "chrome/browser/ui/passwords/ui_utils.h"
 #include "components/signin/public/base/consent_level.h"
 #include "components/signin/public/identity_manager/account_capabilities_test_mutator.h"
 #include "components/signin/public/identity_manager/identity_test_environment.h"
@@ -13,15 +12,14 @@
 #include "components/sync/test/test_sync_user_settings.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace password_manager {
 namespace {
-
 const char kTestEmail[] = "john.doe@gmail.com";
 const char kTestFullName[] = "John Doe";
+}  // namespace
 
-class PasswordInfobarUtilsTest : public testing::Test {
+class DisplayAccountInfoTest : public testing::Test {
  public:
-  PasswordInfobarUtilsTest() {
+  DisplayAccountInfoTest() {
     // `identity_test_environment_` starts signed-out by default, but
     // `sync_service_` starts signed-in, make them consistent.
     sync_service_.SetSignedOut();
@@ -71,7 +69,7 @@
   signin::IdentityTestEnvironment identity_test_environment_;
 };
 
-TEST_F(PasswordInfobarUtilsTest, SignedOut) {
+TEST_F(DisplayAccountInfoTest, SignedOut) {
   EXPECT_EQ(
       GetAccountInfoForPasswordMessages(sync_service(), identity_manager()),
       std::nullopt);
@@ -79,7 +77,7 @@
             std::string());
 }
 
-TEST_F(PasswordInfobarUtilsTest, SignedInWithPasswordsEnabled) {
+TEST_F(DisplayAccountInfoTest, SignedInWithPasswordsEnabled) {
   SignInWithoutSync();
 
   std::optional<AccountInfo> account_info =
@@ -90,7 +88,7 @@
             kTestEmail);
 }
 
-TEST_F(PasswordInfobarUtilsTest, SignedInWithPasswordsDisabled) {
+TEST_F(DisplayAccountInfoTest, SignedInWithPasswordsDisabled) {
   SignInWithoutSync();
   sync_service()->GetUserSettings()->SetSelectedType(
       syncer::UserSelectableType::kPasswords, false);
@@ -102,7 +100,7 @@
             std::string());
 }
 
-TEST_F(PasswordInfobarUtilsTest, SyncingWithPasswordsEnabled) {
+TEST_F(DisplayAccountInfoTest, SyncingWithPasswordsEnabled) {
   SignInWithSync();
 
   std::optional<AccountInfo> account_info =
@@ -113,7 +111,7 @@
             kTestEmail);
 }
 
-TEST_F(PasswordInfobarUtilsTest, SyncingWithPasswordsDisabled) {
+TEST_F(DisplayAccountInfoTest, SyncingWithPasswordsDisabled) {
   SignInWithSync();
   sync_service()->GetUserSettings()->SetSelectedType(
       syncer::UserSelectableType::kPasswords, false);
@@ -125,13 +123,10 @@
             std::string());
 }
 
-TEST_F(PasswordInfobarUtilsTest, NonDisplayableEmail) {
+TEST_F(DisplayAccountInfoTest, NonDisplayableEmail) {
   SignInWithSync();
   SetCanDisplaySignedInAccountEmail(false);
 
   EXPECT_EQ(GetDisplayableAccountName(sync_service(), identity_manager()),
             kTestFullName);
 }
-
-}  // namespace
-}  // namespace password_manager
diff --git a/chrome/browser/ui/passwords/ui_utils.cc b/chrome/browser/ui/passwords/ui_utils.cc
index d431f36..3001013c 100644
--- a/chrome/browser/ui/passwords/ui_utils.cc
+++ b/chrome/browser/ui/passwords/ui_utils.cc
@@ -28,7 +28,9 @@
 #include "components/password_manager/core/browser/password_manager_client.h"
 #include "components/password_manager/core/browser/password_manager_constants.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
+#include "components/password_manager/core/browser/password_sync_util.h"
 #include "components/password_manager/core/common/password_manager_features.h"
+#include "components/signin/public/identity_manager/identity_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/sync/service/sync_service.h"
 #include "components/sync/service/sync_user_settings.h"
@@ -245,3 +247,27 @@
   return kKeyIcon;
 #endif
 }
+
+std::optional<AccountInfo> GetAccountInfoForPasswordMessages(
+    syncer::SyncService* sync_service,
+    signin::IdentityManager* identity_manager) {
+  if (!password_manager::sync_util::HasChosenToSyncPasswords(sync_service)) {
+    return std::nullopt;
+  }
+  CoreAccountId account_id =
+      identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin);
+  return identity_manager->FindExtendedAccountInfoByAccountId(account_id);
+}
+
+std::string GetDisplayableAccountName(
+    syncer::SyncService* sync_service,
+    signin::IdentityManager* identity_manager) {
+  std::optional<AccountInfo> account_info =
+      GetAccountInfoForPasswordMessages(sync_service, identity_manager);
+  if (!account_info.has_value()) {
+    return "";
+  }
+  return account_info->CanHaveEmailAddressDisplayed()
+             ? account_info.value().email
+             : account_info.value().full_name;
+}
diff --git a/chrome/browser/ui/passwords/ui_utils.h b/chrome/browser/ui/passwords/ui_utils.h
index a3dc90e..330658d 100644
--- a/chrome/browser/ui/passwords/ui_utils.h
+++ b/chrome/browser/ui/passwords/ui_utils.h
@@ -37,6 +37,7 @@
 
 class Browser;
 class Profile;
+struct AccountInfo;
 
 // The desired width and height in pixels for an account avatar.
 constexpr int kAvatarImageSize = 32;
@@ -126,4 +127,13 @@
 // Returns different version for branded builds.
 const gfx::VectorIcon& GooglePasswordManagerVectorIcon();
 
+std::optional<AccountInfo> GetAccountInfoForPasswordMessages(
+    syncer::SyncService* sync_service,
+    signin::IdentityManager* identity_manager);
+
+// Returns the user account name to be displayed in dialogs, bubbles, etc.
+std::string GetDisplayableAccountName(
+    syncer::SyncService* sync_service,
+    signin::IdentityManager* identity_manager);
+
 #endif  // CHROME_BROWSER_UI_PASSWORDS_UI_UTILS_H_
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
index 0a230d79..f785f7b 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -339,14 +339,13 @@
         base::NumberToString16(justification_field_->GetText().length()),
         base::NumberToString16(kMaxJustificationTextLength)));
 
-    justification_text_length_->SetEnabledColor(
+    justification_text_length_->SetEnabledColorId(
         IsJustificationLengthWithinLimit()
             // The original color is not stored because the theme may change
             // while the dialog is visible. To get around this, another label
             // (justification_field_label_) is used as the color reference.
-            ? justification_field_label_->GetEnabledColor()
-            : justification_text_length_->GetColorProvider()->GetColor(
-                  ui::kColorAlertHighSeverity));
+            ? justification_field_label_->GetEnabledColorId()
+            : ui::kColorAlertHighSeverity);
   }
 
   void ChildPreferredSizeChanged(views::View* child) override {
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
index 6fdccc5..ff3ebca 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
+++ b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
@@ -325,8 +325,6 @@
       .SetNotifyEnterExitOnChild(true)
       .SetOrientation(views::LayoutOrientation::kVertical)
       .SetCrossAxisAlignment(views::LayoutAlignment::kStretch)
-      .SetProperty(views::kBoxLayoutFlexKey,
-                   views::BoxLayoutFlexSpecification())
       .SetProperty(views::kElementIdentifierKey,
                    kExtensionMenuItemViewElementId)
       .AddChildren(
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.cc b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
index 5c9e563..f4dbc46 100644
--- a/chrome/browser/ui/views/frame/tab_strip_region_view.cc
+++ b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
@@ -215,11 +215,8 @@
   }
 
   if (ShouldShowNewTabButton(browser)) {
-    if (features::IsTabstripComboButtonEnabled()) {
-      if (tab_strip_combo_button) {
-        tab_strip_combo_button_ =
-            AddChildView(std::move(tab_strip_combo_button));
-      }
+    if (tab_strip_combo_button) {
+      tab_strip_combo_button_ = AddChildView(std::move(tab_strip_combo_button));
     } else {
       std::unique_ptr<TabStripControlButton> tab_strip_control_button =
           std::make_unique<TabStripControlButton>(
diff --git a/chrome/browser/ui/views/page_action/page_action_view.cc b/chrome/browser/ui/views/page_action/page_action_view.cc
index 3667efb..8cdc9b86 100644
--- a/chrome/browser/ui/views/page_action/page_action_view.cc
+++ b/chrome/browser/ui/views/page_action/page_action_view.cc
@@ -117,28 +117,19 @@
 }
 
 void PageActionView::UpdateIconImage() {
-  // If PageActionView is not hosted within a Widget hierarchy early return
-  // here. `UpdateIconImage()` is called in OnThemeChanged() and will update as
-  // needed when added to a Widget and on theme changes. Returning early avoids
-  // a call to GetNativeTheme() when no hosting Widget is present which falls
-  // through to the deprecated global NativeTheme accessor.
-  if (!GetWidget()) {
+  // Icon default size may be different from the size used in the location bar.
+  const int icon_size = GetLayoutConstant(LOCATION_BAR_TRAILING_ICON_SIZE);
+  const auto icon_image = action_item_->GetImage();
+  if (icon_image.Size() == gfx::Size(icon_size, icon_size)) {
     return;
   }
 
-  // Icon default size may be different from the size used in the location bar.
-  const int icon_size = GetLayoutConstant(LOCATION_BAR_TRAILING_ICON_SIZE);
+  const gfx::ImageSkia image = gfx::CreateVectorIcon(
+      *action_item_->GetImage().GetVectorIcon().vector_icon(), icon_size,
+      GetForegroundColor());
 
-  const auto icon_image = action_item_->GetImage();
-  if (icon_image.Size() != gfx::Size(icon_size, icon_size)) {
-    const gfx::ImageSkia image = gfx::CreateVectorIcon(
-        *action_item_->GetImage().GetVectorIcon().vector_icon(), icon_size,
-        GetForegroundColor());
-    if (!image.isNull()) {
-      SetImageModel(ui::ImageModel::FromImageSkia(image));
-    }
-
-    return;
+  if (!image.isNull()) {
+    SetImageModel(ui::ImageModel::FromImageSkia(image));
   }
 }
 
diff --git a/chrome/browser/ui/views/page_action/page_action_view_unittest.cc b/chrome/browser/ui/views/page_action/page_action_view_unittest.cc
index c5fd0ae..3eebc9e 100644
--- a/chrome/browser/ui/views/page_action/page_action_view_unittest.cc
+++ b/chrome/browser/ui/views/page_action/page_action_view_unittest.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/ui/views/page_action/page_action_controller.h"
 #include "chrome/browser/ui/views/page_action/page_action_model.h"
 #include "chrome/browser/ui/views/page_action/page_action_model_observer.h"
+#include "components/vector_icons/vector_icons.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -38,16 +39,12 @@
 
   void SetUp() override {
     views::ViewsTestBase::SetUp();
-    SkBitmap bitmap;
-    bitmap.allocN32Pixels(16, 16);
-    bitmap.eraseColor(SK_ColorRED);
-    gfx::ImageSkia test_image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
-
+    // Use any arbitrary vector icon.
+    auto image = ui::ImageModel::FromVectorIcon(vector_icons::kBackArrowIcon,
+                                                ui::kColorSysPrimary,
+                                                /*icon_size=*/16);
     action_item_ = actions::ActionManager::Get().AddAction(
-        actions::ActionItem::Builder()
-            .SetActionId(0)
-            .SetImage(ui::ImageModel::FromImage(gfx::Image(test_image)))
-            .Build());
+        actions::ActionItem::Builder().SetActionId(0).SetImage(image).Build());
     page_action_view_ = std::make_unique<PageActionView>(
         action_item_, &icon_label_view_delegate_);
     action_view_controller_ = std::make_unique<views::ActionViewController>();
diff --git a/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.cc b/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.cc
new file mode 100644
index 0000000..0560096
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.cc
@@ -0,0 +1,110 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.h"
+
+#include <memory>
+#include <string>
+
+#include "base/functional/bind.h"
+#include "base/notimplemented.h"
+#include "base/notreached.h"
+#include "chrome/browser/password_manager/password_change_delegate.h"
+#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
+#include "chrome/browser/ui/passwords/passwords_model_delegate.h"
+#include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/passwords/views_utils.h"
+#include "chrome/grit/branded_strings.h"
+#include "chrome/grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/controls/styled_label.h"
+#include "ui/views/layout/flex_layout.h"
+#include "ui/views/style/typography.h"
+
+namespace {
+std::unique_ptr<views::Label> CreateLabel(const std::u16string& text) {
+  auto body_text = std::make_unique<views::Label>(
+      text, views::style::CONTEXT_DIALOG_BODY_TEXT);
+  body_text->SetMultiLine(true);
+  body_text->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  return body_text;
+}
+
+}  // namespace
+
+PasswordChangeInfoBubbleView::PasswordChangeInfoBubbleView(
+    content::WebContents* web_contents,
+    views::View* anchor_view,
+    PasswordChangeDelegate::State state)
+    : PasswordBubbleViewBase(web_contents,
+                             anchor_view,
+                             /*easily_dismissable=*/true),
+      controller_(PasswordsModelDelegateFromWebContents(web_contents), state) {
+  views::FlexLayout* flex_layout =
+      SetLayoutManager(std::make_unique<views::FlexLayout>());
+  flex_layout->SetOrientation(views::LayoutOrientation::kVertical)
+      .SetCrossAxisAlignment(views::LayoutAlignment::kStretch)
+      .SetIgnoreDefaultMainAxisMargins(true)
+      .SetCollapseMargins(true)
+      .SetDefault(
+          views::kMarginsKey,
+          gfx::Insets::VH(ChromeLayoutProvider::Get()->GetDistanceMetric(
+                              DISTANCE_CONTROL_LIST_VERTICAL),
+                          0));
+
+  AddChildView(CreateLabel(controller_.GetDisplayOrigin()));
+  std::unique_ptr<views::View> body_text = CreateBodyText(state);
+  body_text->SetID(kChangingPasswordBodyText);
+  AddChildView(std::move(body_text));
+
+  SetButtons(static_cast<int>(ui::mojom::DialogButton::kCancel));
+  SetButtonLabel(ui::mojom::DialogButton::kCancel,
+                 l10n_util::GetStringUTF16(
+                     IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_CANCEL));
+  SetCancelCallback(
+      base::BindOnce(&PasswordChangeInfoBubbleController::CancelPasswordChange,
+                     base::Unretained(&controller_)));
+}
+
+PasswordChangeInfoBubbleView::~PasswordChangeInfoBubbleView() = default;
+
+PasswordBubbleControllerBase* PasswordChangeInfoBubbleView::GetController() {
+  return &controller_;
+}
+
+const PasswordBubbleControllerBase*
+PasswordChangeInfoBubbleView::GetController() const {
+  return &controller_;
+}
+
+std::unique_ptr<views::View> PasswordChangeInfoBubbleView::CreateBodyText(
+    PasswordChangeDelegate::State state) {
+  switch (state) {
+    case PasswordChangeDelegate::State::kWaitingForChangePasswordForm:
+      return CreateLabel(l10n_util::GetStringUTF16(
+          IDS_PASSWORD_MANAGER_UI_SIGN_IN_CHECK_DETAILS));
+    case PasswordChangeDelegate::State::kChangingPassword: {
+      base::RepeatingClosure open_password_manager_closure =
+          base::BindRepeating(&PasswordChangeInfoBubbleController::
+                                  OnGooglePasswordManagerLinkClicked,
+                              base::Unretained(&controller_));
+      return CreateGooglePasswordManagerLabel(
+          /*text_message_id=*/
+          IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS,
+          /*link_message_id=*/
+          IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SYNCED_TO_ACCOUNT,
+          controller_.GetPrimaryAccountEmail(), open_password_manager_closure,
+          CONTEXT_DIALOG_BODY_TEXT_SMALL, views::style::STYLE_PRIMARY);
+    }
+    case PasswordChangeDelegate::State::kPasswordSuccessfullyChanged:
+    case PasswordChangeDelegate::State::kPasswordChangeFailed:
+      NOTIMPLEMENTED();
+  }
+  NOTREACHED();
+}
+
+BEGIN_METADATA(PasswordChangeInfoBubbleView)
+END_METADATA
diff --git a/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.h b/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.h
new file mode 100644
index 0000000..f0823e0
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.h
@@ -0,0 +1,37 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_PASSWORD_CHANGE_INFO_BUBBLE_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_PASSWORD_CHANGE_INFO_BUBBLE_VIEW_H_
+
+#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
+#include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
+
+// Bubble view, which is displayed during the password change flow. It is shown
+// when checking if user is signed into a web site.
+class PasswordChangeInfoBubbleView : public PasswordBubbleViewBase {
+  METADATA_HEADER(PasswordChangeInfoBubbleView, PasswordBubbleViewBase)
+
+ public:
+  // Bubble body text label id. It's set here to be used in unit tests.
+  static constexpr int kChangingPasswordBodyText = 1;
+
+  PasswordChangeInfoBubbleView(content::WebContents* web_contents,
+                               views::View* anchor_view,
+                               PasswordChangeDelegate::State state);
+
+ private:
+  ~PasswordChangeInfoBubbleView() override;
+
+  // PasswordBubbleViewBase
+  PasswordBubbleControllerBase* GetController() override;
+  const PasswordBubbleControllerBase* GetController() const override;
+
+  std::unique_ptr<views::View> CreateBodyText(
+      PasswordChangeDelegate::State state);
+
+  PasswordChangeInfoBubbleController controller_;
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_PASSWORD_CHANGE_INFO_BUBBLE_VIEW_H_
diff --git a/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view_unittest.cc b/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view_unittest.cc
new file mode 100644
index 0000000..9d8b3e3f
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view_unittest.cc
@@ -0,0 +1,120 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.h"
+
+#include <memory>
+#include <string>
+
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/password_manager/password_change_delegate.h"
+#include "chrome/browser/password_manager/password_change_delegate_mock.h"
+#include "chrome/browser/sync/sync_service_factory.h"
+#include "chrome/browser/ui/views/passwords/password_bubble_view_test_base.h"
+#include "chrome/grit/branded_strings.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/signin/public/identity_manager/account_info.h"
+#include "components/sync/service/sync_service.h"
+#include "components/sync/test/test_sync_service.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/test/test_event.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/controls/styled_label.h"
+#include "ui/views/test/button_test_api.h"
+#include "url/gurl.h"
+
+using testing::Return;
+using testing::ReturnRef;
+
+namespace {
+const std::u16string kTestEmail = u"account@example.com";
+
+std::unique_ptr<KeyedService> BuildTestSyncService(
+    AccountInfo account_info,
+    content::BrowserContext* context) {
+  auto sync_service = std::make_unique<syncer::TestSyncService>();
+  sync_service->SetSignedIn(signin::ConsentLevel::kSync, account_info);
+  return sync_service;
+}
+
+std::u16string GetBodyText() {
+  const std::u16string link = l10n_util::GetStringUTF16(
+      IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SYNCED_TO_ACCOUNT);
+  return l10n_util::GetStringFUTF16(
+      IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_DETAILS, link,
+      kTestEmail);
+}
+}  // namespace
+
+class PasswordChangeInfoBubbleViewTest : public PasswordBubbleViewTestBase {
+ public:
+  PasswordChangeInfoBubbleViewTest() = default;
+  ~PasswordChangeInfoBubbleViewTest() override = default;
+
+  void SetUp() override {
+    PasswordBubbleViewTestBase::SetUp();
+    password_change_delegate_ = std::make_unique<PasswordChangeDelegateMock>();
+    ON_CALL(*password_change_delegate_, GetChangePasswordUrl())
+        .WillByDefault(ReturnRef(password_change_url_));
+    ON_CALL(*model_delegate_mock(), GetPasswordChangeDelegate())
+        .WillByDefault(Return(password_change_delegate_.get()));
+    AccountInfo account_info = identity_test_env()->MakePrimaryAccountAvailable(
+        base::UTF16ToUTF8(kTestEmail), signin::ConsentLevel::kSignin);
+    SyncServiceFactory::GetInstance()->SetTestingFactory(
+        profile(),
+        base::BindRepeating(&BuildTestSyncService, std::move(account_info)));
+  }
+
+  void TearDown() override {
+    view_->GetWidget()->CloseWithReason(
+        views::Widget::ClosedReason::kCloseButtonClicked);
+    view_ = nullptr;
+    PasswordBubbleViewTestBase::TearDown();
+  }
+
+  void CreateAndShowView(PasswordChangeDelegate::State state) {
+    CreateAnchorViewAndShow();
+
+    ON_CALL(*password_change_delegate_, GetCurrentState())
+        .WillByDefault(Return(state));
+    view_ =
+        new PasswordChangeInfoBubbleView(web_contents(), anchor_view(), state);
+    views::BubbleDialogDelegateView::CreateBubble(view_)->Show();
+  }
+
+  PasswordChangeDelegateMock* password_change_delegate() {
+    return password_change_delegate_.get();
+  }
+
+  PasswordChangeInfoBubbleView* view() { return view_; }
+
+ private:
+  std::unique_ptr<PasswordChangeDelegateMock> password_change_delegate_;
+  GURL password_change_url_ = GURL("https://example.com/password");
+  raw_ptr<PasswordChangeInfoBubbleView> view_;
+};
+
+TEST_F(PasswordChangeInfoBubbleViewTest, ChangingPasswordBubbleLayout) {
+  CreateAndShowView(PasswordChangeDelegate::State::kChangingPassword);
+
+  EXPECT_TRUE(view()->GetCancelButton());
+  views::StyledLabel* bodyTextLabel =
+      static_cast<views::StyledLabel*>(view()->GetViewByID(
+          PasswordChangeInfoBubbleView::kChangingPasswordBodyText));
+  EXPECT_EQ(bodyTextLabel->GetText(), GetBodyText());
+  EXPECT_EQ(view()->GetWindowTitle(),
+            l10n_util::GetStringUTF16(
+                IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_INFO_BUBBLE_TITLE));
+}
+
+TEST_F(PasswordChangeInfoBubbleViewTest, CancelClosesTheBubbleAndCancelsFlow) {
+  CreateAndShowView(PasswordChangeDelegate::State::kChangingPassword);
+
+  EXPECT_CALL(*password_change_delegate(), Stop);
+  EXPECT_CALL(*model_delegate_mock(), OnBubbleHidden);
+  views::test::ButtonTestApi(view()->GetCancelButton())
+      .NotifyClick(ui::test::TestEvent());
+}
diff --git a/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc b/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc
index b1b87b8..9a2c340 100644
--- a/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc
+++ b/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc
@@ -4,7 +4,9 @@
 
 #include "chrome/browser/ui/views/passwords/password_change/password_change_view_factory.h"
 
-#include "chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h"
+#include "base/notimplemented.h"
+#include "base/notreached.h"
+#include "chrome/browser/ui/views/passwords/password_change/password_change_info_bubble_view.h"
 
 PasswordBubbleViewBase* CreatePasswordChangeBubbleView(
     PasswordChangeDelegate* delegate,
@@ -15,9 +17,11 @@
       // same view is returned for all states.
     case PasswordChangeDelegate::State::kWaitingForChangePasswordForm:
     case PasswordChangeDelegate::State::kChangingPassword:
+      return new PasswordChangeInfoBubbleView(web_contents, anchor_view,
+                                              delegate->GetCurrentState());
     case PasswordChangeDelegate::State::kPasswordSuccessfullyChanged:
     case PasswordChangeDelegate::State::kPasswordChangeFailed:
-      return new SignInCheckBubbleView(web_contents, anchor_view,
-                                       delegate->GetCurrentState());
+      NOTIMPLEMENTED();
   }
+  NOTREACHED();
 }
diff --git a/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.cc b/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.cc
deleted file mode 100644
index 7d560174..0000000
--- a/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2024 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h"
-
-#include <memory>
-#include <string>
-
-#include "base/functional/bind.h"
-#include "chrome/browser/password_manager/password_change_delegate.h"
-#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
-#include "chrome/browser/ui/passwords/passwords_model_delegate.h"
-#include "chrome/browser/ui/views/chrome_layout_provider.h"
-#include "chrome/grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/metadata/metadata_impl_macros.h"
-#include "ui/views/layout/flex_layout.h"
-
-namespace {
-std::unique_ptr<views::Label> CreateBodyText(const std::u16string& text) {
-  auto body_text = std::make_unique<views::Label>(
-      text, views::style::CONTEXT_DIALOG_BODY_TEXT);
-  body_text->SetMultiLine(true);
-  body_text->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-  return body_text;
-}
-}  // namespace
-
-SignInCheckBubbleView::SignInCheckBubbleView(
-    content::WebContents* web_contents,
-    views::View* anchor_view,
-    PasswordChangeDelegate::State state)
-    : PasswordBubbleViewBase(web_contents,
-                             anchor_view,
-                             /*easily_dismissable=*/true),
-      controller_(PasswordsModelDelegateFromWebContents(web_contents), state) {
-  views::FlexLayout* flex_layout =
-      SetLayoutManager(std::make_unique<views::FlexLayout>());
-  flex_layout->SetOrientation(views::LayoutOrientation::kVertical)
-      .SetCrossAxisAlignment(views::LayoutAlignment::kStretch)
-      .SetIgnoreDefaultMainAxisMargins(true)
-      .SetCollapseMargins(true)
-      .SetDefault(
-          views::kMarginsKey,
-          gfx::Insets::VH(ChromeLayoutProvider::Get()->GetDistanceMetric(
-                              DISTANCE_CONTROL_LIST_VERTICAL),
-                          0));
-
-  AddChildView(CreateBodyText(controller_.GetDisplayOrigin()));
-  AddChildView(CreateBodyText(l10n_util::GetStringUTF16(
-      IDS_PASSWORD_MANAGER_UI_SIGN_IN_CHECK_DETAILS)));
-
-  SetButtons(static_cast<int>(ui::mojom::DialogButton::kCancel));
-  SetButtonLabel(ui::mojom::DialogButton::kCancel,
-                 l10n_util::GetStringUTF16(
-                     IDS_PASSWORD_MANAGER_UI_PASSWORD_CHANGE_CANCEL));
-  SetCancelCallback(
-      base::BindOnce(&PasswordChangeInfoBubbleController::CancelPasswordChange,
-                     base::Unretained(&controller_)));
-}
-
-SignInCheckBubbleView::~SignInCheckBubbleView() = default;
-
-PasswordBubbleControllerBase* SignInCheckBubbleView::GetController() {
-  return &controller_;
-}
-
-const PasswordBubbleControllerBase* SignInCheckBubbleView::GetController()
-    const {
-  return &controller_;
-}
-
-BEGIN_METADATA(SignInCheckBubbleView)
-END_METADATA
diff --git a/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h b/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h
deleted file mode 100644
index 397d641..0000000
--- a/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2024 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_SIGN_IN_CHECK_BUBBLE_VIEW_H_
-#define CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_SIGN_IN_CHECK_BUBBLE_VIEW_H_
-
-#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
-#include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
-
-// Bubble view, which is displayed during the password change flow. It is shown
-// when checking if user is signed into a web site.
-class SignInCheckBubbleView : public PasswordBubbleViewBase {
-  METADATA_HEADER(SignInCheckBubbleView, PasswordBubbleViewBase)
-
- public:
-  SignInCheckBubbleView(content::WebContents* web_contents,
-                        views::View* anchor_view,
-                        PasswordChangeDelegate::State state);
-
- private:
-  ~SignInCheckBubbleView() override;
-
-  // PasswordBubbleViewBase
-  PasswordBubbleControllerBase* GetController() override;
-  const PasswordBubbleControllerBase* GetController() const override;
-
-  PasswordChangeInfoBubbleController controller_;
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_SIGN_IN_CHECK_BUBBLE_VIEW_H_
diff --git a/chrome/browser/ui/views/passwords/views_utils.cc b/chrome/browser/ui/views/passwords/views_utils.cc
index e04652d..e6f6799 100644
--- a/chrome/browser/ui/views/passwords/views_utils.cc
+++ b/chrome/browser/ui/views/passwords/views_utils.cc
@@ -61,7 +61,8 @@
     int link_message_id,
     const std::u16string& email,
     base::RepeatingClosure open_link_closure,
-    int context) {
+    int context,
+    int style) {
   const std::u16string link = l10n_util::GetStringUTF16(link_message_id);
 
   std::vector<size_t> offsets;
@@ -71,7 +72,7 @@
   auto label = std::make_unique<views::StyledLabel>();
   label->SetText(text);
   label->SetTextContext(context);
-  label->SetDefaultTextStyle(views::style::STYLE_SECONDARY);
+  label->SetDefaultTextStyle(style);
   label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
 
   label->AddStyleRange(
@@ -102,7 +103,8 @@
     int text_message_id,
     int link_message_id,
     base::RepeatingClosure open_link_closure,
-    int context) {
+    int context,
+    int style) {
   const std::u16string link = l10n_util::GetStringUTF16(link_message_id);
 
   size_t link_offset;
@@ -112,7 +114,7 @@
   auto label = std::make_unique<views::StyledLabel>();
   label->SetText(text);
   label->SetTextContext(context);
-  label->SetDefaultTextStyle(views::style::STYLE_SECONDARY);
+  label->SetDefaultTextStyle(style);
   label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
 
   label->AddStyleRange(
diff --git a/chrome/browser/ui/views/passwords/views_utils.h b/chrome/browser/ui/views/passwords/views_utils.h
index a77c024a..21ff16eb 100644
--- a/chrome/browser/ui/views/passwords/views_utils.h
+++ b/chrome/browser/ui/views/passwords/views_utils.h
@@ -39,7 +39,8 @@
     int link_message_id,
     const std::u16string& email,
     base::RepeatingClosure open_link_closure,
-    int context = CONTEXT_DIALOG_BODY_TEXT_SMALL);
+    int context = CONTEXT_DIALOG_BODY_TEXT_SMALL,
+    int style = views::style::STYLE_SECONDARY);
 
 // Similar to method above but the Password Manager text isn't clickable.
 std::unique_ptr<views::Label> CreateGooglePasswordManagerLabel(
@@ -57,7 +58,8 @@
     int text_message_id,
     int link_message_id,
     base::RepeatingClosure open_link_closure,
-    int context = CONTEXT_DIALOG_BODY_TEXT_SMALL);
+    int context = CONTEXT_DIALOG_BODY_TEXT_SMALL,
+    int style = views::style::STYLE_SECONDARY);
 
 // Returns label diaplying the username and password. It handles edge cases like
 // empty username and federated credentials.
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc
index 3e6d101..5f8b84d 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc
@@ -504,6 +504,13 @@
 class SyncErrorStateProvider : public StateProvider,
                                public syncer::SyncServiceObserver {
  public:
+  struct AvatarError {
+    AvatarSyncErrorType avatar_error = AvatarSyncErrorType::kUpgradeClientError;
+    std::string email;
+
+    friend bool operator==(const AvatarError&, const AvatarError&) = default;
+  };
+
   explicit SyncErrorStateProvider(
       StateObserver& state_observer,
       Profile& profile,
@@ -511,7 +518,7 @@
       : StateProvider(state_observer),
         profile_(profile),
         sync_error_type_(sync_error_type),
-        last_avatar_error_(::GetAvatarSyncErrorType(&profile)) {
+        last_avatar_error_(GetAvatarError(&profile)) {
     if (auto* sync_service = SyncServiceFactory::GetForProfile(&profile)) {
       sync_service_observation_.Observe(sync_service);
     }
@@ -527,17 +534,37 @@
   // std::nullopt if there is no error or if the error does not match
   // `sync_error_type_`.
   std::optional<AvatarSyncErrorType> GetLastAvatarSyncErrorType() const {
+    return HasError(last_avatar_error_) ? std::optional<AvatarSyncErrorType>(
+                                              last_avatar_error_->avatar_error)
+                                        : std::nullopt;
+  }
+
+  std::optional<AvatarError> GetLastAvatarSyncError() const {
     return HasError(last_avatar_error_) ? last_avatar_error_ : std::nullopt;
   }
 
  private:
+  // Computes the current avatar error.
+  static std::optional<AvatarError> GetAvatarError(Profile* profile) {
+    std::optional<AvatarSyncErrorType> error_type =
+        ::GetAvatarSyncErrorType(profile);
+    if (!error_type) {
+      return std::nullopt;
+    }
+
+    const syncer::SyncService* service =
+        SyncServiceFactory::GetForProfile(profile);
+    CHECK(service);
+
+    return AvatarError{error_type.value(), service->GetAccountInfo().email};
+  }
+
   // StateProvider:
   void accept(StateVisitor& visitor) const override { visitor.visit(this); }
 
   // syncer::SyncServiceObserver:
   void OnStateChanged(syncer::SyncService*) override {
-    const std::optional<AvatarSyncErrorType> error =
-        ::GetAvatarSyncErrorType(&profile_.get());
+    const std::optional<AvatarError> error = GetAvatarError(&profile_.get());
     if (last_avatar_error_ == error) {
       return;
     }
@@ -560,13 +587,13 @@
   // Returns true if `avatar_sync_error` has a value and the value matches
   // `sync_error_type_`. If `sync_error_type_` is std::nullopt then any
   // non-nullopt `avatar_sync_error` is a match.
-  bool HasError(
-      const std::optional<AvatarSyncErrorType>& avatar_sync_error) const {
+  bool HasError(const std::optional<AvatarError>& avatar_sync_error) const {
     if (!avatar_sync_error) {
       return false;  // No sync error.
     }
 
-    if (sync_error_type_.has_value() && avatar_sync_error != sync_error_type_) {
+    if (sync_error_type_.has_value() &&
+        avatar_sync_error->avatar_error != sync_error_type_) {
       return false;  // Error has the wrong type.
     }
 
@@ -580,7 +607,7 @@
 
   // Caches the value of the last error so the class can detect when it
   // changes and notify changes.
-  std::optional<AvatarSyncErrorType> last_avatar_error_;
+  std::optional<AvatarError> last_avatar_error_;
 
   base::ScopedObservation<syncer::SyncService, syncer::SyncServiceObserver>
       sync_service_observation_{this};
@@ -1475,15 +1502,16 @@
               *state_manager_->GetActiveStateProvider())
               .AsSyncError();
       CHECK(sync_error_state);
-      std::optional<AvatarSyncErrorType> sync_error =
-          sync_error_state->GetLastAvatarSyncErrorType();
+      std::optional<internal::SyncErrorStateProvider::AvatarError> sync_error =
+          sync_error_state->GetLastAvatarSyncError();
       CHECK(sync_error.has_value());
       return l10n_util::GetStringFUTF16(
           IDS_AVATAR_BUTTON_SYNC_ERROR_TOOLTIP, GetShortProfileName(),
           GetAvatarSyncErrorDescription(
-              *sync_error,
+              sync_error->avatar_error,
               IdentityManagerFactory::GetForProfile(profile_)
-                  ->HasPrimaryAccount(signin::ConsentLevel::kSync)));
+                  ->HasPrimaryAccount(signin::ConsentLevel::kSync),
+              sync_error->email));
     }
     case ButtonState::kSigninPending:
     case ButtonState::kExplicitTextShowing:
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc
index f4779e31..2a1d24d 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -715,9 +715,12 @@
   const std::optional<AvatarSyncErrorType> error =
       GetAvatarSyncErrorType(profile);
   if (error) {
+    std::u16string error_description = GetAvatarSyncErrorDescription(
+        *error, is_sync_feature_enabled,
+        identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin)
+            .email);
     BuildSyncInfoWithCallToAction(
-        GetAvatarSyncErrorDescription(*error, is_sync_feature_enabled),
-        GetSyncErrorButtonText(*error),
+        std::move(error_description), GetSyncErrorButtonText(*error),
         base::BindRepeating(&ProfileMenuView::OnSyncErrorButtonClicked,
                             base::Unretained(this), *error),
         /*show_sync_badge=*/is_sync_feature_enabled);
@@ -864,8 +867,8 @@
 
   // Sync error, including "paused".
   if (error.has_value()) {
-    params.subtitle =
-        GetAvatarSyncErrorDescription(*error, is_sync_feature_enabled);
+    params.subtitle = GetAvatarSyncErrorDescription(
+        *error, is_sync_feature_enabled, primary_account_info.email);
     params.button_text = GetSyncErrorButtonText(error.value());
     params.button_action =
         base::BindRepeating(&ProfileMenuView::OnSyncErrorButtonClicked,
diff --git a/chrome/browser/ui/views/web_apps/web_app_install_dialog_delegate.cc b/chrome/browser/ui/views/web_apps/web_app_install_dialog_delegate.cc
index d8083171..414b625e 100644
--- a/chrome/browser/ui/views/web_apps/web_app_install_dialog_delegate.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_install_dialog_delegate.cc
@@ -56,6 +56,8 @@
 
 }  // namespace
 
+constexpr int kMinBoundsForInstallDialog = 50;
+
 std::u16string NormalizeSuggestedAppTitle(const std::u16string& title) {
   std::u16string normalized = title;
   if (base::StartsWith(normalized, u"https://")) {
@@ -71,8 +73,9 @@
   const gfx::Size& current_size = widget->GetSize();
   const gfx::Size& preferred_size =
       widget->GetContentsView()->GetPreferredSize();
-  return current_size.width() < preferred_size.width() ||
-         current_size.height() < preferred_size.height();
+  int min_width = preferred_size.width() - kMinBoundsForInstallDialog;
+  int min_height = preferred_size.height() - kMinBoundsForInstallDialog;
+  return current_size.width() < min_width || current_size.height() < min_height;
 }
 
 DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(WebAppInstallDialogDelegate,
diff --git a/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.cc b/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.cc
index f6b6835..ea0a1e0 100644
--- a/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.cc
+++ b/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.cc
@@ -26,7 +26,8 @@
       /*source_browser_app_id=*/std::nullopt,
       /* source_tab_app_id= */ std::nullopt,
       NavigationHandlingInitialResult::kNotHandledByNavigationHandling,
-      /*first_navigation_app_id=*/std::nullopt, WindowOpenDisposition::UNKNOWN);
+      /*first_navigation_app_id=*/std::nullopt, WindowOpenDisposition::UNKNOWN,
+      /*navigation_params_browser=*/nullptr);
 }
 
 // static
@@ -38,7 +39,8 @@
   return NavigationCapturingRedirectionInfo(
       source_browser_app_id, source_tab_app_id,
       NavigationHandlingInitialResult::kAuxContext,
-      /*first_navigation_app_id=*/std::nullopt, disposition);
+      /*first_navigation_app_id=*/std::nullopt, disposition,
+      /*navigation_params_browser=*/nullptr);
 }
 
 // Created for user-modified or capturable navigations that don't have an
@@ -48,11 +50,13 @@
 NavigationCapturingRedirectionInfo::NoInitialActionRedirectionHandlingEligible(
     const std::optional<webapps::AppId>& source_browser_app_id,
     const std::optional<webapps::AppId>& source_tab_app_id,
-    WindowOpenDisposition disposition) {
+    WindowOpenDisposition disposition,
+    Browser* navigation_params_browser) {
   return NavigationCapturingRedirectionInfo(
       source_browser_app_id, source_tab_app_id,
       NavigationHandlingInitialResult::kBrowserTab,
-      /*first_navigation_app_id=*/std::nullopt, disposition);
+      /*first_navigation_app_id=*/std::nullopt, disposition,
+      navigation_params_browser);
 }
 
 // static
@@ -62,13 +66,14 @@
     const std::optional<webapps::AppId>& source_tab_app_id,
     const webapps::AppId& capturing_app_id,
     blink::mojom::DisplayMode capturing_display_mode,
-    WindowOpenDisposition disposition) {
+    WindowOpenDisposition disposition,
+    Browser* navigation_params_browser) {
   return NavigationCapturingRedirectionInfo(
       source_browser_app_id, source_tab_app_id,
       capturing_display_mode == blink::mojom::DisplayMode::kBrowser
           ? NavigationHandlingInitialResult::kForcedNewAppContextBrowserTab
           : NavigationHandlingInitialResult::kForcedNewAppContextAppWindow,
-      capturing_app_id, disposition);
+      capturing_app_id, disposition, navigation_params_browser);
 }
 
 // static
@@ -78,13 +83,14 @@
     const std::optional<webapps::AppId>& source_tab_app_id,
     const webapps::AppId& capturing_app_id,
     blink::mojom::DisplayMode capturing_display_mode,
-    WindowOpenDisposition disposition) {
+    WindowOpenDisposition disposition,
+    Browser* navigation_params_browser) {
   return NavigationCapturingRedirectionInfo(
       source_browser_app_id, source_tab_app_id,
       capturing_display_mode == blink::mojom::DisplayMode::kBrowser
           ? NavigationHandlingInitialResult::kNavigateCapturedNewBrowserTab
           : NavigationHandlingInitialResult::kNavigateCapturedNewAppWindow,
-      capturing_app_id, disposition);
+      capturing_app_id, disposition, navigation_params_browser);
 }
 
 // static
@@ -93,11 +99,12 @@
     const std::optional<webapps::AppId>& source_browser_app_id,
     const std::optional<webapps::AppId>& source_tab_app_id,
     const webapps::AppId& capturing_app_id,
-    WindowOpenDisposition disposition) {
+    WindowOpenDisposition disposition,
+    Browser* navigation_params_browser) {
   return NavigationCapturingRedirectionInfo(
       source_browser_app_id, source_tab_app_id,
       NavigationHandlingInitialResult::kNavigateCapturingNavigateExisting,
-      capturing_app_id, disposition);
+      capturing_app_id, disposition, navigation_params_browser);
 }
 
 NavigationCapturingRedirectionInfo::~NavigationCapturingRedirectionInfo() =
@@ -126,12 +133,14 @@
     const std::optional<webapps::AppId>& source_tab_app_id,
     NavigationHandlingInitialResult initial_nav_handling_result,
     const std::optional<webapps::AppId>& first_navigation_app_id,
-    WindowOpenDisposition disposition)
+    WindowOpenDisposition disposition,
+    Browser* navigation_params_browser)
     : source_browser_app_id_(source_browser_app_id),
       source_tab_app_id_(source_tab_app_id),
       initial_nav_handling_result_(initial_nav_handling_result),
       first_navigation_app_id_(first_navigation_app_id),
-      disposition_(disposition) {}
+      disposition_(disposition),
+      navigation_params_browser_(navigation_params_browser) {}
 
 NavigationCapturingNavigationHandleUserData::
     ~NavigationCapturingNavigationHandleUserData() = default;
diff --git a/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.h b/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.h
index 04719ed..163095b 100644
--- a/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.h
+++ b/chrome/browser/ui/web_applications/navigation_capturing_navigation_handle_user_data.h
@@ -82,7 +82,8 @@
   NoInitialActionRedirectionHandlingEligible(
       const std::optional<webapps::AppId>& source_browser_app_id,
       const std::optional<webapps::AppId>& source_tab_app_id,
-      WindowOpenDisposition disposition);
+      WindowOpenDisposition disposition,
+      Browser* navigation_params_browser);
 
   // Created for non-user modified navigations that usually launch a new app
   // window.
@@ -91,7 +92,8 @@
       const std::optional<webapps::AppId>& source_tab_app_id,
       const webapps::AppId& capturing_app_id,
       blink::mojom::DisplayMode capturing_display_mode,
-      WindowOpenDisposition disposition);
+      WindowOpenDisposition disposition,
+      Browser* navigation_params_browser);
 
   // Created for non user modified navigations that result in a capturable
   // navigation launching a new app container (window or tab).
@@ -100,7 +102,8 @@
       const std::optional<webapps::AppId>& source_tab_app_id,
       const webapps::AppId& capturing_app_id,
       blink::mojom::DisplayMode capturing_display_mode,
-      WindowOpenDisposition disposition);
+      WindowOpenDisposition disposition,
+      Browser* navigation_params_browser);
 
   // Created for non user modified navigations that result in a capturable
   // navigation opening an existing app container (window or tab). This is
@@ -110,7 +113,8 @@
       const std::optional<webapps::AppId>& source_browser_app_id,
       const std::optional<webapps::AppId>& source_tab_app_id,
       const webapps::AppId& capturing_app_id,
-      WindowOpenDisposition disposition);
+      WindowOpenDisposition disposition,
+      Browser* navigation_params_browser);
 
   ~NavigationCapturingRedirectionInfo();
 
@@ -143,6 +147,10 @@
   // The `WindowOpenDisposition` of the first navigation.
   WindowOpenDisposition disposition() const { return disposition_; }
 
+  Browser* navigation_params_browser() const {
+    return navigation_params_browser_;
+  }
+
   base::Value ToDebugData() const;
 
  private:
@@ -151,7 +159,8 @@
       const std::optional<webapps::AppId>& source_tab_app_id,
       NavigationHandlingInitialResult initial_nav_handling_result,
       const std::optional<webapps::AppId>& first_navigation_app_id,
-      WindowOpenDisposition disposition);
+      WindowOpenDisposition disposition,
+      Browser* navigation_params_browser);
 
   std::optional<webapps::AppId> source_browser_app_id_;
   std::optional<webapps::AppId> source_tab_app_id_;
@@ -159,6 +168,7 @@
       NavigationHandlingInitialResult::kBrowserTab;
   std::optional<webapps::AppId> first_navigation_app_id_;
   WindowOpenDisposition disposition_ = WindowOpenDisposition::UNKNOWN;
+  raw_ptr<Browser> navigation_params_browser_ = nullptr;
 };
 
 // Data that is tied to the NavigationHandle. Used in the
diff --git a/chrome/browser/ui/web_applications/navigation_capturing_redirection_throttle.cc b/chrome/browser/ui/web_applications/navigation_capturing_redirection_throttle.cc
index f5104c5..9b0f48c0 100644
--- a/chrome/browser/ui/web_applications/navigation_capturing_redirection_throttle.cc
+++ b/chrome/browser/ui/web_applications/navigation_capturing_redirection_throttle.cc
@@ -191,6 +191,8 @@
       redirection_info.source_tab_app_id();
   std::optional<webapps::AppId> navigation_handling_first_stage_app =
       redirection_info.first_navigation_app_id();
+  Browser* navigation_params_browser =
+      redirection_info.navigation_params_browser();
 
   // Do not handle redirections for navigations that create an auxiliary
   // browsing context, or if the app window that opened is not a part of the
@@ -340,14 +342,11 @@
     return content::NavigationThrottle::PROCEED;
   }
 
-  // TODO(https://crbug.com/382542355): Populate
-  // `navigate_params_requested_browser` by passing it through the redirection
-  // info from `MaybeHandleAppNavigation`.
   ClientModeAndBrowser client_mode_and_browser =
       GetEffectiveClientModeAndBrowserForCapturing(
           *profile_, *target_app_id, source_tab_app_id,
           /*ignore_browser_tabs_for_standalone_apps=*/false,
-          /*navigate_params_requested_browser=*/nullptr);
+          /*navigate_params_requested_browser=*/navigation_params_browser);
 
   // After this point:
   // - The navigation is non-user-modified.
diff --git a/chrome/browser/ui/web_applications/web_app_launch_utils.cc b/chrome/browser/ui/web_applications/web_app_launch_utils.cc
index 2aea2f7..e67fe6c 100644
--- a/chrome/browser/ui/web_applications/web_app_launch_utils.cc
+++ b/chrome/browser/ui/web_applications/web_app_launch_utils.cc
@@ -636,6 +636,7 @@
     std::optional<webapps::AppId> source_browser_app_id,
     std::optional<webapps::AppId> source_tab_app_id,
     WindowOpenDisposition disposition,
+    Browser* navigation_params_browser,
     base::Value::Dict debug_data) {
   return AppNavigationResult(
       /*capturing_feature_enabled=*/true,
@@ -643,7 +644,8 @@
       /*perform_app_handling_tasks_in_web_contents=*/false,
       NavigationCapturingRedirectionInfo::
           NoInitialActionRedirectionHandlingEligible(
-              source_browser_app_id, source_tab_app_id, disposition),
+              source_browser_app_id, source_tab_app_id, disposition,
+              navigation_params_browser),
       std::move(debug_data));
 }
 
@@ -655,6 +657,7 @@
     blink::mojom::DisplayMode new_client_display_mode,
     Browser* host_browser,
     WindowOpenDisposition disposition,
+    Browser* navigation_params_browser,
     base::Value::Dict debug_data) {
   CHECK(WebAppRegistrar::IsSupportedDisplayModeForNavigationCapture(
       new_client_display_mode));
@@ -668,7 +671,7 @@
       /*perform_app_handling_tasks_in_web_contents=*/true,
       NavigationCapturingRedirectionInfo::ForcedNewContext(
           source_browser_app_id, source_tab_app_id, capturing_app_id,
-          new_client_display_mode, disposition),
+          new_client_display_mode, disposition, navigation_params_browser),
       std::move(debug_data));
 }
 
@@ -680,6 +683,7 @@
     blink::mojom::DisplayMode new_client_display_mode,
     Browser* host_browser,
     WindowOpenDisposition disposition,
+    Browser* navigation_params_browser,
     base::Value::Dict debug_data) {
   CHECK(WebAppRegistrar::IsSupportedDisplayModeForNavigationCapture(
       new_client_display_mode));
@@ -692,7 +696,7 @@
       /*perform_app_handling_tasks_in_web_contents=*/true,
       NavigationCapturingRedirectionInfo::CapturedNewContext(
           source_browser_app_id, source_tab_app_id, capturing_app_id,
-          new_client_display_mode, disposition),
+          new_client_display_mode, disposition, navigation_params_browser),
       std::move(debug_data));
 }
 
@@ -704,6 +708,7 @@
     Browser* app_browser,
     int browser_tab,
     WindowOpenDisposition disposition,
+    Browser* navigation_params_browser,
     base::Value::Dict debug_data) {
   CHECK(disposition == WindowOpenDisposition::NEW_FOREGROUND_TAB);
   CHECK(browser_tab != -1);
@@ -713,7 +718,7 @@
       /*perform_app_handling_tasks_in_web_contents=*/true,
       NavigationCapturingRedirectionInfo::CapturedNavigateExisting(
           source_browser_app_id, source_tab_app_id, capturing_app_id,
-          disposition),
+          disposition, navigation_params_browser),
       std::move(debug_data));
 }
 
@@ -1709,7 +1714,7 @@
   if (!controlling_app_id) {
     return AppNavigationResult::NoInitialActionRedirectionHandlingEligible(
         source_browser_app_id, source_contents_app_id, params.disposition,
-        std::move(debug_data));
+        params.browser, std::move(debug_data));
   }
   CHECK(controlling_app_display_mode);
   CHECK(client_mode_and_browser);
@@ -1726,7 +1731,7 @@
         app_display_mode != DisplayMode::kBrowser) {
       return AppNavigationResult::NoInitialActionRedirectionHandlingEligible(
           source_browser_app_id, source_contents_app_id, params.disposition,
-          std::move(debug_data));
+          params.browser, std::move(debug_data));
     }
     // Case: Shift-clicks with a new top level browsing context.
     if (params.disposition == WindowOpenDisposition::NEW_WINDOW) {
@@ -1740,7 +1745,7 @@
       }
       return AppNavigationResult::ForcedNewAppContext(
           source_browser_app_id, source_contents_app_id, app_id,
-          app_display_mode, app_host_window, params.disposition,
+          app_display_mode, app_host_window, params.disposition, params.browser,
           std::move(debug_data));
     }
 
@@ -1761,7 +1766,7 @@
         return AppNavigationResult::ForcedNewAppContext(
             source_browser_app_id, source_contents_app_id, app_id,
             app_display_mode, params.browser, params.disposition,
-            std::move(debug_data));
+            params.browser, std::move(debug_data));
       }
       Browser* app_host_window;
       if (app_display_mode == DisplayMode::kBrowser) {
@@ -1777,12 +1782,12 @@
       }
       return AppNavigationResult::ForcedNewAppContext(
           source_browser_app_id, source_contents_app_id, app_id,
-          app_display_mode, app_host_window, params.disposition,
+          app_display_mode, app_host_window, params.disposition, params.browser,
           std::move(debug_data));
     }
     return AppNavigationResult::NoInitialActionRedirectionHandlingEligible(
         source_browser_app_id, source_contents_app_id, params.disposition,
-        std::move(debug_data));
+        params.browser, std::move(debug_data));
   }
 
   if (params.disposition != WindowOpenDisposition::NEW_FOREGROUND_TAB) {
@@ -1843,7 +1848,7 @@
     return AppNavigationResult::CapturedNavigateExisting(
         source_browser_app_id, source_contents_app_id, app_id,
         client_mode_and_browser->browser, *client_mode_and_browser->tab_index,
-        params.disposition, std::move(debug_data));
+        params.disposition, params.browser, std::move(debug_data));
   }
 
   // Navigate new.
@@ -1880,7 +1885,7 @@
 
   return AppNavigationResult::CapturedNewClient(
       source_browser_app_id, source_contents_app_id, app_id, app_display_mode,
-      host_window, params.disposition, std::move(debug_data));
+      host_window, params.disposition, params.browser, std::move(debug_data));
 }
 
 void EnqueueLaunchParams(content::WebContents* contents,
@@ -1941,6 +1946,7 @@
   debug_value.Set("handled_by_app", true);
   debug_value.Set("params.navigated_or_inserted_contents",
                   base::ToString(params.navigated_or_inserted_contents));
+  debug_value.Set("params.browser", base::ToString(params.browser));
   provider->navigation_capturing_log().StoreNavigationCapturedDebugData(
       base::Value(std::move(debug_value)));
 }
diff --git a/chrome/browser/ui/web_applications/web_app_launch_utils.h b/chrome/browser/ui/web_applications/web_app_launch_utils.h
index 18fa9cf..3717c5b 100644
--- a/chrome/browser/ui/web_applications/web_app_launch_utils.h
+++ b/chrome/browser/ui/web_applications/web_app_launch_utils.h
@@ -95,6 +95,7 @@
       std::optional<webapps::AppId> source_browser_app_id,
       std::optional<webapps::AppId> source_tab_app_id,
       WindowOpenDisposition disposition,
+      Browser* navigation_params_browser,
       base::Value::Dict debug_data);
 
   // Create AppNavigationResult for a navigation triggered by user modified link
@@ -106,6 +107,7 @@
       blink::mojom::DisplayMode new_client_display_mode,
       Browser* host_browser,
       WindowOpenDisposition disposition,
+      Browser* navigation_params_browser,
       base::Value::Dict debug_data);
 
   // Create AppNavigationResult for a navigation that is captured by non user
@@ -118,6 +120,7 @@
       blink::mojom::DisplayMode new_client_display_mode,
       Browser* host_browser,
       WindowOpenDisposition disposition,
+      Browser* navigation_params_browser,
       base::Value::Dict debug_data);
 
   // Create AppNavigationResult for a navigation that is captured by non user
@@ -130,6 +133,7 @@
       Browser* app_browser,
       int browser_tab,
       WindowOpenDisposition disposition,
+      Browser* navigation_params_browser,
       base::Value::Dict debug_data);
 
   AppNavigationResult(AppNavigationResult&&);
diff --git a/chrome/browser/ui/webui/BUILD.gn b/chrome/browser/ui/webui/BUILD.gn
index 5ea207b..0d928ba9 100644
--- a/chrome/browser/ui/webui/BUILD.gn
+++ b/chrome/browser/ui/webui/BUILD.gn
@@ -48,10 +48,14 @@
     deps += [
       "//chrome/browser/ui/lens",
       "//chrome/browser/ui/views/side_panel",
+      "//chrome/browser/ui/webui/signin",
     ]
 
     if (!is_chromeos) {
-      deps += [ "//chrome/browser/ui/webui/whats_new" ]
+      deps += [
+        "//chrome/browser/ui/webui/signin:profile",
+        "//chrome/browser/ui/webui/whats_new",
+      ]
     }
   }
 
diff --git a/chrome/browser/ui/webui/ash/settings/pages/internet/internet_section.cc b/chrome/browser/ui/webui/ash/settings/pages/internet/internet_section.cc
index c86a5bf..a671fb0 100644
--- a/chrome/browser/ui/webui/ash/settings/pages/internet/internet_section.cc
+++ b/chrome/browser/ui/webui/ash/settings/pages/internet/internet_section.cc
@@ -835,8 +835,7 @@
        IDS_SETTINGS_INTERNET_TOGGLE_WIFI_ACCESSIBILITY_LABEL},
       {"knownNetworksAll", IDS_SETTINGS_INTERNET_KNOWN_NETWORKS_ALL},
       {"knownNetworksButton", IDS_SETTINGS_INTERNET_KNOWN_NETWORKS_BUTTON},
-      {"knownNetworksMessage",
-       IDS_OS_SETTINGS_REVAMP_INTERNET_KNOWN_NETWORKS_MESSAGE},
+      {"knownNetworksMessage", IDS_OS_SETTINGS_INTERNET_KNOWN_NETWORKS_MESSAGE},
       {"knownNetworksPreferred",
        IDS_SETTINGS_INTERNET_KNOWN_NETWORKS_PREFFERED},
       {"knownNetworksMenuAddPreferred",
@@ -895,7 +894,7 @@
       {"networkNameserversLearnMore", IDS_LEARN_MORE},
       {"networkPrefer", IDS_SETTINGS_INTERNET_NETWORK_PREFER},
       {"networkPreferDescription",
-       IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_PREFER_DESCRIPTION},
+       IDS_OS_SETTINGS_INTERNET_NETWORK_PREFER_DESCRIPTION},
       {"networkPrimaryUserControlled",
        IDS_SETTINGS_INTERNET_NETWORK_PRIMARY_USER_CONTROLLED},
       {"networkA11yManagedByAdministrator",
@@ -925,8 +924,7 @@
       {"networkSectionProxyExpandA11yLabel",
        IDS_SETTINGS_INTERNET_NETWORK_SECTION_PROXY_ACCESSIBILITY_LABEL},
       {"networkShared", IDS_SETTINGS_INTERNET_NETWORK_SHARED},
-      {"networkSharedOwner",
-       IDS_OS_SETTINGS_REVAMP_INTERNET_NETWORK_SHARED_OWNER},
+      {"networkSharedOwner", IDS_OS_SETTINGS_INTERNET_NETWORK_SHARED_OWNER},
       {"networkSharedNotOwner", IDS_SETTINGS_INTERNET_NETWORK_SHARED_NOT_OWNER},
       {"networkVpnBuiltin", IDS_NETWORK_TYPE_VPN_BUILTIN},
       {"networkOutOfRange", IDS_SETTINGS_INTERNET_WIFI_NETWORK_OUT_OF_RANGE},
diff --git a/chrome/browser/ui/webui/ash/settings/pages/privacy/privacy_section.cc b/chrome/browser/ui/webui/ash/settings/pages/privacy/privacy_section.cc
index 95f4a69..0607d8d 100644
--- a/chrome/browser/ui/webui/ash/settings/pages/privacy/privacy_section.cc
+++ b/chrome/browser/ui/webui/ash/settings/pages/privacy/privacy_section.cc
@@ -307,12 +307,10 @@
        IDS_SETTINGS_SECURE_DNS_WITH_IDENTIFIERS_DESCRIPTION},
       {"secureDnsWithIdentifiersAndDomainConfigDescription",
        IDS_OS_SETTINGS_SECURE_DNS_WITH_IDENTIFIERS_AND_DOMAIN_CONFIG_DESCRIPTION},
-      {"secureDnsDialogTitle", IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TITLE},
-      {"secureDnsDialogBody", IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_BODY},
-      {"secureDnsDialogCancel",
-       IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_CANCEL},
-      {"secureDnsDialogTurnOff",
-       IDS_OS_SETTINGS_REVAMP_SECURE_DNS_DIALOG_TURN_OFF},
+      {"secureDnsDialogTitle", IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TITLE},
+      {"secureDnsDialogBody", IDS_OS_SETTINGS_SECURE_DNS_DIALOG_BODY},
+      {"secureDnsDialogCancel", IDS_OS_SETTINGS_SECURE_DNS_DIALOG_CANCEL},
+      {"secureDnsDialogTurnOff", IDS_OS_SETTINGS_SECURE_DNS_DIALOG_TURN_OFF},
       {"secureDnsAutomaticModeDescription",
        IDS_OS_SETTINGS_SECURE_DNS_AUTOMATIC_MODE_DESCRIPTION},
       {"secureDnsSecureDropdownModeNetworkDefaultDescription",
@@ -408,30 +406,29 @@
 
 void PrivacySection::AddLoadTimeData(content::WebUIDataSource* html_source) {
   webui::LocalizedString kLocalizedStrings[] = {
-      {"enableLogging", IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_TITLE},
-      {"enableLoggingDesc",
-       IDS_OS_SETTINGS_REVAMP_ENABLE_LOGGING_TOGGLE_DESCRIPTION},
+      {"enableLogging", IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE},
+      {"enableLoggingDesc", IDS_OS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESCRIPTION},
       {"enableContentProtectionAttestation",
        IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION},
       {"enableSuggestedContent",
-       IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_TITLE},
+       IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_TITLE},
       {"enableSuggestedContentDesc",
-       IDS_OS_SETTINGS_REVAMP_ENABLE_SUGGESTED_CONTENT_DESCRIPTION},
+       IDS_OS_SETTINGS_ENABLE_SUGGESTED_CONTENT_DESCRIPTION},
       {"peripheralDataAccessProtectionToggleTitle",
-       IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_TITLE},
+       IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_TITLE},
       {"peripheralDataAccessProtectionToggleDescription",
-       IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION},
+       IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_TOGGLE_DESCRIPTION},
       {"peripheralDataAccessProtectionWarningTitle",
-       IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE},
+       IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_TITLE},
       {"peripheralDataAccessProtectionWarningDescription",
-       IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION},
+       IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_DESCRIPTION},
       {"peripheralDataAccessProtectionWarningSubDescription",
-       IDS_OS_SETTINGS_REVAMP_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION},
+       IDS_OS_SETTINGS_DISABLE_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_SUB_DESCRIPTION},
       {"peripheralDataAccessProtectionCancelButton",
        IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_CANCEL_BUTTON_LABEL},
       {"peripheralDataAccessProtectionDisableButton",
-       IDS_OS_SETTINGS_REVAMP_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL},
-      {"privacyPageTitle", IDS_OS_SETTINGS_REVAMP_PRIVACY_TITLE},
+       IDS_OS_SETTINGS_DATA_ACCESS_PROTECTION_CONFIRM_DIALOG_ALLOW_BUTTON_LABEL},
+      {"privacyPageTitle", IDS_OS_SETTINGS_PRIVACY_TITLE},
       {"privacyMenuItemDescription",
        IDS_OS_SETTINGS_PRIVACY_MENU_ITEM_DESCRIPTION},
       {"smartPrivacyTitle", IDS_OS_SETTINGS_SMART_PRIVACY_TITLE},
@@ -693,7 +690,7 @@
 }
 
 int PrivacySection::GetSectionNameMessageId() const {
-  return IDS_OS_SETTINGS_REVAMP_PRIVACY_TITLE;
+  return IDS_OS_SETTINGS_PRIVACY_TITLE;
 }
 
 mojom::Section PrivacySection::GetSection() const {
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 0d930158..43b109c 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -724,6 +724,26 @@
 void AddGlicStrings(content::WebUIDataSource* html_source) {
   static constexpr webui::LocalizedString kLocalizedStrings[] = {
       {"glicPageTitle", IDS_SETTINGS_GLIC_PAGE_TITLE},
+      {"glicPreferencesSection", IDS_SETTINGS_GLIC_PREFERENCES_SECTION},
+      {"glicDataSection", IDS_SETTINGS_GLIC_DATA_SECTION},
+      {"glicOsWidgetToggle", IDS_SETTINGS_GLIC_OS_WIDGET_TOGGLE},
+      {"glicOsWidgetToggleSublabel",
+       IDS_SETTINGS_GLIC_OS_WIDGET_TOGGLE_SUBLABEL},
+      {"glicKeyboardShortcut", IDS_SETTINGS_GLIC_KEYBOARD_SHORTCUT},
+      {"glicKeyboardShortcutSublabel",
+       IDS_SETTINGS_GLIC_KEYBOARD_SHORTCUT_SUBLABEL},
+      {"glicLocationToggle", IDS_SETTINGS_GLIC_DATA_LOCATION_TOGGLE},
+      {"glicLocationToggleSublabel",
+       IDS_SETTINGS_GLIC_DATA_LOCATION_TOGGLE_SUBLABEL},
+      {"glicMicrophoneToggle", IDS_SETTINGS_GLIC_DATA_MICROPHONE_TOGGLE},
+      {"glicMicrophoneToggleSublabel",
+       IDS_SETTINGS_GLIC_DATA_MICROPHONE_TOGGLE_SUBLABEL},
+      {"glicTabAccessToggle", IDS_SETTINGS_GLIC_DATA_TAB_ACCESS_TOGGLE},
+      {"glicTabAccessToggleSublabel",
+       IDS_SETTINGS_GLIC_DATA_TAB_ACCESS_TOGGLE_SUBLABEL},
+      {"glicActivityButton", IDS_SETTINGS_GLIC_DATA_ACTIVITY_BUTTON},
+      {"glicActivityButtonSublabel",
+       IDS_SETTINGS_GLIC_DATA_ACTIVITY_BUTTON_SUBLABEL},
   };
   html_source->AddLocalizedStrings(kLocalizedStrings);
 }
diff --git a/chrome/browser/ui/webui/signin/BUILD.gn b/chrome/browser/ui/webui/signin/BUILD.gn
index 5f23110..156f07ba 100644
--- a/chrome/browser/ui/webui/signin/BUILD.gn
+++ b/chrome/browser/ui/webui/signin/BUILD.gn
@@ -440,6 +440,7 @@
     deps += [
       ":signin_ui_error",
       "//chrome/browser/search_engines",
+      "//chrome/browser/ui/webui/signin:profile",
       "//components/unified_consent",
       "//components/user_manager",
     ]
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt
index 7a73ca2..bc330fc9 100644
--- a/chrome/build/android-arm32.pgo.txt
+++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@
-chrome-android32-main-1734933580-dbe11371abf0a049093b5a99cbb2c7e0dd8e5e6e-8046f7fde6b872b9abbe3b2a743a74997eca6f41.profdata
+chrome-android32-main-1734955174-be74f280c8a495ca85153700bd44ed1ccc98f0a6-cd4d4057ce6c26f114210606a77cc5b6d53633c6.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt
index a7b3969a..ce9d461b 100644
--- a/chrome/build/android-arm64.pgo.txt
+++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@
-chrome-android64-main-1734928869-27ff8a3fdde3f4c6e3f7dda18a263f4fce8953ff-e7292ae95017855deb14ab60339b58723069357e.profdata
+chrome-android64-main-1734973787-c04aeaadf791e04aacce43a0d89d4d83663624a9-8a6d0004776ccdcaa7f006724680067508238c9a.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 9e80a31f..38399f0 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1734866726-4e705ce5f8c562084714e6641e11d10a73cee4d6-9a528ce44b9476db30a4492a1edbb452648ba7c3.profdata
+chrome-linux-main-1734955174-519c993e8e9dbc46b43822dcde04b3cf9084d486-cd4d4057ce6c26f114210606a77cc5b6d53633c6.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 5fc46947..c38261cf 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1734933580-df4dd37102c618dd38c4e836832ca7444c898426-8046f7fde6b872b9abbe3b2a743a74997eca6f41.profdata
+chrome-mac-arm-main-1734976754-374a4aa3269f7a9c0d2e7209951dce935f52947b-0add407c1df86e8883c71dedfcaf017e76840e3c.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 6a3d85e..c41dbb4 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1734911937-61284a9bfa40bbc5a8201863427ec56c163c2ac3-0937cb6714963e796b1d8b6256f4d8d191755934.profdata
+chrome-mac-main-1734955174-7843aaf2abf77f6a47ccc2083a713f6603bd87f5-cd4d4057ce6c26f114210606a77cc5b6d53633c6.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt
index 6c77d72..3f126cd 100644
--- a/chrome/build/win-arm64.pgo.txt
+++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@
-chrome-win-arm64-main-1734933580-ef6c01cb656d5afb316e1e73389cec87b8960a17-8046f7fde6b872b9abbe3b2a743a74997eca6f41.profdata
+chrome-win-arm64-main-1734955174-c5b10146f557a99b95cd6dd6b1916b28e4a17287-cd4d4057ce6c26f114210606a77cc5b6d53633c6.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 68908581..7784ec0a 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1734911937-dfada901c73fc6aec6a0438bbdb5dfd5b31dab26-0937cb6714963e796b1d8b6256f4d8d191755934.profdata
+chrome-win32-main-1734965995-72bc722c6628db9df4ec77104936d364fc90bdbd-7a273d0c97d4fe0d35c9d487e12ffe2ced07f1e4.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index e3336c03..6693e1d 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1734911937-7abb1ff93bc6b894c42445a825d58bdb45e6cee8-0937cb6714963e796b1d8b6256f4d8d191755934.profdata
+chrome-win64-main-1734965995-6942cd46ac876d595bd674da2ab1e422395a7285-7a273d0c97d4fe0d35c9d487e12ffe2ced07f1e4.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index b96a503..34f18b7 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -17,14 +17,6 @@
 
 // All features in alphabetical order.
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-// If enabled device status collector will add the type of session (Affiliated
-// User, Kiosks, Managed Guest Sessions) to the device status report.
-BASE_FEATURE(kActivityReportingSessionType,
-             "ActivityReportingSessionType",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
 #if BUILDFLAG(IS_ANDROID)
 // Kill switch for disconnecting file select dialog when tab is deactivated.
 BASE_FEATURE(kAndroidDisconnectFileChooserOnTabDeactivateKillSwitch,
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index 4fd5157..df51f78 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -28,11 +28,6 @@
 // All features in alphabetical order. The features should be documented
 // alongside the definition of their values in the .cc file.
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-COMPONENT_EXPORT(CHROME_FEATURES)
-BASE_DECLARE_FEATURE(kActivityReportingSessionType);
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
 #if BUILDFLAG(IS_ANDROID)
 COMPONENT_EXPORT(CHROME_FEATURES)
 BASE_DECLARE_FEATURE(kAndroidDisconnectFileChooserOnTabDeactivateKillSwitch);
diff --git a/chrome/common/profiler/thread_profiler_platform_configuration.cc b/chrome/common/profiler/thread_profiler_platform_configuration.cc
index f276094..2355c2a 100644
--- a/chrome/common/profiler/thread_profiler_platform_configuration.cc
+++ b/chrome/common/profiler/thread_profiler_platform_configuration.cc
@@ -170,9 +170,6 @@
       sampling_profiler::ProfilerThreadType thread,
       std::optional<version_info::Channel> release_channel) const override;
 
-  bool IsSupportedForChannel(
-      std::optional<version_info::Channel> release_channel) const override;
-
  private:
   // Whether profiling is enabled on a thread type for Android DEV channel.
   const base::flat_map<sampling_profiler::ProfilerThreadType, bool>
@@ -311,25 +308,6 @@
   }
 }
 
-bool AndroidPlatformConfiguration::IsSupportedForChannel(
-    std::optional<version_info::Channel> release_channel) const {
-  // The profiler is always supported for local builds and the CQ.
-  if (!release_channel) {
-    return true;
-  }
-
-  // All channels are supported in release builds.
-  switch (*release_channel) {
-    case version_info::Channel::CANARY:
-    case version_info::Channel::DEV:
-    case version_info::Channel::BETA:
-      return true;
-
-    default:
-      return false;
-  }
-}
-
 #endif  // BUILDFLAG(IS_ANDROID)
 
 }  // namespace
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index e95f3d6..3006734 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -739,6 +739,9 @@
       "//components/performance_manager/test_support:test_support_common",
       "//components/segmentation_platform/public:public",
     ]
+    if (!is_chromeos) {
+      deps += [ "//chrome/browser/ui/webui/signin:profile" ]
+    }
 
     sources += [
       "../browser/badging/test_badge_manager_delegate.cc",
@@ -1097,6 +1100,9 @@
       "//components/color",
       "//components/user_education/views",
     ]
+    if (!is_chromeos) {
+      deps += [ "//chrome/browser/ui/webui/signin:profile" ]
+    }
   }
 
   if (enable_message_center) {
@@ -3890,6 +3896,9 @@
         sources +=
             [ "../browser/ui/views/profiles/first_run_intro_browsertest.cc" ]
       }
+      if (!is_chromeos) {
+        deps += [ "//chrome/browser/ui/webui/signin:profile" ]
+      }
     } else {
       sources += [ "../browser/signin/mirror_browsertest.cc" ]
     }
@@ -6043,6 +6052,7 @@
     "../browser/translate/translate_service_unittest.cc",
     "../browser/trusted_vault/trusted_vault_encryption_keys_tab_helper_unittest.cc",
     "../browser/ui/chrome_select_file_policy_unittest.cc",
+    "../browser/ui/passwords/display_account_info_unittest.cc",
     "../browser/ui/passwords/manage_passwords_state_unittest.cc",
     "../browser/ui/passwords/password_generation_popup_controller_impl_unittest.cc",
     "../browser/ui/passwords/settings/password_manager_porter_unittest.cc",
@@ -7613,6 +7623,7 @@
       "../browser/ui/views/passwords/move_to_account_store_bubble_view_unittest.cc",
       "../browser/ui/views/passwords/password_bubble_view_test_base.cc",
       "../browser/ui/views/passwords/password_bubble_view_test_base.h",
+      "../browser/ui/views/passwords/password_change/password_change_info_bubble_view_unittest.cc",
       "../browser/ui/views/passwords/password_save_unsynced_credentials_locally_view_unittest.cc",
       "../browser/ui/views/passwords/password_save_update_view_unittest.cc",
       "../browser/ui/views/passwords/post_save_compromised_bubble_view_unittest.cc",
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn
index 8696ee27..107d218a 100644
--- a/chrome/test/data/webui/settings/BUILD.gn
+++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -162,6 +162,13 @@
     "zoom_levels_test.ts",
   ]
 
+  if (enable_glic) {
+    files += [
+      "glic_data_page_test.ts",
+      "glic_page_test.ts",
+    ]
+  }
+
   if (is_chromeos_ash) {
     files += [ "people_page_test_cros.ts" ]
   } else {
diff --git a/chrome/test/data/webui/settings/glic_data_page_test.ts b/chrome/test/data/webui/settings/glic_data_page_test.ts
new file mode 100644
index 0000000..8fc2ea3
--- /dev/null
+++ b/chrome/test/data/webui/settings/glic_data_page_test.ts
@@ -0,0 +1,109 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://settings/settings.js';
+
+import type {SettingsGlicDataPageElement, SettingsPrefsElement} from 'chrome://settings/settings.js';
+import {CrSettingsPrefs, SettingsGlicDataPageFeaturePrefName as PrefName} from 'chrome://settings/settings.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
+
+suite('GlicDataPage', function() {
+  let page: SettingsGlicDataPageElement;
+  let settingsPrefs: SettingsPrefsElement;
+
+  suiteSetup(function() {
+    settingsPrefs = document.createElement('settings-prefs');
+    return CrSettingsPrefs.initialized;
+  });
+
+  setup(function() {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    page = document.createElement('settings-glic-data-page');
+    page.prefs = settingsPrefs.prefs;
+    document.body.appendChild(page);
+    return flushTasks();
+  });
+
+  test('GeolocationToggleEnabled', () => {
+    page.setPrefValue(PrefName.GEOLOCATION_ENABLED, true);
+
+    assertTrue(page.$.geolocationToggle.checked);
+  });
+
+  test('GeolocationToggleDisabled', () => {
+    page.setPrefValue(PrefName.GEOLOCATION_ENABLED, false);
+
+    assertFalse(page.$.geolocationToggle.checked);
+  });
+
+  test('GeolocationToggleChange', () => {
+    page.setPrefValue(PrefName.GEOLOCATION_ENABLED, false);
+
+    const geolocationToggle = page.$.geolocationToggle;
+    assertTrue(!!geolocationToggle);
+
+    geolocationToggle.click();
+    assertEquals(true, page.getPref(PrefName.GEOLOCATION_ENABLED).value);
+    assertTrue(geolocationToggle.checked);
+
+    geolocationToggle.click();
+    assertEquals(false, page.getPref(PrefName.GEOLOCATION_ENABLED).value);
+    assertFalse(geolocationToggle.checked);
+  });
+
+  test('MicrophoneToggleEnabled', () => {
+    page.setPrefValue(PrefName.MICROPHONE_ENABLED, true);
+
+    assertTrue(page.$.microphoneToggle.checked);
+  });
+
+  test('MicrophoneToggleDisabled', () => {
+    page.setPrefValue(PrefName.MICROPHONE_ENABLED, false);
+
+    assertFalse(page.$.microphoneToggle.checked);
+  });
+
+  test('MicrophoneToggleChange', () => {
+    page.setPrefValue(PrefName.MICROPHONE_ENABLED, false);
+
+    const microphoneToggle = page.$.microphoneToggle;
+    assertTrue(!!microphoneToggle);
+
+    microphoneToggle.click();
+    assertEquals(true, page.getPref(PrefName.MICROPHONE_ENABLED).value);
+    assertTrue(microphoneToggle.checked);
+
+    microphoneToggle.click();
+    assertEquals(false, page.getPref(PrefName.MICROPHONE_ENABLED).value);
+    assertFalse(microphoneToggle.checked);
+  });
+
+  test('TabContextToggleEnabled', () => {
+    page.setPrefValue(PrefName.TAB_CONTEXT_ENABLED, true);
+
+    assertTrue(page.$.tabAccessToggle.checked);
+  });
+
+  test('TabContextToggleDisabled', () => {
+    page.setPrefValue(PrefName.TAB_CONTEXT_ENABLED, false);
+
+    assertFalse(page.$.tabAccessToggle.checked);
+  });
+
+  test('TabContextToggleChange', () => {
+    page.setPrefValue(PrefName.TAB_CONTEXT_ENABLED, false);
+
+    const tabAccessToggle = page.$.tabAccessToggle;
+    assertTrue(!!tabAccessToggle);
+
+    tabAccessToggle.click();
+    assertEquals(true, page.getPref(PrefName.TAB_CONTEXT_ENABLED).value);
+    assertTrue(tabAccessToggle.checked);
+
+    tabAccessToggle.click();
+    assertEquals(false, page.getPref(PrefName.TAB_CONTEXT_ENABLED).value);
+    assertFalse(tabAccessToggle.checked);
+  });
+});
diff --git a/chrome/test/data/webui/settings/glic_page_test.ts b/chrome/test/data/webui/settings/glic_page_test.ts
new file mode 100644
index 0000000..63539c0
--- /dev/null
+++ b/chrome/test/data/webui/settings/glic_page_test.ts
@@ -0,0 +1,55 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://settings/settings.js';
+
+import type {SettingsGlicPageElement, SettingsPrefsElement} from 'chrome://settings/settings.js';
+import {CrSettingsPrefs, SettingsGlicPageFeaturePrefName as PrefName} from 'chrome://settings/settings.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
+
+suite('GlicPage', function() {
+  let page: SettingsGlicPageElement;
+  let settingsPrefs: SettingsPrefsElement;
+
+  suiteSetup(function() {
+    settingsPrefs = document.createElement('settings-prefs');
+    return CrSettingsPrefs.initialized;
+  });
+
+  setup(function() {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    page = document.createElement('settings-glic-page');
+    page.prefs = settingsPrefs.prefs;
+    document.body.appendChild(page);
+    return flushTasks();
+  });
+
+  test('LauncherToggleEnabled', () => {
+    page.setPrefValue(PrefName.LAUNCHER_ENABLED, true);
+
+    assertTrue(page.$.launcherToggle.checked);
+  });
+
+  test('LauncherToggleDisabled', () => {
+    page.setPrefValue(PrefName.LAUNCHER_ENABLED, false);
+
+    assertFalse(page.$.launcherToggle.checked);
+  });
+
+  test('LauncherToggleChange', () => {
+    page.setPrefValue(PrefName.LAUNCHER_ENABLED, false);
+
+    const launcherToggle = page.$.launcherToggle;
+    assertTrue(!!launcherToggle);
+
+    launcherToggle.click();
+    assertEquals(true, page.getPref(PrefName.LAUNCHER_ENABLED).value);
+    assertTrue(launcherToggle.checked);
+
+    launcherToggle.click();
+    assertEquals(false, page.getPref(PrefName.LAUNCHER_ENABLED).value);
+    assertFalse(launcherToggle.checked);
+  });
+});
diff --git a/chrome/test/data/webui/settings/settings_browsertest.cc b/chrome/test/data/webui/settings/settings_browsertest.cc
index 94088a1c..7d678e7c 100644
--- a/chrome/test/data/webui/settings/settings_browsertest.cc
+++ b/chrome/test/data/webui/settings/settings_browsertest.cc
@@ -326,6 +326,27 @@
   RunTest("settings/settings_pref_util_test.js", "mocha.run()");
 }
 
+#if BUILDFLAG(ENABLE_GLIC)
+class SettingsGlicPageTest : public SettingsBrowserTest {
+ public:
+  SettingsGlicPageTest() {
+    scoped_feature_list_.InitWithFeatures(
+        {features::kGlic, features::kTabstripComboButton}, {});
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(SettingsGlicPageTest, GlicSettingsPage) {
+  RunTest("settings/glic_page_test.js", "mocha.run()");
+}
+
+IN_PROC_BROWSER_TEST_F(SettingsGlicPageTest, GlicDataSettingsPage) {
+  RunTest("settings/glic_data_page_test.js", "mocha.run()");
+}
+#endif
+
 class PeoplePageSyncPageTest : public SettingsBrowserTest {
  private:
   base::test::ScopedFeatureList scoped_feature_list_{
diff --git a/chrome/test/data/webui/settings/settings_menu_test.ts b/chrome/test/data/webui/settings/settings_menu_test.ts
index 04ef00f0..e260245 100644
--- a/chrome/test/data/webui/settings/settings_menu_test.ts
+++ b/chrome/test/data/webui/settings/settings_menu_test.ts
@@ -109,6 +109,7 @@
     assertEquals('/ai', selector.selected.toString());
   });
 
+  // <if expr="enable_glic">
   test('noGlic', async function() {
     loadTimeData.overrideValues({showGlicSettings: false});
     resetRouterForTesting();
@@ -135,6 +136,7 @@
     assertTrue(!!selector.selected);
     assertEquals('/glic', selector.selected.toString());
   });
+  // </if>
 
   test('pageVisibility', function() {
     function assertPagesHidden(expectedHidden: boolean) {
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 979865f..e3f472c4 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-16136.0.0-1065588
\ No newline at end of file
+16137.0.0-1065600
\ No newline at end of file
diff --git a/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc b/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc
index 42832911..90ec87d 100644
--- a/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc
+++ b/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc
@@ -11,6 +11,7 @@
 #include <optional>
 #include <random>
 #include <set>
+#include <stack>
 #include <vector>
 
 #include "base/feature_list.h"
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index 7d8d4ce..41cea26 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">مفتاح</translation>
 <translation id="4356100841225547054">إيقاف الصوت</translation>
 <translation id="4361257691546579041">إنّ اسم نقطة الوصول من النوع التلقائي.</translation>
+<translation id="4368101969572512692">الترتيب العشوائي للاقتراحات</translation>
 <translation id="437294888293595148">إعادة ضبط جميع الاختصارات</translation>
 <translation id="437477383107495720">أرانب</translation>
 <translation id="4376423484621194274">لا يسمح المشرف بإغلاق "<ph name="APP_NAME" />".</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb
index 884b1b0..fff81a22 100644
--- a/chromeos/strings/chromeos_strings_bg.xtb
+++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">клавиш</translation>
 <translation id="4356100841225547054">Изключване на звука</translation>
 <translation id="4361257691546579041">Името на точката за достъп (APN) е стандартно.</translation>
+<translation id="4368101969572512692">Разбъркване на предложенията</translation>
 <translation id="437294888293595148">Нулиране на всички клавишни комбинации</translation>
 <translation id="437477383107495720">зайчета</translation>
 <translation id="4376423484621194274">Администраторът ви не разрешава затварянето на <ph name="APP_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_cy.xtb b/chromeos/strings/chromeos_strings_cy.xtb
index 1de11548..307853c 100644
--- a/chromeos/strings/chromeos_strings_cy.xtb
+++ b/chromeos/strings/chromeos_strings_cy.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">bysell</translation>
 <translation id="4356100841225547054">Diffodd y sain</translation>
 <translation id="4361257691546579041">Mae'r APN yn fath diofyn.</translation>
+<translation id="4368101969572512692">Cymysgu'r awgrymiadau</translation>
 <translation id="437294888293595148">Ailosod pob llwybr byr</translation>
 <translation id="437477383107495720">cwningod</translation>
 <translation id="4376423484621194274">Nid yw eich gweinyddwr yn caniatáu cau <ph name="APP_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index 596e762..fdaacf46 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">Taste</translation>
 <translation id="4356100841225547054">Ton ausschalten</translation>
 <translation id="4361257691546579041">APN-Typ ist „Standard“.</translation>
+<translation id="4368101969572512692">Vorschläge zufällig anordnen</translation>
 <translation id="437294888293595148">Alle Tastenkombinationen zurücksetzen</translation>
 <translation id="437477383107495720">Hasen</translation>
 <translation id="4376423484621194274">Dein Administrator lässt das Schließen von <ph name="APP_NAME" /> nicht zu</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index c096645d..8fbc81d 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">πλήκτρο</translation>
 <translation id="4356100841225547054">Απενεργοποίηση έντασης ήχου</translation>
 <translation id="4361257691546579041">Το APN είναι τύπου προεπιλογής.</translation>
+<translation id="4368101969572512692">Τυχαία αναπαραγωγή προτάσεων</translation>
 <translation id="437294888293595148">Επαναφορά όλων των συντομεύσεων</translation>
 <translation id="437477383107495720">κουνέλια</translation>
 <translation id="4376423484621194274">Ο διαχειριστής σας δεν επιτρέπει το κλείσιμο της εφαρμογής <ph name="APP_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb
index 8d001b3d..f309c2f 100644
--- a/chromeos/strings/chromeos_strings_hy.xtb
+++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">ստեղն</translation>
 <translation id="4356100841225547054">Անջատել ձայնը</translation>
 <translation id="4361257691546579041">APN-ը կանխադրված տեսակի է։</translation>
+<translation id="4368101969572512692">Խառնել առաջարկները</translation>
 <translation id="437294888293595148">Զրոյացնել բոլոր դյուրանցումները</translation>
 <translation id="437477383107495720">ճագարներ</translation>
 <translation id="4376423484621194274">Ձեր ադմինիստրատորը թույլ չի տալիս փակել <ph name="APP_NAME" /> հավելվածը</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb
index 74d721c..ab0c619 100644
--- a/chromeos/strings/chromeos_strings_is.xtb
+++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">lykill</translation>
 <translation id="4356100841225547054">Slökkva á hljóði</translation>
 <translation id="4361257691546579041">Aðgangsstaður er af gerðinni „sjálfgefið“.</translation>
+<translation id="4368101969572512692">Stokkunartillögur</translation>
 <translation id="437294888293595148">Endurstilla allar flýtileiðir</translation>
 <translation id="437477383107495720">kanínur</translation>
 <translation id="4376423484621194274">Kerfisstjórinn leyfir ekki lokun á <ph name="APP_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 2bbaa20..9ddd1c7 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">키</translation>
 <translation id="4356100841225547054">볼륨 끄기</translation>
 <translation id="4361257691546579041">APN은 기본값 유형입니다.</translation>
+<translation id="4368101969572512692">추천 셔플</translation>
 <translation id="437294888293595148">모든 바로가기 재설정</translation>
 <translation id="437477383107495720">토끼</translation>
 <translation id="4376423484621194274">관리자가 <ph name="APP_NAME" /> 종료를 허용하지 않습니다.</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb
index 0bd9da53..f17a5ea 100644
--- a/chromeos/strings/chromeos_strings_or.xtb
+++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -1070,7 +1070,7 @@
 <translation id="6137767437444130246">ୟୁଜରଙ୍କ ସାର୍ଟିଫିକେଟ</translation>
 <translation id="6146993107019042706">ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ, ଆପଣଙ୍କର ନୂଆ ପାସ୍‍ୱାର୍ଡ ଲେଖନ୍ତୁ</translation>
 <translation id="6147514244879357420">PNG</translation>
-<translation id="6149015141270619212">ଇଣ୍ଟର୍ନେଟ୍ ସହ ସଂଯୋଗ ହୋଇପାରୁ ନାହିଁ</translation>
+<translation id="6149015141270619212">ଇଣ୍ଟର୍ନେଟ ସହ କନେକ୍ଟ ହୋଇପାରୁନାହିଁ</translation>
 <translation id="6156030503438652198">ମେରୁନ ଏବଂ ଗୋଲାପୀ</translation>
 <translation id="6165508094623778733">ଅଧିକ ଜାଣନ୍ତୁ</translation>
 <translation id="6184793017104303157">B4</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index aaa6213d..df210d4e 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">taster</translation>
 <translation id="4356100841225547054">Isključite zvuk</translation>
 <translation id="4361257691546579041">Naziv pristupne tačke je podrazumevanog tipa.</translation>
+<translation id="4368101969572512692">Nasumično prikažite predloge</translation>
 <translation id="437294888293595148">Resetuj sve prečice</translation>
 <translation id="437477383107495720">zeke</translation>
 <translation id="4376423484621194274">Administrator ne dozvoljava zatvaranje aplikacije <ph name="APP_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index 36da8b17..51f5e377 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">тастер</translation>
 <translation id="4356100841225547054">Искључите звук</translation>
 <translation id="4361257691546579041">Назив приступне тачке је подразумеваног типа.</translation>
+<translation id="4368101969572512692">Насумично прикажите предлоге</translation>
 <translation id="437294888293595148">Ресетуј све пречице</translation>
 <translation id="437477383107495720">зеке</translation>
 <translation id="4376423484621194274">Администратор не дозвољава затварање апликације <ph name="APP_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index 69d6f0d..dca31354 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">tangent</translation>
 <translation id="4356100841225547054">Stäng av ljudet</translation>
 <translation id="4361257691546579041">APN är av typen standard.</translation>
+<translation id="4368101969572512692">Blanda förslag</translation>
 <translation id="437294888293595148">Återställ alla genvägar</translation>
 <translation id="437477383107495720">kaniner</translation>
 <translation id="4376423484621194274">Administratören tillåter inte att <ph name="APP_NAME" /> stängs</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index 46f90d7..bb2491d6 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -691,6 +691,7 @@
 <translation id="4354430579665871434">కీ</translation>
 <translation id="4356100841225547054">వాల్యూమ్‌ను ఆఫ్ చేయండి</translation>
 <translation id="4361257691546579041">APN అనేది ఆటోమేటిక్ సెట్టింగ్ రకం.</translation>
+<translation id="4368101969572512692">సూచనలను షఫుల్ చేయండి</translation>
 <translation id="437294888293595148">అన్ని షార్ట్‌కట్‌లను రీసెట్ చేయండి</translation>
 <translation id="437477383107495720">కుందేలు పిల్లలు</translation>
 <translation id="4376423484621194274">మీ అడ్మినిస్ట్రేటర్ <ph name="APP_NAME" />‌ను మూసివేయడానికి అనుమతించలేదు</translation>
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni
index 71c772a..0789321d 100644
--- a/chromeos/tast_control.gni
+++ b/chromeos/tast_control.gni
@@ -101,6 +101,9 @@
   "inputs.VirtualKeyboardHandwriting.docked@reven-vmtest",
   "inputs.VirtualKeyboardHandwriting.floating@reven-vmtest",
 
+  # b/385643386
+  "apps.LaunchHelpAppFromLauncher.stable_fieldtrial_testing_config_on@betty",
+
   # READ COMMENT AT TOP BEFORE ADDING NEW TESTS HERE.
 ]
 
diff --git a/clank b/clank
index 2bf79a0..bf9cb3c 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit 2bf79a00d99f68d4fab6a186f66f856748e24972
+Subproject commit bf9cb3c0d3d3c0bb540a67a3072f4c5483728f2b
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
index e7eb352..47aab4f 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
@@ -22,6 +22,7 @@
 #include "components/autofill/core/browser/data_model/borrowed_transliterator.h"
 #include "components/autofill/core/browser/data_model/contact_info.h"
 #include "components/autofill/core/browser/data_quality/autofill_data_util.h"
+#include "components/autofill/core/browser/field_type_utils.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/geo/autofill_country.h"
 #include "components/autofill/core/browser/metrics/autofill_metrics.h"
@@ -229,7 +230,8 @@
 
 bool AutofillProfileComparator::Compare(std::u16string_view text1,
                                         std::u16string_view text2,
-                                        WhitespaceSpec whitespace_spec) const {
+                                        WhitespaceSpec whitespace_spec,
+                                        std::optional<FieldType> type) const {
   if (text1.empty() && text2.empty()) {
     return true;
   }
@@ -241,6 +243,17 @@
   std::u16string normalized_text2 =
       RemoveDiacriticsAndConvertToLowerCase(text2);
 
+  // Japanese alternative names are stored in hiragana only. We transliterate
+  // katarana to ensure correct comparison.
+  if (type.has_value() && IsAlternativeNameType(type.value()) &&
+      base::FeatureList::IsEnabled(
+          features::kAutofillSupportPhoneticNameForJP)) {
+    normalized_text1 = TransliterateAlternativeName(
+        normalized_text1, TransliterationId::kKatakanaToHiragana);
+    normalized_text2 = TransliterateAlternativeName(
+        normalized_text2, TransliterationId::kKatakanaToHiragana);
+  }
+
   NormalizingIterator normalizing_iter1{normalized_text1, whitespace_spec};
   NormalizingIterator normalizing_iter2{normalized_text2, whitespace_spec};
 
@@ -666,6 +679,20 @@
   // Return true if at least one value corresponding to the settings visible
   // types is different between the two profiles.
   return std::ranges::any_of(p1.GetUserVisibleTypes(), [&](FieldType type) {
+    if (IsAlternativeNameType(type) &&
+        base::FeatureList::IsEnabled(
+            features::kAutofillSupportPhoneticNameForJP)) {
+      // Consider two alternative names that differ only in the character set
+      // equal.
+      return p1.GetNameInfo()
+                 .GetStructuredAlternativeName()
+                 .GetValueForComparisonForType(
+                     type, p2.GetNameInfo().GetStructuredAlternativeName()) !=
+             p2.GetNameInfo()
+                 .GetStructuredAlternativeName()
+                 .GetValueForComparisonForType(
+                     type, p1.GetNameInfo().GetStructuredAlternativeName());
+    }
     return p1.GetInfo(type, app_locale) != p2.GetInfo(type, app_locale);
   });
 }
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator.h b/components/autofill/core/browser/data_model/autofill_profile_comparator.h
index 6bcd8ed1..e8f139a 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_comparator.h
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator.h
@@ -47,8 +47,9 @@
   // techniques are applied to the given texts before comparing.
   //
   // (1) Diacritics are removed, e.g. حَ to ح, ビ to ヒ, and é to e;
-  // (2) Leading and trailing whitespace and punctuation are ignored; and
-  // (3) Characters are converted to lowercase.
+  // (2) Leading and trailing whitespace and punctuation are ignored;
+  // (3) Characters are converted to lowercase;
+  // (4) For alternative name types, katakana is converted to hiragana.
   //
   // If |whitespace_spec| is DISCARD_WHITESPACE, then punctuation and whitespace
   // are discarded. For example, the postal codes "B15 3TR" and "B153TR" and
@@ -59,7 +60,8 @@
   // St" are because trailing whitespace and punctuation are ignored.
   bool Compare(std::u16string_view text1,
                std::u16string_view text2,
-               WhitespaceSpec whitespace_spec = DISCARD_WHITESPACE) const;
+               WhitespaceSpec whitespace_spec = DISCARD_WHITESPACE,
+               std::optional<FieldType> type = std::nullopt) const;
 
   // Returns true if two AutofillProfiles |p1| and |p2| have at least one
   // settings-visible value that is different.
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
index 88a778de..b1f9863 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
@@ -1420,6 +1420,30 @@
           existing_profile, new_profile, kLocale));
 }
 
+// Tests that JP profiles that differ only in the character set used for
+// alternative name are considered equal.
+TEST_F(AutofillProfileComparatorTest,
+       ProfilesHaveTheSameSettingsVisibleValuesJP) {
+  base::test::ScopedFeatureList scoped_feature_list{
+      features::kAutofillSupportPhoneticNameForJP};
+  AutofillProfile existing_profile(AddressCountryCode("JP"));
+  test::SetProfileInfo(&existing_profile, "firstName", "middleName", "lastName",
+                       "mail@mail.com", "company", "line1", "line2", "city",
+                       "state", "zip", "JP", "phone");
+  existing_profile.SetRawInfo(ALTERNATIVE_GIVEN_NAME, u"あおい");
+  existing_profile.SetRawInfo(ALTERNATIVE_FAMILY_NAME, u"やまもと");
+  existing_profile.FinalizeAfterImport();
+
+  AutofillProfile new_profile = existing_profile;
+  new_profile.SetRawInfo(ALTERNATIVE_GIVEN_NAME, u"アオイ");
+  new_profile.SetRawInfo(ALTERNATIVE_FAMILY_NAME, u"ヤマモト");
+  new_profile.FinalizeAfterImport();
+
+  EXPECT_FALSE(
+      AutofillProfileComparator::ProfilesHaveDifferentSettingsVisibleValues(
+          existing_profile, new_profile, kLocale));
+}
+
 TEST_F(AutofillProfileComparatorTest, GetProfileDifference) {
   AutofillProfile existing_profile(AddressCountryCode("US"));
   test::SetProfileInfo(&existing_profile, "firstName", "middleName", "lastName",
diff --git a/components/autofill/core/browser/data_model/contact_info_unittest.cc b/components/autofill/core/browser/data_model/contact_info_unittest.cc
index 5fb0507..23b6de5 100644
--- a/components/autofill/core/browser/data_model/contact_info_unittest.cc
+++ b/components/autofill/core/browser/data_model/contact_info_unittest.cc
@@ -171,10 +171,15 @@
 
   test::VerifyFormGroupValues(name, expectation);
 
+  // Both "あおい" and "アオイ" are semantically equal.
   FieldTypeSet matching_types;
   name.GetMatchingTypesWithProfileSources(u"あおい", "JP", &matching_types,
                                           nullptr);
   EXPECT_EQ(matching_types, FieldTypeSet({ALTERNATIVE_GIVEN_NAME}));
+
+  name.GetMatchingTypesWithProfileSources(u"アオイ", "JP", &matching_types,
+                                          nullptr);
+  EXPECT_EQ(matching_types, FieldTypeSet({ALTERNATIVE_GIVEN_NAME}));
 }
 
 INSTANTIATE_TEST_SUITE_P(
diff --git a/components/autofill/core/browser/data_model/form_group.cc b/components/autofill/core/browser/data_model/form_group.cc
index 5a75ec9..a730974 100644
--- a/components/autofill/core/browser/data_model/form_group.cc
+++ b/components/autofill/core/browser/data_model/form_group.cc
@@ -35,7 +35,9 @@
   FieldTypeSet types;
   GetSupportedTypes(&types);
   for (FieldType type : types) {
-    if (comparator.Compare(canonicalized_text, GetInfo(type, app_locale))) {
+    if (comparator.Compare(canonicalized_text, GetInfo(type, app_locale),
+                           AutofillProfileComparator::DISCARD_WHITESPACE,
+                           type)) {
       matching_types->insert(type);
     }
   }
diff --git a/components/autofill/ios/common/features.h b/components/autofill/ios/common/features.h
index 4847f9e..977eb67e 100644
--- a/components/autofill/ios/common/features.h
+++ b/components/autofill/ios/common/features.h
@@ -11,6 +11,7 @@
 BASE_DECLARE_FEATURE(kAutofillDynamicallyLoadsFieldsForAddressInput);
 BASE_DECLARE_FEATURE(kAutofillIsolatedWorldForJavascriptIos);
 BASE_DECLARE_FEATURE(kAutofillPaymentsSheetV2Ios);
+BASE_DECLARE_FEATURE(kAutofillPaymentsSheetV3Ios);
 BASE_DECLARE_FEATURE(kAutofillStickyInfobarIos);
 
 BASE_DECLARE_FEATURE(kAutofillThrottleDocumentFormScanIos);
diff --git a/components/autofill/ios/common/features.mm b/components/autofill/ios/common/features.mm
index 640dfb2..c316615 100644
--- a/components/autofill/ios/common/features.mm
+++ b/components/autofill/ios/common/features.mm
@@ -30,6 +30,13 @@
              "AutofillPaymentsSheetV2Ios",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Enables the 3rd version of the payments suggestion bottom sheet that can
+// directly pick the Autofill suggestions provider instead of intermediating via
+// the FormSuggestionController.
+BASE_FEATURE(kAutofillPaymentsSheetV3Ios,
+             "AutofillPaymentsSheetV3Ios",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // Makes the autofill and password infobars sticky on iOS. The sticky infobar
 // sticks there until navigating from an explicit user gesture (e.g. reload or
 // load a new page from the omnibox). This includes the infobar UI and the
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
index d2540d7e..72dea0c8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">تم إيقاف التنزيل مؤقتًا</translation>
 <translation id="1396327438254055134">‏السماح للموقع الإلكتروني باستخدام مُحسِّن V8</translation>
 <translation id="1415402041810619267">‏تم اقتطاع عنوان URL</translation>
+<translation id="1415855080660575082">‏يمكنك السماح لمتصفِّح Chrome بمشاركة علامات التبويب الأخيرة مع جهازك لعرضها في قائمة التطبيقات ونتائج البحث. ويمكنك تفعيل أو إيقاف هذه الميزة من خلال إعدادات Chrome.</translation>
 <translation id="1448064542941920355">تصغير</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{موقع إلكتروني واحد (<ph name="SITE_COUNT" />)}zero{<ph name="SITE_COUNT" /> موقع إلكتروني}two{موقعَين إلكترونيَين (<ph name="SITE_COUNT" />)}few{<ph name="SITE_COUNT" /> مواقع إلكترونية}many{<ph name="SITE_COUNT" /> موقعًا إلكترونيًا}other{<ph name="SITE_COUNT" /> موقع إلكتروني}}</translation>
 <translation id="1500473259453106018">إخفاء بطاقة "عرض الانخفاض في السعر ضِمن علامات التبويب"</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">لقد سمحت مؤقتًا لهذا الموقع الإلكتروني باستخدام ملفات تعريف الارتباط التابعة لجهات خارجية، ما يعني أنك ستحظى بمستوى حماية أقل خلال التصفّح، ولكن من المرجّح أكثر أن تعمل ميزات الموقع الإلكتروني على النحو المتوقّع. <ph name="BEGIN_LINK" />إرسال ملاحظات<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">قد لا تعمل ميزات بعض المواقع الإلكترونية في وضع التصفُّح المتخفي.</translation>
 <translation id="2442870161001914531">دائمًا طلب الموقع الإلكتروني المتوافق مع أجهزة الكمبيوتر</translation>
+<translation id="2445311670906052406">‏يشارك Chrome حاليًا علامات التبويب الأخيرة مع جهازك، والتي ستظهر في قائمة التطبيقات ونتائج البحث. ويمكنك إيقاف هذه الميزة في أي وقت من خلال إعدادات Chrome.</translation>
 <translation id="2469312991797799607">سيؤدي هذا الإجراء إلى حذف جميع البيانات وملفات تعريف الارتباط للموقع الإلكتروني <ph name="ORIGIN" /> وجميع المواقع الإلكترونية المندرجة ضِمنه.</translation>
 <translation id="2482878487686419369">الإشعارات</translation>
 <translation id="2485422356828889247">إزالة التثبيت</translation>
@@ -117,6 +119,7 @@
 <translation id="2750481671343847896">بإمكان المواقع الإلكترونية حظر الطلبات بتسجيل الدخول من خدمات تقديم الهويات.</translation>
 <translation id="2787357173144933081">تفعيل "المربّع المتعدد الاستخدامات" مباشرةً</translation>
 <translation id="2790501146643349491">عندما يكون هذا الإعداد مفعَّلاً، يمكن للمواقع الإلكترونية التي تم إغلاقها مؤخرًا إتمام إرسال البيانات واستلامها. وعند إيقافه، لا يمكن لتلك المواقع الإلكترونية إرسال البيانات أو استلامها.</translation>
+<translation id="2814830417943086299">‏يعرض Chrome حاليًا علامات التبويب الأخيرة في قائمة التطبيقات ونتائج البحث على جهازك. ويمكنك إيقاف هذه الميزة في أي وقت من خلال إعدادات Chrome.</translation>
 <translation id="2822354292072154809">هل تريد فعلاً إعادة ضبط جميع أذونات الموقع الإلكتروني للكائن <ph name="CHOSEN_OBJECT_NAME" />؟</translation>
 <translation id="2850913818900871965">سيتم طلب عرضه بالإصدار المخصّص للأجهزة الجوّالة</translation>
 <translation id="2870560284913253234">الموقع</translation>
@@ -559,6 +562,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" /> وإذن واحد (<ph name="NUM_MORE" />) آخر}zero{<ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" /> و<ph name="NUM_MORE" /> إذن آخر}two{<ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" /> وإذنان (<ph name="NUM_MORE" />) آخران}few{<ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" /> و<ph name="NUM_MORE" /> أذونات أخرى}many{<ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" /> و<ph name="NUM_MORE" /> إذنًا آخر}other{<ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" /> و<ph name="NUM_MORE" /> إذن آخر}}</translation>
 <translation id="913657688200966289">‏فعِّل الأذونات لتطبيق <ph name="APP_NAME" /> في <ph name="BEGIN_LINK" />إعدادات Android<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">المستوى الحالي لميزة التكبير/التصغير هو %% <ph name="ZOOM_LEVEL" /></translation>
+<translation id="9156722768168878035">‏يمكنك السماح لمتصفِّح Chrome بعرض علامات التبويب الأخيرة في قائمة التطبيقات ونتائج البحث على جهازك. ويمكنك إيقاف هذه الميزة في أي وقت من خلال إعدادات Chrome.</translation>
 <translation id="9162462602695099906">هذه الصفحة غير آمنة.</translation>
 <translation id="947156494302904893">يمكن للمواقع الإلكترونية التي تزورها التأكّد من أنّك مستخدِم حقيقي ولست برنامج تتبُّع.</translation>
 <translation id="959682366969460160">بدء التنظيم</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
index 357658e..1c2bba06 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Изтеглянето е на пауза</translation>
 <translation id="1396327438254055134">Разрешете на сайта да използва оптимизатора V8.</translation>
 <translation id="1415402041810619267">URL адресът е съкратен</translation>
+<translation id="1415855080660575082">Разрешете на Chrome да споделя скорошните ви раздели с устройството ви, за да ги виждате в списъка с приложения и в резултатите от търсенето на устройството. Можете да включите или изключите тази функция от настройките на Chrome.</translation>
 <translation id="1448064542941920355">Намаляване на нивото на мащаба</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> сайт}other{<ph name="SITE_COUNT" /> сайта}}</translation>
 <translation id="1500473259453106018">Скриване на картата за понижения на цените в разделите</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Временно разрешихте на този сайт да използва „бисквитки“ на трети страни. Това ще понижи нивото на защита при сърфиране, но е по-вероятно функциите на сайта да работят по очаквания начин. <ph name="BEGIN_LINK" />Изпращане на отзиви<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Функциите в някои сайтове може да не работят в режим „инкогнито“</translation>
 <translation id="2442870161001914531">Винаги да се заявява настолният сайт</translation>
+<translation id="2445311670906052406">Chrome вече споделя скорошните ви раздели с устройството ви. Ще ги виждате в списъка с приложения и в резултатите от търсенето на устройството си. Имате възможност да изключите тази функция по всяко време от настройките на Chrome.</translation>
 <translation id="2469312991797799607">Ще бъдат изтрити всички данни и „бисквитки“ за <ph name="ORIGIN" /> и всички сайтове от този домейн.</translation>
 <translation id="2482878487686419369">Известия</translation>
 <translation id="2485422356828889247">Деинсталиране</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Сайтовете могат да показват подкани за вход от услуги за идентифициране.</translation>
 <translation id="2787357173144933081">Бързо стартиране на полето за всичко</translation>
 <translation id="2790501146643349491">Когато настройката е включена, наскоро затворените сайтове могат да завършват изпращането и получаването на данни. Когато е изключена, наскоро затворените сайтове не могат да правят това.</translation>
+<translation id="2814830417943086299">Chrome вече показва скорошните ви раздели в списъка с приложения и в резултатите от търсенето на устройството ви. Имате възможност да изключите тази функция по всяко време от настройките на Chrome.</translation>
 <translation id="2822354292072154809">Наистина ли искате да зададете повторно всички разрешения за сайта за <ph name="CHOSEN_OBJECT_NAME" />?</translation>
 <translation id="2850913818900871965">Заявяване на изглед за мобилни устройства</translation>
 <translation id="2870560284913253234">Сайт</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и още <ph name="NUM_MORE" />}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и още <ph name="NUM_MORE" />}}</translation>
 <translation id="913657688200966289">Включете разрешенията за <ph name="APP_NAME" /> от <ph name="BEGIN_LINK" />настройките на Android<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Текущото ниво на мащаба е <ph name="ZOOM_LEVEL" />%%</translation>
+<translation id="9156722768168878035">Разрешете на Chrome да показва скорошните ви раздели в списъка с приложения и в резултатите от търсенето на устройството ви. Имате възможност да изключите тази функция по всяко време от настройките на Chrome.</translation>
 <translation id="9162462602695099906">Тази страница е опасна</translation>
 <translation id="947156494302904893">Сайтовете, които посещавате, могат да потвърдят, че сте истински човек, а не робот</translation>
 <translation id="959682366969460160">Организиране</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
index ed4d9e8b8..7196745 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Wedi seibio lawrlwytho</translation>
 <translation id="1396327438254055134">Caniatáu i wefan ddefnyddio optimieiddiwr V8.</translation>
 <translation id="1415402041810619267">Mae'r URL wedi'i gwtogi</translation>
+<translation id="1415855080660575082">Gadewch i Chrome rannu'ch tabiau diweddar gyda'ch dyfais i'w gweld yn rhestr apiau a chanlyniadau chwilio eich dyfais. Gallwch droi hwn ymlaen neu ei ddiffodd yng ngosodiadau Chrome.</translation>
 <translation id="1448064542941920355">Pellhau</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> wefan}zero{<ph name="SITE_COUNT" /> gwefannau}two{<ph name="SITE_COUNT" /> wefan}few{<ph name="SITE_COUNT" /> gwefan}many{<ph name="SITE_COUNT" /> gwefan}other{<ph name="SITE_COUNT" /> gwefan}}</translation>
 <translation id="1500473259453106018">Cuddio cerdyn gostyngiadau pris ar dabiau</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Rydych wedi caniatáu i'r wefan hon ddefnyddio cwcis trydydd parti dros dro, sy'n golygu llai o amddiffyniad pori ond mae nodweddion y wefan yn fwy tebygol o weithio yn ôl y disgwyl. <ph name="BEGIN_LINK" />Anfon adborth<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Mae'n bosib na fydd nodweddion ar rai gwefannau yn gweithio yn y modd anhysbys</translation>
 <translation id="2442870161001914531">Gofyn am wefan bwrdd gwaith bob amser</translation>
+<translation id="2445311670906052406">Mae Chrome bellach yn rhannu'ch tabiau diweddar â'ch dyfais. Byddwch yn eu gweld yn rhestr apiau a chanlyniadau chwilio eich dyfais. Gallwch ddiffodd hwn unrhyw bryd yng ngosodiadau Chrome.</translation>
 <translation id="2469312991797799607">Bydd y weithred hon yn dileu'r holl ddata a chwcis ar gyfer <ph name="ORIGIN" /> a'r holl wefannau oddi tano</translation>
 <translation id="2482878487686419369">Hysbysiadau</translation>
 <translation id="2485422356828889247">Dadosod</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Gall gwefannau ddangos anogwyr mewngofnodi o wasanaethau hunaniaeth.</translation>
 <translation id="2787357173144933081">Cychwyn Cyflym Omniflwch</translation>
 <translation id="2790501146643349491">Pan fydd wedi'i droi ymlaen, gall gwefannau a gaewyd yn ddiweddar orffen anfon a derbyn data. Pan fydd wedi'i ddiffodd, ni all gwefannau a gaewyd yn ddiweddar orffen anfon a derbyn data.</translation>
+<translation id="2814830417943086299">Mae Chrome bellach yn dangos eich tabiau diweddar yn rhestr apiau a chanlyniadau chwilio eich dyfais. Gallwch ddiffodd hwn unrhyw bryd yng ngosodiadau Chrome.</translation>
 <translation id="2822354292072154809">Ydych yn siŵr eich bod am ailosod yr holl ganiatadau gwefan ar gyfer <ph name="CHOSEN_OBJECT_NAME" />?</translation>
 <translation id="2850913818900871965">Gofyn am wedd symudol</translation>
 <translation id="2870560284913253234">Gwefan</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, ac <ph name="NUM_MORE" /> arall}zero{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, a <ph name="NUM_MORE" /> arall}two{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, a <ph name="NUM_MORE" /> arall}few{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, a <ph name="NUM_MORE" /> arall}many{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, a <ph name="NUM_MORE" /> arall}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, a <ph name="NUM_MORE" /> arall}}</translation>
 <translation id="913657688200966289">Trowch ganiatadau ar gyfer <ph name="APP_NAME" /> ymlaen yn <ph name="BEGIN_LINK" />Gosodiadau Android<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Y lefel chwyddo yw <ph name="ZOOM_LEVEL" /> %% ar hyn o bryd</translation>
+<translation id="9156722768168878035">Gadewch i Chrome ddangos eich tabiau diweddar yn rhestr apiau a chanlyniadau chwilio eich dyfais. Gallwch ddiffodd hwn unrhyw bryd yng ngosodiadau Chrome.</translation>
 <translation id="9162462602695099906">Mae'r dudalen hon yn beryglus</translation>
 <translation id="947156494302904893">Gall gwefannau rydych yn ymweld â nhw gadarnhau eich bod yn berson go iawn ac nid bot</translation>
 <translation id="959682366969460160">Byddwch yn drefnus</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
index ad3f9bb9..4173e8f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Download angehalten</translation>
 <translation id="1396327438254055134">Du kannst einer Website erlauben, dass V8‑Optimierungstool zu verwenden.</translation>
 <translation id="1415402041810619267">URL abgeschnitten</translation>
+<translation id="1415855080660575082">Erlaube Chrome, deine zuletzt geöffneten Tabs mit deinem Gerät zu teilen, damit sie dort in der App-Liste und in den Suchergebnissen angezeigt werden können. Diese Funktion lässt sich in den Chrome-Einstellungen aktivieren oder deaktivieren.</translation>
 <translation id="1448064542941920355">Herauszoomen</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> Website}other{<ph name="SITE_COUNT" /> Websites}}</translation>
 <translation id="1500473259453106018">Karte „Preissenkungen auf Tabs“ ausblenden</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Du hast dieser Website vorübergehend erlaubt, Drittanbieter-Cookies zu verwenden. Das bedeutet zwar weniger Schutz beim Surfen, aber dadurch erhöht sich die Wahrscheinlichkeit, dass Websites wie erwartet funktionieren. <ph name="BEGIN_LINK" />Feedback geben<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Einige Websites funktionieren im Inkognitomodus möglicherweise nicht richtig</translation>
 <translation id="2442870161001914531">Desktopwebsite immer anfordern</translation>
+<translation id="2445311670906052406">Chrome teilt jetzt deine zuletzt geöffneten Tabs mit deinem Gerät. Du findest sie in der App-Liste und in den Suchergebnissen deines Geräts. Diese Funktion lässt sich jederzeit in den Chrome-Einstellungen deaktivieren.</translation>
 <translation id="2469312991797799607">Durch diesen Schritt werden alle Daten und Cookies für <ph name="ORIGIN" /> und alle untergeordneten Websites gelöscht</translation>
 <translation id="2482878487686419369">Benachrichtigungen</translation>
 <translation id="2485422356828889247">Deinstallieren</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Websites dürfen Anmeldungsaufforderungen von Identitätsdiensten anzeigen.</translation>
 <translation id="2787357173144933081">Direkt mit Omnibox starten</translation>
 <translation id="2790501146643349491">Wenn dieser Schalter aktiviert ist, können vor Kurzem geschlossene Websites das Senden und Empfangen von Daten abschließen. Wenn er deaktiviert ist, können vor Kurzem geschlossene Websites das Senden oder Empfangen von Daten nicht abschließen.</translation>
+<translation id="2814830417943086299">Chrome zeigt deine zuletzt geöffneten Tabs jetzt in der App-Liste und in den Suchergebnissen deines Geräts an. Diese Funktion lässt sich jederzeit in den Chrome-Einstellungen deaktivieren.</translation>
 <translation id="2822354292072154809">Möchtest du wirklich alle Websiteberechtigungen für <ph name="CHOSEN_OBJECT_NAME" /> zurücksetzen?</translation>
 <translation id="2850913818900871965">Mobile Ansicht anfordern</translation>
 <translation id="2870560284913253234">Website</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> und <ph name="NUM_MORE" /> weitere}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> und <ph name="NUM_MORE" /> weitere}}</translation>
 <translation id="913657688200966289">Die Berechtigungen für <ph name="APP_NAME" /> können in den <ph name="BEGIN_LINK" />Android-Einstellungen<ph name="END_LINK" /> aktiviert werden.</translation>
 <translation id="9138217887606523162">Die aktuelle Zoomstufe ist <ph name="ZOOM_LEVEL" /> %%</translation>
+<translation id="9156722768168878035">Erlaube Chrome, deine zuletzt geöffneten Tabs in der App-Liste und in den Suchergebnissen deines Geräts anzuzeigen. Diese Funktion lässt sich jederzeit in den Chrome-Einstellungen deaktivieren.</translation>
 <translation id="9162462602695099906">Diese Seite ist gefährlich</translation>
 <translation id="947156494302904893">Websites, die du besuchst, können bestätigen, dass du eine echte Person und kein Bot bist</translation>
 <translation id="959682366969460160">Besser organisiert</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
index d698f79..d171cc67 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Η λήψη διακόπηκε προσωρινά.</translation>
 <translation id="1396327438254055134">Επιτρέψτε στον ιστότοπο να χρησιμοποιεί τον βελτιστοποιητή V8.</translation>
 <translation id="1415402041810619267">Περικομμένο URL</translation>
+<translation id="1415855080660575082">Επιτρέψτε στο Chrome να μοιράζεται τις πρόσφατες καρτέλες με τη συσκευή, για να τις βλέπετε στη λίστα εφαρμογών και στα αποτελέσματα αναζήτησης της συσκευής. Μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε αυτή την επιλογή στις ρυθμίσεις του Chrome.</translation>
 <translation id="1448064542941920355">Σμίκρυνση</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> ιστότοπος}other{<ph name="SITE_COUNT" /> ιστότοποι}}</translation>
 <translation id="1500473259453106018">Απόκρυψη κάρτας Πτώσεις τιμών σε καρτέλες</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Επιτρέψατε προσωρινά σε αυτόν τον ιστότοπο να χρησιμοποιεί cookie τρίτου μέρους, κάτι που σημαίνει ότι έχει λιγότερη προστασία περιήγησης, αλλά οι λειτουργίες του ιστοτόπου είναι πιο πιθανό να λειτουργούν με τον αναμενόμενο τρόπο. <ph name="BEGIN_LINK" />Αποστολή σχολίων<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Οι λειτουργίες σε ορισμένους ιστοτόπους ενδέχεται να μην λειτουργούν σε Κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="2442870161001914531">Να ζητείται πάντα ιστότοπος για υπολογιστές</translation>
+<translation id="2445311670906052406">Το Chrome μοιράζεται πλέον τις πρόσφατες καρτέλες με τη συσκευή. Θα εμφανίζονται στη λίστα εφαρμογών και στα αποτελέσματα αναζήτησης της συσκευής. Μπορείτε να απενεργοποιήσετε αυτή την επιλογή ανά πάσα στιγμή στις ρυθμίσεις του Chrome.</translation>
 <translation id="2469312991797799607">Με αυτή την ενέργεια, θα διαγραφούν όλα τα δεδομένα και τα cookie για το <ph name="ORIGIN" /> και όλους τους ιστοτόπους που περιλαμβάνονται σε αυτό.</translation>
 <translation id="2482878487686419369">Ειδοποιήσεις</translation>
 <translation id="2485422356828889247">Απεγκατάσταση</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Οι ιστότοποι μπορούν πλέον να εμφανίζουν προτροπές σύνδεσης από υπηρεσίες ταυτότητας.</translation>
 <translation id="2787357173144933081">Κύριο πλαίσιο ταχείας εκκίνησης</translation>
 <translation id="2790501146643349491">Όταν είναι ενεργοποιημένη αυτή η επιλογή, οι ιστότοποι που έχουν κλείσει πρόσφατα μπορούν να ολοκληρώσουν την αποστολή και τη λήψη δεδομένων. Όταν είναι απενεργοποιημένη αυτή η επιλογή, οι ιστότοποι που έχουν κλείσει πρόσφατα δεν μπορούν να ολοκληρώσουν την αποστολή ή τη λήψη δεδομένων.</translation>
+<translation id="2814830417943086299">Το Chrome εμφανίζει πλέον τις πρόσφατες καρτέλες στη λίστα εφαρμογών και στα αποτελέσματα αναζήτησης της συσκευής. Μπορείτε να απενεργοποιήσετε αυτή την επιλογή ανά πάσα στιγμή στις ρυθμίσεις του Chrome.</translation>
 <translation id="2822354292072154809">Είστε βέβαοι ότι θέλετε να αναιρεθούν όλες οι άδειες ιστοτόπου για το αντικείμενο <ph name="CHOSEN_OBJECT_NAME" />;</translation>
 <translation id="2850913818900871965">Αίτημα για προβολή για κινητά</translation>
 <translation id="2870560284913253234">Ιστότοπος</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> και <ph name="NUM_MORE" /> ακόμη}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> και <ph name="NUM_MORE" /> ακόμη}}</translation>
 <translation id="913657688200966289">Ενεργοποιήστε τις άδειες για την εφαρμογή <ph name="APP_NAME" /> στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Η τρέχουσα εστίαση είναι <ph name="ZOOM_LEVEL" />%%</translation>
+<translation id="9156722768168878035">Επιτρέψτε στο Chrome να εμφανίζει τις πρόσφατες καρτέλες στη λίστα εφαρμογών και στα αποτελέσματα αναζήτησης της συσκευής. Μπορείτε να απενεργοποιήσετε αυτή την επιλογή ανά πάσα στιγμή στις ρυθμίσεις του Chrome.</translation>
 <translation id="9162462602695099906">Αυτή η σελίδα είναι επικίνδυνη</translation>
 <translation id="947156494302904893">Οι ιστότοποι που επισκέπτεστε μπορούν να επαληθεύσουν ότι είστε πραγματικό άτομο και όχι bot</translation>
 <translation id="959682366969460160">Οργανωθείτε</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
index 6413bb67..3721ae9c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Ներբեռնումը դադարեցվել է</translation>
 <translation id="1396327438254055134">Թույլատրել կայքերին օգտագործել V8 լավարկիչը։</translation>
 <translation id="1415402041810619267">URL-ը կրճատվել է</translation>
+<translation id="1415855080660575082">Թույլ տվեք Chrome-ին կիսվել ձեր վերջին ներդիրներով ձեր սարքի հետ, որպեսզի կարողանաք տեսնել դրանք ձեր սարքի հավելվածների ցանկում և որոնման արդյունքներում։ Դուք կարող եք միացնել կամ անջատել այս գործառույթը Chrome-ի կարգավորումներում։</translation>
 <translation id="1448064542941920355">Փոքրացնել մասշտաբը</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> կայք}one{<ph name="SITE_COUNT" /> կայք}other{<ph name="SITE_COUNT" /> կայք}}</translation>
 <translation id="1500473259453106018">Թաքցնել «Ներդիրներում գների իջեցման մասին ծանուցումներ» քարտը</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Դուք ժամանակավորապես թույլատրել եք այս կայքին օգտագործել երրորդ կողմի քուքիներ։ Դիտարկիչի պաշտպանվածությունը կթուլանա, սակայն կայքի գործառույթները կարող են սկսել ճիշտ աշխատել։ <ph name="BEGIN_LINK" />Կարծիք հայտնել<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Ինկոգնիտո ռեժիմում որոշ կայքերի գործառույթները կարող են չաշխատել</translation>
 <translation id="2442870161001914531">Միշտ պահանջել կայքի ամբողջական տարբերակը</translation>
+<translation id="2445311670906052406">Chrome-ն այժմ կիսվում է ձեր վերջին ներդիրներով ձեր սարքի հետ։ Դուք կտեսնեք դրանք ձեր սարքի հավելվածների ցանկում և որոնման արդյունքներում։ Դուք ցանկացած պահի կարող եք անջատել այս գործառույթը Chrome-ի կարգավորումներում։</translation>
 <translation id="2469312991797799607">Կջնջվեն բոլոր տվյալներն ու քուքիները, որոնք պահվել են <ph name="ORIGIN" /> կայքերի խմբում և դրա ենթակայքերում</translation>
 <translation id="2482878487686419369">Ծանուցումներ</translation>
 <translation id="2485422356828889247">Ապատեղադրել</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Կայքերը կարող են ցույց տալ նույնականացման ծառայությունների մուտքի հարցումներ։</translation>
 <translation id="2787357173144933081">Արագ գործարկել Omnibox-ը</translation>
 <translation id="2790501146643349491">Երբ այս պարամետրը միացված է, վերջերս փակված կայքերը կարող են ավարտել տվյալների ուղարկումն ու ստացումը։ Երբ այն անջատված է, վերջերս փակված կայքերը չեն կարող ավարտել տվյալների ուղարկումն ու ստացումը։</translation>
+<translation id="2814830417943086299">Chrome-ը այժմ ցույց է տալիս ձեր վերջին ներդիրները ձեր սարքի հավելվածների ցանկում և որոնման արդյունքներում։ Դուք ցանկացած պահի կարող եք անջատել այս գործառույթը Chrome-ի կարգավորումներում։</translation>
 <translation id="2822354292072154809">Վերակայե՞լ բոլոր կայքերի թույլտվությունները <ph name="CHOSEN_OBJECT_NAME" />-ի համար:</translation>
 <translation id="2850913818900871965">Հայցել բջջային տարբերակը</translation>
 <translation id="2870560284913253234">Կայք</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{«<ph name="PERMISSION_1" />», «<ph name="PERMISSION_2" />» ու ևս <ph name="NUM_MORE" /> թույլտվություն}one{«<ph name="PERMISSION_1" />», «<ph name="PERMISSION_2" />» ու ևս <ph name="NUM_MORE" /> թույլտվություն}other{«<ph name="PERMISSION_1" />», «<ph name="PERMISSION_2" />» ու ևս <ph name="NUM_MORE" /> թույլտվություն}}</translation>
 <translation id="913657688200966289">Միացնել <ph name="APP_NAME" />-ի թույլտվությունները <ph name="BEGIN_LINK" />Android-ի կարգավորումներում<ph name="END_LINK" />։</translation>
 <translation id="9138217887606523162">Ընթացիկ մասշտաբը <ph name="ZOOM_LEVEL" />%% է</translation>
+<translation id="9156722768168878035">Թույլ տվեք Chrome-ին ցույց տալ ձեր վերջին ներդիրները ձեր սարքի հավելվածների ցանկում և որոնման արդյունքներում։ Դուք ցանկացած պահի կարող եք անջատել այս գործառույթը Chrome-ի կարգավորումներում։</translation>
 <translation id="9162462602695099906">Այս էջը վտանգավոր է</translation>
 <translation id="947156494302904893">Կայքերը, որոնք այցելում եք, կարող են ստուգել՝ արդյոք դուք իրական օգտատեր եք, թե՝ ռոբոտ</translation>
 <translation id="959682366969460160">Աշխատանքի կազմակերպում</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
index 4a05cd6..f930825 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Gert var hlé á niðurhali</translation>
 <translation id="1396327438254055134">Leyfa vefsvæði að nota V8 optimizer.</translation>
 <translation id="1415402041810619267">Stytt vefslóð</translation>
+<translation id="1415855080660575082">Leyfðu Chrome að deila nýlegum flipum með tækinu þínu svo að þú getir séð þá á forritalista og í leitarniðurstöðum tækisins. Þú getur kveikt eða slökkt á þessu í stillingum Chrome.</translation>
 <translation id="1448064542941920355">Minnka aðdrátt</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> vefsvæði}one{<ph name="SITE_COUNT" /> vefsvæði}other{<ph name="SITE_COUNT" /> vefsvæðum}}</translation>
 <translation id="1500473259453106018">Fela spjaldið „Verðlækkun á flipum“</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Þú leyfðir þessu vefsvæði að nota fótspor þriðju aðila tímabundið. Þetta þýðir minni vernd við vefskoðun en líklegra er að eiginleikar vefsvæðisins virki sem skyldi. <ph name="BEGIN_LINK" />Senda ábendingu<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Eiginleikar sumra vefsvæða virka e.t.v. ekki í huliðsstillingu</translation>
 <translation id="2442870161001914531">Biðja alltaf um tölvuútgáfu vefsvæða</translation>
+<translation id="2445311670906052406">Chrome deilir nú nýlegum flipum með tækinu þínu. Þú getur séð þá á forritalista og í leitarniðurstöðum tækisins. Þú getur slökkt á þessu hvenær sem er í stillingum Chrome.</translation>
 <translation id="2469312991797799607">Þessi aðgerð eyðir öllum gögnum og fótsporum fyrir <ph name="ORIGIN" /> og öll undirvefsvæði þess</translation>
 <translation id="2482878487686419369">Tilkynningar</translation>
 <translation id="2485422356828889247">Fjarlægja</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Vefsvæði geta nú birt innskráningartilkynningar frá auðkenningarþjónustum.</translation>
 <translation id="2787357173144933081">Forræsing veffangastiku</translation>
 <translation id="2790501146643349491">Þegar kveikt er á þessu geta vefsvæði sem nýlega var lokað lokið við að senda og taka á móti gögnum. Þegar slökkt er á þessu geta vefsvæði sem nýlega var lokað ekki lokið við að senda og taka á móti gögnum.</translation>
+<translation id="2814830417943086299">Chrome sýnir núna nýlega flipa á forritalista og í leitarniðurstöðum tækisins. Þú getur slökkt á þessu hvenær sem er í stillingum Chrome.</translation>
 <translation id="2822354292072154809">Viltu örugglega endurstilla allar heimildir vefsvæða fyrir „<ph name="CHOSEN_OBJECT_NAME" />“?</translation>
 <translation id="2850913818900871965">Biðja um símaútgáfu</translation>
 <translation id="2870560284913253234">Vefsvæði</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{„<ph name="PERMISSION_1" />“, „<ph name="PERMISSION_2" />“ og <ph name="NUM_MORE" /> í viðbót}one{„<ph name="PERMISSION_1" />“, „<ph name="PERMISSION_2" />“ og <ph name="NUM_MORE" /> í viðbót}other{„<ph name="PERMISSION_1" />“, „<ph name="PERMISSION_2" />“ og <ph name="NUM_MORE" /> í viðbót}}</translation>
 <translation id="913657688200966289">Kveiktu á heimildum fyrir <ph name="APP_NAME" /> í <ph name="BEGIN_LINK" />stillingum Android<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Aðdráttur er nú <ph name="ZOOM_LEVEL" /> %%</translation>
+<translation id="9156722768168878035">Láta Chrome sýna nýlega flipa á forritalista og í leitarniðurstöðum tækisins. Þú getur slökkt á þessu hvenær sem er í stillingum Chrome.</translation>
 <translation id="9162462602695099906">Þessi síða er hættuleg</translation>
 <translation id="947156494302904893">Vefsvæði geta staðfest að þú sért manneskja en ekki botti</translation>
 <translation id="959682366969460160">Skipulag</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
index cb0a844..58e1fc9 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">다운로드 일시중지됨</translation>
 <translation id="1396327438254055134">사이트에서 V8 옵티마이저를 사용하도록 허용합니다.</translation>
 <translation id="1415402041810619267">URL 잘림</translation>
+<translation id="1415855080660575082">Chrome에서 내 기기와 최근 탭을 공유하도록 허용하면 기기의 앱 목록과 검색 결과에서 최근 탭을 볼 수 있습니다. 이 기능은 Chrome 설정에서 사용 또는 사용 중지할 수 있습니다.</translation>
 <translation id="1448064542941920355">축소</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> 사이트}other{<ph name="SITE_COUNT" /> 사이트}}</translation>
 <translation id="1500473259453106018">탭에 가격 인하 정보 숨기기 카드</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">이 사이트에서 서드 파티 쿠키가 일시적으로 허용되었습니다. 보안이 취약해졌지만 사이트 기능이 예상대로 작동할 가능성은 높아졌습니다. <ph name="BEGIN_LINK" />의견 보내기<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">시크릿 모드에서는 일부 사이트의 기능이 작동하지 않을 수 있습니다.</translation>
 <translation id="2442870161001914531">항상 데스크톱 사이트 요청</translation>
+<translation id="2445311670906052406">이제 Chrome에서 내 기기와 최근 탭을 공유합니다. 최근 탭이 기기의 앱 목록과 검색 결과에 표시됩니다. 이 기능은 Chrome 설정에서 언제든지 사용 중지할 수 있습니다.</translation>
 <translation id="2469312991797799607">이 작업을 실행하면 <ph name="ORIGIN" /> 및 모든 하위 사이트의 데이터와 쿠키가 모두 삭제됩니다.</translation>
 <translation id="2482878487686419369">알림</translation>
 <translation id="2485422356828889247">제거</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">사이트에서 ID 서비스의 로그인 메시지를 표시할 수 있습니다.</translation>
 <translation id="2787357173144933081">검색주소창 시작하기</translation>
 <translation id="2790501146643349491">사용 설정하면 최근에 닫은 사이트에서 데이터 전송 및 수신을 완료할 수 있습니다. 사용 중지하면 최근에 닫은 사이트에서 데이터 전송 또는 수신을 완료할 수 없습니다.</translation>
+<translation id="2814830417943086299">이제 Chrome에서 기기의 앱 목록과 검색 결과에 최근 탭을 표시합니다. 이 기능은 Chrome 설정에서 언제든지 사용 중지할 수 있습니다.</translation>
 <translation id="2822354292072154809"><ph name="CHOSEN_OBJECT_NAME" />의 모든 사이트 권한을 재설정하시겠습니까?</translation>
 <translation id="2850913818900871965">모바일 뷰 요청</translation>
 <translation id="2870560284913253234">사이트</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> 외 <ph name="NUM_MORE" />개}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> 외 <ph name="NUM_MORE" />개}}</translation>
 <translation id="913657688200966289"><ph name="BEGIN_LINK" />Android 설정<ph name="END_LINK" />에서 <ph name="APP_NAME" /> 관련 권한을 허용하세요.</translation>
 <translation id="9138217887606523162">현재 확대/축소 레벨은 <ph name="ZOOM_LEVEL" />%%입니다</translation>
+<translation id="9156722768168878035">Chrome에서 기기의 앱 목록과 검색 결과에 최근 탭을 표시하도록 허용합니다. 이 기능은 Chrome 설정에서 언제든지 사용 중지할 수 있습니다.</translation>
 <translation id="9162462602695099906">위험한 페이지입니다.</translation>
 <translation id="947156494302904893">방문하는 사이트에서 내가 봇이 아니라 실제 사람인지 확인할 수 있습니다</translation>
 <translation id="959682366969460160">깔끔하게 정리하기</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
index af475dd..73ac6b7 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Preuzimanje je pauzirano</translation>
 <translation id="1396327438254055134">Dozvolite sajtu da koristi V8 optimizator.</translation>
 <translation id="1415402041810619267">URL je skraćen</translation>
+<translation id="1415855080660575082">Dozvolite Chrome-u da deli nedavne kartice sa uređajem da biste ih videli na listi aplikacija i u rezultatima pretrage uređaja. To možete da uključite ili isključite u Chrome podešavanjima.</translation>
 <translation id="1448064542941920355">Smanjite zumiranje</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> sajt}one{<ph name="SITE_COUNT" /> sajt}few{<ph name="SITE_COUNT" /> sajta}other{<ph name="SITE_COUNT" /> sajtova}}</translation>
 <translation id="1500473259453106018">Sakrij sniženja na karticama</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Privremeno ste dozvolili ovom sajtu da koristi kolačiće treće strane, što znači manje zaštite pri pregledanju, ali je veća verovatnoća da će funkcije sajta raditi prema očekivanjima. <ph name="BEGIN_LINK" />Pošaljite povratne informacije<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Funkcije na nekim sajtovima možda neće raditi u režimu bez arhiviranja</translation>
 <translation id="2442870161001914531">Uvek se zahteva sajt za računar</translation>
+<translation id="2445311670906052406">Chrome sada deli nedavne kartice sa uređajem. Videćete ih na listi aplikacija i u rezultatima pretrage uređaja. To možete da isključite u svakom trenutku u Chrome podešavanjima.</translation>
 <translation id="2469312991797799607">Ova radnja će obrisati sve podatke i kolačiće za domen <ph name="ORIGIN" /> i sve sajtove u okviru njega</translation>
 <translation id="2482878487686419369">Obaveštenja</translation>
 <translation id="2485422356828889247">Deinstaliraj</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Sajtovi mogu da prikazuju upite za prijavljivanje iz usluga za identitet.</translation>
 <translation id="2787357173144933081">Pokreni omniboks</translation>
 <translation id="2790501146643349491">Kada je uključeno, nedavno zatvoreni sajtovi mogu da završe slanje i prijem podataka. Kada je isključeno, nedavno zatvoreni sajtovi ne mogu da završe slanje niti prijem podataka.</translation>
+<translation id="2814830417943086299">Chrome sada prikazuje nedavne kartice na listi aplikacija i u rezultatima pretrage uređaja. To možete da isključite u svakom trenutku u Chrome podešavanjima.</translation>
 <translation id="2822354292072154809">Želite li stvarno da resetujete sve dozvole za sajt za <ph name="CHOSEN_OBJECT_NAME" />?</translation>
 <translation id="2850913818900871965">Zahtevaj prikaz za mobilne uređaje</translation>
 <translation id="2870560284913253234">Sajt</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" />}one{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" />}few{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" />}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" />}}</translation>
 <translation id="913657688200966289">Uključite dozvole za aplikaciju <ph name="APP_NAME" /> u <ph name="BEGIN_LINK" />Android podešavanjima<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Aktuelno zumiranje je <ph name="ZOOM_LEVEL" />%%</translation>
+<translation id="9156722768168878035">Dozvolite Chrome-u da prikazuje nedavne kartice na listi aplikacija i u rezultatima pretrage uređaja. To možete da isključite u svakom trenutku u Chrome podešavanjima.</translation>
 <translation id="9162462602695099906">Ova stranica je opasna</translation>
 <translation id="947156494302904893">Sajtovi koje posećujete mogu da potvrde da ste stvarna osoba, a ne bot</translation>
 <translation id="959682366969460160">Bolja organizacija</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
index b887370..5b38c1b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Преузимање је паузирано</translation>
 <translation id="1396327438254055134">Дозволите сајту да користи V8 оптимизатор.</translation>
 <translation id="1415402041810619267">URL је скраћен</translation>
+<translation id="1415855080660575082">Дозволите Chrome-у да дели недавне картице са уређајем да бисте их видели на листи апликација и у резултатима претраге уређаја. То можете да укључите или искључите у Chrome подешавањима.</translation>
 <translation id="1448064542941920355">Смањите зумирање</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> сајт}one{<ph name="SITE_COUNT" /> сајт}few{<ph name="SITE_COUNT" /> сајта}other{<ph name="SITE_COUNT" /> сајтова}}</translation>
 <translation id="1500473259453106018">Сакриј снижења на картицама</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Привремено сте дозволили овом сајту да користи колачиће треће стране, што значи мање заштите при прегледању, али је већа вероватноћа да ће функције сајта радити према очекивањима. <ph name="BEGIN_LINK" />Пошаљите повратне информације<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Функције на неким сајтовима можда неће радити у режиму без архивирања</translation>
 <translation id="2442870161001914531">Увек се захтева сајт за рачунар</translation>
+<translation id="2445311670906052406">Chrome сада дели недавне картице са уређајем. Видећете их на листи апликација и у резултатима претраге уређаја. То можете да искључите у сваком тренутку у Chrome подешавањима.</translation>
 <translation id="2469312991797799607">Ова радња ће обрисати све податке и колачиће за домен <ph name="ORIGIN" /> и све сајтове у оквиру њега</translation>
 <translation id="2482878487686419369">Обавештења</translation>
 <translation id="2485422356828889247">Деинсталирај</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Сајтови могу да приказују упите за пријављивање из услуга за идентитет.</translation>
 <translation id="2787357173144933081">Покрени омнибокс</translation>
 <translation id="2790501146643349491">Када је укључено, недавно затворени сајтови могу да заврше слање и пријем података. Када је искључено, недавно затворени сајтови не могу да заврше слање нити пријем података.</translation>
+<translation id="2814830417943086299">Chrome сада приказује недавне картице на листи апликација и у резултатима претраге уређаја. То можете да искључите у сваком тренутку у Chrome подешавањима.</translation>
 <translation id="2822354292072154809">Желите ли стварно да ресетујете све дозволе за сајт за <ph name="CHOSEN_OBJECT_NAME" />?</translation>
 <translation id="2850913818900871965">Захтевај приказ за мобилне уређаје</translation>
 <translation id="2870560284913253234">Сајт</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" />}one{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" />}few{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" />}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" />}}</translation>
 <translation id="913657688200966289">Укључите дозволе за апликацију <ph name="APP_NAME" /> у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Актуелно зумирање је <ph name="ZOOM_LEVEL" />%%</translation>
+<translation id="9156722768168878035">Дозволите Chrome-у да приказује недавне картице на листи апликација и у резултатима претраге уређаја. То можете да искључите у сваком тренутку у Chrome подешавањима.</translation>
 <translation id="9162462602695099906">Ова страница је опасна</translation>
 <translation id="947156494302904893">Сајтови које посећујете могу да потврде да сте стварна особа, а не бот</translation>
 <translation id="959682366969460160">Боља организација</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
index ba188c0..23199c0 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">Nedladdningen har pausats</translation>
 <translation id="1396327438254055134">Tillåt att webbplatsen använder V8-optimeraren.</translation>
 <translation id="1415402041810619267">Webbadressen har trunkerats</translation>
+<translation id="1415855080660575082">Tillåt att Chrome delar dina senaste flikar med enheten så att du kan se dem i enhetens applista och sökresultat. Du kan aktivera eller inaktivera detta i Chrome-inställningarna.</translation>
 <translation id="1448064542941920355">Minska zoom</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> webbplats}other{<ph name="SITE_COUNT" /> webbplatser}}</translation>
 <translation id="1500473259453106018">Dölj kortet Sänkta priser på flikar</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">Du har tillfälligt tillåtit att den här webbplatsen använder tredjepartscookies, vilket innebär att webbsökningen är mindre skyddad, men det är mer troligt att webbplatsfunktioner fungerar som förväntat. <ph name="BEGIN_LINK" />Skicka feedback<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">Funktioner på vissa webbplatser kanske inte fungerar i inkognitoläge</translation>
 <translation id="2442870161001914531">Begär alltid datorversionen av webbplatsen</translation>
+<translation id="2445311670906052406">Chrome delar nu dina senaste flikar med enheten. Du ser dem i enhetens applista och sökresultat. Du kan inaktivera detta när som helst i Chrome-inställningarna.</translation>
 <translation id="2469312991797799607">När du gör detta raderas all data och alla cookies för <ph name="ORIGIN" /> och alla underordnade webbplatser</translation>
 <translation id="2482878487686419369">Aviseringar</translation>
 <translation id="2485422356828889247">Avinstallera</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">Webbplatser får visa inloggningsmeddelanden från identitetstjänster.</translation>
 <translation id="2787357173144933081">Snabbstarta adressfältet</translation>
 <translation id="2790501146643349491">När detta är aktiverat kan nyligen stängda webbplatser fortsätta att skicka och ta emot data. När detta är inaktiverat får webbplatser som nyligen stängts inte skicka eller ta emot data.</translation>
+<translation id="2814830417943086299">Chrome visar nu dina senaste flikar i enhetens applista och sökresultat. Du kan inaktivera detta när som helst i Chrome-inställningarna.</translation>
 <translation id="2822354292072154809">Vill du återställa alla webbplatsbehörigheter för <ph name="CHOSEN_OBJECT_NAME" />?</translation>
 <translation id="2850913818900871965">Begär mobilvy</translation>
 <translation id="2870560284913253234">Webbplats</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> och <ph name="NUM_MORE" /> till}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> och <ph name="NUM_MORE" /> till}}</translation>
 <translation id="913657688200966289">Aktivera behörigheter för <ph name="APP_NAME" /> i <ph name="BEGIN_LINK" />Android-inställningarna<ph name="END_LINK" />.</translation>
 <translation id="9138217887606523162">Nuvarande zoom är <ph name="ZOOM_LEVEL" /> %%</translation>
+<translation id="9156722768168878035">Tillåt att Chrome visar dina senaste flikar i enhetens applista och sökresultat. Du kan inaktivera detta när som helst i Chrome-inställningarna.</translation>
 <translation id="9162462602695099906">Den här sidan är farlig</translation>
 <translation id="947156494302904893">Webbplatser du besöker kan verifiera att du är en riktig person och inte en bot</translation>
 <translation id="959682366969460160">Håll ordning</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
index 30231a2..95b2657 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -26,6 +26,7 @@
 <translation id="1384959399684842514">డౌన్‌లోడ్ పాజ్ చేయబడింది</translation>
 <translation id="1396327438254055134">V8 ఆప్టిమైజర్‌ను ఉపయోగించడానికి సైట్‌ను అనుమతించండి.</translation>
 <translation id="1415402041810619267">URL కుదించబడింది</translation>
+<translation id="1415855080660575082">మీ ఇటీవలి ట్యాబ్‌లను మీ పరికర యాప్ లిస్ట్, సెర్చ్ ఫలితాల్లో చూడాలంటే, Chromeను వాటిని మీ పరికరంతో షేర్ చేయనివ్వండి. మీరు దీన్ని Chrome సెట్టింగ్‌లలో ఆన్ లేదా ఆఫ్ చేయవచ్చు.</translation>
 <translation id="1448064542941920355">జూమ్ స్థాయిని తగ్గించండి</translation>
 <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> సైట్}other{<ph name="SITE_COUNT" /> సైట్‌లు}}</translation>
 <translation id="1500473259453106018">ట్యాబ్‌ల కార్డ్‌లో ధర తగ్గింపు వివరాలను దాచండి</translation>
@@ -91,6 +92,7 @@
 <translation id="2438120137003069591">థర్డ్-పార్టీ కుక్కీలను ఉపయోగించడానికి ఈ సైట్‌కు మీరు తాత్కాలికంగా అనుమతిని ఇచ్చారు, అనగా బ్రౌజింగ్ రక్షణ తక్కువగా ఉంటుంది కానీ సైట్ ఫీచర్‌లు దాదాపు ఊహించిన విధంగానే పని చేయవచ్చు. <ph name="BEGIN_LINK" />ఫీడ్‌బ్యాక్‌ను పంపండి<ph name="END_LINK" /></translation>
 <translation id="244264527810019436">అజ్ఞాత మోడ్‌లో కొన్ని సైట్‌లలోని ఫీచర్‌లు పని చేయవు</translation>
 <translation id="2442870161001914531">ఎల్లప్పుడూ డెస్క్‌టాప్ సైట్ కోసం రిక్వెస్ట్ చేయండి</translation>
+<translation id="2445311670906052406">Chrome ఇప్పుడు మీ ఇటీవలి ట్యాబ్‌లను మీ పరికరంతో షేర్ చేస్తుంది. అవి మీకు మీ పరికర యాప్ లిస్ట్‌లో, సెర్చ్ ఫలితాల్లో కనిపిస్తాయి. మీరు దీన్ని ఎప్పుడైనా Chrome సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు.</translation>
 <translation id="2469312991797799607">ఈ చర్య వలన, <ph name="ORIGIN" /> స్టోర్ చేసిన, అలాగే దాని కింద ఉండే సైట్‌లన్నీ స్టోర్ చేసిన మొత్తం డేటాతో పాటు కుక్కీలన్నీ కూడా తొలగిపోతాయి</translation>
 <translation id="2482878487686419369">నోటిఫికేషన్‌లు</translation>
 <translation id="2485422356828889247">అన్ఇన్‌స్టాల్ చేయి</translation>
@@ -116,6 +118,7 @@
 <translation id="2750481671343847896">గుర్తింపు సర్వీస్‌ల నుండి సైన్-ఇన్ ప్రాంప్ట్‌లను సైట్‌లు చూపగలవు.</translation>
 <translation id="2787357173144933081">జంప్-స్టార్ట్ ఓమ్నిబాక్స్</translation>
 <translation id="2790501146643349491">ఆన్‌లో ఉన్నప్పుడు, ఇటీవల మూసివేసిన సైట్‌లు డేటాను పంపడం, స్వీకరించడం పూర్తి చేయగలవు. ఆఫ్‌లో ఉన్నప్పుడు, ఇటీవల మూసివేసిన సైట్‌లు డేటాను పంపడం లేదా స్వీకరించడం పూర్తి చేయడం సాధ్యం కాదు.</translation>
+<translation id="2814830417943086299">Chrome ఇప్పుడు మీ ఇటీవలి ట్యాబ్‌లను మీ పరికర యాప్ లిస్ట్‌లో, సెర్చ్ ఫలితాల్లో చూపుతుంది. మీరు దీన్ని ఎప్పుడైనా Chrome సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు.</translation>
 <translation id="2822354292072154809">మీరు <ph name="CHOSEN_OBJECT_NAME" /> కోసం అన్ని సైట్ అనుమతులను ఖచ్చితంగా రీసెట్ చేయాలనుకుంటున్నారా ?</translation>
 <translation id="2850913818900871965">మొబైల్ వీక్షణను రిక్వెస్ట్ చేయండి</translation>
 <translation id="2870560284913253234">సైట్</translation>
@@ -557,6 +560,7 @@
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, ఇంకా మరో <ph name="NUM_MORE" />}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, ఇంకా మరో <ph name="NUM_MORE" />}}</translation>
 <translation id="913657688200966289"><ph name="BEGIN_LINK" />Android సెట్టింగ్‌ల<ph name="END_LINK" />లో <ph name="APP_NAME" /> కోసం అనుమతులను ఆన్ చేయండి.</translation>
 <translation id="9138217887606523162">ప్రస్తుత జూమ్ స్థాయి <ph name="ZOOM_LEVEL" /> %%</translation>
+<translation id="9156722768168878035">మీ ఇటీవలి ట్యాబ్‌లను మీ పరికర యాప్ లిస్ట్‌లో, సెర్చ్ ఫలితాల్లో చూపడానికి అనుమతిని Chromeకు ఇవ్వండి. మీరు దీన్ని ఎప్పుడైనా Chrome సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు.</translation>
 <translation id="9162462602695099906">ఈ పేజీ ప్రమాదకరం</translation>
 <translation id="947156494302904893">మీరు ఏ సైట్‌లకు అయితే వెళ్తారో, అవి మీరు నిజమైన వ్యక్తి అని, బాట్ కాదు అని వెరిఫై చేయగలవు</translation>
 <translation id="959682366969460160">అన్నింటిని క్రమ పద్దతిలో అమర్చండి</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 6571353..286f701 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "50.46",
-  "log_list_timestamp": "2024-12-22T12:58:49Z",
+  "version": "50.47",
+  "log_list_timestamp": "2024-12-23T12:57:36Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/cronet/gn2bp/gen_android_bp.py b/components/cronet/gn2bp/gen_android_bp.py
index 0e378f07..15a0fc6d 100755
--- a/components/cronet/gn2bp/gen_android_bp.py
+++ b/components/cronet/gn2bp/gen_android_bp.py
@@ -2189,11 +2189,6 @@
         bp_module_name.encode('utf-8')).hexdigest()[:16]
     bp_module_name = f"lib{target.crate_name}__{bp_module_hash}"
 
-    if parent_gn_type in ["static_library", "shared_library"]:
-      # CC modules must depend on a different type of modules that are
-      # rust_ffi_static instead of rust_library_rlib
-      bp_module_name += "__FFI"
-
   if bp_module_name in blueprint.modules:
     return (blueprint.modules[bp_module_name], )
 
@@ -2209,13 +2204,22 @@
   elif target.type == 'rust_executable':
     modules = (Module("rust_binary", bp_module_name, gn_target_name), )
   elif target.type == "rust_library":
-    _type = "rust_library_rlib"
-    if parent_gn_type in ["static_library", "shared_library"]:
-      # CPP modules must depend on rust_ffi_static as this generates the
-      # necessary static library that can be linked.
-      _type = "rust_ffi_static"
-    # Chromium only uses rlibs.
-    modules = (Module(_type, bp_module_name, gn_target_name), )
+    # Here we have to choose between rust_library_rlib and rust_ffi_static.
+    #
+    # Ideally we should pick rust_library_rlib if there are rust_library
+    # dependents, or rust_ffi_static if there are cc_library dependents.
+    # This is a bit tricky, however, because it's theoretically possible for
+    # *both* Rust and C++ code to directly depend on the library.
+    #
+    # In practice, there is currently no real difference between
+    # rust_library_rlib and rust_ffi_static as far as the actual build process
+    # is concerned - they are practically interchangeable. So, to keep things
+    # simple, we just arbitrarily pick one - here rust_ffi_static on
+    # suggestion of AOSP Rust people. See http://b/383552450.
+    #
+    # This decision may need to be revisited if the AOSP build system starts
+    # treating rust_library_rlib and rust_ffi_static differently.
+    modules = (Module("rust_ffi_static", bp_module_name, gn_target_name), )
   elif target.type == "rust_proc_macro":
     modules = (Module("rust_proc_macro", bp_module_name, gn_target_name), )
   elif target.type in ['static_library', 'source_set']:
@@ -2325,9 +2329,7 @@
     # in AOSP. Make every module visible to any module in external/cronet.
     module.visibility = {"//external/cronet:__subpackages__"}
 
-    if module.type in [
-        "rust_library_rlib", "rust_proc_macro", "rust_binary", "rust_ffi_static"
-    ]:
+    if module.type in ["rust_proc_macro", "rust_binary", "rust_ffi_static"]:
       module.crate_name = target.crate_name
       module.crate_root = gn_utils.label_to_path(target.crate_root)
       module.min_sdk_version = 30
@@ -2434,19 +2436,22 @@
         if dep_module.is_compiled() and not dep_module.has_input_files():
           continue
 
+        module_is_cc = module.type in [
+            'cc_library_shared', 'cc_binary', 'cc_library_static'
+        ]
+
         if dep_module.type == 'cc_library_shared':
           module_target.shared_libs.add(dep_module.name)
-        elif dep_module.type in ['cc_library_static', "rust_ffi_static"]:
-          if module.type in ['cc_library_shared', 'cc_binary']:
+        elif dep_module.type == 'cc_library_static' or (
+            dep_module.type == "rust_ffi_static" and module_is_cc):
+          if module.type in ['cc_library_shared', 'cc_binary', 'rust_binary']:
             module_target.whole_static_libs.add(dep_module.name)
           elif module.type == 'cc_library_static':
             module_target.generated_headers.update(dep_module.generated_headers)
             module_target.shared_libs.update(dep_module.shared_libs)
             module_target.header_libs.update(dep_module.header_libs)
-          elif module.type in [
-              "rust_library_rlib", "rust_binary", "rust_ffi_static"
-          ]:
-            module_target.static_libs.add(dep_module.name)
+          elif module.type == 'rust_ffi_static':
+            module_target.shared_libs.update(dep_module.shared_libs)
           else:
             raise Exception(
                 f"Trying to add an unknown type {dep_module.type} to a type of {module.type}"
@@ -2460,10 +2465,9 @@
             # The rust_bindgen has to know the name of the cc library which is going to
             # consume it. We don't know that until we add the `rust_bindgen` as a dep.
             dep_module.static_inline_library = module.name
-        elif dep_module.type == "rust_library_rlib":
+        elif dep_module.type == "rust_ffi_static":
           if module.type in [
-              "rust_library_rlib", "rust_binary", "rust_proc_macro",
-              "rust_ffi_static"
+              "rust_binary", "rust_proc_macro", "rust_ffi_static"
           ]:
             module_target.rustlibs.add(dep_module.name)
         elif dep_module.type == "rust_proc_macro":
diff --git a/components/gwp_asan/crash_handler/crash_handler_unittest.cc b/components/gwp_asan/crash_handler/crash_handler_unittest.cc
index 437da49..f8d6a11 100644
--- a/components/gwp_asan/crash_handler/crash_handler_unittest.cc
+++ b/components/gwp_asan/crash_handler/crash_handler_unittest.cc
@@ -230,12 +230,27 @@
     gpa->Deallocate(ptr);
   } else if (test_name == "Underflow") {
     void* ptr = gpa->Allocate(kAllocationSize);
-    for (size_t i = 0; i < base::GetPageSize(); i++)
-      ((unsigned char*)ptr)[-i] = 0;
+    for (size_t i = 0; i < base::GetPageSize(); i++) {
+      // Cast to `ptrdiff_t` so that the offset is actually negative, rather
+      // than a very large unsigned value. With a very large unsigned value,
+      // UBSan flags the error without any information about allocation sizes,
+      // which impacts the crash handling.
+      //
+      // The compiler could also, in principle, see that `ptr[-size_t{1}]` is
+      // always UB because no allocation can be that large, and then optimize
+      // this code to assume `base::GetPageSize()` returns one, suppressing the
+      // crash. (Though, as of writing, it does not do this.)
+      //
+      // Avoid these issues by underflowing with an actual negative value. This
+      // is still UB (thus the crash), but requires knowledge of `ptr` to
+      // observe, so a non-ASan compiler does not interfere with it in practice.
+      ((unsigned char*)ptr)[-static_cast<ptrdiff_t>(i)] = 0;
+    }
   } else if (test_name == "Overflow") {
     void* ptr = gpa->Allocate(kAllocationSize);
-    for (size_t i = 0; i <= base::GetPageSize(); i++)
+    for (size_t i = 0; i <= base::GetPageSize(); i++) {
       ((unsigned char*)ptr)[i] = 0;
+    }
   } else if (test_name == "UnrelatedException") {
     __builtin_trap();
   } else if (test_name == "FreeInvalidAddress") {
diff --git a/components/optimization_guide/internal b/components/optimization_guide/internal
index ad25fb3..bfb0033 160000
--- a/components/optimization_guide/internal
+++ b/components/optimization_guide/internal
@@ -1 +1 @@
-Subproject commit ad25fb362531d62c3c06cbf57e18b3ce5a016473
+Subproject commit bfb00333807212903408145b1b2fd0e3f43d2237
diff --git a/components/os_crypt/sync/keychain_password_mac.mm b/components/os_crypt/sync/keychain_password_mac.mm
index d8768244..ad37464 100644
--- a/components/os_crypt/sync/keychain_password_mac.mm
+++ b/components/os_crypt/sync/keychain_password_mac.mm
@@ -9,6 +9,7 @@
 #include "base/apple/osstatus_logging.h"
 #include "base/apple/scoped_cftyperef.h"
 #include "base/base64.h"
+#include "base/debug/dump_without_crashing.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/no_destructor.h"
 #include "base/rand_util.h"
@@ -102,5 +103,10 @@
 
   OSSTATUS_LOG(ERROR, error) << "Keychain lookup failed";
   base::UmaHistogramSparse("OSCrypt.Mac.FindGenericPasswordError", error);
+  // TODO(crbug.com/383661630): revert this change once enough data is
+  // collected.
+  if (error == errSecInteractionNotAllowed) {
+    base::debug::DumpWithoutCrashing();
+  }
   return std::string();
 }
diff --git a/components/password_manager/core/browser/manage_passwords_referrer.h b/components/password_manager/core/browser/manage_passwords_referrer.h
index bb1aa4ab..6095469 100644
--- a/components/password_manager/core/browser/manage_passwords_referrer.h
+++ b/components/password_manager/core/browser/manage_passwords_referrer.h
@@ -114,10 +114,14 @@
   // in GPM to upgrade an existing, matching password credential.
   kPasskeyUpgradeBubble = 28,
 
+  // The bubble informing user about the password change flow state (shown when
+  // clicking on the omnibox icon while the password change is running).
+  kPasswordChangeInfoBubble = 29,
+
   // NOTE: When adding a new value to this enum that applies or could apply to
   // Android, make sure it is correctly handled by the internal credential
   // manager launcher java implementation.
-  kMaxValue = kPasskeyUpgradeBubble,
+  kMaxValue = kPasswordChangeInfoBubble,
 };
 
 }  // namespace password_manager
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 53c95d43..0245df6a 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -248,6 +248,7 @@
       Si se le asigna el valor "False" o no se le asigna ningún valor, las páginas web podrán usar la API de WebGL y los complementos podrán usar la API de Pepper 3D, pero es posible que la configuración predeterminada del navegador requiera el uso de argumentos de línea de comandos para utilizar estas API.</translation>
 <translation id="1198458955128279215">Usar el comportamiento predeterminado del plan de lanzamiento de funciones.</translation>
 <translation id="1202216683470826356">Mostrar tarjetas en la página Nueva pestaña</translation>
+<translation id="1203676252390737801">Gestión de IPs por URL de WebRTC</translation>
 <translation id="1204263402976895730">Impresoras de empresa habilitadas</translation>
 <translation id="1207301487141109411">Impedir que se seleccione el avatar del usuario desde el sistema de archivos local, la cámara o el perfil de Google.</translation>
 <translation id="1209096923317019235">Asigna aplicaciones como controladores predeterminados de extensiones de archivo especificadas</translation>
@@ -646,6 +647,13 @@
 Si se habilita esta política, el selector de emojis admitirá GIFs.
 Si se inhabilita esta política o no se le asigna ningún valor, el selector de emojis no admitirá GIFs.
 Si no se asigna ningún valor a esta política, el selector de emojis estará habilitado para los usuarios estándar, pero estará inhabilitado para los usuarios gestionados.</translation>
+<translation id="1493245040983394029">Esta política controla la configuración de la función de edición de fotos basada en IA generativa de <ph name="PRODUCT_OS_NAME" />.
+
+Si se asigna el valor 0 a esta política, se habilitarán estas funciones para los usuarios y se enviarán los datos pertinentes a Google para ayudar a entrenar o mejorar modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, datos de entrada, resultados y materiales originales. Puede que los revise una persona con el único propósito de mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo.
+
+Si se asigna el valor 1 a esta política, se habilitarán estas funciones para los usuarios, pero no se enviarán datos a Google para entrenar ni mejorar modelos de IA. 1 es el valor predeterminado de los usuarios de empresa que se gestionan en <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />.
+
+Si se asigna el valor 2 a esta política, se inhabilitarán estas funciones.</translation>
 <translation id="1494138678487405397">Inhabilitar el contraste alto en la pantalla de inicio de sesión</translation>
 <translation id="1497797462580613666">El administrador de descargas tendrá la opción de guardar archivos en <ph name="GOOGLE_DRIVE_NAME" />.</translation>
 <translation id="1498640472634891941">Si se establece esta política, podrás definir una lista de patrones de URL donde se especifique a qué sitios se denegará automáticamente el acceso a impresoras locales a través de la API WebPrinting.
@@ -1592,6 +1600,7 @@
 <translation id="2204753382813641270">Controlar opción para ocultar archivos automáticamente</translation>
 <translation id="2208976000652006649">Parámetros para URL de búsqueda que utiliza POST</translation>
 <translation id="2212011154693551439">La página del historial de Chrome organizada en grupos se mostrará en chrome://history/grouped de forma predeterminada.</translation>
+<translation id="2212207215880394506">No permitir la edición de fotos basada en IA generativa.</translation>
 <translation id="221287948061571053">Ocultar insignia de empresa desplegada en la barra de herramientas</translation>
 <translation id="2213059592185933570">Habilitar la creación de perfiles de roaming</translation>
 <translation id="2213342458177721585">Habilitar el diseño InScript para hindi a nivel de dispositivo.</translation>
@@ -2116,6 +2125,7 @@
 
       Si se le asigna el valor 1 ("UserOnly"), los usuarios podrán gestionar los certificados de usuario, pero no todos los certificados del dispositivo.</translation>
 <translation id="2593762551209145088">Navegación segura nunca está activa.</translation>
+<translation id="2594773358911436070">Ajustes de WebRTC</translation>
 <translation id="26023406105317310">Configurar las cuentas de Kerberos</translation>
 <translation id="2603237557651009842">Bloquear la API WebPrinting en estos sitios</translation>
 <translation id="2603382859270873566">Habilitar la compatibilidad con la API PPB_VideoDecoder(Dev).</translation>
@@ -2220,6 +2230,7 @@
       Si se le asigna un valor a esta política y se activa el inicio de sesión automático (consulta las políticas <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> y <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_DELAY_POLICY_NAME" />), la sesión administrada usará la primera configuración regional recomendada y el diseño de teclado correspondiente más usado.
 
       El diseño de teclado preseleccionado es siempre el más usado con la configuración regional preseleccionada. Los usuarios pueden elegir para su sesión cualquier configuración regional compatible con <ph name="PRODUCT_OS_NAME" />.</translation>
+<translation id="269274821351405808">Ajustes de la función de edición de fotos basada en IA generativa</translation>
 <translation id="2693108589792503178">Configura la URL de cambio de contraseñas.</translation>
 <translation id="2694143893026486692">Lupa fijada habilitada</translation>
 <translation id="2696077732471707315">
@@ -2393,6 +2404,7 @@
 Esta política solo se puede establecer como política de usuarios basada en la nube.</translation>
 <translation id="2846689894646472396">Intervalo de comprobación de eventos de red en milisegundos</translation>
 <translation id="2847788524147474533">Las políticas basadas en la plataforma del equipo tienen prioridad sobre las políticas basadas en la nube</translation>
+<translation id="2849051159985119151">Permitir la edición de fotos basada en IA generativa sin mejorar los modelos de IA.</translation>
 <translation id="2849275596224278787">Ocultar las opciones de accesibilidad en el menú de la bandeja del sistema de la pantalla de inicio de sesión</translation>
 <translation id="2853649500575897584">No bloquea los puntos de extensión antiguos en el proceso del navegador</translation>
 <translation id="2853757230661166968">Permite que las aplicaciones capturen y anulen las combinaciones de teclas predeterminadas del sistema.</translation>
@@ -3150,6 +3162,7 @@
       Si se le asigna el valor "hidden", los usuarios no podrán utilizar ni ver las funciones inhabilitadas.
 
       Si no se le asigna ningún valor o se le asigna un valor no válido, el modo de inhabilitación de funciones del sistema tendrá el valor "blocked".</translation>
+<translation id="3411947169047929182">Controla la configuración relacionada con WebRTC</translation>
 <translation id="341285788698114069">Esta política controla la prioridad del proceso de audio en Windows.
       Si se habilita la política, el proceso de audio se ejecutará con una prioridad superior a la normal.
       Si se inhabilita esta política, el proceso de audio se ejecutará con una prioridad normal.
@@ -4505,6 +4518,7 @@
 <translation id="4467952432486360968">Bloquear cookies de terceros</translation>
 <translation id="4472740647327683596">Ancho de la página en micrómetros</translation>
 <translation id="4474167089968829729">Habilitar el almacenamiento de contraseñas en el gestor de contraseñas</translation>
+<translation id="447692108909279121">Gestión de IPs de WebRTC</translation>
 <translation id="4478248026668918517">Bloquea la detección del nivel de las políticas.</translation>
 <translation id="4479671363221255277">Si se establece esta política, podrás definir una lista de patrones de URL donde se especifique qué sitios pueden pedir a los usuarios que les concedan acceso de lectura a archivos o directorios del sistema de archivos del sistema operativo del host a través de la API File System.
 
@@ -5626,6 +5640,23 @@
 
       Si esta política no se configura o si se le asigna una cadena vacía o un intervalo de puertos no válido, WebRTC podrá utilizar cualquier puerto UDP local disponible.</translation>
 <translation id="5288776487100096897">Permitir que las políticas basadas en la nube a nivel de usuario anulen las políticas de <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /></translation>
+<translation id="5289330879750533981">Esta política permite restringir el uso de direcciones IP e interfaces por parte de WebRTC al intentar buscar la mejor conexión disponible por cada patrón de URL específico.
+
+Acepta una lista de patrones de URL y pares de tipos de gestión. Los patrones de URL se comprueban en orden, y la primera coincidencia configurará el modo de gestión que usará WebRTC para el dominio. Si la URL del documento actual no coincide con ninguna entrada, se usa la configuración definida en la política <ph name="WEB_RTC_IP_HANDLING_POLICY_NAME" />.
+
+Para obtener información detallada sobre los patrones de entrada válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />). Esta política solo detecta coincidencias basadas en el origen, así que se ignora cualquier ruta del patrón de URL.
+
+Valores de gestión válidos:
+
+* default: WebRTC usa todas las interfaces de red.
+
+* default_public_and_private_interfaces: WebRTC usa todas las interfaces públicas y privadas.
+
+* default_public_interface_only: WebRTC usa todas las interfaces públicas, pero no las privadas.
+
+* disable_non_proxied_udp: WebRTC usa el proxy SOCKS de UDP o recurrirá al proxy TCP como alternativa.
+
+Consulta la sección 5.2 del RFC 8828 (https://tools.ietf.org/html/rfc8828.html#section-5.2) para obtener una descripción detallada de todos los valores de gestión.</translation>
 <translation id="5290940294294002042">Especificar una lista de complementos que los usuarios puedan habilitar o inhabilitar</translation>
 <translation id="5293285950307241933">Borrar todos los datos de usuario locales</translation>
 <translation id="5293619885162445352">Permitir que <ph name="PEPPER_NAME" /> use el nuevo decodificador de vídeo.</translation>
@@ -6718,6 +6749,7 @@
       Si no se define esta política, <ph name="PRODUCT_NAME" /> usará la versión máxima predeterminada.
 
       Si no, se le podrá asignar uno de estos valores: "tls1.2" o "tls1.3". Si se define esta política, <ph name="PRODUCT_NAME" /> no usará versiones de SSL/TLS posteriores a la versión especificada. Los valores que no se reconozcan se ignorarán.</translation>
+<translation id="6120909112796019291">Permitir la edición de fotos basada en IA generativa y mejorar los modelos de IA.</translation>
 <translation id="6123052603197028610">No permitir que las consultas a los servidores de Google obtengan marcas de tiempo</translation>
 <translation id="6130360423841559818">Controlar el nuevo comportamiento del cuadro de diálogo de cancelación producido por el evento beforeunload</translation>
 <translation id="6131803221304830537">Inhabilitar la integridad del código del renderizador</translation>
@@ -7124,6 +7156,7 @@
       Si se le asigna el valor "Inhabilitada", los Signed HTTP Exchanges no se podrán cargar.</translation>
 <translation id="6368011194414932347">Configurar la URL de la página principal</translation>
 <translation id="6368403635025849609">Permitir JavaScript en estos sitios</translation>
+<translation id="6368671810229507360">WebRTC</translation>
 <translation id="6371005337713685988">Configuración de Conjuntos de sitios web relacionados</translation>
 <translation id="6371561334154580937">Muestra el cuadro de diálogo de cierre de sesión cuando se cierra la última ventana.</translation>
 <translation id="6372105930898423193">Permite volver a habilitar la función AppCache aunque esté desactivada de forma predeterminada.</translation>
@@ -9555,6 +9588,21 @@
 <translation id="8238421250255592181">Un indicador booleano que especifica si el teclado en pantalla permite usar la función de autocompletar.</translation>
 <translation id="8239109177194627162">Inhabilitar la función Autocompletar para tarjetas de crédito</translation>
 <translation id="8239143983379015783">Forzar que se habilite la cuota persistente</translation>
+<translation id="8240976615241583524">Esta política permite restringir el uso de direcciones IP e interfaces por parte de WebRTC al intentar buscar la mejor conexión disponible.
+
+Valores válidos:
+
+* default: WebRTC usa todas las interfaces de red disponibles.
+
+* default_public_and_private_interfaces: WebRTC usa todas las interfaces públicas y privadas.
+
+* default_public_interface_only: WebRTC usa todas las interfaces públicas, pero no las privadas.
+
+* disable_non_proxied_udp: WebRTC usa el proxy SOCKS de UDP o recurrirá al proxy TCP como alternativa.
+
+Si no se le asigna ningún valor, utilizará de forma predeterminada todas las interfaces de red disponibles.
+
+Consulta la sección 5.2 del RFC 8828 (https://tools.ietf.org/html/rfc8828.html#section-5.2) para obtener una descripción detallada de todos los valores de gestión.</translation>
 <translation id="8244171102276095471">Habilita los conjuntos de cifrado de RC4 en TLS</translation>
 <translation id="8244525275280476362">Retraso de recuperación máximo después de validar una política</translation>
 <translation id="8244828501034607035">Esta política controla la visibilidad de la tarjeta de Outlook en la página Nueva pestaña. La tarjeta solo se mostrará en la página Nueva pestaña si la política está habilitada y tu organización ha autorizado el uso de los datos del calendario de Outlook en el navegador.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index b633bc69..c88f499 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -250,6 +250,7 @@
       Jika kebijakan disetel ke Salah (False) atau tidak disetel, halaman web akan menggunakan WebGL API dan plugin akan menggunakan Pepper 3D API, tetapi setelan browser default mungkin masih memerlukan argumen command line untuk menggunakan API ini.</translation>
 <translation id="1198458955128279215">Gunakan perilaku default rencana peluncuran fitur.</translation>
 <translation id="1202216683470826356">Tampilkan kartu di Halaman Tab Baru</translation>
+<translation id="1203676252390737801">Penanganan IP WebRTC per URL</translation>
 <translation id="1204263402976895730">Mengaktifkan printer perusahaan</translation>
 <translation id="1207301487141109411">Cegah pemilihan avatar pengguna dari sistem file lokal, kamera, dan profil Google</translation>
 <translation id="1209096923317019235">Menetapkan aplikasi sebagai pengendali default untuk ekstensi file yang ditentukan</translation>
@@ -673,6 +674,13 @@
 Jika kebijakan ini disetel ke Aktif, Pemilih emoji akan mendukung emoji GIF.
 Jika kebijakan ini disetel ke Nonaktif atau tidak disetel, Pemilih emoji tidak akan mendukung emoji GIF.
 Jika kebijakan ini tidak disetel, Pemilih emoji akan diaktifkan untuk pengguna normal, tetapi dinonaktifkan untuk pengguna terkelola.</translation>
+<translation id="1493245040983394029">Kebijakan ini mengontrol setelan fitur Pengeditan Foto AI Generatif untuk <ph name="PRODUCT_OS_NAME" />.
+
+Nilai 0 = Mengaktifkan fitur bagi pengguna, dan mengirim data yang relevan ke Google untuk membantu melatih atau meningkatkan kualitas model AI. Data yang relevan mungkin mencakup perintah, input, output, dan materi sumber, bergantung pada fiturnya. Data ini mungkin ditinjau secara manual dengan tujuan meningkatkan kualitas model AI. Nilai 0 adalah nilai default, kecuali jika dinyatakan lain di bawah.
+
+Nilai 1 = Mengaktifkan fitur bagi pengguna, tetapi tidak mengirim data ke Google untuk melatih atau meningkatkan kualitas model AI. Nilai 1 adalah nilai default untuk pengguna Enterprise yang dikelola oleh <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> dan untuk akun Education yang dikelola oleh <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />.
+
+Nilai 2 = Menonaktifkan fitur.</translation>
 <translation id="1494138678487405397">Nonaktifkan kontras tinggi di layar login</translation>
 <translation id="1497797462580613666">Pengelola download akan memiliki opsi untuk menyimpan file ke <ph name="GOOGLE_DRIVE_NAME" />.</translation>
 <translation id="1498640472634891941">Jika kebijakan ini disetel, Anda dapat menetapkan daftar pola URL yang menentukan situs mana yang otomatis ditolak aksesnya ke printer lokal melalui WebPrinting API.
@@ -1652,6 +1660,7 @@
 <translation id="2204753382813641270">Kontrol sembunyi otomatis rak</translation>
 <translation id="2208976000652006649">Parameter untuk URL penelusuran yang menggunakan POST</translation>
 <translation id="2212011154693551439">Halaman histori Chrome yang diatur ke dalam grup akan dapat dilihat di chrome://history/grouped secara default.</translation>
+<translation id="2212207215880394506">Jangan izinkan Pengeditan Foto AI Generatif.</translation>
 <translation id="221287948061571053">Sembunyikan badge perusahaan yang diperluas di toolbar</translation>
 <translation id="2213059592185933570">Izinkan pembuatan profil roaming</translation>
 <translation id="2213342458177721585">Mengaktifkan Tata Letak Inscript Hindi di seluruh perangkat.</translation>
@@ -2204,6 +2213,7 @@
 
       Jika kebijakan disetel ke 'UserOnly' (nilai 1), pengguna akan dapat mengelola sertifikat pengguna, tetapi bukan sertifikat di seluruh perangkat.</translation>
 <translation id="2593762551209145088">Safe Browsing selalu tidak aktif.</translation>
+<translation id="2594773358911436070">Setelan WebRtc</translation>
 <translation id="26023406105317310">Konfigurasikan akun Kerberos</translation>
 <translation id="2603237557651009842">Memblokir WebPrinting API di situs ini</translation>
 <translation id="2603382859270873566">Mengaktifkan dukungan untuk PPB_VideoDecoder(Dev) API.</translation>
@@ -2321,6 +2331,7 @@
       Jika kebijakan ditetapkan dan login otomatis diaktifkan (lihat kebijakan <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> dan <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_DELAY_POLICY_NAME" />), sesi terkelola akan menggunakan lokal yang direkomendasikan pertama dan tata letak keyboard yang cocok terpopuler.
 
       Tata letak keyboard yang sudah otomatis dipilih selalu menjadi tata letak terpopuler yang cocok dengan lokal yang sudah otomatis dipilih. Pengguna selalu dapat memilih lokal apa pun yang didukung oleh <ph name="PRODUCT_OS_NAME" /> untuk sesi mereka.</translation>
+<translation id="269274821351405808">Setelan untuk fitur Pengeditan Foto AI Generatif</translation>
 <translation id="2693108589792503178">Mengonfigurasi URL ubah sandi.</translation>
 <translation id="2694143893026486692">Kaca pembesar tersemat diaktifkan</translation>
 <translation id="2696077732471707315">
@@ -2493,6 +2504,7 @@
 Kebijakan ini hanya dapat disetel sebagai kebijakan pengguna cloud.</translation>
 <translation id="2846689894646472396">Interval pemeriksaan aktivitas jaringan dalam milidetik.</translation>
 <translation id="2847788524147474533">Kebijakan perangkat platform lebih diutamakan daripada kebijakan perangkat cloud</translation>
+<translation id="2849051159985119151">Izinkan Pengeditan Foto AI Generatif tanpa meningkatkan kualitas model AI.</translation>
 <translation id="2849275596224278787">Sembunyikan opsi aksesibilitas di menu area notifikasi layar login</translation>
 <translation id="2853649500575897584">Jangan blokir titik ekstensi lama dalam Proses browser</translation>
 <translation id="2853757230661166968">Mengizinkan aplikasi mengambil dan mengganti pintasan sistem default.</translation>
@@ -3259,6 +3271,7 @@
       Jika kebijakan ini disetel ke "tersembunyi", fitur yang dinonaktifkan tidak akan dapat digunakan dan tidak terlihat oleh pengguna.
 
       Jika kebijakan in tidak disetel atau disetel ke nilai yang tidak valid, mode nonaktif dari fitur sistem akan menjadi "diblokir".</translation>
+<translation id="3411947169047929182">Mengontrol konfigurasi terkait WebRtc</translation>
 <translation id="341285788698114069">Kebijakan ini mengontrol prioritas proses audio di Windows.
       Jika kebijakan ini diaktifkan, proses audio akan berjalan dengan prioritas di atas normal.
       Jika kebijakan ini dinonaktifkan, proses audio akan berjalan dengan prioritas normal.
@@ -4684,6 +4697,7 @@
 <translation id="4467952432486360968">Blokir cookie pihak ketiga</translation>
 <translation id="4472740647327683596">Lebar halaman dalam mikrometer.</translation>
 <translation id="4474167089968829729">Aktifkan penyimpanan sandi di pengelola sandi</translation>
+<translation id="447692108909279121">Penanganan IP WebRTC</translation>
 <translation id="4478248026668918517">Blokir deteksi cakupan Kebijakan.</translation>
 <translation id="4479671363221255277">Menyetel kebijakan memungkinkan Anda menetapkan daftar pola URL yang menentukan situs mana yang dapat meminta akses baca ke file atau direktori di sistem file pada sistem operasi host melalui File System API.
 
@@ -5833,6 +5847,23 @@
 
       Jika kebijakan tidak disetel, atau jika disetel menjadi string kosong maupun rentang port yang tidak valid, WebRTC diizinkan untuk menggunakan port UDP lokal mana pun yang tersedia.</translation>
 <translation id="5288776487100096897">Mengizinkan kebijakan cloud pengguna mengabaikan kebijakan <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />.</translation>
+<translation id="5289330879750533981">Kebijakan ini memungkinkan pembatasan alamat IP dan antarmuka yang dapat digunakan oleh WebRTC saat mencoba menemukan koneksi terbaik yang tersedia untuk setiap pola URL tertentu.
+
+Kebijakan ini menerima daftar pasangan pola URL dan jenis penanganan. Pola URL diperiksa secara berurutan dan kecocokan pertama akan mengonfigurasi penanganan yang digunakan oleh WebRTC untuk domain. Jika URL dokumen saat ini tidak cocok dengan entri apa pun, dokumen tersebut akan menggunakan konfigurasi yang ditetapkan oleh kebijakan <ph name="WEB_RTC_IP_HANDLING_POLICY_NAME" />.
+
+Untuk informasi selengkapnya tentang pola input yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan. Kebijakan ini hanya mencocokkan berdasarkan asal, sehingga jalur apa pun di pola URL akan diabaikan.
+
+Nilai penanganan yang valid:
+
+* default - WebRTC menggunakan semua antarmuka jaringan.
+
+* default_public_and_private_interfaces - WebRTC menggunakan semua antarmuka publik dan pribadi.
+
+* default_public_interface_only - WebRTC menggunakan semua antarmuka publik, tetapi tidak menggunakan antarmuka pribadi.
+
+* disable_non_proxied_udp - WebRTC menggunakan proxy SOCKS UDP atau akan beralih ke proxy TCP.
+
+Lihat RFC 8828 bagian 5.2 (https://tools.ietf.org/html/rfc8828.html#section-5.2) untuk melihat deskripsi terperinci tentang semua nilai penanganan.</translation>
 <translation id="5290940294294002042">Tentukan daftar plugin yang dapat diaktifkan atau dinonaktifkan pengguna</translation>
 <translation id="5293285950307241933">Hapus semua data pengguna lokal</translation>
 <translation id="5293619885162445352">Izinkan <ph name="PEPPER_NAME" /> menggunakan dekoder video baru.</translation>
@@ -6953,6 +6984,7 @@
       Jika kebijakan ini tidak dikonfigurasi, <ph name="PRODUCT_NAME" /> akan menggunakan versi maksimum default.
 
       Jika kebijakan dikonfigurasi, kebijakan dapat disetel ke salah satu nilai berikut: "tls1.2" atau "tls1.3". Jika disetel, <ph name="PRODUCT_NAME" /> tidak akan menggunakan versi SSL/TLS yang lebih besar dari versi yang ditentukan. Nilai yang tidak dikenali akan diabaikan.</translation>
+<translation id="6120909112796019291">Izinkan Pengeditan Foto AI Generatif dan tingkatkan kualitas model AI.</translation>
 <translation id="6123052603197028610">Jangan izinkan kueri ke server Google untuk mengambil stempel waktu</translation>
 <translation id="6130360423841559818">Mengontrol perilaku baru untuk dialog pembatalan yang dihasilkan oleh peristiwa beforeunload</translation>
 <translation id="6131803221304830537">Nonaktifkan Integritas Kode Perender</translation>
@@ -7406,6 +7438,7 @@
       Jika kebijakan disetel ke Salah (False), Signed HTTP Exchange tidak akan dimuat.</translation>
 <translation id="6368011194414932347">Konfigurasikan URL halaman beranda</translation>
 <translation id="6368403635025849609">Izinkan JavaScript di situs ini</translation>
+<translation id="6368671810229507360">WebRTC</translation>
 <translation id="6371005337713685988">Setelan Set Situs Terkait</translation>
 <translation id="6371561334154580937">Tampilkan dialog logout saat jendela terakhir ditutup.</translation>
 <translation id="6372105930898423193">Mengizinkan fitur AppCache untuk diaktifkan ulang meskipun dinonaktifkan secara default</translation>
@@ -9898,6 +9931,21 @@
 <translation id="8238421250255592181">Tanda boolean menunjukkan apakah keyboard virtual dapat memberikan pelengkapan otomatis.</translation>
 <translation id="8239109177194627162">Nonaktifkan Isi Otomatis untuk kartu kredit</translation>
 <translation id="8239143983379015783">Memaksa pengaktifan kuota persisten</translation>
+<translation id="8240976615241583524">Kebijakan ini memungkinkan pembatasan alamat IP dan antarmuka yang dapat digunakan oleh WebRTC saat mencoba menemukan koneksi terbaik yang tersedia.
+
+Nilai yang valid:
+
+* default - WebRTC menggunakan semua antarmuka jaringan yang tersedia.
+
+* default_public_and_private_interfaces - WebRTC menggunakan semua antarmuka publik dan pribadi.
+
+* default_public_interface_only - WebRTC menggunakan semua antarmuka publik, tetapi tidak menggunakan antarmuka pribadi.
+
+* disable_non_proxied_udp - WebRTC menggunakan proxy SOCKS UDP atau akan beralih ke proxy TCP.
+
+Jika tidak ditetapkan, semua antarmuka jaringan yang tersedia akan digunakan secara default.
+
+Lihat RFC 8828 bagian 5.2 (https://tools.ietf.org/html/rfc8828.html#section-5.2) untuk melihat deskripsi terperinci tentang semua nilai penanganan.</translation>
 <translation id="8244171102276095471">Mengaktifkan paket penyandian RC4 di TLS</translation>
 <translation id="8244525275280476362">Penundaan mengambil maksimum setelah kebijakan invalidasi</translation>
 <translation id="8244828501034607035">Kebijakan ini mengontrol visibilitas Kartu Outlook di Halaman Tab Baru. Kartu ini hanya akan ditampilkan di Halaman Tab Baru jika kebijakan ini disetel ke aktif dan organisasi Anda mengizinkan penggunaan data Kalender Outlook di browser.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 017857d..9eee4f4 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -240,6 +240,7 @@
       このポリシーを False に設定するか未設定のままにした場合、ウェブページは WebGL API を使用でき、プラグインは Pepper 3D API を使用できます。ただし、ブラウザのデフォルト設定によっては、これらの API を使用するためにコマンドライン引数が必要となる場合があります。</translation>
 <translation id="1198458955128279215">機能のロールアウト プランのデフォルトの動作を使用する。</translation>
 <translation id="1202216683470826356">新しいタブページにカードを表示する</translation>
+<translation id="1203676252390737801">URL パターン別の WebRTC IP 処理</translation>
 <translation id="1204263402976895730">有効な企業プリンタ</translation>
 <translation id="1207301487141109411">ローカル ファイルシステム、カメラ、Google プロフィールからユーザーのアバターを選択できないようにする</translation>
 <translation id="1209096923317019235">指定したファイル拡張子のデフォルト ハンドラとしてアプリを割り当てます</translation>
@@ -622,6 +623,13 @@
 このポリシーを有効に設定した場合、絵文字選択ツールで GIF 絵文字がサポートされます。
 このポリシーを無効に設定するか未設定のままにした場合、絵文字選択ツールで GIF 絵文字はサポートされません。
 このポリシーを未設定のままにした場合、絵文字選択ツールは通常のユーザーに対しては有効になり、管理対象ユーザーに対しては無効になります。</translation>
+<translation id="1493245040983394029">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> の生成 AI 写真編集機能の設定を制御します。
+
+0 = ユーザーに対してこの機能を有効にし、AI モデルのトレーニングまたは改善に役立つ関連データを Google に送信します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料などが含まれます。関連データは、AI モデルの改善のみを目的として、人間がレビューすることがあります。以下に記載している場合を除き、0 がデフォルト値です。
+
+1 = ユーザーに対してこの機能を有効にしますが、AI モデルのトレーニングや改善に役立つデータを Google に送信しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。
+
+2 = この機能を無効にします。</translation>
 <translation id="1494138678487405397">ログイン画面でハイ コントラストを無効にする</translation>
 <translation id="1497797462580613666"><ph name="GOOGLE_DRIVE_NAME" /> にファイルを保存するオプションをダウンロード マネージャーに表示する。</translation>
 <translation id="1498640472634891941">このポリシーでは、WebPrinting API を介したローカル プリンタへのアクセスを自動的に拒否するサイトの URL パターンのリストを指定できます。
@@ -1544,6 +1552,7 @@
 <translation id="2204753382813641270">シェルフの自動非表示を指定する</translation>
 <translation id="2208976000652006649">POST を使用する検索 URL のパラメータ</translation>
 <translation id="2212011154693551439">グループに分類した Chrome 履歴ページをデフォルトで chrome://history/grouped に表示する。</translation>
+<translation id="2212207215880394506">生成 AI 写真編集を許可しない。</translation>
 <translation id="221287948061571053">拡張の企業ツールバー バッジを非表示にする</translation>
 <translation id="2213059592185933570">ローミング プロファイルの作成を有効にする</translation>
 <translation id="2213342458177721585">デバイス全体でヒンディー語(字母)レイアウトを有効にします。</translation>
@@ -2026,6 +2035,7 @@
 
       このポリシーを「UserOnly」(値 1)に設定した場合、ユーザーはユーザー証明書を管理できますが、デバイス全体の証明書を管理することはできません。</translation>
 <translation id="2593762551209145088">セーフ ブラウジングを常に無効にする。</translation>
+<translation id="2594773358911436070">WebRTC 設定</translation>
 <translation id="26023406105317310">Kerberos アカウントを設定する</translation>
 <translation id="2603237557651009842">WebPrinting API をブロックするサイトを指定する</translation>
 <translation id="2603382859270873566">PPB_VideoDecoder(Dev) API のサポートを有効にします。</translation>
@@ -2123,6 +2133,7 @@
       このポリシーを設定して、自動ログインをオンにした場合(<ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> ポリシーと <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_DELAY_POLICY_NAME" /> ポリシーを参照)、管理対象セッションでは先頭の推奨言語 / 地域と、その最も一般的なキーボード レイアウトが使用されます。
 
       あらかじめ選択されるキーボード レイアウトは常に、あらかじめ選択される言語 / 地域での最も一般的なレイアウトです。ユーザーはいつでも、<ph name="PRODUCT_OS_NAME" /> でサポートされた言語 / 地域であればどれでもセッションで使用することができます。</translation>
+<translation id="269274821351405808">生成 AI 写真編集機能の設定</translation>
 <translation id="2693108589792503178">パスワード変更 URL を設定する。</translation>
 <translation id="2694143893026486692">ドッキング拡大鏡の有効化</translation>
 <translation id="2696077732471707315">
@@ -2290,6 +2301,7 @@
 このポリシーは、クラウド ユーザー ポリシーとしてのみ設定できます。</translation>
 <translation id="2846689894646472396">ネットワーク イベントの確認の間隔(ミリ秒単位)。</translation>
 <translation id="2847788524147474533">プラットフォームのマシンポリシーをクラウドのマシンポリシーより優先する</translation>
+<translation id="2849051159985119151">AI モデルの改善は行わずに生成 AI 写真編集を許可する。</translation>
 <translation id="2849275596224278787">ログイン画面のシステムトレイ メニューにユーザー補助オプションを表示しない</translation>
 <translation id="2853649500575897584">ブラウザ プロセスで従来の拡張機能ポイントをブロックしない</translation>
 <translation id="2853757230661166968">デフォルトのシステム ショートカットの取得とオーバーライドをアプリケーションに許可する。</translation>
@@ -3026,6 +3038,7 @@
       このポリシーを「hidden」(非表示)に設定した場合、無効にした機能は使用不可となり、ユーザーにも表示されなくなります。
 
       このポリシーを未設定のままにするか、無効な値を指定した場合、システム機能の無効化モードは「blocked」になります。</translation>
+<translation id="3411947169047929182">WebRTC 関連の構成を制御します</translation>
 <translation id="341285788698114069">このポリシーでは、Windows での音声処理の優先度を制御できます。
       このポリシーを有効に設定した場合、音声処理は通常より高い優先度で実行されます。
       このポリシーを無効に設定した場合、音声処理は通常の優先度で実行されます。
@@ -4346,6 +4359,7 @@
 <translation id="4467952432486360968">サードパーティの Cookie をブロックする</translation>
 <translation id="4472740647327683596">ページの幅(マイクロメートル)</translation>
 <translation id="4474167089968829729">パスワード マネージャーへのパスワード保存を有効にする</translation>
+<translation id="447692108909279121">WebRTC IP 処理</translation>
 <translation id="4478248026668918517">ポリシー スコープの検出をブロックする。</translation>
 <translation id="4479671363221255277">このポリシーでは、ホスト オペレーティング システムのファイル システム内にあるファイルやディレクトリに File System API 経由で読み取りアクセスすることに関して、ユーザーに許可を要求できるサイトの URL パターンリストを指定できます。
 
@@ -5365,6 +5379,23 @@
 
       ポリシーが未設定の場合、または空の文字列や無効なポートの範囲が設定されている場合は、WebRTC は使用可能なローカルの UDP ポートを使用することができます。</translation>
 <translation id="5288776487100096897">ユーザーのクラウド ポリシーが <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> ポリシーを上書きできるようにする</translation>
+<translation id="5289330879750533981">このポリシーでは、WebRTC が最適な接続を検索する際に使用する IP アドレスとインターフェースを特定の URL パターン別に制限できます。
+
+URL パターンと処理タイプの組み合わせのリストを指定します。URL パターンは順番に照合され、最初に一致したパターンによって、WebRTC がそのドメインに対して使用する処理が設定されます。現在のドキュメントの URL に一致するエントリがない場合は、ポリシー <ph name="WEB_RTC_IP_HANDLING_POLICY_NAME" /> で設定された構成が使用されます。
+
+有効な入力パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。ワイルドカード(<ph name="WILDCARD_VALUE" />)を使用できます。このポリシーでは、オリジンのみが照合されるため、URL パターンのパスは無視されます。
+
+有効な処理値:
+
+* default - WebRTC はすべてのネットワーク インターフェースを使用します。
+
+* default_public_and_private_interfaces - WebRTC はすべてのパブリック インターフェースとプライベート インターフェースを使用します。
+
+* default_public_interface_only - WebRTC はすべてのパブリック インターフェースを使用し、プライベート インターフェースは使用しません。
+
+* disable_non_proxied_udp - WebRTC は UDP SOCKS プロキシを使用するか、TCP プロキシにフォールバックします。
+
+すべての処理値の詳しい説明については、RFC 8828 のセクション 5.2(https://tools.ietf.org/html/rfc8828.html#section-5.2)をご覧ください。</translation>
 <translation id="5290940294294002042">ユーザーが有効または無効にできるプラグインのリストを指定する</translation>
 <translation id="5293285950307241933">すべてのローカル ユーザー データを消去する</translation>
 <translation id="5293619885162445352"><ph name="PEPPER_NAME" /> で新しい動画デコーダの使用を許可する。</translation>
@@ -6403,6 +6434,7 @@
       このポリシーが未設定の場合、<ph name="PRODUCT_NAME" /> ではデフォルトの最大バージョンが使用されます。
 
       このポリシーを設定する場合は、値として「tls1.2」または「tls1.3」を指定できます。このポリシーが設定されている場合、<ph name="PRODUCT_NAME" /> では、指定されたバージョンより大きい SSL / TLS バージョンは使用されません。また、認識できない値は無視されます。</translation>
+<translation id="6120909112796019291">生成 AI 写真編集と AI モデルの改善を許可する。</translation>
 <translation id="6123052603197028610">タイムスタンプを取得するために Google サーバーへクエリを送信することを許可しない</translation>
 <translation id="6130360423841559818">beforeunload イベントによって生成されるキャンセル ダイアログの新しい動作を制御する</translation>
 <translation id="6131803221304830537">レンダラコードの整合性チェックを無効にする</translation>
@@ -6774,6 +6806,7 @@
       このポリシーを False に設定した場合、Signed HTTP Exchange は読み込まれません。</translation>
 <translation id="6368011194414932347">ホームページの URL を指定する</translation>
 <translation id="6368403635025849609">これらのサイトの JavaScript を許可する</translation>
+<translation id="6368671810229507360">WebRTC</translation>
 <translation id="6371005337713685988">関連ウェブサイト セットの設定</translation>
 <translation id="6371561334154580937">最後のウィンドウを閉じたときにログアウト ダイアログを表示する</translation>
 <translation id="6372105930898423193">AppCache 機能がデフォルトで無効になっている場合でも有効化を許可します。</translation>
@@ -9078,6 +9111,21 @@
 <translation id="8238421250255592181">画面キーボードで予測入力を有効にするかどうかを示すブール値のフラグです。</translation>
 <translation id="8239109177194627162">クレジット カードの自動入力を無効にする</translation>
 <translation id="8239143983379015783">永続的な割り当てを強制的に有効にする</translation>
+<translation id="8240976615241583524">このポリシーでは、WebRTC が最適な接続を検索する際に使用する IP アドレスとインターフェースを制限できます。
+
+有効な値:
+
+* default - WebRTC は利用可能なすべてのネットワーク インターフェースを使用します。
+
+* default_public_and_private_interfaces - WebRTC はすべてのパブリック インターフェースとプライベート インターフェースを使用します。
+
+* default_public_interface_only - WebRTC はすべてのパブリック インターフェースを使用し、プライベート インターフェースは使用しません。
+
+* disable_non_proxied_udp - WebRTC は UDP SOCKS プロキシを使用するか、TCP プロキシにフォールバックします。
+
+未設定のままにした場合は、利用可能なすべてのネットワーク インターフェースを使用するデフォルトの設定が適用されます。
+
+すべての処理値の詳しい説明については、RFC 8828 のセクション 5.2(https://tools.ietf.org/html/rfc8828.html#section-5.2)をご覧ください。</translation>
 <translation id="8244171102276095471">TLS の RC4 暗号スイートを有効にする</translation>
 <translation id="8244525275280476362">ポリシーの失効から取得までの最大時間</translation>
 <translation id="8244828501034607035">このポリシーでは、新しいタブページに Outlook カードを表示するかどうかを制御します。このポリシーが有効で、ブラウザでの Outlook カレンダー データの使用を組織が承認している場合に限り、カードが新しいタブページに表示されます。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 2561b42..2bf483e 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -248,6 +248,7 @@
       정책을 False로 설정하거나 설정하지 않으면 웹페이지에서 WebGL API를 사용하고 플러그인에서 Pepper 3D API를 사용하지만, 이러한 API를 사용하려면 여전히 브라우저 기본 설정에 명령줄 인수가 필요할 수 있습니다.</translation>
 <translation id="1198458955128279215">기능 출시 계획의 기본 동작을 사용합니다.</translation>
 <translation id="1202216683470826356">새 탭 페이지에 카드 표시</translation>
+<translation id="1203676252390737801">URL별 WebRTC IP 처리</translation>
 <translation id="1204263402976895730">사용 설정된 엔터프라이즈 프린터</translation>
 <translation id="1207301487141109411">로컬 파일 시스템, 카메라, Google 프로필에서 사용자 아바타 선택을 차단합니다.</translation>
 <translation id="1209096923317019235">앱을 지정된 파일 확장자에 대한 기본 핸들러로 할당합니다.</translation>
@@ -645,6 +646,13 @@
 정책을 사용으로 설정하면 그림 이모티콘 선택 도구에서 GIF 그림 이모티콘을 지원합니다.
 정책을 사용 안함으로 설정하거나 설정하지 않으면 그림 이모티콘 선택 도구에서 GIF 그림 이모티콘을 지원하지 않습니다.
 정책을 설정하지 않으면 그림 이모티콘 선택 도구가 일반 사용자에게는 사용 설정되고 관리 사용자에 대해서는 사용 중지됩니다.</translation>
+<translation id="1493245040983394029">이 정책은 <ph name="PRODUCT_OS_NAME" />의 생성형 AI 포토 편집 기능 설정을 제어합니다.
+
+0 = 사용자를 위해 이 기능을 사용 설정하고 AI 모델을 학습시키거나 개선하는 데 도움이 되도록 관련 데이터를 Google에 전송합니다. 관련 데이터에는 기능에 따라 프롬프트, 입력, 출력, 소스 자료가 포함될 수 있습니다. AI 모델 개선 목적으로만 사람이 데이터를 검토할 수 있습니다. 아래에 명시된 경우를 제외하고 0이 기본값입니다.
+
+1 = 사용자를 위해 기능을 사용 설정하지만 AI 모델을 학습시키거나 개선하기 위한 데이터를 Google로 전송하지 않습니다. 1은 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />에서 관리되는 기업 사용자 및 <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />에서 관리되는 Education 계정의 기본값입니다.
+
+2 = 기능을 사용 중지합니다.</translation>
 <translation id="1494138678487405397">로그인 화면에서 고대비 사용 중지</translation>
 <translation id="1497797462580613666">다운로드 관리자에서 파일을 <ph name="GOOGLE_DRIVE_NAME" />에 저장할 수 있게 됩니다.</translation>
 <translation id="1498640472634891941">정책을 설정하면 URL 패턴 목록을 작성하여 WebPrinting API를 통해 로컬 프린터 액세스 권한이 자동으로 거부되는 사이트를 지정할 수 있습니다.
@@ -1653,6 +1661,7 @@
 <translation id="2204753382813641270">임시보관함 자동 숨김 제어</translation>
 <translation id="2208976000652006649">POST를 사용하는 검색 URL용 매개변수</translation>
 <translation id="2212011154693551439">그룹으로 구성된 Chrome 방문 기록 페이지가 기본적으로 chrome://history/grouped에 표시됩니다.</translation>
+<translation id="2212207215880394506">생성형 AI 포토 편집을 허용하지 않습니다.</translation>
 <translation id="221287948061571053">확장된 기업 툴바 배지 숨기기</translation>
 <translation id="2213059592185933570">로밍 프로필 생성 사용</translation>
 <translation id="2213342458177721585">기기 전체에서 힌디어 인스크립트 레이아웃 사용</translation>
@@ -2184,6 +2193,7 @@
 
       정책을 'UserOnly'(값 1)로 설정하면 사용자가 사용자 인증서를 관리할 수 있지만 기기 수준 인증서는 관리할 수 없습니다.</translation>
 <translation id="2593762551209145088">세이프 브라우징이 활성화되지 않습니다.</translation>
+<translation id="2594773358911436070">WebRTC 설정</translation>
 <translation id="26023406105317310">Kerberos 계정 구성</translation>
 <translation id="2603237557651009842">이 사이트에서 WebPrinting API 차단</translation>
 <translation id="2603382859270873566">PPB_VideoDecoder(Dev) API 지원을 사용합니다.</translation>
@@ -2307,6 +2317,7 @@
       정책을 설정하고 자동 로그인을 사용 설정한 경우(<ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> 및 <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_DELAY_POLICY_NAME" /> 정책 참조), 관리 세션은 첫 번째 추천 언어와 일치하는 언어의 가장 인기 있는 키보드 레이아웃을 사용합니다.
 
       사전 선택된 키보드 레이아웃은 사전 선택된 언어와 일치하는 레이아웃 중 가장 인기 있는 레이아웃입니다. 사용자는 언제든지 <ph name="PRODUCT_OS_NAME" />에서 지원하는 언어를 세션에 선택할 수 있습니다.</translation>
+<translation id="269274821351405808">생성형 AI 포토 편집 기능에 대한 설정</translation>
 <translation id="2693108589792503178">비밀번호 변경 URL을 설정합니다.</translation>
 <translation id="2694143893026486692">고정 돋보기 사용 설정됨</translation>
 <translation id="2696077732471707315">
@@ -2479,6 +2490,7 @@
 이 정책은 클라우드 사용자 정책으로만 설정할 수 있습니다.</translation>
 <translation id="2846689894646472396">네트워크 이벤트 확인 속도(밀리초)</translation>
 <translation id="2847788524147474533">플랫폼 머신 정책이 클라우드 머신 정책보다 우선 적용됨</translation>
+<translation id="2849051159985119151">AI 모델을 개선하지 않고 생성형 AI 포토 편집을 허용합니다.</translation>
 <translation id="2849275596224278787">로그인 화면 작업 표시줄 메뉴에서 접근성 옵션 숨기기</translation>
 <translation id="2853649500575897584">브라우저 프로세스에서 기존의 확장 프로그램 포인트를 차단하지 않습니다.</translation>
 <translation id="2853757230661166968">애플리케이션이 기본 시스템 단축키를 캡처하고 재정의하도록 허용합니다.</translation>
@@ -3236,6 +3248,7 @@
       정책을 '숨김'으로 설정하면 사용 중지된 기능이 사용할 수 없게 되며 사용자에게 표시되지도 않습니다.
 
       정책을 설정하지 않거나 정책에 유효하지 않은 값이 있으면 시스템 기능의 사용 중지 모드가 '차단'됩니다.</translation>
+<translation id="3411947169047929182">WebRTC 관련 구성 제어</translation>
 <translation id="341285788698114069">이 정책은 Windows에서 오디오 프로세서의 우선순위를 제어합니다.
       정책을 사용하면 오디오 프로세스가 일반적인 우선순위 이상으로 실행됩니다.
       정책을 사용 중지하면 오디오 프로세스가 일반적인 우선순위로 실행됩니다.
@@ -4666,6 +4679,7 @@
 <translation id="4467952432486360968">제3자 쿠키 차단</translation>
 <translation id="4472740647327683596">페이지의 너비(마이크로미터)입니다.</translation>
 <translation id="4474167089968829729">비밀번호 관리자에 비밀번호 저장 기능 사용</translation>
+<translation id="447692108909279121">WebRTC IP 처리</translation>
 <translation id="4478248026668918517">정책 범위 감지 차단</translation>
 <translation id="4479671363221255277">정책을 설정하면 URL 패턴 목록을 만들어 사용자에게 File System API를 통해 호스트 운영체제의 파일 시스템 내 파일 또는 디렉터리에 대한 읽기 액세스 권한을 요청할 수 있는 사이트를 지정하는 것이 가능합니다.
 
@@ -5815,6 +5829,23 @@
 
       정책이 설정되지 않았거나 빈 문자열 또는 유효하지 않은 포트 범위로 설정된 경우 WebRTC는 사용 가능한 로컬 UDP 포트를 사용하도록 허용됩니다.</translation>
 <translation id="5288776487100096897">사용자 클라우드 정책이 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> 정책보다 우선 적용되도록 허용</translation>
+<translation id="5289330879750533981">이 정책은 특정 URL 패턴 각각에 대해 가능한 최상의 연결을 찾으려고 할 때 WebRTC가 사용하는 IP 주소 및 인터페이스를 제한할 수 있습니다.
+
+URL 패턴 목록과 처리 유형 쌍을 받습니다. URL 패턴이 순서대로 확인되며, 첫 번째 일치 항목은 해당 도메인에 WebRTC가 사용하는 처리를 구성합니다. 현재 문서의 URL이 항목과 일치하지 않는 경우 <ph name="WEB_RTC_IP_HANDLING_POLICY_NAME" /> 정책에서 설정한 구성을 사용합니다.
+
+유효한 입력 패턴에 관해 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요. 와일드 카드(<ph name="WILDCARD_VALUE" />)를 사용할 수 있습니다. 이 정책은 출처만 기준으로 일치 여부를 판단하므로 URL 패턴의 경로는 무시됩니다.
+
+유효한 처리 값:
+
+* 기본값 - WebRTC가 모든 네트워크 인터페이스를 사용합니다.
+
+* default_public_and_private_interfaces - WebRTC가 모든 공개 및 비공개 인터페이스를 사용합니다.
+
+* default_public_interface_only - WebRTC가 모든 공개 인터페이스를 사용하지만, 비공개 인터페이스는 사용하지 않습니다.
+
+* disable_non_proxied_udp - WebRTC가 UDP SOCKS 프록싱을 사용하거나 TCP 프록싱으로 폴백합니다.
+
+모든 처리 값에 대한 자세한 설명은 RFC 8828 섹션 5.2(https://tools.ietf.org/html/rfc8828.html#section-5.2)를 참고하세요.</translation>
 <translation id="5290940294294002042">사용자가 사용할 수 있거나 사용할 수 없는 플러그인 목록 지정</translation>
 <translation id="5293285950307241933">모든 로컬 사용자 데이터 삭제</translation>
 <translation id="5293619885162445352"><ph name="PEPPER_NAME" />에서 새 동영상 디코더를 사용하도록 허용합니다.</translation>
@@ -6977,6 +7008,7 @@
       이 정책이 구성되지 않으면 <ph name="PRODUCT_NAME" />에서 기본 최대 버전을 사용합니다.
 
       그렇지 않은 경우 'tls1.2' 또는 'tls1.3' 값 중 하나로 설정할 수 있습니다. 설정되면 <ph name="PRODUCT_NAME" />에서 지정된 버전보다 높은 SSL/TLS 버전을 사용하지 않습니다. 인식할 수 없는 값은 무시됩니다.</translation>
+<translation id="6120909112796019291">생성형 AI 포토 편집을 허용하고 AI 모델을 개선합니다.</translation>
 <translation id="6123052603197028610">Google 서버로 전송된 쿼리가 타임스탬프를 가져오도록 허용하지 않음</translation>
 <translation id="6130360423841559818">beforeunload 이벤트에서 생성된 취소 대화상자의 새로운 동작을 제어합니다.</translation>
 <translation id="6131803221304830537">렌더러 코드 무결성 사용 중지</translation>
@@ -7377,6 +7409,7 @@
       정책을 False로 설정하면 서명된 HTTP 교환(SXG)이 로드되지 않습니다.</translation>
 <translation id="6368011194414932347">홈페이지 URL 설정</translation>
 <translation id="6368403635025849609">이 사이트에서 자바스크립트 허용</translation>
+<translation id="6368671810229507360">WebRTC</translation>
 <translation id="6371005337713685988">관련 웹사이트 세트 설정</translation>
 <translation id="6371561334154580937">마지막 창 종료 시 로그아웃 대화상자 표시</translation>
 <translation id="6372105930898423193">기본으로 사용 중지되어 있는 경우에도 AppCache 기능이 다시 사용 설정되도록 허용합니다.</translation>
@@ -9850,6 +9883,21 @@
 <translation id="8238421250255592181">터치 키보드가 자동 완성을 지원할 수 있는지 나타내는 부울 플래그입니다.</translation>
 <translation id="8239109177194627162">신용카드 입력 시 자동 완성 사용 안함</translation>
 <translation id="8239143983379015783">영구 할당량을 강제 적용합니다.</translation>
+<translation id="8240976615241583524">이 정책은 사용 가능한 최상의 연결을 찾으려고 할 때 WebRTC가 사용하는 IP 주소 및 인터페이스를 제한할 수 있습니다.
+
+유효한 값:
+
+* 기본값 - WebRTC가 사용 가능한 모든 네트워크 인터페이스를 사용합니다.
+
+* default_public_and_private_interfaces - WebRTC가 모든 공개 및 비공개 인터페이스를 사용합니다.
+
+* default_public_interface_only - WebRTC가 모든 공개 인터페이스를 사용하지만, 비공개 인터페이스는 사용하지 않습니다.
+
+* disable_non_proxied_udp - WebRTC가 UDP SOCKS 프록싱을 사용하거나 TCP 프록싱으로 폴백합니다.
+
+설정하지 않으면 기본적으로 가능한 모든 네트워크 인터페이스를 사용합니다.
+
+모든 처리 값에 대한 자세한 설명은 RFC 8828 섹션 5.2(https://tools.ietf.org/html/rfc8828.html#section-5.2)를 참고하세요.</translation>
 <translation id="8244171102276095471">TLS에서 RC4 암호화 기술을 사용 설정합니다.</translation>
 <translation id="8244525275280476362">정책 무효화 후 최대 가져오기 지연</translation>
 <translation id="8244828501034607035">이 정책은 새 탭 페이지에서 Outlook 카드를 표시할지 여부를 제어합니다. 정책이 사용 설정되어 있고 조직에서 브라우저에서 Outlook Calendar 데이터를 사용하도록 승인한 경우에만 새 탭 페이지에 카드가 표시됩니다.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 8b35723..9419370 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -247,6 +247,7 @@
       如果此政策设为 False 或未设置,网页可以使用 WebGL API,而且插件可以使用 Pepper 3D API,但浏览器的默认设置可能仍然要求在使用这些 API 前先传递命令行参数。</translation>
 <translation id="1198458955128279215">使用功能发布计划的默认行为。</translation>
 <translation id="1202216683470826356">在“新标签页”页面上显示卡片</translation>
+<translation id="1203676252390737801">WebRTC 网址级 IP 处理</translation>
 <translation id="1204263402976895730">已启用企业打印机</translation>
 <translation id="1207301487141109411">禁止从本地文件系统、相机和 Google 个人资料中选择用户头像</translation>
 <translation id="1209096923317019235">分配应用以用作所指定文件扩展名的默认处理程序</translation>
@@ -640,6 +641,13 @@
 如果已启用此政策,表情符号选择器将支持 GIF 表情符号。
 如果已停用或未设置此政策,表情符号选择器将不支持 GIF 表情符号。
 如果未设置此政策,系统会为普通用户启用表情符号选择器,但会为受管用户停用表情符号选择器。</translation>
+<translation id="1493245040983394029">此政策用于控制 <ph name="PRODUCT_OS_NAME" /> 的生成式 AI 照片编辑功能的设置。
+
+0 表示为用户启用此功能,并向 Google 发送相关数据来帮助训练或改进 AI 模型。相关数据可能包括提示、输入、输出和来源资料,具体视功能而定。工作人员可能会仅出于改进 AI 模型的目的而审核这些数据。除非下文另有说明,否则默认值是 0。
+
+1 表示为用户启用此功能,但不向 Google 发送数据来训练或改进 AI 模型。对于受 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />管理的企业用户和受 <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> 管理的教育版账号,默认值是 1。
+
+2 表示停用此功能。</translation>
 <translation id="1494138678487405397">为登录屏幕停用高对比度模式</translation>
 <translation id="1497797462580613666">用户可以选择通过内容下载管理器将文件保存到 <ph name="GOOGLE_DRIVE_NAME" />。</translation>
 <translation id="1498640472634891941">通过设置此政策,您可以罗列一些网址格式,从而指定自动拒绝哪些网站通过 WebPrinting API 访问本地打印机。
@@ -1581,6 +1589,7 @@
 <translation id="2204753382813641270">控制任务栏是否自动隐藏</translation>
 <translation id="2208976000652006649">在使用 POST 的搜索网址中所需的参数</translation>
 <translation id="2212011154693551439">默认情况下,chrome://history/grouped 中会以网页分组的方式显示“Chrome 历史记录”页面。</translation>
+<translation id="2212207215880394506">不允许使用生成式 AI 照片编辑功能。</translation>
 <translation id="221287948061571053">隐藏展开的企业工具栏标记</translation>
 <translation id="2213059592185933570">允许创建漫游个人资料</translation>
 <translation id="2213342458177721585">启用设备级印地语 Inscript 布局。</translation>
@@ -2105,6 +2114,7 @@
 
       如果此政策设为“UserOnly”(值为 1),用户便可以管理用户证书,但不能管理设备级证书。</translation>
 <translation id="2593762551209145088">“安全浏览”功能会一直处于关闭状态。</translation>
+<translation id="2594773358911436070">WebRTC 设置</translation>
 <translation id="26023406105317310">配置 Kerberos 账号</translation>
 <translation id="2603237557651009842">禁止在这些网站上使用 WebPrinting API</translation>
 <translation id="2603382859270873566">启用对 PPB_VideoDecoder(Dev) API 的支持。</translation>
@@ -2209,6 +2219,7 @@
       如果您设置了此政策并开启了“自动登录”功能(请参见 <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> 和 <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_DELAY_POLICY_NAME" /> 政策),受管理自助服务终端会使用所推荐的第一个语言区域,并会采用与该语言区域匹配的最常用键盘布局。
 
       预先选择的键盘布局始终是与预先选择的语言区域匹配的最常用布局。用户始终可为其自助服务终端选择 <ph name="PRODUCT_OS_NAME" />支持的任何语言区域。</translation>
+<translation id="269274821351405808">生成式 AI 照片编辑功能的设置</translation>
 <translation id="2693108589792503178">配置用于更改密码的网址。</translation>
 <translation id="2694143893026486692">已启用停靠的放大镜</translation>
 <translation id="2696077732471707315">
@@ -2379,6 +2390,7 @@
 此政策只能作为云端用户政策进行设置。</translation>
 <translation id="2846689894646472396">网络事件检查时间间隔(以毫秒为单位)。</translation>
 <translation id="2847788524147474533">平台设备政策的优先级高于云端设备政策</translation>
+<translation id="2849051159985119151">允许使用生成式 AI 照片编辑功能,但不改进 AI 模型。</translation>
 <translation id="2849275596224278787">在登录屏幕的系统任务栏菜单中隐藏无障碍选项</translation>
 <translation id="2853649500575897584">不屏蔽浏览器进程中的旧版扩展点</translation>
 <translation id="2853757230661166968">允许应用捕获和覆盖默认系统快捷键。</translation>
@@ -3131,6 +3143,7 @@
       如果此政策设为“已隐藏”,已停用的功能会不可用,并且对用户不可见。
 
       如果此政策未设置或包含无效值,系统功能的停用模式将会是“已禁用”。</translation>
+<translation id="3411947169047929182">控制 WebRTC 相关配置</translation>
 <translation id="341285788698114069">此政策用于控制音频进程在 Windows 上的优先级。
       如果已启用,音频进程将以高于普通优先级的优先级运行。
       如果已停用,音频进程将以普通优先级运行。
@@ -4472,6 +4485,7 @@
 <translation id="4467952432486360968">阻止第三方 Cookie</translation>
 <translation id="4472740647327683596">页面的宽度(以微米为单位)</translation>
 <translation id="4474167089968829729">允许将密码保存到密码管理工具</translation>
+<translation id="447692108909279121">WebRTC IP 处理</translation>
 <translation id="4478248026668918517">屏蔽政策范围检测。</translation>
 <translation id="4479671363221255277">通过设置此政策,您可以罗列一些网址格式,从而指定哪些网站可以通过 File System API 请求用户向其授予对主机操作系统的文件系统中的文件或目录的读取权限。
 
@@ -5558,6 +5572,21 @@
 
       如果此政策未设置,或者它设置为空字符串或无效端口范围,则允许 WebRTC 使用任何可用的本地 UDP 端口。</translation>
 <translation id="5288776487100096897">允许用户级云政策覆盖 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> 政策。</translation>
+<translation id="5289330879750533981">通过设置此政策,您可以限制 WebRTC 在尝试查找每个特定网址格式的最佳可用连接时会使用的 IP 地址和接口。它接受一系列网址格式和处理类型对。系统会按顺序检查网址格式,第一个匹配项将配置 WebRTC 为该网域使用哪种处理方式。如果当前文档的网址与任何条目都不匹配,则会使用政策 <ph name="WEB_RTC_IP_HANDLING_POLICY_NAME" /> 设置的配置。
+
+如需详细了解有效的输入格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。允许使用通配符 <ph name="WILDCARD_VALUE" />。此政策只能根据源进行匹配,因此网址格式中的任何路径都会被忽略。
+
+有效的处理值:
+
+* default - WebRTC 使用所有网络接口。
+
+* default_public_and_private_interfaces - WebRTC 使用所有公共和专用接口。
+
+* default_public_interface_only - WebRTC 使用所有公共接口,但不使用专用接口。
+
+* disable_non_proxied_udp - WebRTC 使用 UDP SOCKS 代理,或回退到 TCP 代理。
+
+如需详细了解所有处理值,请参阅 RFC 8828 第 5.2 条 (https://tools.ietf.org/html/rfc8828.html#section-5.2)</translation>
 <translation id="5290940294294002042">指定该用户可启用或停用的插件的列表</translation>
 <translation id="5293285950307241933">清除所有本地用户数据</translation>
 <translation id="5293619885162445352">允许 <ph name="PEPPER_NAME" /> 使用新版视频解码器。</translation>
@@ -6633,6 +6662,7 @@
       如果您未配置此政策,<ph name="PRODUCT_NAME" /> 会使用默认的最高版本。
 
       否则,可将此政策设为以下值之一:“tls1.2”或“tls1.3”。如果您已配置此政策,<ph name="PRODUCT_NAME" /> 将不会使用比指定版本高的 SSL/TLS 版本。无法识别的值会被忽略。</translation>
+<translation id="6120909112796019291">允许使用生成式 AI 照片编辑功能并改进 AI 模型。</translation>
 <translation id="6123052603197028610">不允许向 Google 服务器发送检索时间戳的查询</translation>
 <translation id="6130360423841559818">控制由 beforeunload 事件生成的取消对话框的新行为</translation>
 <translation id="6131803221304830537">停用“渲染程序代码完整性”</translation>
@@ -7025,6 +7055,7 @@
       如果此政策设为 False,系统会阻止加载 Signed HTTP Exchange (SXG) 内容。</translation>
 <translation id="6368011194414932347">配置主页网址</translation>
 <translation id="6368403635025849609">在这些网站上允许 JavaScript</translation>
+<translation id="6368671810229507360">WebRTC</translation>
 <translation id="6371005337713685988">Related Website Sets 设置</translation>
 <translation id="6371561334154580937">在用户关闭最后一个窗口时显示让用户确认退出登录的对话框。</translation>
 <translation id="6372105930898423193">允许重新启用 AppCache 功能,即使此功能默认处于关闭状态。</translation>
@@ -9432,6 +9463,19 @@
 <translation id="8238421250255592181">一个布尔值标记,用于表明屏幕键盘能否提供自动填充功能。</translation>
 <translation id="8239109177194627162">禁止使用“自动填充”功能填写信用卡信息</translation>
 <translation id="8239143983379015783">强制启用永久配额</translation>
+<translation id="8240976615241583524">通过设置此政策,您可以限制 WebRTC 在尝试查找最佳的可用连接时会使用的 IP 地址和接口。
+
+有效值:
+
+* default - WebRTC 使用所有可用的网络接口。
+
+* default_public_and_private_interfaces - WebRTC 使用所有公共和专用接口。
+
+* default_public_interface_only - WebRTC 使用所有公共接口,但不使用专用接口。
+
+* disable_non_proxied_udp - WebRTC 使用 UDP SOCKS 代理,或回退到 TCP 代理。
+
+如果未设置此政策,WebRTC 会默认使用所有可用网络接口。如需详细了解所有处理值,请参阅 RFC 8828 第 5.2 条 (https://tools.ietf.org/html/rfc8828.html#section-5.2)</translation>
 <translation id="8244171102276095471">在 TLS 中启用 RC4 加密套件</translation>
 <translation id="8244525275280476362">政策失效后的最大提取延迟</translation>
 <translation id="8244828501034607035">此政策用于控制是否在“新标签页”页面上显示 Outlook 卡片。只有在启用此政策且您的组织授权在浏览器中使用 Outlook 日历数据时,此卡片才会显示在“新标签页”页面上。
diff --git a/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml b/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml
index 18dc26d..bb81487 100644
--- a/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml
+++ b/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml
@@ -1,11 +1,12 @@
 caption: Choose whether the <ph name="PRIVACY_SANDBOX_NAME">Privacy Sandbox</ph> IP Protection feature should be enabled.
 default: null
+default_for_enterprise_users: false
 desc: |-
   A policy to control whether the <ph name="PRIVACY_SANDBOX_NAME">Privacy Sandbox</ph> IP Protection feature should be enabled.
 
   If the policy is set to Disabled, then the IP Protection feature will be disabled and users won't be able to enable the feature via UI settings.
   If the policy is set to Enabled, then the IP Protection feature will be enabled and users won't be able to disable the feature via UI settings.
-  If the policy is not set, users will be able to turn on or turn off the IP Protection feature on their device via UI settings.
+  If the policy is not set, users whose browser or device is being managed will have the IP Protection feature disabled and will not be able to enable the feature via UI settings. Users on unmanaged browsers and devices will be able to turn on or turn off the IP Protection feature on their device via UI settings.
 
   Note: The behavior of the IP Protection feature for enterprise users may vary over time when the policy is set to Enabled or when the policy is not set and the feature is enabled via UI settings.
 example_value: false
@@ -22,7 +23,7 @@
   value: false
 - caption: Enable the <ph name="PRIVACY_SANDBOX_NAME">Privacy Sandbox</ph> IP Protection feature.
   value: true
-- caption: Allow users to turn on or turn off the <ph name="PRIVACY_SANDBOX_NAME">Privacy Sandbox</ph> IP Protection setting on their device.
+- caption: Allow users to turn on or turn off the <ph name="PRIVACY_SANDBOX_NAME">Privacy Sandbox</ph> IP Protection setting on their device if their browser and device are not being managed.
   value: null
 owners:
 - awillia@chromium.org
diff --git a/components/policy/test/data/pref_mapping/PrivacySandboxIpProtectionEnabled.json b/components/policy/test/data/pref_mapping/PrivacySandboxIpProtectionEnabled.json
index cec373d..5084702 100644
--- a/components/policy/test/data/pref_mapping/PrivacySandboxIpProtectionEnabled.json
+++ b/components/policy/test/data/pref_mapping/PrivacySandboxIpProtectionEnabled.json
@@ -4,8 +4,6 @@
       "win",
       "linux",
       "mac",
-      "chromeos_ash",
-      "chromeos_lacros",
       "fuchsia",
       "android"
     ],
@@ -16,6 +14,53 @@
 	      true,
 	      false
 	    ]
-    }
+    },
+    "policy_pref_mapping_tests": [
+      {
+        "note": "On non-CrOS a default_for_enterprise_users doesn't apply, so the default pref value won't be affected by the enterprise policy",
+        "policies": {},
+        "prefs": {
+          "tracking_protection.ip_protection_enabled": {
+            "default_value": false
+          }
+        }
+      }
+    ]
+  },
+  {
+    "os": [
+      "chromeos_ash"
+    ],
+    "policy_pref_mapping_tests": [
+      {
+        "note": "On CrOS, an empty policy is overriden by default_for_enterprise_users",
+        "policies": {},
+        "prefs": {
+          "tracking_protection.ip_protection_enabled": {
+            "value": false
+          }
+        }
+      },
+      {
+        "policies": {
+          "PrivacySandboxIpProtectionEnabled": true
+        },
+        "prefs": {
+          "tracking_protection.ip_protection_enabled": {
+            "value": true
+          }
+        }
+      },
+      {
+        "policies": {
+          "PrivacySandboxIpProtectionEnabled": false
+        },
+        "prefs": {
+          "tracking_protection.ip_protection_enabled": {
+            "value": false
+          }
+        }
+      }
+    ]
   }
 ]
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc
index 762466e..cf2795b5 100644
--- a/components/safe_browsing/core/common/features.cc
+++ b/components/safe_browsing/core/common/features.cc
@@ -231,10 +231,6 @@
              "SafeBrowsingLocalListsUseSBv5",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kLogAccountEnhancedProtectionStateInProtegoPings,
-             "TailoredSecurityLogAccountEnhancedProtectionStateInProtegoPings",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 BASE_FEATURE(kOnDeviceNotificationContentDetectionModel,
              "OnDeviceNotificationContentDetectionModel",
              base::FEATURE_DISABLED_BY_DEFAULT);
@@ -360,7 +356,6 @@
       &kHashPrefixRealTimeLookups,
       &kHashPrefixRealTimeLookupsFasterOhttpKeyRotation,
       &kLocalListsUseSBv5,
-      &kLogAccountEnhancedProtectionStateInProtegoPings,
       &kOnDeviceNotificationContentDetectionModel,
       &kSafeBrowsingAsyncRealTimeCheck,
       &kSafeBrowsingRemoveCookiesInAuthRequests,
diff --git a/components/safe_browsing/core/common/features.h b/components/safe_browsing/core/common/features.h
index a830f96..c836458 100644
--- a/components/safe_browsing/core/common/features.h
+++ b/components/safe_browsing/core/common/features.h
@@ -217,9 +217,6 @@
 // how often the checks are triggered (they are still not in real time).
 BASE_DECLARE_FEATURE(kLocalListsUseSBv5);
 
-// Enable logging of the account enhanced protection setting in Protego pings.
-BASE_DECLARE_FEATURE(kLogAccountEnhancedProtectionStateInProtegoPings);
-
 // Killswitch for fetching and executing the notification content detection
 // model. This also gates logging metrics related to this model.
 BASE_DECLARE_FEATURE(kOnDeviceNotificationContentDetectionModel);
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
index 5f8dc5d5..68f8310 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
@@ -17,6 +17,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.Promise;
 import org.chromium.components.signin.base.AccountCapabilities;
+import org.chromium.components.signin.base.AccountInfo;
 import org.chromium.components.signin.base.CoreAccountInfo;
 
 import java.util.List;
@@ -75,11 +76,26 @@
      * <p>Since a different {@link Promise} will be returned every time the accounts get updated,
      * this makes he {@link Promise}t a bad candidate for end users to cache locally unless the end
      * users are awaiting the {@link CoreAccountInfo}s for current list of accounts only.
+     *
+     * @deprecated, use {@link #getAccounts} instead.
+     *     <p>TODO(crbug.com/385309416): Migrate usages to {@link #getAccounts()} and remove.
      */
+    @Deprecated
     @MainThread
     Promise<List<CoreAccountInfo>> getCoreAccountInfos();
 
     /**
+     * Retrieves corresponding {@link AccountInfo}s for filtered accounts. The {@link Promise} will
+     * be fulfilled once the accounts cache is populated and gaia ids are fetched. If an error
+     * occurs while getting account list, the returned {@link Promise} will wrap an empty list.
+     *
+     * <p>Since a different {@link Promise} will be returned every time the accounts get updated,
+     * this makes the {@link Promise} a bad candidate for end users to cache locally.
+     */
+    @MainThread
+    Promise<List<AccountInfo>> getAccounts();
+
+    /**
      * Asynchronously gets OAuth2 access token for the given account and scope. May return a cached
      * version, use {@link #invalidateAccessToken} to invalidate a token in the cache. Please note
      * that this method expects a scope with 'oauth2:' prefix.
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
index 2dae67e..8ed27cd3 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
@@ -30,6 +30,7 @@
 import org.chromium.components.signin.AccountManagerDelegate.CapabilityResponse;
 import org.chromium.components.signin.ConnectionRetry.AuthTask;
 import org.chromium.components.signin.base.AccountCapabilities;
+import org.chromium.components.signin.base.AccountInfo;
 import org.chromium.components.signin.base.CoreAccountInfo;
 
 import java.util.ArrayList;
@@ -73,8 +74,11 @@
     private final AtomicReference<List<PatternMatcher>> mAccountRestrictionPatterns =
             new AtomicReference<>();
 
+    // Deprecated in favor of `mAccountsPromise`, to be removed after migrating all affected calls.
     private @NonNull Promise<List<CoreAccountInfo>> mCoreAccountInfosPromise = new Promise<>();
 
+    private @NonNull Promise<List<AccountInfo>> mAccountsPromise = new Promise<>();
+
     private @Nullable AsyncTask<List<String>> mFetchGaiaIdsTask;
 
     private int mNumberOfRetries;
@@ -94,13 +98,11 @@
         mDelegate.attachAccountsChangeObserver(this::onAccountsUpdated);
         new AccountRestrictionPatternReceiver(this::onAccountRestrictionPatternsUpdated);
 
-        getCoreAccountInfos()
+        getAccounts()
                 .then(
-                        coreAccountInfos -> {
+                        accounts -> {
                             RecordHistogram.recordExactLinearHistogram(
-                                    "Signin.AndroidNumberOfDeviceAccounts",
-                                    coreAccountInfos.size(),
-                                    50);
+                                    "Signin.AndroidNumberOfDeviceAccounts", accounts.size(), 50);
                         });
         onAccountsUpdated();
     }
@@ -136,6 +138,13 @@
 
     @MainThread
     @Override
+    public Promise<List<AccountInfo>> getAccounts() {
+        ThreadUtils.assertOnUiThread();
+        return mAccountsPromise;
+    }
+
+    @MainThread
+    @Override
     public void getAccessToken(
             CoreAccountInfo coreAccountInfo, String scope, GetAccessTokenCallback callback) {
         ThreadUtils.assertOnUiThread();
@@ -317,8 +326,8 @@
     }
 
     /**
-     * Fetches gaia ids, wraps them into {@link CoreAccountInfo} and updates {@link
-     * #mCoreAccountInfosPromise}.
+     * Fetches gaia ids, creates account objects and updates {@link #mCoreAccountInfosPromise} and
+     * {@link #mAccountsPromise}.
      */
     @MainThread
     private void fetchGaiaIdsAndUpdateCoreAccountInfos() {
@@ -362,15 +371,23 @@
                             return;
                         }
                         List<CoreAccountInfo> coreAccountInfos = new ArrayList<>();
+                        List<AccountInfo> accounts = new ArrayList<>();
                         for (int index = 0; index < emails.size(); index++) {
                             coreAccountInfos.add(
                                     CoreAccountInfo.createFromEmailAndGaiaId(
                                             emails.get(index), gaiaIds.get(index)));
+                            accounts.add(
+                                    new AccountInfo.Builder(emails.get(index), gaiaIds.get(index))
+                                            .build());
                         }
+                        assert mCoreAccountInfosPromise.isFulfilled()
+                                == mAccountsPromise.isFulfilled();
                         if (mCoreAccountInfosPromise.isFulfilled()) {
                             mCoreAccountInfosPromise = Promise.fulfilled(coreAccountInfos);
+                            mAccountsPromise = Promise.fulfilled(accounts);
                         } else {
                             mCoreAccountInfosPromise.fulfill(coreAccountInfos);
+                            mAccountsPromise.fulfill(accounts);
                         }
                         for (AccountsChangeObserver observer : mObservers) {
                             observer.onCoreAccountInfosChanged();
@@ -484,6 +501,7 @@
 
     public void resetAccountsForTesting() {
         mCoreAccountInfosPromise = new Promise<>();
+        mAccountsPromise = new Promise<>();
         mAllAccounts.set(null);
         updateAccounts();
     }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java
index b967f5a4..967edc94 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java
@@ -25,10 +25,9 @@
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.components.signin.base.AccountInfo;
 import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.test.util.FakeAccountManagerDelegate;
-import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
+import org.chromium.components.signin.test.util.TestAccounts;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -122,10 +121,6 @@
         }
     }
 
-    private static final AccountInfo ACCOUNT =
-            new AccountInfo.Builder(
-                            "test@gmail.com", FakeAccountManagerFacade.toGaiaId("test@gmail.com"))
-                    .build();
     private static final String TOKEN_SCOPE = "oauth2:http://example.com/scope";
 
     @Test
@@ -141,10 +136,11 @@
                 () -> {
                     // Cache shouldn't be populated until getAccountsSync is unblocked.
                     assertFalse(facade.getCoreAccountInfos().isFulfilled());
+                    assertFalse(facade.getAccounts().isFulfilled());
                 });
 
         blockingDelegate.unblockGetAccounts();
-        CountDownLatch countDownLatch = new CountDownLatch(1);
+        CountDownLatch countDownLatch = new CountDownLatch(2);
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     facade.getCoreAccountInfos()
@@ -152,12 +148,18 @@
                                     coreAccountInfos -> {
                                         countDownLatch.countDown();
                                     });
+                    facade.getAccounts()
+                            .then(
+                                    accounts -> {
+                                        countDownLatch.countDown();
+                                    });
                 });
         // Wait for cache population to finish.
         countDownLatch.await();
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     assertTrue(facade.getCoreAccountInfos().isFulfilled());
+                    assertTrue(facade.getAccounts().isFulfilled());
                 });
     }
 
@@ -170,7 +172,7 @@
                 ThreadUtils.runOnUiThreadBlocking(
                         () -> new AccountManagerFacadeImpl(blockingDelegate));
 
-        CountDownLatch firstCounter = new CountDownLatch(1);
+        CountDownLatch firstCounter = new CountDownLatch(2);
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     // Add callback. This should be done on the main thread.
@@ -179,17 +181,22 @@
                                     coreAccountInfos -> {
                                         firstCounter.countDown();
                                     });
+                    facade.getAccounts()
+                            .then(
+                                    accounts -> {
+                                        firstCounter.countDown();
+                                    });
                 });
         assertEquals(
                 "Callback shouldn't be invoked until cache is populated",
-                1,
+                2,
                 firstCounter.getCount());
 
         blockingDelegate.unblockGetAccounts();
         // Cache should be populated & callback should be invoked
         firstCounter.await();
 
-        CountDownLatch secondCounter = new CountDownLatch(1);
+        CountDownLatch secondCounter = new CountDownLatch(2);
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     facade.getCoreAccountInfos()
@@ -197,9 +204,15 @@
                                     coreAccountInfos -> {
                                         secondCounter.countDown();
                                     });
+                    facade.getAccounts()
+                            .then(
+                                    accounts -> {
+                                        secondCounter.countDown();
+                                    });
                     assertEquals(
-                            "Callback should be posted on UI thread, not executed synchronously",
-                            1,
+                            "Callback should be posted on UI thread, not "
+                                    + "executed synchronously",
+                            2,
                             secondCounter.getCount());
                 });
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
@@ -214,13 +227,14 @@
         AccountManagerFacade facade =
                 ThreadUtils.runOnUiThreadBlocking(() -> new AccountManagerFacadeImpl(delegate));
 
-        delegate.addAccount(ACCOUNT);
+        delegate.addAccount(TestAccounts.ACCOUNT1);
         AccessTokenData expectedToken =
                 delegate.getAccessToken(
-                        CoreAccountInfo.getAndroidAccountFrom(ACCOUNT), TOKEN_SCOPE);
+                        CoreAccountInfo.getAndroidAccountFrom(TestAccounts.ACCOUNT1), TOKEN_SCOPE);
 
         CustomGetAccessTokenCallback callback = new CustomGetAccessTokenCallback();
-        ThreadUtils.runOnUiThread(() -> facade.getAccessToken(ACCOUNT, TOKEN_SCOPE, callback));
+        ThreadUtils.runOnUiThread(
+                () -> facade.getAccessToken(TestAccounts.ACCOUNT1, TOKEN_SCOPE, callback));
         assertEquals(expectedToken.getToken(), callback.getToken());
     }
 
@@ -233,7 +247,8 @@
 
         CustomGetAccessTokenCallback callback = new CustomGetAccessTokenCallback();
         // Request a token for an account that wasn't added.
-        ThreadUtils.runOnUiThread(() -> facade.getAccessToken(ACCOUNT, TOKEN_SCOPE, callback));
+        ThreadUtils.runOnUiThread(
+                () -> facade.getAccessToken(TestAccounts.ACCOUNT1, TOKEN_SCOPE, callback));
 
         assertNull(callback.getToken());
     }
@@ -245,14 +260,16 @@
         AccountManagerFacade facade =
                 ThreadUtils.runOnUiThreadBlocking(() -> new AccountManagerFacadeImpl(delegate));
 
-        delegate.addAccount(ACCOUNT);
+        delegate.addAccount(TestAccounts.ACCOUNT1);
 
         CustomGetAccessTokenCallback callback1 = new CustomGetAccessTokenCallback();
-        ThreadUtils.runOnUiThread(() -> facade.getAccessToken(ACCOUNT, TOKEN_SCOPE, callback1));
+        ThreadUtils.runOnUiThread(
+                () -> facade.getAccessToken(TestAccounts.ACCOUNT1, TOKEN_SCOPE, callback1));
         String originalToken = callback1.getToken();
 
         CustomGetAccessTokenCallback callback2 = new CustomGetAccessTokenCallback();
-        ThreadUtils.runOnUiThread(() -> facade.getAccessToken(ACCOUNT, TOKEN_SCOPE, callback2));
+        ThreadUtils.runOnUiThread(
+                () -> facade.getAccessToken(TestAccounts.ACCOUNT1, TOKEN_SCOPE, callback2));
         assertEquals(
                 "The same token should be returned before invalidating the token.",
                 callback2.getToken(),
@@ -266,7 +283,8 @@
         invalidationCallback.waitForOnly();
 
         CustomGetAccessTokenCallback callback3 = new CustomGetAccessTokenCallback();
-        ThreadUtils.runOnUiThread(() -> facade.getAccessToken(ACCOUNT, TOKEN_SCOPE, callback3));
+        ThreadUtils.runOnUiThread(
+                () -> facade.getAccessToken(TestAccounts.ACCOUNT1, TOKEN_SCOPE, callback3));
         assertNotEquals(
                 "A different token should be returned since the original token is invalidated.",
                 callback3.getToken(),
@@ -278,7 +296,7 @@
     @SmallTest
     public void testWaitForPendingTokenRequestsToComplete() throws Exception {
         BlockingAccountManagerDelegate blockingDelegate = new BlockingAccountManagerDelegate();
-        blockingDelegate.addAccount(ACCOUNT);
+        blockingDelegate.addAccount(TestAccounts.ACCOUNT1);
         blockingDelegate.blockGetAuthToken();
         AccountManagerFacade facade =
                 ThreadUtils.runOnUiThreadBlocking(
@@ -286,7 +304,7 @@
 
         CustomGetAccessTokenCallback tokenCallback = new CustomGetAccessTokenCallback();
         ThreadUtils.runOnUiThreadBlocking(
-                () -> facade.getAccessToken(ACCOUNT, TOKEN_SCOPE, tokenCallback));
+                () -> facade.getAccessToken(TestAccounts.ACCOUNT1, TOKEN_SCOPE, tokenCallback));
 
         CallbackHelper pendingRequestsCompleteCallback = new CallbackHelper();
         ThreadUtils.runOnUiThreadBlocking(
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java
index 259ceeb..6124a00 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java
@@ -12,6 +12,7 @@
 
 import org.chromium.base.Promise;
 import org.chromium.components.signin.AccountManagerFacade.ChildAccountStatusListener;
+import org.chromium.components.signin.base.AccountInfo;
 import org.chromium.components.signin.base.CoreAccountInfo;
 
 import java.util.Arrays;
@@ -68,6 +69,21 @@
     }
 
     /**
+     * Finds the first {@link AccountInfo} among `accounts` whose canonical email is equal to
+     * `accountEmail`; `null` if there is no match.
+     */
+    public static @Nullable AccountInfo findAccountByEmail(
+            List<AccountInfo> accounts, String accountEmail) {
+        String canonicalEmail = AccountUtils.canonicalizeEmail(accountEmail);
+        for (AccountInfo account : accounts) {
+            if (AccountUtils.canonicalizeEmail(account.getEmail()).equals(canonicalEmail)) {
+                return account;
+            }
+        }
+        return null;
+    }
+
+    /**
      * Finds the first {@link CoreAccountInfo} of the given {@param coreAccountInfos} whose Gaia ID
      * equals the given {@param accountGaiaId}; null if there is no match.
      */
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
index 1cdd5d0..2320a3d 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
@@ -112,6 +112,9 @@
     /** Can be used to block {@link #getCoreAccountInfos()} ()} result. */
     private @Nullable Promise<List<CoreAccountInfo>> mBlockedGetCoreAccountInfosPromise;
 
+    /** Can be used to block {@link #getAccounts()} ()} result. */
+    private @Nullable Promise<List<AccountInfo>> mBlockedGetAccountsPromise;
+
     private Intent mAddAccountIntent =
             new Intent(ContextUtils.getApplicationContext(), AddAccountActivityStub.class);
 
@@ -146,6 +149,15 @@
         return Promise.fulfilled(getCoreAccountInfosInternal());
     }
 
+    @Override
+    public Promise<List<AccountInfo>> getAccounts() {
+        ThreadUtils.checkUiThread();
+        if (mBlockedGetAccountsPromise != null) {
+            return mBlockedGetAccountsPromise;
+        }
+        return Promise.fulfilled(getAccountsInternal());
+    }
+
     @MainThread
     @Override
     public void getAccessToken(
@@ -240,6 +252,8 @@
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     mAccountHolders.add(new AccountHolder(accountInfo));
+                    assert (mBlockedGetCoreAccountInfosPromise == null)
+                            == (mBlockedGetAccountsPromise == null);
                     if (mBlockedGetCoreAccountInfosPromise == null) {
                         fireOnAccountsChangedNotification();
                     }
@@ -266,6 +280,8 @@
                             throw new IllegalArgumentException("Cannot find account:" + account);
                         }
                     }
+                    assert (mBlockedGetCoreAccountInfosPromise == null)
+                            == (mBlockedGetAccountsPromise == null);
                     if (mBlockedGetCoreAccountInfosPromise == null) {
                         fireOnAccountsChangedNotification();
                     }
@@ -291,6 +307,8 @@
                             throw new IllegalArgumentException("Cannot find account:" + accountId);
                         }
                     }
+                    assert (mBlockedGetCoreAccountInfosPromise == null)
+                            == (mBlockedGetAccountsPromise == null);
                     if (mBlockedGetCoreAccountInfosPromise == null) {
                         fireOnAccountsChangedNotification();
                     }
@@ -312,41 +330,53 @@
     }
 
     /**
-     * Blocks updates to the account lists returned by {@link #getCoreAccountInfos}. After this
-     * method is called, subsequent calls to {@link #getCoreAccountInfos} will return the same
-     * promise that won't be updated until the returned {@link AutoCloseable} is closed.
+     * Blocks updates to the account lists returned by {@link #getCoreAccountInfos} and {@link
+     * #getAccounts}. After this method is called, subsequent calls to {@link #getCoreAccountInfos}
+     * and {@link #getAccounts} will return promises that won't be updated until the returned {@link
+     * AutoCloseable} is closed.
      *
-     * @param populateCache whether {@link #getCoreAccountInfos} should return a fulfilled promise.
-     *     If true, then the promise will be fulfilled with the current list of available accounts.
-     *     Any account addition/removal later on will not be reflected in {@link
-     *     #getCoreAccountInfos()}.
+     * <p>TODO(crbug.com/385309416): Rename to `blockGetAccounts` after removing
+     * `getCoreAccountInfos`.
+     *
+     * @param populateCache whether {@link #getCoreAccountInfos} and {@link #getAccounts} should
+     *     return a fulfilled promise. If true, then the promise will be fulfilled with the current
+     *     list of available accounts. Any account addition/removal later on will not be reflected
+     *     in {@link #getCoreAccountInfos()} and {@link #getAccounts}.
      * @return {@link AutoCloseable} that should be closed to unblock account updates.
      */
     public UpdateBlocker blockGetCoreAccountInfos(boolean populateCache) {
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     assert mBlockedGetCoreAccountInfosPromise == null;
+                    assert mBlockedGetAccountsPromise == null;
                     mBlockedGetCoreAccountInfosPromise = new Promise<>();
+                    mBlockedGetAccountsPromise = new Promise<>();
                     if (populateCache) {
                         mBlockedGetCoreAccountInfosPromise.fulfill(getCoreAccountInfosInternal());
+                        mBlockedGetAccountsPromise.fulfill(getAccountsInternal());
                     }
                 });
         return new UpdateBlocker();
     }
 
     /**
-     * Unblocks callers that are waiting for {@link #getCoreAccountInfos()} result. Use after {@link
-     * #blockGetCoreAccountInfos(boolean)} to unblock callers waiting for promises obtained from
-     * {@link #getCoreAccountInfos()}.
+     * Unblocks callers that are waiting for {@link #getCoreAccountInfos()} and {@link #getAccounts}
+     * results. Use after {@link #blockGetCoreAccountInfos(boolean)} to unblock callers waiting for
+     * promises obtained from {@link #getCoreAccountInfos()} and {@link #getAccounts}.
      */
     private void unblockGetCoreAccountInfos() {
         ThreadUtils.runOnUiThreadBlocking(
                 () -> {
                     assert mBlockedGetCoreAccountInfosPromise != null;
+                    assert mBlockedGetAccountsPromise != null;
+                    assert mBlockedGetCoreAccountInfosPromise.isFulfilled()
+                            == mBlockedGetAccountsPromise.isFulfilled();
                     if (!mBlockedGetCoreAccountInfosPromise.isFulfilled()) {
                         mBlockedGetCoreAccountInfosPromise.fulfill(getCoreAccountInfosInternal());
+                        mBlockedGetAccountsPromise.fulfill(getAccountsInternal());
                     }
                     mBlockedGetCoreAccountInfosPromise = null;
+                    mBlockedGetAccountsPromise = null;
                     fireOnAccountsChangedNotification();
                 });
     }
@@ -377,6 +407,15 @@
         }
     }
 
+    private List<AccountInfo> getAccountsInternal() {
+        ThreadUtils.checkUiThread();
+        synchronized (mAccountHolders) {
+            return mAccountHolders.stream()
+                    .map(AccountHolder::getAccountInfo)
+                    .collect(Collectors.toList());
+        }
+    }
+
     @AnyThread
     private @Nullable AccountHolder getAccountHolder(CoreAccountId accountId) {
         synchronized (mAccountHolders) {
diff --git a/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java b/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java
index 3549da7..e788095 100644
--- a/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java
+++ b/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java
@@ -194,6 +194,7 @@
         AccountManagerFacade facade = new AccountManagerFacadeImpl(delegate);
 
         assertEquals(facade.getCoreAccountInfos().getResult(), List.of(TEST_ACCOUNT));
+        assertEquals(facade.getAccounts().getResult(), List.of(TEST_ACCOUNT));
         assertTrue(facade.didAccountFetchSucceed());
         retriesHistogram.assertExpected();
         successHistogram.assertExpected();
@@ -223,13 +224,16 @@
         // Called once on AccountManagerFacade creation.
         verify(mDelegateMock).getAccountsSynchronous();
         assertFalse(facade.getCoreAccountInfos().isFulfilled());
+        assertFalse(facade.getAccounts().isFulfilled());
 
         // The delegate call is retried once, and succeeds.
         mPostTaskRunner.runAll();
         verify(mDelegateMock, times(2)).getAccountsSynchronous();
         assertTrue(facade.getCoreAccountInfos().isFulfilled());
+        assertTrue(facade.getAccounts().isFulfilled());
         assertTrue(facade.didAccountFetchSucceed());
         assertEquals(facade.getCoreAccountInfos().getResult(), List.of(TEST_ACCOUNT));
+        assertEquals(facade.getAccounts().getResult(), List.of(TEST_ACCOUNT));
         retriesHistogram.assertExpected();
         successHistogram.assertExpected();
     }
@@ -258,6 +262,7 @@
                 .getAccountsSynchronous();
         assertFalse(mFacade.didAccountFetchSucceed());
         assertEquals(mFacade.getCoreAccountInfos().getResult(), List.of());
+        assertEquals(mFacade.getAccounts().getResult(), List.of());
         retriesHistogram.assertExpected();
         successHistogram.assertExpected();
     }
@@ -270,6 +275,7 @@
         mPostTaskRunner.runAll();
         assertFalse(mFacade.didAccountFetchSucceed());
         assertEquals(mFacade.getCoreAccountInfos().getResult(), List.of());
+        assertEquals(mFacade.getAccounts().getResult(), List.of());
 
         // Accounts are updated again.
         mDelegate.callOnCoreAccountInfoChanged();
@@ -308,11 +314,13 @@
         CoreAccountInfo accountInfo1 = addTestAccount("test1@gmail.com");
         CoreAccountInfo accountInfo2 = addTestAccount("test2@gmail.com");
 
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1, accountInfo2), mFacade.getAccounts().getResult());
 
         removeTestAccount(accountInfo1.getId());
-        Assert.assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getAccounts().getResult());
     }
 
     @Test
@@ -336,10 +344,10 @@
                 .getAccountGaiaId(accountEmail);
 
         addTestAccount(accountEmail);
-        final List<CoreAccountInfo> coreAccountInfos = mFacade.getCoreAccountInfos().getResult();
 
         verify(mDelegate, atLeastOnce()).getAccountGaiaId(accountEmail);
-        Assert.assertTrue(coreAccountInfos.isEmpty());
+        assertTrue(mFacade.getCoreAccountInfos().getResult().isEmpty());
+        assertTrue(mFacade.getAccounts().getResult().isEmpty());
     }
 
     @Test
@@ -358,21 +366,26 @@
     public void testGetCoreAccountInfosWithAccountPattern() throws Exception {
         setAccountRestrictionPatterns("*@example.com");
         CoreAccountInfo accountInfo1 = addTestAccount("test1@example.com");
-        Assert.assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getAccounts().getResult());
 
         addTestAccount("test@gmail.com"); // Doesn't match the pattern.
-        Assert.assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getAccounts().getResult());
 
         CoreAccountInfo accountInfo2 = addTestAccount("test2@example.com");
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1, accountInfo2), mFacade.getAccounts().getResult());
 
         addTestAccount("test2@gmail.com"); // Doesn't match the pattern.
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1, accountInfo2), mFacade.getAccounts().getResult());
 
         removeTestAccount(accountInfo1.getId());
-        Assert.assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getAccounts().getResult());
     }
 
     @Test
@@ -380,45 +393,58 @@
         setAccountRestrictionPatterns("test1@example.com", "test2@gmail.com");
         addTestAccount("test@gmail.com"); // Doesn't match the pattern.
         addTestAccount("test@example.com"); // Doesn't match the pattern.
-        Assert.assertEquals(List.of(), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(), mFacade.getAccounts().getResult());
 
         CoreAccountInfo accountInfo1 = addTestAccount("test1@example.com");
-        Assert.assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getAccounts().getResult());
 
         addTestAccount("test2@example.com");
-        Assert.assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getAccounts().getResult());
 
         CoreAccountInfo accountInfo2 = addTestAccount("test2@gmail.com");
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1, accountInfo2), mFacade.getAccounts().getResult());
     }
 
     @Test
     public void testGetCoreAccountInfosWithAccountPatternsChange() throws Exception {
         mDelegate.callOnCoreAccountInfoChanged();
-        Assert.assertEquals(List.of(), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(), mFacade.getAccounts().getResult());
 
         CoreAccountInfo accountInfo1 = addTestAccount("test1@gmail.com");
-        Assert.assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getAccounts().getResult());
 
         CoreAccountInfo accountInfo2 = addTestAccount("test2@example.com");
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1, accountInfo2), mFacade.getAccounts().getResult());
 
         CoreAccountInfo accountInfo3 = addTestAccount("test3@gmail.com");
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2, accountInfo3),
                 mFacade.getCoreAccountInfos().getResult());
+        assertEquals(
+                List.of(accountInfo1, accountInfo2, accountInfo3),
+                mFacade.getAccounts().getResult());
 
         setAccountRestrictionPatterns("test1@gmail.com");
-        Assert.assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1), mFacade.getAccounts().getResult());
 
         setAccountRestrictionPatterns("*@example.com", "test3@gmail.com");
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo2, accountInfo3), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2, accountInfo3), mFacade.getAccounts().getResult());
 
         removeTestAccount(accountInfo3.getId());
-        Assert.assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getAccounts().getResult());
     }
 
     @Test
@@ -426,13 +452,15 @@
         CoreAccountInfo accountInfo1 = addTestAccount("test1@gmail.com");
         CoreAccountInfo accountInfo2 = addTestAccount("test2@example.com");
         setAccountRestrictionPatterns("*@example.com");
-        Assert.assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo2), mFacade.getAccounts().getResult());
 
         mShadowUserManager.setApplicationRestrictions(mContext.getPackageName(), new Bundle());
         mContext.sendBroadcast(new Intent(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED));
 
-        Assert.assertEquals(
+        assertEquals(
                 List.of(accountInfo1, accountInfo2), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo1, accountInfo2), mFacade.getAccounts().getResult());
     }
 
     @Test
@@ -442,7 +470,8 @@
         // Matches both patterns
         CoreAccountInfo accountInfo = addTestAccount("test@gmail.com");
 
-        Assert.assertEquals(List.of(accountInfo), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo), mFacade.getCoreAccountInfos().getResult());
+        assertEquals(List.of(accountInfo), mFacade.getAccounts().getResult());
     }
 
     @Test
diff --git a/components/signin/public/base/signin_feature_map.cc b/components/signin/public/base/signin_feature_map.cc
index 471c406..fef686bf 100644
--- a/components/signin/public/base/signin_feature_map.cc
+++ b/components/signin/public/base/signin_feature_map.cc
@@ -20,7 +20,6 @@
 // Array of features exposed through the Java SigninFeatures API.
 const base::Feature* const kFeaturesExposedToJava[] = {
     &switches::kSkipCheckForAccountManagementOnSignin,
-    &switches::kRestoreSignedInAccountAndSettingsFromBackup,
     &switches::kUseConsentLevelSigninForLegacyAccountEmailPref,
     &switches::kCctSignInPrompt,
     &switches::kUnoForAuto,
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc
index 1ca13b8..88c1e0f 100644
--- a/components/signin/public/base/signin_switches.cc
+++ b/components/signin/public/base/signin_switches.cc
@@ -104,15 +104,6 @@
              base::FEATURE_DISABLED_BY_DEFAULT);
 #endif
 
-#if BUILDFLAG(IS_ANDROID)
-// Flag guarding the restoration of the signed-in only account instead of
-// the syncing one and the restoration of account settings after device
-// restore.
-BASE_FEATURE(kRestoreSignedInAccountAndSettingsFromBackup,
-             "RestoreSignedInAccountAndSettingsFromBackup",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-#endif
-
 BASE_FEATURE(kExplicitBrowserSigninUIOnDesktop,
              "ExplicitBrowserSigninUIOnDesktop",
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
diff --git a/components/signin/public/base/signin_switches.h b/components/signin/public/base/signin_switches.h
index d5f68fb..d61e68e 100644
--- a/components/signin/public/base/signin_switches.h
+++ b/components/signin/public/base/signin_switches.h
@@ -89,11 +89,6 @@
 BASE_DECLARE_FEATURE(kForceStartupSigninPromo);
 #endif
 
-#if BUILDFLAG(IS_ANDROID)
-COMPONENT_EXPORT(SIGNIN_SWITCHES)
-BASE_DECLARE_FEATURE(kRestoreSignedInAccountAndSettingsFromBackup);
-#endif
-
 // Used for the launch of the UNO model on Desktop Phase 0.
 COMPONENT_EXPORT(SIGNIN_SWITCHES)
 BASE_DECLARE_FEATURE(kExplicitBrowserSigninUIOnDesktop);
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index ea13b492..edd8884b 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -3296,6 +3296,7 @@
 <translation id="6925267999184670015">‏‫B+‎ شمال أمريكا</translation>
 <translation id="6926216138694948720">فن الجسد</translation>
 <translation id="692638818576287323">مركبات تجارية</translation>
+<translation id="6933282894115597956">تطلُب مؤسستك تسجيل الدخول إلى حسابك</translation>
 <translation id="6934236486840930310">‏<ph name="BEGIN_BOLD" />يتيح لك محرك البحث التلقائي البحث على الإنترنت ويفعِّل ميزات Chrome<ph name="END_BOLD" />، مثل البحث من شريط العناوين ومن الصور على صفحات الويب. قد لا تتوفر إحدى الميزات إذا لم يكن محرك البحث الخاص بك يتيحها.</translation>
 <translation id="6934672428414710184">‏هذا الاسم من حسابك على Google</translation>
 <translation id="6935082727755903526">وظائف محاسبة وشؤون مالية</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index 74b73dc..8dd8668 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">স্বয়ংক্ৰিয় picture-in-picture</translation>
 <translation id="1100782917270858593">যাত্ৰা পুনৰ আৰম্ভ কৰক বুটাম, আপোনাৰ যাত্ৰা পুনৰ আৰম্ভ কৰিবলৈ আৰু আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাবলৈ এণ্টাৰ টিপক</translation>
 <translation id="1101672080107056897">আসোঁৱাহ সম্পৰ্কীয় কাৰ্য</translation>
+<translation id="1101902632743388185">আপোনাৰ তুলনা কৰা তালিকা</translation>
 <translation id="1104409666019087579">কিছুমান আৱশ্যকীয় ক্ষেত্ৰ খালী হৈ আছে। ছেভ কৰাৰ আগতে সেইবোৰ পূৰ কৰক।</translation>
 <translation id="1104860668737945357">পাছৱৰ্ডসমূহ পৰিচালনা কৰাৰ বুটাম, Chromeৰ ছেটিঙত আপোনাৰ পাছৱৰ্ডসমূহ চাবলৈ আৰু পৰিচালনা কৰিবলৈ সক্ৰিয় কৰক</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">প্ৰক্সী স্বয়ংক্ৰিয়ভাৱে কনফিগাৰ কৰা হিচাপে ছেট কৰা আছে।</translation>
 <translation id="2025891858974379949">অসুৰক্ষিত সমল</translation>
 <translation id="2027465737841872819">প্লাষ্টিক</translation>
+<translation id="2027707238798802149">কাৰ্ড উপলব্ধ নহয়</translation>
 <translation id="2029735183873159415">পূৰ্বপুৰুষ আৰু বংশাৱলী</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />প্ৰক্সি আৰু ফায়াৰৱাল পৰীক্ষা কৰি থকা হৈছে<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">শ্বৰ্টকাটটো <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />এ সংজ্ঞাবদ্ধ কৰা ডিফ'ল্ট সন্ধান প্ৰদানকাৰীৰ কীৱৰ্ডটোৰ সৈতে একেই হ'ব নোৱাৰে: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">ঘৰ আৰু বাগিচা</translation>
 <translation id="2515629240566999685">আপোনাৰ অঞ্চলৰ ছিংগনেল পৰীক্ষা কৰি থকা হৈছে</translation>
 <translation id="2515761554693942801">আপুনি <ph name="PROVIDER_ORIGIN" /> ব্যৱহাৰ কৰা ৱেবছাইটসমূহত স্পৰ্শ আইডিৰ জৰিয়তে সত্যাপন কৰিবলৈ বাছনি কৰিছে। এই প্ৰদানকাৰীয়ে হয়তো আপোনাৰ পৰিশোধ পদ্ধতিৰ বিষয়ে তথ্য ষ্ট’ৰ কৰি ৰাখিব পাৰে, যিটো আপুনি <ph name="LINK_TEXT" /> পাৰে।</translation>
+<translation id="2518584823165598232">এই কাৰ্ডখন উপলব্ধ নহয়। অনুগ্ৰহ কৰি আপোনাৰ কাৰ্ড প্ৰদানকাৰীৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="2521385132275182522">তলৰ অংশৰ সোঁফালে ষ্টে'পল কৰক</translation>
 <translation id="2521736961081452453">ফ’ৰ্ম সৃষ্টি কৰক</translation>
 <translation id="2523886232349826891">কেৱল এই ডিভাইচটোত ছেভ কৰা হয়</translation>
@@ -3337,6 +3340,7 @@
 <translation id="7003322000677139268">বাহনৰ অংশ আৰু আনুষংগিক সামগ্ৰী</translation>
 <translation id="7004499039102548441">শেহতীয়া টেব</translation>
 <translation id="7006930604109697472">তথাপি পঠিয়াওক</translation>
+<translation id="7009364359744329733">এই মুহূৰ্তত এই কাৰ্ডখন উপলব্ধ নহয়। অনুগ্ৰহ কৰি পাছত পুনৰ চেষ্টা কৰক।</translation>
 <translation id="7010658264061801199">খাদ্য আৰু পানীয়</translation>
 <translation id="7012363358306927923">China Union Pay</translation>
 <translation id="7013835112918108252">আপোনাৰ মাউছ লক আৰু ব্যৱহাৰ কৰিবলৈ ক’ব পাৰে</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 254f1c81..8208a21 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">аўтаматычны запуск рэжыму "відарыс у відарысе"</translation>
 <translation id="1100782917270858593">Кнопка "Працягнуць пошук". Каб пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome, націсніце Enter</translation>
 <translation id="1101672080107056897">Памылковае дзеянне</translation>
+<translation id="1101902632743388185">Табліцы параўнання</translation>
 <translation id="1104409666019087579">Некаторыя абавязковыя палі пустыя. Каб захаваць даныя, вам трэба запоўніць іх.</translation>
 <translation id="1104860668737945357">Кнопка "Кіраваць паролямі". Каб паглядзець паролі або кіраваць імі ў наладах Chrome, націсніце яе.</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Для проксі-сервера ўказана аўтаматычнае наладжванне.</translation>
 <translation id="2025891858974379949">Небяспечнае змесціва</translation>
 <translation id="2027465737841872819">Пластык</translation>
+<translation id="2027707238798802149">Картка недаступная</translation>
 <translation id="2029735183873159415">Продкі і генеалогія</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Праверыць проксі-сервер і брандмаўэр.<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Хуткая каманда "<ph name="SHORTCUT_NAME" />" не павінна супадаць з ключавым словам стандартнай пошукавай сістэмы, якое вызначана палітыкай <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /></translation>
@@ -867,6 +869,7 @@
 <translation id="2514548229949738417">Дом і сад</translation>
 <translation id="2515629240566999685">Праверыць сігнал там, дзе вы знаходзіцеся.</translation>
 <translation id="2515761554693942801">Вы выбралі Touch ID для спраўджання купляў на сайтах, якія карыстаюцца паслугамі пастаўшчыка <ph name="PROVIDER_ORIGIN" />. Гэты пастаўшчык мог захаваць інфармацыю пра ваш спосаб аплаты. Вы можаце <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Гэта картка недаступная. Звярніцеся да пастаўшчыка карткі.</translation>
 <translation id="2521385132275182522">Скаба знізу справа</translation>
 <translation id="2521736961081452453">Стварыць форму</translation>
 <translation id="2523886232349826891">Захавана толькі на гэтай прыладзе</translation>
@@ -3341,6 +3344,7 @@
 <translation id="7003322000677139268">Аўтазапчасткі і аксесуары</translation>
 <translation id="7004499039102548441">Нядаўнія ўкладкі</translation>
 <translation id="7006930604109697472">Усё роўна адправіць</translation>
+<translation id="7009364359744329733">Гэта картка пакуль што недаступная, паўтарыце спробу пазней.</translation>
 <translation id="7010658264061801199">Ежа і напіткі</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Можа запытаць дазвол на блакіроўку і выкарыстанне мышы</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 2e9da6a2..a42c601 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">автоматичен режим „картина в картината“</translation>
 <translation id="1100782917270858593">Бутон „Възобновяване на пътешествието“. Натиснете Enter, за да възобновите пътешествието си и да прегледате съответната активност в историята си в Chrome</translation>
 <translation id="1101672080107056897">Грешка при действието</translation>
+<translation id="1101902632743388185">Вашите таблици за сравнение</translation>
 <translation id="1104409666019087579">Някои от задължителните полета са празни. Попълнете ги, преди да запазите.</translation>
 <translation id="1104860668737945357">Бутон „Управление на паролите“. Активирайте, за да прегледате и управлявате паролите в настройките на Chrome</translation>
 <translation id="1108464073729874771">A3 x 4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">За прокси сървъра е зададена автоматична конфигурация.</translation>
 <translation id="2025891858974379949">Незащитено съдържание</translation>
 <translation id="2027465737841872819">Пластмаса</translation>
+<translation id="2027707238798802149">Картата не е налице</translation>
 <translation id="2029735183873159415">Родословие и генеалогия</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Проверете прокси сървъра и защитната стена<ph name="END_LINK" />.</translation>
 <translation id="2033900728810589426">Прекият път не може да е същият като ключовата дума за доставчика за търсене по подразбиране, дефинирана от <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Дом и градина</translation>
 <translation id="2515629240566999685">Проверете сигнала в района.</translation>
 <translation id="2515761554693942801">Избрахте опцията за потвърждаване чрез Touch ID в уебсайтовете, които използват <ph name="PROVIDER_ORIGIN" />. Възможно е този доставчик да е съхранил информация за начина ви на плащане. Можете обаче да <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Тази карта не е налице. Моля, свържете се с доставчика ѝ.</translation>
 <translation id="2521385132275182522">Телбодиране долу вдясно</translation>
 <translation id="2521736961081452453">Създаване на формуляр</translation>
 <translation id="2523886232349826891">Запазено само на това устройство</translation>
@@ -3291,6 +3294,7 @@
 <translation id="6925267999184670015">North American B+</translation>
 <translation id="6926216138694948720">Бодиарт</translation>
 <translation id="692638818576287323">Търговски превозни средства</translation>
+<translation id="6933282894115597956">Организацията ви изисква да влезете в профила си</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Основната търсеща машина ви дава възможност да търсите в мрежата и да се възползвате от функции на Chrome<ph name="END_BOLD" />, като например търсене от адресната лента и от изображенията в уеб страниците. Някои функции може да не са налице, ако не се поддържат от търсещата ви машина.</translation>
 <translation id="6934672428414710184">Това име е от профила ви в Google</translation>
 <translation id="6935082727755903526">Работни места в сферата на счетоводството и финансите</translation>
@@ -3342,6 +3346,7 @@
 <translation id="7003322000677139268">Части и аксесоари за превозни средства</translation>
 <translation id="7004499039102548441">Скорошни раздели</translation>
 <translation id="7006930604109697472">Изпращане въпреки това</translation>
+<translation id="7009364359744329733">В момента няма достъп до тази карта. Опитайте отново по-късно.</translation>
 <translation id="7010658264061801199">Храна и напитки</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Може да поиска да заключи и използва мишката ви</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index eef30d65..2bc0cc7 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">অটোমেটিক 'ছবির-মধ্যে-ছবি'</translation>
 <translation id="1100782917270858593">'আপনার ব্রাউজার অ্যাক্টিভিটির আবার চালু করুন' বোতাম, ব্রাউজার অ্যাক্টিভিটি আবার চালু করতে এবং Chrome ইতিহাসে প্রাসঙ্গিক অ্যাক্টিভিটি দেখতে Enter প্রেস করুন</translation>
 <translation id="1101672080107056897">সমস্যা সংক্রান্ত অ্যাকশন</translation>
+<translation id="1101902632743388185">আপনার তুলনা করার টেবিল</translation>
 <translation id="1104409666019087579">ফাঁকা রাখা যাবে না এমন কিছু ফিল্ড খালি আছে। সেভ করার আগে সেগুলি পূরণ করুন।</translation>
 <translation id="1104860668737945357">'পাসওয়ার্ড ম্যানেজ করুন' বোতাম, Chrome সেটিংসে আপনার পাসওয়ার্ড দেখতে ও ম্যানেজ করতে এটি চালু করুন</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -584,6 +585,7 @@
 <translation id="2025186561304664664">অটো কনফিগার করতে প্রক্সি সেট করা হয়৷</translation>
 <translation id="2025891858974379949">নিরাপদ নয় এমন কন্টেন্ট</translation>
 <translation id="2027465737841872819">প্লাস্টিক</translation>
+<translation id="2027707238798802149">কার্ড উপলভ্য নয়</translation>
 <translation id="2029735183873159415">বংশ ও বংশতালিকা</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />প্রক্সি এবং ফায়ারওয়াল পরীক্ষা করে দেখুন<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">শর্টকার্ট, <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /> দ্বারা সংজ্ঞায়িত সার্চ পরিষেবা প্রদানকারীর কীওয়ার্ডের মতো এক হতে পারে না: <ph name="SHORTCUT_NAME" /></translation>
@@ -867,6 +869,7 @@
 <translation id="2514548229949738417">বাড়ি ও বাগান</translation>
 <translation id="2515629240566999685">আপনার এলাকায় সংকেত পরীক্ষা করে দেখুন</translation>
 <translation id="2515761554693942801"><ph name="PROVIDER_ORIGIN" /> ব্যবহার করে এমন ওয়েবসাইটে টাচ আইডি ব্যবহার করে যাচাই করার বিকল্প বেছে নিয়েছেন। এই পরিষেবা প্রদানকারী আপনার পেমেন্ট পদ্ধতি সম্পর্কে তথ্য স্টোর করে থাকতে পারে যা আপনি <ph name="LINK_TEXT" /> পারেন।</translation>
+<translation id="2518584823165598232">এই কার্ড উপলভ্য নয়। আপনার কার্ড প্রদানকারীর সাথে যোগাযোগ করুন।</translation>
 <translation id="2521385132275182522">নিচে ডানদিকে স্টেপল করুন</translation>
 <translation id="2521736961081452453">ফর্ম তৈরি করুন</translation>
 <translation id="2523886232349826891">শুধুমাত্র এই ডিভাইসে সেভ করা যাবে</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">যানবাহনের যন্ত্রাংশ ও অ্যাক্সেসরি</translation>
 <translation id="7004499039102548441">সাম্প্রতিক ট্যাবগুলি</translation>
 <translation id="7006930604109697472">নিরাপদ না হলেও পাঠান</translation>
+<translation id="7009364359744329733">এখন এই কার্ড উপলভ্য নেই, পরে আবার চেষ্টা করুন।</translation>
 <translation id="7010658264061801199">খাদ্য ও পানীয়</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">আপনার মাউস লক এবং ব্যবহার করার কথা বলতে পারবেন</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index d44363d..1a419a0 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -2415,7 +2415,7 @@
 <translation id="5329858041417644019">Prohlížeč není spravován</translation>
 <translation id="5331585574693522196">Nastavit jako výchozí</translation>
 <translation id="5332219387342487447">Způsob dopravy</translation>
-<translation id="5332769172018416402">Odeslat zprávu s žádostí</translation>
+<translation id="5332769172018416402">Poslat zprávu s žádostí</translation>
 <translation id="533323551986281710">Spodní tabulka obchodu byla otevřena na celou výšku</translation>
 <translation id="5334013548165032829">Podrobné systémové protokoly</translation>
 <translation id="5340250774223869109">Aplikace je blokována</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 6d1ca76..81cf0a96 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">llun mewn llun awtomatig</translation>
 <translation id="1100782917270858593">Botwm parhau â'ch taith, pwyswch Enter i barhau â'ch taith ac i weld gweithgarwch perthnasol yn eich hanes Chrome</translation>
 <translation id="1101672080107056897">Gweithred y gwall</translation>
+<translation id="1101902632743388185">Eich tablau cymharu</translation>
 <translation id="1104409666019087579">Mae rhai meysydd gofynnol yn wag. Llenwch nhw cyn cadw.</translation>
 <translation id="1104860668737945357">Botwm rheoli cyfrineiriau, gweithredwch i weld a rheoli'ch cyfrineiriau yng ngosodiadau Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Bydd y dirprwy weinydd yn cael ei ffurfweddu'n awtomatig.</translation>
 <translation id="2025891858974379949">Cynnwys anniogel</translation>
 <translation id="2027465737841872819">Plastig</translation>
+<translation id="2027707238798802149">Nid yw'r cerdyn ar gael.</translation>
 <translation id="2029735183873159415">Llinach ac Achyddiaeth</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Wrthi'n gwirio'r dirprwy weinydd a'r wal dân<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Ni all llwybr byr fod yr un fath â'r allweddair darparwr chwilio diofyn a ddiffinnir gan <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Y Cartref a'r Ardd</translation>
 <translation id="2515629240566999685">Wrthi'n gwirio'r signal yn eich ardal</translation>
 <translation id="2515761554693942801">Gwnaethoch ddewis dilysu gyda Touch ID ar wefannau sy'n defnyddio <ph name="PROVIDER_ORIGIN" />. Mae'n bosib bod y darparwr hwn wedi storio gwybodaeth am eich dull talu, y gallwch <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Nid yw'r cerdyn hwn ar gael. Cysylltwch â darparwr eich cerdyn.</translation>
 <translation id="2521385132275182522">Stapl ar y dde isaf</translation>
 <translation id="2521736961081452453">Creu ffurflen</translation>
 <translation id="2523886232349826891">Cedwir ar y ddyfais hon yn unig</translation>
@@ -3291,6 +3294,7 @@
 <translation id="6925267999184670015">B+ Gogledd America</translation>
 <translation id="6926216138694948720">Celf Corff</translation>
 <translation id="692638818576287323">Cerbydau Masnachol</translation>
+<translation id="6933282894115597956">Mae eich sefydliad yn gofyn am fewngofnodi</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Mae eich peiriant chwilio diofyn yn gadael i chi chwilio'r we ac yn pweru nodweddion Chrome<ph name="END_BOLD" /> fel chwilio o'r bar cyfeiriad ac o ddelweddau ar dudalennau gwe. Mae'n bosib na fydd nodwedd ar gael os nad yw'ch peiriant chwilio yn ei chefnogi.</translation>
 <translation id="6934672428414710184">Mae'r enw hwn yn dod o'ch Cyfrif Google</translation>
 <translation id="6935082727755903526">Swyddi Cyfrifeg a Chyllid</translation>
@@ -3342,6 +3346,7 @@
 <translation id="7003322000677139268">Rhannau ac Ategolion Cerbydau</translation>
 <translation id="7004499039102548441">Tabiau Diweddar</translation>
 <translation id="7006930604109697472">Anfon beth bynnag</translation>
+<translation id="7009364359744329733">Nid yw'r cerdyn hwn ar gael ar hyn o bryd. Rhowch gynnig arni'n nes ymlaen</translation>
 <translation id="7010658264061801199">Bwyd a Diod</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Yn gallu gofyn am gloi a defnyddio'ch llygoden</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 95b19a2..3b49ab6 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">automatisk integreret billede</translation>
 <translation id="1100782917270858593">Knappen Genoptag din søgning – tryk på Enter for at genoptage din søgning og se relevant aktivitet i din Chrome-historik</translation>
 <translation id="1101672080107056897">Fejlhandling</translation>
+<translation id="1101902632743388185">Dine sammenligningstabeller</translation>
 <translation id="1104409666019087579">Nogle obligatoriske felter er tomme. Udfyld dem, inden du gemmer.</translation>
 <translation id="1104860668737945357">Knappen Administrer adgangskoder, aktivér for at se og administrere dine adgangskoder i Chrome-indstillingerne</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -460,6 +461,7 @@
 <translation id="1777422078676229054">Foto (arkiv)</translation>
 <translation id="1778646502362731194">JIS B0</translation>
 <translation id="1785118555253503473">Vil du installere webapps?</translation>
+<translation id="1791415068765905273">Vis alle sammenligningstabeller</translation>
 <translation id="1791429645902722292">Google Smart Lock</translation>
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, tryk på Tab-tasten efterfulgt af Enter for hurtigt at administrere dine oplysninger, dit privatliv og beskyttelsen på din Google-konto</translation>
 <translation id="1793631236004319016">Senest brugt for <ph name="NUM_HOURS_MINUTES_SECONDS" /> siden</translation>
@@ -583,6 +585,7 @@
 <translation id="2025186561304664664">Proxyen konfigureres automatisk.</translation>
 <translation id="2025891858974379949">Usikkert indhold</translation>
 <translation id="2027465737841872819">Plast</translation>
+<translation id="2027707238798802149">Kortet er ikke tilgængeligt</translation>
 <translation id="2029735183873159415">Slægtsforskning og slægtshistorie</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Tjekke din proxy og din firewall<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Genvejen kan ikke være den samme som søgeordet til standardsøgemaskinen, som er defineret af <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +869,7 @@
 <translation id="2514548229949738417">Hus og have</translation>
 <translation id="2515629240566999685">Tjekke signalet i dit område</translation>
 <translation id="2515761554693942801">Du har valgt at verificere med Touch ID på websites, der anvender <ph name="PROVIDER_ORIGIN" />. Denne udbyder har muligvis gemt oplysninger om din betalingsmetode. Du kan <ph name="LINK_TEXT" /> af disse oplysninger.</translation>
+<translation id="2518584823165598232">Dette kort er ikke tilgængeligt. Kontakt din kortudsteder.</translation>
 <translation id="2521385132275182522">Hæftning nederst til højre</translation>
 <translation id="2521736961081452453">Opret formular</translation>
 <translation id="2523886232349826891">Gemmes kun på denne enhed</translation>
@@ -2194,6 +2198,7 @@
 <translation id="4918221908152712722">Installer <ph name="APP_NAME" /> (kræver ikke download)</translation>
 <translation id="4920457992177678649">Ferieboliger og korttidslejemål</translation>
 <translation id="4920710383559189047">Omslag</translation>
+<translation id="4920921410507315601">Sammenligningstabeller</translation>
 <translation id="4922104989726031751">Hvis du vil bruge Adgangs­kode­admin­istrator sammen med dit operativsystem, skal du genstarte Chromium og give adgang til Adgangs­kode­admin­istrator på din computer. Dine faner åbnes igen, når du har genstartet.</translation>
 <translation id="4923459931733593730">Betaling</translation>
 <translation id="4926049483395192435">Skal angives.</translation>
@@ -2387,6 +2392,7 @@
 <translation id="5278778426231952189">Upload nu</translation>
 <translation id="5279286380302340275">Administrer downloads</translation>
 <translation id="5280963125494874678">webapps</translation>
+<translation id="5282008206326321696">{count,plural, =0{# bogmærker}=1{# bogmærke}one{# bogmærke}other{# bogmærker}}</translation>
 <translation id="5283044957620376778">B1</translation>
 <translation id="5284295735376057059">Dokumentegenskaber</translation>
 <translation id="528468243742722775">Afslut</translation>
@@ -2581,6 +2587,7 @@
 <translation id="561165882404867731">Oversæt denne side med Google Oversæt</translation>
 <translation id="5612720917913232150"><ph name="URL" /> anmoder om at anvende computerens placering</translation>
 <translation id="5614520971155863709">Kortspil</translation>
+<translation id="5617785978844309968">Vis alle sammenligningstabeller</translation>
 <translation id="5617949217645503996"><ph name="HOST_NAME" /> omdirigerede dig for mange gange.</translation>
 <translation id="5619721953841297650">Forindstilling</translation>
 <translation id="5624120631404540903">Administrer adgangskoder</translation>
@@ -3342,6 +3349,7 @@
 <translation id="7003322000677139268">Dele og tilbehør til køretøjer</translation>
 <translation id="7004499039102548441">Seneste faner</translation>
 <translation id="7006930604109697472">Send alligevel</translation>
+<translation id="7009364359744329733">Dette kort er ikke tilgængeligt lige nu. Prøv igen senere.</translation>
 <translation id="7010658264061801199">Mad og drikke</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Kan anmode om at låse og bruge din mus</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 11e2259..5c0b532 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -3289,6 +3289,7 @@
 <translation id="6925267999184670015">B+ (Nordamerika)</translation>
 <translation id="6926216138694948720">Körperschmuck und -kunst</translation>
 <translation id="692638818576287323">Gewerbefahrzeuge</translation>
+<translation id="6933282894115597956">Deine Organisation verlangt eine Anmeldung</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Mit der Standardsuchmaschine hast du die Möglichkeit, im Web zu suchen und Chrome-Funktionen zu nutzen.<ph name="END_BOLD" /> Du kannst beispielsweise über die Adressleiste oder über Bilder auf Webseiten suchen. Eine Funktion ist möglicherweise nicht verfügbar, wenn sie nicht von deiner Suchmaschine unterstützt wird.</translation>
 <translation id="6934672428414710184">Dieser Name stammt aus deinem Google-Konto</translation>
 <translation id="6935082727755903526">Buchhaltungs- und Finanzjobs</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 02861fb9..1c0feff 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">αυτόματη λειτουργία picture-in-picture</translation>
 <translation id="1100782917270858593">Κουμπί Συνέχιση της διαδρομής σας, πατήστε Enter για να συνεχίσετε τη διαδρομή σας και να δείτε σχετική δραστηριότητα στο Ιστορικό Chrome.</translation>
 <translation id="1101672080107056897">Ενέργεια σφάλματος</translation>
+<translation id="1101902632743388185">Οι πίνακες σύγκρισης</translation>
 <translation id="1104409666019087579">Ορισμένα απαιτούμενα πεδία είναι κενά. Συμπληρώστε τα πριν κάνετε αποθήκευση.</translation>
 <translation id="1104860668737945357">Κουμπί Διαχείριση κωδικών πρόσβασης, ενεργοποιήστε το για να δείτε και να διαχειριστείτε τους κωδικούς πρόσβασης στις ρυθμίσεις του Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Ο διακομιστής μεσολάβησης έχει ρυθμιστεί σε αυτόματη διαμόρφωση.</translation>
 <translation id="2025891858974379949">Μη ασφαλές περιεχόμενο</translation>
 <translation id="2027465737841872819">Πλαστικό</translation>
+<translation id="2027707238798802149">Η κάρτα δεν είναι διαθέσιμη</translation>
 <translation id="2029735183873159415">Καταγωγή και γενεαλογία</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Ελέγξτε το διακομιστή μεσολάβησης και το τείχος προστασίας<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Η συντόμευση δεν μπορεί να είναι ίδια με την προεπιλεγμένη λέξη-κλειδί του παρόχου αναζήτησης που ορίζεται από την πολιτική <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Σπίτι και κήπος</translation>
 <translation id="2515629240566999685">Ελέγξτε το σήμα στην περιοχή σας.</translation>
 <translation id="2515761554693942801">Επιλέξατε να γίνεται επαλήθευση με Touch ID σε ιστοτόπους που χρησιμοποιούν τον πάροχο <ph name="PROVIDER_ORIGIN" />. Αυτός ο πάροχος μπορεί να έχει αποθηκεύσει πληροφορίες σχετικά με τον τρόπο πληρωμής σας, τις οποίες μπορείτε να <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Αυτή η κάρτα δεν είναι διαθέσιμη. Επικοινωνήστε με τον πάροχο της κάρτας σας.</translation>
 <translation id="2521385132275182522">Συρραφή κάτω δεξιά</translation>
 <translation id="2521736961081452453">Δημιουργία φόρμας</translation>
 <translation id="2523886232349826891">Αποθηκεύτηκε μόνο σε αυτήν τη συσκευή</translation>
@@ -3293,6 +3296,7 @@
 <translation id="6925267999184670015">North American B+</translation>
 <translation id="6926216138694948720">Τέχνη σώματος</translation>
 <translation id="692638818576287323">Επαγγελματικά οχήματα</translation>
+<translation id="6933282894115597956">Ο οργανισμός σας απαιτεί να συνδεθείτε</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Η προεπιλεγμένη μηχανή αναζήτησης σάς επιτρέπει να κάνετε αναζήτηση στον ιστό και υποστηρίζει διάφορες λειτουργίες του Chrome<ph name="END_BOLD" />, όπως είναι η αναζήτηση από τη γραμμή διευθύνσεων και από εικόνες σε ιστοσελίδες. Μια λειτουργία μπορεί να μην είναι διαθέσιμη εάν η μηχανή αναζήτησης που χρησιμοποιείτε δεν την υποστηρίζει.</translation>
 <translation id="6934672428414710184">Αυτό το όνομα προέρχεται από τον Λογαριασμό σας Google</translation>
 <translation id="6935082727755903526">Θέσεις εργασίας στον χώρο της λογιστικής και των χρηματοοικονομικών</translation>
@@ -3344,6 +3348,7 @@
 <translation id="7003322000677139268">Ανταλλακτικά και αξεσουάρ οχημάτων</translation>
 <translation id="7004499039102548441">Πρόσφατες καρτέλες</translation>
 <translation id="7006930604109697472">Αποστολή ούτως ή άλλως</translation>
+<translation id="7009364359744329733">Αυτή η κάρτα δεν είναι διαθέσιμη αυτή τη στιγμή. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="7010658264061801199">Τρόφιμα και ποτά</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Μπορεί να ζητήσει να κλειδώσει και να χρησιμοποιήσει το ποντίκι σας</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 6d2e18a..62b2a93 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">imagen en imagen automática</translation>
 <translation id="1100782917270858593">Botón Reanudar recorrido: pulsa Intro para reanudar tu recorrido y ver la actividad relevante de tu historial de Chrome</translation>
 <translation id="1101672080107056897">Acción de error</translation>
+<translation id="1101902632743388185">Tus tablas comparativas</translation>
 <translation id="1104409666019087579">Algunos campos obligatorios están vacíos. Rellénalos antes de guardar.</translation>
 <translation id="1104860668737945357">Botón Gestionar contraseñas: actívalo para ver y gestionar tus contraseñas en la configuración de Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Se ha establecido que el proxy se configure automáticamente.</translation>
 <translation id="2025891858974379949">Contenido no seguro</translation>
 <translation id="2027465737841872819">Plástico</translation>
+<translation id="2027707238798802149">Tarjeta no disponible</translation>
 <translation id="2029735183873159415">Antepasados y genealogía</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Comprobar el proxy y el cortafuegos<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">El acceso directo no puede ser el mismo que la palabra clave del proveedor de búsqueda predeterminado definida por <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Casa y jardín</translation>
 <translation id="2515629240566999685">Comprobar la señal en tu zona</translation>
 <translation id="2515761554693942801">Has elegido realizar la verificación con Touch ID en sitios web que usan <ph name="PROVIDER_ORIGIN" />. Este proveedor puede haber almacenado información sobre tu método de pago, que puedes <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Esta tarjeta no está disponible. Ponte en contacto con el proveedor de tu tarjeta.</translation>
 <translation id="2521385132275182522">Grapado en la parte inferior derecha</translation>
 <translation id="2521736961081452453">Crear formulario</translation>
 <translation id="2523886232349826891">Solo se guardará en este dispositivo</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Piezas y accesorios para vehículos</translation>
 <translation id="7004499039102548441">Pestañas recientes</translation>
 <translation id="7006930604109697472">Enviar de todos modos</translation>
+<translation id="7009364359744329733">La tarjeta no está disponible en estos momentos. Inténtalo de nuevo más tarde.</translation>
 <translation id="7010658264061801199">Comida y bebida</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Puede solicitar permiso para bloquear y usar tu ratón</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index 01e3dbe..114b3fe 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">pantalla superposta automática</translation>
 <translation id="1100782917270858593">Botón para retomar o percorrido. Para retomar o percorrido e ver a actividade relevante do teu historial de Chrome, preme Introducir</translation>
 <translation id="1101672080107056897">Acción incorrecta</translation>
+<translation id="1101902632743388185">As túas táboas de comparación</translation>
 <translation id="1104409666019087579">Algúns campos obrigatorios están en branco. Cúbreos antes de gardar o formulario.</translation>
 <translation id="1104860668737945357">Botón para xestionar os contrasinais. Actívao para ver e xestionar os teus contrasinais na configuración de Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">O proxy está establecido como configurado automaticamente.</translation>
 <translation id="2025891858974379949">Contido inseguro</translation>
 <translation id="2027465737841872819">Plástico</translation>
+<translation id="2027707238798802149">A tarxeta non está dispoñible</translation>
 <translation id="2029735183873159415">Ascendencia e xenealoxía</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Comprobar o proxy e o firewall<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">O atallo non pode ser igual que a palabra clave do provedor de busca predeterminado definida por <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Casa e xardín</translation>
 <translation id="2515629240566999685">Comprobar o sinal da túa zona</translation>
 <translation id="2515761554693942801">Escolliches verificar a túa identidade con Touch ID nos sitios web que usan <ph name="PROVIDER_ORIGIN" />. É posible que este provedor almacenase información sobre o teu método de pago. Podes <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Esta tarxeta non está dispoñible. Fala co provedor de tarxetas.</translation>
 <translation id="2521385132275182522">Grampa na parte inferior dereita</translation>
 <translation id="2521736961081452453">Crear formulario</translation>
 <translation id="2523886232349826891">Gardada só neste dispositivo</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Pezas e accesorios para vehículos</translation>
 <translation id="7004499039102548441">Pestanas recentes</translation>
 <translation id="7006930604109697472">Enviar de todas formas</translation>
+<translation id="7009364359744329733">A tarxeta non está dispoñible nestes intres. Téntao de novo máis tarde.</translation>
 <translation id="7010658264061801199">Comida e bebida</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Podes pedir permiso para bloquear e usar o rato</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 42a194b..e6bb758 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">ઑટોમૅટિક રીતે ચિત્ર-માં-ચિત્ર મોડ</translation>
 <translation id="1100782917270858593">તમારો પ્રવાસ ફરી શરૂ કરવાનું બટન, તમારો પ્રવાસ ફરી શરૂ કરવા અને તમારા Chrome ઇતિહાસમાં સંબંધિત પ્રવૃત્તિ જોવા માટે Enter કી દબાવો</translation>
 <translation id="1101672080107056897">ક્રિયામાં ભૂલ</translation>
+<translation id="1101902632743388185">તમારા સરખામણીના ટેબલ</translation>
 <translation id="1104409666019087579">ફરજિયાત ભરવા માટેના કેટલાક ફીલ્ડ ખાલી છે. સાચવતા પહેલાં તેને ભરો.</translation>
 <translation id="1104860668737945357">'પાસવર્ડ મેનેજ કરો' બટન, Chrome સેટિંગમાં તમારા પાસવર્ડ જોવા અને તેમને મેનેજ કરવા માટે સક્રિય કરો</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">પ્રૉક્સીને ઑટો ગોઠવણી મોડ પર સેટ કરાઈ છે.</translation>
 <translation id="2025891858974379949">અસુરક્ષિત કન્ટેન્ટ</translation>
 <translation id="2027465737841872819">પ્લાસ્ટિક</translation>
+<translation id="2027707238798802149">કાર્ડ ઉપલબ્ધ નથી</translation>
 <translation id="2029735183873159415">કુળ અને વંશવેલો</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />પ્રૉક્સી અને ફાયરવૉલ ચેક કરવાનો પ્રયાસ કરો<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426"><ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /> દ્વારા વ્યાખ્યાયિત ડિફૉલ્ટ શોધ પ્રદાતાના કીવર્ડ અને શૉર્ટકટમાંનું લખાણ, બન્ને એક સરખું ન હોઈ શકે: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">ઘર અને બગીચો</translation>
 <translation id="2515629240566999685">તમારા વિસ્તારમાં સિગ્નલ તપાસીને</translation>
 <translation id="2515761554693942801">તમે <ph name="PROVIDER_ORIGIN" />નો ઉપયોગ કરતી વેબસાઇટ પર ટચ ID વડે ચકાસણી કરવાનું પસંદ કર્યું છે. આ પ્રદાતાએ તમારી ચુકવણી પદ્ધતિ વિશેની માહિતી કદાચ સ્ટોર કરી હોઈ શકે છે, જેને તમે <ph name="LINK_TEXT" /> કરી શકો છો.</translation>
+<translation id="2518584823165598232">આ કાર્ડ ઉપલબ્ધ નથી. કૃપા કરીને તમારા કાર્ડના પ્રદાતાનો સંપર્ક કરો.</translation>
 <translation id="2521385132275182522">નીચે જમણી બાજુએ સ્ટેપલ લાગાવો</translation>
 <translation id="2521736961081452453">ફોર્મ બનાવો</translation>
 <translation id="2523886232349826891">કાર્ડની માહિતીને માત્ર આ ડિવાઇસ પર સાચવવામાં આવી છે</translation>
@@ -3343,6 +3346,7 @@
 <translation id="7003322000677139268">વાહનના પાર્ટ અને ઍક્સેસરી</translation>
 <translation id="7004499039102548441">તાજેતરના ટૅબ્સ</translation>
 <translation id="7006930604109697472">કોઈપણ રીતે મોકલો</translation>
+<translation id="7009364359744329733">આ કાર્ડ અત્યારે ઉપલબ્ધ નથી. કૃપા કરીને પછીથી ફરી પ્રયાસ કરો.</translation>
 <translation id="7010658264061801199">ભોજન અને પીણાં</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">લૉક કરવા માટે પૂછી શકે છે અને તમારા માઉસનો ઉપયોગ કરી શકે છે</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index 4623a00..1e1cd5b 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -3303,6 +3303,7 @@
 <translation id="6925267999184670015">B+ (Հյուսիսային Ամերիկա)</translation>
 <translation id="6926216138694948720">Բոդի արտ</translation>
 <translation id="692638818576287323">Կոմերցիոն փոխադրամիջոցներ</translation>
+<translation id="6933282894115597956">Ձեր կազմակերպության կողմից պահանջվում է մուտք գործել հաշիվ</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Կանխադրված որոնողական համակարգը թույլ է տալիս որոնել համացանցում և աջակցում է Chrome-ի այնպիսի գործառույթներ<ph name="END_BOLD" />, ինչպիսիք են որոնումը հասցեագոտուց և պատկերների միջոցով վեբ էջերում։ Գործառույթը կարող է հասանելի չլինել, եթե ձեր որոնողական համակարգը չի աջակցում այն։</translation>
 <translation id="6934672428414710184">Այս անունը վերցված է ձեր Google հաշվից</translation>
 <translation id="6935082727755903526">Աշխատանք հաշվապահության և ֆինանսների ոլորտում</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index e76dc0c..dfbf0c2 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">picture-in-picture otomatis</translation>
 <translation id="1100782917270858593">Tombol Lanjutkan perjalanan Anda, tekan Enter untuk melanjutkan perjalanan Anda dan melihat aktivitas yang relevan di histori Chrome Anda</translation>
 <translation id="1101672080107056897">Tindakan error</translation>
+<translation id="1101902632743388185">Tabel perbandingan Anda</translation>
 <translation id="1104409666019087579">Beberapa kolom wajib diisi masih kosong. Isi kolom sebelum menyimpan.</translation>
 <translation id="1104860668737945357">Tombol Kelola sandi, aktifkan untuk melihat dan mengelola sandi Anda di setelan Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -584,6 +585,7 @@
 <translation id="2025186561304664664">Proxy disetel ke konfigurasi otomatis.</translation>
 <translation id="2025891858974379949">Konten tidak aman</translation>
 <translation id="2027465737841872819">Plastik</translation>
+<translation id="2027707238798802149">Kartu tidak tersedia</translation>
 <translation id="2029735183873159415">Garis Keturunan &amp; Genealogi</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Memeriksa proxy dan firewall<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Pintasan tidak boleh sama dengan kata kunci penyedia penelusuran default yang ditentukan oleh <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -867,6 +869,7 @@
 <translation id="2514548229949738417">Rumah &amp; Taman</translation>
 <translation id="2515629240566999685">Periksa sinyal di area Anda</translation>
 <translation id="2515761554693942801">Anda memilih untuk memverifikasi dengan Touch ID di situs yang menggunakan <ph name="PROVIDER_ORIGIN" />. Penyedia ini mungkin telah menyimpan informasi tentang metode pembayaran Anda, yang dapat Anda <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Kartu ini tidak tersedia. Hubungi penyedia kartu Anda.</translation>
 <translation id="2521385132275182522">Jepretan di kanan bawah</translation>
 <translation id="2521736961081452453">Buat formulir</translation>
 <translation id="2523886232349826891">Hanya disimpan di perangkat ini</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Suku Cadang &amp; Aksesori Kendaraan</translation>
 <translation id="7004499039102548441">Tab Terbaru</translation>
 <translation id="7006930604109697472">Tetap kirim</translation>
+<translation id="7009364359744329733">Kartu tidak tersedia untuk saat ini. Coba lagi nanti.</translation>
 <translation id="7010658264061801199">Makanan &amp; Minuman</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Dapat meminta untuk mengunci dan menggunakan mouse Anda</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index a1e2523..19fc342 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -3294,6 +3294,7 @@
 <translation id="6925267999184670015">B+ fyrir Norður Ameríku</translation>
 <translation id="6926216138694948720">Líkamsskreyting</translation>
 <translation id="692638818576287323">Flutningabifreiðir</translation>
+<translation id="6933282894115597956">Fyrirtækið þitt/stofnunin þín krefst innskráningar</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Sjálfgefin leitarvél gerir þér kleift að leita á netinu og knýr Chrome-eiginleika<ph name="END_BOLD" /> á borð við að leita frá veffangastikunni og út frá myndum á vefsíðum. Eiginleiki er hugsanlega ekki í boði ef leitarvélin styður hann ekki.</translation>
 <translation id="6934672428414710184">Þetta nafn kemur af Google reikningnum þínum</translation>
 <translation id="6935082727755903526">Störf við bókhald og fjármál</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index e2f1cc2b..db1f1c8a 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">הפעלה אוטומטית של 'תמונה בתוך תמונה'</translation>
 <translation id="1100782917270858593">‏הלחצן להמשך התהליך, מקישים על Enter כדי להמשיך בתהליך ולהציג את הפעילות הרלוונטית בהיסטוריה ב-Chrome</translation>
 <translation id="1101672080107056897">פעולת שגיאה</translation>
+<translation id="1101902632743388185">טבלאות ההשוואה שלך</translation>
 <translation id="1104409666019087579">יש כמה שדות חובה ריקים. עליך למלא אותם לפני השמירה.</translation>
 <translation id="1104860668737945357">‏הלחצן לניהול סיסמאות, מפעילים אותו כדי להציג ולנהל את הסיסמאות בהגדרות Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">‏שרת Proxy נקבע למוגדר אוטומטית.</translation>
 <translation id="2025891858974379949">תוכן לא מאובטח</translation>
 <translation id="2027465737841872819">Plastic</translation>
+<translation id="2027707238798802149">הכרטיס לא זמין</translation>
 <translation id="2029735183873159415">חקר יוחסין וגניאלוגיה</translation>
 <translation id="2032962459168915086">‏<ph name="BEGIN_LINK" />לבדוק את שרת ה-Proxy ואת חומת האש<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">קיצור הדרך לא יכול להיות זהה למילת המפתח של ספק החיפוש שהוגדרה כברירת המחדל על ידי <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />:‏ <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">בית וגן</translation>
 <translation id="2515629240566999685">לבדוק את האות באזור שלך</translation>
 <translation id="2515761554693942801">‏בחרת לבצע אימות באמצעות Touch ID באתרים שמשתמשים ב-<ph name="PROVIDER_ORIGIN" />. יכול להיות שהספק הזה אחסן מידע על אמצעי התשלום שלך, שאותו אפשר <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">הכרטיס הזה לא זמין. עליך לפנות לספק הכרטיס שלך.</translation>
 <translation id="2521385132275182522">סיכת הידוק בפינה הימנית התחתונה</translation>
 <translation id="2521736961081452453">יצירת טופס</translation>
 <translation id="2523886232349826891">הכרטיס יישמר רק במכשיר הזה</translation>
@@ -3347,6 +3350,7 @@
 <translation id="7003322000677139268">חלקי חילוף ואביזרים לרכב</translation>
 <translation id="7004499039102548441">כרטיסיות אחרונות</translation>
 <translation id="7006930604109697472">לשליחה בכל זאת</translation>
+<translation id="7009364359744329733">הכרטיס הזה לא זמין כרגע. אפשר לנסות שוב אחר כך.</translation>
 <translation id="7010658264061801199">אוכל ומשקאות</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">אתרים יכולים לבקש לנעול את העכבר ולהשתמש בו</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index eb1d9fa6..e465f7e 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">ピクチャー イン ピクチャーの自動開始</translation>
 <translation id="1100782917270858593">[ジャーニーを再開] ボタンです。Enter キーを押すと、ジャーニーを再開して、Chrome 履歴で関連するアクティビティを確認できます</translation>
 <translation id="1101672080107056897">エラー アクション</translation>
+<translation id="1101902632743388185">比較表</translation>
 <translation id="1104409666019087579">一部の必須項目が空白です。保存する前に入力してください。</translation>
 <translation id="1104860668737945357">[パスワードを管理] ボタンです。実行すると、Chrome の設定でパスワードを表示、管理できます</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">プロキシは自動設定になっています。</translation>
 <translation id="2025891858974379949">安全でないコンテンツ</translation>
 <translation id="2027465737841872819">プラスチック</translation>
+<translation id="2027707238798802149">使用できないカード</translation>
 <translation id="2029735183873159415">先祖、家系</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />プロキシとファイアウォールを確認する<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426"><ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /> で定義されたデフォルトの検索プロバイダのキーワードと同じショートカットを指定することはできません: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">住まい、園芸</translation>
 <translation id="2515629240566999685">電波状況を確認する</translation>
 <translation id="2515761554693942801"><ph name="PROVIDER_ORIGIN" /> を使用するウェブサイトで Touch ID による確認を行うよう選択しています。このプロバイダにお支払い方法に関する情報が保存されている可能性があります。その場合、<ph name="LINK_TEXT" /> を行うことができます。</translation>
+<translation id="2518584823165598232">このカードは使用できません。カード発行会社にお問い合わせください。</translation>
 <translation id="2521385132275182522">ステープル(右下)</translation>
 <translation id="2521736961081452453">フォームを作成</translation>
 <translation id="2523886232349826891">カードはこのデバイスのみに保存されます</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">自動車部品、アクセサリー</translation>
 <translation id="7004499039102548441">最近使ったタブ</translation>
 <translation id="7006930604109697472">このまま送信</translation>
+<translation id="7009364359744329733">このカードは現在使用できません。しばらくしてからもう一度お試しください。</translation>
 <translation id="7010658264061801199">食品、飲料</translation>
 <translation id="7012363358306927923">中国銀聯</translation>
 <translation id="7013835112918108252">マウスのロックと使用を要求できます</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 3a758f4..936f0a64 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">ಸ್ವಯಂಚಾಲಿತ ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಮೋಡ್</translation>
 <translation id="1100782917270858593">ನಿಮ್ಮ ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಲು ಮತ್ತು ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ನಿಮ್ಮ ಪ್ರಯಾಣದ ಬಟನ್ ಅನ್ನು ಪುನರಾರಂಭಿಸಿ, Enter ಒತ್ತಿ</translation>
 <translation id="1101672080107056897">ದೋಷ ಕ್ರಿಯೆ</translation>
+<translation id="1101902632743388185">ನಿಮ್ಮ ಹೋಲಿಕೆ ಟೇಬಲ್‌ಗಳು</translation>
 <translation id="1104409666019087579">ಅಗತ್ಯವಿರುವ ಕೆಲವು ಕ್ಷೇತ್ರಗಳು ಖಾಲಿ ಇವೆ. ಉಳಿಸುವ ಮೊದಲು ಅವುಗಳನ್ನು ಭರ್ತಿ ಮಾಡಿ.</translation>
 <translation id="1104860668737945357">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ ಬಟನ್, Chrome ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -582,6 +583,7 @@
 <translation id="2025186561304664664">ಪ್ರಾಕ್ಸಿಯನ್ನು ಸ್ವಯಂ ಕಾನ್ಫಿಗರ್ ಆಗಿ ಹೊಂದಿಸಲಾಗಿದೆ.</translation>
 <translation id="2025891858974379949">ಅಸುರಕ್ಷಿತ ಕಂಟೆಂಟ್‍</translation>
 <translation id="2027465737841872819">ಪ್ಲಾಸ್ಟಿಕ್</translation>
+<translation id="2027707238798802149">ಕಾರ್ಡ್ ಲಭ್ಯವಿಲ್ಲ</translation>
 <translation id="2029735183873159415">ಪೂರ್ವಜರು ಮತ್ತು ವಂಶಾವಳಿ</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />ಪ್ರಾಕ್ಸಿ ಮತ್ತು ಫೈರ್‌ವಾಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">ಶಾರ್ಟ್‌ಕಟ್ <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /> ದಿಂದ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ಪೂರೈಕೆದಾರರ ಕೀವರ್ಡ್‌ನಂತೆಯೇ ಇರುವಂತಿಲ್ಲ:<ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">ಗೃಹ ಮತ್ತು ಉದ್ಯಾನ</translation>
 <translation id="2515629240566999685">ನಿಮ್ಮ ಪ್ರದೇಶದಲ್ಲಿನ ಸಿಗ್ನಲ್ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2515761554693942801">ನೀವು <ph name="PROVIDER_ORIGIN" /> ಬಳಸುವ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ಸ್ಪರ್ಶ ID ಯ ಮೂಲಕ ದೃಢೀಕರಿಸುವ ಆಯ್ಕೆಯನ್ನು ಮಾಡಿದ್ದೀರಿ. ಈ ಪೂರೈಕೆದಾರರು ನಿಮ್ಮ ಪಾವತಿ ವಿಧಾನದ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಿಟ್ಟಿರಬಹುದು, ನೀವು ಅದನ್ನು <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">ಈ ಕಾರ್ಡ್ ಲಭ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಕಾರ್ಡ್ ಪೂರೈಕೆದಾರರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="2521385132275182522">ಕೆಳಗಿನ ಬಲಭಾಗದಲ್ಲಿ ಸ್ಟೇಪಲ್ ಹಾಕಿ</translation>
 <translation id="2521736961081452453">ಫಾರ್ಮ್ ಆನ್ನು ರಚಿಸಿ</translation>
 <translation id="2523886232349826891">ಈ ಸಾಧನದಲ್ಲಿ ಮಾತ್ರ ಸೇವ್ ಮಾಡಲಾಗಿದೆ</translation>
@@ -3339,6 +3342,7 @@
 <translation id="7003322000677139268">ವಾಹನದ ಬಿಡಿಭಾಗಗಳು ಮತ್ತು ಆ್ಯಕ್ಸೆಸ್ಸರಿಗಳು</translation>
 <translation id="7004499039102548441">ಇತ್ತೀಚಿನ ಟ್ಯಾಬ್‌ಗಳು</translation>
 <translation id="7006930604109697472">ಹೇಗಾದರೂ ಕಳುಹಿಸಿ</translation>
+<translation id="7009364359744329733">ಈ ಕಾರ್ಡ್ ಈಗ ಲಭ್ಯವಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="7010658264061801199">ಆಹಾರ ಮತ್ತು ಪಾನೀಯ</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">ನಿಮ್ಮ ಮೌಸ್ ಅನ್ನು ಲಾಕ್ ಮಾಡಲು ಮತ್ತು ಬಳಸಲು ಕೇಳಬಹುದು</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 728f4363..5de9b5e1 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">자동 PIP 모드</translation>
 <translation id="1100782917270858593">탐색 여정 재개 버튼, 탐색 여정을 재개하고 Chrome 방문 기록에서 관련 활동을 보려면 Enter를 누르세요</translation>
 <translation id="1101672080107056897">오류 작업</translation>
+<translation id="1101902632743388185">비교 표</translation>
 <translation id="1104409666019087579">일부 필수 입력란이 비어 있습니다. 저장하기 전에 필수 입력란을 작성하세요.</translation>
 <translation id="1104860668737945357">비밀번호 관리 버튼, Chrome 설정에서 비밀번호를 확인하고 관리하려면 활성화하세요.</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">프록시가 자동 설정되도록 지정됩니다.</translation>
 <translation id="2025891858974379949">안전하지 않은 콘텐츠</translation>
 <translation id="2027465737841872819">플라스틱</translation>
+<translation id="2027707238798802149">카드를 사용할 수 없음</translation>
 <translation id="2029735183873159415">조상 찾기 및 족보</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />프록시 및 방화벽 확인<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">바로가기는 <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />에서 정의한 기본 검색 공급자 키워드와 같을 수 없습니다. <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">주택/조경</translation>
 <translation id="2515629240566999685">현재 지역의 신호 확인</translation>
 <translation id="2515761554693942801"><ph name="PROVIDER_ORIGIN" /> 주소를 사용하는 웹사이트의 인증 방식으로 Touch ID를 선택했습니다. 이 제공업체에서 내 결제 수단 정보를 저장했을 수 있으며 직접 <ph name="LINK_TEXT" />할 수 있습니다.</translation>
+<translation id="2518584823165598232">이 카드는 사용할 수 없습니다. 카드 제공업체에 문의해 주세요.</translation>
 <translation id="2521385132275182522">오른쪽 하단 스테이플</translation>
 <translation id="2521736961081452453">양식 만들기</translation>
 <translation id="2523886232349826891">이 기기에만 저장됨</translation>
@@ -3291,6 +3294,7 @@
 <translation id="6925267999184670015">북미 B+</translation>
 <translation id="6926216138694948720">바디아트</translation>
 <translation id="692638818576287323">상업용 차량</translation>
+<translation id="6933282894115597956">조직에서 로그인을 요구합니다</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />기본 검색엔진을 사용하면 웹을 검색할 수 있으며 Chrome 기능<ph name="END_BOLD" />(예: 주소 표시줄 및 웹페이지의 이미지 검색)을 사용할 수 있습니다. 선택한 검색엔진에서 지원하지 않는 기능은 사용하지 못할 수도 있습니다.</translation>
 <translation id="6934672428414710184">Google 계정에 등록된 이름입니다.</translation>
 <translation id="6935082727755903526">회계 및 금융직</translation>
@@ -3342,6 +3346,7 @@
 <translation id="7003322000677139268">차량 부품 및 액세서리</translation>
 <translation id="7004499039102548441">최근 탭</translation>
 <translation id="7006930604109697472">무시하고 보내기</translation>
+<translation id="7009364359744329733">현재 이 카드를 사용할 수 없습니다. 나중에 다시 시도해 주세요.</translation>
 <translation id="7010658264061801199">식음료</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">마우스 잠금 및 사용을 요청할 수 있음</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 4156cb0..a36ecf3 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">režīma “Attēls attēlā” automātiska aktivizēšana</translation>
 <translation id="1100782917270858593">Poga Atsākt meklēšanas ceļu. Lai atsāktu meklēšanas ceļu un skatītu atbilstošās darbības savā Chrome vēsturē, nospiediet taustiņu Enter.</translation>
 <translation id="1101672080107056897">Darbība pēc kļūdas konstatēšanas</translation>
+<translation id="1101902632743388185">Jūsu salīdzinājuma tabulas</translation>
 <translation id="1104409666019087579">Daži obligātie lauki ir tukši. Pirms saglabāšanas aizpildiet tos.</translation>
 <translation id="1104860668737945357">Poga “Pārvaldīt paroles”. Aktivizējiet, lai Chrome iestatījumos skatītu un pārvaldītu paroles.</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Starpniekserverim ir iestatīta autokonfigurācija.</translation>
 <translation id="2025891858974379949">Nedrošs saturs</translation>
 <translation id="2027465737841872819">Plastmasa</translation>
+<translation id="2027707238798802149">Karte nav pieejama</translation>
 <translation id="2029735183873159415">Priekšteči un ģenealoģija</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Pārbaudiet starpniekserveri un ugunsmūri<ph name="END_LINK" />.</translation>
 <translation id="2033900728810589426">Saīsne nedrīkst būt tāda pati kā noklusējuma meklētājprogrammas atslēgvārds, kas definēts politikā <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Māja un dārzs</translation>
 <translation id="2515629240566999685">Pārbaudiet signālu savā apkaimē.</translation>
 <translation id="2515761554693942801">Jūs izvēlējāties veikt verifikāciju ar Touch ID tīmekļa vietnēs, kas izmanto <ph name="PROVIDER_ORIGIN" /> pakalpojumus. Šis pakalpojumu sniedzējs, iespējams, ir saglabājis informāciju par jūsu maksājuma veidu, un jūs varat <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Šī karte nav pieejama. Lūdzu, sazinieties ar kartes izsniedzēju.</translation>
 <translation id="2521385132275182522">Skavojums apakšējā labajā malā</translation>
 <translation id="2521736961081452453">Izveidot veidlapu</translation>
 <translation id="2523886232349826891">Tiks saglabāta tikai šajā ierīcē</translation>
@@ -3340,6 +3343,7 @@
 <translation id="7003322000677139268">Transportlīdzekļu daļas un piederumi</translation>
 <translation id="7004499039102548441">Nesen atvērtas cilnes</translation>
 <translation id="7006930604109697472">Tomēr sūtīt</translation>
+<translation id="7009364359744329733">Virtuālā karte pašlaik nav pieejama. Lūdzu, vēlāk mēģiniet vēlreiz.</translation>
 <translation id="7010658264061801199">Pārtika un dzērieni</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Var lūgt bloķēt un izmantot peli</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 22075f64..6673835 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">автомат дэлгэц доторх дэлгэц</translation>
 <translation id="1100782917270858593">Аяллаа үргэлжлүүлэх товчлуур, аяллаа үргэлжлүүлэх болон Chrome-н түүхдээ хамааралтай үйл ажиллагааг харахын тулд Enter дээр дарна уу</translation>
 <translation id="1101672080107056897">Алдаа гарахад хийх үйлдэл</translation>
+<translation id="1101902632743388185">Таны харьцуулалтын хүснэгт</translation>
 <translation id="1104409666019087579">Зарим заавал бөглөх хэсэг хоосон байна. Хадгалахаасаа өмнө тэдгээрийг бөглөнө үү.</translation>
 <translation id="1104860668737945357">Нууц үгнүүд удирдах товчлуур, Chrome-н тохиргоонд нууц үгнүүдээ харах болон удирдахын тулд идэвхжүүлнэ үү</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Поксиг авто-тохиргоонд тохируулсан.</translation>
 <translation id="2025891858974379949">Аюултай контент</translation>
 <translation id="2027465737841872819">Хуванцар</translation>
+<translation id="2027707238798802149">Карт боломжгүй байна</translation>
 <translation id="2029735183873159415">Удам угсаа, гарал судлал</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Прокси болон галт ханыг шалгаж байна<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Товчлол нь <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />-с тодорхойлсон өгөгдмөл хайлтын үйлчилгээ үзүүлэгчийн түлхүүр үгтэй ижил байх боломжгүй: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Гэр, цэцэрлэг</translation>
 <translation id="2515629240566999685">Таны байгаа газрын дохиог шалгаж байна</translation>
 <translation id="2515761554693942801">Та <ph name="PROVIDER_ORIGIN" />-г ашигладаг вебсайтууд дээр Touch ID-р баталгаажуулахаар сонгосон. Энэ үйлчилгээ үзүүлэгч таны төлбөрийн хэрэгслийн талаарх мэдээллийг хадгалсан байж болзошгүй бөгөөд та <ph name="LINK_TEXT" /> боломжтой.</translation>
+<translation id="2518584823165598232">Энэ карт боломжгүй байна. Карт олгогчтойгоо холбогдоно уу.</translation>
 <translation id="2521385132275182522">Баруун доод буланд үдэх</translation>
 <translation id="2521736961081452453">Маягт үүсгэх</translation>
 <translation id="2523886232349826891">Зөвхөн энэ төхөөрөмж дээр хадгалсан</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Тээврийн хэрэгслийн сэлбэг, дагалдах хэрэгслүүд</translation>
 <translation id="7004499039102548441">Саяхан нээсэн табууд</translation>
 <translation id="7006930604109697472">Ямар ч байсан илгээх</translation>
+<translation id="7009364359744329733">Энэ карт яг одоо боломжгүй байна. Дараа дахин оролдоно уу.</translation>
 <translation id="7010658264061801199">Хоол, уух зүйлс</translation>
 <translation id="7012363358306927923">Хятадын UnionPay</translation>
 <translation id="7013835112918108252">Таны хулганыг түгжиж, ашиглахыг хүсэх боломжтой</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index a54f8ddb..7a39cd1 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">ਸਵੈਚਲਿਤ ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ</translation>
 <translation id="1100782917270858593">'ਆਪਣੇ ਖੋਜ ਸਫ਼ਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ' ਬਟਨ, ਆਪਣੇ ਖੋਜ ਸਫ਼ਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਅਤੇ ਆਪਣੇ Chrome ਇਤਿਹਾਸ ਵਿੱਚ ਢੁਕਵੀਂ ਸਰਗਰਮੀ ਦੇਖਣ ਲਈ Enter ਦਬਾਓ</translation>
 <translation id="1101672080107056897">ਗੜਬੜ ਕਾਰਵਾਈ</translation>
+<translation id="1101902632743388185">ਤੁਹਾਡੀਆਂ ਤੁਲਨਾ ਸਾਰਨੀਆਂ</translation>
 <translation id="1104409666019087579">ਕੁਝ ਲੋੜੀਂਦੇ ਖੇਤਰ ਖਾਲੀ ਹਨ। ਰੱਖਿਅਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਨ੍ਹਾਂ ਨੂੰ ਭਰੋ।</translation>
 <translation id="1104860668737945357">'ਪਾਸਵਰਡਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ' ਬਟਨ, Chrome ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਆਪਣੇ ਪਾਸਵਰਡ ਦੇਖਣ ਅਤੇ ਉਨ੍ਹਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਇਸਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੋ</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">ਪ੍ਰੌਕਸੀ ਨੂੰ ਸਵੈ ਸੰਰੂਪਿਤ 'ਤੇ ਸੈਟ ਕੀਤਾ ਗਿਆ ਹੈ।</translation>
 <translation id="2025891858974379949">ਅਸੁਰੱਖਿਅਤ ਸਮੱਗਰੀ</translation>
 <translation id="2027465737841872819">ਪਲਾਸਟਿਕ</translation>
+<translation id="2027707238798802149">ਕਾਰਡ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation>
 <translation id="2029735183873159415">ਖਾਨਦਾਨ ਅਤੇ ਬੰਸਾਵਲੀ</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />ਪ੍ਰੌਕਸੀ ਅਤੇ ਫ਼ਾਇਰਵਾਲ ਦੀ ਜਾਂਚ ਕਰੋ<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">ਸ਼ਾਰਟਕੱਟ ਅਤੇ <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /> ਵੱਲੋਂ ਪਰਿਭਾਸ਼ਿਤ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਖੋਜ ਪ੍ਰਦਾਨਕ ਪ੍ਰਮੁੱਖ-ਸ਼ਬਦ ਇੱਕੋ ਜਿਹੇ ਨਹੀਂ ਹੋ ਸਕਦੇ: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">ਘਰ ਅਤੇ ਬਾਗ</translation>
 <translation id="2515629240566999685">ਆਪਣੇ ਖੇਤਰ ਵਿੱਚ ਸਿਗਨਲ ਦੀ ਜਾਂਚ ਕਰੋ</translation>
 <translation id="2515761554693942801">ਤੁਸੀਂ <ph name="PROVIDER_ORIGIN" /> ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਲੀਆਂ ਵੈੱਬਸਾਈਟਾਂ 'ਤੇ ਸਪਰਸ਼ ਆਈਡੀ ਨਾਲ ਪੁਸ਼ਟੀ ਕਰਨਾ ਚੁਣਿਆ ਹੈ। ਇਸ ਪ੍ਰਦਾਨਕ ਨੇ ਤੁਹਾਡੀ ਭੁਗਤਾਨ ਵਿਧੀ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਟੋਰ ਕੀਤਾ ਹੋ ਸਕਦਾ ਹੈ, ਜਿਸ ਲਈ ਤੁਸੀਂ <ph name="LINK_TEXT" /> ਕਰ ਸਕਦੇ ਹੋ।</translation>
+<translation id="2518584823165598232">ਇਹ ਕਾਰਡ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਕਾਰਡ ਪ੍ਰਦਾਨਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation>
 <translation id="2521385132275182522">ਹੇਠਾਂ ਸੱਜੇ ਪਾਸੇ ਪਿੰਨ</translation>
 <translation id="2521736961081452453">ਫ਼ਾਰਮ ਬਣਾਓ</translation>
 <translation id="2523886232349826891">ਸਿਰਫ਼ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</translation>
@@ -3338,6 +3341,7 @@
 <translation id="7003322000677139268">ਵਾਹਨ ਦੇ ਪੁਰਜ਼ੇ ਅਤੇ ਐਕਸੈਸਰੀਆਂ</translation>
 <translation id="7004499039102548441">ਹਾਲੀਆ ਟੈਬਸ</translation>
 <translation id="7006930604109697472">ਫੇਰ ਵੀ ਭੇਜੋ</translation>
+<translation id="7009364359744329733">ਫ਼ਿਲਹਾਲ ਇਹ ਕਾਰਡ ਉਪਲਬਧ ਨਹੀਂ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="7010658264061801199">ਖਾਣ-ਪੀਣ</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">ਤੁਹਾਡੇ ਮਾਊਸ ਨੂੰ ਲਾਕ ਕਰਨ ਅਤੇ ਵਰਤਣ ਲਈ ਕਹਿ ਸਕਦੀ ਹੈ</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index e06140c..ab0f2ef 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">automatyczny obraz w obrazie</translation>
 <translation id="1100782917270858593">Przycisk wznawiania serii czynności; aby wznowić serię czynności i zobaczyć odpowiednią aktywność w historii Chrome, naciśnij Enter</translation>
 <translation id="1101672080107056897">Działanie w razie wystąpienia błędu</translation>
+<translation id="1101902632743388185">Twoje tabele porównawcze</translation>
 <translation id="1104409666019087579">Niektóre wymagane pola są puste. Wypełnij je przed zapisaniem.</translation>
 <translation id="1104860668737945357">Przycisk Zarządzaj hasłami; aktywuj, aby wyświetlić hasła i zarządzać nimi w ustawieniach Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Ustawiono automatyczne konfigurowanie proxy.</translation>
 <translation id="2025891858974379949">Treść niezabezpieczona</translation>
 <translation id="2027465737841872819">Plastik</translation>
+<translation id="2027707238798802149">Karta jest niedostępna</translation>
 <translation id="2029735183873159415">Pochodzenie i genealogia</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Sprawdź serwer proxy i zaporę sieciową<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Skrót nie może być taki sam jak słowo kluczowe domyślnego dostawcy wyszukiwania zdefiniowane przez zasadę <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Dom i ogród</translation>
 <translation id="2515629240566999685">Sprawdź sygnał w swojej okolicy</translation>
 <translation id="2515761554693942801">W witrynach korzystających z <ph name="PROVIDER_ORIGIN" /> potwierdzasz swoją tożsamość za pomocą Touch ID. Możliwe, że ten dostawca przechowuje dane Twojej formy płatności. Możesz <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Ta karta jest niedostępna. Skontaktuj się jej z dostawcą.</translation>
 <translation id="2521385132275182522">Zszywka w prawym dolnym rogu</translation>
 <translation id="2521736961081452453">Utwórz formularz</translation>
 <translation id="2523886232349826891">Zapisana tylko na tym urządzeniu</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Części i akcesoria motoryzacyjne</translation>
 <translation id="7004499039102548441">Ostatnie karty</translation>
 <translation id="7006930604109697472">Wyślij mimo wszystko</translation>
+<translation id="7009364359744329733">Karta jest teraz niedostępna. Spróbuj ponownie później.</translation>
 <translation id="7010658264061801199">Kulinaria</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Może poprosić o zablokowanie i używanie myszy</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 7bde2d2..bde817e 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">picture-in-picture automat</translation>
 <translation id="1100782917270858593">Butonul Continuă-ți parcursul, apasă pe Enter pentru a-ți continua parcursul și a vedea activitatea relevantă din istoricul Chrome</translation>
 <translation id="1101672080107056897">Eroare privind acțiunea</translation>
+<translation id="1101902632743388185">Tabelele tale de comparație</translation>
 <translation id="1104409666019087579">Unele câmpuri obligatorii sunt necompletate. Completează-le înainte de a salva.</translation>
 <translation id="1104860668737945357">Butonul Gestionează parolele, activează pentru a vedea și a gestiona parolele în setările Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Proxy-ul este setat la Configurat automat.</translation>
 <translation id="2025891858974379949">Conținut nesecurizat</translation>
 <translation id="2027465737841872819">Plastic</translation>
+<translation id="2027707238798802149">Cardul nu este disponibil</translation>
 <translation id="2029735183873159415">Strămoși și genealogie</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />să verifici proxy-ul și firewallul;<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Comanda rapidă nu poate fi identică cu cuvântul cheie prestabilit al furnizorului de căutare, definit de <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Casă și grădină</translation>
 <translation id="2515629240566999685">să verifici semnalul din zona ta.</translation>
 <translation id="2515761554693942801">Ai ales să confirmi cu Touch ID pe site-urile care folosesc <ph name="PROVIDER_ORIGIN" />. Este posibil ca acest furnizor să fi stocat informații despre metoda de plată, pe care le poți <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Acest card nu este disponibil. Contactează furnizorul cardului.</translation>
 <translation id="2521385132275182522">Capsare în dreapta jos</translation>
 <translation id="2521736961081452453">Creează un formular</translation>
 <translation id="2523886232349826891">Salvat numai pe acest dispozitiv</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Piese și accesorii pentru vehicule</translation>
 <translation id="7004499039102548441">File recente</translation>
 <translation id="7006930604109697472">Trimite oricum</translation>
+<translation id="7009364359744329733">Momentan, cardul nu este disponibil. Încearcă din nou mai târziu.</translation>
 <translation id="7010658264061801199">Mâncare și băutură</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Poate solicita blocarea și folosirea mouse-ului</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 1aaf0b1..6d79887a 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -3297,6 +3297,7 @@
 <translation id="6925267999184670015">North American B+</translation>
 <translation id="6926216138694948720">Bodi art</translation>
 <translation id="692638818576287323">Komercijalna vozila</translation>
+<translation id="6933282894115597956">Organizacija zahteva prijavljivanje</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Podrazumevani pretraživač vam omogućava da pretražujete veb i omogućava Chrome funkcije<ph name="END_BOLD" /> poput pretraživanja iz trake za adresu i slika na veb-stranicama. Funkcija možda nije dostupna ako je pretraživač ne podržava.</translation>
 <translation id="6934672428414710184">To je ime sa vašeg Google naloga</translation>
 <translation id="6935082727755903526">Poslovi u računovodstvu i finansijama</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index ff208167..fb8ee8d 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -3297,6 +3297,7 @@
 <translation id="6925267999184670015">North American B+</translation>
 <translation id="6926216138694948720">Боди арт</translation>
 <translation id="692638818576287323">Комерцијална возила</translation>
+<translation id="6933282894115597956">Организација захтева пријављивање</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Подразумевани претраживач вам омогућава да претражујете веб и омогућава Chrome функције<ph name="END_BOLD" /> попут претраживања из траке за адресу и слика на веб-страницама. Функција можда није доступна ако је претраживач не подржава.</translation>
 <translation id="6934672428414710184">То је име са вашег Google налога</translation>
 <translation id="6935082727755903526">Послови у рачуноводству и финансијама</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index b3b8170a..127bbad3 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">automatisk bild-i-bild</translation>
 <translation id="1100782917270858593">Knappen Återuppta sökning: tryck på Retur om du vill återuppta sökningen och se relevant aktivitet i Chrome-historiken</translation>
 <translation id="1101672080107056897">Ett fel uppstod under åtgärden</translation>
+<translation id="1101902632743388185">Dina jämförelsetabeller</translation>
 <translation id="1104409666019087579">Vissa obligatoriska fält är tomma. Fyll i dem innan du sparar.</translation>
 <translation id="1104860668737945357">Knappen Hantera lösenord: aktivera om du vill visa och hantera lösenord i inställningarna för Chrome</translation>
 <translation id="1108464073729874771">A3 x 4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Proxyn är inställd på automatisk konfiguration.</translation>
 <translation id="2025891858974379949">Osäkert innehåll</translation>
 <translation id="2027465737841872819">Plast</translation>
+<translation id="2027707238798802149">Kortet är inte tillgängligt</translation>
 <translation id="2029735183873159415">Förfäder och släktforskning</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />kontrollera proxyn och brandväggen<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Genvägen kan inte vara densamma som standardsökordet hos sökleverantören som definieras av <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Hem och trädgård</translation>
 <translation id="2515629240566999685">kontrollera mottagningen i området</translation>
 <translation id="2515761554693942801">Du har valt att verifiera dig med Touch ID på webbplatser där <ph name="PROVIDER_ORIGIN" /> används. Den här leverantören kan ha lagrat uppgifter om din betalningsmetod som du kan <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Kortet är inte tillgängligt. Kontakta kortutgivaren.</translation>
 <translation id="2521385132275182522">Häfta nere till höger</translation>
 <translation id="2521736961081452453">Skapa formulär</translation>
 <translation id="2523886232349826891">Endast sparat på den här enheten</translation>
@@ -3291,6 +3294,7 @@
 <translation id="6925267999184670015">Nordamerikansk B+</translation>
 <translation id="6926216138694948720">Kroppskonst</translation>
 <translation id="692638818576287323">Yrkesfordon</translation>
+<translation id="6933282894115597956">Inloggning krävs av organisationen</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />Med standardsökmotorn kan du söka på webben och få tillgång till Chrome-funktioner<ph name="END_BOLD" />, som att söka i adressfältet och från bilder på webbsidor. Vissa funktioner kanske inte är tillgängliga om sökmotorn inte har stöd för dem.</translation>
 <translation id="6934672428414710184">Det här namnet har hämtats från Google-kontot</translation>
 <translation id="6935082727755903526">Jobb inom redovisning och finans</translation>
@@ -3342,6 +3346,7 @@
 <translation id="7003322000677139268">Fordonsdelar och tillbehör</translation>
 <translation id="7004499039102548441">Senaste flikarna</translation>
 <translation id="7006930604109697472">Skicka ändå</translation>
+<translation id="7009364359744329733">Kortet är inte tillgängligt just nu. Försök igen senare.</translation>
 <translation id="7010658264061801199">Mat och dryck</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Kan be om tillåtelse att låsa och använda din mus</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 5c1397b..2cf05e8 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">kupachika picha ndani ya picha nyingine kiotomatiki</translation>
 <translation id="1100782917270858593">Kitufe cha 'Endelea na ziara', bonyeza 'Enter' ili uendelee na ziara yako na uone shughuli muhimu katika historia yako kwenye Chrome</translation>
 <translation id="1101672080107056897">Kitendo kinacholeta hitilafu</translation>
+<translation id="1101902632743388185">Majedwali yako ya ulinganishaji</translation>
 <translation id="1104409666019087579">Baadhi ya sehemu ambazo ni sharti zijazwe hazina chochote. Zijaze kabla ya kuhifadhi.</translation>
 <translation id="1104860668737945357">Kitufe cha 'Dhibiti manenosiri', washa ili uangalie na udhibiti manenosiri yako katika mipangilio ya Chrome</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">Proksi imewekwa katika usanidi otomatiki.</translation>
 <translation id="2025891858974379949">Maudhui yasiyo salama</translation>
 <translation id="2027465737841872819">Plastiki</translation>
+<translation id="2027707238798802149">Kadi haipatikani.</translation>
 <translation id="2029735183873159415">Asili na Jinialojia</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />Kuangalia seva mbadala na kinga mtandao<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">Njia ya mkato haiwezi kuwa sawa na neno muhimu chaguomsingi la mtoa huduma za utafutaji kama ilivyobainishwa na <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" />: <ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">Nyumbani na Bustani</translation>
 <translation id="2515629240566999685">Kuangalia uthabiti wa mawimbi katika eneo lako</translation>
 <translation id="2515761554693942801">Ulichagua kuthibitisha kwa kutumia Touch ID kwenye tovuti zinazotumia <ph name="PROVIDER_ORIGIN" />. Huenda mtoa huduma huyu amehifadhi maelezo ya njia yako ya kulipa ambayo unaweza <ph name="LINK_TEXT" />.</translation>
+<translation id="2518584823165598232">Kadi hii haipatikani. Tafadhali wasiliana na mtoa huduma wa kadi yako.</translation>
 <translation id="2521385132275182522">Bana chini kulia</translation>
 <translation id="2521736961081452453">Unda fomu</translation>
 <translation id="2523886232349826891">Imehifadhiwa kwenye kifaa hiki pekee</translation>
@@ -3342,6 +3345,7 @@
 <translation id="7003322000677139268">Vipuri na Vifuasi vya Magari</translation>
 <translation id="7004499039102548441">Vichupo vya Hivi Punde</translation>
 <translation id="7006930604109697472">Tuma tu</translation>
+<translation id="7009364359744329733">Kadi hii haipatikani sasa hivi. Tafadhali jaribu tena baadaye.</translation>
 <translation id="7010658264061801199">Vyakula na Vinywaji</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7013835112918108252">Inaweza kuomba kufunga na kutumia kipanya chako</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 51b62fc..88051bb 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -3289,6 +3289,7 @@
 <translation id="6925267999184670015">ఉత్తర అమెరికా B+</translation>
 <translation id="6926216138694948720">టాట్టూలు</translation>
 <translation id="692638818576287323">వాణిజ్యపరమైన వాహనాలు</translation>
+<translation id="6933282894115597956">సైన్ ఇన్ చేయమని మీ సంస్థ కోరుతుంది</translation>
 <translation id="6934236486840930310"><ph name="BEGIN_BOLD" />మీ ఆటోమేటిక్ సెర్చ్ ఇంజిన్ వెబ్‌లో సెర్చ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, అదే విధంగా Chrome ఫీచర్‌లను శక్తిమంతం చేస్తుంది<ph name="END_BOLD" /> అంటే అడ్రస్ బార్ నుండి, వెబ్ పేజీలలోని ఇమేజ్‌ల నుండి సెర్చ్ చేయడం వంటివి సులభంగా చేయగలుగుతారు. మీ సెర్చ్ ఇంజిన్ సపోర్ట్ చేయకపోతే, ఏదైనా ఫీచర్ అందుబాటులో లేకపోయే అవకాశం ఉంది.</translation>
 <translation id="6934672428414710184">ఇది మీ Google ఖాతాలో ఉన్న పేరు</translation>
 <translation id="6935082727755903526">అకౌంటింగ్ &amp; ఫైనాన్స్ ఉద్యోగాలు</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 4d546995..7ec917e 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -59,6 +59,7 @@
 <translation id="1099928364755383720">自动进入画中画模式</translation>
 <translation id="1100782917270858593">“继续您的历程”按钮,按 Enter 键即可继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录</translation>
 <translation id="1101672080107056897">错误操作</translation>
+<translation id="1101902632743388185">您的对照表</translation>
 <translation id="1104409666019087579">某些必填字段是空的。请先填写这些字段,然后再保存。</translation>
 <translation id="1104860668737945357">“管理密码”按钮,激活它即可在 Chrome 设置中查看和管理您的密码</translation>
 <translation id="1108464073729874771">A3x4</translation>
@@ -583,6 +584,7 @@
 <translation id="2025186561304664664">代理已设为自动配置。</translation>
 <translation id="2025891858974379949">不安全内容</translation>
 <translation id="2027465737841872819">塑料</translation>
+<translation id="2027707238798802149">卡不可用</translation>
 <translation id="2029735183873159415">血统与宗谱</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />检查代理服务器和防火墙<ph name="END_LINK" /></translation>
 <translation id="2033900728810589426">下述快捷字词不能与 <ph name="DEFAULT_SEARCH_PROVIDER_KEYWORD_POLICY_NAME" /> 所定义的默认搜索服务提供商关键字相同:<ph name="SHORTCUT_NAME" /></translation>
@@ -866,6 +868,7 @@
 <translation id="2514548229949738417">家居与园艺</translation>
 <translation id="2515629240566999685">检查您所在区域的网络信号</translation>
 <translation id="2515761554693942801">您已选择在使用 <ph name="PROVIDER_ORIGIN" /> 的网站上通过触控 ID 来验证身份。此提供商可能已存储您的付款方式信息,不过您可以<ph name="LINK_TEXT" />相应信息。</translation>
+<translation id="2518584823165598232">此卡不可用,请与发卡机构联系。</translation>
 <translation id="2521385132275182522">钉装(右下角)</translation>
 <translation id="2521736961081452453">创建表单</translation>
 <translation id="2523886232349826891">仅会保存在此设备上</translation>
@@ -3337,6 +3340,7 @@
 <translation id="7003322000677139268">车辆零配件</translation>
 <translation id="7004499039102548441">最近打开的标签页</translation>
 <translation id="7006930604109697472">仍然发送</translation>
+<translation id="7009364359744329733">此卡目前不可用,请稍后再试。</translation>
 <translation id="7010658264061801199">餐饮</translation>
 <translation id="7012363358306927923">中国银联</translation>
 <translation id="7013835112918108252">可以请求锁定和使用您的鼠标</translation>
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index c58bb452..e79a102 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -60,6 +60,7 @@
 #include "ui/accessibility/platform/ax_fragment_root_win.h"
 #include "ui/accessibility/platform/browser_accessibility_manager_win.h"
 #include "ui/accessibility/platform/browser_accessibility_win.h"
+#include "ui/accessibility/platform/iaccessible2/scoped_co_mem_array.h"
 #include "ui/accessibility/platform/inspect/ax_inspect_utils_win.h"
 #include "ui/accessibility/platform/uia_registrar_win.h"
 #include "ui/aura/window.h"
@@ -3623,6 +3624,160 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
+                       TestIAccessibleTextSelectionContainerWithLinks) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(<!DOCTYPE html>
+      <p>abc<a href="#">def</a>ghi<a href="#">jkl</a>mno</p>
+      )HTML");
+
+  Microsoft::WRL::ComPtr<IAccessible> document(GetRendererAccessible());
+  std::vector<base::win::ScopedVariant> document_children =
+      GetAllAccessibleChildren(document.Get());
+  ASSERT_EQ(1u, document_children.size());
+
+  // Check that first child of document is an editable text object
+  Microsoft::WRL::ComPtr<IAccessible2> paragraph;
+  ASSERT_HRESULT_SUCCEEDED(QueryIAccessible2(
+      GetAccessibleFromVariant(document.Get(), document_children[0].AsInput())
+          .Get(),
+      &paragraph));
+  LONG paragraph_role = 0;
+  ASSERT_HRESULT_SUCCEEDED(paragraph->role(&paragraph_role));
+  ASSERT_EQ(IA2_ROLE_PARAGRAPH, paragraph_role);
+
+  Microsoft::WRL::ComPtr<IAccessibleText> paragraph_text;
+  ASSERT_HRESULT_SUCCEEDED(paragraph.As(&paragraph_text));
+  LONG n_characters;
+  ASSERT_HRESULT_SUCCEEDED(paragraph_text->get_nCharacters(&n_characters));
+  ASSERT_EQ(11, n_characters);
+
+  std::vector<base::win::ScopedVariant> paragraph_children =
+      GetAllAccessibleChildren(paragraph.Get());
+  ASSERT_EQ(5u, paragraph_children.size());
+
+  Microsoft::WRL::ComPtr<IAccessible2> abc;
+  ASSERT_HRESULT_SUCCEEDED(QueryIAccessible2(
+      GetAccessibleFromVariant(paragraph.Get(), paragraph_children[0].AsInput())
+          .Get(),
+      &abc));
+  LONG abc_role = 0;
+  ASSERT_HRESULT_SUCCEEDED(abc->role(&abc_role));
+  ASSERT_EQ(ROLE_SYSTEM_STATICTEXT, abc_role)
+      << "Wrong role, was: " << IAccessible2RoleToString(abc_role);
+
+  Microsoft::WRL::ComPtr<IAccessibleText> abc_text;
+  ASSERT_HRESULT_SUCCEEDED(abc.As(&abc_text));
+  ASSERT_HRESULT_SUCCEEDED(abc_text->get_nCharacters(&n_characters));
+  ASSERT_EQ(3, n_characters);
+
+  Microsoft::WRL::ComPtr<IAccessibleTextSelectionContainer> selection_container;
+  ASSERT_HRESULT_SUCCEEDED(document.As(&selection_container));
+
+  ui::ScopedCoMemArray<IA2TextSelection> received_selections;
+  ASSERT_HRESULT_FAILED(selection_container->get_selections(
+      received_selections.Receive(), received_selections.ReceiveSize()));
+  ASSERT_EQ(0, received_selections.size());
+
+  // Test setting the selection to "a".
+  std::vector<IA2TextSelection> requested_selections;
+  IA2TextSelection requested_selection_range = {paragraph_text.Get(), 0,
+                                                paragraph_text.Get(), 1, false};
+  requested_selections.push_back(requested_selection_range);
+
+  AccessibilityNotificationWaiter waiter(
+      shell()->web_contents(), ui::kAXModeComplete,
+      ax::mojom::Event::kDocumentSelectionChanged);
+  ASSERT_HRESULT_SUCCEEDED(
+      selection_container->setSelections(1, &requested_selections[0]));
+  ASSERT_TRUE(waiter.WaitForNotification());
+
+  ASSERT_HRESULT_SUCCEEDED(selection_container->get_selections(
+      received_selections.Receive(), received_selections.ReceiveSize()));
+  ASSERT_EQ(1, received_selections.size());
+
+  EXPECT_EQ(abc_text.Get(), received_selections[0].startObj);
+  EXPECT_EQ(received_selections[0].startOffset, 0);
+  EXPECT_EQ(abc_text.Get(), received_selections[0].endObj);
+  ASSERT_EQ(received_selections[0].endOffset, 1);
+  ASSERT_EQ(received_selections[0].startIsActive, false);
+
+  // Get the first link.
+  Microsoft::WRL::ComPtr<IAccessible2> first_link;
+  ASSERT_HRESULT_SUCCEEDED(QueryIAccessible2(
+      GetAccessibleFromVariant(paragraph.Get(), paragraph_children[1].AsInput())
+          .Get(),
+      &first_link));
+  LONG first_link_role = 0;
+  ASSERT_HRESULT_SUCCEEDED(first_link->role(&first_link_role));
+  ASSERT_EQ(ROLE_SYSTEM_LINK, first_link_role)
+      << "Wrong role, was: " << IAccessible2RoleToString(first_link_role);
+
+  Microsoft::WRL::ComPtr<IAccessibleText> first_link_text;
+  ASSERT_HRESULT_SUCCEEDED(first_link.As(&first_link_text));
+  ASSERT_HRESULT_SUCCEEDED(first_link_text->get_nCharacters(&n_characters));
+  ASSERT_EQ(3, n_characters);
+
+  // Get the first link's text, "def".
+  std::vector<base::win::ScopedVariant> first_link_children =
+      GetAllAccessibleChildren(first_link.Get());
+  ASSERT_EQ(1u, first_link_children.size());
+
+  Microsoft::WRL::ComPtr<IAccessible2> def;
+  ASSERT_HRESULT_SUCCEEDED(
+      QueryIAccessible2(GetAccessibleFromVariant(
+                            first_link.Get(), first_link_children[0].AsInput())
+                            .Get(),
+                        &def));
+  LONG def_role = 0;
+  ASSERT_HRESULT_SUCCEEDED(def->role(&def_role));
+  ASSERT_EQ(ROLE_SYSTEM_STATICTEXT, def_role)
+      << "Wrong role, was: " << IAccessible2RoleToString(def_role);
+
+  Microsoft::WRL::ComPtr<IAccessibleText> def_text;
+  ASSERT_HRESULT_SUCCEEDED(def.As(&def_text));
+  ASSERT_HRESULT_SUCCEEDED(def_text->get_nCharacters(&n_characters));
+  ASSERT_EQ(3, n_characters);
+
+  Microsoft::WRL::ComPtr<IAccessible2> ghi;
+  ASSERT_HRESULT_SUCCEEDED(QueryIAccessible2(
+      GetAccessibleFromVariant(paragraph.Get(), paragraph_children[2].AsInput())
+          .Get(),
+      &ghi));
+  LONG ghi_role = 0;
+  ASSERT_HRESULT_SUCCEEDED(ghi->role(&ghi_role));
+  ASSERT_EQ(ROLE_SYSTEM_STATICTEXT, ghi_role)
+      << "Wrong role, was: " << IAccessible2RoleToString(ghi_role);
+
+  Microsoft::WRL::ComPtr<IAccessibleText> ghi_text;
+  ASSERT_HRESULT_SUCCEEDED(ghi.As(&ghi_text));
+  ASSERT_HRESULT_SUCCEEDED(ghi_text->get_nCharacters(&n_characters));
+  ASSERT_EQ(3, n_characters);
+
+  // Select the first link by selecting its embedded object character.
+  received_selections = ui::ScopedCoMemArray<IA2TextSelection>();
+  requested_selections.clear();
+  requested_selection_range = {paragraph_text.Get(), 3, paragraph_text.Get(), 4,
+                               false};
+  requested_selections.push_back(requested_selection_range);
+
+  AccessibilityNotificationWaiter waiter_2(
+      shell()->web_contents(), ui::kAXModeComplete,
+      ax::mojom::Event::kDocumentSelectionChanged);
+  ASSERT_HRESULT_SUCCEEDED(
+      selection_container->setSelections(1, &requested_selections[0]));
+  ASSERT_TRUE(waiter_2.WaitForNotification());
+
+  ASSERT_HRESULT_SUCCEEDED(selection_container->get_selections(
+      received_selections.Receive(), received_selections.ReceiveSize()));
+  ASSERT_EQ(1, received_selections.size());
+
+  EXPECT_EQ(received_selections[0].startOffset, 0);
+  EXPECT_EQ(def_text.Get(), received_selections[0].startObj);
+  ASSERT_EQ(received_selections[0].endOffset, 0);
+  EXPECT_EQ(ghi_text.Get(), received_selections[0].endObj);
+  ASSERT_EQ(received_selections[0].startIsActive, false);
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
                        TestTextAtOffsetWithInvalidArguments) {
   Microsoft::WRL::ComPtr<IAccessibleText> input_text;
   SetUpInputField(&input_text);
diff --git a/content/browser/tracing/startup_tracing_controller.cc b/content/browser/tracing/startup_tracing_controller.cc
index 8b6ee7f..a4e9f43 100644
--- a/content/browser/tracing/startup_tracing_controller.cc
+++ b/content/browser/tracing/startup_tracing_controller.cc
@@ -64,9 +64,6 @@
     if (!tracing_started_.IsSet())
       return;
 
-    base::trace_event::TraceLog::GetInstance()
-        ->SetCurrentThreadBlocksMessageLoop();
-
     base::OnceClosure stop_tracing;
     scoped_refptr<base::SequencedTaskRunner> task_runner;
     {
diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc
index 4033ae7d..39c7143 100644
--- a/gin/v8_initializer.cc
+++ b/gin/v8_initializer.cc
@@ -503,7 +503,6 @@
                          "--no-js-duplicate-named-groups");
   SetV8FlagsIfOverridden(features::kJavaScriptPromiseTry, "--js-promise-try",
                          "--no-js-promise-try");
-  SetV8Flags("--js-explicit-resource-management");
 
   if (IsolateHolder::kStrictMode == mode) {
     SetV8Flags("--use_strict");
diff --git a/gpu/command_buffer/service/service_transfer_cache.h b/gpu/command_buffer/service/service_transfer_cache.h
index 1b15a4b4..24a84bbb 100644
--- a/gpu/command_buffer/service/service_transfer_cache.h
+++ b/gpu/command_buffer/service/service_transfer_cache.h
@@ -19,6 +19,7 @@
 #include "base/memory/memory_pressure_listener.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "base/trace_event/memory_dump_provider.h"
 #include "cc/paint/image_transfer_cache_entry.h"
 #include "cc/paint/transfer_cache_entry.h"
 #include "gpu/command_buffer/common/discardable_handle.h"
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 2dc9f9ea..b23a5035 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Adressen er kun gemt på denne enhed</translation>
 <translation id="1445276840641906250">Alle dine faner i én browser</translation>
 <translation id="1450170672351507823">Standardbeskyttelse er aktiveret. Du kan øge sikkerheden ved at bruge forbedret beskyttelse.</translation>
+<translation id="1454615514353469963">Adgangskoder, adgangsnøgler og andre data slettes permanent fra Google Adgangskodeadministrator</translation>
 <translation id="1455660774629812862">Skjul ikke</translation>
 <translation id="1460751212339734034">Spar tid ved at indtaste mindre</translation>
 <translation id="1466035273550360103">Ingen åbne faner</translation>
@@ -1396,6 +1397,7 @@
 <translation id="7248046129087111453"><ph name="BEGIN_LINK" />Søgehistorikken<ph name="END_LINK" /> og <ph name="BEGIN_LINK" />andre former for aktivitet<ph name="END_LINK" /> gemmes muligvis på din Google-konto.</translation>
 <translation id="7253951228444156601">Tjekker adgangskoder…</translation>
 <translation id="7261217796641151584">Del gruppe</translation>
+<translation id="7266578100016339897">Dette hjælper dig med at bevare overblikket. Du kan til enhver tid ændre dette i indstillingerne.</translation>
 <translation id="7271220006028561438">Tillad automatisk opgradering af adgangsnøgle</translation>
 <translation id="7272437679830969316">Din identitet kunne ikke verificeres. Adgangskoden blev ikke kopieret.</translation>
 <translation id="7293429513719260019">Vælg sprog</translation>
@@ -1590,6 +1592,7 @@
 <translation id="8080028325999236607">Luk alle faner</translation>
 <translation id="8084285576995584326">Administrer dine Google-kontodata</translation>
 <translation id="809543534949702122">Søgehistorik</translation>
+<translation id="8095985449280932182">{COUNT,plural, =1{Faner, du ikke bruger, flyttes hertil efter {COUNT} dag}one{Faner, du ikke bruger, flyttes hertil efter {COUNT} dag}other{Faner, du ikke bruger, flyttes hertil efter {COUNT} dage}}</translation>
 <translation id="8101409298456377967">Opret, gem og administrer dine adgangskoder, så du nemt kan logge ind på websites og i apps. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="8102130909719902723">N</translation>
 <translation id="8114753159095730575">Filer kan downloades. Se valgmulighederne nederst på skærmen.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 352d05b..179be54 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Η διεύθυνση αποθηκεύτηκε μόνο σε αυτή τη συσκευή</translation>
 <translation id="1445276840641906250">Όλες οι καρτέλες σας σε ένα πρόγραμμα περιήγησης</translation>
 <translation id="1450170672351507823">Η Βασική προστασία είναι ενεργή. Για ακόμη μεγαλύτερη ασφάλεια, χρησιμοποιήστε τη Βελτιωμένη προστασία.</translation>
+<translation id="1454615514353469963">Οι κωδικοί πρόσβασης, τα κλειδιά πρόσβασης και άλλα δεδομένα θα διαγραφούν οριστικά από τη Διαχείριση κωδικών πρόσβασης Google</translation>
 <translation id="1455660774629812862">Να μην γίνει απόκρυψη</translation>
 <translation id="1460751212339734034">Εξοικονομήστε χρόνο, πληκτρολογήστε λιγότερο</translation>
 <translation id="1466035273550360103">Δεν υπάρχουν ανοιχτές καρτέλες</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 6e132435..ed5a150 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Dirección guardada solo en este dispositivo</translation>
 <translation id="1445276840641906250">Todas tus pestañas en un solo navegador</translation>
 <translation id="1450170672351507823">La protección estándar está activada. Para tener aún más seguridad, usa la protección mejorada.</translation>
+<translation id="1454615514353469963">Las contraseñas, llaves de acceso y otros datos se eliminarán de forma permanente del Gestor de contraseñas de Google</translation>
 <translation id="1455660774629812862">No ocultar</translation>
 <translation id="1460751212339734034">Ahorra tiempo, escribe menos</translation>
 <translation id="1466035273550360103">No hay pestañas abiertas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index 278d4e9..8960d345 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Na-save lang sa device na ito ang address</translation>
 <translation id="1445276840641906250">Lahat ng iyong tab sa isang browser</translation>
 <translation id="1450170672351507823">Naka-on ang standard na proteksyon. Para sa higit pang seguridad, gamitin ang Pinahusay na proteksyon.</translation>
+<translation id="1454615514353469963">Permanenteng made-delete ang mga password, passkey, at iba pang data sa Google Password Manager</translation>
 <translation id="1455660774629812862">Huwag i-hide</translation>
 <translation id="1460751212339734034">Makatipid ng oras, mag-type ng mas kaunti</translation>
 <translation id="1466035273550360103">Walang bukas na tab</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 9905cea..fa1f3d5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">住所はこのデバイスにのみ保存されました</translation>
 <translation id="1445276840641906250">1 つのブラウザですべてのタブを管理</translation>
 <translation id="1450170672351507823">標準保護機能がオンになっています。セキュリティをさらに強化するには、保護強化機能を使用してください。</translation>
+<translation id="1454615514353469963">パスワード、パスキー、およびその他のデータが Google パスワード マネージャーから完全に削除されます</translation>
 <translation id="1455660774629812862">非表示にしない</translation>
 <translation id="1460751212339734034">入力を省いて、時間を節約</translation>
 <translation id="1466035273550360103">開いているタブはありません</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index 645420cc..3e8bd48 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Adrese tika saglabāta tikai šajā ierīcē</translation>
 <translation id="1445276840641906250">Visas jūsu cilnes vienā pārlūkā</translation>
 <translation id="1450170672351507823">Ir ieslēgta standarta aizsardzība. Lai iegūtu lielāku drošību, izmantojiet uzlaboto aizsardzību.</translation>
+<translation id="1454615514353469963">Paroles, piekļuves atslēgas un citi dati tiks neatgriezeniski dzēsti no Google paroļu pārvaldnieka.</translation>
 <translation id="1455660774629812862">Neslēpt</translation>
 <translation id="1460751212339734034">Ietaupiet laiku — rakstiet mazāk</translation>
 <translation id="1466035273550360103">Nav atvērtu ciļņu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index fcd2750..3eb08096 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Хаягийг зөвхөн энэ төхөөрөмжид хадгалдаг</translation>
 <translation id="1445276840641906250">Таны бүх таб нэг хөтчид</translation>
 <translation id="1450170672351507823">Стандарт хамгаалалт асаалттай байна. Аюулгүй байдлаа улам нэмэгдүүлэхийг хүсвэл сайжруулсан хамгаалалтыг ашиглаарай.</translation>
+<translation id="1454615514353469963">Нууц үг, нэвтрэх түлхүүр болон бусад өгөгдлийг Google Нууц үгний менежерээс бүрмөсөн устгана</translation>
 <translation id="1455660774629812862">Бүү нуу</translation>
 <translation id="1460751212339734034">Цаг хэмнэж, бага бичээрэй</translation>
 <translation id="1466035273550360103">Ямар ч нээлттэй таб байхгүй</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index ec9cbc2..d726e51f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Adres alleen opgeslagen op dit apparaat</translation>
 <translation id="1445276840641906250">Al je tabbladen in één browser</translation>
 <translation id="1450170672351507823">Standaardbeveiliging staat aan. Gebruik verbeterde beveiliging voor nog meer bescherming.</translation>
+<translation id="1454615514353469963">Wachtwoorden, toegangssleutels en andere gegevens worden definitief verwijderd uit Google Wachtwoordmanager</translation>
 <translation id="1455660774629812862">Niet verbergen</translation>
 <translation id="1460751212339734034">Bespaar tijd en typ minder</translation>
 <translation id="1466035273550360103">Geen geopende tabbladen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 786b810..204158e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Adressen er kun lagret på denne enheten</translation>
 <translation id="1445276840641906250">Alle fanene dine i én nettleser</translation>
 <translation id="1450170672351507823">Standardbeskyttelse er på. Bruk økt beskyttelse om du vil ha enda mer sikkerhet.</translation>
+<translation id="1454615514353469963">Passord, passnøkler og andre data slettes permanent fra Google Passordlagring</translation>
 <translation id="1455660774629812862">Ikke skjul</translation>
 <translation id="1460751212339734034">Spar tid – skriv mindre</translation>
 <translation id="1466035273550360103">Ingen åpne faner</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 72f3bb1..4989162 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Morada guardada apenas neste dispositivo</translation>
 <translation id="1445276840641906250">Todos os seus separadores num navegador</translation>
 <translation id="1450170672351507823">A proteção padrão está ativada. Para desfrutar de ainda mais segurança, use a proteção melhorada.</translation>
+<translation id="1454615514353469963">As palavras-passe, as chaves de acesso e outros dados vão ser eliminados permanentemente do Gestor de Palavras-passe da Google</translation>
 <translation id="1455660774629812862">Não ocultar</translation>
 <translation id="1460751212339734034">Poupe tempo, escreva menos</translation>
 <translation id="1466035273550360103">Sem separadores abertos</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 fa7c256..2275939 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Adresa je sačuvana samo na ovom uređaju</translation>
 <translation id="1445276840641906250">Sve kartice u jednom pregledaču</translation>
 <translation id="1450170672351507823">Standardna zaštita je uključena. Koristite naprednu zaštitu da biste se dodatno zaštitili.</translation>
+<translation id="1454615514353469963">Lozinke, pristupni ključevi i drugi podaci će se trajno izbrisati iz Google menadžera lozinki</translation>
 <translation id="1455660774629812862">Ne skrivaj</translation>
 <translation id="1460751212339734034">Uštedite vreme, kucajte manje</translation>
 <translation id="1466035273550360103">Nema otvorenih kartica</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index b2e48c2..a79006f1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">Адреса је сачувана само на овом уређају</translation>
 <translation id="1445276840641906250">Све картице у једном прегледачу</translation>
 <translation id="1450170672351507823">Стандардна заштита је укључена. Користите напредну заштиту да бисте се додатно заштитили.</translation>
+<translation id="1454615514353469963">Лозинке, приступни кључеви и други подаци ће се трајно избрисати из Google менаџера лозинки</translation>
 <translation id="1455660774629812862">Не скривај</translation>
 <translation id="1460751212339734034">Уштедите време, куцајте мање</translation>
 <translation id="1466035273550360103">Нема отворених картица</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 45e0935..e4873575 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -108,6 +108,7 @@
 <translation id="143681031165817424">บันทึกที่อยู่ในอุปกรณ์นี้เท่านั้น</translation>
 <translation id="1445276840641906250">แท็บทั้งหมดของคุณในเบราว์เซอร์เดียว</translation>
 <translation id="1450170672351507823">การปกป้องแบบมาตรฐานเปิดอยู่ ใช้การปกป้องที่ดียิ่งขึ้นเพื่อเพิ่มความปลอดภัยให้มากขึ้น</translation>
+<translation id="1454615514353469963">ระบบจะลบรหัสผ่าน พาสคีย์ และข้อมูลอื่นๆ ออกจากเครื่องมือจัดการรหัสผ่านบน Google อย่างถาวร</translation>
 <translation id="1455660774629812862">ไม่ต้องซ่อน</translation>
 <translation id="1460751212339734034">ประหยัดเวลาด้วยการพิมพ์น้อยลง</translation>
 <translation id="1466035273550360103">ไม่มีแท็บที่เปิดไว้</translation>
diff --git a/ios/chrome/browser/autofill/model/bottom_sheet/BUILD.gn b/ios/chrome/browser/autofill/model/bottom_sheet/BUILD.gn
index fc2308d..518053b 100644
--- a/ios/chrome/browser/autofill/model/bottom_sheet/BUILD.gn
+++ b/ios/chrome/browser/autofill/model/bottom_sheet/BUILD.gn
@@ -28,6 +28,8 @@
     "//components/password_manager/core/common:features",
     "//components/password_manager/ios",
     "//components/prefs",
+    "//ios/chrome/browser/autofill/model",
+    "//ios/chrome/browser/autofill/model:features",
     "//ios/chrome/browser/shared/model/prefs:pref_names",
     "//ios/chrome/browser/shared/model/profile",
     "//ios/chrome/browser/shared/public/commands",
diff --git a/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h b/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h
index 91b7ff9f7..d209a78a 100644
--- a/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h
+++ b/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h
@@ -6,6 +6,7 @@
 #define IOS_CHROME_BROWSER_AUTOFILL_MODEL_BOTTOM_SHEET_AUTOFILL_BOTTOM_SHEET_TAB_HELPER_H_
 
 #import "base/memory/raw_ptr.h"
+#import "base/memory/weak_ptr.h"
 #import "base/scoped_multi_source_observation.h"
 #import "components/autofill/core/browser/field_types.h"
 #import "components/autofill/core/browser/foundations/autofill_manager.h"
@@ -13,7 +14,7 @@
 #import "components/password_manager/ios/password_generation_provider.h"
 #import "components/plus_addresses/plus_address_types.h"
 #import "ios/chrome/browser/autofill/model/bottom_sheet/virtual_card_enrollment_callbacks.h"
-#include "ios/web/public/js_messaging/web_frames_manager.h"
+#import "ios/web/public/js_messaging/web_frames_manager.h"
 #import "ios/web/public/web_state_observer.h"
 #import "ios/web/public/web_state_user_data.h"
 #import "url/origin.h"
@@ -31,6 +32,8 @@
 
 @protocol AutofillCommands;
 @class CommandDispatcher;
+@protocol FormInputSuggestionsProvider;
+@class FormSuggestion;
 
 // This class manages state and events relating to the showing of various bottom
 // sheets for Autofill/Password Manager.
@@ -207,10 +210,20 @@
       bool refocus);
 
   // Send command to show the Password Bottom Sheet.
-  void ShowPasswordBottomSheet(const autofill::FormActivityParams params);
+  void ShowPasswordBottomSheet(const autofill::FormActivityParams& params);
 
   // Send command to show the Payments Bottom Sheet.
-  void ShowPaymentsBottomSheet(const autofill::FormActivityParams params);
+  void ShowPaymentsBottomSheet(const autofill::FormActivityParams& params);
+
+  // Maybe shows the Payments Bottom Sheet if the conditions are met.
+  void MaybeShowPaymentsBottomSheet(autofill::FormActivityParams params);
+
+  // Called when the suggestions are retrieved for the payments bottom sheet.
+  void OnSuggestionsRetrievedForPaymentsBottomSheet(
+      const autofill::FormActivityParams& params,
+      base::TimeTicks start_timestamp,
+      NSArray<FormSuggestion*>* suggestions,
+      id<FormInputSuggestionsProvider> provider);
 
   // Shows the password generation suggestion view controller.
   void ShowProactivePasswordGenerationBottomSheet(
@@ -267,6 +280,8 @@
   // completed.
   autofill::VirtualCardEnrollmentCallbacks virtual_card_enrollment_callbacks_;
 
+  base::WeakPtrFactory<AutofillBottomSheetTabHelper> weak_factory_{this};
+
   WEB_STATE_USER_DATA_KEY_DECL();
 };
 
diff --git a/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm b/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm
index 652926198..88b23a04 100644
--- a/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm
+++ b/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm
@@ -6,14 +6,18 @@
 
 #import "base/containers/contains.h"
 #import "base/feature_list.h"
+#import "base/functional/bind.h"
+#import "base/functional/callback_helpers.h"
 #import "base/metrics/histogram_functions.h"
 #import "base/ranges/algorithm.h"
+#import "base/time/time.h"
 #import "components/autofill/core/browser/data_manager/payments/payments_data_manager.h"
 #import "components/autofill/core/browser/data_manager/personal_data_manager.h"
 #import "components/autofill/core/browser/form_structure.h"
 #import "components/autofill/core/browser/payments/card_unmask_challenge_option.h"
 #import "components/autofill/core/browser/ui/payments/card_unmask_authentication_selection_dialog_controller_impl.h"
 #import "components/autofill/core/browser/ui/payments/virtual_card_enroll_ui_model.h"
+#import "components/autofill/core/browser/suggestions/suggestion_type.h"
 #import "components/autofill/ios/browser/autofill_driver_ios.h"
 #import "components/autofill/ios/common/features.h"
 #import "components/autofill/ios/form_util/form_activity_params.h"
@@ -24,6 +28,9 @@
 #import "components/prefs/pref_service.h"
 #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_java_script_feature.h"
 #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_observer.h"
+#import "ios/chrome/browser/autofill/model/features.h"
+#import "ios/chrome/browser/autofill/model/form_input_suggestions_provider.h"
+#import "ios/chrome/browser/autofill/model/form_suggestion_tab_helper.h"
 #import "ios/chrome/browser/shared/model/prefs/pref_names.h"
 #import "ios/chrome/browser/shared/model/profile/profile_ios.h"
 #import "ios/chrome/browser/shared/public/commands/autofill_commands.h"
@@ -53,6 +60,37 @@
   }
 }
 
+// Returns true if there is any credit card suggestion in the `suggestions`.
+bool HasAnyCreditCardSuggestion(NSArray<FormSuggestion*>* suggestions) {
+  for (FormSuggestion* suggestion in suggestions) {
+    if (suggestion.type == autofill::SuggestionType::kCreditCardEntry ||
+        suggestion.type == autofill::SuggestionType::kVirtualCreditCardEntry) {
+      return true;
+    }
+  }
+  return false;
+}
+
+// Records the histograms related to the outcome of triggering the
+// Payments Bottom Sheet V3 (triggered or didn't trigger).
+void RecordPaymentsBottomSheetTriggerOutcome(bool did_trigger,
+                                             base::TimeDelta trigger_walltime) {
+  if (did_trigger) {
+    base::UmaHistogramTimes("IOS.PaymentsBottomSheet.TimeToTrigger.Triggered",
+                            trigger_walltime);
+  } else {
+    base::UmaHistogramTimes(
+        "IOS.PaymentsBottomSheet.TimeToTrigger.NotTriggered", trigger_walltime);
+  }
+  base::UmaHistogramBoolean("IOS.PaymentsBottomSheetV3.Triggered",
+                            /*sample=*/did_trigger);
+}
+
+bool UseV3() {
+  return base::FeatureList::IsEnabled(kStatelessFormSuggestionController) &&
+         base::FeatureList::IsEnabled(kAutofillPaymentsSheetV3Ios);
+}
+
 }  // namespace
 
 AutofillBottomSheetTabHelper::~AutofillBottomSheetTabHelper() = default;
@@ -140,14 +178,14 @@
   if (is_password_related) {
     ShowPasswordBottomSheet(params);
   } else if (is_payments_related) {
-    ShowPaymentsBottomSheet(params);
+    MaybeShowPaymentsBottomSheet(params);
   } else if (is_password_generation_related) {
     ShowProactivePasswordGenerationBottomSheet(params);
   }
 }
 
 void AutofillBottomSheetTabHelper::ShowPasswordBottomSheet(
-    const autofill::FormActivityParams params) {
+    const autofill::FormActivityParams& params) {
   // Attempt to show the password suggestions bottom sheet. There is no
   // guarantee that it will be actually shown.
   [commands_handler_ showPasswordBottomSheet:params];
@@ -168,17 +206,70 @@
   }
 }
 
+void AutofillBottomSheetTabHelper::MaybeShowPaymentsBottomSheet(
+    autofill::FormActivityParams params) {
+  if (!UseV3()) {
+    // Use the status quo logic for triggering the payments bottom sheet if
+    // V3 isn't enabled.
+    ShowPaymentsBottomSheet(params);
+  }
+
+  // In V3, First try to retrieve credit card suggestions before considering
+  // triggering the payments bottom sheet. Credit card suggestions are a good
+  // proxy for knowing that the type of the field is "settled" since we known
+  // that the PWM was tested for suggestions (including the server predictions)
+  // before getting the credit card suggestions.
+
+  if (!web_state_) {
+    return;
+  }
+  FormSuggestionTabHelper* tabHelper =
+      FormSuggestionTabHelper::FromWebState(web_state_);
+  if (!tabHelper) {
+    return;
+  }
+  id<FormInputSuggestionsProvider> provider =
+      tabHelper->GetAccessoryViewProvider();
+
+  // Force this bit to true as retrieving Autofill suggestions for a form
+  // requires a user manual gesture and we consider the signal to trigger
+  // the bottom sheet as a valid signal as a manual gesture.
+  params.has_user_gesture = true;
+
+  auto completion = base::CallbackToBlock(base::BindOnce(
+      &AutofillBottomSheetTabHelper::
+          OnSuggestionsRetrievedForPaymentsBottomSheet,
+      weak_factory_.GetWeakPtr(), params, base::TimeTicks::Now()));
+  [provider retrieveSuggestionsForForm:params
+                              webState:web_state_
+              accessoryViewUpdateBlock:completion];
+}
+
+void AutofillBottomSheetTabHelper::OnSuggestionsRetrievedForPaymentsBottomSheet(
+    const autofill::FormActivityParams& params,
+    base::TimeTicks start_timestamp,
+    NSArray<FormSuggestion*>* suggestions,
+    id<FormInputSuggestionsProvider> provider) {
+  auto trigger_walltime = base::TimeTicks::Now() - start_timestamp;
+  bool has_cc_suggestions = HasAnyCreditCardSuggestion(suggestions);
+  RecordPaymentsBottomSheetTriggerOutcome(/*did_trigger=*/has_cc_suggestions,
+                                          trigger_walltime);
+  if (has_cc_suggestions) {
+    ShowPaymentsBottomSheet(params);
+  }
+}
+
 void AutofillBottomSheetTabHelper::ShowPaymentsBottomSheet(
-    const autofill::FormActivityParams params) {
+    const autofill::FormActivityParams& params) {
   for (auto& observer : observers_) {
     observer.WillShowPaymentsBottomSheet(params);
   }
   [commands_handler_ showPaymentsBottomSheet:params];
   if (base::FeatureList::IsEnabled(kAutofillPaymentsSheetV2Ios)) {
     // In V2, detach the listeners right away to make sure they're always
-    // cleaned up to avoid issues with rogue listeners, see the documentation in
-    // ShowPasswordBottomSheet() for more details. Postpone refocus for
-    // later once the bottom sheet is dismissed.
+    // cleaned up to avoid issues with rogue listeners, see the
+    // documentation in ShowPasswordBottomSheet() for more details. Postpone
+    // refocus for later once the bottom sheet is dismissed.
     DetachPaymentsListenersForAllFrames(/*refocus=*/false);
   }
 }
diff --git a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/BUILD.gn b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/BUILD.gn
index 73aba8c..d5a1670 100644
--- a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/BUILD.gn
+++ b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/BUILD.gn
@@ -46,6 +46,8 @@
     "//components/strings",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/autofill/model",
+    "//ios/chrome/browser/autofill/model:features",
+    "//ios/chrome/browser/autofill/model:model_internal",
     "//ios/chrome/browser/autofill/model/bottom_sheet",
     "//ios/chrome/browser/autofill/model/credit_card",
     "//ios/chrome/browser/autofill/ui_bundled/address_editor:autofill_shared_ui",
@@ -148,6 +150,7 @@
     "//components/autofill/ios/common",
     "//components/url_formatter",
     "//ios/chrome/app/strings",
+    "//ios/chrome/browser/autofill/model:features",
     "//ios/chrome/browser/autofill/ui_bundled:eg_test_support+eg2",
     "//ios/chrome/browser/metrics/model:eg_test_support+eg2",
     "//ios/chrome/browser/settings/ui_bundled:settings_root_constants",
@@ -239,7 +242,6 @@
     "virtual_card_enrollment_bottom_sheet_data.mm",
   ]
   deps = [
-    ":bottom_sheet",
     "//ios/chrome/browser/autofill/model/credit_card",
     "//ios/chrome/browser/autofill/model/message",
   ]
@@ -277,7 +279,6 @@
     "virtual_card_enrollment_bottom_sheet_view_controller.mm",
   ]
   deps = [
-    ":bottom_sheet",
     ":virtual_card_enrollment_bottom_sheet_consumer",
     ":virtual_card_enrollment_bottom_sheet_delegate",
     ":virtual_card_enrollment_bottom_sheet_mutator",
diff --git a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm
index 8b527ed..adc111b5 100644
--- a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm
+++ b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm
@@ -11,6 +11,7 @@
 #import "components/autofill/core/common/autofill_payments_features.h"
 #import "components/autofill/ios/common/features.h"
 #import "components/url_formatter/elide_url.h"
+#import "ios/chrome/browser/autofill/model/features.h"
 #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h"
 #import "ios/chrome/browser/metrics/model/metrics_app_interface.h"
 #import "ios/chrome/browser/settings/ui_bundled/settings_root_table_constants.h"
@@ -86,6 +87,13 @@
     // Disable V2 for that test case as it doesn't support the flow tested by
     // that test case.
     config.features_disabled.push_back(kAutofillPaymentsSheetV2Ios);
+  } else if ([self isRunningTest:@selector
+                   (testOpenPaymentsBottomSheetUseCreditCardOnV3)] ||
+             [self
+                 isRunningTest:@selector
+                 (testAttemptToOpenPaymentsBottomSheetWithoutCreditCardOnV3)]) {
+    config.features_enabled.push_back(kAutofillPaymentsSheetV3Ios);
+    config.features_enabled.push_back(kStatelessFormSuggestionController);
   }
   return config;
 }
@@ -255,10 +263,135 @@
   // recorded.
   CheckAutofillSuggestionAcceptedIndexMetricsCount(/*suggestion_index=*/0);
 
+  // Verify that the time to selection was recorded after accepting a
+  // suggestion.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:1
+              forHistogram:@"IOS.PaymentsBottomSheet.TimeToSelection"],
+      @"IOS.PaymentsBottomSheet.TimeToSelection wasn't recorded");
+
   // Verify that the page is filled properly.
   [self verifyCreditCardInfosHaveBeenFilled:autofill::test::GetCreditCard()];
 }
 
+// Tests that the Payments Bottom Sheet V3 can fill the credit card information.
+- (void)testOpenPaymentsBottomSheetUseCreditCardOnV3 {
+  [self loadPaymentsPage];
+
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElementWithId(kFormCardName)];
+
+  id<GREYMatcher> continueButton = WaitOnResponsiveContinueButton();
+
+  // Verify that the sheet trigger outcome was recorded.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectUniqueSampleWithCount:1
+                            forBucket:1
+                         forHistogram:@"IOS.PaymentsBottomSheetV3.Triggered"],
+      @"IOS.PaymentsBottomSheetV3.Triggered was not recorded when "
+      @"the sheet was triggered");
+
+  // Verify that the time to trigger the sheet was recorded.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:1
+              forHistogram:@"IOS.PaymentsBottomSheet.TimeToTrigger.Triggered"],
+      @"IOS.PaymentsBottomSheet.TimeToTrigger.Triggered wasn't recorded");
+
+  // Verify that the credit card is visible to the user.
+  [[EarlGrey selectElementWithMatcher:grey_text(_lastDigits)]
+      assertWithMatcher:grey_notNil()];
+
+  // Make sure the user is seeing 1 card on the bottom sheet.
+  GREYAssertEqual(1, [AutofillAppInterface localCreditCount],
+                  @"Wrong number of stored credit cards.");
+
+  [[EarlGrey selectElementWithMatcher:continueButton] performAction:grey_tap()];
+
+  // No histogram logged because there is only 1 credential shown to the user.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@"Autofill.TouchToFill.CreditCard.SelectedIndex"],
+      @"Unexpected histogram error for touch to fill credit card selected");
+
+  // Verify that the acceptance of the card suggestion at index 0 was correctly
+  // recorded.
+  CheckAutofillSuggestionAcceptedIndexMetricsCount(/*suggestion_index=*/0);
+
+  // Verify that the time to selection was recorded after accepting a
+  // suggestion.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:1
+              forHistogram:@"IOS.PaymentsBottomSheet.TimeToSelection"],
+      @"IOS.PaymentsBottomSheet.TimeToSelection wasn't recorded");
+
+  // Verify that the page is filled properly.
+  [self verifyCreditCardInfosHaveBeenFilled:autofill::test::GetCreditCard()];
+}
+
+// Tests that the sheet isn't displayed when there are no credit card
+// suggestions for the credit card form, on V3.
+- (void)testAttemptToOpenPaymentsBottomSheetWithoutCreditCardOnV3 {
+  [self loadPaymentsPage];
+
+  // Clear the credit cards after the listeners are attached to be able to test
+  // the sheet trigger.
+  [AutofillAppInterface clearCreditCardStore];
+
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElementWithId(kFormCardName)];
+
+  // Wait enough time to hypothetically show the sheet if there were
+  // suggestions.
+  base::test::ios::SpinRunLoopWithMinDelay(base::Seconds(2));
+
+  // Verify that the sheet wasn't shown because there were no CC suggestions
+  // when attempting to trigger the sheet.
+  id<GREYMatcher> continueButton = ContinueButton();
+  [[EarlGrey selectElementWithMatcher:continueButton]
+      assertWithMatcher:grey_nil()];
+
+  // Verify that the sheet trigger outcome was recorded for the case where the
+  // outcome was to not trigger the sheet.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectUniqueSampleWithCount:1
+                            forBucket:0
+                         forHistogram:@"IOS.PaymentsBottomSheetV3.Triggered"],
+      @"IOS.PaymentsBottomSheetV3.Triggered was not recorded when "
+      @"the sheet was not triggered");
+
+  // Verify that the time to evaluate to trigger the sheet was recorded for the
+  // case where it was decided to not trigger/show the sheet.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:1
+              forHistogram:
+                  @"IOS.PaymentsBottomSheet.TimeToTrigger.NotTriggered"],
+      @"IOS.PaymentsBottomSheet.TimeToTrigger.NotTriggered wasn't recorded");
+
+  // Verify that the case for the time to trigger for the triggered outcome case
+  // wasn't recorded since the outcome was to not trigger.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@"IOS.PaymentsBottomSheet.TimeToTrigger.Triggered"],
+      @"IOS.PaymentsBottomSheet.TimeToTrigger.Triggered "
+       " was recorded when it should not");
+
+  // Verify that the time to selection was not recorded because the sheet wasn't
+  // shown.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@"IOS.PaymentsBottomSheet.TimeToSelection"],
+      @"IOS.PaymentsBottomSheet.TimeToSelection wasn't recorded");
+}
+
 // Tests that the expected metric is logged when accepting a suggestion from
 // the bottom sheet that is not the first one in the list.
 - (void)testAcceptedSuggestionIndexLogged {
diff --git a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm
index a046958..9b5cdfd2 100644
--- a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm
+++ b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm
@@ -7,6 +7,7 @@
 #import "base/feature_list.h"
 #import "base/memory/raw_ptr.h"
 #import "base/metrics/histogram_functions.h"
+#import "base/not_fatal_until.h"
 #import "base/strings/sys_string_conversions.h"
 #import "base/time/time.h"
 #import "components/autofill/core/browser/data_manager/payments/payments_data_manager.h"
@@ -21,9 +22,11 @@
 #import "components/autofill/ios/common/features.h"
 #import "components/autofill/ios/form_util/form_activity_params.h"
 #import "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/autofill/model/autofill_tab_helper.h"
 #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_java_script_feature.h"
 #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h"
 #import "ios/chrome/browser/autofill/model/credit_card/credit_card_data.h"
+#import "ios/chrome/browser/autofill/model/features.h"
 #import "ios/chrome/browser/autofill/model/form_input_suggestions_provider.h"
 #import "ios/chrome/browser/autofill/model/form_suggestion_tab_helper.h"
 #import "ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_consumer.h"
@@ -44,6 +47,13 @@
 // preventing clickjacking by giving more time to the user to understand what
 // the bottom sheet does.
 base::TimeDelta kSelectSuggestionDelay = base::Milliseconds(500);
+
+// Returns true if the payments bottom sheet is at V3.
+bool IsV3() {
+  return base::FeatureList::IsEnabled(kStatelessFormSuggestionController) &&
+         base::FeatureList::IsEnabled(kAutofillPaymentsSheetV3Ios);
+}
+
 }  // namespace
 
 @interface PaymentsSuggestionBottomSheetMediator () <
@@ -249,26 +259,34 @@
     return;
   }
 
-  FormSuggestionTabHelper* tabHelper =
+  if (_viewDidAppearTimestamp) {
+    base::UmaHistogramTimes("IOS.PaymentsBottomSheet.TimeToSelection",
+                            base::TimeTicks::Now() - *_viewDidAppearTimestamp);
+  }
+
+  FormSuggestionTabHelper* formSuggestionTabHelper =
       FormSuggestionTabHelper::FromWebState(activeWebState);
-  DCHECK(tabHelper);
+  CHECK(formSuggestionTabHelper, base::NotFatalUntil::M137);
 
-  id<FormInputSuggestionsProvider> provider =
-      tabHelper->GetAccessoryViewProvider();
-  DCHECK(provider);
+  id<FormInputSuggestionsProvider> crossProvider =
+      formSuggestionTabHelper->GetAccessoryViewProvider();
+  CHECK(crossProvider, base::NotFatalUntil::M137);
 
-  if (provider.type != SuggestionProviderTypeAutofill) {
-    // Last resort safety exit: On the unlikely event that the provider was set
-    // incorrectly (for example if local predictions and server predictions are
-    // different), simply exit and open the keyboard.
+  if (crossProvider.type != SuggestionProviderTypeAutofill && !IsV3()) {
+    // Last resort safety exit: On the unlikely event that the provider was
+    // set incorrectly (for example if local predictions and server
+    // predictions are different), simply exit and open the keyboard.
+    // That last resort exit is only required before V3 where the type of the
+    // current provider matters.
     [self disableBottomSheetAndRefocus:YES];
     [self logExitReason:kBadProvider];
     return;
   }
+
   [self disableBottomSheetAndRefocus:NO];
 
-  // Create a form suggestion containing the selected credit card's backend id
-  // so that the suggestion provider can properly fill the form.
+  // Create a form suggestion containing the selected credit card's backend
+  // id so that the suggestion provider can properly fill the form.
   FormSuggestion* suggestion = [FormSuggestion
               suggestionWithValue:nil
                        minorValue:nil
@@ -290,7 +308,24 @@
            base::SysUTF16ToNSString(l10n_util::GetStringUTF16(
                IDS_AUTOFILL_A11Y_ANNOUNCE_FILLED_FORM))];
 
-  [provider didSelectSuggestion:suggestion atIndex:index params:_params];
+  // Attach the extra contextual information to the suggestion when using the
+  // V3 sheet which will be used once the FormSuggestionController becomes
+  // stateless.
+  if (IsV3()) {
+    AutofillTabHelper* autofillTabHelper = [self autofillTabHelper];
+    // At this point we know that there is a valid active webstate so there must
+    // be an autofill tab helper. Also, the bottom sheet can only be triggered
+    // when this helper exists.
+    CHECK(autofillTabHelper);
+
+    // Attach
+    id<FormSuggestionProvider> autofillProvider =
+        autofillTabHelper->GetSuggestionProvider();
+    suggestion = [FormSuggestion copy:suggestion
+                         andSetParams:_params
+                             provider:autofillProvider];
+  }
+  [crossProvider didSelectSuggestion:suggestion atIndex:index params:_params];
 }
 
 - (void)disableBottomSheetAndRefocus:(BOOL)shouldRefocus {
@@ -448,4 +483,12 @@
   return _webStateList ? _webStateList->GetActiveWebState() : nullptr;
 }
 
+// Returns the AutofillTabHelper for the active webstate or nil if
+// it can't be retrieved.
+- (AutofillTabHelper*)autofillTabHelper {
+  web::WebState* activeWebState = [self getActiveWebState];
+  return activeWebState ? AutofillTabHelper::FromWebState(activeWebState)
+                        : nullptr;
+}
+
 @end
diff --git a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator_unittest.mm b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator_unittest.mm
index 17fabaf..0a61adf5 100644
--- a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator_unittest.mm
+++ b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_mediator_unittest.mm
@@ -13,6 +13,7 @@
 #import "components/autofill/core/common/autofill_prefs.h"
 #import "components/autofill/ios/common/features.h"
 #import "components/autofill/ios/form_util/form_activity_params.h"
+#import "ios/chrome/browser/autofill/model/form_suggestion_tab_helper.h"
 #import "ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_consumer.h"
 #import "ios/chrome/browser/shared/model/web_state_list/test/fake_web_state_list_delegate.h"
 #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
@@ -43,6 +44,8 @@
 
     consumer_ =
         OCMStrictProtocolMock(@protocol(PaymentsSuggestionBottomSheetConsumer));
+
+    FormSuggestionTabHelper::CreateForWebState(test_web_state_.get(), @[]);
   }
 
   void SetUp() override {
@@ -217,3 +220,26 @@
       /*sample=*/4,
       /*expected_bucket_count=*/1);
 }
+
+// Tests that the time to selection is correctly recorded.
+TEST_F(PaymentsSuggestionBottomSheetMediatorTest, TimeToSelection) {
+  base::ScopedMockClockOverride mock_clock;
+  base::HistogramTester histogram_tester;
+
+  CreateMediator();
+
+  OCMExpect([consumer_ activatePrimaryButton]);
+
+  // Use a time to selection that is enough to go past the minimal safety
+  // delay.
+  const auto time_to_selection = base::Milliseconds(500);
+
+  // Select the credit card by following the usual flow.
+  [mediator_ paymentsBottomSheetViewDidAppear];
+  mock_clock.Advance(time_to_selection);
+  [mediator_ didTapOnPrimaryButton];
+  [mediator_ didSelectCreditCard:nil atIndex:0];
+
+  histogram_tester.ExpectTimeBucketCount(
+      "IOS.PaymentsBottomSheet.TimeToSelection", time_to_selection, 1);
+}
diff --git a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm
index 8f589b40..53dd63b9 100644
--- a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm
+++ b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm
@@ -114,6 +114,7 @@
 
   ShareKitJoinConfiguration* config = [[ShareKitJoinConfiguration alloc] init];
   config.URL = join_flow.url();
+  config.token = token;
   config.baseViewController = base_view_controller_;
   auto completion_block = base::CallbackToBlock(std::move(result));
   config.completionBlock = ^(BOOL completion_result) {
diff --git a/ios/chrome/browser/https_upgrades/model/https_only_mode_egtest.mm b/ios/chrome/browser/https_upgrades/model/https_only_mode_egtest.mm
index 577a49b..5cab16e 100644
--- a/ios/chrome/browser/https_upgrades/model/https_only_mode_egtest.mm
+++ b/ios/chrome/browser/https_upgrades/model/https_only_mode_egtest.mm
@@ -60,8 +60,6 @@
 - (AppLaunchConfiguration)appConfigurationForTestCase {
   AppLaunchConfiguration config;
   config.relaunch_policy = NoForceRelaunchAndResetState;
-  config.features_enabled.push_back(
-      security_interstitials::features::kHttpsOnlyMode);
 
   config.features_disabled.push_back(
       security_interstitials::features::kHttpsUpgrades);
diff --git a/ios/chrome/browser/https_upgrades/model/https_only_mode_upgrade_tab_helper_unittest.mm b/ios/chrome/browser/https_upgrades/model/https_only_mode_upgrade_tab_helper_unittest.mm
index ed616e4..e2147e1606 100644
--- a/ios/chrome/browser/https_upgrades/model/https_only_mode_upgrade_tab_helper_unittest.mm
+++ b/ios/chrome/browser/https_upgrades/model/https_only_mode_upgrade_tab_helper_unittest.mm
@@ -30,16 +30,17 @@
 namespace {
 
 enum class HttpsUpgradesTestType {
-  // Neither HTTPS-Only Mode or HTTPS-Upgrades is enabled.
+  // HTTPS-Upgrades is disabled. HTTPS-Only Mode feature is enabled, but the
+  // pref is disabled.
   kNone,
   // HTTPS-Only Mode is enabled (both the feature and the UI preference).
   kHttpsOnlyMode,
-  // HTTPS-Upgrades is enabled.
+  // HTTPS-Upgrades is enabled. HTTPS-Only Mode feature is enabled, but the pref
+  // is disabled.
   kHttpsUpgrades,
   // Both HTTPS-Only Mode and HTTPS-Upgrades are enabled.
   kBoth
 };
-
 }
 
 std::unique_ptr<KeyedService> BuildFakePrerenderService(
@@ -68,38 +69,36 @@
 
     switch (GetParam()) {
       case HttpsUpgradesTestType::kNone:
+        profile_->GetPrefs()->SetBoolean(prefs::kHttpsOnlyModeEnabled, false);
         scoped_feature_list_.InitWithFeatures(
             /*enabled_features=*/{},
             /*disabled_features=*/
-            {security_interstitials::features::kHttpsOnlyMode,
-             security_interstitials::features::kHttpsUpgrades});
+            {security_interstitials::features::kHttpsUpgrades});
         break;
 
       case HttpsUpgradesTestType::kHttpsOnlyMode:
         profile_->GetPrefs()->SetBoolean(prefs::kHttpsOnlyModeEnabled, true);
         scoped_feature_list_.InitWithFeatures(
-            /*enabled_features=*/{security_interstitials::features::
-                                      kHttpsOnlyMode},
+            /*enabled_features=*/{},
             /*disabled_features=*/{
                 security_interstitials::features::kHttpsUpgrades});
         break;
 
       case HttpsUpgradesTestType::kHttpsUpgrades:
+        profile_->GetPrefs()->SetBoolean(prefs::kHttpsOnlyModeEnabled, false);
+
         scoped_feature_list_.InitWithFeatures(
             /*enabled_features=*/{security_interstitials::features::
                                       kHttpsUpgrades},
-            /*disabled_features=*/{
-                security_interstitials::features::kHttpsOnlyMode});
+            /*disabled_features=*/{});
         break;
 
       case HttpsUpgradesTestType::kBoth:
         profile_->GetPrefs()->SetBoolean(prefs::kHttpsOnlyModeEnabled, true);
-        scoped_feature_list_
-            .InitWithFeatures(/*enabled_features=*/
-                              {security_interstitials::features::kHttpsOnlyMode,
-                               security_interstitials::features::
-                                   kHttpsUpgrades},
-                              /*disabled_features=*/{});
+        scoped_feature_list_.InitWithFeatures(/*enabled_features=*/
+                                              {security_interstitials::
+                                                   features::kHttpsUpgrades},
+                                              /*disabled_features=*/{});
         break;
     }
 
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller.mm
index 1720078..8e5747c 100644
--- a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller.mm
+++ b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller.mm
@@ -252,12 +252,9 @@
   }
   [model addSectionWithIdentifier:SectionIdentifierSafeBrowsing];
 
-  if (base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsOnlyMode)) {
-    [model addSectionWithIdentifier:SectionIdentifierHTTPSOnlyMode];
-    [model addItem:self.HTTPSOnlyModeItem
-        toSectionWithIdentifier:SectionIdentifierHTTPSOnlyMode];
-  }
+  [model addSectionWithIdentifier:SectionIdentifierHTTPSOnlyMode];
+  [model addItem:self.HTTPSOnlyModeItem
+      toSectionWithIdentifier:SectionIdentifierHTTPSOnlyMode];
 
   [model addSectionWithIdentifier:SectionIdentifierWebServices];
   [model addSectionWithIdentifier:SectionIdentifierIncognitoAuth];
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller_unittest.mm
index c9fe7cb..c2a61cb 100644
--- a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_table_view_controller_unittest.mm
@@ -163,11 +163,7 @@
   CreateController();
   CheckController();
 
-  int expectedNumberOfSections = 6;
-  if (base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsOnlyMode)) {
-    expectedNumberOfSections++;
-  }
+  int expectedNumberOfSections = 7;
 
   // IncognitoInterstitial section.
   expectedNumberOfSections++;
@@ -195,13 +191,10 @@
       SafeBrowsingDetailText(), currentSection, 0);
 
   // HTTPS-Only Mode section.
-  if (base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsOnlyMode)) {
-    currentSection++;
-    EXPECT_EQ(1, NumberOfItemsInSection(currentSection));
-    CheckSwitchCellStateAndTextWithId(
-        NO, IDS_IOS_SETTINGS_HTTPS_ONLY_MODE_TITLE, currentSection, 0);
-  }
+  currentSection++;
+  EXPECT_EQ(1, NumberOfItemsInSection(currentSection));
+  CheckSwitchCellStateAndTextWithId(NO, IDS_IOS_SETTINGS_HTTPS_ONLY_MODE_TITLE,
+                                    currentSection, 0);
 
   // WebServices section.
   currentSection++;
@@ -279,11 +272,7 @@
   CreateController();
   CheckController();
 
-  int expectedNumberOfSections = 6;
-  if (base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsOnlyMode)) {
-    expectedNumberOfSections++;
-  }
+  int expectedNumberOfSections = 7;
 
   // IncognitoInterstitial section.
   expectedNumberOfSections++;
@@ -305,11 +294,7 @@
   CreateController();
   CheckController();
 
-  int expectedNumberOfSections = 6;
-  if (base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsOnlyMode)) {
-    expectedNumberOfSections++;
-  }
+  int expectedNumberOfSections = 7;
 
   // IncognitoInterstitial section.
   expectedNumberOfSections++;
diff --git a/ios/chrome/browser/share_kit/model/BUILD.gn b/ios/chrome/browser/share_kit/model/BUILD.gn
index d3ae8c70..9c6d61a 100644
--- a/ios/chrome/browser/share_kit/model/BUILD.gn
+++ b/ios/chrome/browser/share_kit/model/BUILD.gn
@@ -29,6 +29,7 @@
     "share_kit_share_group_configuration.mm",
   ]
   deps = [
+    "//components/data_sharing/public",
     "//components/data_sharing/public/protocol",
     "//components/keyed_service/core",
     "//ios/chrome/browser/saved_tab_groups/favicon/coordinator",
diff --git a/ios/chrome/browser/share_kit/model/share_kit_join_configuration.h b/ios/chrome/browser/share_kit/model/share_kit_join_configuration.h
index d5e43a5..67818c0f 100644
--- a/ios/chrome/browser/share_kit/model/share_kit_join_configuration.h
+++ b/ios/chrome/browser/share_kit/model/share_kit_join_configuration.h
@@ -7,6 +7,8 @@
 
 #import <UIKit/UIKit.h>
 
+#import "components/data_sharing/public/group_data.h"
+
 class GURL;
 
 // Configuration object for joining a shared group.
@@ -16,8 +18,12 @@
 @property(nonatomic, weak) UIViewController* baseViewController;
 
 // The URL used to join the group, containing the collab ID and the token.
+// TODO(crbug.com/377306986): Remove this.
 @property(nonatomic, assign) GURL URL;
 
+// The token used to join the group, containing the collab ID and the secret.
+@property(nonatomic, assign) data_sharing::GroupToken token;
+
 // Executed when the join flow ended. The `result` parameter indicates whether
 // the user successfully joined the group.
 @property(nonatomic, copy) void (^completionBlock)(BOOL result);
diff --git a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm
index 888ed918..68f63e51 100644
--- a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm
+++ b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm
@@ -211,23 +211,6 @@
   [defaults removeObjectForKey:key];
 }
 
-// Helper function migrating the preference `pref_name` of type "int" from
-// `defaults` to `pref_service` and to transform the "int" into "base::Time".
-void MigrateIntegerToTimePreferenceFromUserDefaults(std::string_view pref_name,
-                                                    PrefService* pref_service,
-                                                    NSUserDefaults* defaults) {
-  NSString* key = @(pref_name.data());
-  NSNumber* value =
-      base::apple::ObjCCast<NSNumber>([defaults objectForKey:key]);
-  if (!value) {
-    return;
-  }
-
-  pref_service->SetTime(pref_name.data(),
-                        base::Time::FromTimeT([value intValue]));
-  [defaults removeObjectForKey:key];
-}
-
 // Helper function migrating the preference `pref_name` of type "NSString" from
 // `defaults` to `pref_service`.
 void MigrateNSStringPreferenceFromUserDefaults(std::string_view pref_name,
@@ -1154,10 +1137,6 @@
 
   NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
 
-  // Added 12/2023.
-  MigrateIntegerToTimePreferenceFromUserDefaults(kLastCookieDeletionDate, prefs,
-                                                 defaults);
-
   // Added 01/2024.
   // Note that this key is an obsolete LocalState pref, it's here because it was
   // moved from LocalState pref to Profile pref and before clearing it the
diff --git a/ios/chrome/browser/supervised_user/OWNERS b/ios/chrome/browser/supervised_user/OWNERS
new file mode 100644
index 0000000..faa42f3a
--- /dev/null
+++ b/ios/chrome/browser/supervised_user/OWNERS
@@ -0,0 +1 @@
+file://components/supervised_user/OWNERS
diff --git a/ios/chrome/browser/tabs/model/tab_helper_util.mm b/ios/chrome/browser/tabs/model/tab_helper_util.mm
index 9cef3b8..92f0f30 100644
--- a/ios/chrome/browser/tabs/model/tab_helper_util.mm
+++ b/ios/chrome/browser/tabs/model/tab_helper_util.mm
@@ -313,16 +313,11 @@
 
   RepostFormTabHelper::CreateForWebState(web_state);
 
-  if (base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsOnlyMode) ||
-      base::FeatureList::IsEnabled(
-          security_interstitials::features::kHttpsUpgrades)) {
-    HttpsOnlyModeUpgradeTabHelper::CreateForWebState(
-        web_state, profile->GetPrefs(),
-        PrerenderServiceFactory::GetForProfile(profile),
-        HttpsUpgradeServiceFactory::GetForProfile(profile));
-    HttpsOnlyModeContainer::CreateForWebState(web_state);
-  }
+  HttpsOnlyModeUpgradeTabHelper::CreateForWebState(
+      web_state, profile->GetPrefs(),
+      PrerenderServiceFactory::GetForProfile(profile),
+      HttpsUpgradeServiceFactory::GetForProfile(profile));
+  HttpsOnlyModeContainer::CreateForWebState(web_state);
 
   if (base::FeatureList::IsEnabled(omnibox::kDefaultTypedNavigationsToHttps)) {
     TypedNavigationUpgradeTabHelper::CreateForWebState(
diff --git a/ios/components/security_interstitials/https_only_mode/feature.cc b/ios/components/security_interstitials/https_only_mode/feature.cc
index 144a2c6..5f1b4a81 100644
--- a/ios/components/security_interstitials/https_only_mode/feature.cc
+++ b/ios/components/security_interstitials/https_only_mode/feature.cc
@@ -7,8 +7,6 @@
 namespace security_interstitials {
 namespace features {
 
-BASE_FEATURE(kHttpsOnlyMode, "HttpsOnlyMode", base::FEATURE_ENABLED_BY_DEFAULT);
-
 BASE_FEATURE(kHttpsUpgrades,
              "HttpsUpgrades",
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
index 107217a0..a9e81ea 100644
--- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-5213c8f3b6278bf5219a8ce6e3bb0b7eaa021f8c
\ No newline at end of file
+0dcdf12833fce9121f398fbd6028d315820d9306
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
index 366f4b4..3bb825f1 100644
--- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@
-d6ad4d344626d43e9d1c57497fb45db430d83ba0
\ No newline at end of file
+78befffd0085397038733f2981bef5aeb8aa3cff
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
index 3ba5194..73ada09 100644
--- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-063661fc34d89b3fab732bf79d776595694b31ae
\ No newline at end of file
+98d1cdb1cc806cec95c3d3d42c43da99f0bdfe24
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
index 86cf3e5..96a56fab 100644
--- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@
-1878b37a5417bc4897b7a3c2ae2bf12c5ba4b290
\ No newline at end of file
+df718228aebee42a0c59fdb37ad0ef1220d46d7a
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
index c84655a4..cf6c722 100644
--- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-f7c6ec5a709a017522433ab9f29751ba47fb0569
\ No newline at end of file
+a19f6a3937a4b2cb487013cfc1ab8f49be697c78
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
index 81d5261c..05848f7f 100644
--- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@
-fe76c7a6260b3a9fdde98b4e7fd176de2cd8bf32
\ No newline at end of file
+860e97b77e999f58e6540a0eb4e7f05b6004eef7
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
index 6a5ca56..3870458 100644
--- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-d0c2e678cc5c19b854b6a7c98f47ce341da8f14a
\ No newline at end of file
+4166cd44b05c12c6131f0350f0f1c1406a1afc95
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
index a6f2a972..0ce6968 100644
--- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@
-a54e1348faf41936a60ecb80bac6f93e3a708540
\ No newline at end of file
+f2d639ebb33c12b0f293cd040e50b3d111004384
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
index fe75899..d3ac1067d5 100644
--- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-9717c7c51e1aa947f8907f9289f4aeffc23a1107
\ No newline at end of file
+aff6b8c5b18241e1e131c5b04e85befe39bdf69f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
index e240758..9c8d88f 100644
--- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@
-158d484b9df172ee51a4f31e2b02674aa4dbd0c4
\ No newline at end of file
+0717ef48b8bb3917c4c0b7be7ed4ffc6b360fb9d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index e5cdf03..e0857458 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-e2b99b7ff56b7db2f3427d43b57fa909517d024f
\ No newline at end of file
+6cb66b15494ac548af06670c5cde6052ca3f8dc0
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
index 487d9df03..b954993 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@
-7634304caa82885d7a69c97aff19b7c95c6552da
\ No newline at end of file
+f87a28060120a81b281ba988160f2bf3a7764d41
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index 629997e..a668f63 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-32329bb21e6d077a5214374e65aa5b58aeceb476
\ No newline at end of file
+73971d5427932fd36015cd751e326f34397a38cb
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
index fbc3fac9..4d30629 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@
-a3d5a565e066d34bf4124d46cf4ddce0aaaf62e2
\ No newline at end of file
+337ed392b04ea0a76aec28318897f864ab663622
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index 64d2b57..6345034 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-ae9c3ffcb16427b02ba115224f0b7d254bde7684
\ No newline at end of file
+0cc5afdf5351b0207294610ee5de636a5f833f13
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
index 2189f3c3..cd68357 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@
-99a89e6d22fa92a8bfd4084ed265f6548fc15600
\ No newline at end of file
+932740fcfa3c0003c8ce32875558feadc17d8dfd
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index 1987e1c..fcf4a93 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-0edf1713995c55a62420f0887f0909ba93a6fa8a
\ No newline at end of file
+bdc3e41e8555cf6dab38644294d8dd4553ba829e
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
index f8449f5a..33b0f6db 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@
-83aac2de4aac8cfe7e2358e40b54c6f89c13d37d
\ No newline at end of file
+42a9b4f1e7bba235e6a8f50ed8d48bc389ecf6e8
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
index e7a04772..12102ecb 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-cd123d0bbc8351716b80c673e6f00b3d396c66c8
\ No newline at end of file
+512580523a61a3a31a1deb3906c359e86c2fff91
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
index 565a193..3aebea9 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-4c384c64909fe3ac4338f98d6c58adb0e9fd6475
\ No newline at end of file
+a6d8c75daf75843155e2c01dba795a656dfff337
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index fce1253..9846ca62 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-7e69ccba6728a584824a9726859e8dae7e7e0d85
\ No newline at end of file
+5fa53968bfd060f3451fe68fde61c05d29a53246
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
index ebbd774df..1154b3f5 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@
-1e0381c032ceb02dde3c40243e9e29235141fb6e
\ No newline at end of file
+14805b7b471c2e71f8c76f3fb23807888ee5ee31
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index 33f157b..1c4b437e 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-11b430b81c9ba677b7b82de7325a93ac9c9c7205
\ No newline at end of file
+f43880c26911fd4ab862adafe85aae250bf5308d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
index 2e46ce9..38d1691 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@
-8780faf22233182fa4054ffa71df4c8af94c00ed
\ No newline at end of file
+5e1ffbb91f8c0ea9c2efa72341e7383c956c174b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index 03e6f55..b15c99f6 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-d55b3e51df3b18a1c9cc119d747efc8b3f2ad658
\ No newline at end of file
+6cc2602fcb4cbebf476b0946155323cd9ec0106b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
index fc613fe..bc4c2d7 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@
-28606eba881fa4339d7db1f2be91799c711b64ff
\ No newline at end of file
+1f2512db45c4fdd09ba36f8cf12cefb3c8b92042
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index 911a481..c8e1d7b 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-61068f0cb015ccb7993946b0404d52c94c16d0d0
\ No newline at end of file
+e28b46f3b4ccf21e0aee1eb23cea1e85f5ba9aaf
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
index 3ef75ae6..9674f6e 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@
-75b41c5d0b8ba85d142b14af51d4d5042812e8a7
\ No newline at end of file
+00c2939be3155d3eb529034b1bc8c0fd544665e7
\ No newline at end of file
diff --git a/ios_internal b/ios_internal
index d4240f6..78e59ed 160000
--- a/ios_internal
+++ b/ios_internal
@@ -1 +1 @@
-Subproject commit d4240f6c622349bab9877c20fcacba15f5da9ae9
+Subproject commit 78e59ed0707683eaf1ed43101be35d3f03ff675e
diff --git a/media/audio/mac/core_audio_util_mac.cc b/media/audio/mac/core_audio_util_mac.cc
index 5430b12..93d2827 100644
--- a/media/audio/mac/core_audio_util_mac.cc
+++ b/media/audio/mac/core_audio_util_mac.cc
@@ -459,7 +459,8 @@
       AudioTimestampHelper::FramesToTime(stream_latency_frames, sample_rate);
   const base::TimeDelta total_latency =
       audio_unit_latency +
-      (base::FeatureList::IsEnabled(kExcludeDeviceLatencyFromTotalLatency)
+      ((base::FeatureList::IsEnabled(kExcludeDeviceLatencyFromTotalLatency) &&
+        is_input)
            ? base::TimeDelta()
            : device_latency) +
       stream_latency;
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index d3595a3..9939a821 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2024-12-22 12:58 UTC
+# Last updated: 2024-12-23 12:57 UTC
 PinsListTimestamp
-1734872329
+1734958656
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json
index b66cd13e..e264098 100644
--- a/net/http/transport_security_state_static_pins.json
+++ b/net/http/transport_security_state_static_pins.json
@@ -31,7 +31,7 @@
 // the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets'
 // refer to, and the timestamp at which the pins list was last updated.
 //
-// Last updated: 2024-12-22 12:58 UTC
+// Last updated: 2024-12-23 12:57 UTC
 //
 {
   "pinsets": [
diff --git a/services/tracing/perfetto/consumer_host.cc b/services/tracing/perfetto/consumer_host.cc
index ea6129cca..ec43558 100644
--- a/services/tracing/perfetto/consumer_host.cc
+++ b/services/tracing/perfetto/consumer_host.cc
@@ -155,6 +155,7 @@
     : host_(host),
       tracing_session_client_(std::move(tracing_session_client)),
       receiver_(this, std::move(tracing_session_host)),
+      privacy_filtering_enabled_(true),
       tracing_priority_(priority) {
   host_->service()->RegisterTracingSession(this);
 
diff --git a/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc b/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc
index 233e7ae..c013a42b 100644
--- a/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc
+++ b/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc
@@ -224,15 +224,6 @@
     return true;
   }
 
-  void EstimateTraceMemoryOverhead(
-      base::trace_event::TraceEventMemoryOverhead* overhead) override {
-    overhead->Add(base::trace_event::TraceEventMemoryOverhead::kTracedValue,
-                  /* allocated size */
-                  buffer_.GetTotalSize(),
-                  /* resident size */
-                  buffer_.GetTotalSize());
-  }
-
  private:
   ProtoValue* AddDictEntry(const char* name) {
     DCHECK(!node_stack_.empty() && !node_stack_.top()->is_finalized());
diff --git a/third_party/angle b/third_party/angle
index 81a41e4..501f07a 160000
--- a/third_party/angle
+++ b/third_party/angle
@@ -1 +1 @@
-Subproject commit 81a41e4f10f960a290d89147c7a152fcd48f09a4
+Subproject commit 501f07a6dd53937d83dfad11928a75d0c0c88f73
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_task.cc b/third_party/blink/renderer/core/content_capture/content_capture_task.cc
index 8f4705dd..e95f388 100644
--- a/third_party/blink/renderer/core/content_capture/content_capture_task.cc
+++ b/third_party/blink/renderer/core/content_capture/content_capture_task.cc
@@ -284,9 +284,6 @@
 void ContentCaptureTask::Schedule(ScheduleReason reason) {
   DCHECK(local_frame_root_);
   has_content_change_ = true;
-  if (histogram_reporter_) {
-    histogram_reporter_->OnContentChanged();
-  }
   ScheduleInternal(reason);
 }
 
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.cc b/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.cc
index 08388fe..1d4863b2 100644
--- a/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.cc
+++ b/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.cc
@@ -11,7 +11,6 @@
 
 // static
 constexpr char ContentCaptureTaskHistogramReporter::kCaptureContentTime[];
-constexpr char ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime[];
 constexpr char ContentCaptureTaskHistogramReporter::kSendContentTime[];
 constexpr char ContentCaptureTaskHistogramReporter::kSentContentCount[];
 constexpr char ContentCaptureTaskHistogramReporter::kTaskDelayInMs[];
@@ -25,13 +24,6 @@
 ContentCaptureTaskHistogramReporter::~ContentCaptureTaskHistogramReporter() =
     default;
 
-void ContentCaptureTaskHistogramReporter::OnContentChanged() {
-  if (content_change_time_) {
-    return;
-  }
-  content_change_time_ = base::TimeTicks::Now();
-}
-
 void ContentCaptureTaskHistogramReporter::OnTaskScheduled(
     bool record_task_delay) {
   // Always save the latest schedule time.
@@ -55,14 +47,8 @@
 void ContentCaptureTaskHistogramReporter::OnCaptureContentEnded(
     size_t captured_content_count) {
   if (!captured_content_count) {
-    // We captured nothing for the recorded content change, reset the time to
-    // start again.
-    content_change_time_.reset();
     return;
   }
-  // Gives content_change_time_ to the change occurred while sending the
-  // content.
-  captured_content_change_time_ = std::move(content_change_time_);
   base::TimeDelta delta = base::TimeTicks::Now() - capture_content_start_time_;
   capture_content_time_histogram_.CountMicroseconds(delta);
 }
@@ -73,18 +59,10 @@
 
 void ContentCaptureTaskHistogramReporter::OnSendContentEnded(
     size_t sent_content_count) {
-  base::TimeTicks now = base::TimeTicks::Now();
-  if (captured_content_change_time_) {
-    base::TimeTicks content_change_time = captured_content_change_time_.value();
-    captured_content_change_time_.reset();
-    base::UmaHistogramCustomTimes(
-        kCaptureContentDelayTime, now - content_change_time,
-        base::Milliseconds(500), base::Seconds(30), 50);
-  }
   if (!sent_content_count) {
     return;
   }
-  send_content_time_histogram_.CountMicroseconds(now -
+  send_content_time_histogram_.CountMicroseconds(base::TimeTicks::Now() -
                                                  send_content_start_time_);
 }
 
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.h b/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.h
index 6999d78..61af1ce 100644
--- a/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.h
+++ b/third_party/blink/renderer/core/content_capture/content_capture_task_histogram_reporter.h
@@ -19,8 +19,6 @@
     : public RefCounted<ContentCaptureTaskHistogramReporter> {
  public:
   // Visible for testing.
-  static constexpr char kCaptureContentDelayTime[] =
-      "ContentCapture.CaptureContentDelayTime";
   static constexpr char kCaptureContentTime[] =
       "ContentCapture.CaptureContentTime2";
   static constexpr char kSendContentTime[] = "ContentCapture.SendContentTime";
@@ -33,7 +31,6 @@
   ContentCaptureTaskHistogramReporter();
   ~ContentCaptureTaskHistogramReporter();
 
-  void OnContentChanged();
   void OnTaskScheduled(bool record_task_delay);
   // Invoked on every task starts.
   void OnTaskRun();
@@ -52,12 +49,6 @@
  private:
   void MayRecordTaskRunsPerCapture();
 
-  // The time of first content change since the last content captured.
-  std::optional<base::TimeTicks> content_change_time_;
-  // The copy of |content_change_time| after the content has been captured; we
-  // need to record the time the content has been sent, |content_change_time_|
-  // shall be released for the next content change.
-  std::optional<base::TimeTicks> captured_content_change_time_;
   // The time to start capturing content.
   base::TimeTicks capture_content_start_time_;
   // The time to start sending content.
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_test.cc b/third_party/blink/renderer/core/content_capture/content_capture_test.cc
index 51c0a4285..e8da2bf 100644
--- a/third_party/blink/renderer/core/content_capture/content_capture_test.cc
+++ b/third_party/blink/renderer/core/content_capture/content_capture_test.cc
@@ -580,8 +580,6 @@
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSendContentTime, 0u);
   histograms.ExpectTotalCount(
-      ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime, 0u);
-  histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSentContentCount, 0u);
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kTaskRunsPerCapture, 0u);
@@ -598,8 +596,6 @@
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSendContentTime, 0u);
   histograms.ExpectTotalCount(
-      ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime, 0u);
-  histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSentContentCount, 0u);
 
   // The task stops at kProcessRetryTask because the captured content
@@ -614,8 +610,6 @@
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSendContentTime, 1u);
   histograms.ExpectTotalCount(
-      ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime, 1u);
-  histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSentContentCount, 0u);
 
   // Run task until it stops, task will not capture content, because there is no
@@ -629,8 +623,6 @@
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSendContentTime, 2u);
   histograms.ExpectTotalCount(
-      ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime, 1u);
-  histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSentContentCount, 0u);
 
   // Verify retry task won't count to TaskDelay metrics.
@@ -654,8 +646,6 @@
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSendContentTime, 3u);
   histograms.ExpectTotalCount(
-      ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime, 2u);
-  histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSentContentCount, 0u);
 
   histograms.ExpectTotalCount(
@@ -672,8 +662,6 @@
   histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSendContentTime, 3u);
   histograms.ExpectTotalCount(
-      ContentCaptureTaskHistogramReporter::kCaptureContentDelayTime, 2u);
-  histograms.ExpectTotalCount(
       ContentCaptureTaskHistogramReporter::kSentContentCount, 1u);
   // Verify total content has been sent.
   histograms.ExpectBucketCount(
diff --git a/third_party/blink/renderer/core/css/style_environment_variables.cc b/third_party/blink/renderer/core/css/style_environment_variables.cc
index 56c65b6..474c0a8 100644
--- a/third_party/blink/renderer/core/css/style_environment_variables.cc
+++ b/third_party/blink/renderer/core/css/style_environment_variables.cc
@@ -252,6 +252,10 @@
   parent_ = nullptr;
 }
 
+String StyleEnvironmentVariables::FormatFloatPx(float value) {
+  return String::Format("%gpx", value);
+}
+
 String StyleEnvironmentVariables::FormatPx(int value) {
   return String::Format("%dpx", value);
 }
diff --git a/third_party/blink/renderer/core/css/style_environment_variables.h b/third_party/blink/renderer/core/css/style_environment_variables.h
index 482a8369..80c3b18 100644
--- a/third_party/blink/renderer/core/css/style_environment_variables.h
+++ b/third_party/blink/renderer/core/css/style_environment_variables.h
@@ -131,6 +131,7 @@
 
   // Stringify |value| and append 'px'. Helper for setting variables that are
   // CSS lengths.
+  static String FormatFloatPx(float value);
   static String FormatPx(int value);
 
   virtual const FeatureContext* GetFeatureContext() const;
diff --git a/third_party/blink/renderer/core/frame/browser_controls_test.cc b/third_party/blink/renderer/core/frame/browser_controls_test.cc
index af9ab7f..cf3c110 100644
--- a/third_party/blink/renderer/core/frame/browser_controls_test.cc
+++ b/third_party/blink/renderer/core/frame/browser_controls_test.cc
@@ -436,11 +436,26 @@
   web_view->GetSettings()->SetDynamicSafeAreaInsetsEnabled(true);
   SetSafeAreaInsets(GetFrame(), gfx::Insets().set_bottom(30));
 
+  web_view->MainFrameViewWidget()->SetZoomLevel(ZoomFactorToZoomLevel(1.6));
+  web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
+                                      0, 50.f, true);
+  CompositeForTest();
+  EXPECT_EQ("18.75px", ResolveSafeAreaInsetsBottom());
+}
+
+TEST_F(BrowserControlsTest, SafeAreaInsetAccountsForDSF) {
+  ScopedDynamicSafeAreaInsetsForTest dynamic_safe_area_insets(true);
+
+  WebViewImpl* web_view = Initialize();
+  web_view->GetSettings()->SetDynamicSafeAreaInsetsEnabled(true);
+  SetSafeAreaInsets(GetFrame(), gfx::Insets().set_bottom(30));
+
+  web_view->MainFrameViewWidget()->SetDeviceScaleFactorForTesting(2.0);
   web_view->MainFrameViewWidget()->SetZoomLevel(ZoomFactorToZoomLevel(2.0));
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       0, 50.f, true);
   CompositeForTest();
-  EXPECT_EQ("15px", ResolveSafeAreaInsetsBottom());
+  EXPECT_EQ("7.5px", ResolveSafeAreaInsetsBottom());
 }
 
 // Scrolling up should show browser controls.
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc
index 306c3b2..7cde744 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -115,7 +115,7 @@
     init->setAttributes(true);
     observer_->observe(select_, init, ASSERT_NO_EXCEPTION);
     // Traverse descendants that have been added to the select so far.
-    TraverseDescendants();
+    TraverseNodeDescendants(select_);
   }
 
   ExecutionContext* GetExecutionContext() const override {
@@ -126,15 +126,8 @@
                MutationObserver&) override {
     for (const auto& record : records) {
       if (record->type() == "childList") {
-        auto* added_nodes = record->addedNodes();
-        for (unsigned i = 0; i < added_nodes->length(); ++i) {
-          auto* descendant = added_nodes->item(i);
-          DCHECK(descendant);
-          if (IsWhitespaceOrEmpty(*descendant)) {
-            continue;
-          }
-          AddDescendantDisallowedErrorToNode(*descendant);
-        }
+        CheckAddedNodes(record);
+        CheckRemovedNodes(record);
       } else if ((record->type() == "attributes") &&
                  (record->attributeName() == html_names::kTabindexAttr ||
                   record->attributeName() ==
@@ -153,9 +146,49 @@
   }
 
  private:
-  void TraverseDescendants() {
-    for (Node* descendant = NodeTraversal::FirstWithin(*select_); descendant;
-         descendant = NodeTraversal::Next(*descendant, select_)) {
+  void CheckAddedNodes(MutationRecord* record) {
+    DCHECK(record);
+    auto* added_nodes = record->addedNodes();
+    for (unsigned i = 0; i < added_nodes->length(); ++i) {
+      auto* descendant = added_nodes->item(i);
+      DCHECK(descendant);
+      if (IsWhitespaceOrEmpty(*descendant)) {
+        continue;
+      }
+      AddDescendantDisallowedErrorToNode(*descendant);
+      // Check the added node's descendants, if any.
+      TraverseNodeDescendants(descendant);
+    }
+  }
+
+  void CheckRemovedNodes(MutationRecord* record) {
+    DCHECK(record);
+    auto* removed_nodes = record->removedNodes();
+    DCHECK(removed_nodes);
+    for (unsigned i = 0; i < removed_nodes->length(); ++i) {
+      auto* descendant = removed_nodes->item(i);
+      DCHECK(descendant);
+      if (IsWhitespaceOrEmpty(*descendant)) {
+        continue;
+      }
+      if (!IsAllowedInteractiveElement(*descendant)) {
+        select_->DecreaseContentModelViolationCount();
+      }
+      // Check the removed node's descendants, if any.
+      for (Node* nested_descendant = NodeTraversal::FirstWithin(*descendant);
+           nested_descendant; nested_descendant = NodeTraversal::Next(
+                                  *nested_descendant, descendant)) {
+        if (!IsWhitespaceOrEmpty(*nested_descendant) &&
+            !IsAllowedInteractiveElement(*nested_descendant)) {
+          select_->DecreaseContentModelViolationCount();
+        }
+      }
+    }
+  }
+
+  void TraverseNodeDescendants(const Node* node) {
+    for (Node* descendant = NodeTraversal::FirstWithin(*node); descendant;
+         descendant = NodeTraversal::Next(*descendant, node)) {
       if (!IsWhitespaceOrEmpty(*descendant)) {
         AddDescendantDisallowedErrorToNode(*descendant);
       }
@@ -163,7 +196,10 @@
   }
 
   void AddDescendantDisallowedErrorToNode(Node& node) {
-    if (!IsDescendantAllowed(node)) {
+    if (!IsAllowedDescendant(node)) {
+      if (!IsAllowedInteractiveElement(node)) {
+        select_->IncreaseContentModelViolationCount();
+      }
       // TODO(ansollan): Report an Issue to the DevTools' Issue Panel as well.
       node.AddConsoleMessage(
           mojom::blink::ConsoleMessageSource::kRecommendation,
@@ -173,7 +209,31 @@
     }
   }
 
-  bool IsDescendantAllowed(const Node& descendant) {
+  bool IsAllowedInteractiveElement(const Node& node) {
+    if (IsA<HTMLButtonElement>(node)) {
+      // The <button> must have a parent (not being inserted as a child of
+      // `HTMLSelectedContentElement`) and must be the first child of the
+      // <select>.
+      const Node* parent = node.parentNode();
+      return parent && IsA<HTMLSelectElement>(*parent) &&
+             !ElementTraversal::PreviousSibling(node);
+    }
+    // If the node isn't a <button> but it is an interactive element, we return
+    // false as interactive elements are disallowed.
+    return !IsInteractiveElement(node);
+  }
+
+  bool IsInteractiveElement(const Node& node) {
+    if (HasTabIndexAttribute(node)) {
+      return true;
+    }
+    if (auto* html_element = DynamicTo<HTMLElement>(node)) {
+      return IsContenteditable(node) || html_element->IsInteractiveContent();
+    }
+    return false;
+  }
+
+  bool IsAllowedDescendant(const Node& descendant) {
     // Get the parent of the descendant.
     const Node* parent = descendant.parentNode();
     // If the node has no parent, assume it is being appended to a
@@ -242,28 +302,24 @@
     // Check tabindex and contenteditable attributes of the descendant as well.
     return (IsA<HTMLDivElement>(descendant) ||
             IsAllowedPhrasingContent(descendant)) &&
-           IsAllowedTabIndex(descendant) &&
-           IsAllowedContenteditable(descendant);
+           !HasTabIndexAttribute(descendant) && !IsContenteditable(descendant);
   }
 
-  bool IsAllowedTabIndex(const Node& node) {
+  bool HasTabIndexAttribute(const Node& node) {
     if (auto* element = DynamicTo<Element>(node)) {
-      return !element->FastHasAttribute(html_names::kTabindexAttr);
+      return element->FastHasAttribute(html_names::kTabindexAttr);
     }
-    // Text nodes don't have attributes, so we return true if it is a text node.
-    return node.IsTextNode();
+    return false;
   }
 
-  bool IsAllowedContenteditable(const Node& node) {
+  bool IsContenteditable(const Node& node) {
     if (auto* html_element = DynamicTo<HTMLElement>(node)) {
       ContentEditableType normalized_value =
           html_element->contentEditableNormalized();
-      return !(normalized_value == ContentEditableType::kContentEditable ||
-               normalized_value == ContentEditableType::kPlaintextOnly);
+      return normalized_value == ContentEditableType::kContentEditable ||
+             normalized_value == ContentEditableType::kPlaintextOnly;
     }
-    // Similarly to above, only HTML elements can have the `contenteditable`
-    // attribute. We return true if the node is a text node or an <svg> element.
-    return node.IsTextNode() || node.IsSVGElement();
+    return false;
   }
 
   bool TraverseAncestorsAndCheckDescendant(const Node& descendant) {
@@ -1021,6 +1077,20 @@
   return nullptr;
 }
 
+bool HTMLSelectElement::IsInDialogMode() const {
+  return content_model_violations_count_ > 0U;
+}
+
+void HTMLSelectElement::IncreaseContentModelViolationCount() {
+  ++content_model_violations_count_;
+}
+
+void HTMLSelectElement::DecreaseContentModelViolationCount() {
+  if (content_model_violations_count_ > 0U) {
+    --content_model_violations_count_;
+  }
+}
+
 int HTMLSelectElement::selectedIndex() const {
   unsigned index = 0;
 
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.h b/third_party/blink/renderer/core/html/forms/html_select_element.h
index 3e10fa4..23066aa 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.h
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.h
@@ -139,6 +139,12 @@
   // Returns the first selected OPTION, or nullptr.
   HTMLOptionElement* SelectedOption() const;
 
+  // Returns true if any of the <select>'s descendants are disallowed
+  // interactive elements.
+  bool IsInDialogMode() const;
+  void IncreaseContentModelViolationCount();
+  void DecreaseContentModelViolationCount();
+
   // This is similar to |options| HTMLCollection.  But this is safe in
   // HTMLOptionElement::removedFrom() and insertedInto().
   // OptionList supports only forward iteration.
@@ -398,6 +404,7 @@
   int index_to_select_on_cancel_;
 
   Member<SelectDescendantsObserver> descendants_observer_;
+  unsigned content_model_violations_count_ = 0U;
 
   friend class ListBoxSelectType;
   friend class MenuListSelectType;
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element_test.cc b/third_party/blink/renderer/core/html/forms/html_select_element_test.cc
index da56598e..c03112af 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element_test.cc
+++ b/third_party/blink/renderer/core/html/forms/html_select_element_test.cc
@@ -13,6 +13,7 @@
 #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/forms/form_controller.h"
+#include "third_party/blink/renderer/core/html/forms/html_button_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_option_element.h"
@@ -20,7 +21,11 @@
 #include "third_party/blink/renderer/core/html/html_hr_element.h"
 #include "third_party/blink/renderer/core/layout/layout_theme.h"
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
+#include "third_party/blink/renderer/core/testing/sim/sim_compositor.h"
+#include "third_party/blink/renderer/core/testing/sim/sim_request.h"
+#include "third_party/blink/renderer/core/testing/sim/sim_test.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 
 namespace blink {
 
@@ -763,4 +768,306 @@
   EXPECT_EQ(expected_items, actual_items);
 }
 
+TEST_F(HTMLSelectElementTest, DialogModeDefault) {
+  SetHtmlInnerHTML(R"HTML(
+    <select id="target"></select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest, DialogModeBaseSelectDefault) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target"></select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest, DialogModeBaseSelectAllowedDescendant) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>A</option>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest, DialogModeBaseSelectButtonDescendant) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <button>button</button>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest, DialogModeBaseSelectButtonAndOption) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <button>button</button>
+      <option>A</option>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest, DialogModeBaseSelectDisallowedButton) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>A</option>
+      <button>button</button>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_TRUE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest,
+       DialogModeBaseSelectDisallowedButtonWithinOption) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>
+        <button>button</button>
+      </option>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_TRUE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest, DialogModeBaseSelectDisallowedTabIndexElement) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>
+        <span tabindex="1">..</span>
+      </option>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_TRUE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest,
+       DialogModeBaseSelectDisallowedContenteditableElement) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>
+        <span contenteditable="true">..</span>
+      </option>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_TRUE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementTest,
+       DialogModeBaseSelectDisallowedInteractiveElement) {
+  SetHtmlInnerHTML(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <input>
+    </select>
+  )HTML");
+
+  auto* select = To<HTMLSelectElement>(GetElementById("target"));
+  ASSERT_TRUE(select->IsInDialogMode());
+}
+
+class HTMLSelectElementSimTest : public SimTest {};
+
+TEST_F(HTMLSelectElementSimTest, DialogModeBaseSelectAddAllowedButton) {
+  SimRequest main_resource("https://example.com", "text/html");
+
+  LoadURL("https://example.com");
+
+  main_resource.Complete(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>A</option>
+      <option>B</option>
+      <option>C</option>
+    </select>
+  )HTML");
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  auto* select = To<HTMLSelectElement>(
+      GetDocument().getElementById(AtomicString("target")));
+  ASSERT_FALSE(select->IsInDialogMode());
+
+  auto* button = MakeGarbageCollected<HTMLButtonElement>(GetDocument());
+  select->appendChild(button);
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  ASSERT_TRUE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementSimTest, DialogModeBaseSelectRemoveDisallowedButton) {
+  SimRequest main_resource("https://example.com", "text/html");
+
+  LoadURL("https://example.com");
+
+  main_resource.Complete(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+
+    <select id="target">
+      <option>A</option>
+      <option>B</option>
+      <option>C</option>
+      <button id="target-button">button</button>
+    </select>
+  )HTML");
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  auto* select = To<HTMLSelectElement>(
+      GetDocument().getElementById(AtomicString("target")));
+  ASSERT_TRUE(select->IsInDialogMode());
+
+  auto* button = GetDocument().getElementById(AtomicString("target-button"));
+  select->removeChild(button);
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
+TEST_F(HTMLSelectElementSimTest, DialogModeBaseSelectNestedButton) {
+  SimRequest main_resource("https://example.com", "text/html");
+
+  LoadURL("https://example.com");
+
+  main_resource.Complete(R"HTML(
+    <style>
+      select,
+      select::picker(select) {
+        appearance: base-select;
+      }
+    </style>
+    <select id="target">
+      <option id="option">A</option>
+    </select>
+  )HTML");
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  auto* select = To<HTMLSelectElement>(
+      GetDocument().getElementById(AtomicString("target")));
+  ASSERT_FALSE(select->IsInDialogMode());
+
+  auto* div = MakeGarbageCollected<HTMLDivElement>(GetDocument());
+  auto* first_button = MakeGarbageCollected<HTMLButtonElement>(GetDocument());
+  auto* second_button = MakeGarbageCollected<HTMLButtonElement>(GetDocument());
+  auto* option = To<HTMLOptionElement>(
+      GetDocument().getElementById(AtomicString("option")));
+
+  div->appendChild(first_button);
+  option->appendChild(div);
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  ASSERT_TRUE(select->IsInDialogMode());
+
+  option->remove();
+  select->appendChild(second_button);
+
+  test::RunPendingTasks();
+  Compositor().BeginFrame();
+
+  ASSERT_FALSE(select->IsInDialogMode());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
index b2f33611..227d16a 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
@@ -28,11 +28,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/loader/resource/image_resource.h"
 
 #include <memory>
@@ -901,8 +896,8 @@
       /*body=*/mojo::ScopedDataPipeConsumerHandle(),
       /*cached_metadata=*/std::nullopt);
   image_resource->Loader()->DidReceiveDataForTesting(
-      base::span(reinterpret_cast<const char*>(kJpegImage),
-                 kJpegImageSubrangeWithoutDimensionsLength));
+      base::as_chars(base::span(kJpegImage))
+          .first(kJpegImageSubrangeWithoutDimensionsLength));
 
   EXPECT_EQ(ResourceStatus::kPending, image_resource->GetStatus());
   EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
diff --git a/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc b/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc
index ba6f5b1f..93224eab 100644
--- a/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/mojom/loader/code_cache.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc
index 0c061e1..9f451a00 100644
--- a/third_party/blink/renderer/core/page/page.cc
+++ b/third_party/blink/renderer/core/page/page.cc
@@ -121,17 +121,18 @@
 bool g_limit_max_frames_to_ten_for_testing = false;
 
 // static
-void SetSafeAreaEnvVariables(LocalFrame* frame, const gfx::Insets& safe_area) {
+void SetSafeAreaEnvVariables(LocalFrame* frame, const gfx::InsetsF& safe_area) {
   DocumentStyleEnvironmentVariables& vars =
       frame->GetDocument()->GetStyleEngine().EnsureEnvironmentVariables();
   vars.SetVariable(UADefinedVariable::kSafeAreaInsetTop,
-                   StyleEnvironmentVariables::FormatPx(safe_area.top()));
+                   StyleEnvironmentVariables::FormatFloatPx(safe_area.top()));
   vars.SetVariable(UADefinedVariable::kSafeAreaInsetLeft,
-                   StyleEnvironmentVariables::FormatPx(safe_area.left()));
-  vars.SetVariable(UADefinedVariable::kSafeAreaInsetBottom,
-                   StyleEnvironmentVariables::FormatPx(safe_area.bottom()));
+                   StyleEnvironmentVariables::FormatFloatPx(safe_area.left()));
+  vars.SetVariable(
+      UADefinedVariable::kSafeAreaInsetBottom,
+      StyleEnvironmentVariables::FormatFloatPx(safe_area.bottom()));
   vars.SetVariable(UADefinedVariable::kSafeAreaInsetRight,
-                   StyleEnvironmentVariables::FormatPx(safe_area.right()));
+                   StyleEnvironmentVariables::FormatFloatPx(safe_area.right()));
 }
 
 }  // namespace
@@ -961,8 +962,8 @@
     applied_safe_area_insets_ = new_scaled_safe_area;
 
     float zoom_factor = DeprecatedLocalMainFrame()->LayoutZoomFactor();
-    gfx::Insets new_safe_area =
-        ToRoundedInsets(ScaleInsets(new_scaled_safe_area, 1.0f / zoom_factor));
+    gfx::InsetsF new_safe_area =
+        ScaleInsets(new_scaled_safe_area, 1.0f / zoom_factor);
     SetSafeAreaEnvVariables(DeprecatedLocalMainFrame(), new_safe_area);
   }
 }
@@ -991,7 +992,7 @@
     // UpdateSafeAreaInsetWithBrowserControls() is called.
     UpdateSafeAreaInsetWithBrowserControls(GetBrowserControls(), true);
   } else {
-    SetSafeAreaEnvVariables(setter, max_safe_area);
+    SetSafeAreaEnvVariables(setter, gfx::InsetsF(max_safe_area));
   }
 }
 
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_test.cc b/third_party/blink/renderer/core/paint/compositing/compositing_test.cc
index 7a271c1..e578cf1 100644
--- a/third_party/blink/renderer/core/paint/compositing/compositing_test.cc
+++ b/third_party/blink/renderer/core/paint/compositing/compositing_test.cc
@@ -1786,6 +1786,87 @@
   }
 }
 
+// This test ensures that adding and removing "env(safe--area-insert-bottom)"
+// values to the 'bottom' CSS property, correctly invalidates and updates
+// transform node properties.
+TEST_P(CompositingSimTest, IsBottomRelativeToSafeAreaInsetUpdates) {
+  InitializeWithHTML(R"HTML(
+      <!DOCTYPE html>
+      <style>
+        body { height: 2000px; }
+        #fixed {
+          width: 100px;
+          height: 100px;
+          position: fixed;
+          left: 0;
+          background-color: red;
+        }
+      </style>
+      <div id='fixed'></div>
+  )HTML");
+  // env(safe-area-inset-bottom) should be 0px so that computed 'bottom'
+  // property does not itself invalidate layout, and mask other issues.
+  // The 'IsBottomRelativeToSafeAreaInset' property should by itself
+  // trigger layout invalidation and transform node update.
+  WebView().GetPage()->SetMaxSafeAreaInsets(
+      WebView().MainFrameImpl()->GetFrame(), gfx::Insets().set_bottom(0));
+
+  auto* fixed_element = GetElementById("fixed");
+  auto* fixed_element_layer = CcLayerByDOMElementId("fixed");
+
+  // A bottom fixed position DIV not using env(safe-area-inset-bottom)
+  // should be moved by viewport bounds, but not by safe area bottom in cc.
+  {
+    fixed_element->setAttribute(html_names::kStyleAttr,
+                                AtomicString("bottom: 10px"));
+    Compositor().BeginFrame();
+
+    auto transform_tree_index = fixed_element_layer->transform_tree_index();
+    const auto* transform_node =
+        GetPropertyTrees()->transform_tree().Node(transform_tree_index);
+
+    DCHECK(transform_node);
+    EXPECT_TRUE(transform_node->moved_by_outer_viewport_bounds_delta_y);
+    EXPECT_FALSE(transform_node->moved_by_safe_area_bottom);
+  }
+
+  // A bottom fixed position DIV using calc(env(safe-area-inset-bottom) +
+  // length) should be moved by viewport bounds, and by safe area bottom in cc.
+  {
+    fixed_element->setAttribute(
+        html_names::kStyleAttr,
+        AtomicString("bottom: calc(env(safe-area-inset-bottom) + 10px)"));
+    Compositor().BeginFrame();
+
+    auto transform_tree_index = fixed_element_layer->transform_tree_index();
+    const auto* transform_node =
+        GetPropertyTrees()->transform_tree().Node(transform_tree_index);
+
+    DCHECK(transform_node);
+    EXPECT_TRUE(transform_node->moved_by_outer_viewport_bounds_delta_y);
+    EXPECT_TRUE(transform_node->moved_by_safe_area_bottom);
+  }
+
+  // A bottom fixed position DIV using calc(env(safe-area-inset-bottom) *
+  // number) should be moved by viewport bounds, but not by safe area bottom in
+  // cc.
+  {
+    fixed_element->setAttribute(
+        html_names::kStyleAttr,
+        AtomicString("bottom: calc(env(safe-area-inset-bottom) * 1 + 10px)"));
+
+    Compositor().BeginFrame();
+
+    auto transform_tree_index = fixed_element_layer->transform_tree_index();
+    const auto* transform_node =
+        GetPropertyTrees()->transform_tree().Node(transform_tree_index);
+
+    DCHECK(transform_node);
+    EXPECT_TRUE(transform_node->moved_by_outer_viewport_bounds_delta_y);
+    EXPECT_FALSE(transform_node->moved_by_safe_area_bottom);
+  }
+}
+
 // When a property tree change occurs that affects layer transform-origin, the
 // transform can be directly updated without explicitly marking the layer as
 // damaged. The ensure damage occurs, the transform node should have
diff --git a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
index 12ebfb8..9db5468 100644
--- a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
+++ b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
@@ -1350,7 +1350,7 @@
       type_name: "bool",
       field_group: "*",
       default_value: "false",
-      invalidate: ["paint"]
+      invalidate: ["layout"]
     }
   ],
 }
diff --git a/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.cc b/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.cc
index 06a587e5..15158403 100644
--- a/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.cc
+++ b/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.cc
@@ -113,11 +113,6 @@
   return traced_value_->AppendToProto(appender);
 }
 
-void TracedValue::EstimateTraceMemoryOverhead(
-    base::trace_event::TraceEventMemoryOverhead* overhead) {
-  traced_value_->EstimateTraceMemoryOverhead(overhead);
-}
-
 TracedValueJSON::TracedValueJSON()
     : TracedValue(std::make_unique<base::trace_event::TracedValueJSON>()) {}
 TracedValueJSON::~TracedValueJSON() = default;
diff --git a/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h b/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h
index 157803b..1a80003 100644
--- a/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h
+++ b/third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h
@@ -58,8 +58,6 @@
   // ConvertableToTraceFormat
   void AppendAsTraceFormat(std::string*) const final;
   bool AppendToProto(ProtoAppender* appender) const final;
-  void EstimateTraceMemoryOverhead(
-      base::trace_event::TraceEventMemoryOverhead*) final;
 };
 
 // Thin wrapper around base::trace_event::TracedValueJSON.
diff --git a/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.cc b/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.cc
index a0168bf..84dc266 100644
--- a/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.cc
+++ b/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.cc
@@ -10,7 +10,6 @@
 #include "base/memory/discardable_memory.h"
 #include "base/memory/ptr_util.h"
 #include "base/trace_event/process_memory_dump.h"
-#include "base/trace_event/trace_event_memory_overhead.h"
 #include "base/trace_event/traced_value.h"
 #include "skia/ext/skia_trace_memory_dump_impl.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/web_memory_allocator_dump.h"
@@ -163,14 +162,4 @@
   return CreateWebMemoryAllocatorDump(dump);
 }
 
-void WebProcessMemoryDump::DumpHeapUsage(
-    const std::unordered_map<base::trace_event::AllocationContext,
-                             base::trace_event::AllocationMetrics>&
-        metrics_by_context,
-    base::trace_event::TraceEventMemoryOverhead& overhead,
-    const char* allocator_name) {
-  process_memory_dump_->DumpHeapUsage(metrics_by_context, overhead,
-                                      allocator_name);
-}
-
 }  // namespace content
diff --git a/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h b/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h
index 500ea6d3..7bdf1a6 100644
--- a/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h
+++ b/third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h
@@ -25,7 +25,6 @@
 namespace trace_event {
 class MemoryAllocatorDump;
 class ProcessMemoryDump;
-class TraceEventMemoryOverhead;
 }  // namespace base
 }  // namespace trace_event
 
@@ -127,15 +126,6 @@
       const std::string& name,
       base::DiscardableMemory* discardable);
 
-  // Dumps heap memory usage. |allocatorName| is used as an absolute name for
-  // base::trace_event::ProcessMemoryDump::DumpHeapUsage().
-  void DumpHeapUsage(
-      const std::unordered_map<base::trace_event::AllocationContext,
-                               base::trace_event::AllocationMetrics>&
-          metrics_by_context,
-      base::trace_event::TraceEventMemoryOverhead& overhead,
-      const char* allocator_name);
-
  private:
   FRIEND_TEST_ALL_PREFIXES(WebProcessMemoryDumpTest, IntegrationTest);
 
diff --git a/third_party/blink/web_tests/TestLists/headless_shell.filter b/third_party/blink/web_tests/TestLists/headless_shell.filter
index cb45e09..11679e48 100644
--- a/third_party/blink/web_tests/TestLists/headless_shell.filter
+++ b/third_party/blink/web_tests/TestLists/headless_shell.filter
@@ -58,6 +58,7 @@
 -external/wpt/background-fetch/update-ui.https.window.html
 -external/wpt/battery-status/page-visibility.https.html
 -external/wpt/bluetooth/*
+-external/wpt/client-hints/viewport-size/viewport-size-subresource.https.html
 -external/wpt/client-hints/viewport-size/viewport-size-window-different-dimensions.https.html
 -external/wpt/clipboard-apis/async-navigator-clipboard-write-multiple.tentative.https.sub.html
 -external/wpt/compat/webkit-box-clamp-bottom-border.html
@@ -149,6 +150,7 @@
 -external/wpt/css/css-anchor-position/anchor-getComputedStyle-002.html
 -external/wpt/css/css-anchor-position/anchor-scroll-004.html
 -external/wpt/css/css-anchor-position/anchor-scroll-position-try-014.html
+-external/wpt/css/css-anchor-position/anchor-scroll-to-sticky-003.html
 -external/wpt/css/css-anchor-position/position-try-switch-from-fixed-anchor.html
 -external/wpt/css/css-anchor-position/position-visibility-anchors-visible-after-scroll-in.html
 -external/wpt/css/css-anchor-position/position-visibility-anchors-visible-chained-004.html
@@ -287,17 +289,33 @@
 -external/wpt/css/css-highlight-api/painting/custom-highlight-painting-vertical-writing-mode-001.html
 -external/wpt/css/css-inline/baseline-source/baseline-source-first-textarea-002.tentative.html
 -external/wpt/css/css-inline/baseline-source/baseline-source-last-textarea-002.tentative.html
--external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-over-ruby.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-over-ruby-tall.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-rtl.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-srl.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall.html
+-external/wpt/css/css-inline/initial-letter/Initial-letter-breaking.html
+-external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-breaking-slr.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-breaking-srl.html
+-external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vlr.html
+-external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-rtl.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-slr.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-float-001-srl.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-float-002.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-srl.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vrl.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-short-para-initial-letter-clears.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-slr.html
+-external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-srl.html
 -external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial.html?class=
 -external/wpt/css/css-layout-api/baseline/orthogonal-baseline.https.html
 -external/wpt/css/css-layout-api/fallback-intrinsic-sizes/constructor-error.https.html
@@ -310,11 +328,14 @@
 -external/wpt/css/css-lists/li-insert-child.html
 -external/wpt/css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001.html
 -external/wpt/css/css-lists/list-style-type-string-005b.html
+-external/wpt/css/css-masking/clip-path/clip-path-inline-002.html
 -external/wpt/css/css-masking/clip-path/clip-path-inline-003.html
 -external/wpt/css/css-masking/clip-path/clip-path-inline-004.html
 -external/wpt/css/css-masking/clip-path/clip-path-inline-006.html
 -external/wpt/css/css-masking/clip-path/clip-path-inline-010.html
+-external/wpt/css/css-masking/clip-path/clip-path-reference-box-004.html
 -external/wpt/css/css-masking/mask-image/mask-opacity-1e.html
+-external/wpt/css/css-masking/mask-svg-content/mask-with-rotation.svg
 -external/wpt/css/css-multicol/getclientrects-000.html
 -external/wpt/css/css-multicol/getclientrects-001.html
 -external/wpt/css/css-multicol/multicol-fill-auto-block-children-002.xht
@@ -355,6 +376,7 @@
 -external/wpt/css/css-page/margin-boxes/content-011-print.html
 -external/wpt/css/css-page/margin-boxes/content-012-print.html
 -external/wpt/css/css-page/margin-boxes/content-013-print.html
+-external/wpt/css/css-page/margin-boxes/dimensions-003-print.html
 -external/wpt/css/css-page/margin-boxes/dimensions-004-print.html
 -external/wpt/css/css-page/margin-boxes/dimensions-005-print.html
 -external/wpt/css/css-page/margin-boxes/dimensions-006-print.html
@@ -417,6 +439,7 @@
 -external/wpt/css/css-pseudo/target-text-shadow-vertical.html
 -external/wpt/css/css-ruby/block-ruby-003.html
 -external/wpt/css/css-ruby/ruby-inlinize-recursive-simple.html
+-external/wpt/css/css-ruby/ruby-text-combine-upright-001b.html
 -external/wpt/css/css-scoping/css-scoping-shadow-host-rule.html
 -external/wpt/css/css-scoping/css-scoping-shadow-root-hides-children.html
 -external/wpt/css/css-scoping/css-scoping-shadow-slotted-nested.html
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index d8fcd12b..45408d8 100644
--- a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -126,15 +126,6 @@
     method constructor
     method throwIfAborted
     setter onabort
-interface AsyncDisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.asyncDispose)
-    method adopt
-    method defer
-    method disposeAsync
-    method move
-    method use
 interface BackgroundFetchEvent : ExtendableEvent
     attribute @@toStringTag
     getter registration
@@ -517,15 +508,6 @@
     getter readable
     getter writable
     method constructor
-interface DisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.dispose)
-    method adopt
-    method defer
-    method dispose
-    method move
-    method use
 interface ErrorEvent : Event
     attribute @@toStringTag
     getter colno
@@ -1982,10 +1964,6 @@
     method unwrapKey
     method verify
     method wrapKey
-interface SuppressedError : Error
-    attribute message
-    attribute name
-    method constructor
 interface SyncEvent : ExtendableEvent
     attribute @@toStringTag
     getter lastChance
diff --git a/third_party/blink/web_tests/http/tests/shadowrealm/webexposed/global-interface-listing-shadow-realm-expected.txt b/third_party/blink/web_tests/http/tests/shadowrealm/webexposed/global-interface-listing-shadow-realm-expected.txt
index f6078a9..d68c8e8 100644
--- a/third_party/blink/web_tests/http/tests/shadowrealm/webexposed/global-interface-listing-shadow-realm-expected.txt
+++ b/third_party/blink/web_tests/http/tests/shadowrealm/webexposed/global-interface-listing-shadow-realm-expected.txt
@@ -15,15 +15,6 @@
 CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE:     method throwIfAborted
 CONSOLE MESSAGE:     setter onabort
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -70,15 +61,6 @@
 CONSOLE MESSAGE:     getter message
 CONSOLE MESSAGE:     getter name
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ErrorEvent : Event
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter colno
@@ -210,10 +192,6 @@
 CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE:     method error
 CONSOLE MESSAGE:     method next
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
diff --git a/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt b/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt
index 7cf3545..8b0df25 100644
--- a/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt
+++ b/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt
@@ -1,14 +1,5 @@
 CONSOLE MESSAGE: This test logs exposed APIs from AudioWorkletGlobalScope
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface AudioWorkletGlobalScope : WorkletGlobalScope
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     method constructor
@@ -26,15 +17,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface Event
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     attribute AT_TARGET
@@ -136,10 +118,6 @@
 CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE:     method read
 CONSOLE MESSAGE:     method releaseLock
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
diff --git a/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-layout-worklet-expected.txt b/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-layout-worklet-expected.txt
index 7f99f6f..6fd19e0 100644
--- a/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-layout-worklet-expected.txt
+++ b/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-layout-worklet-expected.txt
@@ -1,14 +1,5 @@
 CONSOLE MESSAGE: This test logs exposed APIs from LayoutWorkletGlobalScope
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -228,15 +219,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface IntrinsicSizes
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter maxContentSize
@@ -335,10 +317,6 @@
 CONSOLE MESSAGE:     method has
 CONSOLE MESSAGE:     method keys
 CONSOLE MESSAGE:     method values
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
@@ -408,15 +386,6 @@
 CONSOLE MESSAGE:     method gc
 CONSOLE MESSAGE:     method registerLayout
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -636,15 +605,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface IntrinsicSizes
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter maxContentSize
@@ -743,10 +703,6 @@
 CONSOLE MESSAGE:     method has
 CONSOLE MESSAGE:     method keys
 CONSOLE MESSAGE:     method values
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
diff --git a/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt b/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt
index f7fbb27..c6a4102 100644
--- a/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt
+++ b/third_party/blink/web_tests/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt
@@ -1,14 +1,5 @@
 CONSOLE MESSAGE: This test logs exposed APIs once from each PaintWorkletGlobalScope
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -231,15 +222,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface Mesh2DIndexBuffer
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     method constructor
@@ -406,10 +388,6 @@
 CONSOLE MESSAGE:     method has
 CONSOLE MESSAGE:     method keys
 CONSOLE MESSAGE:     method values
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
@@ -480,15 +458,6 @@
 CONSOLE MESSAGE:     method gc
 CONSOLE MESSAGE:     method registerPaint
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -711,15 +680,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface Mesh2DIndexBuffer
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     method constructor
@@ -886,10 +846,6 @@
 CONSOLE MESSAGE:     method has
 CONSOLE MESSAGE:     method keys
 CONSOLE MESSAGE:     method values
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
diff --git a/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 34233e5..51ce684 100644
--- a/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -24,15 +24,6 @@
     method constructor
     method throwIfAborted
     setter onabort
-interface AsyncDisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.asyncDispose)
-    method adopt
-    method defer
-    method disposeAsync
-    method move
-    method use
 interface BackgroundFetchEvent : ExtendableEvent
     attribute @@toStringTag
     getter registration
@@ -401,15 +392,6 @@
     getter readable
     getter writable
     method constructor
-interface DisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.dispose)
-    method adopt
-    method defer
-    method dispose
-    method move
-    method use
 interface ErrorEvent : Event
     attribute @@toStringTag
     getter colno
@@ -1681,10 +1663,6 @@
     method unwrapKey
     method verify
     method wrapKey
-interface SuppressedError : Error
-    attribute message
-    attribute name
-    method constructor
 interface SyncEvent : ExtendableEvent
     attribute @@toStringTag
     getter lastChance
diff --git a/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt b/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt
index 3d63ba2..47736c8 100644
--- a/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-audio-worklet-expected.txt
@@ -1,14 +1,5 @@
 CONSOLE MESSAGE: This test logs exposed APIs from AudioWorkletGlobalScope
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface AudioWorkletGlobalScope : WorkletGlobalScope
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     method constructor
@@ -26,15 +17,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface Event
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     attribute AT_TARGET
@@ -133,10 +115,6 @@
 CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE:     method read
 CONSOLE MESSAGE:     method releaseLock
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
diff --git a/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt b/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt
index 30cfd43..a15ae65 100644
--- a/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/http/tests/worklet/webexposed/global-interface-listing-paint-worklet-expected.txt
@@ -1,14 +1,5 @@
 CONSOLE MESSAGE: This test logs exposed APIs once from each PaintWorkletGlobalScope
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -189,15 +180,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface PaintRenderingContext2D
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter fillStyle
@@ -347,10 +329,6 @@
 CONSOLE MESSAGE:     method has
 CONSOLE MESSAGE:     method keys
 CONSOLE MESSAGE:     method values
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
@@ -421,15 +399,6 @@
 CONSOLE MESSAGE:     method gc
 CONSOLE MESSAGE:     method registerPaint
 CONSOLE MESSAGE: [INTERFACES]
-CONSOLE MESSAGE: interface AsyncDisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.asyncDispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method disposeAsync
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface ByteLengthQueuingStrategy
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter highWaterMark
@@ -610,15 +579,6 @@
 CONSOLE MESSAGE:     getter highWaterMark
 CONSOLE MESSAGE:     getter size
 CONSOLE MESSAGE:     method constructor
-CONSOLE MESSAGE: interface DisposableStack
-CONSOLE MESSAGE:     attribute @@toStringTag
-CONSOLE MESSAGE:     getter disposed
-CONSOLE MESSAGE:     method Symbol(Symbol.dispose)
-CONSOLE MESSAGE:     method adopt
-CONSOLE MESSAGE:     method defer
-CONSOLE MESSAGE:     method dispose
-CONSOLE MESSAGE:     method move
-CONSOLE MESSAGE:     method use
 CONSOLE MESSAGE: interface PaintRenderingContext2D
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter fillStyle
@@ -768,10 +728,6 @@
 CONSOLE MESSAGE:     method has
 CONSOLE MESSAGE:     method keys
 CONSOLE MESSAGE:     method values
-CONSOLE MESSAGE: interface SuppressedError : Error
-CONSOLE MESSAGE:     attribute message
-CONSOLE MESSAGE:     attribute name
-CONSOLE MESSAGE:     method constructor
 CONSOLE MESSAGE: interface TransformStream
 CONSOLE MESSAGE:     attribute @@toStringTag
 CONSOLE MESSAGE:     getter readable
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
index 5be5056..36b2c7b0 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -25,15 +25,6 @@
 [Worker]     method constructor
 [Worker]     method throwIfAborted
 [Worker]     setter onabort
-[Worker] interface AsyncDisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.asyncDispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method disposeAsync
-[Worker]     method move
-[Worker]     method use
 [Worker] interface AudioData
 [Worker]     attribute @@toStringTag
 [Worker]     getter duration
@@ -406,15 +397,6 @@
 [Worker]     attribute PERSISTENT
 [Worker]     attribute TEMPORARY
 [Worker]     method constructor
-[Worker] interface DisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.dispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method dispose
-[Worker]     method move
-[Worker]     method use
 [Worker] interface EncodedAudioChunk
 [Worker]     attribute @@toStringTag
 [Worker]     getter byteLength
@@ -1859,10 +1841,6 @@
 [Worker]     method unwrapKey
 [Worker]     method verify
 [Worker]     method wrapKey
-[Worker] interface SuppressedError : Error
-[Worker]     attribute message
-[Worker]     attribute name
-[Worker]     method constructor
 [Worker] interface SyncManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index 18c7433f9..fc7da45 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -118,15 +118,6 @@
     getter currentTime
     getter duration
     method constructor
-interface AsyncDisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.asyncDispose)
-    method adopt
-    method defer
-    method disposeAsync
-    method move
-    method use
 interface Attr : Node
     attribute @@toStringTag
     getter localName
@@ -1647,15 +1638,6 @@
     getter type
     method constructor
     setter onchange
-interface DisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.dispose)
-    method adopt
-    method defer
-    method dispose
-    method move
-    method use
 interface Document : Node
     static method parseHTMLUnsafe
     attribute @@toStringTag
@@ -8988,10 +8970,6 @@
     method unwrapKey
     method verify
     method wrapKey
-interface SuppressedError : Error
-    attribute message
-    attribute name
-    method constructor
 interface SyncManager
     attribute @@toStringTag
     method constructor
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
index 27104cef..05f21d2 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -25,15 +25,6 @@
 [Worker]     method constructor
 [Worker]     method throwIfAborted
 [Worker]     setter onabort
-[Worker] interface AsyncDisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.asyncDispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method disposeAsync
-[Worker]     method move
-[Worker]     method use
 [Worker] interface BackgroundFetchManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
@@ -362,15 +353,6 @@
 [Worker]     getter readable
 [Worker]     getter writable
 [Worker]     method constructor
-[Worker] interface DisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.dispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method dispose
-[Worker]     method move
-[Worker]     method use
 [Worker] interface ErrorEvent : Event
 [Worker]     attribute @@toStringTag
 [Worker]     getter colno
@@ -1591,10 +1573,6 @@
 [Worker]     method unwrapKey
 [Worker]     method verify
 [Worker]     method wrapKey
-[Worker] interface SuppressedError : Error
-[Worker]     attribute message
-[Worker]     attribute name
-[Worker]     method constructor
 [Worker] interface SyncManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
index f2df815e..ec765d8 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -127,15 +127,6 @@
 [Worker]     method constructor
 [Worker]     method throwIfAborted
 [Worker]     setter onabort
-[Worker] interface AsyncDisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.asyncDispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method disposeAsync
-[Worker]     method move
-[Worker]     method use
 [Worker] interface AudioData
 [Worker]     attribute @@toStringTag
 [Worker]     getter duration
@@ -517,15 +508,6 @@
 [Worker]     attribute PERSISTENT
 [Worker]     attribute TEMPORARY
 [Worker]     method constructor
-[Worker] interface DisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.dispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method dispose
-[Worker]     method move
-[Worker]     method use
 [Worker] interface EncodedAudioChunk
 [Worker]     attribute @@toStringTag
 [Worker]     getter byteLength
@@ -2186,10 +2168,6 @@
 [Worker]     method unwrapKey
 [Worker]     method verify
 [Worker]     method wrapKey
-[Worker] interface SuppressedError : Error
-[Worker]     attribute message
-[Worker]     attribute name
-[Worker]     method constructor
 [Worker] interface SyncManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index d3916d2f..4caa3060 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -225,15 +225,6 @@
     getter duration
     method constructor
     method getCurrentTime
-interface AsyncDisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.asyncDispose)
-    method adopt
-    method defer
-    method disposeAsync
-    method move
-    method use
 interface Attr : Node
     attribute @@toStringTag
     getter localName
@@ -1957,15 +1948,6 @@
     getter type
     method constructor
     method toString
-interface DisposableStack
-    attribute @@toStringTag
-    getter disposed
-    method Symbol(Symbol.dispose)
-    method adopt
-    method defer
-    method dispose
-    method move
-    method use
 interface Document : Node
     static method parseHTML
     static method parseHTMLUnsafe
@@ -9808,10 +9790,6 @@
     method unwrapKey
     method verify
     method wrapKey
-interface SuppressedError : Error
-    attribute message
-    attribute name
-    method constructor
 interface SyncManager
     attribute @@toStringTag
     method constructor
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
index d210800..eccd1f9 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -127,15 +127,6 @@
 [Worker]     method constructor
 [Worker]     method throwIfAborted
 [Worker]     setter onabort
-[Worker] interface AsyncDisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.asyncDispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method disposeAsync
-[Worker]     method move
-[Worker]     method use
 [Worker] interface BackgroundFetchManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
@@ -473,15 +464,6 @@
 [Worker]     getter readable
 [Worker]     getter writable
 [Worker]     method constructor
-[Worker] interface DisposableStack
-[Worker]     attribute @@toStringTag
-[Worker]     getter disposed
-[Worker]     method Symbol(Symbol.dispose)
-[Worker]     method adopt
-[Worker]     method defer
-[Worker]     method dispose
-[Worker]     method move
-[Worker]     method use
 [Worker] interface ErrorEvent : Event
 [Worker]     attribute @@toStringTag
 [Worker]     getter colno
@@ -1888,10 +1870,6 @@
 [Worker]     method unwrapKey
 [Worker]     method verify
 [Worker]     method wrapKey
-[Worker] interface SuppressedError : Error
-[Worker]     attribute message
-[Worker]     attribute name
-[Worker]     method constructor
 [Worker] interface SyncManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
diff --git a/third_party/boringssl/src b/third_party/boringssl/src
index cf6dc5d..8229027 160000
--- a/third_party/boringssl/src
+++ b/third_party/boringssl/src
@@ -1 +1 @@
-Subproject commit cf6dc5d38385e4ff6faf9bf0883a67c2f511076b
+Subproject commit 822902749a5956bba09c7e9e451104e8a74f02c5
diff --git a/third_party/chromite b/third_party/chromite
index c396776..68a28e3 160000
--- a/third_party/chromite
+++ b/third_party/chromite
@@ -1 +1 @@
-Subproject commit c396776c5a046662beb82bed76490b46cc80b2fb
+Subproject commit 68a28e35463cc96b8f2dd4be623d357a7cb0227a
diff --git a/third_party/dawn b/third_party/dawn
index 23bb5c0..63466f6 160000
--- a/third_party/dawn
+++ b/third_party/dawn
@@ -1 +1 @@
-Subproject commit 23bb5c06534109dcbdcf41174be544f2836b430f
+Subproject commit 63466f66842cd912b81dbc7c496f76d96794a877
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index e1d00f2..c7ac387 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit e1d00f2492b661b760afb2faa9f1ddd8a5223114
+Subproject commit c7ac38777ac61afd51fcf85ca72a659d660908a8
diff --git a/third_party/libvpx/README.chromium b/third_party/libvpx/README.chromium
index 3a65105..144ad57 100644
--- a/third_party/libvpx/README.chromium
+++ b/third_party/libvpx/README.chromium
@@ -1,7 +1,7 @@
 Name: libvpx
 URL: https://chromium.googlesource.com/webm/libvpx
 Version: N/A
-Revision: 62df56d12b1ebf1db154c3f82761747397ea2731
+Revision: 8ae5601c5f8288968a158a6fa1746a7021db505a
 CPEPrefix: cpe:/a:webmproject:libvpx:1.15.0
 License: BSD-3-Clause, Patent
 License File: source/libvpx/LICENSE, source/libvpx/PATENTS
diff --git a/third_party/libvpx/source/config/vpx_version.h b/third_party/libvpx/source/config/vpx_version.h
index 94f0575..962008f 100644
--- a/third_party/libvpx/source/config/vpx_version.h
+++ b/third_party/libvpx/source/config/vpx_version.h
@@ -4,9 +4,9 @@
 #define VERSION_MAJOR 1
 #define VERSION_MINOR 15
 #define VERSION_PATCH 0
-#define VERSION_EXTRA "30-g62df56d12"
+#define VERSION_EXTRA "33-g8ae5601c5"
 #define VERSION_PACKED \
   ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))
-#define VERSION_STRING_NOSP "v1.15.0-30-g62df56d12"
-#define VERSION_STRING " v1.15.0-30-g62df56d12"
+#define VERSION_STRING_NOSP "v1.15.0-33-g8ae5601c5"
+#define VERSION_STRING " v1.15.0-33-g8ae5601c5"
 #endif  // VPX_VERSION_H_
diff --git a/third_party/libvpx/source/libvpx b/third_party/libvpx/source/libvpx
index 62df56d..8ae5601 160000
--- a/third_party/libvpx/source/libvpx
+++ b/third_party/libvpx/source/libvpx
@@ -1 +1 @@
-Subproject commit 62df56d12b1ebf1db154c3f82761747397ea2731
+Subproject commit 8ae5601c5f8288968a158a6fa1746a7021db505a
diff --git a/third_party/perfetto b/third_party/perfetto
index 7bf1bcb..146a77b 160000
--- a/third_party/perfetto
+++ b/third_party/perfetto
@@ -1 +1 @@
-Subproject commit 7bf1bcbc57dff90be8ff68c017832c47a1d03a24
+Subproject commit 146a77bab9680922a17d665a206e51891f644eae
diff --git a/third_party/skia b/third_party/skia
index 46df6fe..e011487 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit 46df6fed41442f0c28bf56534530bbd6e24193e5
+Subproject commit e0114876f8a048dc5f1577938a03c14836d78763
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index c41d127..477ec7e 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -35213,6 +35213,22 @@
   <description>User is shown the Privacy Sandbox consent.</description>
 </action>
 
+<action name="Settings.PrivacySandbox.ConsentDialog.AckClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox consent accept button click.
+  </description>
+</action>
+
+<action name="Settings.PrivacySandbox.ConsentDialog.NoClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox consent no button click.
+  </description>
+</action>
+
 <action name="Settings.PrivacySandbox.Fledge.AllSitesOpened">
   <owner>rubindl@google.com</owner>
   <owner>sauski@google.com</owner>
@@ -35428,6 +35444,38 @@
   </description>
 </action>
 
+<action name="Settings.PrivacySandbox.NoticeEeaDialog.AckClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox notice accept button click (EEA region).
+  </description>
+</action>
+
+<action name="Settings.PrivacySandbox.NoticeEeaDialog.OpenSettingsClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox notice settings button click (EEA region).
+  </description>
+</action>
+
+<action name="Settings.PrivacySandbox.NoticeRowDialog.AckClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox notice accept button click (ROW region).
+  </description>
+</action>
+
+<action name="Settings.PrivacySandbox.NoticeRowDialog.OpenSettingsClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox notice settings button click (ROW region).
+  </description>
+</action>
+
 <action name="Settings.PrivacySandbox.OpenedFromCookiesPageToast">
   <owner>rainhard@chromium.org</owner>
   <owner>sauski@google.com</owner>
@@ -35538,6 +35586,23 @@
   <description>Restricted Privacy Sandbox notice is shown.</description>
 </action>
 
+<action name="Settings.PrivacySandbox.RestrictedNoticeDialog.AckClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox restricted notice accept button click.
+  </description>
+</action>
+
+<action
+    name="Settings.PrivacySandbox.RestrictedNoticeDialog.OpenSettingsClicked">
+  <owner>aashnas@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <description>
+    Recorded on privacy sandbox restricted notice settings button click.
+  </description>
+</action>
+
 <action
     name="Settings.PrivacySandbox.SiteSuggestedAds.PrivacyPolicyLinkClicked">
   <owner>jacobstanley@google.com</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 67e726b..7bcc66c 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -15997,6 +15997,7 @@
   <int value="-1777540083" label="LocationBarModelOptimizations:disabled"/>
   <int value="-1776351704" label="DesktopPWAsOmniboxInstall:disabled"/>
   <int value="-1775842908" label="EnableOAuthIpp:disabled"/>
+  <int value="-1775183049" label="NewTabPageCustomization:enabled"/>
   <int value="-1774921110" label="ServiceWorkerStaticRouter:enabled"/>
   <int value="-1774818943" label="VrWebInputEditing:enabled"/>
   <int value="-1774392993"
@@ -17391,6 +17392,7 @@
   <int value="-1218608640" label="disable-offline-load-stale-cache"/>
   <int value="-1218063855" label="MediaAppAnnotation:disabled"/>
   <int value="-1217936232" label="HeuristicMemorySaver:disabled"/>
+  <int value="-1217688364" label="NewTabPageCustomization:disabled"/>
   <int value="-1217623062"
       label="AutofillAlwaysReturnCloudTokenizedCard:disabled"/>
   <int value="-1217600112"
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml
index ad110e3..19d6064b 100644
--- a/tools/metrics/histograms/metadata/content/histograms.xml
+++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -77,22 +77,8 @@
   </summary>
 </histogram>
 
-<histogram name="ContentCapture.CaptureContentDelayTime" units="ms"
-    expires_after="2024-12-01">
-  <owner>wangxianzhu@chromium.org</owner>
-  <owner>src/third_party/blink/renderer/core/content_capture/OWNERS</owner>
-  <summary>
-    The time between a change in content and when the new capture is sent to the
-    browser process.
-
-    A specific content change is hard to track. This is roughly calculated as
-    the interval from the first content change after a prior capturing content
-    to the first content being sent after the next capture of content.
-  </summary>
-</histogram>
-
 <histogram name="ContentCapture.CaptureContentTime2" units="microseconds"
-    expires_after="2025-06-08">
+    expires_after="2025-03-01">
   <owner>wangxianzhu@chromium.org</owner>
   <owner>src/third_party/blink/renderer/core/content_capture/OWNERS</owner>
   <summary>
@@ -104,7 +90,7 @@
 </histogram>
 
 <histogram name="ContentCapture.SendContentTime" units="microseconds"
-    expires_after="2025-06-08">
+    expires_after="2025-03-01">
   <owner>wangxianzhu@chromium.org</owner>
   <owner>src/third_party/blink/renderer/core/content_capture/OWNERS</owner>
   <summary>
@@ -116,14 +102,14 @@
 </histogram>
 
 <histogram name="ContentCapture.SentContentCount2" units="count"
-    expires_after="2025-06-08">
+    expires_after="2025-03-01">
   <owner>wangxianzhu@chromium.org</owner>
   <owner>src/third_party/blink/renderer/core/content_capture/OWNERS</owner>
   <summary>The total number of content captures sent for a document.</summary>
 </histogram>
 
 <histogram name="ContentCapture.TaskDelayTimeInMs" units="ms"
-    expires_after="2025-06-08">
+    expires_after="2025-03-01">
   <owner>wangxianzhu@chromium.org</owner>
   <owner>src/third_party/blink/renderer/core/content_capture/OWNERS</owner>
   <summary>
@@ -135,7 +121,7 @@
 </histogram>
 
 <histogram name="ContentCapture.TaskRunsPerCapture" units="runs"
-    expires_after="2025-06-08">
+    expires_after="2025-03-01">
   <owner>wangxianzhu@chromium.org</owner>
   <owner>src/third_party/blink/renderer/core/content_capture/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml
index ee17fc3..66306581 100644
--- a/tools/metrics/histograms/metadata/extensions/histograms.xml
+++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -5082,7 +5082,7 @@
 </histogram>
 
 <histogram name="Extensions.Toolbar.ExtensionsActivatedFromRequestAccessButton"
-    units="Extension Count" expires_after="2025-01-15">
+    units="Extension Count" expires_after="2025-05-11">
   <owner>emiliapaz@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index 48ed82c3..aeba6b8d 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -1031,8 +1031,8 @@
 </histogram>
 
 <histogram name="IOS.DefaultBrowserPromo.NonModal.OnScreenTime" units="ms"
-    expires_after="2025-02-05">
-  <owner>sebsg@chromium.org</owner>
+    expires_after="2025-08-05">
+  <owner>rkgibson@google.com</owner>
   <owner>bling-mony-pod@google.com</owner>
   <summary>
     Logs the time on screen for an impression of a non modal promo. iOS only.
@@ -3523,6 +3523,47 @@
   </summary>
 </histogram>
 
+<histogram name="IOS.PaymentsBottomSheet.TimeToSelection" units="ms"
+    expires_after="2025-04-20">
+  <owner>vincb@google.com</owner>
+  <owner>noemies@google.com</owner>
+  <owner>bling-transactions@google.com</owner>
+  <summary>
+    Records the elasped time between displaying the sheet and selecting a credit
+    card. Recorded when the credit is selected by the user (when they did tap on
+    it).
+  </summary>
+</histogram>
+
+<histogram name="IOS.PaymentsBottomSheetV3.TimeToTrigger.{Outcome}" units="ms"
+    expires_after="2025-04-20">
+  <owner>vincb@google.com</owner>
+  <owner>noemies@google.com</owner>
+  <owner>bling-transactions@google.com</owner>
+  <summary>
+    Records the elapsed time between receiving the signal to trigger the bottom
+    sheet V3 and actually making a decision on triggering the sheet, split by
+    {Outcome}. Recorded when making the decision to trigger the sheet.
+  </summary>
+  <token key="Outcome">
+    <variant name="NotTriggered" summary="The sheet was not triggered."/>
+    <variant name="Triggered" summary="The sheet was actually triggered."/>
+  </token>
+</histogram>
+
+<histogram name="IOS.PaymentsBottomSheetV3.Triggered" enum="Boolean"
+    expires_after="2025-04-20">
+  <owner>vincb@google.com</owner>
+  <owner>noemies@google.com</owner>
+  <owner>bling-transactions@google.com</owner>
+  <summary>
+    Records the outcome of attempting to trigger the bottom sheet V3 as a
+    boolean, true if it triggered or false if it didn't. Recorded when the
+    decision is made on triggering the sheet which corresponds to when the
+    activation signal is received from the sheet's form activity listeners.
+  </summary>
+</histogram>
+
 <histogram name="IOS.Permission.Modal.Events" enum="IOSPermissionEvent"
     expires_after="2025-07-09">
   <owner>ewannpv@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/omnibox/enums.xml b/tools/metrics/histograms/metadata/omnibox/enums.xml
index e8e61f12..effdff9 100644
--- a/tools/metrics/histograms/metadata/omnibox/enums.xml
+++ b/tools/metrics/histograms/metadata/omnibox/enums.xml
@@ -222,7 +222,7 @@
 
 <enum name="SearchPrefetchStatus">
   <int value="0" label="Not started"/>
-  <int value="1" label="In flight"/>
+  <int value="1" label="In flight (Obsolete)"/>
   <int value="2" label="Headers received (for streaming responses)"/>
   <int value="3"
       label="Headers received and user navigated to search terms (for
diff --git a/tools/metrics/histograms/metadata/password/enums.xml b/tools/metrics/histograms/metadata/password/enums.xml
index 8080bc28..3752535 100644
--- a/tools/metrics/histograms/metadata/password/enums.xml
+++ b/tools/metrics/histograms/metadata/password/enums.xml
@@ -557,6 +557,7 @@
   <int value="26" label="Passkey not accepted confirmation bubble"/>
   <int value="27" label="Password access loss warning"/>
   <int value="28" label="Passkey upgrade bubble"/>
+  <int value="29" label="Password change state information bubble"/>
 </enum>
 
 <enum name="OutdatedGMSDialogDismissalReason">
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml
index 70e56143..ae915b4 100644
--- a/tools/metrics/histograms/metadata/privacy/histograms.xml
+++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -85,6 +85,8 @@
 <!-- Each profile on a client is assigned a unique bucket, see go/profile-metrics.
 Regular profiles start at bucket 1, we don't consider non-regular profiles. -->
 
+<!-- LINT.IfChange(Profile) -->
+
 <variants name="Profile">
   <variant name="Profile_1" summary="Profile bucket 1 for a client."/>
   <variant name="Profile_2" summary="Profile bucket 2 for a client."/>
@@ -101,6 +103,8 @@
                here."/>
 </variants>
 
+<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/settings/histograms.xml:Profile) -->
+
 <variants name="PSNotice">
   <variant name="MeasurementNoticeModal"
       summary="Restricted notice on Desktop."/>
diff --git a/tools/metrics/histograms/metadata/settings/enums.xml b/tools/metrics/histograms/metadata/settings/enums.xml
index f0ddd43..89ae78f 100644
--- a/tools/metrics/histograms/metadata/settings/enums.xml
+++ b/tools/metrics/histograms/metadata/settings/enums.xml
@@ -466,6 +466,8 @@
   <int value="11" label="Browser not a normal tabbed browser"/>
 </enum>
 
+<!-- LINT.IfChange(SettingsPrivacySandboxPromptStartupState) -->
+
 <enum name="SettingsPrivacySandboxPromptStartupState">
   <int value="0" label="EEA consent prompt waiting to show"/>
   <int value="1" label="EEA notice prompt waiting to show"/>
@@ -495,6 +497,8 @@
       label="User is waiting for graduation and notice flow is completed"/>
 </enum>
 
+<!-- LINT.ThenChange(//chrome/browser/privacy_sandbox/privacy_sandbox_service.h:SettingsPrivacySandboxPromptStartupState) -->
+
 <enum name="SettingsPrivacySandboxStartupStates">
   <int value="0" label="Prompt waiting to show"/>
   <int value="1" label="Prompt Off, previously disabled, Enabled"/>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml
index 60a531c..108acbb1 100644
--- a/tools/metrics/histograms/metadata/settings/histograms.xml
+++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -22,6 +22,29 @@
 
 <histograms>
 
+<!-- Each profile on a client is assigned a unique bucket, see go/profile-metrics.
+Regular profiles start at bucket 1. Incognito profiles count towards the original profile. -->
+
+<!-- LINT.IfChange(Profile) -->
+
+<variants name="ProfileBucketName">
+  <variant name="Profile_1" summary="Profile bucket 1 for a client."/>
+  <variant name="Profile_2" summary="Profile bucket 2 for a client."/>
+  <variant name="Profile_3" summary="Profile bucket 3 for a client."/>
+  <variant name="Profile_4" summary="Profile bucket 4 for a client."/>
+  <variant name="Profile_5" summary="Profile bucket 5 for a client."/>
+  <variant name="Profile_6" summary="Profile bucket 6 for a client."/>
+  <variant name="Profile_7" summary="Profile bucket 7 for a client."/>
+  <variant name="Profile_8" summary="Profile bucket 8 for a client."/>
+  <variant name="Profile_9" summary="Profile bucket 9 for a client."/>
+  <variant name="Profile_10" summary="Profile bucket 10 for a client."/>
+  <variant name="Profile_11+"
+      summary="All profiles with a bucket of 11+ will be bucketed here, 11
+               inclusive."/>
+</variants>
+
+<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/privacy/histograms.xml:Profile) -->
+
 <variants name="SafetyHubDashboardModuleType">
   <variant name="BrowserState"/>
   <variant name="NotificationReview"/>
@@ -577,6 +600,17 @@
   </summary>
 </histogram>
 
+<histogram name="Settings.PrivacySandbox.{Profile}.PromptStartupState"
+    enum="SettingsPrivacySandboxPromptStartupState" expires_after="2025-11-11">
+  <owner>boujane@google.com</owner>
+  <owner>koilos@google.com</owner>
+  <summary>
+    Records the startup state of the privacy sandbox prompt on a {Profile} for
+    Privacy Sandbox GA M1. This is recorded during the prompt start up.
+  </summary>
+  <token key="Profile" variants="ProfileBucketName"/>
+</histogram>
+
 <histogram name="Settings.SafetyCheck.Interactions"
     enum="SettingsSafetyCheckInteractions" expires_after="2025-05-11">
   <owner>rainhard@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 5acff86a8..6d6a5f7 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@
             "full_remote_path": "perfetto-luci-artifacts/5bf4e2a65d76d5a603ff175222d1513f71d28a0b/linux-arm64/trace_processor_shell"
         },
         "win": {
-            "hash": "931fac38c28e4fa9b6c214a8da15a3aff7ead560",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/7bf1bcbc57dff90be8ff68c017832c47a1d03a24/trace_processor_shell.exe"
+            "hash": "04dd5db3776b458e89df35bbf2a85659e6e53a02",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/11c2008484f84a80433f034abe744fc0c5bf449b/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "e250187786aa190a66288bc9443a5e1f5888f8d7",
@@ -21,8 +21,8 @@
             "full_remote_path": "perfetto-luci-artifacts/5bf4e2a65d76d5a603ff175222d1513f71d28a0b/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "940c199a27cbf212f148c3ef9b35e67bf46139d7",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/7bf1bcbc57dff90be8ff68c017832c47a1d03a24/trace_processor_shell"
+            "hash": "b96541e88e0ec3f7a7c5d48006d5e078f01c134e",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/146a77bab9680922a17d665a206e51891f644eae/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/ubsan/ignorelist.txt b/tools/ubsan/ignorelist.txt
index 877225f..fa6dd8dc 100644
--- a/tools/ubsan/ignorelist.txt
+++ b/tools/ubsan/ignorelist.txt
@@ -31,3 +31,23 @@
 # https://crbug.com/363225486
 [alignment]
 fun:*base*Pickle*
+
+# null + 0 suppressions. Remove these once
+# https://github.com/llvm/llvm-project/pull/120719 has landed.
+[pointer-overflow]
+fun:*FcSerializeResize*
+fun:*iterate_string_chunks*
+fun:*find_best_partition_order_*
+
+# https://crbug.com/385062729
+[pointer-overflow]
+fun:*angle*PoolAllocator*allocate*
+
+# https://crbug.com/385155394
+[pointer-overflow]
+fun:*VP8BitReaderSetBuffer*
+
+# Remove this once https://android-review.googlesource.com/c/platform/external/perfetto/+/3427002
+# has landed.
+[pointer-overflow]
+fun:*protozero*ScatteredStreamWriter*ReserveBytes*
diff --git a/ui/accessibility/platform/ax_platform_node.cc b/ui/accessibility/platform/ax_platform_node.cc
index fcb89b8e..068727c 100644
--- a/ui/accessibility/platform/ax_platform_node.cc
+++ b/ui/accessibility/platform/ax_platform_node.cc
@@ -64,11 +64,11 @@
   return CHECK_DEREF(GetDelegate()).GetUniqueId();
 }
 
-std::string AXPlatformNode::ToString() {
+std::string AXPlatformNode::ToString() const {
   return GetDelegate() ? GetDelegate()->ToString() : "No delegate";
 }
 
-std::string AXPlatformNode::SubtreeToString() {
+std::string AXPlatformNode::SubtreeToString() const {
   return GetDelegate() ? GetDelegate()->SubtreeToString() : "No delegate";
 }
 
diff --git a/ui/accessibility/platform/ax_platform_node.h b/ui/accessibility/platform/ax_platform_node.h
index 2914a0d0..f3aadc3 100644
--- a/ui/accessibility/platform/ax_platform_node.h
+++ b/ui/accessibility/platform/ax_platform_node.h
@@ -104,11 +104,11 @@
   AXPlatformNodeId GetUniqueId() const;
 
   // Creates a string representation of this node's data.
-  std::string ToString();
+  std::string ToString() const;
 
   // Returns a string representation of the subtree of nodes rooted at this
   // node.
-  std::string SubtreeToString();
+  std::string SubtreeToString() const;
 
   friend std::ostream& operator<<(std::ostream& stream, AXPlatformNode& node);
 
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc
index c0f2843..80157e4 100644
--- a/ui/accessibility/platform/ax_platform_node_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -536,20 +536,6 @@
   return FromNativeViewAccessible(delegate_->GetLastChild());
 }
 
-bool AXPlatformNodeBase::IsDescendant(AXPlatformNodeBase* node) {
-  if (!delegate_)
-    return false;
-  if (!node)
-    return false;
-  if (node == this)
-    return true;
-  gfx::NativeViewAccessible native_parent = node->GetParent();
-  if (!native_parent)
-    return false;
-  AXPlatformNodeBase* parent = FromNativeViewAccessible(native_parent);
-  return IsDescendant(parent);
-}
-
 ax::mojom::Role AXPlatformNodeBase::GetRole() const {
   if (!delegate_)
     return ax::mojom::Role::kUnknown;
@@ -2043,8 +2029,9 @@
   DCHECK_LT(hypertext_offset, static_cast<int>(GetHypertext().size()));
 
   if (IsLeaf()) {
-    if (IsText())
+    if (IsText()) {
       return GetDelegate()->CreateTextPositionAt(hypertext_offset);
+    }
     return GetDelegate()->CreatePositionAt(hypertext_offset);
   }
 
@@ -2059,7 +2046,7 @@
           base::checked_cast<int>(child_iter->GetHypertext().size());
 
     if (current_hypertext_offset < child_text_len) {
-      int endpoint_offset = child_text_len - current_hypertext_offset;
+      int endpoint_offset = current_hypertext_offset;
       if (child_iter->IsText())
         return child_iter->GetDelegate()->CreateTextPositionAt(endpoint_offset);
       return child_iter->GetDelegate()->CreatePositionAt(endpoint_offset);
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h
index a7f79fe..13664e36 100644
--- a/ui/accessibility/platform/ax_platform_node_base.h
+++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -110,6 +110,9 @@
 
   AXPlatformNodeDelegate* GetDelegate() const override;
   bool IsDescendantOf(AXPlatformNode* ancestor) const override;
+  bool IsDescendant(AXPlatformNodeBase* descendant) {
+    return descendant->IsDescendantOf(this);
+  }
 
   // Helpers.
   AXPlatformNodeBase* GetPlatformParent() const;
@@ -117,7 +120,6 @@
   AXPlatformNodeBase* GetNextSibling() const;
   AXPlatformNodeBase* GetFirstChild() const;
   AXPlatformNodeBase* GetLastChild() const;
-  bool IsDescendant(AXPlatformNodeBase* descendant);
 
   AXNodeID GetNodeId() const;
   AXPlatformNodeBase* GetActiveDescendant() const;
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index a2b9ea0..6558552 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -4659,7 +4659,7 @@
   // the method's declaration.
 
   int anchor_offset = unignored_selection.anchor_offset;
-  if (anchor_node->IsDescendant(this)) {
+  if (anchor_node->IsDescendantOf(this)) {
     anchor_offset =
         anchor_node->GetHypertextOffsetFromEndpoint(anchor_node, anchor_offset);
   } else {
@@ -4677,7 +4677,7 @@
     return E_FAIL;
 
   int focus_offset = unignored_selection.focus_offset;
-  if (focus_node->IsDescendant(this)) {
+  if (focus_node->IsDescendantOf(this)) {
     focus_offset =
         focus_node->GetHypertextOffsetFromEndpoint(focus_node, focus_offset);
   } else {
diff --git a/ui/views/controls/slider.cc b/ui/views/controls/slider.cc
index cd97e03..0fdf2218 100644
--- a/ui/views/controls/slider.cc
+++ b/ui/views/controls/slider.cc
@@ -217,9 +217,9 @@
   }
 
   if (accessibility_events_enabled_) {
-    if (GetWidget() && GetWidget()->IsVisible() && GetVisible()) {
+    if (GetWidget() && GetWidget()->IsVisible()) {
       DCHECK(!pending_accessibility_value_change_);
-      UpdateAccessibleValue();
+      NotifyAccessibilityEvent(ax::mojom::Event::kValueChanged, true);
     } else {
       pending_accessibility_value_change_ = true;
     }
@@ -340,6 +340,12 @@
   return true;
 }
 
+void Slider::GetAccessibleNodeData(ui::AXNodeData* node_data) {
+  View::GetAccessibleNodeData(node_data);
+  node_data->SetValue(base::UTF8ToUTF16(
+      base::StringPrintf("%d%%", static_cast<int>(value_ * 100 + 0.5))));
+}
+
 bool Slider::HandleAccessibleAction(const ui::AXActionData& action_data) {
   if (action_data.action == ax::mojom::Action::kIncrement) {
     SetValueInternal(value_ + keyboard_increment_, SliderChangeReason::kByUser);
@@ -412,23 +418,22 @@
 }
 
 void Slider::VisibilityChanged(View* starting_from, bool is_visible) {
-  if (is_visible && GetWidget() && GetWidget()->IsVisible() && GetVisible()) {
-    ApplyPendingAccessibleValueUpdate();
+  if (is_visible) {
+    NotifyPendingAccessibilityValueChanged();
   }
 }
 
 void Slider::AddedToWidget() {
-  if (GetWidget()->IsVisible() && GetVisible()) {
-    ApplyPendingAccessibleValueUpdate();
+  if (GetWidget()->IsVisible()) {
+    NotifyPendingAccessibilityValueChanged();
   }
 }
 
-void Slider::ApplyPendingAccessibleValueUpdate() {
-  if (!pending_accessibility_value_change_) {
+void Slider::NotifyPendingAccessibilityValueChanged() {
+  if (!pending_accessibility_value_change_)
     return;
-  }
 
-  UpdateAccessibleValue();
+  NotifyAccessibilityEvent(ax::mojom::Event::kValueChanged, true);
   pending_accessibility_value_change_ = false;
 }
 
@@ -486,11 +491,6 @@
   }
 }
 
-void Slider::UpdateAccessibleValue() {
-  GetViewAccessibility().SetValue(base::UTF8ToUTF16(
-      base::StringPrintf("%d%%", static_cast<int>(value_ * 100 + 0.5))));
-}
-
 BEGIN_METADATA(Slider)
 ADD_PROPERTY_METADATA(float, Value)
 ADD_PROPERTY_METADATA(bool, EnableAccessibilityEvents)
diff --git a/ui/views/controls/slider.h b/ui/views/controls/slider.h
index 26c044d..00f2eaa6 100644
--- a/ui/views/controls/slider.h
+++ b/ui/views/controls/slider.h
@@ -103,7 +103,6 @@
 
   // views::View:
   void OnPaint(gfx::Canvas* canvas) override;
-  void AddedToWidget() override;
 
  private:
   friend class test::SliderTestApi;
@@ -131,25 +130,24 @@
   bool OnMouseDragged(const ui::MouseEvent& event) override;
   void OnMouseReleased(const ui::MouseEvent& event) override;
   bool OnKeyPressed(const ui::KeyEvent& event) override;
+  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   bool HandleAccessibleAction(const ui::AXActionData& action_data) override;
   void OnFocus() override;
   void OnBlur() override;
   void VisibilityChanged(View* starting_from, bool is_visible) override;
+  void AddedToWidget() override;
 
   // ui::EventHandler:
   void OnGestureEvent(ui::GestureEvent* event) override;
 
   void set_listener(SliderListener* listener) { listener_ = listener; }
 
-  void ApplyPendingAccessibleValueUpdate();
+  void NotifyPendingAccessibilityValueChanged();
 
   virtual SkColor GetThumbColor() const;
   virtual SkColor GetTroughColor() const;
   int GetSliderExtraPadding() const;
 
-  // Derived classes can override this method to update the accessible value.
-  virtual void UpdateAccessibleValue();
-
   raw_ptr<SliderListener, AcrossTasksDanglingUntriaged> listener_;
 
   std::unique_ptr<gfx::SlideAnimation> move_animation_;
diff --git a/ui/views/controls/slider_unittest.cc b/ui/views/controls/slider_unittest.cc
index a4b36e92..d3d313de 100644
--- a/ui/views/controls/slider_unittest.cc
+++ b/ui/views/controls/slider_unittest.cc
@@ -278,61 +278,6 @@
   EXPECT_EQ(data.role, ax::mojom::Role::kMeter);
 }
 
-TEST_P(SliderTest, AccessibleValue) {
-  slider()->SetAllowedValues(nullptr);
-  // Initial test where slider is at 0 by default.
-  ui::AXNodeData data;
-  slider()->GetViewAccessibility().GetAccessibleNodeData(&data);
-  if (GetParam() == TestSliderType::kContinuousTest) {
-    EXPECT_EQ(std::string(""),
-              data.GetStringAttribute(ax::mojom::StringAttribute::kValue));
-  } else if (GetParam() == TestSliderType::kDiscreteEnd2EndTest) {
-    EXPECT_EQ(std::string(""),
-              data.GetStringAttribute(ax::mojom::StringAttribute::kValue));
-  } else {
-    EXPECT_EQ(std::string("10%"),
-              data.GetStringAttribute(ax::mojom::StringAttribute::kValue));
-  }
-
-  slider()->SetValue(0.1);
-  data = ui::AXNodeData();
-  slider()->GetViewAccessibility().GetAccessibleNodeData(&data);
-  EXPECT_EQ(std::string("10%"),
-            data.GetStringAttribute(ax::mojom::StringAttribute::kValue));
-
-  slider()->SetValue(0.5);
-  data = ui::AXNodeData();
-  slider()->GetViewAccessibility().GetAccessibleNodeData(&data);
-  EXPECT_EQ(std::string("50%"),
-            data.GetStringAttribute(ax::mojom::StringAttribute::kValue));
-}
-
-// Checks the pending value update when the slider is invisible and becomes
-// visible again.
-TEST_P(SliderTest, SliderPendingValueUpdate) {
-  test::AXEventCounter ax_counter(views::AXEventManager::Get());
-  EXPECT_EQ(0, ax_counter.GetCount(ax::mojom::Event::kValueChanged));
-
-  // Initially, the slider should be visible.
-  EXPECT_TRUE(slider()->GetVisible());
-  slider()->SetValue(0.5);
-  EXPECT_EQ(1, ax_counter.GetCount(ax::mojom::Event::kValueChanged));
-
-  // Set the slider to invisible.
-  slider()->SetVisible(false);
-  EXPECT_FALSE(slider()->GetVisible());
-
-  // Set a pending value update while the slider is invisible.
-  slider()->SetValue(0.8);
-  EXPECT_EQ(1, ax_counter.GetCount(ax::mojom::Event::kValueChanged));
-
-  // Make the slider visible again.
-  slider()->SetVisible(true);
-
-  // Verify that the pending value update triggers the accessibility event.
-  EXPECT_EQ(2, ax_counter.GetCount(ax::mojom::Event::kValueChanged));
-}
-
 // No touch on desktop Mac. Tracked in http://crbug.com/445520.
 #if !BUILDFLAG(IS_MAC) || defined(USE_AURA)
 
diff --git a/v8 b/v8
index 18b88b5..0be76c24 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit 18b88b53e8590ab3c1ba1dbfd585537b9aed9f4a
+Subproject commit 0be76c241b2702d09c8dfa75e774b62c553aaa80