diff --git a/.clang-tidy b/.clang-tidy
index cab1d5f..5e98379 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -36,7 +36,7 @@
     - key:          bugprone-dangling-handle.HandleClasses
       value:        ::std::basic_string_view;::std::span;::absl::string_view;::base::BasicStringPiece;::base::span
     - key:          bugprone-string-constructor.StringNames
-      value:        ::std::basic_string;::std::basic_string_view;::base::BasicStringPiece
+      value:        ::std::basic_string;::std::basic_string_view;::base::BasicStringPiece;::absl::string_view
     - key:          modernize-use-default-member-init.UseAssignment
       value:        1
     # This relaxes modernize-use-emplace in some cases; we might want to make it
diff --git a/DEPS b/DEPS
index 3e07427..f635a89 100644
--- a/DEPS
+++ b/DEPS
@@ -288,7 +288,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '4a5c1e1f2df58b4274f727b4db4fdac69be59ffa',
+  'angle_revision': '5ef62fa1999efb38bd2cf4a7db258ba540d1d5fa',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -307,7 +307,7 @@
   # 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.
-  'fuchsia_version': 'version:8.20220701.2.1',
+  'fuchsia_version': 'version:8.20220705.2.1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -359,7 +359,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': 'c5f659d6b6a8e6bc81362b3f7bc9bd3ba641b53e',
+  'devtools_frontend_revision': 'ad4a201d4b39b0aa06eff542338cbe1097f2e486',
   # 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.
@@ -395,7 +395,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': 'b9ab0240030d48ec8ec407128b587bb08b39ea49',
+  'dawn_revision': 'a1d3003e16587926b68893750b0a5f012697c1fa',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -850,7 +850,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': '_4rp0d4G7gaKcibYjcd7MEGhB_e7VnFe5WJm20wUNusC',
+          'version': 'z2HkWjqQCPx85l7BU6OlgfBB2FraUIhMyzJFwhnC5kUC',
         },
       ],
       'dep_type': 'cipd',
@@ -861,7 +861,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'XX3g-_Y8esGuqkFEpKpQbdTxBZTxn9a56fjNHm8iuEQC',
+          'version': 'znxpM8kXNjMEqPZW_tULlBFYb5ktsy20dkU8U_v-3fkC',
         },
       ],
       'dep_type': 'cipd',
@@ -872,7 +872,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'PGS6ELwFQEAOgpdole1GdZq-ZNLkank5NIcEVNOpd8YC',
+          'version': 'Sc8zmA_seLcUHh3PCE3p_W17b7IFmSyMJ8c6OqH5j2MC',
         },
       ],
       'dep_type': 'cipd',
@@ -1564,7 +1564,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '80dd4d929a592772a530e67c30d9f76bb63f5219',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '28934fcd20d1fa20ea8d21ac6f93391b4b7e348d',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1695,7 +1695,7 @@
       'dep_type': 'cipd',
   },
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@24ed8b7a6bd7120e29de06dcf7c791a0aee2531c',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@5d976018641e3b231b77a35c3a9b40bdbe31e91a',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907',
@@ -1731,10 +1731,10 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'e58ed2132aa47ac110a4cce1763abfa34f4fa34e',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '1f5f875f89f8af99653b8e5fae1007115747397e',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '5de908c54a8d309db6b5743be4a4d8aca777b1d7',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '63299a3124dd6cd37e887ee274fec3716bb0d27b',
+    Var('webrtc_git') + '/src.git' + '@' + 'a7e15a2b7e9acc361c9233f901ab16a318e69b9d',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1807,7 +1807,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@7415ea2aeaa5f22e77641dc56ae27970ece20a03',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@aff538c234b2ae8b402b4bf53adafa0959b6edd1',
     'condition': 'checkout_src_internal',
   },
 
@@ -1837,7 +1837,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'WDzf_mw4eqqsVO64bN84HfCsDushxz0cYt-EtfMrqTMC',
+        'version': 'uXYnQWZeWJd8N9gfRquqcR3zDnZ4Uh3xKQFyXlqgNvIC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1848,7 +1848,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'DZeJ6sbYACiPjjPN8LkZlj6faYM5y7ABsHKICY-uik4C',
+        'version': 'rAzxgB11g3i6fQvg3X_iLJK16S90vK5b9WuZWKSlakAC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/gfx/overlay_processor_webview.cc b/android_webview/browser/gfx/overlay_processor_webview.cc
index aa2b7549..f30e58a 100644
--- a/android_webview/browser/gfx/overlay_processor_webview.cc
+++ b/android_webview/browser/gfx/overlay_processor_webview.cc
@@ -73,12 +73,9 @@
         return;
       }
 
-      std::vector<gfx::GpuFence> acquire_fences =
-          read_access_->TakeAcquireFences();
-      if (!acquire_fences.empty()) {
-        DCHECK_EQ(acquire_fences.size(), 1u);
-        begin_read_fence_ = std::move(
-            acquire_fences.front().GetGpuFenceHandle().Clone().owned_fd);
+      gfx::GpuFenceHandle acquire_fence = read_access_->TakeAcquireFence();
+      if (!acquire_fence.is_null()) {
+        begin_read_fence_ = std::move(acquire_fence.owned_fd);
       }
 
       AHardwareBuffer_Desc desc;
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 1383cf0..62d5436 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Rollees regs</translation>
 <translation id="1774796056689732716">Kalender, <ph name="CURRENT_MONTH_YEAR" />, <ph name="DATE" /> is tans gekies.</translation>
 <translation id="1787955149152357925">Af</translation>
+<translation id="1797271123677381264">Wagwoord vergeet</translation>
 <translation id="181103072419391116">Seinsterkte <ph name="SIGNAL_STRENGTH" />, deur jou administrateur bestuur</translation>
 <translation id="1812997170047690955">Wat wys op my skerm?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -610,6 +611,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Losgemaakte toestelle</translation>
 <translation id="4505050298327493054">Aktiewe lessenaar.</translation>
+<translation id="450584155212756404">Ontwikkelingskanaal</translation>
 <translation id="4513946894732546136">Terugvoer</translation>
 <translation id="4518404433291145981">Ontsluit eers jou foon as jy jou Chromebook wil ontsluit</translation>
 <translation id="4527045527269911712">Bluetooth-toestel "<ph name="DEVICE_NAME" />" wil graag toestemming hê om saam te bind.</translation>
@@ -877,6 +879,7 @@
 <translation id="6062360702481658777">Jy sal oor <ph name="LOGOUT_TIME_LEFT" /> outomaties afgemeld word.</translation>
 <translation id="6064463340679478396">Hierdie lêer klaar gebruik</translation>
 <translation id="6073451960410192870">Stop opname</translation>
+<translation id="6074087755403037157">Beta-kanaal</translation>
 <translation id="6099678161144790572">In die afgelope maand gewysig</translation>
 <translation id="6103838137565245112">stelsel</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" />-spraaklêers is afgelaai</translation>
@@ -1227,6 +1230,7 @@
 <translation id="8200772114523450471">Hervat</translation>
 <translation id="8203795194971602413">Regsklik</translation>
 <translation id="8209010265547628927">Stel terug</translation>
+<translation id="8214996719228530800">Kanarie-kanaal</translation>
 <translation id="8219451629189078428">Jou Chromebook moet in hierdie tyd aangeskakel bly en aan krag gekoppel wees. Maak seker dat die laaier of kragprop se drade behoorlik by sowel jou Chromebook as die kragpunt ingeprop is. Moenie jou Chromebook afskakel nie.</translation>
 <translation id="8236042855478648955">Tyd vir 'n blaaskans</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, seinsterkte <ph name="SIGNAL_STRENGTH" />, foonbattery <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 36418d4..58594fe 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">ডান দিকে স্ক্রল করুন</translation>
 <translation id="1774796056689732716">ক্যালেন্ডার, <ph name="CURRENT_MONTH_YEAR" />, বর্তমানে <ph name="DATE" /> বেছে নেওয়া হয়েছে।</translation>
 <translation id="1787955149152357925">বন্ধ আছে</translation>
+<translation id="1797271123677381264">পাসওয়ার্ড ভুলে গেছেন</translation>
 <translation id="181103072419391116">সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে</translation>
 <translation id="1812997170047690955">আমার স্ক্রিনে কী রয়েছে?</translation>
 <translation id="1823873187264960516">ইথারনেট: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">ইথারনেট</translation>
 <translation id="4481530544597605423">বিযুক্ত করা ডিভাইসগুলি</translation>
 <translation id="4505050298327493054">অ্যাক্টিভ ডেস্কটপ।</translation>
+<translation id="450584155212756404">ডেভ চ্যানেল</translation>
 <translation id="4513946894732546136">প্রতিক্রিয়া</translation>
 <translation id="4518404433291145981">Chromebook আনলক করতে, প্রথমে আপনার ফোন আনলক করুন</translation>
 <translation id="4527045527269911712">ব্লুটুথ ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করার অনুমতি চাইছে।</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">আপনি <ph name="LOGOUT_TIME_LEFT" /> এর মধ্যে স্বয়ংক্রিয়ভাবে প্রস্থান করুন হবেন৷</translation>
 <translation id="6064463340679478396">ফাইল ব্যবহার করে সম্পূর্ণ করা হয়েছে</translation>
 <translation id="6073451960410192870">রেকর্ডিং বন্ধ করুন</translation>
+<translation id="6074087755403037157">বিটা চ্যানেল</translation>
 <translation id="6099678161144790572">গত মাসে এডিট করা হয়েছে</translation>
 <translation id="6103838137565245112">সিস্টেম</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> স্পিচ ফাইল ডাউনলোড করা হয়েছে</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">আবার চালু করা</translation>
 <translation id="8203795194971602413">ডানদিকের বোতামে ক্লিক করুন</translation>
 <translation id="8209010265547628927">রিসেট করুন</translation>
+<translation id="8214996719228530800">ক্যানারি চ্যানেল</translation>
 <translation id="8219451629189078428">এই সময়ে আপনার Chromebook চালু অবস্থায় থাকতে হবে ও সেটি চার্জে বসিয়ে রাখতে হবে। আপনার Chromebook ও প্লাগ পয়েন্ট, উভয়ের সাথে চার্জার বা অ্যাডাপ্টার কেবল ঠিকমতো প্লাগ-ইন করা আছে কিনা তা দেখে নিন। আপনার Chromebook বন্ধ করবেন না।</translation>
 <translation id="8236042855478648955">বিরতির সময় হয়েছে</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, ফোনের ব্যাটারি <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index 02563ad0..419e16f 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Listaj udesno</translation>
 <translation id="1774796056689732716">Kalendar, <ph name="CURRENT_MONTH_YEAR" />, trenutno je odabran datum <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Isključeno</translation>
+<translation id="1797271123677381264">Zaboravljena lozinka</translation>
 <translation id="181103072419391116">Jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja vaš administrator</translation>
 <translation id="1812997170047690955">Šta je na ekranu?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Uređaj čije je uparivanje okončano</translation>
 <translation id="4505050298327493054">Aktivna radna površina.</translation>
+<translation id="450584155212756404">Kanal za programere</translation>
 <translation id="4513946894732546136">Povratne informacije</translation>
 <translation id="4518404433291145981">Da otključate Chromebook, najprije otključajte telefon</translation>
 <translation id="4527045527269911712">Bluetooth uređaj "<ph name="DEVICE_NAME" />" traži odobrenje za uparivanje.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Bit ćete automatski odjavljeni za <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Završio/la sam s korištenjem fajla</translation>
 <translation id="6073451960410192870">Zaustavi snimanje</translation>
+<translation id="6074087755403037157">Beta kanal</translation>
 <translation id="6099678161144790572">Uređeno u proteklom mjesecu</translation>
 <translation id="6103838137565245112">sistem</translation>
 <translation id="6114505516289286752">Fajlovi govora na jeziku <ph name="LANGUAGE" /> su preuzeti</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Nastavi</translation>
 <translation id="8203795194971602413">Desni klik</translation>
 <translation id="8209010265547628927">Vrati na zadano</translation>
+<translation id="8214996719228530800">Canary kanal</translation>
 <translation id="8219451629189078428">Za to vrijeme vaš Chromebook mora ostati uključen i priključen na napajanje. Provjerite jesu li kablovi punjača ili adaptera dobro priključeni u Chromebook i utičnicu. Nemojte isključivati Chromebook.</translation>
 <translation id="8236042855478648955">Vrijeme je za odmor</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />, baterija telefona <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 461551f..55783c70 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Posunout doprava</translation>
 <translation id="1774796056689732716">Kalendář, <ph name="CURRENT_MONTH_YEAR" />, je vybráno datum <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Vyp</translation>
+<translation id="1797271123677381264">Zapomenuté heslo</translation>
 <translation id="181103072419391116">Síla signálu: <ph name="SIGNAL_STRENGTH" />, spravováno vaším administrátorem</translation>
 <translation id="1812997170047690955">Co je na obrazovce?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Nespárovaná zařízení</translation>
 <translation id="4505050298327493054">Aktivní plocha.</translation>
+<translation id="450584155212756404">Verze pro vývojáře</translation>
 <translation id="4513946894732546136">Zpětná vazba</translation>
 <translation id="4518404433291145981">Pokud chcete Chromebook odemknout, nejdřív odemkněte telefon.</translation>
 <translation id="4527045527269911712">Zařízení Bluetooth „<ph name="DEVICE_NAME" />“ žádá o povolení ke spárování.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Za <ph name="LOGOUT_TIME_LEFT" /> budete automaticky odhlášeni.</translation>
 <translation id="6064463340679478396">Tento soubor nechci používat</translation>
 <translation id="6073451960410192870">Zastavit nahrávání</translation>
+<translation id="6074087755403037157">Verze beta</translation>
 <translation id="6099678161144790572">Upraveno v uplynulém měsíci</translation>
 <translation id="6103838137565245112">systém</translation>
 <translation id="6114505516289286752">Byly staženy řečové soubory pro jazyk <ph name="LANGUAGE" /></translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Pokračovat</translation>
 <translation id="8203795194971602413">Kliknutí pravým tlačítkem</translation>
 <translation id="8209010265547628927">Resetovat</translation>
+<translation id="8214996719228530800">Verze Canary</translation>
 <translation id="8219451629189078428">Chromebook po tuto dobu musí zůstat zapnutý a připojený ke zdroji napájení. Kabely adaptéru nebo nabíječky musí být správně zapojeny do Chromebooku i do zásuvky. Chromebook nevypínejte.</translation>
 <translation id="8236042855478648955">Čas na přestávku</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, síla signálu: <ph name="SIGNAL_STRENGTH" />, baterie telefonu: <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 701bb2ee..d6d0c7ef 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Rul til højre</translation>
 <translation id="1774796056689732716">Kalender for <ph name="CURRENT_MONTH_YEAR" /> – <ph name="DATE" /> er valgt.</translation>
 <translation id="1787955149152357925">Fra</translation>
+<translation id="1797271123677381264">Glemt adgangskode</translation>
 <translation id="181103072419391116">Signalstyrke <ph name="SIGNAL_STRENGTH" />, administreret af din administrator</translation>
 <translation id="1812997170047690955">Hvad vises der på min skærm?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Ikke-parrede enheder</translation>
 <translation id="4505050298327493054">Aktivt skrivebord.</translation>
+<translation id="450584155212756404">Udviklerkanal</translation>
 <translation id="4513946894732546136">Feedback</translation>
 <translation id="4518404433291145981">Hvis du vil låse din Chromebook op, skal du først låse din telefon op</translation>
 <translation id="4527045527269911712">Bluetooth-enheden "<ph name="DEVICE_NAME" />" vil gerne have parringstilladelse.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Du bliver automatisk logget ud om <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Jeg er færdig med at bruge filen</translation>
 <translation id="6073451960410192870">Stop optagelse</translation>
+<translation id="6074087755403037157">Betakanal</translation>
 <translation id="6099678161144790572">Redigeret inden for den seneste måned</translation>
 <translation id="6103838137565245112">systemet</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> talefiler blev downloadet</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Genoptag</translation>
 <translation id="8203795194971602413">Højreklik</translation>
 <translation id="8209010265547628927">Nulstil</translation>
+<translation id="8214996719228530800">Canary-kanal</translation>
 <translation id="8219451629189078428">Din Chromebook skal være tændt og tilsluttet strøm i dette tidsrum. Sørg for, at opladeren eller adapterkablerne er sat korrekt i, både i din Chromebook og i stikkontakten. Sluk ikke for din Chromebook.</translation>
 <translation id="8236042855478648955">Det er tid til at tage en pause</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, signalstyrke <ph name="SIGNAL_STRENGTH" />, telefonbatteri <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 30d19d13..3b38621 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Κύλιση δεξιά</translation>
 <translation id="1774796056689732716">Ημερολόγιο, <ph name="CURRENT_MONTH_YEAR" />, αυτήν τη στιγμή είναι επιλεγμένη η ημερομηνία <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Ανενεργό</translation>
+<translation id="1797271123677381264">Ξέχασα τον κωδικό πρόσβασης</translation>
 <translation id="181103072419391116">Ισχύς σήματος <ph name="SIGNAL_STRENGTH" />, Διαχειριζόμενο από τον διαχειριστή σας</translation>
 <translation id="1812997170047690955">Τι υπάρχει στην οθόνη μου;</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Συσκευές στις οποίες διακόπηκε η σύζευξη</translation>
 <translation id="4505050298327493054">Ενεργή επιφάνεια εργασίας.</translation>
+<translation id="450584155212756404">Κανάλι προγραμματιστών</translation>
 <translation id="4513946894732546136">Σχόλια</translation>
 <translation id="4518404433291145981">Για να ξεκλειδώσετε το Chromebook, ξεκλειδώστε πρώτα το τηλέφωνό σας</translation>
 <translation id="4527045527269911712">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" ζητά δικαιώματα σύζευξης.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Θα αποσυνδεθείτε αυτόματα σε <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Δεν χρησιμοποιώ πλέον αυτό το αρχείο</translation>
 <translation id="6073451960410192870">Διακοπή εγγραφής</translation>
+<translation id="6074087755403037157">Κανάλι έκδοσης Beta</translation>
 <translation id="6099678161144790572">Έγινε επεξεργασία τον προηγούμενο μήνα</translation>
 <translation id="6103838137565245112">σύστημα</translation>
 <translation id="6114505516289286752">Έγινε λήψη των αρχείων ομιλίας στα <ph name="LANGUAGE" /></translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Συνέχιση</translation>
 <translation id="8203795194971602413">Δεξί κλικ</translation>
 <translation id="8209010265547628927">Επαναφορά</translation>
+<translation id="8214996719228530800">Κανάλι Canary</translation>
 <translation id="8219451629189078428">Το Chromebook πρέπει να παραμείνει ενεργοποιημένο και συνδεδεμένο σε παροχή ρεύματος. Βεβαιωθείτε ότι τα καλώδια του φορτιστή ή του μετασχηματιστή είναι συνδεδεμένα σωστά, τόσο στο Chromebook όσο και στην πρίζα. Μην απενεργοποιήσετε το Chromebook.</translation>
 <translation id="8236042855478648955">Ώρα για διάλειμμα</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, Ισχύς σήματος <ph name="SIGNAL_STRENGTH" />, Μπαταρία τηλεφώνου <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index b73a428..cc4faabe 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">پیمایش به راست</translation>
 <translation id="1774796056689732716">تقویم، <ph name="CURRENT_MONTH_YEAR" />، درحال‌حاضر <ph name="DATE" /> انتخاب شده است.</translation>
 <translation id="1787955149152357925">خاموش</translation>
+<translation id="1797271123677381264">فراموش کردن گذرواژه</translation>
 <translation id="181103072419391116">قدرت سیگنال <ph name="SIGNAL_STRENGTH" />، تحت‌مدیریت سرپرست</translation>
 <translation id="1812997170047690955">چه چیزی در صفحه‌نمایش من نشان داده می‌شود؟</translation>
 <translation id="1823873187264960516">اترنت: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">اترنت</translation>
 <translation id="4481530544597605423">دستگاه‌های لغو ارتباط‌شده</translation>
 <translation id="4505050298327493054">میز فعال.</translation>
+<translation id="450584155212756404">کانال برنامه‌نویس‌ها</translation>
 <translation id="4513946894732546136">بازخورد</translation>
 <translation id="4518404433291145981">‏برای باز کردن قفل Chromebook، ابتدا قفل تلفنتان را باز کنید</translation>
 <translation id="4527045527269911712">دستگاه بلوتوث «<ph name="DEVICE_NAME" />» برای مرتبط‌سازی به مجوز نیاز دارد.</translation>
@@ -712,7 +714,7 @@
 <translation id="5107522548814527560">وب</translation>
 <translation id="5117590920725113268">نمایش ماه بعدی</translation>
 <translation id="5136175204352732067">صفحه‌کلید دیگری متصل شد</translation>
-<translation id="5147567197700016471">قفل باز شد</translation>
+<translation id="5147567197700016471">قفل‌نشده</translation>
 <translation id="5150070631291639005">تنظیمات حریم خصوصی</translation>
 <translation id="5155897006997040331">سرعت خواندن</translation>
 <translation id="5166007464919321363">ذخیره میزکار به‌عنوان الگو</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">به صورت خودکار در عرض <ph name="LOGOUT_TIME_LEFT" /> از سیستم خارج می‌شوید.</translation>
 <translation id="6064463340679478396">کارم با این فایل تمام شده است</translation>
 <translation id="6073451960410192870">توقف ضبط</translation>
+<translation id="6074087755403037157">کانال بتا</translation>
 <translation id="6099678161144790572">ماه گذشته ویرایش شده است</translation>
 <translation id="6103838137565245112">سیستم</translation>
 <translation id="6114505516289286752">فایل‌های گفتار <ph name="LANGUAGE" /> بارگیری شد</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">ازسرگیری</translation>
 <translation id="8203795194971602413">کلیک راست</translation>
 <translation id="8209010265547628927">بازنشانی</translation>
+<translation id="8214996719228530800">‏کانال Canary</translation>
 <translation id="8219451629189078428">‏Chromebook باید در این مدت روشن بماند و به برق متصل باشد. مطمئن شوید سیم شارژر یا آداپتور کاملاً متصل باشد، هم به Chromebook و هم به پریز برق. Chromebook را خاموش نکنید.</translation>
 <translation id="8236042855478648955">وقت استراحت</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />، قدرت سیگنال <ph name="SIGNAL_STRENGTH" />، باتری تلفن<ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 83c9dd5..159071e 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Mag-scroll pakanan</translation>
 <translation id="1774796056689732716">Kalendaryo, <ph name="CURRENT_MONTH_YEAR" />, kasalukuyang pinili ang <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Naka-off</translation>
+<translation id="1797271123677381264">Nakalimutan ang password</translation>
 <translation id="181103072419391116">Lakas ng Signal <ph name="SIGNAL_STRENGTH" />, Pinapamahalaan ng iyong Administrator</translation>
 <translation id="1812997170047690955">Ano ang nasa screen ko?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Mga hindi nakapares na device</translation>
 <translation id="4505050298327493054">Aktibong desk.</translation>
+<translation id="450584155212756404">Dev Channel</translation>
 <translation id="4513946894732546136">Feedback</translation>
 <translation id="4518404433291145981">Para i-unlock ang iyong Chromebook, i-unlock muna ang telepono mo</translation>
 <translation id="4527045527269911712">Gusto ng bluetooth device na "<ph name="DEVICE_NAME" />" na magpares.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Awtomatiko kang masa-sign out sa loob ng <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Tapos nang gamitin ang file</translation>
 <translation id="6073451960410192870">Ihinto ang pag-record</translation>
+<translation id="6074087755403037157">Beta Channel</translation>
 <translation id="6099678161144790572">Na-edit sa nakalipas na buwan</translation>
 <translation id="6103838137565245112">system</translation>
 <translation id="6114505516289286752">Na-download na ang mga <ph name="LANGUAGE" /> na speech file</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Resume</translation>
 <translation id="8203795194971602413">Mag-right click</translation>
 <translation id="8209010265547628927">I-reset</translation>
+<translation id="8214996719228530800">Canary Channel</translation>
 <translation id="8219451629189078428">Kailangang manatiling naka-on at nakasaksak ang iyong Chromebook sa panahong ito. Tiyaking nakasaksak nang maayos ang charger o mga adapter cable, sa iyong Chromebook at sa saksakan. Huwag i-off ang iyong Chromebook.</translation>
 <translation id="8236042855478648955">Oras na para magpahinga</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, Lakas ng Signal <ph name="SIGNAL_STRENGTH" />, Baterya ng Telepono <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index d2cc24d..562d780b 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Оңго сыдыруу</translation>
 <translation id="1774796056689732716">Жылнаама, <ph name="CURRENT_MONTH_YEAR" />, учурда <ph name="DATE" /> тандалып турат.</translation>
 <translation id="1787955149152357925">Өчүк</translation>
+<translation id="1797271123677381264">Сырсөздү унутуп калдым</translation>
 <translation id="181103072419391116">Сигналдын күчү <ph name="SIGNAL_STRENGTH" />, Администраторуңуз башкарат</translation>
 <translation id="1812997170047690955">Экранымда эмне көрсөтүлүп турат?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Ажыратылган түзмөктөр</translation>
 <translation id="4505050298327493054">Жигердүү иш такта.</translation>
+<translation id="450584155212756404">Иштеп чыгуучулардын версиясы</translation>
 <translation id="4513946894732546136">Пикир билдирүү</translation>
 <translation id="4518404433291145981">Chromebook'тун кулпусун ачуу үчүн адегенде телефонуңуздун кулпусун ачыңыз</translation>
 <translation id="4527045527269911712">Bluetooth түзмөгү "<ph name="DEVICE_NAME" />" жупташууга уруксат сурайт.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777"><ph name="LOGOUT_TIME_LEFT" /> ичинен автоматтык түрдө чыгарыласыз.</translation>
 <translation id="6064463340679478396">Файл колдонулуп бүттү</translation>
 <translation id="6073451960410192870">Жаздырууну токтотуу</translation>
+<translation id="6074087755403037157">Бета версия</translation>
 <translation id="6099678161144790572">Мурунку айда түзөтүлгөн</translation>
 <translation id="6103838137565245112">тутум</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> тилиндеги кеп файлдары жүктөлүп алынды</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Улантуу</translation>
 <translation id="8203795194971602413">Оң баскычын чыкылдатуу</translation>
 <translation id="8209010265547628927">Баштапкы абалга келтирүү</translation>
+<translation id="8214996719228530800">Canary каналы</translation>
 <translation id="8219451629189078428">Бул убакта Chromebook күйүп, электр кубатына туташып турушу керек. Кубаттагычтын же адаптердин кабелдери Chromebook'ка жана розеткага жакшы сайылып турганын текшериңиз. Chromebook'ту өчүрбөңүз.</translation>
 <translation id="8236042855478648955">Тыныгууга убакыт келди</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, Сигналдын күчү <ph name="SIGNAL_STRENGTH" />, Телефондун батареясы <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index 8c81613..7bc63f5 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Лизгај надесно</translation>
 <translation id="1774796056689732716">Календар, <ph name="CURRENT_MONTH_YEAR" />, моментално е избран <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Исклучено</translation>
+<translation id="1797271123677381264">Ја заборавивте лозинката</translation>
 <translation id="181103072419391116">Јачина на сигналот: <ph name="SIGNAL_STRENGTH" />, управувана од администраторот</translation>
 <translation id="1812997170047690955">Што има на мојот екран?</translation>
 <translation id="1823873187264960516">Етернет: <ph name="ADDRESS" /></translation>
@@ -610,6 +611,7 @@
 <translation id="4479639480957787382">Етернет</translation>
 <translation id="4481530544597605423">Неспарени уреди</translation>
 <translation id="4505050298327493054">Активен работен простор.</translation>
+<translation id="450584155212756404">Dev Channel</translation>
 <translation id="4513946894732546136">Повратни информации</translation>
 <translation id="4518404433291145981">За да го отклучите вашиот Chromebook, прво отклучете го телефонот</translation>
 <translation id="4527045527269911712">Уредот Bluetooth „<ph name="DEVICE_NAME" />“ бара дозвола за спарување.</translation>
@@ -877,6 +879,7 @@
 <translation id="6062360702481658777">Автоматски ќе бидете одјавени за <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Завршив со користење на датотеката</translation>
 <translation id="6073451960410192870">Сопри со снимање</translation>
+<translation id="6074087755403037157">Бета-канал</translation>
 <translation id="6099678161144790572">Изменето во изминатиот месец</translation>
 <translation id="6103838137565245112">систем</translation>
 <translation id="6114505516289286752">Датотеките за говор на <ph name="LANGUAGE" /> се преземени</translation>
@@ -1227,6 +1230,7 @@
 <translation id="8200772114523450471">Продолжи</translation>
 <translation id="8203795194971602413">Десен клик</translation>
 <translation id="8209010265547628927">Ресетирај</translation>
+<translation id="8214996719228530800">Canary Channel</translation>
 <translation id="8219451629189078428">Вашиот Chromebook треба да остане вклучен и поврзан на струја во текот на ова време. Проверете дали каблите на полначот или адаптерот се целосно приклучени во вашиот Chromebook и во штекерот. Не исклучувајте го вашиот Chromebook.</translation>
 <translation id="8236042855478648955">Време за пауза</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, јачина на сигналот: <ph name="SIGNAL_STRENGTH" />, батерија на телефонот: <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index c89415c5..24966315 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Баруун тийш гүйлгэх</translation>
 <translation id="1774796056689732716">Календарь, <ph name="CURRENT_MONTH_YEAR" />, одоогоор <ph name="DATE" />-г сонгосон.</translation>
 <translation id="1787955149152357925">Унтраалттай</translation>
+<translation id="1797271123677381264">Нууц үгээ мартсан</translation>
 <translation id="181103072419391116">Дохионы хүч <ph name="SIGNAL_STRENGTH" />, таны администратор удирддаг</translation>
 <translation id="1812997170047690955">Миний дэлгэцэд юу байна вэ?</translation>
 <translation id="1823873187264960516">Этернет: <ph name="ADDRESS" /></translation>
@@ -610,6 +611,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Хослоогүй төхөөрөмж</translation>
 <translation id="4505050298327493054">Идэвхтэй дэлгэц.</translation>
+<translation id="450584155212756404">Dev суваг</translation>
 <translation id="4513946894732546136">Санал дүгнэлт</translation>
 <translation id="4518404433291145981">Chromebook-нхээ түгжээг тайлахын тулд эхлээд утасныхаа түгжээг тайлна уу</translation>
 <translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" Bluetooth төхөөрөмж хослох зөвшөөрөл хүсч байна.</translation>
@@ -877,6 +879,7 @@
 <translation id="6062360702481658777"><ph name="LOGOUT_TIME_LEFT" />-н дотор та сүлжээнээс автоматаар гарах болно.</translation>
 <translation id="6064463340679478396">Файлыг ашиглаж дууссан</translation>
 <translation id="6073451960410192870">Бичихийг зогсоох</translation>
+<translation id="6074087755403037157">Бета суваг</translation>
 <translation id="6099678161144790572">Өнгөрсөн сард зассан</translation>
 <translation id="6103838137565245112">систем</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> дээрх ярианы файлуудыг татсан</translation>
@@ -1227,6 +1230,7 @@
 <translation id="8200772114523450471">Сэргээх</translation>
 <translation id="8203795194971602413">Баруун талыг товших</translation>
 <translation id="8209010265547628927">Шинэчлэх</translation>
+<translation id="8214996719228530800">Канар суваг</translation>
 <translation id="8219451629189078428">Энэ хугацаанд Chromebook тань асаалттай, мөн тэжээлд залгаатай байх шаардлагатай. Цэнэглэгчийн эсвэл адаптерын утас Chromebook, цахилгааны залгуур хоёрт хоёуланд нь бүрэн залгаатай байгаа эсэхийг шалгаарай. Chromebook-ээ унтрааж болохгүй.</translation>
 <translation id="8236042855478648955">Завсарлах цаг</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, дохионы хүч <ph name="SIGNAL_STRENGTH" />, утасны батарей <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 30366f26..b1474c91 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">ညာသို့ လှိမ့်ရန်</translation>
 <translation id="1774796056689732716">ပြက္ခဒိန်၊ <ph name="CURRENT_MONTH_YEAR" />၊ လက်ရှိ <ph name="DATE" /> ကိုရွေးထားသည်။</translation>
 <translation id="1787955149152357925">ပိတ်ထားသည်</translation>
+<translation id="1797271123677381264">စကားဝှက် မေ့နေသည်</translation>
 <translation id="181103072419391116">လိုင်းဆွဲအား <ph name="SIGNAL_STRENGTH" />၊ သင့် 'ကြီးကြပ်သူ' က စီမံထားပါသည်</translation>
 <translation id="1812997170047690955">ကျွန်ုပ်၏ ဖန်သားပြင်ပေါ်တွင် မည်သည့်အရာများ ရှိပါသလဲ။</translation>
 <translation id="1823873187264960516">အီသာနက်− <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">အီတာနက်</translation>
 <translation id="4481530544597605423">ချိတ်ဆက်မှု ဖြုတ်ထားသည့် စက်ပစ္စည်းများ</translation>
 <translation id="4505050298327493054">အသုံးပြုနေသော နေရာ။</translation>
+<translation id="450584155212756404">တိုးတက်မှုချန်နယ်</translation>
 <translation id="4513946894732546136">အကြံပြုချက်</translation>
 <translation id="4518404433291145981">သင့် Chromebook ကို လော့ခ်ဖွင့်ရန် သင့်ဖုန်းကို ဦးစွာ လော့ခ်ဖွင့်ပါ</translation>
 <translation id="4527045527269911712">ဘလူးတုသ် ကိရိယာ "<ph name="DEVICE_NAME" />" က ချိတ်တွဲရန် ခွင့်ပြုချက် ရယူလိုသည်။</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">သင်သည် <ph name="LOGOUT_TIME_LEFT" /> အကြာတွင် အလိုအလျောက် ထွက်ခွာမည်။</translation>
 <translation id="6064463340679478396">ဤဖိုင်ကို သုံးပြီးပါပြီ</translation>
 <translation id="6073451960410192870">ကူးယူမှု ရပ်ရန်</translation>
+<translation id="6074087755403037157">စမ်းသပ်ချန်နယ်</translation>
 <translation id="6099678161144790572">ယခင်လက ပြင်ဆင်ထားသည်</translation>
 <translation id="6103838137565245112">စနစ်</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> တိုက်ရိုက်စာတန်းဖိုင်များ ဒေါင်းလုဒ်လုပ်ပြီးပြီ</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">ပြန်ဆက်ရန်</translation>
 <translation id="8203795194971602413">ညာဘက်ခလုတ်ကို နှိပ်ရန်</translation>
 <translation id="8209010265547628927">ပြင်ဆင်သတ်မှတ်ရန်</translation>
+<translation id="8214996719228530800">Canary ချန်နယ်</translation>
 <translation id="8219451629189078428">ဤအချိန်အတွင်းတွင် သင့် Chromebook ကို ဖွင့်ထားပြီး ပါဝါချိတ်ဆက်ထားရန် လိုအပ်ပါသည်။ အားသွင်းကိရိယာ သို့မဟုတ် ကြားခံကိရိယာကြိုးများကို သင့် Chromebook နှင့် ပလတ်ပေါက် နှစ်ခုစလုံးတွင် တပ်ထားကြောင်း သေချာပါစေ။ သင့် Chromebook ကို မပိတ်ပါနှင့်။</translation>
 <translation id="8236042855478648955">နားချိန် ရောက်ပါပြီ</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />၊ လိုင်းဆွဲအား <ph name="SIGNAL_STRENGTH" />၊ ဖုန်းဘက်ထရီ <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 397b1af..8a451f4 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Rull til høyre</translation>
 <translation id="1774796056689732716">Kalender – <ph name="CURRENT_MONTH_YEAR" />. For øyeblikket er <ph name="DATE" /> valgt.</translation>
 <translation id="1787955149152357925">Av</translation>
+<translation id="1797271123677381264">Glemt passord</translation>
 <translation id="181103072419391116">Signalstyrke <ph name="SIGNAL_STRENGTH" /> – administreres av administratoren din</translation>
 <translation id="1812997170047690955">Hva er på skjermen?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -536,6 +537,7 @@
 <translation id="4115378294792113321">Magenta</translation>
 <translation id="412298498316631026">vindu</translation>
 <translation id="4123259114412175274">For å låse opp Chromebooken, sørg for at Bluetooth er påslått på telefonen</translation>
+<translation id="4125970834901680537">Kan ikke strømme apper i nettbrettmodus. Prøv på nytt i laptopmodus.</translation>
 <translation id="4129129681837227511">For å se varsler på låseskjermen, lås opp for å endre innstillingen</translation>
 <translation id="4136724716305260864">Påslått til soloppgang</translation>
 <translation id="4146833061457621061">Spill av musikk</translation>
@@ -553,6 +555,7 @@
 <translation id="4215497585250573029">VPN-innstillinger</translation>
 <translation id="4217571870635786043">Diktering</translation>
 <translation id="4221957499226645091"><ph name="APP_NAME" />, installert app, satt på pause</translation>
+<translation id="423685346499232137">Kan ikke kopiere eller lime inn innhold akkurat nå</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Åpne innstillingene</translation>
 <translation id="4250229828105606438">Skjermdump</translation>
@@ -607,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Frakoblede enheter</translation>
 <translation id="4505050298327493054">Aktivt skrivebord.</translation>
+<translation id="450584155212756404">Utviklerkanal</translation>
 <translation id="4513946894732546136">Google Feedback</translation>
 <translation id="4518404433291145981">For å låse opp Chromebooken, lås opp telefonen først</translation>
 <translation id="4527045527269911712">Bluetooth-enheten «<ph name="DEVICE_NAME" />» ber om tillatelse til å koble til.</translation>
@@ -874,6 +878,7 @@
 <translation id="6062360702481658777">Du logges automatisk av om <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Ferdig med filen</translation>
 <translation id="6073451960410192870">Stopp opptaket</translation>
+<translation id="6074087755403037157">Betakanal</translation>
 <translation id="6099678161144790572">Redigert den siste måneden</translation>
 <translation id="6103838137565245112">system</translation>
 <translation id="6114505516289286752">Talefiler for <ph name="LANGUAGE" /> er lastet ned</translation>
@@ -1224,6 +1229,7 @@
 <translation id="8200772114523450471">Fortsett</translation>
 <translation id="8203795194971602413">Høyreklikk</translation>
 <translation id="8209010265547628927">Tilbakestill</translation>
+<translation id="8214996719228530800">Canary-kanal</translation>
 <translation id="8219451629189078428">Chromebooken må være påslått og koblet til strøm i denne perioden. Sørg for at lader- eller adapterkabelen er plugget helt inn i både Chromebooken og stikkontakten. Ikke slå av Chromebook.</translation>
 <translation id="8236042855478648955">På tide med en pause</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" /> – signalstyrke <ph name="SIGNAL_STRENGTH" /> – telefonbatterinivå <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 2d3fd701..23a18c6 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Deslocar para a direita</translation>
 <translation id="1774796056689732716">Calendário, <ph name="CURRENT_MONTH_YEAR" />, atualmente, está selecionada a data <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Desativado</translation>
+<translation id="1797271123677381264">Esqueci-me da palavra-passe</translation>
 <translation id="181103072419391116">Intensidade do sinal: <ph name="SIGNAL_STRENGTH" />, gerida pelo administrador</translation>
 <translation id="1812997170047690955">O que está no meu ecrã?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Dispositivos não sincronizados</translation>
 <translation id="4505050298327493054">Espaço de trabalho ativo.</translation>
+<translation id="450584155212756404">Canal para programadores</translation>
 <translation id="4513946894732546136">Comentários</translation>
 <translation id="4518404433291145981">Para desbloquear o Chromebook, desbloqueie primeiro o seu telemóvel</translation>
 <translation id="4527045527269911712">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" necessita de autorização para sincronizar.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">A sessão será terminada automaticamente dentro de <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Já não estou a usar o ficheiro</translation>
 <translation id="6073451960410192870">Parar gravação</translation>
+<translation id="6074087755403037157">Canal beta</translation>
 <translation id="6099678161144790572">Editado no mês passado</translation>
 <translation id="6103838137565245112">sistema</translation>
 <translation id="6114505516289286752">Ficheiros de voz em <ph name="LANGUAGE" /> transferidos</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Continuar</translation>
 <translation id="8203795194971602413">Clicar com o botão direito do rato</translation>
 <translation id="8209010265547628927">Repor</translation>
+<translation id="8214996719228530800">Canal Canary</translation>
 <translation id="8219451629189078428">O Chromebook tem de permanecer ativo e ligado à alimentação durante este período. Certifique-se de que os cabos do carregador ou transformador estão completamente ligados à tomada elétrica e à respetiva entrada do Chromebook. Não desligue o Chromebook.</translation>
 <translation id="8236042855478648955">Hora de fazer uma pausa</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, intensidade do sinal: <ph name="SIGNAL_STRENGTH" />, bateria do telemóvel: <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index b332c50..5a8d5d6 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Posunúť doprava</translation>
 <translation id="1774796056689732716">Kalendár, <ph name="CURRENT_MONTH_YEAR" />, momentálne je vybraný dátum <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Vypnuté</translation>
+<translation id="1797271123677381264">Zabudnuté heslo</translation>
 <translation id="181103072419391116">Sila signálu <ph name="SIGNAL_STRENGTH" />, ovládané správcom</translation>
 <translation id="1812997170047690955">Čo je na obrazovke?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Nespárované zariadenia</translation>
 <translation id="4505050298327493054">Aktívna plocha.</translation>
+<translation id="450584155212756404">Verzia pre vývojárov</translation>
 <translation id="4513946894732546136">Spätná väzba</translation>
 <translation id="4518404433291145981">Ak chcete Chromebook odomknúť, najprv odomknite telefón</translation>
 <translation id="4527045527269911712">Zariadenie Bluetooth s názvom <ph name="DEVICE_NAME" /> žiada o povolenie párovania.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Odhlásenie prebehne automaticky o <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Tento súbor už nebudem používať</translation>
 <translation id="6073451960410192870">Zastaviť zaznamenávanie</translation>
+<translation id="6074087755403037157">Beta verzia</translation>
 <translation id="6099678161144790572">Upravené za posledný mesiac</translation>
 <translation id="6103838137565245112">systém</translation>
 <translation id="6114505516289286752">Súbory s balíkmi reči <ph name="LANGUAGE" /> boli stiahnuté</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Pokračovať</translation>
 <translation id="8203795194971602413">Kliknutie pravým tlačidlom myši</translation>
 <translation id="8209010265547628927">Resetovať</translation>
+<translation id="8214996719228530800">Kanál Canary</translation>
 <translation id="8219451629189078428">Chromebook musíte mať v tomto období zapnutý a pripojený k zásuvke. Uistite sa, či je kábel nabíjačky alebo adaptéra riadne pripojený do Chromebooku aj elektrickej zásuvky. Chromebook nevypínajte.</translation>
 <translation id="8236042855478648955">Čas na prestávku</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, sila signálu <ph name="SIGNAL_STRENGTH" />, batéria telefónu <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index c40ae439..4ec6d08 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Pomik desno</translation>
 <translation id="1774796056689732716">Koledar, <ph name="CURRENT_MONTH_YEAR" />, trenutno izbran datum: <ph name="DATE" />.</translation>
 <translation id="1787955149152357925">Izklopljeno</translation>
+<translation id="1797271123677381264">Pozabljeno geslo</translation>
 <translation id="181103072419391116">Moč signala je <ph name="SIGNAL_STRENGTH" />, upravlja ga vaš skrbnik</translation>
 <translation id="1812997170047690955">Kaj je na zaslonu?</translation>
 <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4481530544597605423">Naprave, za katere je bila preklicana seznanitev</translation>
 <translation id="4505050298327493054">Aktivno namizje.</translation>
+<translation id="450584155212756404">Različica za razvijalce</translation>
 <translation id="4513946894732546136">Povratne informacije</translation>
 <translation id="4518404433291145981">Če želite odkleniti Chromebook, najprej odklenite telefon.</translation>
 <translation id="4527045527269911712">Naprava Bluetooth »<ph name="DEVICE_NAME" />« želi dovoljenje za seznanjanje.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Samodejno boste odjavljeni čez <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">S to datoteko sem opravil(-a)</translation>
 <translation id="6073451960410192870">Ustavi snemanje</translation>
+<translation id="6074087755403037157">Preizkusna različica (beta)</translation>
 <translation id="6099678161144790572">Urejeno v preteklem mesecu</translation>
 <translation id="6103838137565245112">sistem</translation>
 <translation id="6114505516289286752">Datoteke za govor v jeziku <ph name="LANGUAGE" /> so bile prenesene</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Nadaljuj</translation>
 <translation id="8203795194971602413">Desni klik</translation>
 <translation id="8209010265547628927">Ponastavi</translation>
+<translation id="8214996719228530800">Kanal Canary</translation>
 <translation id="8219451629189078428">Chromebook mora medtem ostati vklopljen in priklopljen na vir napajanja. Poskrbite, da so kabli polnilnika ali napajalnika do konca priklopljeni v Chromebook in električno vtičnico. Chromebooka ne izklopite.</translation>
 <translation id="8236042855478648955">Čas je za premor</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, moč signala je <ph name="SIGNAL_STRENGTH" />, stanje baterije telefona je <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index d9717dc..71a81b0 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Pomeri nadesno</translation>
 <translation id="1774796056689732716">Kalendar, <ph name="CURRENT_MONTH_YEAR" />, <ph name="DATE" /> je trenutno izabran.</translation>
 <translation id="1787955149152357925">Isključeno</translation>
+<translation id="1797271123677381264">Zaboravili ste lozinku</translation>
 <translation id="181103072419391116">Jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja administrator</translation>
 <translation id="1812997170047690955">Šta je na ekranu?</translation>
 <translation id="1823873187264960516">Eternet: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Eternet</translation>
 <translation id="4481530544597605423">Uređaji čije je uparivanje opozvano</translation>
 <translation id="4505050298327493054">Aktivan radni prostor.</translation>
+<translation id="450584155212756404">Programerski kanal</translation>
 <translation id="4513946894732546136">Povratne informacije</translation>
 <translation id="4518404433291145981">Da biste otključali Chromebook, prvo otključajte telefon</translation>
 <translation id="4527045527269911712">Bluetooth uređaj „<ph name="DEVICE_NAME" />“ želi dozvolu za uparivanje.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Automatski ćete biti odjavljeni za <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Ne želim više da koristim ovaj fajl</translation>
 <translation id="6073451960410192870">Zaustavi snimanje</translation>
+<translation id="6074087755403037157">Beta kanal</translation>
 <translation id="6099678161144790572">Izmenjeno proteklog meseca</translation>
 <translation id="6103838137565245112">sistem</translation>
 <translation id="6114505516289286752">Preuzeti su fajlovi sa govorom na jeziku <ph name="LANGUAGE" /></translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Nastavi</translation>
 <translation id="8203795194971602413">Desni klik</translation>
 <translation id="8209010265547628927">Resetuj</translation>
+<translation id="8214996719228530800">Canary kanal</translation>
 <translation id="8219451629189078428">Chromebook treba da ostane uključen i povezan na izvor napajanja tokom tog perioda. Uverite se da su kablovi punjača ili adaptera ispravno priključeni, i u Chromebook i u utičnicu Ne isključujte Chromebook.</translation>
 <translation id="8236042855478648955">Vreme je za pauzu</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />, baterija telefona <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index e460f26..9bbbe0f 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">Помери надесно</translation>
 <translation id="1774796056689732716">Календар, <ph name="CURRENT_MONTH_YEAR" />, <ph name="DATE" /> је тренутно изабран.</translation>
 <translation id="1787955149152357925">Искључено</translation>
+<translation id="1797271123677381264">Заборавили сте лозинку</translation>
 <translation id="181103072419391116">Јачина сигнала <ph name="SIGNAL_STRENGTH" />, управља администратор</translation>
 <translation id="1812997170047690955">Шта је на екрану?</translation>
 <translation id="1823873187264960516">Етернет: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">Етернет</translation>
 <translation id="4481530544597605423">Уређаји чије је упаривање опозвано</translation>
 <translation id="4505050298327493054">Активан радни простор.</translation>
+<translation id="450584155212756404">Програмерски канал</translation>
 <translation id="4513946894732546136">Повратне информације</translation>
 <translation id="4518404433291145981">Да бисте откључали Chromebook, прво откључајте телефон</translation>
 <translation id="4527045527269911712">Bluetooth уређај „<ph name="DEVICE_NAME" />“ жели дозволу за упаривање.</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">Аутоматски ћете бити одјављени за <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="6064463340679478396">Не желим више да користим овај фајл</translation>
 <translation id="6073451960410192870">Заустави снимање</translation>
+<translation id="6074087755403037157">Бета канал</translation>
 <translation id="6099678161144790572">Измењено протеклог месеца</translation>
 <translation id="6103838137565245112">систем</translation>
 <translation id="6114505516289286752">Преузети су фајлови са говором на језику <ph name="LANGUAGE" /></translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">Настави</translation>
 <translation id="8203795194971602413">Десни клик</translation>
 <translation id="8209010265547628927">Ресетуј</translation>
+<translation id="8214996719228530800">Canary канал</translation>
 <translation id="8219451629189078428">Chromebook треба да остане укључен и повезан на извор напајања током тог периода. Уверите се да су каблови пуњача или адаптера исправно прикључени, и у Chromebook и у утичницу Не искључујте Chromebook.</translation>
 <translation id="8236042855478648955">Време је за паузу</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, јачина сигнала <ph name="SIGNAL_STRENGTH" />, батерија телефона <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 5ea631e2..01047e32 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">కుడికి స్క్రోల్ చేయి</translation>
 <translation id="1774796056689732716">క్యాలెండర్, <ph name="CURRENT_MONTH_YEAR" />, ప్రస్తుతం <ph name="DATE" /> తేదీ ఎంపిక చేయబడింది.</translation>
 <translation id="1787955149152357925">ఆఫ్ చేయి</translation>
+<translation id="1797271123677381264">పాస్‌వర్డ్‌ను మర్చిపోయారా</translation>
 <translation id="181103072419391116">సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతుంది</translation>
 <translation id="1812997170047690955">నా స్క్రీన్‌పై ఏమి ఉన్నాయి?</translation>
 <translation id="1823873187264960516">ఈథర్‌నెట్: <ph name="ADDRESS" /></translation>
@@ -610,6 +611,7 @@
 <translation id="4479639480957787382">ఈథర్నెట్</translation>
 <translation id="4481530544597605423">జతను తీసివేసిన పరికరాలు</translation>
 <translation id="4505050298327493054">యాక్టివ్ డెస్క్.</translation>
+<translation id="450584155212756404">డెవలపర్ ఛానెల్</translation>
 <translation id="4513946894732546136">ఫీడ్‌బ్యాక్</translation>
 <translation id="4518404433291145981">మీ Chromebookను అన్‌లాక్ చేయడానికి, ముందుగా మీ ఫోన్‌ను అన్‌లాక్ చేయండి</translation>
 <translation id="4527045527269911712">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది.</translation>
@@ -877,6 +879,7 @@
 <translation id="6062360702481658777">మీరు <ph name="LOGOUT_TIME_LEFT" />లో ఆటోమేటిక్‌గా సైన్ అవుట్ చేయబడతారు.</translation>
 <translation id="6064463340679478396">ఈ ఫైల్‌ను ఉపయోగించడం పూర్తయింది</translation>
 <translation id="6073451960410192870">రికార్డ్ చేయడం ఆపివేయి</translation>
+<translation id="6074087755403037157">బీటా ఛానెల్</translation>
 <translation id="6099678161144790572">గత నెలలో ఎడిట్ చేశారు</translation>
 <translation id="6103838137565245112">సిస్టమ్</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> స్పీచ్ ఫైల్‌లు డౌన్‌లోడ్ చేయబడ్డాయి</translation>
@@ -1227,6 +1230,7 @@
 <translation id="8200772114523450471">మ‌ళ్లీ ప్రారంభించు</translation>
 <translation id="8203795194971602413">కుడి క్లిక్</translation>
 <translation id="8209010265547628927">రీసెట్ చేయండి</translation>
+<translation id="8214996719228530800">కెనరీ ఛానెల్</translation>
 <translation id="8219451629189078428">ఈ సమయంలో మీ Chromebook ఆన్‌లో ఉండాలి, పవర్‌కు కనెక్ట్ అయ్యి ఉండాలి. మీ Chromebook, పవర్ అవుట్‌లెట్ రెండింటికీ ఛార్జర్ లేదా అడాప్టర్ కేబుల్‌లు పూర్తిగా ప్లగ్-ఇన్ అయ్యాయని నిర్ధారించుకోండి. మీ Chromebookను ఆఫ్ చేయవద్దు.</translation>
 <translation id="8236042855478648955">విరామ సమయం</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />, ఫోన్ బ్యాటరీ <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index b5aab7e..0c60c5458 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -152,6 +152,7 @@
 <translation id="1771761307086386028">เลื่อนไปทางขวา</translation>
 <translation id="1774796056689732716">ปฏิทิน, <ph name="CURRENT_MONTH_YEAR" />, เลือกวันที่ <ph name="DATE" /> อยู่</translation>
 <translation id="1787955149152357925">ปิด</translation>
+<translation id="1797271123677381264">ลืมรหัสผ่าน</translation>
 <translation id="181103072419391116">ความแรงสัญญาณ <ph name="SIGNAL_STRENGTH" />, จัดการโดยผู้ดูแลระบบ</translation>
 <translation id="1812997170047690955">รายการที่อยู่ในหน้าจอของฉัน</translation>
 <translation id="1823873187264960516">อีเทอร์เน็ต: <ph name="ADDRESS" /></translation>
@@ -609,6 +610,7 @@
 <translation id="4479639480957787382">อีเทอร์เน็ต</translation>
 <translation id="4481530544597605423">อุปกรณ์ที่ไม่ได้จับคู่</translation>
 <translation id="4505050298327493054">เดสก์ที่ใช้งานอยู่</translation>
+<translation id="450584155212756404">เวอร์ชันที่กำลังพัฒนา</translation>
 <translation id="4513946894732546136">ข้อเสนอแนะ</translation>
 <translation id="4518404433291145981">ก่อนอื่นให้ปลดล็อกโทรศัพท์เพื่อปลดล็อก Chromebook</translation>
 <translation id="4527045527269911712">อุปกรณ์บลูทูธ "<ph name="DEVICE_NAME" />" ต้องการสิทธิ์ในการจับคู่</translation>
@@ -876,6 +878,7 @@
 <translation id="6062360702481658777">คุณจะออกจากระบบโดยอัตโนมัติใน <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="6064463340679478396">ใช้ไฟล์เสร็จแล้ว</translation>
 <translation id="6073451960410192870">หยุดบันทึก</translation>
+<translation id="6074087755403037157">เวอร์ชันเบต้า</translation>
 <translation id="6099678161144790572">แก้ไขในเดือนที่ผ่านมา</translation>
 <translation id="6103838137565245112">ระบบ</translation>
 <translation id="6114505516289286752">ดาวน์โหลดไฟล์คำพูดภาษา<ph name="LANGUAGE" />แล้ว</translation>
@@ -1226,6 +1229,7 @@
 <translation id="8200772114523450471">ทำต่อ</translation>
 <translation id="8203795194971602413">คลิกขวา</translation>
 <translation id="8209010265547628927">รีเซ็ต</translation>
+<translation id="8214996719228530800">เวอร์ชัน Canary</translation>
 <translation id="8219451629189078428">คุณต้องเปิด Chromebook และเสียบปลั๊กไว้ตลอดในระหว่างนี้ ตรวจดูว่าได้เสียบสายที่ชาร์จและอะแดปเตอร์ไว้แน่นดีแล้ว ทั้งกับ Chromebook และเต้ารับ และอย่าปิด Chromebook</translation>
 <translation id="8236042855478648955">ได้เวลาพักแล้ว</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, ความแรงสัญญาณ <ph name="SIGNAL_STRENGTH" />, แบตเตอรี่โทรศัพท์ <ph name="BATTERY_STATUS" /></translation>
diff --git a/ash/webui/telemetry_extension_ui/services/BUILD.gn b/ash/webui/telemetry_extension_ui/services/BUILD.gn
index ac92009b..5e69a3ce 100644
--- a/ash/webui/telemetry_extension_ui/services/BUILD.gn
+++ b/ash/webui/telemetry_extension_ui/services/BUILD.gn
@@ -39,6 +39,21 @@
   ]
 }
 
+source_set("telemetry_services_test") {
+  testonly = true
+  sources = [
+    "fake_diagnostics_service.cc",
+    "fake_diagnostics_service.h",
+  ]
+
+  deps = [
+    ":telemetry_services",
+    "//ash/webui/telemetry_extension_ui/mojom",
+    "//base",
+    "//chrome/test:test_support",
+  ]
+}
+
 source_set("unit_tests") {
   testonly = true
   sources = [
diff --git a/ash/webui/telemetry_extension_ui/services/diagnostics_service.cc b/ash/webui/telemetry_extension_ui/services/diagnostics_service.cc
index d65289f1..ea1126b 100644
--- a/ash/webui/telemetry_extension_ui/services/diagnostics_service.cc
+++ b/ash/webui/telemetry_extension_ui/services/diagnostics_service.cc
@@ -4,17 +4,43 @@
 
 #include "ash/webui/telemetry_extension_ui/services/diagnostics_service.h"
 
+#include <memory>
 #include <utility>
 #include <vector>
 
+#include "ash/webui/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"
 #include "ash/webui/telemetry_extension_ui/services/diagnostics_service_converters.h"
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 #include "chromeos/ash/services/cros_healthd/public/cpp/service_connection.h"
 #include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_diagnostics.mojom.h"
 #include "chromeos/ash/services/cros_healthd/public/mojom/nullable_primitives.mojom.h"
 
 namespace ash {
 
+// static
+DiagnosticsService::Factory* DiagnosticsService::Factory::test_factory_ =
+    nullptr;
+
+// static
+std::unique_ptr<health::mojom::DiagnosticsService>
+DiagnosticsService::Factory::Create(
+    mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver) {
+  if (test_factory_) {
+    return test_factory_->CreateInstance(std::move(receiver));
+  }
+
+  return base::WrapUnique<DiagnosticsService>(
+      new DiagnosticsService(std::move(receiver)));
+}
+
+// static
+void DiagnosticsService::Factory::SetForTesting(Factory* test_factory) {
+  test_factory_ = test_factory;
+}
+
+DiagnosticsService::Factory::~Factory() = default;
+
 DiagnosticsService::DiagnosticsService(
     mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver)
     : receiver_(this, std::move(receiver)) {}
diff --git a/ash/webui/telemetry_extension_ui/services/diagnostics_service.h b/ash/webui/telemetry_extension_ui/services/diagnostics_service.h
index 26207f2..659fae0 100644
--- a/ash/webui/telemetry_extension_ui/services/diagnostics_service.h
+++ b/ash/webui/telemetry_extension_ui/services/diagnostics_service.h
@@ -5,6 +5,8 @@
 #ifndef ASH_WEBUI_TELEMETRY_EXTENSION_UI_SERVICES_DIAGNOSTICS_SERVICE_H_
 #define ASH_WEBUI_TELEMETRY_EXTENSION_UI_SERVICES_DIAGNOSTICS_SERVICE_H_
 
+#include <memory>
+
 #include "ash/webui/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"
 #include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -20,13 +22,30 @@
 
 class DiagnosticsService : public health::mojom::DiagnosticsService {
  public:
-  explicit DiagnosticsService(
-      mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver);
+  class Factory {
+   public:
+    static std::unique_ptr<health::mojom::DiagnosticsService> Create(
+        mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver);
+
+    static void SetForTesting(Factory* test_factory);
+
+    virtual ~Factory();
+
+   protected:
+    virtual std::unique_ptr<health::mojom::DiagnosticsService> CreateInstance(
+        mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver) = 0;
+
+   private:
+    static Factory* test_factory_;
+  };
+
   DiagnosticsService(const DiagnosticsService&) = delete;
   DiagnosticsService& operator=(const DiagnosticsService&) = delete;
   ~DiagnosticsService() override;
 
  private:
+  explicit DiagnosticsService(
+      mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver);
   // Ensures that |service_| created and connected to the
   // CrosHealthdDiagnosticsService.
   cros_healthd::mojom::CrosHealthdDiagnosticsService* GetService();
diff --git a/ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.cc b/ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.cc
new file mode 100644
index 0000000..26783c5
--- /dev/null
+++ b/ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.cc
@@ -0,0 +1,304 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "ash/webui/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"
+#include "ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.h"
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/values.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace ash {
+
+FakeDiagnosticsService::Factory::Factory() = default;
+FakeDiagnosticsService::Factory::~Factory() = default;
+
+void FakeDiagnosticsService::Factory::SetCreateInstanceResponse(
+    std::unique_ptr<FakeDiagnosticsService> fake_service) {
+  fake_service_ = std::move(fake_service);
+}
+
+std::unique_ptr<health::mojom::DiagnosticsService>
+FakeDiagnosticsService::Factory::CreateInstance(
+    mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver) {
+  DCHECK(fake_service_);
+  fake_service_->BindPendingReceiver(std::move(receiver));
+  return std::move(fake_service_);
+}
+
+FakeDiagnosticsService::FakeDiagnosticsService() : receiver_(this) {}
+
+FakeDiagnosticsService::~FakeDiagnosticsService() {
+  // Test if the previously set expectations are met.
+  EXPECT_EQ(actual_passed_parameters_, expected_passed_parameters_);
+  EXPECT_EQ(actual_called_routine_, expected_called_routine_);
+}
+
+void FakeDiagnosticsService::GetAvailableRoutines(
+    GetAvailableRoutinesCallback callback) {
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), available_routines_response_));
+}
+
+void FakeDiagnosticsService::GetRoutineUpdate(
+    int32_t id,
+    health::mojom::DiagnosticRoutineCommandEnum command,
+    bool include_output,
+    GetRoutineUpdateCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("id", id);
+  actual_passed_parameters_.Set("command", static_cast<int32_t>(command));
+  actual_passed_parameters_.Set("include_output", include_output);
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), routine_update_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunBatteryCapacityRoutine(
+    RunBatteryCapacityRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_called_routine_ =
+      health::mojom::DiagnosticRoutineEnum::kBatteryCapacity;
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunBatteryHealthRoutine(
+    RunBatteryHealthRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kBatteryHealth;
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunSmartctlCheckRoutine(
+    RunSmartctlCheckRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kSmartctlCheck;
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunAcPowerRoutine(
+    health::mojom::AcPowerStatusEnum expected_status,
+    const absl::optional<std::string>& expected_power_type,
+    RunAcPowerRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("expected_status",
+                                static_cast<int32_t>(expected_status));
+  if (expected_power_type.has_value()) {
+    actual_passed_parameters_.Set("expected_power_type",
+                                  expected_power_type.value());
+  }
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kAcPower;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunCpuCacheRoutine(
+    uint32_t length_seconds,
+    RunCpuCacheRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kCpuCache;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunCpuStressRoutine(
+    uint32_t length_seconds,
+    RunCpuStressRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kCpuStress;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunFloatingPointAccuracyRoutine(
+    uint32_t length_seconds,
+    RunFloatingPointAccuracyRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+
+  actual_called_routine_ =
+      health::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunNvmeWearLevelRoutine(
+    uint32_t wear_level_threshold,
+    RunNvmeWearLevelRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("wear_level_threshold",
+                                static_cast<int32_t>(wear_level_threshold));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kNvmeWearLevel;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunNvmeSelfTestRoutine(
+    health::mojom::NvmeSelfTestTypeEnum nvme_self_test_type,
+    RunNvmeSelfTestRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("nvme_self_test_type",
+                                static_cast<int32_t>(nvme_self_test_type));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kNvmeSelfTest;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunDiskReadRoutine(
+    health::mojom::DiskReadRoutineTypeEnum type,
+    uint32_t length_seconds,
+    uint32_t file_size_mb,
+    RunDiskReadRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("type", static_cast<int32_t>(type));
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+  actual_passed_parameters_.Set("file_size_mb",
+                                static_cast<int32_t>(file_size_mb));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kDiskRead;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunPrimeSearchRoutine(
+    uint32_t length_seconds,
+    RunPrimeSearchRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kPrimeSearch;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunBatteryDischargeRoutine(
+    uint32_t length_seconds,
+    uint32_t maximum_discharge_percent_allowed,
+    RunBatteryDischargeRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+  actual_passed_parameters_.Set(
+      "maximum_discharge_percent_allowed",
+      static_cast<int32_t>(maximum_discharge_percent_allowed));
+
+  actual_called_routine_ =
+      health::mojom::DiagnosticRoutineEnum::kBatteryDischarge;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunBatteryChargeRoutine(
+    uint32_t length_seconds,
+    uint32_t minimum_charge_percent_required,
+    RunBatteryChargeRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_passed_parameters_.Set("length_seconds",
+                                static_cast<int32_t>(length_seconds));
+  actual_passed_parameters_.Set(
+      "minimum_charge_percent_required",
+      static_cast<int32_t>(minimum_charge_percent_required));
+
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kBatteryCharge;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunMemoryRoutine(
+    RunMemoryRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_called_routine_ = health::mojom::DiagnosticRoutineEnum::kMemory;
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::RunLanConnectivityRoutine(
+    RunLanConnectivityRoutineCallback callback) {
+  actual_passed_parameters_.clear();
+  actual_called_routine_ =
+      health::mojom::DiagnosticRoutineEnum::kLanConnectivity;
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), run_routine_response_->Clone()));
+}
+
+void FakeDiagnosticsService::SetRunRoutineResponse(
+    health::mojom::RunRoutineResponsePtr response) {
+  run_routine_response_ = std::move(response);
+}
+
+void FakeDiagnosticsService::SetAvailableRoutines(
+    std::vector<health::mojom::DiagnosticRoutineEnum> available_routines) {
+  available_routines_response_ = available_routines;
+}
+
+void FakeDiagnosticsService::SetRoutineUpdateResponse(
+    health::mojom::RoutineUpdatePtr routine_update) {
+  routine_update_response_ = std::move(routine_update);
+}
+
+void FakeDiagnosticsService::SetExpectedLastPassedParameters(
+    base::Value::Dict expected_passed_parameter) {
+  expected_passed_parameters_ = std::move(expected_passed_parameter);
+}
+
+void FakeDiagnosticsService::SetExpectedLastCalledRoutine(
+    health::mojom::DiagnosticRoutineEnum expected_called_routine) {
+  expected_called_routine_ = expected_called_routine;
+}
+
+void FakeDiagnosticsService::BindPendingReceiver(
+    mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver) {
+  receiver_.Bind(std::move(receiver));
+}
+
+}  // namespace ash
diff --git a/ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.h b/ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.h
new file mode 100644
index 0000000..9a3927c
--- /dev/null
+++ b/ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.h
@@ -0,0 +1,141 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_WEBUI_TELEMETRY_EXTENSION_UI_SERVICES_FAKE_DIAGNOSTICS_SERVICE_H_
+#define ASH_WEBUI_TELEMETRY_EXTENSION_UI_SERVICES_FAKE_DIAGNOSTICS_SERVICE_H_
+
+#include <memory>
+#include <vector>
+
+#include "ash/webui/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"
+#include "ash/webui/telemetry_extension_ui/services/diagnostics_service.h"
+#include "base/values.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace ash {
+
+class FakeDiagnosticsService : public health::mojom::DiagnosticsService {
+ public:
+  class Factory : public ash::DiagnosticsService::Factory {
+   public:
+    Factory();
+    ~Factory() override;
+
+    void SetCreateInstanceResponse(
+        std::unique_ptr<FakeDiagnosticsService> fake_service);
+
+   protected:
+    // DiagnosticsService::Factory:
+    std::unique_ptr<health::mojom::DiagnosticsService> CreateInstance(
+        mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver)
+        override;
+
+   private:
+    std::unique_ptr<FakeDiagnosticsService> fake_service_;
+  };
+
+  FakeDiagnosticsService();
+  FakeDiagnosticsService(const FakeDiagnosticsService&) = delete;
+  FakeDiagnosticsService& operator=(const FakeDiagnosticsService&) = delete;
+  ~FakeDiagnosticsService() override;
+
+  // health::mojom::DiagnosticsService overrides.
+  void GetAvailableRoutines(GetAvailableRoutinesCallback callback) override;
+  void GetRoutineUpdate(int32_t id,
+                        health::mojom::DiagnosticRoutineCommandEnum command,
+                        bool include_output,
+                        GetRoutineUpdateCallback callback) override;
+  void RunBatteryCapacityRoutine(
+      RunBatteryCapacityRoutineCallback callback) override;
+  void RunBatteryHealthRoutine(
+      RunBatteryHealthRoutineCallback callback) override;
+  void RunSmartctlCheckRoutine(
+      RunSmartctlCheckRoutineCallback callback) override;
+  void RunAcPowerRoutine(health::mojom::AcPowerStatusEnum expected_status,
+                         const absl::optional<std::string>& expected_power_type,
+                         RunAcPowerRoutineCallback callback) override;
+  void RunCpuCacheRoutine(uint32_t length_seconds,
+                          RunCpuCacheRoutineCallback callback) override;
+  void RunCpuStressRoutine(uint32_t length_seconds,
+                           RunCpuStressRoutineCallback callback) override;
+  void RunFloatingPointAccuracyRoutine(
+      uint32_t length_seconds,
+      RunFloatingPointAccuracyRoutineCallback callback) override;
+  void RunNvmeWearLevelRoutine(
+      uint32_t wear_level_threshold,
+      RunNvmeWearLevelRoutineCallback callback) override;
+  void RunNvmeSelfTestRoutine(
+      health::mojom::NvmeSelfTestTypeEnum nvme_self_test_type,
+      RunNvmeSelfTestRoutineCallback callback) override;
+  void RunDiskReadRoutine(health::mojom::DiskReadRoutineTypeEnum type,
+                          uint32_t length_seconds,
+                          uint32_t file_size_mb,
+                          RunDiskReadRoutineCallback callback) override;
+  void RunPrimeSearchRoutine(uint32_t length_seconds,
+                             RunPrimeSearchRoutineCallback callback) override;
+  void RunBatteryDischargeRoutine(
+      uint32_t length_seconds,
+      uint32_t maximum_discharge_percent_allowed,
+      RunBatteryDischargeRoutineCallback callback) override;
+  void RunBatteryChargeRoutine(
+      uint32_t length_seconds,
+      uint32_t minimum_charge_percent_required,
+      RunBatteryChargeRoutineCallback callback) override;
+  void RunMemoryRoutine(RunMemoryRoutineCallback callback) override;
+  void RunLanConnectivityRoutine(
+      RunLanConnectivityRoutineCallback callback) override;
+
+  // Sets the return value for |Run*Routine|.
+  void SetRunRoutineResponse(
+      health::mojom::RunRoutineResponsePtr expected_response);
+
+  // Sets the return value for |GetAvailableRoutines|.
+  void SetAvailableRoutines(
+      std::vector<health::mojom::DiagnosticRoutineEnum> available_routines);
+
+  // Sets the return value for |GetRoutineUpdate|.
+  void SetRoutineUpdateResponse(health::mojom::RoutineUpdatePtr routine_update);
+
+  // Set expectation about the parameter that is passed to a call of
+  // |Run*Routine| or |GetAvailableRoutines|.
+  void SetExpectedLastPassedParameters(
+      base::Value::Dict expected_passed_parameter);
+
+  // Set expectation about the type of routine that is called.
+  void SetExpectedLastCalledRoutine(
+      health::mojom::DiagnosticRoutineEnum expected_called_routine);
+
+ private:
+  void BindPendingReceiver(
+      mojo::PendingReceiver<health::mojom::DiagnosticsService> receiver);
+
+  mojo::Receiver<health::mojom::DiagnosticsService> receiver_;
+
+  // Response for a call to |Run*Routine|.
+  health::mojom::RunRoutineResponsePtr run_routine_response_;
+
+  // Response for a call to |GetAvailableRoutines|.
+  std::vector<health::mojom::DiagnosticRoutineEnum>
+      available_routines_response_;
+
+  // Response for a call to |GetRoutineUpdate|.
+  health::mojom::RoutineUpdatePtr routine_update_response_;
+
+  // Expectation of the passed parameters to a |Run*Routine| call.
+  base::Value::Dict expected_passed_parameters_;
+  // Actually passed parameter.
+  base::Value::Dict actual_passed_parameters_;
+
+  // Expectation of the called routine.
+  health::mojom::DiagnosticRoutineEnum expected_called_routine_{
+      health::mojom::DiagnosticRoutineEnum::kUnknown};
+  // Actually called routine.
+  health::mojom::DiagnosticRoutineEnum actual_called_routine_{
+      health::mojom::DiagnosticRoutineEnum::kUnknown};
+};
+}  // namespace ash
+
+#endif  // ASH_WEBUI_TELEMETRY_EXTENSION_UI_SERVICES_FAKE_DIAGNOSTICS_SERVICE_H_
diff --git a/base/allocator/partition_alloc_support.cc b/base/allocator/partition_alloc_support.cc
index eba11bb..ce38aea3e 100644
--- a/base/allocator/partition_alloc_support.cc
+++ b/base/allocator/partition_alloc_support.cc
@@ -85,10 +85,11 @@
 // Inject TRACE_EVENT_BEGIN/END, TRACE_COUNTER1, and UmaHistogramTimes.
 class StatsReporterImpl final : public partition_alloc::StatsReporter {
  public:
-  void ReportTraceEvent(partition_alloc::internal::StatsCollector::ScannerId id,
-                        [[maybe_unused]] uint32_t tid,
-                        int64_t start_time_ticks_internal_value,
-                        int64_t end_time_ticks_internal_value) override {
+  void ReportTraceEvent(
+      partition_alloc::internal::StatsCollector::ScannerId id,
+      [[maybe_unused]] partition_alloc::internal::base::PlatformThreadId tid,
+      int64_t start_time_ticks_internal_value,
+      int64_t end_time_ticks_internal_value) override {
 #if BUILDFLAG(ENABLE_BASE_TRACING)
     // TRACE_EVENT_* macros below drop most parameters when tracing is
     // disabled at compile time.
@@ -104,10 +105,11 @@
 #endif  // BUILDFLAG(ENABLE_BASE_TRACING)
   }
 
-  void ReportTraceEvent(partition_alloc::internal::StatsCollector::MutatorId id,
-                        [[maybe_unused]] uint32_t tid,
-                        int64_t start_time_ticks_internal_value,
-                        int64_t end_time_ticks_internal_value) override {
+  void ReportTraceEvent(
+      partition_alloc::internal::StatsCollector::MutatorId id,
+      [[maybe_unused]] partition_alloc::internal::base::PlatformThreadId tid,
+      int64_t start_time_ticks_internal_value,
+      int64_t end_time_ticks_internal_value) override {
 #if BUILDFLAG(ENABLE_BASE_TRACING)
     // TRACE_EVENT_* macros below drop most parameters when tracing is
     // disabled at compile time.
diff --git a/base/allocator/partition_allocator/OWNERS b/base/allocator/partition_allocator/OWNERS
index 1b3b57b4..dd2d307 100644
--- a/base/allocator/partition_allocator/OWNERS
+++ b/base/allocator/partition_allocator/OWNERS
@@ -1,4 +1,4 @@
 bartekn@chromium.org
 haraken@chromium.org
 lizeb@chromium.org
-tasak@chromium.org
+tasak@google.com
diff --git a/base/allocator/partition_allocator/starscan/stats_reporter.h b/base/allocator/partition_allocator/starscan/stats_reporter.h
index 1a9dc91..2f61684f 100644
--- a/base/allocator/partition_allocator/starscan/stats_reporter.h
+++ b/base/allocator/partition_allocator/starscan/stats_reporter.h
@@ -5,24 +5,22 @@
 #ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_STARSCAN_STATS_REPORTER_H_
 #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_STARSCAN_STATS_REPORTER_H_
 
+#include "base/allocator/partition_allocator/partition_alloc_base/threading/platform_thread.h"
 #include "base/allocator/partition_allocator/starscan/stats_collector.h"
 
 namespace partition_alloc {
 
-static_assert(sizeof(uint32_t) >= sizeof(internal::base::PlatformThreadId),
-              "sizeof(tid) must be larger than sizeof(PlatformThreadId)");
-
 // StatsReporter is a wrapper to invoke TRACE_EVENT_BEGIN/END, TRACE_COUNTER1,
 // and UmaHistogramTimes. It is used to just remove trace_log and uma
 // dependencies from partition allocator.
 class StatsReporter {
  public:
   virtual void ReportTraceEvent(internal::StatsCollector::ScannerId id,
-                                uint32_t tid,
+                                internal::base::PlatformThreadId tid,
                                 int64_t start_time_ticks_internal_value,
                                 int64_t end_time_ticks_internal_value) {}
   virtual void ReportTraceEvent(internal::StatsCollector::MutatorId id,
-                                uint32_t tid,
+                                internal::base::PlatformThreadId tid,
                                 int64_t start_time_ticks_internal_value,
                                 int64_t end_time_ticks_internal_value) {}
 
diff --git a/base/android/jni_generator/BUILD.gn b/base/android/jni_generator/BUILD.gn
index 67202867..eb433b2 100644
--- a/base/android/jni_generator/BUILD.gn
+++ b/base/android/jni_generator/BUILD.gn
@@ -99,6 +99,5 @@
     "//third_party/android_deps:com_google_auto_service_auto_service_annotations_java",
     "//third_party/android_deps:com_google_guava_guava_java",
     "//third_party/android_deps:com_squareup_javapoet_java",
-    "//third_party/android_deps:javax_annotation_jsr250_api_java",
   ]
 }
diff --git a/base/android/jni_generator/PRESUBMIT.py b/base/android/jni_generator/PRESUBMIT.py
index f2aa0cf8..6e3c886 100644
--- a/base/android/jni_generator/PRESUBMIT.py
+++ b/base/android/jni_generator/PRESUBMIT.py
@@ -20,15 +20,17 @@
       'PYTHONDONTWRITEBYTECODE': '1',
   })
 
-  return input_api.canned_checks.RunUnitTests(
-      input_api,
-      output_api,
-      unit_tests=[
-          input_api.os_path.join(base_android_jni_generator_dir,
-                                 'jni_generator_tests.py')
-      ],
-      env=env,
-  )
+  return input_api.RunTests(
+      input_api.canned_checks.GetUnitTests(
+          input_api,
+          output_api,
+          run_on_python2=False,
+          unit_tests=[
+              input_api.os_path.join(base_android_jni_generator_dir,
+                                     'jni_generator_tests.py')
+          ],
+          env=env,
+      ))
 
 
 def CheckChangeOnUpload(input_api, output_api):
diff --git a/base/android/jni_generator/java/src/org/chromium/jni_generator/JniProcessor.java b/base/android/jni_generator/java/src/org/chromium/jni_generator/JniProcessor.java
index b3c9c67..02b459f 100644
--- a/base/android/jni_generator/java/src/org/chromium/jni_generator/JniProcessor.java
+++ b/base/android/jni_generator/java/src/org/chromium/jni_generator/JniProcessor.java
@@ -30,7 +30,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.annotation.Generated;
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.Processor;
 import javax.annotation.processing.RoundEnvironment;
@@ -108,8 +107,6 @@
 
         // State of mNativesBuilder needs to be preserved between processing rounds.
         mNativesBuilder = TypeSpec.classBuilder(GEN_JNI_CLASS_NAME)
-                                  .addAnnotation(createAnnotationWithValue(
-                                          Generated.class, JniProcessor.class.getCanonicalName()))
                                   .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
                                   .addField(testingFlagBuilder.build())
                                   .addField(throwFlagBuilder.build());
@@ -303,10 +300,8 @@
             TypeElement nativeInterface, Map<String, MethodSpec> methodMap) {
         // The wrapper class builder.
         TypeName nativeInterfaceType = TypeName.get(nativeInterface.asType());
-        TypeSpec.Builder builder = TypeSpec.classBuilder(name)
-                                           .addSuperinterface(nativeInterfaceType)
-                                           .addAnnotation(createAnnotationWithValue(Generated.class,
-                                                   JniProcessor.class.getCanonicalName()));
+        TypeSpec.Builder builder =
+                TypeSpec.classBuilder(name).addSuperinterface(nativeInterfaceType);
         if (isPublic) {
             builder.addModifiers(Modifier.PUBLIC);
         }
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
index 1997061..fa9b8d1b 100755
--- a/base/android/jni_generator/jni_generator_tests.py
+++ b/base/android/jni_generator/jni_generator_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
@@ -11,8 +11,6 @@
 file.
 """
 
-from __future__ import print_function
-
 import collections
 import difflib
 import inspect
diff --git a/base/cpu.cc b/base/cpu.cc
index 98280f4e..f488148 100644
--- a/base/cpu.cc
+++ b/base/cpu.cc
@@ -21,6 +21,7 @@
     BUILDFLAG(IS_AIX)
 #include "base/containers/flat_set.h"
 #include "base/files/file_util.h"
+#include "base/format_macros.h"
 #include "base/notreached.h"
 #include "base/process/internal_linux.h"
 #include "base/strings/string_number_conversions.h"
@@ -392,25 +393,26 @@
 namespace {
 
 constexpr char kTimeInStatePath[] =
-    "/sys/devices/system/cpu/cpu%d/cpufreq/stats/time_in_state";
+    "/sys/devices/system/cpu/cpu%" PRIuS "/cpufreq/stats/time_in_state";
 constexpr char kPhysicalPackageIdPath[] =
-    "/sys/devices/system/cpu/cpu%d/topology/physical_package_id";
+    "/sys/devices/system/cpu/cpu%" PRIuS "/topology/physical_package_id";
 constexpr char kCoreIdleStateTimePath[] =
-    "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/time";
+    "/sys/devices/system/cpu/cpu%" PRIuS "/cpuidle/state%d/time";
 
 bool SupportsTimeInState() {
   // Reading from time_in_state doesn't block (it amounts to reading a struct
   // from the cpufreq-stats kernel driver).
   ThreadRestrictions::ScopedAllowIO allow_io;
   // Check if the time_in_state path for the first core is readable.
-  FilePath time_in_state_path(StringPrintf(kTimeInStatePath, /*core_index=*/0));
+  FilePath time_in_state_path(
+      StringPrintf(kTimeInStatePath, /*core_index=*/size_t{0}));
   ScopedFILE file_stream(OpenFile(time_in_state_path, "rb"));
   return static_cast<bool>(file_stream);
 }
 
 bool ParseTimeInState(const std::string& content,
                       CPU::CoreType core_type,
-                      uint32_t core_index,
+                      size_t core_index,
                       CPU::TimeInState& time_in_state) {
   const char* begin = content.data();
   size_t max_pos = content.size() - 1;
@@ -429,8 +431,8 @@
     // Each line should have two integer fields, frequency (kHz) and time (in
     // jiffies), separated by a space, e.g. "2419200 132".
     uint64_t frequency;
-    uint64_t time;
-    int matches = sscanf(begin + pos, "%" PRIu64 " %" PRIu64 "\n%n", &frequency,
+    int64_t time;
+    int matches = sscanf(begin + pos, "%" PRIu64 " %" PRId64 "\n%n", &frequency,
                          &time, &num_chars);
     if (matches != 2)
       return false;
@@ -444,7 +446,7 @@
 
     // Advance line.
     DCHECK_GT(num_chars, 0);
-    pos += num_chars;
+    pos += static_cast<size_t>(num_chars);
   }
 
   return true;
@@ -454,8 +456,8 @@
   // Reading from the cpuidle driver doesn't block.
   ThreadRestrictions::ScopedAllowIO allow_io;
   // Check if the path for the idle time in state 0 for core 0 is readable.
-  FilePath idle_state0_path(
-      StringPrintf(kCoreIdleStateTimePath, /*core_index=*/0, /*idle_state=*/0));
+  FilePath idle_state0_path(StringPrintf(
+      kCoreIdleStateTimePath, /*core_index=*/size_t{0}, /*idle_state=*/0));
   ScopedFILE file_stream(OpenFile(idle_state0_path, "rb"));
   return static_cast<bool>(file_stream);
 }
@@ -464,8 +466,8 @@
   // Try to guess the CPU architecture and cores of each cluster by comparing
   // the maximum frequencies of the available (online and offline) cores.
   const char kCPUMaxFreqPath[] =
-      "/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq";
-  int num_cpus = SysInfo::NumberOfProcessors();
+      "/sys/devices/system/cpu/cpu%" PRIuS "/cpufreq/cpuinfo_max_freq";
+  size_t num_cpus = static_cast<size_t>(SysInfo::NumberOfProcessors());
   std::vector<CPU::CoreType> core_index_to_type(num_cpus,
                                                 CPU::CoreType::kUnknown);
 
@@ -476,7 +478,7 @@
     // Reading from cpuinfo_max_freq doesn't block (it amounts to reading a
     // struct field from the cpufreq kernel driver).
     ThreadRestrictions::ScopedAllowIO allow_io;
-    for (int core_index = 0; core_index < num_cpus; ++core_index) {
+    for (size_t core_index = 0; core_index < num_cpus; ++core_index) {
       std::string content;
       uint32_t frequency_khz = 0;
       auto path = StringPrintf(kCPUMaxFreqPath, core_index);
@@ -491,7 +493,7 @@
 
   size_t num_frequencies = frequencies_mhz.size();
 
-  for (int core_index = 0; core_index < num_cpus; ++core_index) {
+  for (size_t core_index = 0; core_index < num_cpus; ++core_index) {
     uint32_t core_frequency_mhz = max_core_frequencies_mhz[core_index];
 
     CPU::CoreType core_type = CPU::CoreType::kOther;
@@ -501,7 +503,7 @@
       auto it = frequencies_mhz.find(core_frequency_mhz);
       if (it != frequencies_mhz.end()) {
         // flat_set is sorted.
-        size_t frequency_index = it - frequencies_mhz.begin();
+        ptrdiff_t frequency_index = it - frequencies_mhz.begin();
         switch (frequency_index) {
           case 0:
             core_type = num_frequencies == 2u
@@ -550,10 +552,11 @@
 
   // time_in_state is reported per cluster. Identify the first cores of each
   // cluster.
-  static NoDestructor<std::vector<int>> kFirstCoresIndexes([]() {
-    std::vector<int> first_cores;
+  static NoDestructor<std::vector<size_t>> kFirstCoresIndexes([]() {
+    std::vector<size_t> first_cores;
     int last_core_package_id = 0;
-    for (int core_index = 0; core_index < SysInfo::NumberOfProcessors();
+    for (size_t core_index = 0;
+         core_index < static_cast<size_t>(SysInfo::NumberOfProcessors());
          core_index++) {
       // Reading from physical_package_id doesn't block (it amounts to reading a
       // struct field from the kernel).
@@ -563,12 +566,12 @@
           StringPrintf(kPhysicalPackageIdPath, core_index));
       std::string package_id_str;
       if (!ReadFileToString(package_id_path, &package_id_str))
-        return std::vector<int>();
+        return std::vector<size_t>();
       int package_id;
       base::StringPiece trimmed = base::TrimWhitespaceASCII(
           package_id_str, base::TrimPositions::TRIM_ALL);
       if (!base::StringToInt(trimmed, &package_id))
-        return std::vector<int>();
+        return std::vector<size_t>();
 
       if (last_core_package_id != package_id || core_index == 0)
         first_cores.push_back(core_index);
@@ -587,7 +590,7 @@
 
   // Read the time_in_state for each cluster from the /sys directory of the
   // cluster's first core.
-  for (int cluster_core_index : *kFirstCoresIndexes) {
+  for (size_t cluster_core_index : *kFirstCoresIndexes) {
     FilePath time_in_state_path(
         StringPrintf(kTimeInStatePath, cluster_core_index));
 
@@ -616,10 +619,10 @@
   // Reading from the cpuidle driver doesn't block.
   ThreadRestrictions::ScopedAllowIO allow_io;
 
-  int num_cpus = SysInfo::NumberOfProcessors();
+  size_t num_cpus = static_cast<size_t>(SysInfo::NumberOfProcessors());
 
   bool success = false;
-  for (int core_index = 0; core_index < num_cpus; ++core_index) {
+  for (size_t core_index = 0; core_index < num_cpus; ++core_index) {
     std::string content;
     TimeDelta idle_time;
 
diff --git a/base/cpu.h b/base/cpu.h
index 44e07988..75d6d80 100644
--- a/base/cpu.h
+++ b/base/cpu.h
@@ -130,7 +130,7 @@
 
   struct TimeInStateEntry {
     CPU::CoreType core_type;      // type of the cores in this cluster.
-    uint32_t cluster_core_index;  // index of the first core in the cluster.
+    size_t cluster_core_index;    // index of the first core in the cluster.
     uint64_t core_frequency_khz;
     TimeDelta cumulative_time;
   };
diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc
index ef5e47ad..e96047e5 100644
--- a/base/debug/debugger_posix.cc
+++ b/base/debug/debugger_posix.cc
@@ -170,7 +170,7 @@
   if (num_read <= 0)
     return Process();
 
-  StringPiece status(buf, num_read);
+  StringPiece status(buf, static_cast<size_t>(num_read));
   StringPiece tracer("TracerPid:\t");
 
   StringPiece::size_type pid_index = status.find(tracer);
diff --git a/base/debug/dwarf_line_no.cc b/base/debug/dwarf_line_no.cc
index c47e879..e4a38f76 100644
--- a/base/debug/dwarf_line_no.cc
+++ b/base/debug/dwarf_line_no.cc
@@ -32,7 +32,7 @@
 // numbers. We can't set these numbers too big because they affect the size of
 // ProgramInfo which is allocated in the stack.
 constexpr int kMaxDirectories = 128;
-constexpr int kMaxFilenames = 512;
+constexpr size_t kMaxFilenames = 512;
 
 // DWARF-4 line number program header, section 6.2.4
 struct ProgramInfo {
@@ -52,7 +52,7 @@
   // Store the directories as offsets.
   int num_directories = 1;
   uint64_t directory_offsets[kMaxDirectories];
-  int directory_sizes[kMaxDirectories];
+  uint64_t directory_sizes[kMaxDirectories];
 
   // Store the file number table offsets.
   mutable unsigned int num_filenames = 1;
@@ -89,15 +89,15 @@
 
   // Identifies the source file relating to the address in the DWARF File name
   // table.
-  unsigned int file = 0;
+  uint64_t file = 0;
 
   // Identifies the line number. Starts at 1. Can become 0 if instruction does
   // not match any line in the file.
-  unsigned int line = 1;
+  uint64_t line = 1;
 
   // Identifies the column within the source line. Starts at 1 though "0"
   // also means "left edge" of the line.
-  unsigned int column = 0;
+  uint64_t column = 0;
 
   // Boolean determining if this is a recommended spot for a breakpoint.
   // Should be initialized by the program header.
@@ -118,19 +118,19 @@
   bool epilogue_begin = false;
 
   // Identifier for the instruction set of the current address.
-  unsigned int isa = 0;
+  uint64_t isa = 0;
 
   // Identifies which block the current instruction belongs to.
-  unsigned int discriminator = 0;
+  uint64_t discriminator = 0;
 
   // Values from the previously committed line. See OnCommit interface for more
   // details. This conceptually should be a copy of the whole
   // LineNumberRegisters but since only 4 pieces of data are needed, hacking
   // it inline was easier.
   uintptr_t last_address = 0;
-  unsigned int last_file = 0;
-  uintptr_t last_line = 0;
-  uintptr_t last_column = 0;
+  uint64_t last_file = 0;
+  uint64_t last_line = 0;
+  uint64_t last_column = 0;
 
   // This is the magical calculation for decompressing the line-number
   // information. The `program_info` provides the parameters for the formula
@@ -258,11 +258,18 @@
     //
     // See DWARF-4 spec 6.2.5.1.
     if (opcode >= program_info.opcode_base) {
-      unsigned int adjusted_opcode = opcode - program_info.opcode_base;
+      uint8_t adjusted_opcode = opcode - program_info.opcode_base;
       registers.OpAdvance(&program_info,
                           program_info.OpcodeToAdvance(adjusted_opcode));
-      registers.line +=
+      const int line_adjust =
           program_info.line_base + (adjusted_opcode % program_info.line_range);
+      if (line_adjust < 0) {
+        if (static_cast<uint64_t>(-line_adjust) > registers.line)
+          return;
+        registers.line -= static_cast<uint64_t>(-line_adjust);
+      } else {
+        registers.line += static_cast<uint64_t>(line_adjust);
+      }
       registers.basic_block = false;
       registers.prologue_end = false;
       registers.epilogue_begin = false;
@@ -311,7 +318,7 @@
               uint64_t value;
               if (!reader.ReadLeb128(value))
                 return;
-              int cur_filename = program_info.num_filenames;
+              size_t cur_filename = program_info.num_filenames;
               if (cur_filename < kMaxFilenames && value < kMaxDirectories) {
                 ++program_info.num_filenames;
                 // Store the offset from the start of file and skip the data to
@@ -373,7 +380,13 @@
           int64_t line_advance;
           if (!reader.ReadLeb128(line_advance))
             return;
-          registers.line += line_advance;
+          if (line_advance < 0) {
+            if (static_cast<uint64_t>(-line_advance) > registers.line)
+              return;
+            registers.line -= static_cast<uint64_t>(-line_advance);
+          } else {
+            registers.line += static_cast<uint64_t>(line_advance);
+          }
           break;
         }
 
@@ -529,7 +542,7 @@
     // Dir index
     if (!reader->ReadLeb128(value))
       return false;
-    int cur_filename = program_info->num_filenames;
+    size_t cur_filename = program_info->num_filenames;
     if (cur_filename < kMaxFilenames && value < kMaxDirectories) {
       ++program_info->num_filenames;
       program_info->filename_offsets[cur_filename] = filename_offset;
@@ -898,7 +911,7 @@
           }
           if (attr == kDW_AT_high_pc) {
             high_pc_is_offset = true;
-            high_pc = data;
+            high_pc = static_cast<uint64_t>(data);
           }
         } break;
 
@@ -1099,11 +1112,12 @@
   }
 
   out[out_pos - 1] = ':';
-  char* tmp =
-      google::itoa_r(info.line, out + out_pos, out_size - out_pos, 10, 0);
+  char* tmp = google::itoa_r(static_cast<intptr_t>(info.line), out + out_pos,
+                             out_size - out_pos, 10, 0);
   out_pos += strlen(tmp) + 1;
   out[out_pos - 1] = ':';
-  tmp = google::itoa_r(info.column, out + out_pos, out_size - out_pos, 10, 0);
+  tmp = google::itoa_r(static_cast<intptr_t>(info.column), out + out_pos,
+                       out_size - out_pos, 10, 0);
   out_pos += strlen(tmp) + 1;
 }
 
diff --git a/base/debug/elf_reader.cc b/base/debug/elf_reader.cc
index f711f952..0a1806c 100644
--- a/base/debug/elf_reader.cc
+++ b/base/debug/elf_reader.cc
@@ -31,12 +31,14 @@
 using Half = Elf32_Half;
 using Nhdr = Elf32_Nhdr;
 using Word = Elf32_Word;
+using Xword = Elf32_Word;
 #else
 using Ehdr = Elf64_Ehdr;
 using Dyn = Elf64_Dyn;
 using Half = Elf64_Half;
 using Nhdr = Elf64_Nhdr;
 using Word = Elf64_Word;
+using Xword = Elf64_Xword;
 #endif
 
 constexpr char kGnuNoteName[] = "GNU";
@@ -139,7 +141,7 @@
         reinterpret_cast<const Dyn*>(header.p_vaddr + relocation_offset);
     const Dyn* dynamic_end = reinterpret_cast<const Dyn*>(
         header.p_vaddr + relocation_offset + header.p_memsz);
-    Word soname_strtab_offset = 0;
+    Xword soname_strtab_offset = 0;
     const char* strtab_addr = 0;
     for (const Dyn* dynamic_iter = dynamic_start; dynamic_iter < dynamic_end;
          ++dynamic_iter) {
diff --git a/base/debug/proc_maps_linux.cc b/base/debug/proc_maps_linux.cc
index f75caba..337a3cfb 100644
--- a/base/debug/proc_maps_linux.cc
+++ b/base/debug/proc_maps_linux.cc
@@ -39,7 +39,7 @@
 bool ReadProcMaps(std::string* proc_maps) {
   // seq_file only writes out a page-sized amount on each call. Refer to header
   // file for details.
-  const long kReadSize = sysconf(_SC_PAGESIZE);
+  const size_t read_size = static_cast<size_t>(sysconf(_SC_PAGESIZE));
 
   base::ScopedFD fd(HANDLE_EINTR(open("/proc/self/maps", O_RDONLY)));
   if (!fd.is_valid()) {
@@ -52,10 +52,10 @@
     // To avoid a copy, resize |proc_maps| so read() can write directly into it.
     // Compute |buffer| afterwards since resize() may reallocate.
     size_t pos = proc_maps->size();
-    proc_maps->resize(pos + kReadSize);
+    proc_maps->resize(pos + read_size);
     void* buffer = &(*proc_maps)[pos];
 
-    ssize_t bytes_read = HANDLE_EINTR(read(fd.get(), buffer, kReadSize));
+    ssize_t bytes_read = HANDLE_EINTR(read(fd.get(), buffer, read_size));
     if (bytes_read < 0) {
       DPLOG(ERROR) << "Couldn't read /proc/self/maps";
       proc_maps->clear();
@@ -63,7 +63,7 @@
     }
 
     // ... and don't forget to trim off excess bytes.
-    proc_maps->resize(pos + bytes_read);
+    proc_maps->resize(pos + static_cast<size_t>(bytes_read));
 
     if (bytes_read == 0)
       break;
diff --git a/base/debug/stack_trace_posix.cc b/base/debug/stack_trace_posix.cc
index 37470d6e..abe6ae0 100644
--- a/base/debug/stack_trace_posix.cc
+++ b/base/debug/stack_trace_posix.cc
@@ -157,13 +157,13 @@
 }
 
 #if defined(USE_SYMBOLIZE)
-void OutputFrameId(intptr_t frame_id, BacktraceOutputHandler* handler) {
+void OutputFrameId(size_t frame_id, BacktraceOutputHandler* handler) {
   // Max unsigned 64-bit number in decimal has 20 digits (18446744073709551615).
   // Hence, 30 digits should be more than enough to represent it in decimal
   // (including the null-terminator).
   char buf[30] = { '\0' };
   handler->HandleOutput("#");
-  internal::itoa_r(frame_id, buf, sizeof(buf), 10, 1);
+  internal::itoa_r(static_cast<intptr_t>(frame_id), buf, sizeof(buf), 10, 1);
   handler->HandleOutput(buf);
 }
 #endif  // defined(USE_SYMBOLIZE)
@@ -271,7 +271,7 @@
     // installed. Thus, we reinstall ourselves before returning.
     struct sigaction action;
     memset(&action, 0, sizeof(action));
-    action.sa_flags = SA_RESETHAND | SA_SIGINFO;
+    action.sa_flags = static_cast<int>(SA_RESETHAND | SA_SIGINFO);
     action.sa_sigaction = &StackDumpSignalHandler;
     sigemptyset(&action.sa_mask);
 
@@ -628,9 +628,10 @@
         start_address = region.start;
         base_address = region.base;
         if (file_path && file_path_size > 0) {
-          strncpy(file_path, region.path.c_str(), file_path_size);
+          const size_t size = static_cast<size_t>(file_path_size);
+          strncpy(file_path, region.path.c_str(), size);
           // Ensure null termination.
-          file_path[file_path_size - 1] = '\0';
+          file_path[size - 1] = '\0';
         }
         return instance->GetFileDescriptor(region.path.c_str());
       }
@@ -647,7 +648,8 @@
       return;
 
     auto safe_memcpy = [&mem_fd](void* dst, uintptr_t src, size_t size) {
-      return HANDLE_EINTR(pread(mem_fd.get(), dst, size, src)) == ssize_t(size);
+      return HANDLE_EINTR(pread(mem_fd.get(), dst, size,
+                                static_cast<off_t>(src))) == ssize_t(size);
     };
 
     uintptr_t cur_base = 0;
@@ -821,7 +823,7 @@
 
   struct sigaction action;
   memset(&action, 0, sizeof(action));
-  action.sa_flags = SA_RESETHAND | SA_SIGINFO;
+  action.sa_flags = static_cast<int>(SA_RESETHAND | SA_SIGINFO);
   action.sa_sigaction = &StackDumpSignalHandler;
   sigemptyset(&action.sa_mask);
 
@@ -872,7 +874,8 @@
 #elif !defined(__UCLIBC__) && !defined(_AIX)
   // Though the backtrace API man page does not list any possible negative
   // return values, we take no chance.
-  return base::saturated_cast<size_t>(backtrace(trace, count));
+  return base::saturated_cast<size_t>(
+      backtrace(trace, base::saturated_cast<int>(count)));
 #else
   return 0;
 #endif
@@ -912,7 +915,7 @@
 
   char* start = buf;
 
-  uintptr_t j = i;
+  uintptr_t j = static_cast<uintptr_t>(i);
 
   // Handle negative numbers (only for base 10).
   if (i < 0 && base == 10) {
@@ -938,8 +941,8 @@
     }
 
     // Output the next digit.
-    *ptr++ = "0123456789abcdef"[j % base];
-    j /= base;
+    *ptr++ = "0123456789abcdef"[j % static_cast<uintptr_t>(base)];
+    j /= static_cast<uintptr_t>(base);
 
     if (padding > 0)
       padding--;
diff --git a/base/memory/page_size_posix.cc b/base/memory/page_size_posix.cc
index b9f111d..66389382 100644
--- a/base/memory/page_size_posix.cc
+++ b/base/memory/page_size_posix.cc
@@ -13,7 +13,7 @@
   // For more information see getpagesize(2). Portable applications should use
   // sysconf(_SC_PAGESIZE) rather than getpagesize() if it's available.
 #if defined(_SC_PAGESIZE)
-    return sysconf(_SC_PAGESIZE);
+    return static_cast<size_t>(sysconf(_SC_PAGESIZE));
 #else
     return getpagesize();
 #endif
diff --git a/base/message_loop/message_pump_libevent.cc b/base/message_loop/message_pump_libevent.cc
index 40f57a3..5c3b9a2 100644
--- a/base/message_loop/message_pump_libevent.cc
+++ b/base/message_loop/message_pump_libevent.cc
@@ -128,7 +128,7 @@
   // threadsafe, and your watcher may never be registered.
   DCHECK(watch_file_descriptor_caller_checker_.CalledOnValidThread());
 
-  int event_mask = persistent ? EV_PERSIST : 0;
+  short event_mask = persistent ? EV_PERSIST : 0;
   if (mode & WATCH_READ) {
     event_mask |= EV_READ;
   }
@@ -281,7 +281,7 @@
 void MessagePumpLibevent::ScheduleWork() {
   // Tell libevent (in a threadsafe way) that it should break out of its loop.
   char buf = 0;
-  int nwrite = HANDLE_EINTR(write(wakeup_pipe_in_, &buf, 1));
+  long nwrite = HANDLE_EINTR(write(wakeup_pipe_in_, &buf, 1));
   DPCHECK(nwrite == 1 || errno == EAGAIN) << "nwrite:" << nwrite;
 }
 
@@ -364,7 +364,7 @@
 
   // Remove and discard the wakeup byte.
   char buf;
-  int nread = HANDLE_EINTR(read(socket, &buf, 1));
+  long nread = HANDLE_EINTR(read(socket, &buf, 1));
   DCHECK_EQ(nread, 1);
   that->processed_io_events_ = true;
   // Tell libevent to break out of inner loop.
diff --git a/base/posix/unix_domain_socket.cc b/base/posix/unix_domain_socket.cc
index 1405b5eb..a3977cee 100644
--- a/base/posix/unix_domain_socket.cc
+++ b/base/posix/unix_domain_socket.cc
@@ -71,7 +71,7 @@
 
   char* control_buffer = nullptr;
   if (fds.size()) {
-    const unsigned control_len = CMSG_SPACE(sizeof(int) * fds.size());
+    const size_t control_len = CMSG_SPACE(sizeof(int) * fds.size());
     control_buffer = new char[control_len];
 
     struct cmsghdr* cmsg;
@@ -155,13 +155,13 @@
     return -1;
 
   int* wire_fds = nullptr;
-  unsigned wire_fds_len = 0;
+  size_t wire_fds_len = 0;
   ProcessId pid = -1;
 
   if (msg.msg_controllen > 0) {
     struct cmsghdr* cmsg;
     for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-      const unsigned payload_len = cmsg->cmsg_len - CMSG_LEN(0);
+      const size_t payload_len = cmsg->cmsg_len - CMSG_LEN(0);
       if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
         DCHECK_EQ(payload_len % sizeof(int), 0u);
         DCHECK_EQ(wire_fds, static_cast<void*>(nullptr));
@@ -186,14 +186,14 @@
       LOG(ERROR) << "recvmsg returned MSG_CTRUNC flag, buffer len is "
                  << msg.msg_controllen;
     }
-    for (unsigned i = 0; i < wire_fds_len; ++i)
+    for (size_t i = 0; i < wire_fds_len; ++i)
       close(wire_fds[i]);
     errno = EMSGSIZE;
     return -1;
   }
 
   if (wire_fds) {
-    for (unsigned i = 0; i < wire_fds_len; ++i)
+    for (size_t i = 0; i < wire_fds_len; ++i)
       fds->push_back(ScopedFD(wire_fds[i]));  // TODO(mdempsky): emplace_back
   }
 
diff --git a/base/task/sequence_manager/sequence_manager_impl_unittest.cc b/base/task/sequence_manager/sequence_manager_impl_unittest.cc
index e9d44ca9..d69c5335 100644
--- a/base/task/sequence_manager/sequence_manager_impl_unittest.cc
+++ b/base/task/sequence_manager/sequence_manager_impl_unittest.cc
@@ -897,7 +897,8 @@
   auto handle = queue->task_runner()->PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE,
       BindOnce(&TestTask, 1, &run_order),
-      sequence_manager()->NowTicks() + kDelay);
+      sequence_manager()->NowTicks() + kDelay,
+      subtle::DelayPolicy::kFlexibleNoSooner);
   EXPECT_EQ(FromStartAligned(kDelay), NextPendingTaskTime());
   EXPECT_FALSE(queue->HasTaskToRunImmediatelyOrReadyDelayedTask());
   EXPECT_TRUE(run_order.empty());
@@ -985,7 +986,8 @@
   std::vector<EnqueueOrder> run_order;
   auto handle = queue->task_runner()->PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE,
-      BindOnce(&TestTask, 1, &run_order), TimeTicks());
+      BindOnce(&TestTask, 1, &run_order), TimeTicks(),
+      subtle::DelayPolicy::kFlexibleNoSooner);
   EXPECT_TRUE(queue->GetTaskQueueImpl()->HasTaskToRunImmediately());
   EXPECT_TRUE(run_order.empty());
 
@@ -1044,7 +1046,8 @@
   auto handle1 = queue->task_runner()->PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE,
       BindOnce(&TestTask, 1, &run_order),
-      sequence_manager()->NowTicks() + Milliseconds(10));
+      sequence_manager()->NowTicks() + Milliseconds(10),
+      subtle::DelayPolicy::kFlexibleNoSooner);
 
   queue->task_runner()->PostDelayedTask(
       FROM_HERE, BindOnce(&TestTask, 2, &run_order), Milliseconds(8));
@@ -1052,7 +1055,8 @@
   auto handle2 = queue->task_runner()->PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE,
       BindOnce(&TestTask, 3, &run_order),
-      sequence_manager()->NowTicks() + Milliseconds(5));
+      sequence_manager()->NowTicks() + Milliseconds(5),
+      subtle::DelayPolicy::kFlexibleNoSooner);
 
   EXPECT_EQ(FromStartAligned(Milliseconds(5)), NextPendingTaskTime());
 
@@ -1102,7 +1106,8 @@
   auto handle1 = queue->task_runner()->PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE,
       BindOnce(&TestTask, 1, &run_order),
-      sequence_manager()->NowTicks() + Milliseconds(1));
+      sequence_manager()->NowTicks() + Milliseconds(1),
+      subtle::DelayPolicy::kFlexibleNoSooner);
 
   queue->task_runner()->PostDelayedTask(
       FROM_HERE, BindOnce(&TestTask, 2, &run_order), Milliseconds(5));
@@ -1110,7 +1115,8 @@
   auto handle2 = queue->task_runner()->PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE,
       BindOnce(&TestTask, 3, &run_order),
-      sequence_manager()->NowTicks() + Milliseconds(10));
+      sequence_manager()->NowTicks() + Milliseconds(10),
+      subtle::DelayPolicy::kFlexibleNoSooner);
 
   EXPECT_EQ(FromStartAligned(Milliseconds(1)), NextPendingTaskTime());
 
diff --git a/base/task/sequenced_task_runner.h b/base/task/sequenced_task_runner.h
index 61b2288..1ab290a 100644
--- a/base/task/sequenced_task_runner.h
+++ b/base/task/sequenced_task_runner.h
@@ -26,6 +26,7 @@
 }  // namespace webrtc
 namespace media {
 class AlsaPcmOutputStream;
+class AlsaPcmInputStream;
 class FakeAudioWorker;
 }  // namespace media
 
@@ -60,6 +61,7 @@
   friend class PostDelayedTaskPassKeyForTesting;
   friend class webrtc::ThreadWrapper;
   friend class media::AlsaPcmOutputStream;
+  friend class media::AlsaPcmInputStream;
   friend class media::FakeAudioWorker;
 };
 
@@ -188,31 +190,29 @@
       OnceClosure task,
       TimeDelta delay);
 
-  // Posts the given |task| to be run at |delayed_run_time|, following
-  // |delay_policy|. Returns a handle that can be used to cancel the task.
-  // This should not be used directly. Consider using higher level timer
-  // primitives in base/timer/timer.h.
+  // Posts the given |task| to be run at |delayed_run_time| (or immediately if
+  // in the past), following |delay_policy|. Returns a handle that can be used
+  // to cancel the task. This should not be used directly. Consider using higher
+  // level timer primitives in base/timer/timer.h.
   [[nodiscard]] virtual DelayedTaskHandle PostCancelableDelayedTaskAt(
       subtle::PostDelayedTaskPassKey,
       const Location& from_here,
       OnceClosure task,
       TimeTicks delayed_run_time,
-      subtle::DelayPolicy delay_policy =
-          subtle::DelayPolicy::kFlexibleNoSooner);
+      subtle::DelayPolicy delay_policy);
 
-  // Posts the given |task| to be run at |delayed_run_time|, following
-  // |delay_policy|. This is used by the default implementation of
-  // PostCancelableDelayedTaskAt(). The default behavior subtracts
-  // TimeTicks::Now() from |delayed_run_time| to get a delay. See base::Timer to
-  // post precise/repeating timeouts.
+  // Posts the given |task| to be run at |delayed_run_time| (or immediately if
+  // in the past), following |delay_policy|. This is used by the default
+  // implementation of PostCancelableDelayedTaskAt(). The default behavior
+  // subtracts TimeTicks::Now() from |delayed_run_time| to get a delay. See
+  // base::Timer to post precise/repeating timeouts.
   // TODO(1153139): Make pure virtual once all SequencedTaskRunners implement
   // this.
   virtual bool PostDelayedTaskAt(subtle::PostDelayedTaskPassKey,
                                  const Location& from_here,
                                  OnceClosure task,
                                  TimeTicks delayed_run_time,
-                                 subtle::DelayPolicy delay_policy =
-                                     subtle::DelayPolicy::kFlexibleNoSooner);
+                                 subtle::DelayPolicy delay_policy);
 
   // Submits a non-nestable task to delete the given object.  Returns
   // true if the object may be deleted at some point in the future,
diff --git a/base/task/thread_pool/thread_pool_impl_unittest.cc b/base/task/thread_pool/thread_pool_impl_unittest.cc
index 19b3116..c087171 100644
--- a/base/task/thread_pool/thread_pool_impl_unittest.cc
+++ b/base/task/thread_pool/thread_pool_impl_unittest.cc
@@ -453,7 +453,8 @@
                        GetGroupTypes(),
                        TimeTicks::Now() + TestTimeouts::tiny_timeout(),
                        Unretained(&task_ran)),
-              TimeTicks::Now() + TestTimeouts::tiny_timeout());
+              TimeTicks::Now() + TestTimeouts::tiny_timeout(),
+              subtle::DelayPolicy::kFlexibleNoSooner);
   task_ran.Wait();
 }
 
diff --git a/build/android/gyp/javac_output_processor.py b/build/android/gyp/javac_output_processor.py
index f0a6cd16..20ea5b9a 100755
--- a/build/android/gyp/javac_output_processor.py
+++ b/build/android/gyp/javac_output_processor.py
@@ -40,11 +40,6 @@
                                 r'(?P<full_message> (?P<message>.*))$')
     self._marker_re = re.compile(r'\s*(?P<marker>\^)\s*$')
 
-    # Matches output modification performed by _ElaborateLineForUnknownSymbol()
-    # so that it can be colorized.
-    # Example: org.chromium.base.Log found in dep //base:base_java.
-    self._please_add_dep_re = re.compile(r'(?P<full_message>Hint:.*)$')
-
     # First element in pair is bool which indicates whether the missing
     # class/package is part of the error message.
     self._symbol_not_found_re_list = [
@@ -85,8 +80,14 @@
     for line in lines:
       yield self._ApplyColors(line)
     if self._suggested_deps:
+
+      def yellow(text):
+        return colorama.Fore.YELLOW + text + colorama.Fore.RESET
+
       # Show them in quotes so they can be copy/pasted into BUILD.gn files.
-      yield "Full list of deps to add to {}:".format(self._target_name)
+      yield yellow('Hint:') + ' One or more errors due to missing GN deps.'
+      yield (yellow('Hint:') + ' Try adding the following to ' +
+             yellow(self._target_name))
       for dep in sorted(self._suggested_deps):
         yield '    "{}",'.format(dep)
 
@@ -108,16 +109,15 @@
     line = next(lines, None)
     while previous_line != None:
       try:
-        elaborated_lines = self._ElaborateLineForUnknownSymbol(
-            previous_line, line)
+        self._LookForUnknownSymbol(previous_line, line)
       except Exception:
-        elaborated_lines = ["Error in _ElaborateLineForUnknownSymbol ---"]
+        elaborated_lines = ['Error in _LookForUnknownSymbol ---']
         elaborated_lines += traceback.format_exc().splitlines()
-        elaborated_lines += ["--- end _ElaborateLineForUnknownSymbol error"]
-        elaborated_lines += [previous_line]
-      for elaborated_line in elaborated_lines:
-        yield elaborated_line
+        elaborated_lines += ['--- end _LookForUnknownSymbol error']
+        for elaborated_line in elaborated_lines:
+          yield elaborated_line
 
+      yield previous_line
       previous_line = line
       line = next(lines, None)
 
@@ -127,19 +127,17 @@
       line = self._Colorize(line, self._warning_re, self._warning_color)
     elif self._error_re.match(line):
       line = self._Colorize(line, self._error_re, self._error_color)
-    elif self._please_add_dep_re.match(line):
-      line = self._Colorize(line, self._please_add_dep_re, self._error_color)
     elif self._marker_re.match(line):
       line = self._Colorize(line, self._marker_re, self._marker_color)
     return line
 
-  def _ElaborateLineForUnknownSymbol(self, line, next_line):
+  def _LookForUnknownSymbol(self, line, next_line):
     if not next_line:
-      return [line]
+      return
 
     import_re_match = self._import_re.match(next_line)
     if not import_re_match:
-      return [line]
+      return
 
     symbol_missing = False
     has_missing_symbol_in_error_msg = False
@@ -150,7 +148,7 @@
         break
 
     if not symbol_missing:
-      return [line]
+      return
 
     class_to_lookup = import_re_match.group('imported_class')
     if self._class_lookup_index == None:
@@ -160,40 +158,34 @@
     suggested_deps = self._class_lookup_index.match(class_to_lookup)
 
     if len(suggested_deps) != 1:
-      suggested_deps = self._FindFactoryDep(suggested_deps)
-      if len(suggested_deps) != 1:
-        return [line]
+      suggested_deps = self._DisambiguateDeps(suggested_deps)
 
-    suggested_target = suggested_deps[0].target
+    if len(suggested_deps) != 1:
+      suggested_target = ('one of: ' + ', '.join(s.target
+                                                 for s in suggested_deps))
+    else:
+      suggested_target = suggested_deps[0].target
 
     if not has_missing_symbol_in_error_msg:
       line = "{} {}".format(line, class_to_lookup)
 
     self._suggested_deps.add(suggested_target)
-    return [
-        line,
-        'Hint: Add "{}" to deps of {}'.format(suggested_target,
-                                              self._target_name),
-    ]
 
   @staticmethod
-  def _FindFactoryDep(class_entries):
-    """Find the android_library_factory() GN target."""
-    if len(class_entries) != 2:
-      return []
+  def _DisambiguateDeps(class_entries):
+    # android_library_factory() targets set low_classpath_priority=true, and any
+    # target that is the "impl" side of a target that uses jar_excluded_patterns
+    # should use this as well.
+    # We should generally always suggest depending on the non-impl library
+    # target.
+    # TODO(crbug.com/1296711): Also use "visibility" a hint here.
+    low_entries = [x for x in class_entries if x.low_classpath_priority]
+    class_entries = low_entries or class_entries
 
-    # android_library_factory() targets set low_classpath_priority=true.
-    # This logic is correct if GN targets other than android_library_factory()
-    # set low_classpath_priority=true. low_classpath_priority=true indicates
-    # that the target is depended on (and overridden) by other targets which
-    # contain the same class. We want to recommend the leaf target.
-    if class_entries[0].low_classpath_priority == class_entries[
-        1].low_classpath_priority:
-      return []
-
-    if class_entries[0].low_classpath_priority:
-      return [class_entries[0]]
-    return [class_entries[1]]
+    # E.g. javax_annotation_jsr250_api_java.
+    jsr_entries = [x for x in class_entries if 'jsr' in x.target]
+    class_entries = jsr_entries or class_entries
+    return class_entries
 
   @staticmethod
   def _RemoveSuffixesIfPresent(suffixes, text):
diff --git a/build/android/pylib/utils/simpleperf.py b/build/android/pylib/utils/simpleperf.py
index dad2a8c..e553b45 100644
--- a/build/android/pylib/utils/simpleperf.py
+++ b/build/android/pylib/utils/simpleperf.py
@@ -217,8 +217,10 @@
   report_path = os.path.join(script_dir, 'report.py')
   report_cmd = [sys.executable, report_path, '-i', simpleperf_out_path]
   device_lib_path = None
-  for line in subprocess.check_output(
-      report_cmd, stderr=subprocess.STDOUT).splitlines():
+  output = subprocess.check_output(report_cmd, stderr=subprocess.STDOUT)
+  if isinstance(output, bytes):
+    output = output.decode()
+  for line in output.splitlines():
     fields = line.split()
     if len(fields) < 5:
       continue
diff --git a/build/android/test/BUILD.gn b/build/android/test/BUILD.gn
index 8e33dd3..6a67e56 100644
--- a/build/android/test/BUILD.gn
+++ b/build/android/test/BUILD.gn
@@ -54,12 +54,12 @@
           rebase_path(import_child_missing_symbol_test_nocompile_sources,
                       "",
                       "nocompile_gn")
-      expected_compile_output_regex = "error: package test\.missing_symbol\.sub does not exist\nHint: Add \"//build/android/test/nocompile_gn:sub_b_java\" to deps of //build/android/test/nocompile_gn:import_child_missing_symbol_test_java"
+      expected_compile_output_regex = "Hint: Try adding the following to //build/android/test/nocompile_gn:import_child_missing_symbol_test_java\n *\"//build/android/test/nocompile_gn:sub_b_java\""
     },
     {
       target = "nocompile_gn:import_parent_missing_symbol_test_java"
       nocompile_sources = []
-      expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.B\nHint: Add \"//build/android/test/nocompile_gn:b_java\" to deps of //build/android/test/nocompile_gn:import_parent_missing_symbol_test_java"
+      expected_compile_output_regex = "Hint: Try adding the following to //build/android/test/nocompile_gn:import_parent_missing_symbol_test_java\n *\"//build/android/test/nocompile_gn:b_java\""
     },
     {
       target = "nocompile_gn:import_turbine_missing_symbol_test_java"
@@ -67,17 +67,17 @@
           rebase_path(import_turbine_missing_symbol_test_nocompile_sources,
                       "",
                       "nocompile_gn")
-      expected_compile_output_regex = "error: symbol not found test\.missing_symbol\.B\nHint: Add \"//build/android/test/nocompile_gn:b_java\" to deps of //build/android/test/nocompile_gn:import_turbine_missing_symbol_test_java"
+      expected_compile_output_regex = "Hint: Try adding the following to //build/android/test/nocompile_gn:import_turbine_missing_symbol_test_java\n *\"//build/android/test/nocompile_gn:b_java\""
     },
     {
       target = "nocompile_gn:prebuilt_missing_symbol_test_java"
       nocompile_sources = []
-      expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.C\nHint: Add \"//build/android/test/nocompile_gn:c_prebuilt_java\" to deps of //build/android/test/nocompile_gn:prebuilt_missing_symbol_test_java"
+      expected_compile_output_regex = "Hint: Try adding the following to //build/android/test/nocompile_gn:prebuilt_missing_symbol_test_java\n *\"//build/android/test/nocompile_gn:c_prebuilt_java\""
     },
     {
       target = "nocompile_gn:cpp_template_missing_symbol_test_java"
       nocompile_sources = []
-      expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.D\nHint: Add \"//build/android/test/nocompile_gn:d_java\" to deps of //build/android/test/nocompile_gn:cpp_template_missing_symbol_test_java"
+      expected_compile_output_regex = "Hint: Try adding the following to //build/android/test/nocompile_gn:cpp_template_missing_symbol_test_java\n *\"//build/android/test/nocompile_gn:d_java\""
     },
   ]
 }
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index 85ccedd..5c11172 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-8.20220705.1.1
+8.20220705.2.1
diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt
index 4a6097b..7419f7d 100644
--- a/build/whitespace_file.txt
+++ b/build/whitespace_file.txt
@@ -198,3 +198,14 @@
 
 I'll join to add my first commit here. P. S. It has stopped being a story long long ago.
 
+PANCAKE RECIPE:
+STEP 1: Put 100g plain flour, 2 large eggs, 300ml milk, 1 tbsp sunflower or vegetable oil
+and a pinch of salt into a bowl or large jug, then whisk to a smooth batter.
+STEP 2: Set aside for 30 mins to rest if you have time, or start cooking straight away.
+STEP 3: Set a medium frying pan or crêpe pan over a medium heat and carefully wipe it with some
+oiled kitchen paper.
+STEP 4: When hot, cook your pancakes for 1 min on each side until golden, keeping them warm
+in a low oven as you go.
+STEP 5: Serve with lemon wedges and caster sugar, or your favourite filling.
+Once cold, you can layer the pancakes between baking parchment,
+then wrap in cling film and freeze for up to 2 months.
diff --git a/cc/base/features.cc b/cc/base/features.cc
index 0caa7b1..c1d274f5 100644
--- a/cc/base/features.cc
+++ b/cc/base/features.cc
@@ -71,4 +71,7 @@
 
 const base::Feature kSlidingWindowForDroppedFrameCounter{
     "SlidingWindowForDroppedFrameCounter", base::FEATURE_DISABLED_BY_DEFAULT};
+
+const base::Feature kNormalPriorityImageDecoding{
+    "NormalPriorityImageDecoding", base::FEATURE_DISABLED_BY_DEFAULT};
 }  // namespace features
diff --git a/cc/base/features.h b/cc/base/features.h
index aab0e40..4cdbac2 100644
--- a/cc/base/features.h
+++ b/cc/base/features.h
@@ -64,6 +64,11 @@
 // When enabled, DroppedFrameCounter will use an adjusted sliding window
 // interval specified by field trial params.
 CC_BASE_EXPORT extern const base::Feature kSlidingWindowForDroppedFrameCounter;
+
+// When enabled, SupportsBackgroundThreadPriority is set to kNo for
+// GpuImageDecodeTaskImpl and SoftwareImageDecodeTaskImpl.
+// Introduced to fix https://crbug.com/1116624
+CC_BASE_EXPORT extern const base::Feature kNormalPriorityImageDecoding;
 }  // namespace features
 
 #endif  // CC_BASE_FEATURES_H_
diff --git a/cc/input/scrollbar_animation_controller.h b/cc/input/scrollbar_animation_controller.h
index ce4a3f92..2c2fbb02 100644
--- a/cc/input/scrollbar_animation_controller.h
+++ b/cc/input/scrollbar_animation_controller.h
@@ -94,7 +94,8 @@
 
   ScrollbarSet Scrollbars() const;
 
-  static constexpr float kMouseMoveDistanceToTriggerFadeIn = 30.0f;
+  SingleScrollbarAnimationControllerThinning& GetScrollbarAnimationController(
+      ScrollbarOrientation) const;
 
  private:
   // Describes whether the current animation should FadeIn or FadeOut.
@@ -113,9 +114,6 @@
                                base::TimeDelta thinning_duration,
                                float initial_opacity);
 
-  SingleScrollbarAnimationControllerThinning& GetScrollbarAnimationController(
-      ScrollbarOrientation) const;
-
   // Any scrollbar state update would show scrollbar hen post the delay fade out
   // if needed.
   void UpdateScrollbarState();
diff --git a/cc/input/scrollbar_animation_controller_unittest.cc b/cc/input/scrollbar_animation_controller_unittest.cc
index 6069fc4..d3e5389e5 100644
--- a/cc/input/scrollbar_animation_controller_unittest.cc
+++ b/cc/input/scrollbar_animation_controller_unittest.cc
@@ -24,18 +24,13 @@
 
 const float kIdleThicknessScale =
     SingleScrollbarAnimationControllerThinning::kIdleThicknessScale;
-const float kMouseMoveDistanceToTriggerFadeIn =
-    ScrollbarAnimationController::kMouseMoveDistanceToTriggerFadeIn;
-const float kMouseMoveDistanceToTriggerExpand =
-    SingleScrollbarAnimationControllerThinning::
-        kMouseMoveDistanceToTriggerExpand;
 const int kThumbThickness = 10;
 
 class MockScrollbarAnimationControllerClient
     : public ScrollbarAnimationControllerClient {
  public:
-  explicit MockScrollbarAnimationControllerClient(LayerTreeHostImpl* host_impl,
-                                                  bool is_fluent)
+  MockScrollbarAnimationControllerClient(LayerTreeHostImpl* host_impl,
+                                         bool is_fluent)
       : host_impl_(host_impl), is_fluent_(is_fluent) {}
   ~MockScrollbarAnimationControllerClient() override = default;
 
@@ -125,6 +120,14 @@
             kThinningDuration, 0.0f);
     v_scrollbar_layer_->SetCurrentPos(0);
     h_scrollbar_layer_->SetCurrentPos(0);
+    mouse_move_distance_to_trigger_fade_in_ =
+        scrollbar_controller_
+            ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+            .MouseMoveDistanceToTriggerFadeIn();
+    mouse_move_distance_to_trigger_expand_ =
+        scrollbar_controller_
+            ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+            .MouseMoveDistanceToTriggerExpand();
   }
 
   // Return a point with given offset from the top-left of vertical scrollbar.
@@ -149,6 +152,8 @@
     return p;
   }
 
+  float mouse_move_distance_to_trigger_fade_in_;
+  float mouse_move_distance_to_trigger_expand_;
   std::unique_ptr<ScrollbarAnimationController> scrollbar_controller_;
   raw_ptr<LayerImpl> clip_layer_;
   raw_ptr<LayerImpl> scroll_layer_;
@@ -489,8 +494,8 @@
 
   // Then move mouse away, The fade out animation should have been cleared or
   // cancelled.
-  scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerExpand, 0));
+  scrollbar_controller_->DidMouseMove(NearVerticalScrollbarBegin(
+      -mouse_move_distance_to_trigger_expand_ - 1, 0));
 
   EXPECT_TRUE(client_.start_fade().is_null() ||
               client_.start_fade().IsCancelled());
@@ -559,8 +564,8 @@
               client_.start_fade().IsCancelled());
 
   // Now move the mouse away from the scrollbar and release it.
-  scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn, 0));
+  scrollbar_controller_->DidMouseMove(NearVerticalScrollbarBegin(
+      -mouse_move_distance_to_trigger_fade_in_ - 1, 0));
   scrollbar_controller_->DidMouseUp();
 
   scrollbar_controller_->Animate(time);
@@ -886,8 +891,8 @@
                   h_scrollbar_layer_->thumb_thickness_scale_factor());
 
   // Now move away from bar.
-  scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerExpand, 0));
+  scrollbar_controller_->DidMouseMove(NearVerticalScrollbarBegin(
+      -mouse_move_distance_to_trigger_expand_ - 1, 0));
   scrollbar_controller_->Animate(time);
   time += kThinningDuration;
   scrollbar_controller_->Animate(time);
@@ -925,8 +930,8 @@
   EXPECT_FLOAT_EQ(1, h_scrollbar_layer_->thumb_thickness_scale_factor());
 
   // Now move away from bar.
-  scrollbar_controller_->DidMouseMove(
-      NearHorizontalScrollbarBegin(0, -kMouseMoveDistanceToTriggerExpand));
+  scrollbar_controller_->DidMouseMove(NearHorizontalScrollbarBegin(
+      0, -mouse_move_distance_to_trigger_expand_ - 1));
   scrollbar_controller_->Animate(time);
   time += kThinningDuration;
   scrollbar_controller_->Animate(time);
@@ -1062,7 +1067,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1095,7 +1100,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1105,8 +1110,8 @@
   client_.start_fade().Reset();
   // Move mouse still hover the fade in region of scrollbar should not
   // post a new fade in.
-  scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 2, 0));
+  scrollbar_controller_->DidMouseMove(NearVerticalScrollbarBegin(
+      -mouse_move_distance_to_trigger_fade_in_ + 2, 0));
 
   EXPECT_TRUE(client_.start_fade().is_null());
 }
@@ -1120,7 +1125,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1128,8 +1133,8 @@
   EXPECT_EQ(kFadeDelay, client_.delay());
 
   // Move mouse far away,delay fade in should be canceled.
-  scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn, 0));
+  scrollbar_controller_->DidMouseMove(NearVerticalScrollbarBegin(
+      -mouse_move_distance_to_trigger_fade_in_ - 1, 0));
 
   EXPECT_TRUE(client_.start_fade().is_null() ||
               client_.start_fade().IsCancelled());
@@ -1144,7 +1149,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1158,7 +1163,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1185,7 +1190,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1199,7 +1204,7 @@
 
   // Move mouse hover the fade in region of scrollbar with press.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // Should not have delay fade animation.
   EXPECT_TRUE(client_.start_fade().is_null() ||
@@ -1233,7 +1238,7 @@
 
   // Move mouse over the fade in region of scrollbar.
   scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn + 1, 0));
+      NearVerticalScrollbarBegin(-mouse_move_distance_to_trigger_fade_in_, 0));
 
   // An fade in animation should have been enqueued.
   EXPECT_FALSE(client_.start_fade().is_null());
@@ -1247,8 +1252,8 @@
 
   // Move mouse far from hover the fade in region of scrollbar with
   // press.
-  scrollbar_controller_->DidMouseMove(
-      NearVerticalScrollbarBegin(-kMouseMoveDistanceToTriggerFadeIn, 0));
+  scrollbar_controller_->DidMouseMove(NearVerticalScrollbarBegin(
+      -mouse_move_distance_to_trigger_fade_in_ - 1, 0));
 
   // Should not have delay fade animation.
   EXPECT_TRUE(client_.start_fade().is_null() ||
diff --git a/cc/input/single_scrollbar_animation_controller_thinning.cc b/cc/input/single_scrollbar_animation_controller_thinning.cc
index 5288a8c..7a4d248 100644
--- a/cc/input/single_scrollbar_animation_controller_thinning.cc
+++ b/cc/input/single_scrollbar_animation_controller_thinning.cc
@@ -143,7 +143,10 @@
   captured_ = false;
   StopAnimation();
 
-  if (!mouse_is_near_scrollbar_thumb_) {
+  const bool thickness_should_decrease = client_->IsFluentScrollbar()
+                                             ? !mouse_is_near_scrollbar_track_
+                                             : !mouse_is_near_scrollbar_thumb_;
+  if (thickness_should_decrease) {
     thickness_change_ = AnimationChange::DECREASE;
     StartAnimation();
   } else {
@@ -152,7 +155,11 @@
 }
 
 void SingleScrollbarAnimationControllerThinning::DidMouseLeave() {
-  if (!mouse_is_over_scrollbar_thumb_ && !mouse_is_near_scrollbar_thumb_)
+  if (client_->IsFluentScrollbar() && !mouse_is_near_scrollbar_track_)
+    return;
+
+  if (!client_->IsFluentScrollbar() && !mouse_is_over_scrollbar_thumb_ &&
+      !mouse_is_near_scrollbar_thumb_)
     return;
 
   mouse_is_over_scrollbar_thumb_ = false;
@@ -173,35 +180,50 @@
   if (!scrollbar)
     return;
 
-  float distance_to_scrollbar_track =
+  const float distance_to_scrollbar_track =
       DistanceToScrollbarPart(device_viewport_point, *scrollbar,
                               ScrollbarPart::TRACK_BUTTONS_TICKMARKS);
-  float distance_to_scrollbar_thumb = DistanceToScrollbarPart(
+  const float distance_to_scrollbar_thumb = DistanceToScrollbarPart(
       device_viewport_point, *scrollbar, ScrollbarPart::THUMB);
 
-  mouse_is_near_scrollbar_track_ =
-      distance_to_scrollbar_track <
-      ScrollbarAnimationController::kMouseMoveDistanceToTriggerFadeIn;
+  const bool mouse_is_near_scrollbar_track =
+      distance_to_scrollbar_track <= MouseMoveDistanceToTriggerFadeIn();
 
-  bool mouse_is_over_scrollbar_thumb = distance_to_scrollbar_thumb == 0.0f;
-  bool mouse_is_near_scrollbar_thumb =
-      distance_to_scrollbar_thumb < kMouseMoveDistanceToTriggerExpand;
+  const bool mouse_is_over_scrollbar_thumb =
+      distance_to_scrollbar_thumb == 0.0f;
+  const bool mouse_is_near_scrollbar_thumb =
+      distance_to_scrollbar_thumb <= MouseMoveDistanceToTriggerExpand();
+  const bool thickness_should_change =
+      client_->IsFluentScrollbar()
+          ? (mouse_is_near_scrollbar_track_ != mouse_is_near_scrollbar_track)
+          : (mouse_is_near_scrollbar_thumb_ != mouse_is_near_scrollbar_thumb);
 
-  if (!captured_ &&
-      mouse_is_near_scrollbar_thumb != mouse_is_near_scrollbar_thumb_) {
-    thickness_change_ = mouse_is_near_scrollbar_thumb
-                            ? AnimationChange::INCREASE
-                            : AnimationChange::DECREASE;
+  if (!captured_ && thickness_should_change) {
+    const bool thickness_should_increase = client_->IsFluentScrollbar()
+                                               ? mouse_is_near_scrollbar_track
+                                               : mouse_is_near_scrollbar_thumb;
+    thickness_change_ = thickness_should_increase ? AnimationChange::INCREASE
+                                                  : AnimationChange::DECREASE;
     StartAnimation();
   }
+
+  mouse_is_near_scrollbar_track_ = mouse_is_near_scrollbar_track;
   mouse_is_near_scrollbar_thumb_ = mouse_is_near_scrollbar_thumb;
   mouse_is_over_scrollbar_thumb_ = mouse_is_over_scrollbar_thumb;
 }
 
+float SingleScrollbarAnimationControllerThinning::
+    ThumbThicknessScaleByMouseDistanceToScrollbar() const {
+  const bool mouse_is_near_scrollbar_part =
+      client_->IsFluentScrollbar() ? mouse_is_near_scrollbar_track_
+                                   : mouse_is_near_scrollbar_thumb_;
+  return mouse_is_near_scrollbar_part ? 1.f : kIdleThicknessScale;
+}
+
 float SingleScrollbarAnimationControllerThinning::ThumbThicknessScaleAt(
-    float progress) {
+    float progress) const {
   if (thickness_change_ == AnimationChange::NONE)
-    return mouse_is_near_scrollbar_thumb_ ? 1.f : kIdleThicknessScale;
+    return ThumbThicknessScaleByMouseDistanceToScrollbar();
   float factor = thickness_change_ == AnimationChange::INCREASE
                      ? progress
                      : (1.f - progress);
@@ -232,8 +254,7 @@
 
 void SingleScrollbarAnimationControllerThinning::UpdateThumbThicknessScale() {
   StopAnimation();
-  ApplyThumbThicknessScale(
-      mouse_is_near_scrollbar_thumb_ ? 1.f : kIdleThicknessScale);
+  ApplyThumbThicknessScale(ThumbThicknessScaleByMouseDistanceToScrollbar());
 }
 
 void SingleScrollbarAnimationControllerThinning::ApplyThumbThicknessScale(
@@ -251,4 +272,14 @@
   }
 }
 
+float SingleScrollbarAnimationControllerThinning::
+    MouseMoveDistanceToTriggerExpand() {
+  return client_->IsFluentScrollbar() ? 0.0f : 25.0f;
+}
+
+float SingleScrollbarAnimationControllerThinning::
+    MouseMoveDistanceToTriggerFadeIn() {
+  return client_->IsFluentScrollbar() ? 0.0f : 30.0f;
+}
+
 }  // namespace cc
diff --git a/cc/input/single_scrollbar_animation_controller_thinning.h b/cc/input/single_scrollbar_animation_controller_thinning.h
index 44eef26..4241de6 100644
--- a/cc/input/single_scrollbar_animation_controller_thinning.h
+++ b/cc/input/single_scrollbar_animation_controller_thinning.h
@@ -23,7 +23,6 @@
 class CC_EXPORT SingleScrollbarAnimationControllerThinning {
  public:
   static constexpr float kIdleThicknessScale = 0.4f;
-  static constexpr float kMouseMoveDistanceToTriggerExpand = 25.f;
 
   static std::unique_ptr<SingleScrollbarAnimationControllerThinning> Create(
       ElementId scroll_element_id,
@@ -61,6 +60,9 @@
   void DidMouseLeave();
   void DidMouseMove(const gfx::PointF& device_viewport_point);
 
+  float MouseMoveDistanceToTriggerExpand();
+  float MouseMoveDistanceToTriggerFadeIn();
+
  private:
   SingleScrollbarAnimationControllerThinning(
       ElementId scroll_element_id,
@@ -75,7 +77,8 @@
   // Describes whether the current animation should INCREASE (thicken)
   // a bar or DECREASE it (thin).
   enum class AnimationChange { NONE, INCREASE, DECREASE };
-  float ThumbThicknessScaleAt(float progress);
+  float ThumbThicknessScaleAt(float progress) const;
+  float ThumbThicknessScaleByMouseDistanceToScrollbar() const;
 
   float AdjustScale(float new_value,
                     float current_value,
@@ -95,6 +98,8 @@
   bool captured_;
   bool mouse_is_over_scrollbar_thumb_;
   bool mouse_is_near_scrollbar_thumb_;
+  // For Fluent scrollbars the near distance to the track is 0 which is
+  // equivalent to the mouse being over the thumb/track.
   bool mouse_is_near_scrollbar_track_;
   // Are we narrowing or thickening the bars.
   AnimationChange thickness_change_;
diff --git a/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc b/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc
index ff0221ea9..3ce3c994 100644
--- a/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc
+++ b/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc
@@ -12,34 +12,29 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using testing::AtLeast;
-using testing::Mock;
-using testing::NiceMock;
-using testing::_;
+using ::testing::_;
+using ::testing::Bool;
+using ::testing::Mock;
+using ::testing::NiceMock;
 
 namespace cc {
 namespace {
 
 const float kIdleThicknessScale =
     SingleScrollbarAnimationControllerThinning::kIdleThicknessScale;
-const float kMouseMoveDistanceToTriggerExpand =
-    SingleScrollbarAnimationControllerThinning::
-        kMouseMoveDistanceToTriggerExpand;
-const float kMouseMoveDistanceToTriggerFadeIn =
-    ScrollbarAnimationController::kMouseMoveDistanceToTriggerFadeIn;
 
 class MockSingleScrollbarAnimationControllerClient
     : public ScrollbarAnimationControllerClient {
  public:
-  explicit MockSingleScrollbarAnimationControllerClient(
-      LayerTreeHostImpl* host_impl)
-      : host_impl_(host_impl) {}
+  MockSingleScrollbarAnimationControllerClient(LayerTreeHostImpl* host_impl,
+                                               bool is_fluent)
+      : host_impl_(host_impl), is_fluent_(is_fluent) {}
   ~MockSingleScrollbarAnimationControllerClient() override = default;
 
   ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const override {
     return host_impl_->ScrollbarsFor(scroll_element_id);
   }
-  bool IsFluentScrollbar() const override { return false; }
+  bool IsFluentScrollbar() const override { return is_fluent_; }
 
   MOCK_METHOD2(PostDelayedScrollbarAnimationTask,
                void(base::OnceClosure start_fade, base::TimeDelta delay));
@@ -49,16 +44,21 @@
 
  private:
   raw_ptr<LayerTreeHostImpl> host_impl_;
+  bool is_fluent_;
 };
 
 class SingleScrollbarAnimationControllerThinningTest
     : public LayerTreeImplTestBase,
-      public testing::Test {
+      public testing::Test,
+      public testing::WithParamInterface<bool> {
  public:
-  SingleScrollbarAnimationControllerThinningTest() : client_(host_impl()) {}
+  explicit SingleScrollbarAnimationControllerThinningTest(
+      bool is_fluent = GetParam())
+      : client_(host_impl(), is_fluent) {}
 
  protected:
   const base::TimeDelta kThinningDuration = base::Seconds(2);
+  const int kThumbThickness = 10;
 
   void SetUp() override {
     root_layer()->SetBounds(gfx::Size(100, 100));
@@ -67,7 +67,6 @@
     scroll_layer->SetElementId(
         LayerIdToElementIdForTesting(scroll_layer->id()));
 
-    const int kThumbThickness = 10;
     const int kTrackStart = 0;
     const int kTrackLength = 100;
     const bool kIsLeftSideVerticalScrollbar = false;
@@ -91,8 +90,14 @@
     scrollbar_controller_ = SingleScrollbarAnimationControllerThinning::Create(
         scroll_layer->element_id(), ScrollbarOrientation::HORIZONTAL, &client_,
         kThinningDuration);
+    mouse_move_distance_to_trigger_fade_in_ =
+        scrollbar_controller_->MouseMoveDistanceToTriggerFadeIn();
+    mouse_move_distance_to_trigger_expand_ =
+        scrollbar_controller_->MouseMoveDistanceToTriggerExpand();
   }
 
+  float mouse_move_distance_to_trigger_fade_in_;
+  float mouse_move_distance_to_trigger_expand_;
   std::unique_ptr<SingleScrollbarAnimationControllerThinning>
       scrollbar_controller_;
   raw_ptr<SolidColorScrollbarLayerImpl> scrollbar_layer_;
@@ -106,19 +111,27 @@
   return p;
 }
 
+class SingleScrollbarAnimationControllerThinningFluentTest
+    : public SingleScrollbarAnimationControllerThinningTest {
+ public:
+  SingleScrollbarAnimationControllerThinningFluentTest()
+      : SingleScrollbarAnimationControllerThinningTest(/* is_fluent */ true) {}
+};
+
 // Check initialization of scrollbar. Should start thin.
-TEST_F(SingleScrollbarAnimationControllerThinningTest, Idle) {
+TEST_P(SingleScrollbarAnimationControllerThinningTest, Idle) {
   EXPECT_FLOAT_EQ(kIdleThicknessScale,
                   scrollbar_layer_->thumb_thickness_scale_factor());
 }
 
 // Move the pointer near the scrollbar. Confirm it gets thick and narrow when
 // moved away.
-TEST_F(SingleScrollbarAnimationControllerThinningTest, MouseNear) {
+TEST_P(SingleScrollbarAnimationControllerThinningTest, MouseNear) {
   base::TimeTicks time;
   time += base::Seconds(1);
 
-  scrollbar_controller_->DidMouseMove(NearScrollbar(-1, 0));
+  scrollbar_controller_->DidMouseMove(
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_, 0));
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(kIdleThicknessScale,
                   scrollbar_layer_->thumb_thickness_scale_factor());
@@ -129,7 +142,8 @@
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
 
   // Subsequent moves within the nearness threshold should not change anything.
-  scrollbar_controller_->DidMouseMove(NearScrollbar(-2, 0));
+  scrollbar_controller_->DidMouseMove(
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_ + 1, 0));
   scrollbar_controller_->Animate(time);
   time += base::Seconds(10);
   scrollbar_controller_->Animate(time);
@@ -137,7 +151,7 @@
 
   // Now move away from thumb.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerExpand, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_ - 1, 0));
   scrollbar_controller_->Animate(time);
   time += kThinningDuration;
   scrollbar_controller_->Animate(time);
@@ -146,7 +160,7 @@
 
   // Move away from track.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerFadeIn, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_fade_in_ - 1, 0));
   scrollbar_controller_->Animate(time);
   time += kThinningDuration;
   scrollbar_controller_->Animate(time);
@@ -156,7 +170,7 @@
 
 // Move the pointer over the scrollbar. Make sure it gets thick that it gets
 // thin when moved away.
-TEST_F(SingleScrollbarAnimationControllerThinningTest, MouseOver) {
+TEST_P(SingleScrollbarAnimationControllerThinningTest, MouseOver) {
   base::TimeTicks time;
   time += base::Seconds(1);
 
@@ -180,7 +194,7 @@
   // Moving off the scrollbar but still withing the "near" threshold should do
   // nothing.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerExpand + 1, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_, 0));
   scrollbar_controller_->Animate(time);
   time += base::Seconds(10);
   scrollbar_controller_->Animate(time);
@@ -188,7 +202,7 @@
 
   // Now move away from thumb.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerExpand, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_ - 1, 0));
   scrollbar_controller_->Animate(time);
   time += kThinningDuration;
   scrollbar_controller_->Animate(time);
@@ -199,7 +213,7 @@
 // First move the pointer over the scrollbar off of it. Make sure the thinning
 // animation kicked off in DidMouseMoveOffScrollbar gets overridden by the
 // thickening animation in the DidMouseMove call.
-TEST_F(SingleScrollbarAnimationControllerThinningTest,
+TEST_P(SingleScrollbarAnimationControllerThinningTest,
        MouseNearThenAwayWhileAnimating) {
   base::TimeTicks time;
   time += base::Seconds(1);
@@ -232,7 +246,8 @@
   // Now we get a notification for the mouse moving over the scroller. The
   // animation is reset to the thickening direction but we won't start
   // thickening until the new animation catches up to the current thickness.
-  scrollbar_controller_->DidMouseMove(NearScrollbar(-1, 0));
+  scrollbar_controller_->DidMouseMove(
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_, 0));
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f - (1.0f - kIdleThicknessScale) / 2.0f,
                   scrollbar_layer_->thumb_thickness_scale_factor());
@@ -264,7 +279,7 @@
 // First move the pointer on the scrollbar, then press it, then away.
 // Confirm that the bar gets thick. Then mouse up. Confirm that
 // the bar gets thin.
-TEST_F(SingleScrollbarAnimationControllerThinningTest,
+TEST_P(SingleScrollbarAnimationControllerThinningTest,
        MouseCaptureAndReleaseOutOfBar) {
   base::TimeTicks time;
   time += base::Seconds(1);
@@ -289,7 +304,7 @@
   // Move outside the "near" threshold. Because the scrollbar is captured it
   // should remain thick.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerExpand, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_ - 1, 0));
   time += kThinningDuration;
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
@@ -309,7 +324,7 @@
 // First move the pointer on the scrollbar, then press it, then away.  Confirm
 // that the bar gets thick. Then move point on the scrollbar and mouse up.
 // Confirm that the bar stays thick.
-TEST_F(SingleScrollbarAnimationControllerThinningTest,
+TEST_P(SingleScrollbarAnimationControllerThinningTest,
        MouseCaptureAndReleaseOnBar) {
   base::TimeTicks time;
   time += base::Seconds(1);
@@ -331,7 +346,7 @@
 
   // Move away from scrollbar. Nothing should change.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(kMouseMoveDistanceToTriggerExpand, 0));
+      NearScrollbar(mouse_move_distance_to_trigger_expand_ + 1, 0));
   time += base::Seconds(1);
   scrollbar_controller_->Animate(time);
   time += base::Seconds(10);
@@ -341,7 +356,7 @@
   // Move over scrollbar and release. Since we're near the scrollbar, it should
   // remain thick.
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerExpand + 1, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_, 0));
   scrollbar_controller_->DidMouseUp();
   time += base::Seconds(1);
   scrollbar_controller_->Animate(time);
@@ -351,13 +366,14 @@
 }
 
 // Tests that the thickening/thinning effects are animated.
-TEST_F(SingleScrollbarAnimationControllerThinningTest, ThicknessAnimated) {
+TEST_P(SingleScrollbarAnimationControllerThinningTest, ThicknessAnimated) {
   base::TimeTicks time;
   time += base::Seconds(1);
 
   // Move mouse near scrollbar. Test that at half the duration time, the
   // thickness is half way through its animation.
-  scrollbar_controller_->DidMouseMove(NearScrollbar(-1, 0));
+  scrollbar_controller_->DidMouseMove(
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_, 0));
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(kIdleThicknessScale,
                   scrollbar_layer_->thumb_thickness_scale_factor());
@@ -374,7 +390,7 @@
   // Move mouse away from scrollbar. Same check.
   time += base::Seconds(1);
   scrollbar_controller_->DidMouseMove(
-      NearScrollbar(-kMouseMoveDistanceToTriggerExpand, 0));
+      NearScrollbar(-mouse_move_distance_to_trigger_expand_ - 1, 0));
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
 
@@ -389,5 +405,64 @@
                   scrollbar_layer_->thumb_thickness_scale_factor());
 }
 
+// Make sure the Fluent scrollbar transitions to the full mode (thick) after
+// moving the mouse over scrollbar track and get back to the minimal mode (thin)
+// when moved away both inside and outside the layer.
+TEST_F(SingleScrollbarAnimationControllerThinningFluentTest,
+       FluentMouseOverTrack) {
+  base::TimeTicks time;
+  time += base::Seconds(1);
+
+  // Move the mouse over the scrollbar track.
+  scrollbar_controller_->DidMouseMove(NearScrollbar(0, 75));
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(kIdleThicknessScale,
+                  scrollbar_layer_->thumb_thickness_scale_factor());
+
+  // Should animate to the full mode.
+  time += kThinningDuration;
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+
+  // Subsequent moves should not change anything.
+  scrollbar_controller_->DidMouseMove(NearScrollbar(0, 75));
+  scrollbar_controller_->Animate(time);
+  time += base::Seconds(10);
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+
+  // Moving away from the scrollbar track should trigger the transition to the
+  // minimal mode.
+  scrollbar_controller_->DidMouseMove(NearScrollbar(-1, 75));
+  scrollbar_controller_->Animate(time);
+  time += kThinningDuration;
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(kIdleThicknessScale,
+                  scrollbar_layer_->thumb_thickness_scale_factor());
+
+  // Move the mouse over the scrollbar track again. Scrollbar should be in the
+  // full mode.
+  scrollbar_controller_->DidMouseMove(NearScrollbar(0, 75));
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(kIdleThicknessScale,
+                  scrollbar_layer_->thumb_thickness_scale_factor());
+  time += kThinningDuration;
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+
+  // Moving away from the scrollbar track out of the layer should also
+  // trigger the transition to the minimal mode.
+  scrollbar_controller_->DidMouseMove(NearScrollbar(kThumbThickness + 1, 75));
+  scrollbar_controller_->Animate(time);
+  time += kThinningDuration;
+  scrollbar_controller_->Animate(time);
+  EXPECT_FLOAT_EQ(kIdleThicknessScale,
+                  scrollbar_layer_->thumb_thickness_scale_factor());
+}
+
+INSTANTIATE_TEST_SUITE_P(All,
+                         SingleScrollbarAnimationControllerThinningTest,
+                         Bool());
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/layers/surface_layer_impl.cc b/cc/layers/surface_layer_impl.cc
index b069069..9a22927 100644
--- a/cc/layers/surface_layer_impl.cc
+++ b/cc/layers/surface_layer_impl.cc
@@ -219,9 +219,11 @@
 
 void SurfaceLayerImpl::GetDebugBorderProperties(SkColor4f* color,
                                                 float* width) const {
-  *color = DebugColors::SurfaceLayerBorderColor();
-  *width = DebugColors::SurfaceLayerBorderWidth(
-      layer_tree_impl() ? layer_tree_impl()->device_scale_factor() : 1);
+  if (color)
+    *color = DebugColors::SurfaceLayerBorderColor();
+  if (width)
+    *width = DebugColors::SurfaceLayerBorderWidth(
+        layer_tree_impl() ? layer_tree_impl()->device_scale_factor() : 1);
 }
 
 void SurfaceLayerImpl::AppendRainbowDebugBorder(
@@ -233,8 +235,8 @@
       render_pass->CreateAndAppendSharedQuadState();
   PopulateSharedQuadState(shared_quad_state, contents_opaque());
 
-  float border_width;
-  GetDebugBorderProperties(nullptr, &border_width);
+  float border_width = DebugColors::SurfaceLayerBorderWidth(
+      layer_tree_impl() ? layer_tree_impl()->device_scale_factor() : 1);
 
   // TODO(crbug.com/1308932) Make these SkColor4fs
   SkColor colors[] = {
diff --git a/cc/metrics/compositor_timing_history.cc b/cc/metrics/compositor_timing_history.cc
index a9c16c2..067c07f 100644
--- a/cc/metrics/compositor_timing_history.cc
+++ b/cc/metrics/compositor_timing_history.cc
@@ -30,8 +30,6 @@
 
   // Latency measurements
   virtual void AddBeginImplFrameLatency(base::TimeDelta delta) = 0;
-  virtual void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
-                                                  TreePriority priority) = 0;
   virtual void AddInvalidationToReadyToActivateDuration(
       base::TimeDelta duration,
       TreePriority priority) = 0;
@@ -346,13 +344,6 @@
         "Scheduling.Renderer.BeginImplFrameLatency", delta);
   }
 
-  void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
-                                          TreePriority priority) override {
-    UMA_HISTOGRAM_READY_TO_ACTIVATE(
-        "Scheduling.Renderer.CommitToReadyToActivateDuration", duration,
-        priority);
-  }
-
   void AddInvalidationToReadyToActivateDuration(
       base::TimeDelta duration,
       TreePriority priority) override {
@@ -389,13 +380,6 @@
         "Scheduling.Browser.BeginImplFrameLatency", delta);
   }
 
-  void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
-                                          TreePriority priority) override {
-    UMA_HISTOGRAM_READY_TO_ACTIVATE(
-        "Scheduling.Browser.CommitToReadyToActivateDuration", duration,
-        priority);
-  }
-
   void AddInvalidationToReadyToActivateDuration(
       base::TimeDelta duration,
       TreePriority priority) override {
@@ -423,8 +407,6 @@
   void AddDrawIntervalWithCustomPropertyAnimations(
       base::TimeDelta inverval) override {}
   void AddBeginImplFrameLatency(base::TimeDelta delta) override {}
-  void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
-                                          TreePriority priority) override {}
   void AddInvalidationToReadyToActivateDuration(
       base::TimeDelta duration,
       TreePriority priority) override {}
@@ -755,8 +737,6 @@
 
     base::TimeDelta commit_to_ready_to_activate_estimate =
         CommitToReadyToActivateDurationEstimate();
-    uma_reporter_->AddCommitToReadyToActivateDuration(time_since_commit,
-                                                      tree_priority_);
     rendering_stats_instrumentation_->AddCommitToActivateDuration(
         time_since_commit, commit_to_ready_to_activate_estimate);
 
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc
index 5dc7122..95ce7f4 100644
--- a/cc/tiles/gpu_image_decode_cache.cc
+++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -27,6 +27,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "cc/base/devtools_instrumentation.h"
+#include "cc/base/features.h"
 #include "cc/base/histograms.h"
 #include "cc/base/switches.h"
 #include "cc/paint/paint_flags.h"
@@ -551,7 +552,10 @@
                          const ImageDecodeCache::TracingInfo& tracing_info,
                          GpuImageDecodeCache::DecodeTaskType task_type)
       : TileTask(TileTask::SupportsConcurrentExecution::kYes,
-                 TileTask::SupportsBackgroundThreadPriority::kYes),
+                 (base::FeatureList::IsEnabled(
+                      features::kNormalPriorityImageDecoding)
+                      ? TileTask::SupportsBackgroundThreadPriority::kNo
+                      : TileTask::SupportsBackgroundThreadPriority::kYes)),
         cache_(cache),
         image_(draw_image),
         tracing_info_(tracing_info),
diff --git a/cc/tiles/software_image_decode_cache.cc b/cc/tiles/software_image_decode_cache.cc
index 156c8aa..6b02c7f 100644
--- a/cc/tiles/software_image_decode_cache.cc
+++ b/cc/tiles/software_image_decode_cache.cc
@@ -20,6 +20,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "cc/base/devtools_instrumentation.h"
+#include "cc/base/features.h"
 #include "cc/base/histograms.h"
 #include "cc/raster/tile_task.h"
 #include "cc/tiles/mipmap_util.h"
@@ -65,7 +66,10 @@
       SoftwareImageDecodeCache::DecodeTaskType task_type,
       const ImageDecodeCache::TracingInfo& tracing_info)
       : TileTask(TileTask::SupportsConcurrentExecution::kYes,
-                 TileTask::SupportsBackgroundThreadPriority::kYes),
+                 (base::FeatureList::IsEnabled(
+                      features::kNormalPriorityImageDecoding)
+                      ? TileTask::SupportsBackgroundThreadPriority::kNo
+                      : TileTask::SupportsBackgroundThreadPriority::kYes)),
         cache_(cache),
         image_key_(image_key),
         paint_image_(paint_image),
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index d5f2a4a..1294176 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -5871,8 +5871,9 @@
 
   const float kDistanceToTriggerThumb =
       vert_scrollbar->ComputeThumbQuadRect().height() +
-      SingleScrollbarAnimationControllerThinning::
-          kMouseMoveDistanceToTriggerExpand;
+      scrollbar_controller
+          ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+          .MouseMoveDistanceToTriggerExpand();
 
   // Move the mouse near the thumb while its at the viewport top.
   auto near_thumb_at_top = gfx::Point(295, kDistanceToTriggerThumb - 1);
@@ -5926,9 +5927,10 @@
   settings.scrollbar_fade_duration = base::Milliseconds(300);
   settings.scrollbar_animator = LayerTreeSettings::AURA_OVERLAY;
 
+  const int thumb_thickness = 15;
   gfx::Size viewport_size(300, 200);
   gfx::Size content_size(1000, 1000);
-  gfx::Size scrollbar_size(gfx::Size(15, viewport_size.height()));
+  gfx::Size scrollbar_size(gfx::Size(thumb_thickness, viewport_size.height()));
 
   CreateHostImpl(settings, CreateLayerTreeFrameSink());
   host_impl_->active_tree()->SetDeviceScaleFactor(device_scale_factor);
@@ -5936,7 +5938,8 @@
   LayerImpl* root_scroll = OuterViewportScrollLayer();
   // The scrollbar is on the left side.
   auto* scrollbar = AddLayer<SolidColorScrollbarLayerImpl>(
-      host_impl_->active_tree(), ScrollbarOrientation::VERTICAL, 15, 0, true);
+      host_impl_->active_tree(), ScrollbarOrientation::VERTICAL,
+      thumb_thickness, 0, true);
   SetupScrollbarLayer(root_scroll, scrollbar);
   scrollbar->SetBounds(scrollbar_size);
   TouchActionRegion touch_action_region;
@@ -5951,28 +5954,31 @@
           root_scroll->element_id());
 
   const float kMouseMoveDistanceToTriggerFadeIn =
-      ScrollbarAnimationController::kMouseMoveDistanceToTriggerFadeIn;
+      scrollbar_animation_controller
+          ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+          .MouseMoveDistanceToTriggerFadeIn();
 
   const float kMouseMoveDistanceToTriggerExpand =
-      SingleScrollbarAnimationControllerThinning::
-          kMouseMoveDistanceToTriggerExpand;
+      scrollbar_animation_controller
+          ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+          .MouseMoveDistanceToTriggerExpand();
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerFadeIn, 1));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerFadeIn + 1, 1));
   EXPECT_FALSE(scrollbar_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_animation_controller->MouseIsNearScrollbarThumb(
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerExpand - 1, 10));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerExpand, 10));
   EXPECT_TRUE(scrollbar_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_TRUE(scrollbar_animation_controller->MouseIsNearScrollbarThumb(
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerFadeIn, 100));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerFadeIn + 1, 100));
   EXPECT_FALSE(scrollbar_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_animation_controller->MouseIsNearScrollbarThumb(
@@ -15917,11 +15923,14 @@
   settings.scrollbar_fade_duration = base::Milliseconds(300);
   settings.scrollbar_animator = LayerTreeSettings::AURA_OVERLAY;
 
+  const int thumb_thickness = 15;
   gfx::Size viewport_size(300, 200);
   gfx::Size content_size(1000, 1000);
   gfx::Size child_layer_size(250, 150);
-  gfx::Size scrollbar_size_1(gfx::Size(15, viewport_size.height()));
-  gfx::Size scrollbar_size_2(gfx::Size(15, child_layer_size.height()));
+  gfx::Size scrollbar_size_1(
+      gfx::Size(thumb_thickness, viewport_size.height()));
+  gfx::Size scrollbar_size_2(
+      gfx::Size(thumb_thickness, child_layer_size.height()));
 
   CreateHostImpl(settings, CreateLayerTreeFrameSink());
   host_impl_->active_tree()->SetDeviceScaleFactor(1);
@@ -15935,7 +15944,8 @@
 
   // scrollbar_1 on root scroll.
   auto* scrollbar_1 = AddLayer<SolidColorScrollbarLayerImpl>(
-      host_impl_->active_tree(), ScrollbarOrientation::VERTICAL, 15, 0, true);
+      host_impl_->active_tree(), ScrollbarOrientation::VERTICAL,
+      thumb_thickness, 0, true);
   SetupScrollbarLayer(root_scroll, scrollbar_1);
   scrollbar_1->SetBounds(scrollbar_size_1);
   TouchActionRegion touch_action_region;
@@ -15953,16 +15963,19 @@
   EXPECT_TRUE(scrollbar_1_animation_controller);
 
   const float kMouseMoveDistanceToTriggerFadeIn =
-      ScrollbarAnimationController::kMouseMoveDistanceToTriggerFadeIn;
+      scrollbar_1_animation_controller
+          ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+          .MouseMoveDistanceToTriggerFadeIn();
 
   const float kMouseMoveDistanceToTriggerExpand =
-      SingleScrollbarAnimationControllerThinning::
-          kMouseMoveDistanceToTriggerExpand;
+      scrollbar_1_animation_controller
+          ->GetScrollbarAnimationController(ScrollbarOrientation::VERTICAL)
+          .MouseMoveDistanceToTriggerExpand();
 
   // Mouse moves close to the scrollbar, goes over the scrollbar, and
   // moves back to where it was.
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerFadeIn, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerFadeIn + 1, 0));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -15971,7 +15984,7 @@
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerExpand, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerExpand + 1, 0));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -15980,7 +15993,7 @@
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(14 + kMouseMoveDistanceToTriggerExpand, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerExpand, 0));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -15997,7 +16010,7 @@
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(14 + kMouseMoveDistanceToTriggerExpand, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerExpand, 0));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -16006,7 +16019,7 @@
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerExpand, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerExpand + 1, 0));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -16015,7 +16028,7 @@
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(15 + kMouseMoveDistanceToTriggerFadeIn, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerFadeIn + 1, 0));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -16025,7 +16038,8 @@
 
   // scrollbar_2 on child.
   auto* scrollbar_2 = AddLayer<SolidColorScrollbarLayerImpl>(
-      host_impl_->active_tree(), ScrollbarOrientation::VERTICAL, 15, 0, true);
+      host_impl_->active_tree(), ScrollbarOrientation::VERTICAL,
+      thumb_thickness, 0, true);
   LayerImpl* child =
       AddScrollableLayer(root_scroll, gfx::Size(100, 100), child_layer_size);
   child->SetOffsetToTransformParent(gfx::Vector2dF(50, 50));
@@ -16063,7 +16077,7 @@
       ScrollbarOrientation::VERTICAL));
 
   GetInputHandler().MouseMoveAt(
-      gfx::Point(64 + kMouseMoveDistanceToTriggerExpand, 50));
+      gfx::Point(50 + thumb_thickness + kMouseMoveDistanceToTriggerExpand, 50));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_FALSE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
@@ -16077,7 +16091,7 @@
   EXPECT_FALSE(scrollbar_2_animation_controller->MouseIsOverScrollbarThumb(
       ScrollbarOrientation::VERTICAL));
   GetInputHandler().MouseMoveAt(
-      gfx::Point(14 + kMouseMoveDistanceToTriggerExpand, 0));
+      gfx::Point(thumb_thickness + kMouseMoveDistanceToTriggerExpand, 0));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbar(
       ScrollbarOrientation::VERTICAL));
   EXPECT_TRUE(scrollbar_1_animation_controller->MouseIsNearScrollbarThumb(
diff --git a/chrome/VERSION b/chrome/VERSION
index fd3a29a0..cb80e4f8 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=105
 MINOR=0
-BUILD=5162
+BUILD=5163
 PATCH=0
diff --git a/chrome/android/features/android_library_factory/test/BUILD.gn b/chrome/android/features/android_library_factory/test/BUILD.gn
index c10bb01..1de7fa2 100644
--- a/chrome/android/features/android_library_factory/test/BUILD.gn
+++ b/chrome/android/features/android_library_factory/test/BUILD.gn
@@ -19,7 +19,7 @@
     {
       target = "nocompile_gn:android_library_factory_missing_symbol_test_java"
       nocompile_sources = []
-      expected_compile_output_regex = "error: package org\.chromium\.chrome\.browser\.android_library_factory does not exist\nHint: Add \"//chrome/android/features/android_library_factory/test/nocompile_gn:b_factory_java\" to deps of //chrome/android/features/android_library_factory/test/nocompile_gn:android_library_factory_missing_symbol_test_java"
+      expected_compile_output_regex = "Hint: Try adding the following to //chrome/android/features/android_library_factory/test/nocompile_gn:android_library_factory_missing_symbol_test_java\n *\"//chrome/android/features/android_library_factory/test/nocompile_gn:b_factory_java\""
     },
   ]
 }
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index c7dd626..4b61865 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">Die sertifikaat wat deur netwerk "<ph name="NETWORK_NAME" />" vereis word, is óf nie geïnstalleer nie, óf dis nie meer geldig nie. Kry asseblief 'n nuwe sertifikaat en probeer weer koppel.</translation>
 <translation id="1375321115329958930">Gestoorde wagwoorde</translation>
 <translation id="1375557162880614858">Wil jy ChromeVox, Chrome OS Flex se ingeboude skermleser, aktiveer?</translation>
+<translation id="1375938286942050085">Opstelling is voltooi! Kry volgende jou toestel vir speletjies gereed</translation>
 <translation id="137651782282853227">Gestoorde adresse sal hier verskyn</translation>
 <translation id="1376771218494401509">Naam en venster</translation>
 <translation id="1377600615067678409">Slaan voorlopig oor</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Stel verstekafskopbladsy terug?</translation>
 <translation id="1388253969141979417">Mag jou mikrofoon gebruik</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> sal herbegin wanneer opdaterings voltooi is.</translation>
+<translation id="1389601498324964367">Kwotabestuurde berging</translation>
 <translation id="139013308650923562">Mag lettertipes wat op jou toestel geïnstalleer is, gebruik</translation>
 <translation id="1390548061267426325">Maak as gewone oortjie oop</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> is nie gemagtig om drukwerk na <ph name="PRINTER_NAME" /> toe te stuur nie. Kontak jou administrateur.</translation>
@@ -1075,6 +1077,7 @@
 <translation id="1992924914582925289">Verwyder van toestel</translation>
 <translation id="1994173015038366702">Werf-URL</translation>
 <translation id="1995916364271252349">Beheer watter inligting werwe kan gebruik en wys (ligging, kamera, opspringers en meer)</translation>
+<translation id="1997433994358798851">Chrome het toestemming nodig om Bluetooth te gebruik om jou toestel te koppel</translation>
 <translation id="1997616988432401742">Jou sertifikate</translation>
 <translation id="1999115740519098545">Met afskop</translation>
 <translation id="2000419248597011803">Stuur 'n paar webkoekies en soektogte vanaf die adresbalk en soekkassie na jou versteksoekenjin toe</translation>
@@ -1739,6 +1742,7 @@
 <translation id="25899519884572181">Verlaat lesermodus</translation>
 <translation id="2593499352046705383">Maak seker dat jy 'n rugsteun van jou data het voordat jy begin. As jy <ph name="DEVICE_OS" /> installeer, sal jou hardeskyf vervang word. Kom meer te wete by g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Deursoek Google of tik URL in</translation>
+<translation id="2599048253926156421">Gebruikernaam is na knipbord gekopieer</translation>
 <translation id="2602501489742255173">Swiep op om te begin</translation>
 <translation id="2603115962224169880">Maak rekenaar skoon</translation>
 <translation id="2603355571917519942">Voice Match is gereed</translation>
@@ -1962,6 +1966,7 @@
 <translation id="2804043232879091219">Die alternatiewe blaaier kon nie oopgemaak word nie</translation>
 <translation id="2804667941345577550">Jy sal by hierdie werf afgemeld word, insluitend in oop oortjies</translation>
 <translation id="2804680522274557040">Kamera is afgeskakel</translation>
+<translation id="280518252911523675">As jy voortgaan sonder om jou ou wagwoord in te voer, sal jou plaaslike data uitgevee word. Jy sal met jou Google-rekening aanmeld om hierdie gebruiker weer op te stel.</translation>
 <translation id="2805539617243680210">Jy's gereed!</translation>
 <translation id="2805646850212350655">Microsoft-enkripterende lêerstelsel</translation>
 <translation id="2805756323405976993">Programme</translation>
@@ -3077,6 +3082,7 @@
 <translation id="3895090224522145010">Kerberos-gebruikernaam</translation>
 <translation id="389521680295183045">Werwe kan vra om te weet wanneer jy jou toestel aktief gebruik</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{'n prent}other{# prente}}</translation>
+<translation id="3897746662269329507">Jou <ph name="DEVICE_TYPE" /> is gebou vir speletjies. Die Verken-program sal volgende oopmaak; hier kan jy toegang tot honderde van die jongste speletjies kry, speletjie-aanbiedings sien, en speletjiekenmerke ontdek wat op jou toestel is.</translation>
 <translation id="3898233949376129212">Toesteltaal</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> wil: <ph name="FIRST_PERMISSION" /> en <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Kies sleutelbord</translation>
@@ -3227,6 +3233,7 @@
 <translation id="4033471457476425443">Voeg nuwe vouer by</translation>
 <translation id="4033711848170683365">Dit sal blaaierdata op hierdie toestel permanent uitvee. Die Google-rekeninge in hierdie profiel kan deur ander programme op jou <ph name="DEVICE_TYPE" /> gebruik word. Jy kan hierdie rekeninge verwyder in <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Veilige werwe kan dalk inhoud, soos prente en webrame wat nie veilig is nie, inbed</translation>
+<translation id="4034741552964543387">Gaan voort sonder plaaslike data</translation>
 <translation id="4034824040120875894">Drukker</translation>
 <translation id="4035758313003622889">Taakbestuurder</translation>
 <translation id="4035877632587724847">Moenie toelaat nie</translation>
@@ -3418,6 +3425,7 @@
 <translation id="4242533952199664413">Maak instellings oop</translation>
 <translation id="4242577469625748426">Kon nie beleidinstellings op die toestel installeer nie: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Drukker is onderbreek</translation>
+<translation id="424423026762293842">Stel jou plaaslike data terug</translation>
 <translation id="4244238649050961491">Vind meer stilusprogramme</translation>
 <translation id="4246980464509998944">Bykomende kommentaar:</translation>
 <translation id="424726838611654458">Maak altyd in Adobe Reader oop</translation>
@@ -4977,6 +4985,7 @@
 <translation id="5792728279623964091">Tik asseblief op jou aan/af-skakelaar</translation>
 <translation id="5793339252089865437">As jy die opdatering oor jou selnetwerk aflaai, kan dit tot bykomende koste lei.</translation>
 <translation id="5793420564274426163">Saambindingbevestiging</translation>
+<translation id="5793430094159150686">Jou wagwoord het verander. Jy moet jou ou wagwoord invoer as jy jou plaaslike data wil terugstel.</translation>
 <translation id="5794034487966529952"><ph name="NUM_BROWSERS" /> blaaiervensters is op werkskerm <ph name="DESK_TITLE" /> oop</translation>
 <translation id="5794414402486823030">Altyd oop met die stelselkyker</translation>
 <translation id="5794700615121138172">Linux- gedeelde lêers</translation>
@@ -5901,6 +5910,7 @@
 <translation id="6700093763382332031">Sellulêre SIM-slot</translation>
 <translation id="6700480081846086223">Saai <ph name="HOST_NAME" /> uit</translation>
 <translation id="6701535245008341853">Kon nie profiel kry nie</translation>
+<translation id="6701824422332982935">Herlaai die bladsy om hierdie uitbreidings te gebruik</translation>
 <translation id="6702639462873609204">Wysig …</translation>
 <translation id="6703212423117969852">Jy kan later in Chrome weer probeer.</translation>
 <translation id="6703254819490889819">Laai rugsteun terug</translation>
@@ -7128,6 +7138,7 @@
 <translation id="7903742244674067440">Jy het sertifikate op lêer wat hierdie sertifikaatoutoriteite identifiseer</translation>
 <translation id="7903925330883316394">Nutsding: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Maak Linux-poorte aan ander toestelle op jou netwerk beskikbaar.</translation>
+<translation id="7906440585529721295">Plaaslike data sal uitgevee word</translation>
 <translation id="7907837847548254634">Merk vinnig die voorwerp waarop gefokus word</translation>
 <translation id="7908378463497120834">Jammer, minstens een deel van jou eksterne bergingtoestel kon nie gekoppel word nie.</translation>
 <translation id="7909324225945368569">Hernoem jou profiel</translation>
@@ -7465,6 +7476,7 @@
 <translation id="822050276545350872">Van nou af word geen wagtydperk vereis nie</translation>
 <translation id="8221491193165283816">Jy blokkeer gewoonlik kennisgewings. Klik hier sodat dié werf jou in kennis kan stel.</translation>
 <translation id="822347941086490485">Soek tans HID-toestelle …</translation>
+<translation id="8223573963214454788">Gaan voort en vee data uit</translation>
 <translation id="8225046344534779393">Gaan internetverbinding na</translation>
 <translation id="8225265270453771718">Deel 'n programvenster</translation>
 <translation id="8226222018808695353">Verbode</translation>
@@ -7565,6 +7577,7 @@
 <translation id="8314381333424235892">Uitbreiding ontbreek of is gedeïnstalleer</translation>
 <translation id="831440797644402910">Kan nie hierdie vouer oopmaak nie</translation>
 <translation id="8314835274931377415">Begin skakelaartoegangopstelling?</translation>
+<translation id="8317582043908962055">Herken PDF-teks</translation>
 <translation id="8317671367883557781">Voeg netwerkverbinding by</translation>
 <translation id="8319414634934645341">Uitgebreide sleutelgebruik</translation>
 <translation id="8321837372750396788">Hierdie <ph name="DEVICE_TYPE" /> sal bestuur word deur <ph name="MANAGER" />.</translation>
@@ -8450,6 +8463,7 @@
 <translation id="9203398526606335860">Profielskepping geaktiveer</translation>
 <translation id="9203904171912129171">Kies 'n toestel</translation>
 <translation id="9206889157914079472">Stilusaantekening van sluitskerm af</translation>
+<translation id="9208192193641542858">Plaaslike data word deur jou ou wagwoord beskerm. As jy jou wagwoord onlangs verander het, kan jy probeer om jou ou wagwoord te gebruik.</translation>
 <translation id="9209563766569767417">Gaan tans die Linux-houer se opstelling na</translation>
 <translation id="9209689095351280025">Werwe kan nie webkoekies gebruik wat jou oral op die web naspoor nie</translation>
 <translation id="9211177926627870898">Opdatering vereis</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index c182a8a..293351b 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -383,6 +383,7 @@
 <translation id="1374844444528092021">নেটওয়ার্কের প্রয়োজনীয় সার্টিফিকেট "<ph name="NETWORK_NAME" />" হয় ইনস্টল করা নেই অথবা তা আর বৈধ নয়৷ অনুগ্রহ করে একটি নতুন সার্টিফিকেট আনুন আর সংযোগ করতে পুনরায় চেষ্টা করুন৷</translation>
 <translation id="1375321115329958930">সংরক্ষিত পাসওয়ার্ড</translation>
 <translation id="1375557162880614858">আপনি কি ChromeOS Flex-এর বিল্ট-ইন স্ক্রিন রিডার ChromeVox অ্যাক্টিভেট চালু করতে চাইছেন?</translation>
+<translation id="1375938286942050085">সেট-আপ সম্পূর্ণ হয়েছে! পরবর্তী গেমিংয়ের জন্য আপনার ডিভাইস তৈরি করুন</translation>
 <translation id="137651782282853227">সংরক্ষিত ঠিকানাগুলি এখানে দেখা যাবে</translation>
 <translation id="1376771218494401509">নাম ও উইন্ডো...</translation>
 <translation id="1377600615067678409">এখন ছেড়ে যান</translation>
@@ -397,6 +398,7 @@
 <translation id="138784436342154190">ডিফল্ট শুরুর পৃষ্ঠা পুনরুদ্ধার করবেন?</translation>
 <translation id="1388253969141979417">মাইক্রোফোন ব্যবহার করার অনুমতি দেওয়া হয়েছে</translation>
 <translation id="1388728792929436380">আপডেট সম্পূর্ণ হলে, <ph name="DEVICE_TYPE" /> রিস্টার্ট করা হবে।</translation>
+<translation id="1389601498324964367">কোটা-ম্যানেজ করা স্টোরেজ</translation>
 <translation id="139013308650923562">সাইটকে আপনার ডিভাইসে ইনস্টল করা ফন্ট ব্যবহার করতে দেয়</translation>
 <translation id="1390548061267426325">নিয়মিত ট্যাব রূপে খুলুন</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" />-কে <ph name="PRINTER_NAME" />-এ প্রিন্ট করার অনুমতি দেওয়া নেই। অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation>
@@ -1076,6 +1078,7 @@
 <translation id="1992924914582925289">ডিভাইস থেকে সরিয়ে দিন</translation>
 <translation id="1994173015038366702">সাইট URL</translation>
 <translation id="1995916364271252349">সাইট কোন কোন তথ্য ব্যবহার করে আর দেখায় তা নিয়ন্ত্রণ করে (লোকেশন, ক্যামেরা, পপ-আপ এবং আরও অনেক কিছু)</translation>
+<translation id="1997433994358798851">আপনার ডিভাইসে কানেক্ট করার জন্য ব্লুটুথ ব্যবহার করার জন্য Chrome এর অনুমতি প্রয়োজন</translation>
 <translation id="1997616988432401742">আপনার সংশাপত্রসমূহ</translation>
 <translation id="1999115740519098545">প্রারম্ভে</translation>
 <translation id="2000419248597011803">অ্যাড্রেস বার এবং সার্চ বক্স থেকে সার্চের তথ্য এবং কিছু কুকি আপনার ডিফল্ট সার্চ ইঞ্জিনে পাঠায়</translation>
@@ -1740,6 +1743,7 @@
 <translation id="25899519884572181">রিডার মোড থেকে বেরিয়ে আসুন</translation>
 <translation id="2593499352046705383">চালু করার আগে, আপনার ডেটার ব্যাক-আপ নেওয়া আছে কিনা তা নিশ্চিত করুন। <ph name="DEVICE_OS" /> ইনস্টল করলে আপনার হার্ড ড্রাইভে থাকা সব ডেটা মুছে যাবে। g.co/flex/InstallGuide থেকে আরও জানুন।</translation>
 <translation id="2594999711683503743">Google এ খুঁজুন বা URL টাইপ করুন</translation>
+<translation id="2599048253926156421">ব্যবহারকারীর নাম ক্লিপবোর্ডে কপি করা হয়েছে</translation>
 <translation id="2602501489742255173">শুরু করতে স্ক্রিনের উপরের দিকে সোয়াইপ করুন</translation>
 <translation id="2603115962224169880">কম্পিউটার সাফ করুন</translation>
 <translation id="2603355571917519942">Voice Match ব্যবহারের জন্য প্রস্তুত</translation>
@@ -1962,6 +1966,7 @@
 <translation id="2804043232879091219">অন্য ব্রাউজারটি খোলা যায়নি</translation>
 <translation id="2804667941345577550">খোলা ট্যাবগুলি ছাড়াও এই সাইট থেকে সাইন-আউট হয়ে যাবেন</translation>
 <translation id="2804680522274557040">ক্যামেরা বন্ধ করা আছে</translation>
+<translation id="280518252911523675">আপনি যদি পুরানো পাসওয়ার্ড না লিখে চালিয়ে যান, তাহলে আপনার স্থানীয় ডেটা মুছে যাবে। এই ব্যবহারকারীকে আবার সেট-আপ করতে আপনি Google অ্যাকাউন্ট ব্যবহার করে সাইন-ইন করবেন।</translation>
 <translation id="2805539617243680210">এবার আপনি লগ-ইন করে ডিভাইসটি ব্যবহার করতে পারবেন!</translation>
 <translation id="2805646850212350655">Microsoft Encrypting File System</translation>
 <translation id="2805756323405976993">অ্যাপ্স</translation>
@@ -3077,6 +3082,7 @@
 <translation id="3895090224522145010">Kerberos ইউজারনেম</translation>
 <translation id="389521680295183045">আপনি কখন ডিভাইস সক্রিয়ভাবে ব্যবহার করেন তা সাইট জানতে চাইতে পারে</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{একটি ছবি}one{#টি ছবি}other{#টি ছবি}}</translation>
+<translation id="3897746662269329507">আপনার <ph name="DEVICE_TYPE" /> গেমিংয়ের জন্য বিল্ট করা হয় তারপরে Explore অ্যাপটি খুলবে যেখানে আপনি শতাধিক লেটেস্ট গেম অ্যাক্সেস করতে, গেমিং অফার দেখতে এবং আপনার ডিভাইসের সাথে আসা গেমিং ফিচার খুঁজতে পারবেন।</translation>
 <translation id="3898233949376129212">ডিভাইসের ভাষা</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> এর জন্য অনুমতি চায়: <ph name="FIRST_PERMISSION" /> এবং<ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">কীবোর্ড বেছে নিন</translation>
@@ -3226,6 +3232,7 @@
 <translation id="4033471457476425443">নতুন ফোল্ডার যোগ করুন</translation>
 <translation id="4033711848170683365">এর ফলে এই ডিভাইস থেকে ব্রাউজ করা ডেটা স্থায়ীভাবে মুছে যাবে। আপনার <ph name="DEVICE_TYPE" />-এ এই প্রোফাইলের Google অ্যাকাউন্ট অন্যান্য অ্যাপ ব্যবহার করতে পারে। আপনি <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" /> বিকল্প থেকে এইসব অ্যাকাউন্ট সরিয়ে দিতে পারবেন।</translation>
 <translation id="4033963223187371752">নিরাপদ সাইট ছবি বা ওয়েব ফ্রেমের মতো এমন কন্টেন্ট এম্বেড করতে পারে যা নিরাপদ নয়</translation>
+<translation id="4034741552964543387">স্থানীয় ডেটা ছাড়া চালিয়ে যান</translation>
 <translation id="4034824040120875894">প্রিন্টার</translation>
 <translation id="4035758313003622889">&amp;কার্য পরিচালক</translation>
 <translation id="4035877632587724847">অনুমতি দেবেন না</translation>
@@ -3418,6 +3425,7 @@
 <translation id="4242533952199664413">সেটিংস খুলুন</translation>
 <translation id="4242577469625748426">ডিভাইসে নীতি সেটিংস ইনস্টল করা যায়নি: <ph name="VALIDATION_ERROR" />৷</translation>
 <translation id="4243504193894350135">প্রিন্টার পজ করা আছে</translation>
+<translation id="424423026762293842">আপনার স্থানীয় ডেটা রিস্টোর করুন</translation>
 <translation id="4244238649050961491">আরও স্টাইলাস স্টাইলাস অ্যাপ খুঁজুন</translation>
 <translation id="4246980464509998944">অতিরিক্ত মন্তব্য:</translation>
 <translation id="424726838611654458">সর্বদা Adobe Reader এ খুলুন</translation>
@@ -4978,6 +4986,7 @@
 <translation id="5792728279623964091">পাওয়ার বোতাম ট্যাপ করুন</translation>
 <translation id="5793339252089865437">মোবাইল নেটওয়ার্কের মাধ্যমে এই আপডেট ডাউনলোড করলে, ব্যবহারের সীমা অতিক্রম করার জন্য আপনাকে চার্জ করা হতে পারে।</translation>
 <translation id="5793420564274426163">পেয়ার কনফার্মেশন</translation>
+<translation id="5793430094159150686">আপনার পাসওয়ার্ড পরিবর্তন করা হয়েছে। আপনার স্থানীয় ডেটা রিস্টোর করার জন্য, আপনাকে পুরানো পাসওয়ার্ড লিখতে হবে।</translation>
 <translation id="5794034487966529952"><ph name="DESK_TITLE" /> ডেস্কে <ph name="NUM_BROWSERS" />টি ব্রাউজার উইন্ডো খোলা আছে</translation>
 <translation id="5794414402486823030">সর্বদা সিস্টেম নিরীক্ষকের সাথে খুলুন</translation>
 <translation id="5794700615121138172">Linux-এর শেয়ার করা ফোল্ডার</translation>
@@ -5905,6 +5914,7 @@
 <translation id="6700093763382332031">মোবাইল সিম কার্ড লক</translation>
 <translation id="6700480081846086223"><ph name="HOST_NAME" /> কাস্ট করুন</translation>
 <translation id="6701535245008341853">প্রোফাইল পাওয়া যায়নি৷</translation>
+<translation id="6701824422332982935">এই এক্সটেনশন ব্যবহার করার জন্য পৃষ্ঠা আবার লোড করুন</translation>
 <translation id="6702639462873609204">&amp;সম্পাদনা করুন...</translation>
 <translation id="6703212423117969852">আপনি Chrome-এ গিয়ে পরে আবার চেষ্টা করতে পারেন।</translation>
 <translation id="6703254819490889819">ব্যাক-আপ করা ফাইল ফিরিয়ে আনুন</translation>
@@ -7131,6 +7141,7 @@
 <translation id="7903742244674067440">এই সার্টিফিকেটের কর্তৃপক্ষদের শনাক্ত করে এমন ফাইলের সার্টিফিকেটগুলি আপনার কাছে রয়েছে</translation>
 <translation id="7903925330883316394">উপযোগিতা: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">আপনার নেটওয়ার্কের অন্যান্য ডিভাইসে Linux পোর্টগুলি উপলভ্য করুন।</translation>
+<translation id="7906440585529721295">স্থানীয় ডেটা মুছে ফেলা হবে</translation>
 <translation id="7907837847548254634">ফোকাস করা অবজেক্টকে দ্রুত হাইলাইট করে দেখান</translation>
 <translation id="7908378463497120834">দুঃখিত, ডিভাইসটির কমপক্ষে একটি ভাগ আটকানো যায়নি৷</translation>
 <translation id="7909324225945368569">আপনার প্রোফাইলের নাম পরিবর্তন করুন</translation>
@@ -7469,6 +7480,7 @@
 <translation id="822050276545350872">এখান থেকে, আর অপেক্ষার প্রয়োজন নেই</translation>
 <translation id="8221491193165283816">আপনি সাধারণত বিজ্ঞপ্তি ব্লক করেন। এই সাইট থেকে বিজ্ঞপ্তি পেতে, এখানে ক্লিক করুন।</translation>
 <translation id="822347941086490485">HID ডিভাইস খোঁজা হচ্ছে...</translation>
+<translation id="8223573963214454788">চালিয়ে যান এবং ডেটা মুছুন</translation>
 <translation id="8225046344534779393">ইন্টারনেট কানেকশন চালু আছে কিনা দেখে নিন</translation>
 <translation id="8225265270453771718">একটি অ্যাপ্লিকেশনের উইন্ডো শেয়ার করুন</translation>
 <translation id="8226222018808695353">নিষিদ্ধ</translation>
@@ -7569,6 +7581,7 @@
 <translation id="8314381333424235892">আনইনস্টল করা অথবা অনুপস্থিত এক্সটেনশন</translation>
 <translation id="831440797644402910">এই ফোল্ডার খোলা যাচ্ছে না</translation>
 <translation id="8314835274931377415">অ্যাক্সেস পাল্টান সেটআপ চালু করতে চান?</translation>
+<translation id="8317582043908962055">P&amp;DF টেক্সট শনাক্ত করুন</translation>
 <translation id="8317671367883557781">নেটওয়ার্ক সংযোগ যোগ করুন</translation>
 <translation id="8319414634934645341">প্রসারিত কী ব্যবহার</translation>
 <translation id="8321837372750396788">এই <ph name="DEVICE_TYPE" />, <ph name="MANAGER" />-এর মাধ্যমে ম্যানেজ করা হবে।</translation>
@@ -8455,6 +8468,7 @@
 <translation id="9203398526606335860">&amp;প্রোফাইলিং সক্ষমিত</translation>
 <translation id="9203904171912129171">একটি ডিভাইস বেছে নিন</translation>
 <translation id="9206889157914079472">স্ক্রিন লক থাকাকালীন স্টাইলাস ব্যবহার করে নোট নেওয়া</translation>
+<translation id="9208192193641542858">স্থানীয় ডেটা আপনার পুরনো পাসওয়ার্ড দ্বারা সুরক্ষিত। আপনি সম্প্রতি পাসওয়ার্ড পরিবর্তন করে থাকলে, পুরনো পাসওয়ার্ড আবার ব্যবহার করুন।</translation>
 <translation id="9209563766569767417">Linux কন্টেনারের সেট-আপ চেক করে দেখা হচ্ছে</translation>
 <translation id="9209689095351280025">যেসব কুকি ওয়েব জুড়ে আপনার অ্যাক্টিভিটি ট্র্যাক করে, সাইট সেগুলি ব্যবহার করতে পারবে না</translation>
 <translation id="9211177926627870898">আপডেট করা প্রয়োজন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index eb346ed..c189e6d 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -384,6 +384,7 @@
 <translation id="1374844444528092021">Potvrda koju zahtijeva mreža "<ph name="NETWORK_NAME" />" nije instalirana ili više ne važi.  Nabavite novu potvrdu i pokušajte se ponovo povezati.</translation>
 <translation id="1375321115329958930">Sačuvane lozinke</translation>
 <translation id="1375557162880614858">Želite li aktivirati ChromeVox, ugrađeni čitač ekrana za ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Postavljanje je završeno! Sada pripremite uređaj za igre</translation>
 <translation id="137651782282853227">Sačuvane adrese će se pojaviti ovdje</translation>
 <translation id="1376771218494401509">Postavi naziv &amp;prozora...</translation>
 <translation id="1377600615067678409">Preskoči za sada</translation>
@@ -398,6 +399,7 @@
 <translation id="138784436342154190">Vratiti zadanu stranicu za pokretanje?</translation>
 <translation id="1388253969141979417">Dozvoljeno je korištenje vašeg mikrofona</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> će se ponovo pokrenuti kada se završe ažuriranja.</translation>
+<translation id="1389601498324964367">Pohrana kojom se upravlja kvotom</translation>
 <translation id="139013308650923562">Dozvoljeno je koristiti fontove instalirane na uređaju</translation>
 <translation id="1390548061267426325">Otvori kao običnu karticu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nema ovlaštenje da štampa na štampaču <ph name="PRINTER_NAME" />. Kontaktirajte administratora.</translation>
@@ -1074,6 +1076,7 @@
 <translation id="1992924914582925289">Ukloni s uređaja</translation>
 <translation id="1994173015038366702">URL web lokacije</translation>
 <translation id="1995916364271252349">Kontrolira koje informacije web lokacije mogu koristiti i prikazivati (lokacija, kamera, skočni prozori i drugo)</translation>
+<translation id="1997433994358798851">Chromeu je potrebno odobrenje da koristi Bluetooth za povezivanje s vašim uređajem</translation>
 <translation id="1997616988432401742">Vaše potvrde</translation>
 <translation id="1999115740519098545">Prilikom pokretanja</translation>
 <translation id="2000419248597011803">Šalje neke kolačiće i pretraživanja s trake za adresu i iz okvira za pretraživanje vašem zadanom pretraživaču</translation>
@@ -1738,6 +1741,7 @@
 <translation id="25899519884572181">Izađi iz načina rada za čitanje</translation>
 <translation id="2593499352046705383">Prije nego što počnete, provjerite jeste li napravili sigurnosnu kopiju podataka. Ako instalirate <ph name="DEVICE_OS" />, zamijenit će se svi podaci na tvrdom disku. Saznajte više na g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Pretražite Google ili upišite URL</translation>
+<translation id="2599048253926156421">Korisničko ime kopirano u međumemoriju</translation>
 <translation id="2602501489742255173">Prevucite prema gore da počnete</translation>
 <translation id="2603115962224169880">Očisti računar</translation>
 <translation id="2603355571917519942">Voice Match je spreman</translation>
@@ -1960,6 +1964,7 @@
 <translation id="2804043232879091219">Otvaranje alternativnog preglednika nije uspjelo</translation>
 <translation id="2804667941345577550">Odjavit ćete se s ove web lokacije, uključujući otvorene kartice</translation>
 <translation id="2804680522274557040">Kamera je isključena</translation>
+<translation id="280518252911523675">Ako nastavite bez unošenja stare lozinke, vaši lokalni podaci će se izbrisati. Prijavit ćete se sa svojim Google računom da ponovo postavite ovog korisnika.</translation>
 <translation id="2805539617243680210">Sve je spremno!</translation>
 <translation id="2805646850212350655">Microsoft sistem za šifriranje fajlova</translation>
 <translation id="2805756323405976993">Aplikacije</translation>
@@ -3075,6 +3080,7 @@
 <translation id="3895090224522145010">Kerberos korisničko ime</translation>
 <translation id="389521680295183045">Web lokacije mogu tražiti da znaju kada aktivno koristite uređaj</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{sliku}one{# sliku}few{# slike}other{# slika}}</translation>
+<translation id="3897746662269329507">Vaš uređaj <ph name="DEVICE_TYPE" /> je napravljen za igranje igara. Sljedeća će se otvoriti aplikacija Explore gdje možete pristupiti stotinama najnovijih igara, vidjeti ponude igara i otkriti funkcije igara koje dolaze s vašim uređajem.</translation>
 <translation id="3898233949376129212">Jezik uređaja</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> želi: <ph name="FIRST_PERMISSION" /> i <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Odaberite tastaturu</translation>
@@ -3225,6 +3231,7 @@
 <translation id="4033471457476425443">Dodaj novi folder</translation>
 <translation id="4033711848170683365">Ovo će trajno izbrisati podatke o pregledanju s ovog uređaja. Google račune na ovom profilu mogu koristiti druge aplikacije na vašem uređaju <ph name="DEVICE_TYPE" />. Ove račune možete ukloniti u odjeljku <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Sigurne web lokacije mogu ugraditi sadržaj kao što su slike ili web okviri koji nisu sigurni</translation>
+<translation id="4034741552964543387">Nastavi bez lokalnih podataka</translation>
 <translation id="4034824040120875894">Štampač</translation>
 <translation id="4035758313003622889">Upravi&amp;telj zadataka</translation>
 <translation id="4035877632587724847">Nemoj dozvoliti</translation>
@@ -3416,6 +3423,7 @@
 <translation id="4242533952199664413">Otvori postavke</translation>
 <translation id="4242577469625748426">Instaliranje postavki pravila na uređaj nije uspjelo: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Štampač je pauziran</translation>
+<translation id="424423026762293842">Vratite svoje lokalne podatke</translation>
 <translation id="4244238649050961491">Pronađite još aplikacija za upotrebu digitalne olovke</translation>
 <translation id="4246980464509998944">Dodatni komentari:</translation>
 <translation id="424726838611654458">Uvijek otvaraj u Adobe Readeru</translation>
@@ -4974,6 +4982,7 @@
 <translation id="5792728279623964091">Dodirnite dugme za uključivanje</translation>
 <translation id="5793339252089865437">Ako se odlučite na preuzimanje ažuriranja putem mobilne preže, imajte na umu da to može dovesti do prekomjernih troškova.</translation>
 <translation id="5793420564274426163">Potvrda uparivanja</translation>
+<translation id="5793430094159150686">Vaša lozinka je promijenjena Da vratite svoje lokalne podatke, morate unijeti svoju staru lozinku.</translation>
 <translation id="5794034487966529952">Na radnoj površini <ph name="DESK_TITLE" /> je otvoren sljedeći broj prozora preglednika: <ph name="NUM_BROWSERS" /></translation>
 <translation id="5794414402486823030">Uvijek otvori u prikazivaču sistema</translation>
 <translation id="5794700615121138172">Dijeljeni folderi na Linuxu</translation>
@@ -5902,6 +5911,7 @@
 <translation id="6700093763382332031">Zaključavanje SIM kartice za mobilnu mrežu</translation>
 <translation id="6700480081846086223">Emitiraj <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Učitavanje profila nije uspjelo.</translation>
+<translation id="6701824422332982935">Ponovo učitajte stranicu da koristite ove ekstenzije</translation>
 <translation id="6702639462873609204">&amp;Uredi…</translation>
 <translation id="6703212423117969852">Možete pokušati kasnije u Chromeu.</translation>
 <translation id="6703254819490889819">Vrati sigurnosnu kopiju</translation>
@@ -7129,6 +7139,7 @@
 <translation id="7903742244674067440">Imate potvrde o fajlu kojim se utvrđuje identitet ovih tijela za izdavanje potvrda</translation>
 <translation id="7903925330883316394">Uslužni proces: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Učinite Linux priključke dostupnim drugim uređajima na vašoj mreži.</translation>
+<translation id="7906440585529721295">Lokalni podaci će se izbrisati</translation>
 <translation id="7907837847548254634">Prikaži kratko isticanje fokusiranog objekta</translation>
 <translation id="7908378463497120834">Nažalost, najmanje jedna particija nije aktivirana na vaš vanjski uređaj za pohranu.</translation>
 <translation id="7909324225945368569">Promijenite ime profila</translation>
@@ -7467,6 +7478,7 @@
 <translation id="822050276545350872">Od sada pa nadalje, nije potrebno čekati</translation>
 <translation id="8221491193165283816">Obično blokirate obavještenja. Da dozvolite ovoj web lokaciji da vas obavještava, kliknite ovdje.</translation>
 <translation id="822347941086490485">Pronalaženje HID uređaja...</translation>
+<translation id="8223573963214454788">Nastavi i izbriši podatke</translation>
 <translation id="8225046344534779393">Provjerite internetsku vezu</translation>
 <translation id="8225265270453771718">Dijelite prozor aplikacije</translation>
 <translation id="8226222018808695353">Zabranjeno</translation>
@@ -7567,6 +7579,7 @@
 <translation id="8314381333424235892">Ekstenzija nedostaje ili je deinstalirana</translation>
 <translation id="831440797644402910">Nije moguće otvoriti ovaj folder</translation>
 <translation id="8314835274931377415">Pokrenuti postavljanje prekidača za pristup?</translation>
+<translation id="8317582043908962055">Prepoznaj PDF tekst</translation>
 <translation id="8317671367883557781">Dodaj mrežnu vezu</translation>
 <translation id="8319414634934645341">Produžena upotreba ključa</translation>
 <translation id="8321837372750396788">Uređajem <ph name="DEVICE_TYPE" /> će upravljati <ph name="MANAGER" />.</translation>
@@ -8454,6 +8467,7 @@
 <translation id="9203398526606335860">&amp;Profiliranje je omogućeno</translation>
 <translation id="9203904171912129171">Odaberite uređaj</translation>
 <translation id="9206889157914079472">Bilješke olovkom sa zaključanog ekrana</translation>
+<translation id="9208192193641542858">Lokalni podaci su zaštićeni vašom starom lozinkom. Ako ste nedavno promijenili lozinku, probajte koristiti staru.</translation>
 <translation id="9209563766569767417">Provjeravanje postavljanja Linux spremnika</translation>
 <translation id="9209689095351280025">Web lokacije ne mogu koristiti kolačiće koji vas prate na webu</translation>
 <translation id="9211177926627870898">Potrebno je ažuriranje</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index f501d07..8eeddb0 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">Certifikát vyžadovaný sítí „<ph name="NETWORK_NAME" />“ není nainstalován, nebo je neplatný. Nainstalujte nový certifikát a zkuste se připojit znovu.</translation>
 <translation id="1375321115329958930">Uložená hesla</translation>
 <translation id="1375557162880614858">Chcete aktivovat čtečku ChromeVox, integrovanou čtečku obrazovky pro systém ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Nastavení je dokončeno! Pokračujte tím, že zařízení připravíte k hraní</translation>
 <translation id="137651782282853227">Tady se budou zobrazovat uložené adresy</translation>
 <translation id="1376771218494401509">Název &amp;okna…</translation>
 <translation id="1377600615067678409">Zatím přeskočit</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Obnovit výchozí počáteční stránku?</translation>
 <translation id="1388253969141979417">Povolení používat váš mikrofon</translation>
 <translation id="1388728792929436380">Po dokončení aktualizací se <ph name="DEVICE_TYPE" /> restartuje.</translation>
+<translation id="1389601498324964367">Úložiště spravované kvótami</translation>
 <translation id="139013308650923562">Mohou používat písma nainstalovaná ve vašem zařízení</translation>
 <translation id="1390548061267426325">Otevřít jako běžnou kartu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nemá oprávnění k tisku na tiskárně <ph name="PRINTER_NAME" />. Obraťte se na administrátora.</translation>
@@ -1065,6 +1067,7 @@
 <translation id="1992924914582925289">Odstranit ze zařízení</translation>
 <translation id="1994173015038366702">Adresa URL webu</translation>
 <translation id="1995916364271252349">Určuje, které informace mohou weby použít a zobrazit (místo, fotoaparát, vyskakovací okna a další)</translation>
+<translation id="1997433994358798851">K připojení k vašemu zařízení potřebuje Chrome oprávnění k používání rozhraní Bluetooth</translation>
 <translation id="1997616988432401742">Vaše certifikáty</translation>
 <translation id="1999115740519098545">Při spuštění</translation>
 <translation id="2000419248597011803">Odesílá soubory cookie a vyhledávací dotazy z adresního řádku a vyhledávacího pole a několik souborů cookie vašemu výchozímu vyhledávači</translation>
@@ -1726,6 +1729,7 @@
 <translation id="25899519884572181">Ukončit režim čtečky</translation>
 <translation id="2593499352046705383">Před zahájením se ujistěte, zda máte zálohu dat. Při instalaci systému <ph name="DEVICE_OS" /> se pevný disk přepíše. Další informace najdete na stránce g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Vyhledávejte na Googlu nebo zadejte adresu URL</translation>
+<translation id="2599048253926156421">Uživatelské jméno bylo zkopírováno do schránky</translation>
 <translation id="2602501489742255173">Začněte přejetím nahoru</translation>
 <translation id="2603115962224169880">Vyčištění počítače</translation>
 <translation id="2603355571917519942">Funkce Voice Match je připravena</translation>
@@ -1948,6 +1952,7 @@
 <translation id="2804043232879091219">Alternativní prohlížeč se nepodařilo otevřít</translation>
 <translation id="2804667941345577550">Z tohoto webu budete odhlášení (i na otevřených kartách)</translation>
 <translation id="2804680522274557040">Kamera je vypnutá</translation>
+<translation id="280518252911523675">Pokud budete pokračovat bez zadání starého hesla, místní data budou smazána. Po přihlášení pomocí svého účtu Google budete tohoto uživatele moci nastavit znovu.</translation>
 <translation id="2805539617243680210">Vše je nastaveno.</translation>
 <translation id="2805646850212350655">Systém souborů Microsoft EFS</translation>
 <translation id="2805756323405976993">Aplikace</translation>
@@ -3063,6 +3068,7 @@
 <translation id="3895090224522145010">Uživatelské jméno Kerberos</translation>
 <translation id="389521680295183045">Weby mohou požádat o to, aby mohly zjišťovat, zda aktivně používáte své zařízení</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{obrázek}few{# obrázky}many{# obrázku}other{# obrázků}}</translation>
+<translation id="3897746662269329507">Zařízení <ph name="DEVICE_TYPE" /> je navrženo k hraní. Otevře se aplikace Explore, v níž budete mít přístup ke stovkám nejnovějších her, uvidíte herní nabídky a objevíte herní funkce, které jsou součástí vašeho zařízení.</translation>
 <translation id="3898233949376129212">Jazyk zařízení</translation>
 <translation id="3898327728850887246">Web <ph name="SITE_NAME" /> žádá o tato oprávnění: <ph name="FIRST_PERMISSION" /> a <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Vybrat klávesnici</translation>
@@ -3212,6 +3218,7 @@
 <translation id="4033471457476425443">Přidat novou složku</translation>
 <translation id="4033711848170683365">Tímto z tohoto zařízení trvale smažete údaje o prohlížení. Účty Google v tomto profilu mohou být používány v jiných aplikacích v zařízení <ph name="DEVICE_TYPE" />. Tyto účty můžete odstranit v sekci <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Bezpečné weby mohou obsahovat vložený obsah, např. obrázky nebo rámce, které nejsou zabezpečené</translation>
+<translation id="4034741552964543387">Pokračovat bez místních dat</translation>
 <translation id="4034824040120875894">Tiskárna</translation>
 <translation id="4035758313003622889">Správce úloh</translation>
 <translation id="4035877632587724847">Nepovolovat</translation>
@@ -3403,6 +3410,7 @@
 <translation id="4242533952199664413">Otevřít Nastavení</translation>
 <translation id="4242577469625748426">Instalace nastavení zásady v zařízení se nezdařila: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Tiskárna je pozastavena</translation>
+<translation id="424423026762293842">Obnovení vašich místních dat</translation>
 <translation id="4244238649050961491">Najít další aplikace pro dotyková pera</translation>
 <translation id="4246980464509998944">Další připomínky:</translation>
 <translation id="424726838611654458">Vždy otevřít v aplikaci Adobe Reader</translation>
@@ -4958,6 +4966,7 @@
 <translation id="5792728279623964091">Klepněte na vypínač</translation>
 <translation id="5793339252089865437">Stažení této aktualizace prostřednictvím mobilní sítě může to vést k tomu, že vám budou naúčtovány poplatky za překročení limitu dat.</translation>
 <translation id="5793420564274426163">Potvrzení spárování</translation>
+<translation id="5793430094159150686">Heslo bylo změněno. Pokud chcete obnovit místní data, zadejte staré heslo.</translation>
 <translation id="5794034487966529952">Na ploše <ph name="DESK_TITLE" /> je otevřený následující počet oken prohlížeče: <ph name="NUM_BROWSERS" /></translation>
 <translation id="5794414402486823030">Vždy otevřít pomocí systémového prohlížeče</translation>
 <translation id="5794700615121138172">Sdílené složky Linuxu</translation>
@@ -5885,6 +5894,7 @@
 <translation id="6700093763382332031">Zámek mobilní SIM karty</translation>
 <translation id="6700480081846086223">Odeslat <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Profil nelze načíst.</translation>
+<translation id="6701824422332982935">Pokud tato rozšíření chcete použít, znovu načtěte stránku</translation>
 <translation id="6702639462873609204">&amp;Upravit...</translation>
 <translation id="6703212423117969852">Můžete to zkusit znovu v Chromu.</translation>
 <translation id="6703254819490889819">Obnovit ze zálohy</translation>
@@ -7111,6 +7121,7 @@
 <translation id="7903742244674067440">Máte založené certifikáty, které identifikují tyto certifikační autority</translation>
 <translation id="7903925330883316394">Nástroj: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Zpřístupní porty Linuxu jiným zařízením v síti.</translation>
+<translation id="7906440585529721295">Místní data budou smazána</translation>
 <translation id="7907837847548254634">Zaměřený objekt krátce zvýraznit</translation>
 <translation id="7908378463497120834">Je nám líto, minimálně jeden oddíl externího paměťového zařízení nelze připojit.</translation>
 <translation id="7909324225945368569">Přejmenujte profil</translation>
@@ -7449,6 +7460,7 @@
 <translation id="822050276545350872">Už žádné čekání</translation>
 <translation id="8221491193165283816">Obvykle oznámení blokujete. Chcete-li tomuto webu zobrazování oznámení povolit, klikněte sem.</translation>
 <translation id="822347941086490485">Hledání zařízení HID…</translation>
+<translation id="8223573963214454788">Pokračovat a smazat data</translation>
 <translation id="8225046344534779393">Zkontrolujte připojení k internetu</translation>
 <translation id="8225265270453771718">Sdílet okno aplikace</translation>
 <translation id="8226222018808695353">Zakázané</translation>
@@ -7549,6 +7561,7 @@
 <translation id="8314381333424235892">Rozšíření chybí nebo nebylo nainstalováno</translation>
 <translation id="831440797644402910">Tuto složku nelze otevřít</translation>
 <translation id="8314835274931377415">Spustit nastavení přístupu pomocí přepínačů?</translation>
+<translation id="8317582043908962055">Rozpoznat text P&amp;DF</translation>
 <translation id="8317671367883557781">Přidat připojení k síti</translation>
 <translation id="8319414634934645341">Rozšířené použití klíče</translation>
 <translation id="8321837372750396788">Toto zařízení <ph name="DEVICE_TYPE" /> bude spravováno doménou <ph name="MANAGER" />.</translation>
@@ -8436,6 +8449,7 @@
 <translation id="9203398526606335860">&amp;Profilování povoleno</translation>
 <translation id="9203904171912129171">Vyberte zařízení</translation>
 <translation id="9206889157914079472">Psaní poznámek dotykovým perem na obrazovce uzamčení</translation>
+<translation id="9208192193641542858">Místní data jsou chráněna starým heslem. Pokud jste heslo nedávno změnili, zkuste znovu staré heslo.</translation>
 <translation id="9209563766569767417">Kontrola nastavení kontejneru systému Linux</translation>
 <translation id="9209689095351280025">Weby vás nemohou na internetu sledovat pomocí souborů cookie</translation>
 <translation id="9211177926627870898">Je nutná aktualizace</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index aaf0c9a..ea6db35 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -383,6 +383,7 @@
 <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>
 <translation id="1375321115329958930">Gemte adgangskoder</translation>
 <translation id="1375557162880614858">Vil du aktivere ChromeVox, som er den indbyggede skærmlæser til ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Konfigurationen er fuldført. Gør nu din enhed klar til gaming</translation>
 <translation id="137651782282853227">Dine gemte adresser vises her</translation>
 <translation id="1376771218494401509">Navngiv vindue...</translation>
 <translation id="1377600615067678409">Vent til senere</translation>
@@ -397,6 +398,7 @@
 <translation id="138784436342154190">Vil du gendanne standardopstartssiden?</translation>
 <translation id="1388253969141979417">Har tilladelse til at bruge din mikrofon</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> genstartes, når opdateringerne er fuldført.</translation>
+<translation id="1389601498324964367">Kvoteadministreret lagerplads</translation>
 <translation id="139013308650923562">Har tilladelse til at bruge de skrifttyper, der er installeret på din enhed</translation>
 <translation id="1390548061267426325">Åbn som almindelig fane</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> har ikke tilladelse til at udskrive på <ph name="PRINTER_NAME" />. Kontakt din administrator.</translation>
@@ -1076,6 +1078,7 @@
 <translation id="1992924914582925289">Fjern fra enhed</translation>
 <translation id="1994173015038366702">Webadresse</translation>
 <translation id="1995916364271252349">Styrer, hvilke oplysninger websites kan anvende og vise (placering, kamera, pop op-vinduer m.m.)</translation>
+<translation id="1997433994358798851">Chrome skal have tilladelse til at bruge Bluetooth for at oprette forbindelse til din enhed</translation>
 <translation id="1997616988432401742">Dine certifikater</translation>
 <translation id="1999115740519098545">Ved opstart</translation>
 <translation id="2000419248597011803">Sender visse cookies og søgninger fra adresselinjen og søgefeltet til din standardsøgemaskine</translation>
@@ -1740,6 +1743,7 @@
 <translation id="25899519884572181">Afslut Læser-tilstand</translation>
 <translation id="2593499352046705383">Før du går i gang, skal du sørge for, at du har sikkerhedskopieret dine data. Hvis du installerer <ph name="DEVICE_OS" />, overskrives din harddisk. Få flere oplysninger på g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Søg på Google, eller angiv webadressen</translation>
+<translation id="2599048253926156421">Brugernavnet er kopieret til udklipsholderen</translation>
 <translation id="2602501489742255173">Stryg opad for at komme i gang</translation>
 <translation id="2603115962224169880">Ryd op på computeren</translation>
 <translation id="2603355571917519942">Voice Match er klar</translation>
@@ -1963,6 +1967,7 @@
 <translation id="2804043232879091219">Den alternative browser kunne ikke åbnes</translation>
 <translation id="2804667941345577550">Du logges ud af dette website, også i åbne faner.</translation>
 <translation id="2804680522274557040">Kameraet er deaktiveret</translation>
+<translation id="280518252911523675">Hvis du fortsætter uden at angive din gamle adgangskode, slettes dine lokale data. Du skal logge ind med din Google-konto for at konfigurere denne bruger igen.</translation>
 <translation id="2805539617243680210">Nu er du klar.</translation>
 <translation id="2805646850212350655">Filsystem til Microsoft-kryptering</translation>
 <translation id="2805756323405976993">Apps</translation>
@@ -3078,6 +3083,7 @@
 <translation id="3895090224522145010">Kerberos-brugernavn</translation>
 <translation id="389521680295183045">Websites kan anmode om at få at vide, hvornår du aktivt bruger din enhed</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{et billede}one{# billede}other{# billeder}}</translation>
+<translation id="3897746662269329507">Din <ph name="DEVICE_TYPE" /> er udviklet til gaming. Appen Udforsk åbnes som det næste, og deri har du adgang til hundredvis af de nyeste spil, du kan se spiltilbud, og du kan benytte gamingrelaterede funktioner, som følger med din enhed.</translation>
 <translation id="3898233949376129212">Enhedens sprog</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> vil gerne have tilladelse til at: <ph name="FIRST_PERMISSION" /> og <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Vælg tastatur</translation>
@@ -3228,6 +3234,7 @@
 <translation id="4033471457476425443">Tilføj ny mappe</translation>
 <translation id="4033711848170683365">Denne handling sletter browserdata permanent fra denne enhed. Google-konti, der er tilknyttet denne profil, anvendes muligvis af andre apps på din <ph name="DEVICE_TYPE" />. Du kan fjerne disse konti i <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Sikre websites indlejrer muligvis indhold som f.eks. billeder og webrammer, der ikke er sikre</translation>
+<translation id="4034741552964543387">Fortsæt uden lokale data</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Jobliste</translation>
 <translation id="4035877632587724847">Tillad ikke</translation>
@@ -3419,6 +3426,7 @@
 <translation id="4242533952199664413">Åbn Indstillinger</translation>
 <translation id="4242577469625748426">Det lykkedes ikke at installere politikindstillinger på enheden: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Printeren er sat på pause</translation>
+<translation id="424423026762293842">Gendan dine lokale data</translation>
 <translation id="4244238649050961491">Find flere apps til styluspenne</translation>
 <translation id="4246980464509998944">Yderligere kommentarer:</translation>
 <translation id="424726838611654458">Åbn altid i Adobe Reader</translation>
@@ -4977,6 +4985,7 @@
 <translation id="5792728279623964091">Tryk på afbryderknappen</translation>
 <translation id="5793339252089865437">Hvis du downloader opdateringen via dit mobilnetværk, kan der pålægges yderligere gebyrer.</translation>
 <translation id="5793420564274426163">Bekræftelse af parring</translation>
+<translation id="5793430094159150686">Din adgangskode er blevet ændret. Hvis du vil gendanne dine lokale data, skal du angive din gamle adgangskode.</translation>
 <translation id="5794034487966529952">Skrivebordet <ph name="DESK_TITLE" /> har <ph name="NUM_BROWSERS" /> åbne browservinduer</translation>
 <translation id="5794414402486823030">Åbn altid med systemets visningsprogram</translation>
 <translation id="5794700615121138172">Delte mapper i Linux</translation>
@@ -5903,6 +5912,7 @@
 <translation id="6700093763382332031">SIM-lås til mobilnetværk</translation>
 <translation id="6700480081846086223">Cast <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Profilen kunne ikke hentes.</translation>
+<translation id="6701824422332982935">Genindlæs siden for at bruge disse udvidelser</translation>
 <translation id="6702639462873609204">&amp;Rediger...</translation>
 <translation id="6703212423117969852">Du kan prøve igen senere i Chrome.</translation>
 <translation id="6703254819490889819">Gendan sikkerhedskopi</translation>
@@ -7129,6 +7139,7 @@
 <translation id="7903742244674067440">Du har lagrede certifikater, som identificerer disse certifikatautoriteter</translation>
 <translation id="7903925330883316394">Værktøj: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Gør Linux-portene tilgængelige for andre enheder på dit netværk.</translation>
+<translation id="7906440585529721295">Lokale data slettes</translation>
 <translation id="7907837847548254634">Vis en kort fremhævning på det element, der fokuseres på</translation>
 <translation id="7908378463497120834">Vi beklager, men der kunne ikke oprettes forbindelse til mindst én partition på enheden.</translation>
 <translation id="7909324225945368569">Giv din profil et nyt navn</translation>
@@ -7467,6 +7478,7 @@
 <translation id="822050276545350872">Du skal kun vente lidt endnu</translation>
 <translation id="8221491193165283816">Du blokerer som regel notifikationer. Klik her for at give websitet tilladelse til at sende notifikationer.</translation>
 <translation id="822347941086490485">Finder HID-enheder...</translation>
+<translation id="8223573963214454788">Fortsæt, og slet data</translation>
 <translation id="8225046344534779393">Tjek din internetforbindelse</translation>
 <translation id="8225265270453771718">Del et appvindue</translation>
 <translation id="8226222018808695353">Forbudt</translation>
@@ -7567,6 +7579,7 @@
 <translation id="8314381333424235892">Manglende eller afinstalleret udvidelse</translation>
 <translation id="831440797644402910">Denne mappe kan ikke åbnes</translation>
 <translation id="8314835274931377415">Vil du starte konfigurationen af Kontaktadgang?</translation>
+<translation id="8317582043908962055">Genkend P&amp;DF-tekst</translation>
 <translation id="8317671367883557781">Tilføj netværksforbindelse</translation>
 <translation id="8319414634934645341">Udvidet brug af nøgle</translation>
 <translation id="8321837372750396788">Denne <ph name="DEVICE_TYPE" /> vil blive administreret af <ph name="MANAGER" />.</translation>
@@ -8454,6 +8467,7 @@
 <translation id="9203398526606335860">&amp;Profilering aktiveret</translation>
 <translation id="9203904171912129171">Vælg en enhed</translation>
 <translation id="9206889157914079472">Notatskrivning med styluspen på låseskærmen</translation>
+<translation id="9208192193641542858">Lokale data er beskyttet af din gamle adgangskode. Hvis du har ændret din adgangskode for nylig, kan du prøve at bruge din gamle adgangskode igen.</translation>
 <translation id="9209563766569767417">Tjekker konfigurationen af Linux-containeren</translation>
 <translation id="9209689095351280025">Websites kan ikke bruge cookies, der sporer din aktivitet på nettet</translation>
 <translation id="9211177926627870898">Opdatering er påkrævet</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 4f0c2ea..ef94a93 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">Το πιστοποιητικό που απαιτείται από το δίκτυο "<ph name="NETWORK_NAME" />" δεν είναι εγκατεστημένο ή δεν είναι πλέον έγκυρο.  Λάβετε ένα νέο πιστοποιητικό και δοκιμάστε να συνδεθείτε ξανά.</translation>
 <translation id="1375321115329958930">Αποθηκευμένοι κωδικοί πρόσβασης</translation>
 <translation id="1375557162880614858">Θέλετε να ενεργοποιήσετε το ChromeVox, τον ενσωματωμένο αναγνώστη οθόνης για το ChromeOS Flex;</translation>
+<translation id="1375938286942050085">Η ρύθμιση ολοκληρώθηκε! Στη συνέχεια, ετοιμάστε τη συσκευή σας για gaming.</translation>
 <translation id="137651782282853227">Οι αποθηκευμένες διευθύνσεις σας θα εμφανίζονται εδώ</translation>
 <translation id="1376771218494401509">Όνομα και παράθυρο…</translation>
 <translation id="1377600615067678409">Παράβλεψη προς το παρόν</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Επαναφορά προεπιλεγμένης σελίδας εκκίνησης;</translation>
 <translation id="1388253969141979417">Επιτρέπεται να χρησιμοποιούν το μικρόφωνό σας</translation>
 <translation id="1388728792929436380">Όταν ολοκληρωθούν οι ενημερώσεις, θα γίνει επανεκκίνηση της συσκευής (<ph name="DEVICE_TYPE" />).</translation>
+<translation id="1389601498324964367">Αποθηκευτικός χώρος διαχειριζόμενος από το όριο</translation>
 <translation id="139013308650923562">Να επιτρέπεται η χρήση των γραμματοσειρών που είναι εγκατεστημένες στη συσκευή σας</translation>
 <translation id="1390548061267426325">Άνοιγμα σε κανονική καρτέλα</translation>
 <translation id="1390907927270446471">Το προφίλ <ph name="PROFILE_USERNAME" /> δεν έχει την εξουσιοδότηση για εκτύπωση στον εκτυπωτή <ph name="PRINTER_NAME" />. Επικοινωνήστε με τον διαχειριστή σας.</translation>
@@ -1075,6 +1077,7 @@
 <translation id="1992924914582925289">Κατάργηση από τη συσκευή</translation>
 <translation id="1994173015038366702">URL ιστότοπου</translation>
 <translation id="1995916364271252349">Ελέγχει τις πληροφορίες που μπορούν να χρησιμοποιούν και να εμφανίζουν οι ιστότοποι (τοποθεσία, κάμερα, αναδυόμενα παράθυρα και πολλά άλλα).</translation>
+<translation id="1997433994358798851">Το Chrome χρειάζεται άδεια χρήσης του Bluetooth για σύνδεση στη συσκευή σας.</translation>
 <translation id="1997616988432401742">Τα πιστοποιητικά σας</translation>
 <translation id="1999115740519098545">Κατά την εκκίνηση</translation>
 <translation id="2000419248597011803">Στέλνει ορισμένα cookie και αναζητήσεις από τη γραμμή διευθύνσεων και το πλαίσιο αναζήτησης στην προεπιλεγμένη μηχανή αναζήτησης</translation>
@@ -1739,6 +1742,7 @@
 <translation id="25899519884572181">Έξοδος από τη λειτουργία ανάγνωσης</translation>
 <translation id="2593499352046705383">Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε δημιουργήσει αντίγραφα ασφαλείας για τα δεδομένα σας. Η εγκατάσταση του <ph name="DEVICE_OS" /> θα αντικαταστήσει όλα τα δεδομένα στον σκληρό δίσκο σας. Μάθετε περισσότερα στη διεύθυνση g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Κάντε αναζήτηση στο Google ή πληκτρολογήστε το URL</translation>
+<translation id="2599048253926156421">Το όνομα χρήστη αντιγράφηκε στο πρόχειρο</translation>
 <translation id="2602501489742255173">Σύρετε προς τα επάνω για να ξεκινήσετε</translation>
 <translation id="2603115962224169880">Εκκαθάριση υπολογιστή</translation>
 <translation id="2603355571917519942">Το Voice Match είναι έτοιμο</translation>
@@ -1962,6 +1966,7 @@
 <translation id="2804043232879091219">Δεν ήταν δυνατό το άνοιγμα του εναλλακτικού προγράμματος περιήγησης</translation>
 <translation id="2804667941345577550">Θα αποσυνδεθείτε από αυτόν τον ιστότοπο, συμπεριλαμβανομένων όσων εμφανίζονται σε ανοικτές καρτέλες</translation>
 <translation id="2804680522274557040">Απενεργοποιημένη κάμερα</translation>
+<translation id="280518252911523675">Εάν συνεχίσετε χωρίς να εισαγάγετε τον παλιό κωδικό πρόσβασης, τα τοπικά δεδομένα σας θα διαγραφούν. Θα συνδεθείτε με τον Λογαριασμό σας Google για να ρυθμίσετε ξανά αυτόν τον χρήστη.</translation>
 <translation id="2805539617243680210">Είστε έτοιμοι!</translation>
 <translation id="2805646850212350655">Microsoft Encrypting File System</translation>
 <translation id="2805756323405976993">Εφαρμογές </translation>
@@ -3077,6 +3082,7 @@
 <translation id="3895090224522145010">Όνομα χρήστη Kerberos</translation>
 <translation id="389521680295183045">Οι ιστότοποι μπορούν να ζητούν να γνωρίζουν πότε χρησιμοποιείτε ενεργά τη συσκευή σας</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{μια εικόνα}other{# εικόνες}}</translation>
+<translation id="3897746662269329507">Η συσκευή σας, <ph name="DEVICE_TYPE" />, έχει σχεδιαστεί για gaming. Στη συνέχεια, θα ανοίξει η εφαρμογή Εξερεύνηση με την οποία μπορείτε να αποκτήσετε πρόσβαση σε εκατοντάδες από τα πιο πρόσφατα παιχνίδια, να δείτε προσφορές gaming και να ανακαλύψετε λειτουργίες gaming που περιλαμβάνονται στη συσκευή σας.</translation>
 <translation id="3898233949376129212">Γλώσσα συσκευής</translation>
 <translation id="3898327728850887246">Ο ιστότοπος <ph name="SITE_NAME" /> επιθυμεί τις άδειες: <ph name="FIRST_PERMISSION" /> και <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Επιλογή πληκτρολογίου</translation>
@@ -3227,6 +3233,7 @@
 <translation id="4033471457476425443">Προσθήκη νέου φακέλου</translation>
 <translation id="4033711848170683365">Με αυτήν την ενέργεια θα διαγραφούν οριστικά τα δεδομένα περιήγησης από αυτήν τη συσκευή. Οι Λογαριασμοί Google σε αυτό το προφίλ ενδέχεται να χρησιμοποιούνται από άλλες εφαρμογές στη συσκευή σας <ph name="DEVICE_TYPE" />. Μπορείτε να καταργήσετε αυτούς τους λογαριασμούς στην ενότητα <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Οι ασφαλείς ιστότοποι ενδέχεται να περιέχουν ενσωματωμένο περιεχόμενο που δεν είναι ασφαλές, όπως εικόνες ή πλαίσια ιστού.</translation>
+<translation id="4034741552964543387">Συνέχεια χωρίς τοπικά δεδομένα</translation>
 <translation id="4034824040120875894">Εκτυπωτής</translation>
 <translation id="4035758313003622889">Δια&amp;χείριση εργασιών</translation>
 <translation id="4035877632587724847">Να μην επιτραπεί</translation>
@@ -3418,6 +3425,7 @@
 <translation id="4242533952199664413">Ανοίξτε τις ρυθμίσεις</translation>
 <translation id="4242577469625748426">Αποτυχία εγκατάστασης ρυθμίσεων πολιτικής στη συσκευή: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Ο εκτυπωτής τέθηκε σε παύση</translation>
+<translation id="424423026762293842">Επαναφορά των τοπικών δεδομένων σας</translation>
 <translation id="4244238649050961491">Εύρεση περισσότερων εφαρμογών γραφίδας</translation>
 <translation id="4246980464509998944">Επιπλέον σχόλια:</translation>
 <translation id="424726838611654458">Να είναι πάντα ανοικτό στο Adobe Reader</translation>
@@ -4977,6 +4985,7 @@
 <translation id="5792728279623964091">Πατήστε το κουμπί λειτουργίας</translation>
 <translation id="5793339252089865437">Εάν κατεβάσετε την ενημέρωση μέσω του δικτύου κινητής τηλεφωνίας σας, αυτό μπορεί να έχει ως αποτέλεσμα χρεώσεις κάλυψης.</translation>
 <translation id="5793420564274426163">Επιβεβαίωση σύζευξης</translation>
+<translation id="5793430094159150686">Ο κωδικός πρόσβασής σας άλλαξε. Για να επαναφέρετε τα τοπικά δεδομένα σας, πρέπει να εισαγάγετε τον παλιό κωδικό πρόσβασής σας.</translation>
 <translation id="5794034487966529952">Το γραφείο <ph name="DESK_TITLE" /> έχει <ph name="NUM_BROWSERS" /> ανοιχτά παράθυρα προγράμματος περιήγησης.</translation>
 <translation id="5794414402486823030">Άνοιγμα πάντα με πρόγραμμα προβολής συστήματος</translation>
 <translation id="5794700615121138172">Κοινόχρηστοι φάκελοι Linux</translation>
@@ -5901,6 +5910,7 @@
 <translation id="6700093763382332031">Κλείδωμα SIM δικτύου κινητής τηλεφωνίας</translation>
 <translation id="6700480081846086223">Μετάδοση <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Δεν ήταν δυνατή η λήψη του προφίλ.</translation>
+<translation id="6701824422332982935">Επαναλάβετε τη φόρτωση της σελίδας για να χρησιμοποιήσετε αυτές τις επεκτάσεις</translation>
 <translation id="6702639462873609204">Επε&amp;ξεργασία...</translation>
 <translation id="6703212423117969852">Μπορείτε να δοκιμάσετε ξανά αργότερα στο Chrome.</translation>
 <translation id="6703254819490889819">Επαναφορά αντιγράφου ασφαλείας</translation>
@@ -7128,6 +7138,7 @@
 <translation id="7903742244674067440">Έχετε καταχωρίσει πιστοποιητικά που προσδιορίζουν αυτές τις αρχές έκδοσης πιστοποιητικών</translation>
 <translation id="7903925330883316394">Βοηθητικό πρόγραμμα: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Κάντε τις θύρες Linux διαθέσιμες σε άλλες συσκευές στο δίκτυό σας.</translation>
+<translation id="7906440585529721295">Τα τοπικά δεδομένα θα διαγραφούν</translation>
 <translation id="7907837847548254634">Εμφάνιση μιας γρήγορης επισήμανσης στο εστιασμένο αντικείμενο.</translation>
 <translation id="7908378463497120834">Λυπούμαστε, δεν ήταν δυνατή η προσάρτηση τουλάχιστον ενός διαμερίσματος της εξωτερικής συσκευής αποθήκευσης.</translation>
 <translation id="7909324225945368569">Μετονομασία του προφίλ σας</translation>
@@ -7466,6 +7477,7 @@
 <translation id="822050276545350872">Από εδώ και στο εξής, δεν θα χρειάζεται να περιμένετε</translation>
 <translation id="8221491193165283816">Συνήθως αποκλείετε τις ειδοποιήσεις. Για να επιτρέψετε σε αυτόν τον ιστότοπο να σας στέλνει ειδοποιήσεις, κάντε κλικ εδώ.</translation>
 <translation id="822347941086490485">Εύρεση συσκευών HID…</translation>
+<translation id="8223573963214454788">Συνέχεια και διαγραφή δεδομένων</translation>
 <translation id="8225046344534779393">Ελέγξτε τη σύνδεση στο διαδίκτυο</translation>
 <translation id="8225265270453771718">Μοιραστείτε ένα παράθυρο εφαρμογής</translation>
 <translation id="8226222018808695353">Απαγορευμένο</translation>
@@ -7566,6 +7578,7 @@
 <translation id="8314381333424235892">Λείπει ή απεγκαταστάθηκε επέκταση</translation>
 <translation id="831440797644402910">Δεν είναι δυνατό το άνοιγμα αυτού του φακέλου</translation>
 <translation id="8314835274931377415">Έναρξη ρύθμισης Πρόσβασης με διακόπτη;</translation>
+<translation id="8317582043908962055">Αναγνώριση κειμένου P&amp;DF</translation>
 <translation id="8317671367883557781">Προσθήκη σύνδεσης δικτύου</translation>
 <translation id="8319414634934645341">Εκτεταμένη χρήση κλειδιού</translation>
 <translation id="8321837372750396788">Η διαχείριση της συσκευής <ph name="DEVICE_TYPE" /> θα γίνεται από τον τομέα <ph name="MANAGER" />.</translation>
@@ -8449,6 +8462,7 @@
 <translation id="9203398526606335860">Ενεργοποιημένη &amp;δυνατότητα δημιουργίας προφίλ</translation>
 <translation id="9203904171912129171">Επιλέξτε μια συσκευή</translation>
 <translation id="9206889157914079472">Λήψη σημειώσεων με γραφίδα από την οθόνη κλειδώματος</translation>
+<translation id="9208192193641542858">Τα τοπικά δεδομένα προστατεύονται από τον παλιό κωδικό πρόσβασής σας. Εάν αλλάξατε πρόσφατα τον κωδικό πρόσβασης, δοκιμάστε ξανά τον παλιό σας κωδικό πρόσβασης.</translation>
 <translation id="9209563766569767417">Έλεγχος της ρύθμισης του κοντέινερ Linux</translation>
 <translation id="9209689095351280025">Οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν cookie που σας παρακολουθούν στον ιστό.</translation>
 <translation id="9211177926627870898">Απαιτείται ενημέρωση</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 0ae9bb5..d995b7f 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -383,6 +383,7 @@
 <translation id="1374844444528092021">گواهی‌نامه مورد نیاز شبکه "<ph name="NETWORK_NAME" />" یا نصب نشده است و یا دیگر اعتبار ندارد. لطفاً گواهی‌نامه جدیدی بگیرید و دوباره سعی کنید وصل شوید.</translation>
 <translation id="1375321115329958930">رمزهای ورود ذخیره شده</translation>
 <translation id="1375557162880614858">‏آیا می‌خواهید ChromeVox را که صفحه‌خوان داخلی ChromeOS Flex است فعال کنید؟</translation>
+<translation id="1375938286942050085">راه‌اندازی کامل شد! سپس، دستگاهتان را برای بازی آماده کنید</translation>
 <translation id="137651782282853227">نشانی‌های ذخیره‌شده در اینجا نشان داده خواهند شد</translation>
 <translation id="1376771218494401509">نام‌گذاری پنجره…</translation>
 <translation id="1377600615067678409">فعلاً رد شود</translation>
@@ -397,6 +398,7 @@
 <translation id="138784436342154190">صفحه شروع پیش‌فرض بازیابی شود؟</translation>
 <translation id="1388253969141979417">اجازه دارد از میکروفون استفاده کند</translation>
 <translation id="1388728792929436380">وقتی به‌روزرسانی‌ها تمام شد، <ph name="DEVICE_TYPE" /> بازراه‌اندازی می‌شود.</translation>
+<translation id="1389601498324964367">فضای ذخیره‌سازی سهمیه‌بندی‌شده</translation>
 <translation id="139013308650923562">اجازه دارد از قلم‌های نصب‌شده در دستگاه استفاده کند</translation>
 <translation id="1390548061267426325">بازکردن به‌عنوان برگه عادی</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> اجازه ندارد با <ph name="PRINTER_NAME" /> چاپ کند. لطفاً با سرپرست تماس بگیرید.</translation>
@@ -1072,6 +1074,7 @@
 <translation id="1992924914582925289">حذف از دستگاه</translation>
 <translation id="1994173015038366702">نشانی وب سایت</translation>
 <translation id="1995916364271252349">کنترل می‌کند سایت‌ها می‌توانند از چه اطلاعاتی استفاده کنند و چه اطلاعاتی را نشان دهند (مکان، دوربین، بالاپرها، و موارد دیگر)</translation>
+<translation id="1997433994358798851">‏Chrome برای استفاده از بلوتوث به اجازه نیاز دارد تا به دستگاهتان وصل شود</translation>
 <translation id="1997616988432401742">گواهی‌نامه‌های شما</translation>
 <translation id="1999115740519098545">هنگام شروع به کار</translation>
 <translation id="2000419248597011803">برخی کوکی‌ها و جستجوها را از نوار نشانی و جعبه جستجو به موتور جستجوی پیش‌فرض ارسال می‌کند</translation>
@@ -1736,6 +1739,7 @@
 <translation id="25899519884572181">خروج از «حالت خواننده»</translation>
 <translation id="2593499352046705383">‏پیش‌از شروع، حتماً از داده‌هایتان پشتیبان‌گیری کنید. نصب <ph name="DEVICE_OS" /> داده‌های دیسک سخت را بازنویسی خواهد کرد. در g.co/flex/InstallGuide، اطلاعات بیشتری دریافت کنید.</translation>
 <translation id="2594999711683503743">‏در Google جستجو کنید یا نشانی وب را تایپ کنید</translation>
+<translation id="2599048253926156421">نام کاربری در بریده‌دان کپی شد</translation>
 <translation id="2602501489742255173">برای شروع‌به‌کار تند بکشید</translation>
 <translation id="2603115962224169880">پاک کردن رایانه</translation>
 <translation id="2603355571917519942">‏Voice Match آماده است</translation>
@@ -1959,6 +1963,7 @@
 <translation id="2804043232879091219">مرورگر جایگزین باز نشد</translation>
 <translation id="2804667941345577550">از سیستم این سایت (ازجمله در برگه‌های باز) خارج خواهید شد</translation>
 <translation id="2804680522274557040">دوربین خاموش است</translation>
+<translation id="280518252911523675">‏اگر بدون وارد کردن گذرواژه قدیمی ادامه دهید، داده‌های محلی شما حذف خواهد شد. برای راه‌اندازی مجدد این حساب، با «حساب Google» به سیستم وارد خواهید شد.</translation>
 <translation id="2805539617243680210">همه چیز آماده است!</translation>
 <translation id="2805646850212350655">‏سیستم فایل رمزگذاری Microsoft</translation>
 <translation id="2805756323405976993">برنامه‌ها</translation>
@@ -3074,6 +3079,7 @@
 <translation id="3895090224522145010">‏نام کاربری Kerberos</translation>
 <translation id="389521680295183045">سایت‌ها می‌توانند درخواست کنند که وقتی شما به‌طور فعال از دستگاه استفاده می‌کنید مطلع شوند</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{یک تصویر}one{# تصویر}other{# تصویر}}</translation>
+<translation id="3897746662269329507"><ph name="DEVICE_TYPE" /> شما برای بازی ساخته شده است. در مرحله بعد برنامه «کاوش» باز می‌شود که در آن می‌توانید به صدها بازی جدید دسترسی داشته باشید، پیشنهادهای بازی را ببینید، و ویژگی‌های بازی ارائه‌شده با دستگاهتان را کشف کنید.</translation>
 <translation id="3898233949376129212">زبان دستگاه</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> می‌خواهد: <ph name="FIRST_PERMISSION" /> و <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">انتخاب صفحه‌کلید</translation>
@@ -3224,6 +3230,7 @@
 <translation id="4033471457476425443">افزودن پوشه جدید</translation>
 <translation id="4033711848170683365">‏با این کار، داده‌های مرور برای همیشه از این دستگاه حذف خواهد شد. ممکن است دیگر برنامه‌های موجود در <ph name="DEVICE_TYPE" /> شما از «حساب‌های Google» این نمایه استفاده کنند. می‌توانید با مراجعه به <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />، این حساب‌ها را بردارید.</translation>
 <translation id="4033963223187371752">ممکن است سایت‌های امن محتوایی مثل قاب وب یا تصویری را که امن نیست جاسازی کنند</translation>
+<translation id="4034741552964543387">ادامه بدون داده‌های محلی</translation>
 <translation id="4034824040120875894">چاپگر</translation>
 <translation id="4035758313003622889">مدیر &amp;فعالیت ها</translation>
 <translation id="4035877632587724847">مجاز نیست</translation>
@@ -3415,6 +3422,7 @@
 <translation id="4242533952199664413">باز کردن تنظیمات</translation>
 <translation id="4242577469625748426">تنظیمات خط‌مشی روی دستگاه نصب نشد: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">چاپگر موقتاً متوقف شده است</translation>
+<translation id="424423026762293842">بازیابی داده‌های محلی</translation>
 <translation id="4244238649050961491">پیدا کردن برنامه‌های قلم بیشتر</translation>
 <translation id="4246980464509998944">نظرات تکمیلی:</translation>
 <translation id="424726838611654458">‏همیشه در Adobe Reader باز شود</translation>
@@ -4973,6 +4981,7 @@
 <translation id="5792728279623964091">لطفاً روی دکمه روشن/خاموش ضربه بزنید</translation>
 <translation id="5793339252089865437">بارگیری به‌روزرسانی ازطریق شبکه تلفن می‌تواند به کسر هزینه‌های مازاد منجر شود.</translation>
 <translation id="5793420564274426163">تأیید مرتبط‌سازی</translation>
+<translation id="5793430094159150686">گذرواژه شما تغییر کرد. برای بازیابی داده‌های محلی، باید گذرواژه قدیمی‌تان را وارد کنید.</translation>
 <translation id="5794034487966529952">در میزکار <ph name="DESK_TITLE" />، <ph name="NUM_BROWSERS" /> پنجره مرورگر باز است</translation>
 <translation id="5794414402486823030">همیشه با نظاره‌گر سیستم باز شود</translation>
 <translation id="5794700615121138172">‏پوشه‌های هم‌رسانی‌شده Linux</translation>
@@ -5899,6 +5908,7 @@
 <translation id="6700093763382332031">قفل سیم کارت شبکه تلفن همراه</translation>
 <translation id="6700480081846086223">فرستادن <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">نمایه دریافت نشد.</translation>
+<translation id="6701824422332982935">برای استفاده از این افزونه‌ها، صفحه را مجدد بار کنید</translation>
 <translation id="6702639462873609204">&amp;ویرایش...</translation>
 <translation id="6703212423117969852">‏می‌توانید بعداً در Chrome دوباره امتحان کنید.</translation>
 <translation id="6703254819490889819">بازیابی نسخه پشتیبان</translation>
@@ -7125,6 +7135,7 @@
 <translation id="7903742244674067440">گواهی‌هایی برای فایل دارید که اعتبارهای این گواهی را شناسایی می‌کنند</translation>
 <translation id="7903925330883316394">ابزار کمکی: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">‏درگاه‌های Linux را در دسترس دستگاه‌های دیگری که در شبکه‌تان موجود هستند قرار دهید.</translation>
+<translation id="7906440585529721295">داده‌های محلی حذف خواهد شد</translation>
 <translation id="7907837847548254634">شیء متمرکزشده سریع برجسته شود</translation>
 <translation id="7908378463497120834">متأسفیم، حداقل یک بخش از دستگاه ذخیره‌سازی خارجی نصب نمی‌شود.</translation>
 <translation id="7909324225945368569">تغییر نام نمایه</translation>
@@ -7463,6 +7474,7 @@
 <translation id="822050276545350872">ازاین‌پس نیازی نیست منتظر بمانید</translation>
 <translation id="8221491193165283816">معمولاً اعلان‌ها را مسدود می‌کنید. برای اینکه اجازه دهید این سایت اعلان بفرستد، اینجا را کلیک کنید.</translation>
 <translation id="822347941086490485">‏درحال پیدا کردن دستگاه‌های HID…</translation>
+<translation id="8223573963214454788">ادامه و حذف داده‌ها</translation>
 <translation id="8225046344534779393">اتصال اینترنت را بررسی کنید</translation>
 <translation id="8225265270453771718">هم‌رسانی پنجره برنامه</translation>
 <translation id="8226222018808695353">ممنوع</translation>
@@ -7563,6 +7575,7 @@
 <translation id="8314381333424235892">افزونه وجود ندارد یا حذف نصب شده است</translation>
 <translation id="831440797644402910">نمی‌توان این پوشه را باز کرد</translation>
 <translation id="8314835274931377415">راه‌اندازی «دسترسی کلیدی» شروع شود؟</translation>
+<translation id="8317582043908962055">‏شناسایی نوشتار P&amp;DF</translation>
 <translation id="8317671367883557781">افزودن اتصال شبکه</translation>
 <translation id="8319414634934645341">کاربرد کلید توسعه یافته</translation>
 <translation id="8321837372750396788">این <ph name="DEVICE_TYPE" /> توسط <ph name="MANAGER" /> مدیریت می‌شود.</translation>
@@ -8449,6 +8462,7 @@
 <translation id="9203398526606335860">&amp;نمایه سازی فعال شد</translation>
 <translation id="9203904171912129171">انتخاب دستگاه</translation>
 <translation id="9206889157914079472">یادداشت‌برداری قلم از صفحه قفل</translation>
+<translation id="9208192193641542858">داده‌های محلی با گذرواژه قدیمی‌تان محافظت می‌شود. اگر اخیراً گذرواژه‌تان را تغییر داده‌اید، گذرواژه قدیمی‌تان را دوباره امتحان کنید.</translation>
 <translation id="9209563766569767417">‏درحال بررسی تنظیم محتوی Linux</translation>
 <translation id="9209689095351280025">سایت‌ها نمی‌توانند از کوکی‌هایی که شما را در وب ردیابی می‌کند استفاده کنند</translation>
 <translation id="9211177926627870898">به‌روزرسانی لازم است</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 324afacb..03778637 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -383,6 +383,7 @@
 <translation id="1374844444528092021">Ang certificate na kinakailangan ng network na "<ph name="NETWORK_NAME" />" ay maaaring hindi naka-install o wala nang bisa.  Mangyaring kumuha ng isang bagong certificate at subukang kumonekta muli.</translation>
 <translation id="1375321115329958930">Mga Naka-save na Password</translation>
 <translation id="1375557162880614858">Gusto mo bang i-activate ang ChromeVox, ang built-in na screen reader para sa ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Tapos na ang pag-set up! Sunod na ihanda ang iyong device para sa gaming</translation>
 <translation id="137651782282853227">Lalabas dito ang mga na-save na address</translation>
 <translation id="1376771218494401509">Pangalanan ang &amp;Window...</translation>
 <translation id="1377600615067678409">Lumaktaw muna ngayon</translation>
@@ -397,6 +398,7 @@
 <translation id="138784436342154190">I-restore ang default na page sa pagsisimula?</translation>
 <translation id="1388253969141979417">Pinapayagang gamitin ang iyong mikropono</translation>
 <translation id="1388728792929436380">Magre-restart ang <ph name="DEVICE_TYPE" /> kapag kumpleto na ang mga update.</translation>
+<translation id="1389601498324964367">Storage na pinapamahalaan ng quota</translation>
 <translation id="139013308650923562">Pinapayagang gamitin ang mga font na naka-install sa iyong device</translation>
 <translation id="1390548061267426325">Buksan bilang Regular na Tab</translation>
 <translation id="1390907927270446471">Hindi pinapahintulutan si <ph name="PROFILE_USERNAME" /> na mag-print sa <ph name="PRINTER_NAME" />. Makipag-ugnayan sa iyong administrator.</translation>
@@ -1076,6 +1078,7 @@
 <translation id="1992924914582925289">Alisin sa device</translation>
 <translation id="1994173015038366702">URL ng site</translation>
 <translation id="1995916364271252349">Kinokontrol ang impormasyong puwedeng gamitin at ipakita ng mga site (lokasyon, camera, mga pop-up, at higit pa)</translation>
+<translation id="1997433994358798851">Kailangan ng Chrome ng pahintulot para gamitin ang Bluetooth para kumonekta sa iyong device</translation>
 <translation id="1997616988432401742">Iyong mga certificate</translation>
 <translation id="1999115740519098545">Sa startup</translation>
 <translation id="2000419248597011803">Nagpapadala ng ilang cookies at paghahanap mula sa address bar at box para sa paghahanap sa iyong default na search engine</translation>
@@ -1740,6 +1743,7 @@
 <translation id="25899519884572181">I-off ang reader mode</translation>
 <translation id="2593499352046705383">Bago magsimula, tiyaking mayroon kang backup ng iyong data. Mao-overwrite ang iyong hard drive kapag na-install ang <ph name="DEVICE_OS" />. Matuto pa sa g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Hanapin sa Google o i-type ang URL</translation>
+<translation id="2599048253926156421">Nakopya ang username sa clipboard</translation>
 <translation id="2602501489742255173">Mag-swipe pataas para makapagsimula</translation>
 <translation id="2603115962224169880">Linisin ang computer</translation>
 <translation id="2603355571917519942">Handa na ang Voice Match</translation>
@@ -1963,6 +1967,7 @@
 <translation id="2804043232879091219">Hindi mabuksan ang alternatibong browser</translation>
 <translation id="2804667941345577550">Masa-sign out ka sa site na ito, pati na rin sa mga nakabukas na tab</translation>
 <translation id="2804680522274557040">Naka-off ang camera</translation>
+<translation id="280518252911523675">Kung magpapatuloy ka nang hindi inilalagay ang iyong lumang password, made-delete ang lokal na data mo. Magsa-sign in ka gamit ang iyong Google Account para i-set up ulit ang user na ito.</translation>
 <translation id="2805539617243680210">Handa ka na!</translation>
 <translation id="2805646850212350655">Microsoft Encrypting File System</translation>
 <translation id="2805756323405976993">Mga App</translation>
@@ -3078,6 +3083,7 @@
 <translation id="3895090224522145010">Username ng Kerberos</translation>
 <translation id="389521680295183045">Puwedeng hilingin ng mga site na malaman kung aktibo mong ginagamit ang iyong device</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{isang larawan}one{# larawan}other{# na larawan}}</translation>
+<translation id="3897746662269329507">Ginawa ang iyong <ph name="DEVICE_TYPE" /> para sa gaming. Susunod na magbubukas ang Explore app kung saan magagawa mong mag-access ng daan-daan sa mga pinakabagong laro, tumingin ng mga alok sa gaming, at tumuklas ng mga feature sa gaming na kasama sa iyong device.</translation>
 <translation id="3898233949376129212">Wika ng device</translation>
 <translation id="3898327728850887246">Gusto ng <ph name="SITE_NAME" /> na: <ph name="FIRST_PERMISSION" /> at <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Pumili ng keyboard</translation>
@@ -3228,6 +3234,7 @@
 <translation id="4033471457476425443">Magdagdag ng bagong folder</translation>
 <translation id="4033711848170683365">Permanente nitong ide-delete ang data mula sa pag-browse sa device na ito. Posibleng ginagamit ng iba pang app sa iyong <ph name="DEVICE_TYPE" /> ang mga Google Account sa profile na ito. Puwede mong alisin ang mga account na ito sa <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Posibleng mag-embed ng content na tulad ng mga imahe o web frame na hindi secure ang mga secure na site</translation>
+<translation id="4034741552964543387">Magpatuloy nang walang lokal na data</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Task manager</translation>
 <translation id="4035877632587724847">Huwag payagan</translation>
@@ -3419,6 +3426,7 @@
 <translation id="4242533952199664413">Buksan ang mga setting</translation>
 <translation id="4242577469625748426">Nabigong i-install ang mga setting ng patakaran sa device: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Naka-pause ang printer</translation>
+<translation id="424423026762293842">I-restore ang iyong lokal na data</translation>
 <translation id="4244238649050961491">Maghanap ng higit pang app ng stylus</translation>
 <translation id="4246980464509998944">Mga karagdagang komento:</translation>
 <translation id="424726838611654458">Palaging buksan sa Adobe Reader</translation>
@@ -4977,6 +4985,7 @@
 <translation id="5792728279623964091">Paki-tap ang iyong power button</translation>
 <translation id="5793339252089865437">Kung ida-download mo ang update sa pamamagitan ng iyong mobile network, maaaring magkaroon ng mga overage na singil.</translation>
 <translation id="5793420564274426163">Pagkumpirma ng Pagpapares</translation>
+<translation id="5793430094159150686">Nagbago ang iyong password. Para ma-restore ang iyong lokal na data, kailangan mong ilagay ang iyong lumang password.</translation>
 <translation id="5794034487966529952">Mayroong nakabukas na <ph name="NUM_BROWSERS" /> (na) window ng browser sa desk na <ph name="DESK_TITLE" /></translation>
 <translation id="5794414402486823030">Palaging buksan gamit ang system viewer</translation>
 <translation id="5794700615121138172">Mga nakabahaging folder ng Linux</translation>
@@ -5903,6 +5912,7 @@
 <translation id="6700093763382332031">Lock ng Cellular SIM</translation>
 <translation id="6700480081846086223">I-cast ang <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Hindi makuha ang profile.</translation>
+<translation id="6701824422332982935">I-reload ang page para gamitin ang mga extension na ito</translation>
 <translation id="6702639462873609204">&amp;I-edit...</translation>
 <translation id="6703212423117969852">Puwede mong subukan ulit sa ibang pagkakataon sa Chrome.</translation>
 <translation id="6703254819490889819">I-restore ang backup</translation>
@@ -7130,6 +7140,7 @@
 <translation id="7903742244674067440">Mayroon kang mga certificate sa file na tutukoy sa mga certificate authority na ito</translation>
 <translation id="7903925330883316394">Utility: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Gawing available ang mga port ng Linux sa iba pang device na nasa iyong network.</translation>
+<translation id="7906440585529721295">Made-delete ang lokal na data</translation>
 <translation id="7907837847548254634">Magpakita ng mabilisang highlight sa naka-focus na object</translation>
 <translation id="7908378463497120834">Paumanhin, hindi mai-mount ang hindi bababa sa isang bahagi ng iyong device sa storage.</translation>
 <translation id="7909324225945368569">I-rename ang iyong profile</translation>
@@ -7468,6 +7479,7 @@
 <translation id="822050276545350872">Mula sa puntong ito, hindi na kailangang maghintay</translation>
 <translation id="8221491193165283816">Kadalasan mong bina-block ang mga notification. Para hayaan ang site na itong abisuhan ka, mag-click dito.</translation>
 <translation id="822347941086490485">Naghahanap ng mga HID device...</translation>
+<translation id="8223573963214454788">Magpatuloy at i-delete ang data</translation>
 <translation id="8225046344534779393">Tingnan ang koneksyon sa internet</translation>
 <translation id="8225265270453771718">Magbahagi ng application window</translation>
 <translation id="8226222018808695353">Ipinagbabawal</translation>
@@ -7568,6 +7580,7 @@
 <translation id="8314381333424235892">Nawawala o hindi naka-install ang extension</translation>
 <translation id="831440797644402910">Hindi mabuksan ang folder na ito</translation>
 <translation id="8314835274931377415">Simulan ang pag-set up ng Switch Access?</translation>
+<translation id="8317582043908962055">Kilalanin ang PDF text</translation>
 <translation id="8317671367883557781">Idagdag ang koneksyon sa network</translation>
 <translation id="8319414634934645341">Extended na Paggamit ng Key</translation>
 <translation id="8321837372750396788">Papamahalaan ng <ph name="MANAGER" /> ang <ph name="DEVICE_TYPE" /> na ito.</translation>
@@ -8456,6 +8469,7 @@
 <translation id="9203398526606335860">&amp;Pinagana ang pag-profile</translation>
 <translation id="9203904171912129171">Pumili ng device</translation>
 <translation id="9206889157914079472">Pagtatala mula sa lock screen gamit ang stylus</translation>
+<translation id="9208192193641542858">Pinoprotektahan ng iyong lumang password ang lokal na data. Kung pinalitan mo kamakailan ang iyong password, subukan ulit ang luma mong password.</translation>
 <translation id="9209563766569767417">Sinusuri ang pag-set up ng Linux container</translation>
 <translation id="9209689095351280025">Ang mga site ay hindi makakagamit ng cookies na sumusubaybay sa iyo sa buong web</translation>
 <translation id="9211177926627870898">Kailangang i-update</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index fe7c012..508ab99 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -2233,7 +2233,7 @@
 <translation id="3067198360141518313">Exécuter ce plug-in</translation>
 <translation id="3071624960923923138">Vous pouvez cliquer ici pour ouvrir un nouvel onglet</translation>
 <translation id="3072775339180057696">Autoriser le site à afficher le fichier <ph name="FILE_NAME" /> ?</translation>
-<translation id="3074499504015191586">Traduire la page complète</translation>
+<translation id="3074499504015191586">Traduire toute la page</translation>
 <translation id="3075874217500066906">Un redémarrage est nécessaire pour commencer le processus Powerwash. Après le redémarrage, vous serez invité à confirmer que vous souhaitez poursuivre.</translation>
 <translation id="3076909148546628648"><ph name="DOWNLOAD_RECEIVED" />/<ph name="DOWNLOAD_TOTAL" /></translation>
 <translation id="3076966043108928831">Enregistrer exclusivement sur cet appareil</translation>
@@ -5107,7 +5107,7 @@
 <translation id="5933522550144185133"><ph name="APP_NAME" /> utilise votre caméra et votre micro</translation>
 <translation id="5935158534896975820">Préparation de la demande de signature du certificat (en attente du serveur)</translation>
 <translation id="5935656526031444304">Gérer la navigation sécurisée</translation>
-<translation id="5936065461722368675">Traduire la page complète</translation>
+<translation id="5936065461722368675">Traduire toute la page</translation>
 <translation id="5938002010494270685">Mise à niveau de sécurité disponible</translation>
 <translation id="5939518447894949180">Réinitialiser</translation>
 <translation id="5939719276406088041">Impossible de créer un raccourci</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index e361c61a..7d765fa 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">"<ph name="NETWORK_NAME" />" тармагы талап кылган тастыктама же орнотулган эмес, же жарактан чыккан. Жаңы тастыктама алып, кайра туташып көрүңүз.</translation>
 <translation id="1375321115329958930">Сакталган сырсөздөр</translation>
 <translation id="1375557162880614858">ChromeOS Flex тутумуна кыстарылган экрандагы нерсени окуп берүүчү ChromeVox куралын иштетесизби?</translation>
+<translation id="1375938286942050085">Орнотуу аяктады! Түзмөгүңүздү ойногонго даярдап алыңыз</translation>
 <translation id="137651782282853227">Сакталган даректер бул жерде көрүнөт</translation>
 <translation id="1376771218494401509">&amp;Терезенин аталышын коюңуз...</translation>
 <translation id="1377600615067678409">Азырынча өткөрүп жиберүү</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Демейки баштоо бети калыбына келтирилсинби?</translation>
 <translation id="1388253969141979417">Микрофонуңузду колдоно алат</translation>
 <translation id="1388728792929436380">Жаңыртылгандан кийин <ph name="DEVICE_TYPE" /> түзмөгү өчүп күйөт.</translation>
+<translation id="1389601498324964367">Квота менен тескелген сактагыч</translation>
 <translation id="139013308650923562">Түзмөгүңүздө орнотулган ариптерди колдонууга уруксаты бар</translation>
 <translation id="1390548061267426325">Кадимки өтмөк катары ачуу</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> <ph name="PRINTER_NAME" /> принтеринен басып чыгарууга уруксаты жок. Администраторуңузга кайрылыңыз.</translation>
@@ -1075,6 +1077,7 @@
 <translation id="1992924914582925289">Түзмөктөн алып салуу</translation>
 <translation id="1994173015038366702">Сайт URL'и</translation>
 <translation id="1995916364271252349">Сайттар кандай маалыматты колдонуп жана көрсөтө аларын көзөмөлдөйт (жайгашкан жер, камера, калкыма терезелер жана көптөгөн башка нерселер)</translation>
+<translation id="1997433994358798851">Chrome түзмөгүңүзгө туташуу үчүн Bluetooth'ду колдонууга уруксат сурап жатат</translation>
 <translation id="1997616988432401742">Тастыктамаларыңыз</translation>
 <translation id="1999115740519098545">Ишти баштаганда</translation>
 <translation id="2000419248597011803">Дарек тилкесиндеги жана издөө кутучасындагы издөөлөрдү жана айрым cookie файлдарын демейки издөө тутумуна жөнөтөт</translation>
@@ -1739,6 +1742,7 @@
 <translation id="25899519884572181">Окугуч режиминен чыгуу</translation>
 <translation id="2593499352046705383">Баштоодон мурун дайын-даректериңиздин камдык көчүрмөсүн сактап койгонуңузду текшериңиз. <ph name="DEVICE_OS" /> тутумун орнотсоңуз, катуу дискиңиз кайрадан жазылат. Кеңири маалымат: g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Google'дан издеңиз же URL'ди териңиз</translation>
+<translation id="2599048253926156421">Колдонуучунун аты алмашуу буферине көчүрүлдү</translation>
 <translation id="2602501489742255173">Баштоо үчүн, өйдө сүрүп коюңуз</translation>
 <translation id="2603115962224169880">Компьютерди тазалоо</translation>
 <translation id="2603355571917519942">Voice Match даяр</translation>
@@ -1962,6 +1966,7 @@
 <translation id="2804043232879091219">Кошумча серепчи ачылган жок</translation>
 <translation id="2804667941345577550">Сиз бул сайттан, анын ичинде ачылып турган өтмөктөрдөн чыгарыласыз.</translation>
 <translation id="2804680522274557040">Камера өчүк</translation>
+<translation id="280518252911523675">Эгер учурдагы сырсөзүңүздү киргизбестен улантсаңыз, аккаунтуңуздагы маалымат өчүрүлөт. Бул колдонуучунун параметрлерин кайрадан тууралоо үчүн Google аккаунтуңуз менен киресиз.</translation>
 <translation id="2805539617243680210">Баары даяр!</translation>
 <translation id="2805646850212350655">Microsoft Шифрлөө файл тутуму</translation>
 <translation id="2805756323405976993">Колдонмолор</translation>
@@ -3077,6 +3082,7 @@
 <translation id="3895090224522145010">Kerberos колдонуучунун аты</translation>
 <translation id="389521680295183045">Сайттар түзмөктү активдүү колдонуп жатканыңыз тууралуу маалыматты сурай алышат</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{сүрөт}other{# сүрөт}}</translation>
+<translation id="3897746662269329507"><ph name="DEVICE_TYPE" /> түзмөгүңүз оюндарды ойноо үчүн жасалган. Эми Мүмкүнчүлүктөр колдонмосу ачылып, анда жүздөгөн жаңы оюндарды, оюн сунуштарын жана түзмөгүңүзгө орнотулган оюн-зоок функцияларын көрөсүз.</translation>
 <translation id="3898233949376129212">Түзмөктүн тили</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> төмөнкү аракеттерди аткарганы жатат: <ph name="FIRST_PERMISSION" /> жана <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Баскычтопту тандоо</translation>
@@ -3227,6 +3233,7 @@
 <translation id="4033471457476425443">Жаңы папка кошуу</translation>
 <translation id="4033711848170683365">Ушуну менен бул түзмөктөн серептөө дайындары биротоло өчүрүлөт. Бул профилдеги Google аккаунттарын <ph name="DEVICE_TYPE" /> түзмөгүңүздөгү башка колдонмолор пайдаланышы мүмкүн. Бул аккаунттарды өчүрүү үчүн <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" /> бөлүмүнө өтүңүз.</translation>
 <translation id="4033963223187371752">Коопсуз сайттар сүрөттөр же веб-алкактар сыяктуу кооптуу мазмунду жалгаштырышы мүмкүн</translation>
+<translation id="4034741552964543387">Аккаунттагы маалыматсыз улантуу</translation>
 <translation id="4034824040120875894">Принтер</translation>
 <translation id="4035758313003622889">&amp;Тапшырмаларды башкаргыч</translation>
 <translation id="4035877632587724847">Тыюу салуу</translation>
@@ -3418,6 +3425,7 @@
 <translation id="4242533952199664413">Жөндөөлөрдү ачуу</translation>
 <translation id="4242577469625748426">Түзмөккө саясат жөндөөлөрү орнотулбай койду: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Принтер тындырылды</translation>
+<translation id="424423026762293842">Аккаунттагы маалыматты калыбына келтирүү</translation>
 <translation id="4244238649050961491">Стилус үчүн көбүрөөк колдонмолорду табыңыз</translation>
 <translation id="4246980464509998944">Кошумча жорумдар:</translation>
 <translation id="424726838611654458">Ар дайым Adobe Reader'де ачылсын</translation>
@@ -4976,6 +4984,7 @@
 <translation id="5792728279623964091">Кубат баскычын басыңыз</translation>
 <translation id="5793339252089865437">Эгер жаңыртууну мобилдик Интернет аркылуу жүктөп алсаңыз, кошумча акы алынышы мүмкүн.</translation>
 <translation id="5793420564274426163">Жупташтырууну ырастоо</translation>
+<translation id="5793430094159150686">Сырсөзүңүз өзгөрдү. Аккаунтуңуздагы маалыматты калыбына келтирүү үчүн эски сырсөзүңүздү киргизишиңиз керек.</translation>
 <translation id="5794034487966529952"><ph name="DESK_TITLE" /> иш тактасында <ph name="NUM_BROWSERS" /> серепчи терезеси ачылып турат</translation>
 <translation id="5794414402486823030">Ар дайым тутум көрсөткүч менен ачылсын</translation>
 <translation id="5794700615121138172">Linux'тун бөлүшүлгөн папкалары</translation>
@@ -5900,6 +5909,7 @@
 <translation id="6700093763382332031">Мобилдик SIM-картаны кулпулоо</translation>
 <translation id="6700480081846086223">Тышкы экранга чыгаруу <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Профиль табылган жок.</translation>
+<translation id="6701824422332982935">Бул кеңейтүүлөрдү колдонуу үчүн баракты кайрадан жүктөңүз</translation>
 <translation id="6702639462873609204">&amp;Түзөтүү…</translation>
 <translation id="6703212423117969852">Бир аздан кийин Chrome'го өтүп, кайра аракет кылып көрсөңүз болот.</translation>
 <translation id="6703254819490889819">Камдык көчүрмөнү калыбына келтирүү</translation>
@@ -7127,6 +7137,7 @@
 <translation id="7903742244674067440">Тастыктоо бийлигин аныктаган файлда бир нече тастыктамаларыңыз бар</translation>
 <translation id="7903925330883316394">Утилита: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Тармагыңыздагы башка түзмөктөргө Linux оюкчаларын колдонууга уруксат бериңиз</translation>
+<translation id="7906440585529721295">Аккаунттагы маалымат өчүрүлөт</translation>
 <translation id="7907837847548254634">Фокуска алынган объектти бөлүп көрсөтүү</translation>
 <translation id="7908378463497120834">Кечиресиз, тышкы сактагыч түзмөгүнүн жада калса бир бөлүгү жалгаштырылган жок.</translation>
 <translation id="7909324225945368569">Профилиңиздин аталышын өзгөртүңүз</translation>
@@ -7464,6 +7475,7 @@
 <translation id="822050276545350872">Мындан ары күтүүнүн кереги жок</translation>
 <translation id="8221491193165283816">Адатта билдирмелерди өчүрөсүз. Бул сайтка билдирмелерди жөнөтүүгө уруксат берүү үчүн бул жерди чыкылдатыңыз.</translation>
 <translation id="822347941086490485">HID түзмөктөрү изделүүдө…</translation>
+<translation id="8223573963214454788">Улантуу жана маалыматты өчүрүү</translation>
 <translation id="8225046344534779393">Интернет байланышын текшериңиз</translation>
 <translation id="8225265270453771718">Колдонмонун терезесин бөлүшүңүз…</translation>
 <translation id="8226222018808695353">Тыюу салынган</translation>
@@ -7564,6 +7576,7 @@
 <translation id="8314381333424235892">Кеңейтүү жок же орнотулган эмес</translation>
 <translation id="831440797644402910">Бул папка ачылбай жатат</translation>
 <translation id="8314835274931377415">Switch Access функциясын жөндөп баштайсызбы?</translation>
+<translation id="8317582043908962055">P&amp;DF текстин таануу</translation>
 <translation id="8317671367883557781">Тармак туташуусун кошуу</translation>
 <translation id="8319414634934645341">Кеңейтилген ачкыч колдонуу</translation>
 <translation id="8321837372750396788">Бул <ph name="DEVICE_TYPE" /> түзмөгү <ph name="MANAGER" /> тарабынан башкарылат.</translation>
@@ -8449,6 +8462,7 @@
 <translation id="9203398526606335860">&amp;Профилдөө иштетилди</translation>
 <translation id="9203904171912129171">Түзмөк тандоо</translation>
 <translation id="9206889157914079472">Кулпуланган экранда стилус менен эскертме жазуу</translation>
+<translation id="9208192193641542858">Аккаунттагы маалымат эски сырсөзүңүз менен корголгон. Эгер жакында сырсөзүңүздү өзгөрткөн болсоңуз, эски сырсөздү киргизип көрүңүз.</translation>
 <translation id="9209563766569767417">Linux контейнеринин жөндөөсү текшерилүүдө</translation>
 <translation id="9209689095351280025">Сайттар Интернеттеги аракеттериңизге көз салган cookie файлдарын колдонушпайт</translation>
 <translation id="9211177926627870898">Жаңыртуу талап кылынат</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 2cb2ca7..1ba1542 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -383,6 +383,7 @@
 <translation id="1374844444528092021">Сертификатот што го бара мрежата „<ph name="NETWORK_NAME" />“ или не е инсталиран или повеќе не е важечки. Земете нов сертификат и обидете се повторно да се поврзете.</translation>
 <translation id="1375321115329958930">Зачувани лозинки</translation>
 <translation id="1375557162880614858">Дали сакате да го активирате ChromeVox, вградениот читач на екранот за ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Поставувањето е завршено! Следно, подгответе го уредот за играње</translation>
 <translation id="137651782282853227">Зачуваните адреси ќе се појават тука</translation>
 <translation id="1376771218494401509">Именувајте го &amp;прозорецот…</translation>
 <translation id="1377600615067678409">Прескокни засега</translation>
@@ -397,6 +398,7 @@
 <translation id="138784436342154190">Да се врати стандардната страница на стартување?</translation>
 <translation id="1388253969141979417">Дозволено им е да го користат микрофонот</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> ќе се рестартира кога ќе завршат ажурирањата.</translation>
+<translation id="1389601498324964367">Капацитет управуван со квота</translation>
 <translation id="139013308650923562">Дозволено им е да ги користат фонтовите инсталирани на уредот</translation>
 <translation id="1390548061267426325">Отвори како обична картичка</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> нема овластување да печати на <ph name="PRINTER_NAME" />. Контактирајте со администраторот.</translation>
@@ -1076,6 +1078,7 @@
 <translation id="1992924914582925289">Отстрани од уредот</translation>
 <translation id="1994173015038366702">URL на локацијата</translation>
 <translation id="1995916364271252349">Контролира кои информации може да ги користат и прикажуваат сајтовите (локација, камера, скокачки програми и друго)</translation>
+<translation id="1997433994358798851">На Chrome му треба дозвола за користење на Bluetooth за да се поврзе со вашиот уред</translation>
 <translation id="1997616988432401742">Ваши сертификати</translation>
 <translation id="1999115740519098545">На стартување</translation>
 <translation id="2000419248597011803">Испраќа колачиња и пребарувања од лентата за адреси и полето за пребарување во вашиот стандарден пребарувач</translation>
@@ -1740,6 +1743,7 @@
 <translation id="25899519884572181">Излезете од режим на читач</translation>
 <translation id="2593499352046705383">Пред да започнете, уверете се дека имате направено бекап на вашите податоци. Инсталирањето на <ph name="DEVICE_OS" /> ќе го презапише вашиот хард диск. Дознајте повеќе на g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Пребарајте на Google или внесете URL-адреса</translation>
+<translation id="2599048253926156421">Корисничкото име е копирано во привремена меморија</translation>
 <translation id="2602501489742255173">Повлечете нагоре за да започнете</translation>
 <translation id="2603115962224169880">Чистење на компјутерот</translation>
 <translation id="2603355571917519942">Voice Match е подготвена</translation>
@@ -1963,6 +1967,7 @@
 <translation id="2804043232879091219">Алтернативниот прелистувач не може да се отвори</translation>
 <translation id="2804667941345577550">Ќе ве одјавиме од сајтов, вклучително и од отворените картички</translation>
 <translation id="2804680522274557040">Камерата е исклучена</translation>
+<translation id="280518252911523675">Ако продолжите без да ја внесете старата лозинка, локалните податоци ќе се избришат. Ќе се најавите со вашата сметка на Google за да го поставите корисников повторно.</translation>
 <translation id="2805539617243680210">Подготвени сте!</translation>
 <translation id="2805646850212350655">Систем за шифрирање датотеки на Microsoft</translation>
 <translation id="2805756323405976993">Апликации</translation>
@@ -3078,6 +3083,7 @@
 <translation id="3895090224522145010">Корисничко име на Kerberos</translation>
 <translation id="389521680295183045">Сајтовите може да прашуваат за да знаат кога активно го користите уредот</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{слика}one{# слика}other{# слики}}</translation>
+<translation id="3897746662269329507">Вашиот уред <ph name="DEVICE_TYPE" /> е направен за играње игри. Апликацијата Explore ќе се отвори следно и во неа ќе имате пристап до стотици последни игри, ќе ви се прикажуваат понуди за играње игри и ќе ги откриете гејмерските функции што доаѓаат со вашиот уред.</translation>
 <translation id="3898233949376129212">Јазик на уредот</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> сака да: <ph name="FIRST_PERMISSION" /> и <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Изберете тастатура</translation>
@@ -3228,6 +3234,7 @@
 <translation id="4033471457476425443">Додај нова папка</translation>
 <translation id="4033711848170683365">Ова трајно ќе ги избрише податоците од прелистувањето на уредов. Сметките на Google во профилов може да се користат од други апликации на вашиот <ph name="DEVICE_TYPE" />. Може да ги отстраните сметкиве во <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Безбедните сајтови може да вметнуваат содржини како слики или веб-рамки што не се безбедни</translation>
+<translation id="4034741552964543387">Продолжете без локални податоци</translation>
 <translation id="4034824040120875894">Печатач</translation>
 <translation id="4035758313003622889">&amp;Управник со задачи</translation>
 <translation id="4035877632587724847">Не дозволувај</translation>
@@ -3419,6 +3426,7 @@
 <translation id="4242533952199664413">Отвори ги поставките</translation>
 <translation id="4242577469625748426">Не успеа да инсталира поставки за правило на уредот: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Печатачот е паузиран</translation>
+<translation id="424423026762293842">Вратете ги локалните податоци</translation>
 <translation id="4244238649050961491">Најди други апликации за пенкало</translation>
 <translation id="4246980464509998944">Дополнителни коментари:</translation>
 <translation id="424726838611654458">Секогаш отворај во Adobe Reader</translation>
@@ -4977,6 +4985,7 @@
 <translation id="5792728279623964091">Допрете го копчето за вклучување</translation>
 <translation id="5793339252089865437">Доколку го преземете ажурирањето преку вашата мобилна мрежа, може да ви се наплати за надминување на квотата.</translation>
 <translation id="5793420564274426163">Потврда за спарување</translation>
+<translation id="5793430094159150686">Лозинката е сменета. За да ги вратите локалните податоци, треба да ја внесете старата лозинка.</translation>
 <translation id="5794034487966529952">Работната површина <ph name="DESK_TITLE" /> има <ph name="NUM_BROWSERS" /> отворени прозорци на прелистувач</translation>
 <translation id="5794414402486823030">Секогаш отворај со прегледувачот на системот</translation>
 <translation id="5794700615121138172">Споделени папки на Linux</translation>
@@ -5903,6 +5912,7 @@
 <translation id="6700093763382332031">Заклучување на мобилната SIM-картичка</translation>
 <translation id="6700480081846086223">Емитувај <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Не може да се добие профил.</translation>
+<translation id="6701824422332982935">Повторно вчитајте ја страницата за да ги користите екстензииве</translation>
 <translation id="6702639462873609204">&amp;Уреди...</translation>
 <translation id="6703212423117969852">Може да пробате пак во Chrome подоцна.</translation>
 <translation id="6703254819490889819">Врати го бекапот</translation>
@@ -7130,6 +7140,7 @@
 <translation id="7903742244674067440">Имате сертификати што ги идентификуваат овие органи за сертификати</translation>
 <translation id="7903925330883316394">Услужна програма: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Направете ги портите за Linux достапни на други уреди на вашата мрежа.</translation>
+<translation id="7906440585529721295">Локалните податоци ќе бидат избришани</translation>
 <translation id="7907837847548254634">Нагласи го накратко предметот што е во фокус</translation>
 <translation id="7908378463497120834">Извинете, најмалку една партиција на надворешниот уред не може да се постави.</translation>
 <translation id="7909324225945368569">Преименувајте го профилот</translation>
@@ -7467,6 +7478,7 @@
 <translation id="822050276545350872">Отсега па понатаму, не треба да чекате</translation>
 <translation id="8221491193165283816">Вообичаено ги блокирате известувањата. За да дозволите сајтов да ве известува, кликнете тука.</translation>
 <translation id="822347941086490485">Се бараат HID-уреди…</translation>
+<translation id="8223573963214454788">Продолжи и избриши ги податоците</translation>
 <translation id="8225046344534779393">Проверете ја интернет-врската</translation>
 <translation id="8225265270453771718">Споделете го прозорецот на апликацијата</translation>
 <translation id="8226222018808695353">Забрането</translation>
@@ -7570,6 +7582,7 @@
 <translation id="8314381333424235892">Недостасува екстензија или не е инсталирана</translation>
 <translation id="831440797644402910">Папкава не може да се отвори</translation>
 <translation id="8314835274931377415">Да се стартува поставувањето на „Пристап со прекинувачи“?</translation>
+<translation id="8317582043908962055">Препознавање текст во PDF</translation>
 <translation id="8317671367883557781">Додај мрежна врска</translation>
 <translation id="8319414634934645341">Користење продолжен клуч</translation>
 <translation id="8321837372750396788"><ph name="MANAGER" /> ќе управува со овој <ph name="DEVICE_TYPE" />.</translation>
@@ -8456,6 +8469,7 @@
 <translation id="9203398526606335860">&amp;Профилирањето е овозможено</translation>
 <translation id="9203904171912129171">Изберете уред</translation>
 <translation id="9206889157914079472">Земање белешки со пенкало од заклучен екран</translation>
+<translation id="9208192193641542858">Локалните податоци се заштитени со вашата стара лозинка. Ако неодамна сте ја промениле лозинката, пробајте ја старата лозинка повторно.</translation>
 <translation id="9209563766569767417">Се проверува поставувањето на контејнерот за Linux</translation>
 <translation id="9209689095351280025">Сајтовите не можe да користат колачиња што ве следат на интернет</translation>
 <translation id="9211177926627870898">Потребно е ажурирање</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index 9fb25a5..479d11d9 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">"<ph name="NETWORK_NAME" />" сүлжээнээс шаардсан гэрчилгээ нь суугдаагүй дээр нь хүчингүй болсон байна. Шинэ гэрчилгээ аваад, дахин холбогдохыг оролдож үзээрэй.</translation>
 <translation id="1375321115329958930">Хадгалагдсан нууц үг</translation>
 <translation id="1375557162880614858">Та ChromeOS Flex-н бүрэлдэхүүн дэлгэц уншигч болох ChromeVox-г идэвхжүүлэхийг хүсэж байна уу?</translation>
+<translation id="1375938286942050085">Тохируулга дууслаа! Дараа нь төхөөрөмжөө тоглоом тоглоход бэлэн болгоорой</translation>
 <translation id="137651782282853227">Хадгалсан хаяг энд харагдана</translation>
 <translation id="1376771218494401509">Цонхыг &amp;нэрлэх...</translation>
 <translation id="1377600615067678409">Одоогоор алгасъя</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Өгөгдмөл эхлүүлэх хуудсыг сэргээх үү?</translation>
 <translation id="1388253969141979417">Таны микрофоныг ашиглахыг зөвшөөрсөн</translation>
 <translation id="1388728792929436380">Шинэчилж дуусахад <ph name="DEVICE_TYPE" /> дахин эхэлнэ.</translation>
+<translation id="1389601498324964367">Квотоор удирддаг хадгалах сан</translation>
 <translation id="139013308650923562">Таны төхөөрөмж дээр суулгасан фонтуудыг ашиглахыг зөвшөөрсөн</translation>
 <translation id="1390548061267426325">Энгийн цонх хэлбэрээр нээх</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> нь <ph name="PRINTER_NAME" />-р хэвлэх зөвшөөрөлгүй. Админтайгаа холбогдоно уу.</translation>
@@ -1071,6 +1073,7 @@
 <translation id="1992924914582925289">Төхөөрөмжөөс хасах</translation>
 <translation id="1994173015038366702">Сайтын URL</translation>
 <translation id="1995916364271252349">Ямар мэдээллийг сайтууд ашиглаж, харуулж (байршил, камер, үзэгдэх болон бусад зүйл) болохыг хянадаг</translation>
+<translation id="1997433994358798851">Chrome-д таны төхөөрөмжтэй холбогдохын тулд Bluetooth-г ашиглах зөвшөөрөл шаардлагатай</translation>
 <translation id="1997616988432401742">Таны сертификат</translation>
 <translation id="1999115740519098545">Эхлүүлэх</translation>
 <translation id="2000419248597011803">Таны өгөгдмөл хайлтын системд хаяг оруулах хэсэг, хайх хэсгийн зарим күүки болон хайлтыг илгээдэг</translation>
@@ -1735,6 +1738,7 @@
 <translation id="25899519884572181">Уншигчийн горимоос гарах</translation>
 <translation id="2593499352046705383">Эхлэхээсээ өмнө өгөгдлөө нөөцөлсөн эсэхээ шалгана уу. <ph name="DEVICE_OS" />-г суулгаснаар таны хатуу дискийг дарж бичнэ. Та g.co/flex/InstallGuide дээрээс нэмэлт мэдээлэл авна уу.</translation>
 <translation id="2594999711683503743">Google-с хайх эсвэл URL бичих</translation>
+<translation id="2599048253926156421">Хэрэглэгчийн нэрийг түр санах ойд хуулсан</translation>
 <translation id="2602501489742255173">Эхлүүлэхийн тулд дээш шударна уу</translation>
 <translation id="2603115962224169880">Компьютерийг цэвэрлэх</translation>
 <translation id="2603355571917519942">Voice Match бэлэн байна</translation>
@@ -1958,6 +1962,7 @@
 <translation id="2804043232879091219">Өөр хөтчийг нээж чадсангүй</translation>
 <translation id="2804667941345577550">Та энэ сайтаас гарах бөгөөд үүнд нээлттэй табын сайт мөн багтана</translation>
 <translation id="2804680522274557040">Камерыг унтраасан</translation>
+<translation id="280518252911523675">Хэрэв та хуучин нууц үгээ оруулалгүйгээр үргэлжлүүлбэл таны дотоод өгөгдлийг устгана. Та энэ хэрэглэгчийг дахин тохируулахын тулд Google Бүртгэлээрээ нэвтэрнэ.</translation>
 <translation id="2805539617243680210">Тохируулж дууслаа!</translation>
 <translation id="2805646850212350655">Microsoft Encrypting File System</translation>
 <translation id="2805756323405976993">Програм</translation>
@@ -3073,6 +3078,7 @@
 <translation id="3895090224522145010">Kerberos хэрэглэгчийн нэр</translation>
 <translation id="389521680295183045">Сайтууд таныг төхөөрөмжөө хэзээ идэвхтэй ашиглаж буйг мэдэхийг хүсэх боломжтой</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{1 зураг}other{# зураг}}</translation>
+<translation id="3897746662269329507">Таны <ph name="DEVICE_TYPE" /> тоглоом тоглоход зориулагдсан. Дараа нь Судлах апп нээгдэх бөгөөд эндээс та сүүлийн үеийн зуу зуун тоглоомд хандах, тоглоомын санал харах болон төхөөрөмжид тань дагалдаж ирсэн тоглоомын онцлогуудтай танилцах боломжтой.</translation>
 <translation id="3898233949376129212">Төхөөрөмжийн хэл</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> дараах зөвшөөрлүүдийг хүсэж байна: <ph name="FIRST_PERMISSION" /> болон <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Гар сонгох</translation>
@@ -3222,6 +3228,7 @@
 <translation id="4033471457476425443">Шинэ фолдер нэмэх</translation>
 <translation id="4033711848170683365">Энэ нь уг төхөөрөмжөөс интернэтээр үзсэн өгөгдлийг бүрмөсөн устгана. Энэ профайл дахь Google Бүртгэлүүдийг таны <ph name="DEVICE_TYPE" /> дээрх бусад апп ашиглаж магадгүй. Та эдгээр бүртгэлийг <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />-с хасах боломжтой.</translation>
 <translation id="4033963223187371752">Аюулгүй сайтууд аюултай зураг эсвэл вебийн фрейм зэрэг контентыг оруулж магадгүй</translation>
+<translation id="4034741552964543387">Дотоод өгөгдөлгүйгээр үргэлжлүүлэх</translation>
 <translation id="4034824040120875894">Хэвлэгч</translation>
 <translation id="4035758313003622889">&amp; Асуудлын менежер</translation>
 <translation id="4035877632587724847">Бүү зөвшөөр</translation>
@@ -3413,6 +3420,7 @@
 <translation id="4242533952199664413">Нээлттэй тохиргоо</translation>
 <translation id="4242577469625748426">Төхөөрөмж дээр холбогдох бодлогын тохиргоог суурьлуулах үйлдэл амжилтгүй болсон байна: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Хэвлэгчийг түр зогсоосон</translation>
+<translation id="424423026762293842">Дотоод өгөгдлөө сэргээнэ үү</translation>
 <translation id="4244238649050961491">Мэдрэгч үзэгний бусад аппыг хайх</translation>
 <translation id="4246980464509998944">Нэмэлт сэтгэгдэл:</translation>
 <translation id="424726838611654458">Adobe Reader-д үргэлж нээж байх</translation>
@@ -4972,6 +4980,7 @@
 <translation id="5792728279623964091">Асаах товчийг товшино уу</translation>
 <translation id="5793339252089865437">Хэрэв та шинэчлэлтийг мобайл сүлжээгээрээ татвал нэмэлт төлбөр гарч болзошгүй.</translation>
 <translation id="5793420564274426163">Хослуулалтын баталгаажуулалт</translation>
+<translation id="5793430094159150686">Таны нууц үг өөрчлөгдсөн байна. Дотоод өгөгдлөө сэргээхийн тулд та хуучин нууц үгээ оруулах шаардлагатай.</translation>
 <translation id="5794034487966529952"><ph name="DESK_TITLE" /> дэлгэцэд хөтчийн <ph name="NUM_BROWSERS" /> цонх нээлттэй байна</translation>
 <translation id="5794414402486823030">Систем харагчтай үргэлж хамт нээх</translation>
 <translation id="5794700615121138172">Linux-н хуваалцсан фолдерууд</translation>
@@ -5895,6 +5904,7 @@
 <translation id="6700093763382332031">Үүрэн холбооны SIM-н түгжээ</translation>
 <translation id="6700480081846086223">Каст хийх <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Хувийн мэдээллийг олж авч чадсангүй.</translation>
+<translation id="6701824422332982935">Эдгээр өргөтгөлийг ашиглахын тулд хуудсыг дахин ачаална уу</translation>
 <translation id="6702639462873609204">&amp;Засах ...</translation>
 <translation id="6703212423117969852">Та дараа Chrome-д дахин оролдох боломжтой.</translation>
 <translation id="6703254819490889819">Нөөцлөлтийг сэргээх</translation>
@@ -7121,6 +7131,7 @@
 <translation id="7903742244674067440">Танд эдгээр сертификатын эрхийг тодорхойлох файлын сертификат байна</translation>
 <translation id="7903925330883316394">Хэрэгсэл: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Linux портыг сүлжээнийхээ бусад төхөөрөмжид боломжтой болгоно уу.</translation>
+<translation id="7906440585529721295">Дотоод өгөгдлийг устгана</translation>
 <translation id="7907837847548254634">Төвлөрсөн объектыг шуурхай тодруулан харуулах</translation>
 <translation id="7908378463497120834">Уучлаарай, таны гадаад хадгалалтын төхөөрөмжийн нэг ч хэсгийг холбож чадсангүй.</translation>
 <translation id="7909324225945368569">Профайлынхаа нэрийг өөрчлөх</translation>
@@ -7457,6 +7468,7 @@
 <translation id="822050276545350872">Үүнээс хойш хүлээх шаардлагагүй болно</translation>
 <translation id="8221491193165283816">Та ихэвчлэн мэдэгдлийг хориглодог. Энэ сайтад танд мэдэгдэхийг зөвшөөрөхийн тулд энд товшино уу.</translation>
 <translation id="822347941086490485">HID төхөөрөмжүүдийг хайж байна...</translation>
+<translation id="8223573963214454788">Үргэлжлүүлээд, өгөгдлийг устгах</translation>
 <translation id="8225046344534779393">Интернэт холболтоо шалгана уу</translation>
 <translation id="8225265270453771718">Аппликейшний цонхыг хуваалцах</translation>
 <translation id="8226222018808695353">Хориотой</translation>
@@ -7557,6 +7569,7 @@
 <translation id="8314381333424235892">Өргөтгөл байхгүй эсвэл устгагдсан</translation>
 <translation id="831440797644402910">Энэ фолдерыг нээх боломжгүй байна</translation>
 <translation id="8314835274931377415">Сэлгүүрийн тохируулгыг эхлүүлэх үү?</translation>
+<translation id="8317582043908962055">P&amp;DF текстийг таних</translation>
 <translation id="8317671367883557781">Сүлжээний холболт нэмэх</translation>
 <translation id="8319414634934645341">Өргөтгөсөн гол хэрэглээ</translation>
 <translation id="8321837372750396788">Энэ <ph name="DEVICE_TYPE" />-г <ph name="MANAGER" /> удирдана.</translation>
@@ -8440,6 +8453,7 @@
 <translation id="9203398526606335860">&amp;Profiling идэвхжсэн</translation>
 <translation id="9203904171912129171">Төхөөрөмж сонгох</translation>
 <translation id="9206889157914079472">Түгжигдсэн дэлгэцээс мэдрэгч үзгээр тэмдэглэл хөтлөх</translation>
+<translation id="9208192193641542858">Дотоод өгөгдлийг таны хуучин нууц үгээр хамгаалдаг. Хэрэв та нууц үгээ саяхан өөрчилсөн бол хуучин нууц үгээрээ дахин оролдоно уу.</translation>
 <translation id="9209563766569767417">Linux контейнерын тохируулгыг шалгаж байна</translation>
 <translation id="9209689095351280025">Сайтууд нь таныг веб дээр хянадаг күүкиг ашиглах боломжгүй байна</translation>
 <translation id="9211177926627870898">Шинэчлэх шаардлагатай</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index bc0a19c7..eb6119b 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">"<ph name="NETWORK_NAME" />" ကွန်ယက်က လိုအပ်သော လက်မှတ်ကို ထည့်သွင်းမထားခြင်း သို့မဟုတ် သက်တမ်းမရှိတော့ခြင်း ဖြစ်နေပါသည်။ ကျေးဇူးပြုပြီး လက်မှတ်အသစ် ရယူပြီး နောက်တစ်ကြိမ် ပြန်ဆက်သွယ်ပေးပါ။</translation>
 <translation id="1375321115329958930">သိမ်းဆည်းထားသည့် စကားဝှက်များ</translation>
 <translation id="1375557162880614858">ChromeOS Flex အတွက် အသင့်ပါသည့် ဖန်သားပြင်ဖတ်အက်ပ် ChromeVox ကို ဖွင့်လိုပါသလား။</translation>
+<translation id="1375938286942050085">စနစ်ထည့်သွင်းပြီးပါပြီ။ ပြီးနောက် ဂိမ်းကစားရန်အတွက် စက်ကိုအသင့်ပြင်ပါ</translation>
 <translation id="137651782282853227">သိမ်းထားသော လိပ်စာများ ဤနေရာတွင်ပေါ်လာပါမည်</translation>
 <translation id="1376771218494401509">ဝင်းဒိုး အမည်ပေးရန်...</translation>
 <translation id="1377600615067678409">ယခု ကျော်လိုက်မည်</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">စဖွင့်စာမျက်နှာကို မူလအတိုင်း ပြန်ထားလိုပါသလား။</translation>
 <translation id="1388253969141979417">သင့်မိုက်ခရိုဖုန်း သုံးရန် ခွင့်ပြုထားသည်</translation>
 <translation id="1388728792929436380">အပ်ဒိတ်များလုပ်ပြီးသည့်အခါ <ph name="DEVICE_TYPE" /> ပြန်လည်စတင်မည်။</translation>
+<translation id="1389601498324964367">ခွဲတမ်းချ-စီမံထားသည့် သိုလှောင်ခန်း</translation>
 <translation id="139013308650923562">သင့်ကိရိယာတွင်ထည့်သွင်းထားသော ဖောင့်များသုံးရန် ခွင့်ပြုထားသည်</translation>
 <translation id="1390548061267426325">ပုံမှန် တပ်ဖ် အနေဖြင့် ဖွင့်မည်</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> ကို <ph name="PRINTER_NAME" /> တွင် ပုံနှိပ်ထုတ်ရန် ခွင့်ပြုမထားပါ။ သင့်စီမံခန့်ခွဲသူထံ ဆက်သွယ်ပါ။</translation>
@@ -1073,6 +1075,7 @@
 <translation id="1992924914582925289">စက်မှ ဖယ်ရှားရန်</translation>
 <translation id="1994173015038366702">ဆိုက် URL</translation>
 <translation id="1995916364271252349">ဝဘ်ဆိုက်များက မည်သည့်အချက်အလက်များကို အသုံးပြုပြီး ပြသနိုင်သည်ကို ထိန်းချုပ်ပါ (တည်နေရာ၊ ကင်မရာ၊ ပေါ့ပ်အပ်နှင့် အခြားအရာများ)</translation>
+<translation id="1997433994358798851">သင့်စက်ကို ချိတ်ဆက်ရန်အတွက် Chrome အား ဘလူးတုသ်အသုံးပြုခွင့်ပေးရန် လိုအပ်သည်</translation>
 <translation id="1997616988432401742">သင်ရဲ့ လက်မှတ်များ</translation>
 <translation id="1999115740519098545">အစပြုချိန်တွင်</translation>
 <translation id="2000419248597011803">လိပ်စာဘားနှင့် ရှာဖွေမှုအကွက်ထဲရှိ အချို့သော ကွတ်ကီးများနှင့် ရှာဖွေမှုများကို သင်၏မူရင်းရှာဖွေမှုအင်ဂျင်သို့ ပို့သည်</translation>
@@ -1737,6 +1740,7 @@
 <translation id="25899519884572181">'စာဖတ်သူမုဒ်' မှ ထွက်ရန်</translation>
 <translation id="2593499352046705383">မစတင်မီ သင့်ဒေတာကို အရန်သိမ်းထားကြောင်း သေချာပါစေ။ <ph name="DEVICE_OS" /> ထည့်သွင်းခြင်းသည် သင့်ဟတ်ဒရိုက်ဗ်ကို အစားထိုးပါမည်။ g.co/flex/InstallGuide တွင် ပိုမိုလေ့လာပါ။</translation>
 <translation id="2594999711683503743">Google တွင် ရှာပါ သို့မဟုတ် URL ကို ရိုက်ပါ</translation>
+<translation id="2599048253926156421">အသုံးပြုသူအမည်ကို ကလစ်ဘုတ်သို့ ကူးပြီးပြီ</translation>
 <translation id="2602501489742255173">စတင်ရန် အပေါ်သို့ ပွတ်ဆွဲပါ</translation>
 <translation id="2603115962224169880">ကွန်ပျူတာကို ရှင်းလင်းခြင်း</translation>
 <translation id="2603355571917519942">Voice Match အသင့်ဖြစ်ပြီ</translation>
@@ -1960,6 +1964,7 @@
 <translation id="2804043232879091219">အရန်ဘရောင်ဇာ ဖွင့်၍မရပါ</translation>
 <translation id="2804667941345577550">ဖွင့်ထားသည့်တဘ်များအပါအဝင် ဤဝဘ်ဆိုက်မှ သင်ထွက်သွားပါမည်</translation>
 <translation id="2804680522274557040">ကင်မရာ ပိတ်ထားပါသည်</translation>
+<translation id="280518252911523675">သင့်စကားဝှက်အဟောင်းကိုမထည့်ဘဲ ရှေ့ဆက်ပါက စက်တွင်းဒေတာကို ဖျက်ပါမည်။ ဤအသုံးပြုသူကို ပြန်လည်ထည့်သွင်းရန် သင့် Google Account ဖြင့် လက်မှတ်ထိုးဝင်ရပါမည်။</translation>
 <translation id="2805539617243680210">အဆင်သင့် ဖြစ်ပါပြီ။</translation>
 <translation id="2805646850212350655">Microsoft လျှို့ဝှက်ကုဒ်သွင်းရေး ဖိုင် စနစ်</translation>
 <translation id="2805756323405976993">အက်ပ်များ</translation>
@@ -3075,6 +3080,7 @@
 <translation id="3895090224522145010">Kerberos အသုံးပြုသူအမည်</translation>
 <translation id="389521680295183045">သင့်ကိရိယာသုံးနေချိန်ကို သိရန် ဝဘ်ဆိုက်များက ခွင့်တောင်းနိုင်သည်</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{ပုံတစ်ပုံ}other{ပုံ # ပုံ}}</translation>
+<translation id="3897746662269329507">သင့် <ph name="DEVICE_TYPE" /> ကို ဂိမ်းကစားရန်အတွက် ပြုလုပ်ထားသည်။ ရှေ့တွင် Explore အက်ပ် ပွင့်မည်ဖြစ်ပြီး နောက်ဆုံးပေါ်ဂိမ်း ရာပေါင်းများစွာကို ကစားခြင်း၊ ဂိမ်းကမ်းလှမ်းချက်များ ကြည့်ခြင်းနှင့် သင့်စက်တွင်ပါသော ဂိမ်းဝန်ဆောင်မှုများ ကြည့်ရှုခြင်းတို့ ပြုလုပ်နိုင်သည်။</translation>
 <translation id="3898233949376129212">စက်၏ ဘာသာစကား</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> က အောက်ပါတို့ကို ပြုလုပ်လိုသည်- <ph name="FIRST_PERMISSION" /> နှင့် <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">ကီးဘုတ်ကို ရွေးပါ</translation>
@@ -3224,6 +3230,7 @@
 <translation id="4033471457476425443">ဖိုင်တွဲအသစ် ထည့်ရန်</translation>
 <translation id="4033711848170683365">၎င်းသည် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာကို ဤစက်ထဲမှ အပြီးဖျက်လိုက်ပါမည်။ ဤပရိုဖိုင်ရှိ Google Account များကို သင့် <ph name="DEVICE_TYPE" /> ရှိ အခြားအက်ပ်များက အသုံးပြုနိုင်သည်။ ဤအကောင့်များကို <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" /> တွင်ဖယ်ရှားနိုင်သည်။</translation>
 <translation id="4033963223187371752">လုံခြုံသောဝဘ်ဆိုက်များသည် ဘေးကင်းမှုမရှိသော ပုံများ (သို့) ဝဘ်ဖရိမ်များကဲ့သို့ အကြောင်းအရာများကို မြှုပ်သွင်းထားနိုင်သည်</translation>
+<translation id="4034741552964543387">စက်တွင်းဒေတာမပါဘဲ ရှေ့ဆက်ရန်</translation>
 <translation id="4034824040120875894">ပရင်တာ</translation>
 <translation id="4035758313003622889">အလုပ် မန်နေဂျာ</translation>
 <translation id="4035877632587724847">ခွင့်မပြုပါ</translation>
@@ -3415,6 +3422,7 @@
 <translation id="4242533952199664413">ဆက်တင်များကို ဖွင့်ရန်</translation>
 <translation id="4242577469625748426">စက်ပစ္စည်းပေါ်တွင် ပေါ်လစီကြိုတင်ချိန်ညှိချက်များ ထည့်သွင်းခြင်း မအောင်မြင်ပါ: <ph name="VALIDATION_ERROR" />။</translation>
 <translation id="4243504193894350135">ပရင်တာကို ခဏရပ်ထားသည်</translation>
+<translation id="424423026762293842">စက်တွင်းဒေတာကို ပြန်ယူခြင်း</translation>
 <translation id="4244238649050961491">နောက်ထပ် စတိုင်လပ်စ်အက်ပ်များကို ရှာဖွေရန်</translation>
 <translation id="4246980464509998944">နောက်ထပ် မှတ်ချက်များ-</translation>
 <translation id="424726838611654458">အမြဲတမ်း Adobe Reader ထဲမှာ ဖွင့်ရန်</translation>
@@ -4974,6 +4982,7 @@
 <translation id="5792728279623964091">သင့်ဖွင့်ပိတ်ခလုတ်ကို တို့ပါ</translation>
 <translation id="5793339252089865437">အပ်ဒိတ်ကို သင့်မိုဘိုင်းကွန်ရက်မှတစ်ဆင့် ဒေါင်းလုဒ်လုပ်လျှင် ကျသင့်ငွေများ အများအပြားပေးရနိုင်ပါသည်။</translation>
 <translation id="5793420564274426163">တွဲချိတ်ရန် အတည်ပြုချက်</translation>
+<translation id="5793430094159150686">သင့်စကားဝှက် ပြောင်းထားသည်။ စက်တွင်းဒေတာကို ပြန်ယူရန် စကားဝှက်အဟောင်း ထည့်ရမည်။</translation>
 <translation id="5794034487966529952">မျက်နှာပြင်နေရာ ‘<ph name="DESK_TITLE" />’ တွင် ဘရောင်ဇာဝင်းဒိုး <ph name="NUM_BROWSERS" /> ခု ဖွင့်ထားသည်</translation>
 <translation id="5794414402486823030">အမြဲတမ်း စနစ် ကြည့်ရှုသူဖြင့် ဖွင့်ပါ</translation>
 <translation id="5794700615121138172">Linux မျှဝေထားသော ဖိုင်တွဲများ</translation>
@@ -5895,6 +5904,7 @@
 <translation id="6700093763382332031">ဆယ်လူလာဆင်းမ် လော့ခ်</translation>
 <translation id="6700480081846086223"><ph name="HOST_NAME" /> ကာစ်တ်လုပ်ရန်</translation>
 <translation id="6701535245008341853">ပရိုဖိုင် မရရှိနိုင်ပါ။</translation>
+<translation id="6701824422332982935">ဤနောက်ဆက်တွဲများသုံးရန် စာမျက်နှာကို ပြန်လည်စတင်ပါ</translation>
 <translation id="6702639462873609204">&amp;တည်းဖြတ်ရန်...</translation>
 <translation id="6703212423117969852">Chrome တွင် နောက်မှ ထပ်စမ်းကြည့်နိုင်သည်။</translation>
 <translation id="6703254819490889819">မိတ္တူ ပြန်ယူရန်</translation>
@@ -7122,6 +7132,7 @@
 <translation id="7903742244674067440">ဤအသိအမှတ်ပြုလက်မှတ် အာဏာပိုင်များ၏ အထောက်အထားအဖြစ် အသိအမှတ်ပြုလက်မှတ်များ သင့်ထံတွင် ရှိပါသည်</translation>
 <translation id="7903925330883316394">ဝန်ဆောင်မှုလုပ်ငန်းများ- <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">သင့်ကွန်ရက်ရှိ အခြားစက်ပစ္စည်းများသည် Linux ပို့တ်များကို အသုံးပြုနိုင်အောင် ပြုလုပ်ပါ။</translation>
+<translation id="7906440585529721295">စက်တွင်းဒေတာကို ဖျက်ပါမည်</translation>
 <translation id="7907837847548254634">ဦးစားပေးသည့်အရာပေါ်တွင် ခဏမြင်သာအောင် ပြရန်</translation>
 <translation id="7908378463497120834">ဆော်ရီး၊ အနည်းဆုံးအားဖြင့် သင့်ပြင်ပ သိုလှောင်မှု စက်ပစ္စည်းပေါ်က အကန့် တစ်ခုကို တပ်ဆင်မထားရန် လိုသည်။</translation>
 <translation id="7909324225945368569">သင့်ပရိုဖိုင်ကို အမည်ပြောင်းရန်</translation>
@@ -7459,6 +7470,7 @@
 <translation id="822050276545350872">ဤနေရာမှစ၍ စောင့်ရန်မလိုအပ်တော့ပါ</translation>
 <translation id="8221491193165283816">ပုံမှန်အားဖြင့် သင်သည် အကြောင်းကြားချက်များကို ပိတ်ထားသည်။ သင့်ထံအကြောင်းကြားရန်အတွက် ဤဝဘ်ဆိုက်အား ခွင့်ပြုရန် ဤနေရာတွင် နှိပ်ပါ။</translation>
 <translation id="822347941086490485">HID စက်များ ရှာနေသည်...</translation>
+<translation id="8223573963214454788">ရှေ့ဆက်ပြီး ဒေတာဖျက်ရန်</translation>
 <translation id="8225046344534779393">အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ</translation>
 <translation id="8225265270453771718">အပလီကေးရှင်း ဝင်းဒိုး မျှဝေခြင်း</translation>
 <translation id="8226222018808695353">တားမြစ်ထားသည်</translation>
@@ -7559,6 +7571,7 @@
 <translation id="8314381333424235892">နောက်ဆက်တွဲ ပျောက်နေသည် သို့မဟုတ် ထည့်သွင်းမထားပါ</translation>
 <translation id="831440797644402910">ဤဖိုင်တွဲကို ဖွင့်၍မရပါ</translation>
 <translation id="8314835274931377415">‘ခလုတ်သုံးခြင်း’ စနစ်ထည့်သွင်းမှု စတင်မလား။</translation>
+<translation id="8317582043908962055">P&amp;DF စာသား မှတ်သားရန်</translation>
 <translation id="8317671367883557781">ကွန်ရက်ချိတ်ဆက်မှု ထည့်ပါ</translation>
 <translation id="8319414634934645341">သော့ အသုံးပြမှု တိုးချဲ့ထား</translation>
 <translation id="8321837372750396788">ဤ <ph name="DEVICE_TYPE" /> ကို <ph name="MANAGER" /> က စီမံခန့်ခွဲပါမည်။</translation>
@@ -8444,6 +8457,7 @@
 <translation id="9203398526606335860">&amp;ပရိုဖိုင်ကြည့်မှု ဖွင့်ထား</translation>
 <translation id="9203904171912129171">စက်ပစ္စည်းတစ်ခု ရွေးချယ်ပါ</translation>
 <translation id="9206889157914079472">လော့ခ်ချထားချိန် မျက်နှာပြင်မှ စတိုင်လပ်စ် မှတ်စုရေးရန်</translation>
+<translation id="9208192193641542858">စက်တွင်းဒေတာကို သင့်စကားဝှက်အဟောင်းဖြင့် ကာကွယ်ထားသည်။ လတ်တလောတွင် သင့်စကားဝှက် ပြောင်းထားပါက စကားဝှက်အဟောင်းဖြင့် စမ်းကြည့်ပါ။</translation>
 <translation id="9209563766569767417">Linux ကွန်တိန်နာ စနစ်ထည့်သွင်းမှု စစ်ဆေးနေသည်</translation>
 <translation id="9209689095351280025">ဝဘ်တစ်လျှောက် သင့်အားခြေရာခံသည့် ကွတ်ကီးများကို ဝဘ်ဆိုက်များက အသုံးမပြုနိုင်ပါ</translation>
 <translation id="9211177926627870898">အပ်ဒိတ်လုပ်ရန် လိုပါသည်</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 809cd78b..f4fea8f 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -159,6 +159,7 @@
 <translation id="1148063863818152153">EID-nummeret til enheten din</translation>
 <translation id="1148624853678088576">Du er klar.</translation>
 <translation id="1149401351239820326">Utløpsmåned</translation>
+<translation id="1149483087970735785">Assisterende teknologi</translation>
 <translation id="1149725087019908252">Skanner <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Dette er den siste automatiske programvare- og sikkerhetsoppdateringen for denne <ph name="DEVICE_TYPE" />-enheten. For å få fremtidige oppdateringer, oppgrader til en nyere modell. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="1150565364351027703">Solbriller</translation>
@@ -381,6 +382,7 @@
 <translation id="1374844444528092021">Sertifikatet som kreves av nettverket «<ph name="NETWORK_NAME" />» mangler eller er ikke gyldig lenger. Hent et nytt sertifikat og prøv å koble til på nytt.</translation>
 <translation id="1375321115329958930">Lagrede passord</translation>
 <translation id="1375557162880614858">Vil du slå på ChromeVox, den innebygde skjermleseren for ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Konfigureringen er fullført. Nå kan du gjøre enheten klar for gaming</translation>
 <translation id="137651782282853227">Lagrede adresser vises her</translation>
 <translation id="1376771218494401509">Gi navn til &amp;vinduet …</translation>
 <translation id="1377600615067678409">Hopp over</translation>
@@ -395,6 +397,7 @@
 <translation id="138784436342154190">Vil du gjenopprette standardverdien for oppstartssiden?</translation>
 <translation id="1388253969141979417">Nettsteder som har lov til å bruke mikrofonen din</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> starter på nytt når oppdateringene er fullført.</translation>
+<translation id="1389601498324964367">Kvoteadministrert lagringsplass</translation>
 <translation id="139013308650923562">Får bruke skrifttyper som er installert på enheten</translation>
 <translation id="1390548061267426325">Åpne som vanlig fane</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> er ikke autorisert til å skrive ut på <ph name="PRINTER_NAME" />. Kontakt administratoren din.</translation>
@@ -730,6 +733,7 @@
 <translation id="1680849702532889074">Det oppsto en feil under installasjon av Linux-programmet ditt.</translation>
 <translation id="16815041330799488">Ikke la nettsteder se tekst og bilder som er kopiert til utklippstavlen</translation>
 <translation id="1682548588986054654">Nytt inkognitovindu</translation>
+<translation id="1682696837763999627">Stor musemarkør</translation>
 <translation id="1682867089915960590">Vil du slå på markørsurfing?</translation>
 <translation id="1686550358074589746">Slå på sveipeskriving</translation>
 <translation id="168715261339224929">For å få bokmerkene dine på alle enhetene dine, slå på synkronisering.</translation>
@@ -839,6 +843,7 @@
 <translation id="178092663238929451">Konfigurer nærdeling for å motta og sende filer fra og til folk rundt deg</translation>
 <translation id="1781291988450150470">Gjeldende PIN-kode</translation>
 <translation id="1781502536226964113">Åpne siden Ny fane</translation>
+<translation id="1781553166608855614">Talespråk</translation>
 <translation id="1781771911845953849">Kontoer og synkronisering</translation>
 <translation id="1781979858217752599">Del vinduslyd</translation>
 <translation id="1782101999402987960">Administratoren din blokkerer oppdateringer</translation>
@@ -1066,6 +1071,7 @@
 <translation id="1992924914582925289">Fjern fra enheten</translation>
 <translation id="1994173015038366702">Nettadressen til nettstedet</translation>
 <translation id="1995916364271252349">Styrer hvilken informasjon nettsteder kan bruke og vise (posisjon, kamera, forgrunnsvinduer med mer)</translation>
+<translation id="1997433994358798851">Chrome trenger tillatelse til å bruke Bluetooth for å koble til enheten din</translation>
 <translation id="1997616988432401742">Dine sertifikater</translation>
 <translation id="1999115740519098545">Ved oppstart</translation>
 <translation id="2000419248597011803">Sender noen informasjonskapsler og søk fra adressefeltet og søkefeltet samt noen informasjonskapsler til standardsøkemotoren din</translation>
@@ -1567,6 +1573,7 @@
 <translation id="244475495405467108">Lukk faner til venstre</translation>
 <translation id="2445081178310039857">Det kreves en rotkatalog for utvidelsen</translation>
 <translation id="2445484935443597917">Opprett en ny profil</translation>
+<translation id="2445726032315793326">Delvis lupe</translation>
 <translation id="244641233057214044">Relatert til søket ditt</translation>
 <translation id="2448312741937722512">Type</translation>
 <translation id="2448810255793562605">Automatisk skanning av brytertilgang</translation>
@@ -1729,6 +1736,7 @@
 <translation id="25899519884572181">Avslutt lesermodus</translation>
 <translation id="2593499352046705383">Før du begynner, må du ta en sikkerhetskopi av dataene dine. Når <ph name="DEVICE_OS" /> installeres, blir harddisken din overskrevet. Finn ut mer på g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Søk på Google, eller skriv inn en nettadresse</translation>
+<translation id="2599048253926156421">Brukernavnet er kopiert til utklippstavlen</translation>
 <translation id="2602501489742255173">Sveip opp for å komme i gang</translation>
 <translation id="2603115962224169880">Rydd opp i datamaskinen</translation>
 <translation id="2603355571917519942">Voice Match er klar</translation>
@@ -1859,6 +1867,7 @@
 <translation id="2724841811573117416">WebRTC-logger</translation>
 <translation id="272488616838512378">Enhetskonvertering</translation>
 <translation id="2725200716980197196">Nettverkstilkoblingen er gjenopprettet</translation>
+<translation id="272741954544380994">Søk etter bildet med <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="2727633948226935816">Ikke minn meg på dette igjen</translation>
 <translation id="2727712005121231835">Faktisk størrelse</translation>
 <translation id="2729314457178420145">Slett også nettlesingsdata (<ph name="URL" />), noe som kan medføre at du blir logget av Google.com. <ph name="LEARN_MORE" /></translation>
@@ -1951,6 +1960,7 @@
 <translation id="2804043232879091219">Kunne ikke åpne den alternative nettleseren</translation>
 <translation id="2804667941345577550">Du blir logget av dette nettstedet, også i faner som er åpne</translation>
 <translation id="2804680522274557040">Kameraet er slått av</translation>
+<translation id="280518252911523675">Hvis du fortsetter uten å skrive inn det gamle passordet ditt, blir de lokale dataene dine slettet. Du må logge på med Google-kontoen din for å konfigurere denne brukeren på nytt.</translation>
 <translation id="2805539617243680210">Alt er klart!</translation>
 <translation id="2805646850212350655">Microsoft Encrypting File System</translation>
 <translation id="2805756323405976993">Apper</translation>
@@ -2200,6 +2210,7 @@
 <translation id="3030967311408872958">Solnedgang til soloppgang</translation>
 <translation id="3031417829280473749">Agent X</translation>
 <translation id="3031557471081358569">Velg elementer som skal importeres:</translation>
+<translation id="3032204772252313646">Automatisk teksting</translation>
 <translation id="3033348223765101500">Kontrollér dataene dine</translation>
 <translation id="3034627908241330765">En annen Steam-konfigurering kjører. Vent til den er ferdig, før du kjører konfigureringen igjen.</translation>
 <translation id="3036327949511794916">Tidsfristen for å returnere <ph name="DEVICE_TYPE" /> er utløpt.</translation>
@@ -2633,6 +2644,7 @@
 <translation id="3480612136143976912">Tilpass størrelse og stil for direkteteksting. Noen apper og nettsteder bruker også denne innstillingen.</translation>
 <translation id="3480827850068960424">Fant <ph name="NUM" /> faner</translation>
 <translation id="3481268647794498892">Åpnes i <ph name="ALTERNATIVE_BROWSER_NAME" /> om <ph name="COUNTDOWN_SECONDS" /> sekunder</translation>
+<translation id="348268549820508141">Talegjenkjenning</translation>
 <translation id="3482719661246593752"><ph name="ORIGIN" /> kan se disse filene</translation>
 <translation id="3484273680291419129">Fjerner den skadelige programvaren …</translation>
 <translation id="3484869148456018791">Hent nytt sertifikat</translation>
@@ -2792,6 +2804,7 @@
 <translation id="3640214691812501263">Vil du legge til «<ph name="EXTENSION_NAME" />» for <ph name="USER_NAME" />?</translation>
 <translation id="3640613767643722554">Lær assistenten å gjenkjenne stemmen din</translation>
 <translation id="3641456520301071208">Nettsteder kan be om posisjonen din</translation>
+<translation id="3642070413432681490">Sirkelmarkør</translation>
 <translation id="3642699533549879077">Når noen andre ser på skjermen din, får du et varsel, og varselinnholdet skjules.</translation>
 <translation id="3645372836428131288">Flytt litt på fingeren for å registrere en annen del av fingeravtrykket.</translation>
 <translation id="3647998456578545569">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> mottatt fra <ph name="DEVICE_NAME" />}other{<ph name="ATTACHMENTS" /> mottatt fra <ph name="DEVICE_NAME" />}}</translation>
@@ -2826,6 +2839,7 @@
 <translation id="368019053277764111">Åpne søket i sidepanelet</translation>
 <translation id="3680683624079082902">Stemme for tekst til tale</translation>
 <translation id="3681311097828166361">Takk for tilbakemeldingen. Siden du er uten nett akkurat nå, sendes rapporten senere.</translation>
+<translation id="3681548574519135185">Fokusring</translation>
 <translation id="3682824389861648626">Bevegelsesterskel</translation>
 <translation id="3683524264665795342"><ph name="APP_NAME" />-forespørsel om skjermdeling</translation>
 <translation id="3685598397738512288">USB-innstillinger for Linux</translation>
@@ -3062,6 +3076,7 @@
 <translation id="3895090224522145010">Kerberos-brukernavn</translation>
 <translation id="389521680295183045">Nettsteder kan be om å få vite når du bruker enheten aktivt</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{et bilde}other{# bilder}}</translation>
+<translation id="3897746662269329507"><ph name="DEVICE_TYPE" /> er laget for gaming. Nå åpnes straks Utforsk-appen, hvor du kan få tilgang til hundrevis av de nyeste spillene, se gamingtilbud og oppdage gamingfunksjoner som følger med enheten din.</translation>
 <translation id="3898233949376129212">Enhetsspråk</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> vil <ph name="FIRST_PERMISSION" /> og <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Velg tastatur</translation>
@@ -3123,6 +3138,7 @@
 <translation id="3948507072814225786"><ph name="ORIGIN" /> kan redigere filer i disse mappene</translation>
 <translation id="394984172568887996">Importert fra Internet Explorer</translation>
 <translation id="3950820424414687140">Logg på</translation>
+<translation id="3950841222883198950">Stemmestyrt skriving</translation>
 <translation id="3953834000574892725">Mine kontoer</translation>
 <translation id="3954354850384043518">Pågår</translation>
 <translation id="3954469006674843813"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz)</translation>
@@ -3183,6 +3199,7 @@
 <translation id="3994878504415702912">&amp;Zoom</translation>
 <translation id="3995138139523574647">USB-C-enhet (porten bak på høyre side)</translation>
 <translation id="3995963973192100066">Spill av animasjon</translation>
+<translation id="4001540981461989979">Fremhev musemarkøren når den er i bevegelse</translation>
 <translation id="4002329649066944389">Administrer nettstedsspesifikke unntak</translation>
 <translation id="4002440992267487163">Konfigurering av PIN-kode</translation>
 <translation id="4005817994523282006">Metode for registrering av tidssone</translation>
@@ -3208,6 +3225,7 @@
 <translation id="4033471457476425443">Legg til ny mappe</translation>
 <translation id="4033711848170683365">Dette medfører at nettlesingsdata blir slettet permanent fra denne enheten. Det kan hende at Google-kontoene i denne profilen brukes av andre apper på <ph name="DEVICE_TYPE" />. Du kan fjerne disse kontoene i <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Sikre nettsteder kan bygge inn innhold som bilder eller nettrammer som ikke er sikre</translation>
+<translation id="4034741552964543387">Fortsett uten lokale data</translation>
 <translation id="4034824040120875894">Skriver</translation>
 <translation id="4035758313003622889">&amp;Oppgavebehandling</translation>
 <translation id="4035877632587724847">Ikke tillat</translation>
@@ -3399,6 +3417,7 @@
 <translation id="4242533952199664413">Åpne innstillingene</translation>
 <translation id="4242577469625748426">Kunne ikke installere angivelse av innstillinger på enheten: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Skriveren er satt på pause</translation>
+<translation id="424423026762293842">Gjenopprett de lokale dataene dine</translation>
 <translation id="4244238649050961491">Finn flere pekepennapper</translation>
 <translation id="4246980464509998944">Andre kommentarer:</translation>
 <translation id="424726838611654458">Åpne alltid i Adobe Reader</translation>
@@ -3415,6 +3434,7 @@
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – faneinnholdet er delt</translation>
 <translation id="4253168017788158739">Merknad</translation>
 <translation id="4253183225471855471">Fant ingen nettverk. Sett inn SIM-kortet og start enheten på nytt før du prøver igjen.</translation>
+<translation id="4254414375763576535">Stor peker</translation>
 <translation id="4254813446494774748">Språket siden skal oversettes til:</translation>
 <translation id="425573743389990240">Batteriets utladningshastighet i watt (negativ verdi indikerer at batteriet lades)</translation>
 <translation id="4256316378292851214">La&amp;gre video som</translation>
@@ -3566,6 +3586,7 @@
 <translation id="4400963414856942668">Du kan klikke på stjernen for å bokmerke en fane</translation>
 <translation id="4401912261345737180">Koble til med en kode for å caste</translation>
 <translation id="4402755511846832236">Blokkér nettsteder fra å vite når du bruker denne enheten aktivt</translation>
+<translation id="4403012369005671154">Tale til tekst</translation>
 <translation id="4403266582403435904">Gjenopprett data eller bytt enhet enkelt når som helst. Sikkerhetskopier lastes opp til Google og krypteres med passordet for barnets Google-konto.</translation>
 <translation id="4403775189117163360">Velg en annen mappe</translation>
 <translation id="4404136731284211429">Gjennomsøk på nytt</translation>
@@ -3908,6 +3929,7 @@
 <translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" /> % (venstre)</translation>
 <translation id="4733793249294335256">Sted</translation>
 <translation id="473546211690256853">Denne kontoen administreres av <ph name="DOMAIN" />.</translation>
+<translation id="4735506354605317060">Sirkelpeker</translation>
 <translation id="4735803855089279419">Systemet kunne ikke fastslå enhetsidentifikatorer for denne enheten.</translation>
 <translation id="4736292055110123391">Synkroniser blant annet bokmerker, passord og loggen på alle enhetene dine</translation>
 <translation id="473775607612524610">Oppdater</translation>
@@ -3928,6 +3950,7 @@
 <translation id="4759202969060787081">Ikke åpne</translation>
 <translation id="4759238208242260848">Nedlastinger</translation>
 <translation id="4761104368405085019">bruke mikrofonen din</translation>
+<translation id="4762489666082647806">Pekerfarge</translation>
 <translation id="4762718786438001384">Det er kritisk lite plass på enheten</translation>
 <translation id="4763408175235639573">Følgende informasjonskapsler ble angitt da du besøkte denne siden</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Denne enheten blir lagret i 1 måned, og du kan koble til uten noen kode neste gang. Dette er angitt av administratoren din.}other{Denne enheten blir lagret i ‏{MONTHS} måneder, og du kan koble til uten noen kode neste gang. Dette er angitt av administratoren din.}}</translation>
@@ -4023,6 +4046,7 @@
 <translation id="485053257961878904">Kunne ikke konfigurere synkronisering av varsler</translation>
 <translation id="4850886885716139402">Visning</translation>
 <translation id="485088796993065002">Nettsteder kan spille av lyd for musikk, videoer og annet medieinnhold</translation>
+<translation id="4852916668365817106">Musefarge</translation>
 <translation id="4853020600495124913">Åpne i &amp;nytt vindu</translation>
 <translation id="4854317507773910281">Velg foreldrekonto for godkjenning</translation>
 <translation id="485480310608090163">Flere innstillinger og tillatelser</translation>
@@ -4076,6 +4100,7 @@
 <translation id="4893522937062257019">På låseskjermen</translation>
 <translation id="4897496410259333978">Kontakt administratoren din for å få mer informasjon.</translation>
 <translation id="4898011734382862273">Sertifikatet «<ph name="CERTIFICATE_NAME" />» representerer en sertifiseringsinstans</translation>
+<translation id="4899052647152077033">Inverter farger</translation>
 <translation id="4899696330053002588">Inneholder annonser</translation>
 <translation id="489985760463306091">For å fullføre fjerningen av den skadelige programvaren, start datamaskinen på nytt</translation>
 <translation id="4900392736118574277">Oppstartssiden er endret til <ph name="URL" />.</translation>
@@ -4566,6 +4591,7 @@
 <translation id="5414566801737831689">lese ikonene på nettstedene du besøker</translation>
 <translation id="5414836363063783498">Bekrefter …</translation>
 <translation id="5417312524372586921">Nettlesertemaer</translation>
+<translation id="541737483547792035">Forstørr skjermen</translation>
 <translation id="5419405654816502573">Voice Match</translation>
 <translation id="5420274697768050645">Krev passord for å låse opp enheten, for ekstra sikkerhet</translation>
 <translation id="5420438158931847627">Bestemmer skarpheten på tekst og bilder</translation>
@@ -4611,6 +4637,7 @@
 <translation id="5459864179070366255">Fortsett installeringen</translation>
 <translation id="5461050611724244538">Mistet tilkoblingen til telefonen</translation>
 <translation id="5463275305984126951">Indeks for <ph name="LOCATION" /></translation>
+<translation id="5463450804024056231">Meld deg på e-poster om <ph name="DEVICE_TYPE" /></translation>
 <translation id="5463625433003343978">Finner enheter …</translation>
 <translation id="5463845647891602726">For å få mer ledig plass, slett filer fra enheten</translation>
 <translation id="5463856536939868464">Meny med skjulte bokmerker</translation>
@@ -4759,6 +4786,7 @@
 <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation>
 <translation id="558918721941304263">Laster inn apper …</translation>
 <translation id="5592595402373377407">Nok data er ikke tilgjengelig ennå.</translation>
+<translation id="5595307023264033512">Total mengde lagringsplass som brukes av nettsteder: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5595485650161345191">Rediger adresse</translation>
 <translation id="5596627076506792578">Flere alternativer</translation>
 <translation id="5600348067066185292">Installasjonen utføres på noen få enkle trinn. Du får en ny mulighet til å bekrefte før det gjøres endringer på datamaskinen.</translation>
@@ -4946,6 +4974,7 @@
 <translation id="5792728279623964091">Trykk på av/på-knappen</translation>
 <translation id="5793339252089865437">Hvis du laster ned oppdateringen via mobilnettverket ditt, kan det føre til ekstrakostnader.</translation>
 <translation id="5793420564274426163">Bekreftelse på sammenkobling</translation>
+<translation id="5793430094159150686">Passordet er endret. For å gjenopprette de lokale dataene dine må du skrive inn det gamle passordet ditt.</translation>
 <translation id="5794034487966529952">Skrivebordet <ph name="DESK_TITLE" /> har <ph name="NUM_BROWSERS" /> åpne nettleservinduer</translation>
 <translation id="5794414402486823030">Åpne alltid med systemvisningsprogrammet</translation>
 <translation id="5794700615121138172">Delte mapper i Linux</translation>
@@ -4961,6 +4990,7 @@
 <translation id="5801568494490449797">Innstillinger</translation>
 <translation id="5804241973901381774">Tillatelser</translation>
 <translation id="5805697420284793859">Window Manager</translation>
+<translation id="5806447147478173900">Total mengde lagringsplass som brukes av nettstedene som vises: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5806773519584576205">0° (standard)</translation>
 <translation id="5810809306422959727">Denne kontoen er ikke kvalifisert for foreldrekontroll</translation>
 <translation id="5811614940486072060">Denne filen lastes sjelden ned og kan være farlig.</translation>
@@ -5640,6 +5670,7 @@
 <translation id="6474884162850599008">Koble fra Google Disk-kontoen.</translation>
 <translation id="6475294023568239942">Frigjør lagringsplass, eller endre størrelsen på Linux-disken i Innstillinger</translation>
 <translation id="6476138569087741884">Zoomnivå i fullskjermmodus</translation>
+<translation id="6476482583633999078">Talehastighet</translation>
 <translation id="6477822444490674459">Synkronisering av varsler støttes ikke for telefoner i jobbprofiler. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="6478248366783946499">Vil du beholde den farlige filen?</translation>
 <translation id="6480327114083866287">Administreres av <ph name="MANAGER" /></translation>
@@ -5868,6 +5899,7 @@
 <translation id="6700093763382332031">Mobil-SIM-lås</translation>
 <translation id="6700480081846086223">Cast <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Kan ikke hente profil.</translation>
+<translation id="6701824422332982935">Last inn siden på nytt for å bruke disse utvidelsene</translation>
 <translation id="6702639462873609204">&amp;Rediger</translation>
 <translation id="6703212423117969852">Du kan prøve igjen senere i Chrome.</translation>
 <translation id="6703254819490889819">Gjenopprett sikkerhetskopien</translation>
@@ -5917,6 +5949,7 @@
 <translation id="6750757184909117990">Slå av mobildata</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation>
 <translation id="6756157672127672536">Med Filer-appen får du rask tilgang til filer du har lagret på Google Disk, eksterne lagringsenheter eller ChromeOS-enheten din.</translation>
+<translation id="6756643207511618722">Talemotorer</translation>
 <translation id="6758056191028427665">Gi oss tilbakemelding.</translation>
 <translation id="6759193508432371551">Tilbakestilling til fabrikkstandard</translation>
 <translation id="6761431452438552910">Sørg for at Bluetooth-enheten din er i tilkoblingsmodus og i nærheten. Koble bare til enheter du stoler på.</translation>
@@ -6065,6 +6098,7 @@
 <translation id="6889957081990109136">Bryteren er ikke tilordnet ennå</translation>
 <translation id="689007770043972343">Prøv å dra andre åpne faner til gruppen</translation>
 <translation id="6892812721183419409">Åpne linken som <ph name="USER" /></translation>
+<translation id="6893164346922798247">eSpeak</translation>
 <translation id="6895032998810961280">Rapportér detaljer til Google om skadelige programmer, systeminnstillinger og prosesser som ble funnet på datamaskinen din i denne opprydningen.</translation>
 <translation id="6896758677409633944">Kopiér</translation>
 <translation id="6897363604023044284">Velg nettsteder å slette data fra</translation>
@@ -6132,6 +6166,7 @@
 <translation id="6960507406838246615">Linux-oppdatering kreves</translation>
 <translation id="6960648667961844909">Kunne ikke laste ned talefiler for <ph name="LANGUAGE" />. Vi forsøker å laste ned filene senere. Tale blir sendt til Google for behandling frem til nedlastingen er fullført.</translation>
 <translation id="696103774840402661">Alle filer og lokale data for alle brukerne på denne <ph name="DEVICE_TYPE" />-enheten er slettet permanent.</translation>
+<translation id="6963872466817251924">Tekstmarkørfremheving</translation>
 <translation id="6964390816189577014">Helt</translation>
 <translation id="6964760285928603117">Fjern fra gruppen</translation>
 <translation id="6965382102122355670">OK</translation>
@@ -6331,6 +6366,7 @@
 <translation id="7160182524506337403">Nå kan du se varsler på telefonen</translation>
 <translation id="7163202347044721291">Bekrefter aktiveringskoden …</translation>
 <translation id="716640248772308851">«<ph name="EXTENSION" />» kan lese bilder, videofiler og lydfiler i mappene som står oppført.</translation>
+<translation id="7167327771183668296">Automatiske klikk</translation>
 <translation id="7167486101654761064">Åpne &amp;alltid filer av denne typen</translation>
 <translation id="716775164025088943">Bokmerker, logg, passord med mer kommer ikke til å bli synkronisert lenger.</translation>
 <translation id="716810439572026343">Laster ned <ph name="FILE_NAME" /></translation>
@@ -7090,6 +7126,7 @@
 <translation id="7903742244674067440">Du har registrerte sertifikater som identifiserer disse sertifikatinstansene</translation>
 <translation id="7903925330883316394">Verktøy: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Gjør Linux-porter tilgjengelige for andre enheter på nettverket.</translation>
+<translation id="7906440585529721295">Lokale data blir slettet</translation>
 <translation id="7907837847548254634">Vis en rask fremheving av objektet i fokus</translation>
 <translation id="7908378463497120834">Beklager, men minst én partisjon på den eksterne lagringsenheten din kunne ikke tilkobles.</translation>
 <translation id="7909324225945368569">Gi profilen nytt navn</translation>
@@ -7423,10 +7460,12 @@
 <translation id="8213449224684199188">Fotomodus er aktivert</translation>
 <translation id="8214489666383623925">Åpne fil</translation>
 <translation id="8215129063232901118">Få tilgang til telefonens funksjoner fra <ph name="DEVICE_TYPE" /></translation>
+<translation id="8217212468862726597">Fremhev pekeren</translation>
 <translation id="8217399928341212914">Fortsett blokkeringen av automatisk nedlasting av flere filer</translation>
 <translation id="822050276545350872">Heretter er det slutt på ventingen</translation>
 <translation id="8221491193165283816">Du blokkerer vanligvis varsler. For å la dette nettstedet varsle deg, klikk her.</translation>
 <translation id="822347941086490485">Finner HID-enheter …</translation>
+<translation id="8223573963214454788">Fortsett og slett data</translation>
 <translation id="8225046344534779393">Sjekk internettilkoblingen</translation>
 <translation id="8225265270453771718">Del et programvindu</translation>
 <translation id="8226222018808695353">Forbudt</translation>
@@ -7527,6 +7566,7 @@
 <translation id="8314381333424235892">Manglende eller avinstallert utvidelse</translation>
 <translation id="831440797644402910">Kan ikke åpne denne mappen</translation>
 <translation id="8314835274931377415">Vil du starte konfigureringen av brytertilgang?</translation>
+<translation id="8317582043908962055">Gjenkjenn P&amp;DF-tekst</translation>
 <translation id="8317671367883557781">Legg til nettverkstilkobling</translation>
 <translation id="8319414634934645341">Utvidet bruk av nøkkel</translation>
 <translation id="8321837372750396788">Denne <ph name="DEVICE_TYPE" />-enheten kommer til å bli administrert av <ph name="MANAGER" />.</translation>
@@ -7980,6 +8020,7 @@
 <ph name="DOMAIN" /> krever at smartkortet blir stående i.}}</translation>
 <translation id="8776294611668764629">Organisasjonen din har blokkert denne filen fordi den er for stor for en sikkerhetssjekk. Du kan åpne filer på opptil 50 MB.</translation>
 <translation id="8777628254805677039">rotpassord</translation>
+<translation id="8778393144535275552">Fjern dataene som vises</translation>
 <translation id="8779944680596936487">Nettsteder kan bare bruke informasjonskapsler til å se nettleseraktiviteten din på sitt eget nettsted</translation>
 <translation id="8780123805589053431">Få bildebeskrivelser fra Google</translation>
 <translation id="8780443667474968681">Talesøk er slått av.</translation>
@@ -8411,6 +8452,7 @@
 <translation id="9203398526606335860">&amp;Profilering aktivert</translation>
 <translation id="9203904171912129171">Velg enhet</translation>
 <translation id="9206889157914079472">Notatskriving med pekepenn på låseskjermen</translation>
+<translation id="9208192193641542858">Lokale data er beskyttet av det gamle passordet ditt. Hvis du nylig har byttet passord, kan du prøve det gamle passordet igjen.</translation>
 <translation id="9209563766569767417">Sjekker konfigurasjonen av Linux-beholderen</translation>
 <translation id="9209689095351280025">Nettsteder kan ikke bruke informasjonskapsler som sporer deg på nettet</translation>
 <translation id="9211177926627870898">Oppdatering kreves</translation>
@@ -8458,6 +8500,7 @@
 <translation id="957960681186851048">Dette nettstedet prøvde å laste ned flere filer automatisk</translation>
 <translation id="960987915827980018">Omtrent én time igjen</translation>
 <translation id="962802172452141067">Trestrukturen for bokmerkemappen</translation>
+<translation id="963000966785016697">Søk etter bildet med <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="964286338916298286">IT-administratoren din har deaktivert ekstrafunksjoner for Chrome på enheten din.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Program}other{Programmer}}</translation>
 <translation id="964790508619473209">Skjermoppsett</translation>
@@ -8474,6 +8517,7 @@
 <translation id="971774202801778802">Bokmerkenettadresse</translation>
 <translation id="972996901592717370">Legg fingeren på av/på-knappen. Dataene dine lagres sikkert og sendes aldri fra <ph name="DEVICE_TYPE" />.</translation>
 <translation id="973473557718930265">Avslutt</translation>
+<translation id="973558314812359997">Musestørrelse</translation>
 <translation id="975893173032473675">Språket du vil oversette til</translation>
 <translation id="976499800099896273">Dialogboksen for angring av autokorrektur vises for <ph name="TYPED_WORD" />, som ble korrigert til <ph name="CORRECTED_WORD" />.  Trykk på oppoverpilen for å åpne eller Escape for å ignorere.</translation>
 <translation id="978146274692397928">Opprinnelig tegnsettingsbredde er satt til Full</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 28c4f440..a773582 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -380,6 +380,7 @@
 <translation id="1374844444528092021">O certificado requerido pela rede "<ph name="NETWORK_NAME" />" não está instalado ou já não é válido. Obtenha um novo certificado e tente ligar novamente.</translation>
 <translation id="1375321115329958930">Palavras-passe guardadas</translation>
 <translation id="1375557162880614858">Quer ativar o ChromeVox, o leitor de ecrã incorporado para o ChromeOS Flex?</translation>
+<translation id="1375938286942050085">A configuração está concluída! Em seguida, prepare o seu dispositivo para jogar</translation>
 <translation id="137651782282853227">Os endereços guardados aparecem aqui</translation>
 <translation id="1376771218494401509">Nome da &amp;janela…</translation>
 <translation id="1377600615067678409">Ignorar por enquanto</translation>
@@ -394,6 +395,7 @@
 <translation id="138784436342154190">Pretende restaurar a página inicial predefinida?</translation>
 <translation id="1388253969141979417">Com autorização para utilizar o seu microfone</translation>
 <translation id="1388728792929436380">O <ph name="DEVICE_TYPE" /> irá reiniciar quando as atualizações estiverem concluídas.</translation>
+<translation id="1389601498324964367">Armazenamento gerido por quota</translation>
 <translation id="139013308650923562">Com autorização para utilizar tipos de letra instalados no dispositivo</translation>
 <translation id="1390548061267426325">Abrir como Separador Normal</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> não tem autorização para imprimir para <ph name="PRINTER_NAME" />. Contacte o seu administrador.</translation>
@@ -1063,6 +1065,7 @@
 <translation id="1992924914582925289">Remover do dispositivo</translation>
 <translation id="1994173015038366702">URL do site</translation>
 <translation id="1995916364271252349">Controla as informações que os sites podem utilizar e apresentar (localização, câmara, pop-ups e muito mais).</translation>
+<translation id="1997433994358798851">O Chrome precisa de autorização para usar o Bluetooth para estabelecer ligação ao seu dispositivo</translation>
 <translation id="1997616988432401742">Os seus certificados</translation>
 <translation id="1999115740519098545">No arranque</translation>
 <translation id="2000419248597011803">Envia alguns cookies e pesquisas da barra de endereço e da caixa de pesquisa para o motor de pesquisa predefinido.</translation>
@@ -1724,6 +1727,7 @@
 <translation id="25899519884572181">Sair do modo de leitor</translation>
 <translation id="2593499352046705383">Antes de iniciar, certifique-se de que tem uma cópia de segurança dos dados. A instalação do <ph name="DEVICE_OS" /> substitui o seu disco rígido. Saiba mais em g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Pesquise no Google ou escreva o URL</translation>
+<translation id="2599048253926156421">Nome de utilizador copiado para a área de transferência</translation>
 <translation id="2602501489742255173">Deslize rapidamente para cima para começar.</translation>
 <translation id="2603115962224169880">Limpar o computador</translation>
 <translation id="2603355571917519942">O Voice Match está pronto</translation>
@@ -1947,6 +1951,7 @@
 <translation id="2804043232879091219">Não foi possível abrir o navegador alternativo.</translation>
 <translation id="2804667941345577550">A sua sessão neste site será terminada, incluindo em separadores abertos.</translation>
 <translation id="2804680522274557040">A câmara está desativada</translation>
+<translation id="280518252911523675">Se continuar sem introduzir a palavra-passe antiga, os seus dados locais vão ser eliminados. Inicie sessão com a sua Conta Google para configurar este utilizador novamente.</translation>
 <translation id="2805539617243680210">Está tudo pronto!</translation>
 <translation id="2805646850212350655">Sistema de encriptação de ficheiros Microsoft</translation>
 <translation id="2805756323405976993">Apps</translation>
@@ -3063,6 +3068,7 @@
 <translation id="3895090224522145010">Nome de utilizador Kerberos</translation>
 <translation id="389521680295183045">Os sites podem pedir para saber quando está a utilizar ativamente o dispositivo</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{uma imagem}other{# imagens}}</translation>
+<translation id="3897746662269329507">O seu <ph name="DEVICE_TYPE" /> foi concebido para jogos. A app Explore é apresentada a seguir, onde pode aceder a centenas de jogos mais recentes, ver ofertas de videojogos e descobrir funcionalidades de videojogos que os dispositivos oferecem.</translation>
 <translation id="3898233949376129212">Idioma do dispositivo</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> pretende: <ph name="FIRST_PERMISSION" /> e <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Selecionar teclado</translation>
@@ -3213,6 +3219,7 @@
 <translation id="4033471457476425443">Adicionar nova pasta</translation>
 <translation id="4033711848170683365">Esta ação elimina permanentemente os dados de navegação deste dispositivo. As Contas Google neste perfil podem ser usadas por outras apps no seu dispositivo <ph name="DEVICE_TYPE" />. Pode remover estas contas em <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Os sites seguros podem incorporar conteúdo como imagens ou frames da Web que não são seguros</translation>
+<translation id="4034741552964543387">Continuar sem dados locais</translation>
 <translation id="4034824040120875894">Impressora</translation>
 <translation id="4035758313003622889">Gestor de &amp;tarefas</translation>
 <translation id="4035877632587724847">Não permitir</translation>
@@ -3404,6 +3411,7 @@
 <translation id="4242533952199664413">Abrir definições</translation>
 <translation id="4242577469625748426">Falha ao instalar as definições da política no dispositivo: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">A impressora está em pausa.</translation>
+<translation id="424423026762293842">Restaure os seus dados locais</translation>
 <translation id="4244238649050961491">Encontrar mais aplicações para a caneta stylus</translation>
 <translation id="4246980464509998944">Comentários adicionais:</translation>
 <translation id="424726838611654458">Sempre aberto no Adobe Reader</translation>
@@ -4962,6 +4970,7 @@
 <translation id="5792728279623964091">Toque no botão ligar/desligar</translation>
 <translation id="5793339252089865437">Transferir a atualização através da sua rede móvel pode resultar em custos adicionais.</translation>
 <translation id="5793420564274426163">Confirmação de sincronização</translation>
+<translation id="5793430094159150686">A sua palavra-passe foi alterada. Para restaurar os dados locais, tem de introduzir a palavra-passe antiga.</translation>
 <translation id="5794034487966529952">O espaço de trabalho <ph name="DESK_TITLE" /> tem <ph name="NUM_BROWSERS" /> janelas do navegador abertas</translation>
 <translation id="5794414402486823030">Abrir sempre com o visualizador do sistema</translation>
 <translation id="5794700615121138172">Pastas partilhadas do Linux</translation>
@@ -5886,6 +5895,7 @@
 <translation id="6700093763382332031">Bloqueio do SIM de rede móvel</translation>
 <translation id="6700480081846086223">Transmitir <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Não foi possível obter o perfil.</translation>
+<translation id="6701824422332982935">Atualize a página para usar estas extensões</translation>
 <translation id="6702639462873609204">&amp;Editar...</translation>
 <translation id="6703212423117969852">Pode tentar novamente mais tarde no Chrome.</translation>
 <translation id="6703254819490889819">Restaurar cópia de segurança</translation>
@@ -7113,6 +7123,7 @@
 <translation id="7903742244674067440">Tem certificados em arquivo que identificam estas autoridades de certificação</translation>
 <translation id="7903925330883316394">Utilitário: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Disponibilize as portas do Linux a outros dispositivos na sua rede.</translation>
+<translation id="7906440585529721295">Os dados locais vão ser eliminados</translation>
 <translation id="7907837847548254634">Mostrar um realce rápido no objeto em foco</translation>
 <translation id="7908378463497120834">Lamentamos, mas não foi possível montar, pelo menos, uma partição no aparelho de armazenamento externo.</translation>
 <translation id="7909324225945368569">Mude o nome do perfil</translation>
@@ -7451,6 +7462,7 @@
 <translation id="822050276545350872">A partir deste momento, não é preciso esperar</translation>
 <translation id="8221491193165283816">Normalmente, bloqueia as notificações. Para permitir que este site lhe apresente notificações, clique aqui.</translation>
 <translation id="822347941086490485">A procurar dispositivos HID…</translation>
+<translation id="8223573963214454788">Continuar e eliminar dados</translation>
 <translation id="8225046344534779393">Verifique a ligação à Internet</translation>
 <translation id="8225265270453771718">Partilhe uma janela da aplicação</translation>
 <translation id="8226222018808695353">Proibido</translation>
@@ -7551,6 +7563,7 @@
 <translation id="8314381333424235892">Extensão em falta ou desinstalada.</translation>
 <translation id="831440797644402910">Não é possível abrir esta pasta</translation>
 <translation id="8314835274931377415">Pretende iniciar a configuração do acesso por comutador?</translation>
+<translation id="8317582043908962055">Reconhecer texto em P&amp;DF</translation>
 <translation id="8317671367883557781">Adicionar ligação de rede</translation>
 <translation id="8319414634934645341">Utilização alargada da chave</translation>
 <translation id="8321837372750396788">Este <ph name="DEVICE_TYPE" /> vai ser gerido por <ph name="MANAGER" />.</translation>
@@ -8436,6 +8449,7 @@
 <translation id="9203398526606335860">Criação de &amp;perfis ativada</translation>
 <translation id="9203904171912129171">Selecionar um dispositivo</translation>
 <translation id="9206889157914079472">Tirar notas com a caneta stylus a partir do ecrã de bloqueio</translation>
+<translation id="9208192193641542858">Os dados locais estão protegidos pela sua palavra-passe antiga. Se alterou a sua palavra-passe recentemente, experimente a palavra-passe antiga novamente.</translation>
 <translation id="9209563766569767417">A verificar a configuração do contentor do Linux…</translation>
 <translation id="9209689095351280025">Os sites não podem utilizar cookies que monitorizem a sua navegação na Web.</translation>
 <translation id="9211177926627870898">Atualização necessária</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 7d6fe08d..d2a4c9a 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">Certifikát vyžadovaný sieťou <ph name="NETWORK_NAME" /> nie je nainštalovaný alebo je neplatný. Nainštalujte nový certifikát a skúste sa pripojiť znova.</translation>
 <translation id="1375321115329958930">Uložené heslá</translation>
 <translation id="1375557162880614858">Chcete aktivovať vstavanú čítačku obrazovky ChromeVox pre Chrome OS Flex?</translation>
+<translation id="1375938286942050085">Nastavenie je dokončené. Pripravte svoje zariadenie na hranie.</translation>
 <translation id="137651782282853227">Tu sa zobrazia uložené adresy</translation>
 <translation id="1376771218494401509">Pomenovať okno...</translation>
 <translation id="1377600615067678409">Zatiaľ preskočiť</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Obnoviť predvolenú stránku pri spustení?</translation>
 <translation id="1388253969141979417">Môže používať váš mikrofón</translation>
 <translation id="1388728792929436380">Zariadenie <ph name="DEVICE_TYPE" /> bude po dokončení aktualizácií reštartované.</translation>
+<translation id="1389601498324964367">Ukladací priestor spravovaný podľa objemu</translation>
 <translation id="139013308650923562">Weby s povolením používať písma nainštalované v zariadení</translation>
 <translation id="1390548061267426325">Otvoriť ako bežnú kartu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nemá oprávnenie tlačiť v zariadení <ph name="PRINTER_NAME" />. Kontaktujte správcu.</translation>
@@ -1065,6 +1067,7 @@
 <translation id="1992924914582925289">Odstrániť zo zariadenia</translation>
 <translation id="1994173015038366702">Webová adresa</translation>
 <translation id="1995916364271252349">Ovláda, ktoré informácie môžu weby používať a zobrazovať (polohu, fotoaparát, vyskakovacie okná a ďalšie)</translation>
+<translation id="1997433994358798851">Chrome vyžaduje povolenie pripojiť sa k vášmu zariadeniu prostredníctvom rozhrania Bluetooth</translation>
 <translation id="1997616988432401742">Vaše certifikáty</translation>
 <translation id="1999115740519098545">Pri spustení</translation>
 <translation id="2000419248597011803">Odošle niektoré súbory cookie a vyhľadávania z panela s adresou a vyhľadávacieho poľa do vášho predvoleného vyhľadávača</translation>
@@ -1726,6 +1729,7 @@
 <translation id="25899519884572181">Ukončiť režim čítačky</translation>
 <translation id="2593499352046705383">Pred začatím skontrolujte, či máte zálohu údajov. Inštaláciou operačného systému <ph name="DEVICE_OS" /> prepíšete pevný disk. Viac sa dozviete na g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Vyhľadávajte na Googli alebo zadajte webovú adresu</translation>
+<translation id="2599048253926156421">Používateľské meno bolo skopírované do schránky</translation>
 <translation id="2602501489742255173">Začnite potiahnutím nahor</translation>
 <translation id="2603115962224169880">Vyčistiť počítač</translation>
 <translation id="2603355571917519942">Funkcia Voice Match je pripravená</translation>
@@ -1949,6 +1953,7 @@
 <translation id="2804043232879091219">Alternatívny prehliadač sa nepodarilo otvoriť</translation>
 <translation id="2804667941345577550">Systém vás odhlási z tohto webu (aj v otvorených kartách)</translation>
 <translation id="2804680522274557040">Kamera je vypnutá</translation>
+<translation id="280518252911523675">Ak budete pokračovať bez zadania starého hesla, vaše miestne údaje budú odstránené. Prihláste sa svojím účtom Google a znova nastavte tohto používateľa.</translation>
 <translation id="2805539617243680210">Všetko je nastavené.</translation>
 <translation id="2805646850212350655">Systém šifrovania súborov spoločnosti Microsoft</translation>
 <translation id="2805756323405976993">Aplikácie</translation>
@@ -3064,6 +3069,7 @@
 <translation id="3895090224522145010">Používateľské meno Kerberos</translation>
 <translation id="389521680295183045">Weby sa môžu pýtať, keď chcú zistiť, kedy aktívne používate zariadenie</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{obrázok}few{# obrázky}many{# images}other{# obrázkov}}</translation>
+<translation id="3897746662269329507">Zariadenie <ph name="DEVICE_TYPE" /> je vytvorené pre hry. Otvorí sa aplikácia Preskúmať, kde budete mať prístup k stovkám najnovších hier, pričom si budete môcť pozrieť herné ponuky a objaviť herné funkcie, ktoré sú súčasťou zariadenia.</translation>
 <translation id="3898233949376129212">Jazyk zariadenia</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> vyžaduje povolenia <ph name="FIRST_PERMISSION" /> a <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Výber klávesnice</translation>
@@ -3214,6 +3220,7 @@
 <translation id="4033471457476425443">Pridať nový priečinok</translation>
 <translation id="4033711848170683365">Týmto natrvalo odstránite dáta prehliadania z tohto zariadenia. Účty Google v tomto profile môžu byť používané ďalšími aplikáciami vo vašom zariadení <ph name="DEVICE_TYPE" />. Tieto účty môžete odstrániť v sekcii <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Zabezpečené weby môžu vkladať obsah, napríklad obrázky alebo rámy webu, ktoré nie sú zabezpečené</translation>
+<translation id="4034741552964543387">Pokračovať bez miestnych údajov</translation>
 <translation id="4034824040120875894">Tlačiareň</translation>
 <translation id="4035758313003622889">&amp;Správca úloh</translation>
 <translation id="4035877632587724847">Nepovoliť</translation>
@@ -3405,6 +3412,7 @@
 <translation id="4242533952199664413">Otvoriť nastavenia</translation>
 <translation id="4242577469625748426">Nastavenia pravidla sa nepodarilo nainštalovať na zariadenie: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Tlačiareň je pozastavená</translation>
+<translation id="424423026762293842">Obnovenie miestnych údajov</translation>
 <translation id="4244238649050961491">Nájsť ďalšie aplikácie pre dotykové pero</translation>
 <translation id="4246980464509998944">Ďalšie komentáre:</translation>
 <translation id="424726838611654458">Vždy otvoriť v programe Adobe Reader</translation>
@@ -4962,6 +4970,7 @@
 <translation id="5792728279623964091">Klepnite na vypínač</translation>
 <translation id="5793339252089865437">Ak stiahnete aktualizáciu cez mobilnú sieť, môže to viesť k vyšším účtovaným poplatkom.</translation>
 <translation id="5793420564274426163">Potvrdenie párovania</translation>
+<translation id="5793430094159150686">Vaše heslo bolo zmenené. Ak chcete svoje miestne údaje obnoviť, musíte zadať staré heslo.</translation>
 <translation id="5794034487966529952">Plocha <ph name="DESK_TITLE" /> má otvorený tento počet okien prehliadača: <ph name="NUM_BROWSERS" /></translation>
 <translation id="5794414402486823030">Vždy otvárať pomocou systémového zobrazovača</translation>
 <translation id="5794700615121138172">Zdieľané priečinky v systéme Linux</translation>
@@ -5890,6 +5899,7 @@
 <translation id="6700093763382332031">Zámka mobilnej SIM karty</translation>
 <translation id="6700480081846086223">Prenášať <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Nepodarilo sa získať profil.</translation>
+<translation id="6701824422332982935">Ak chcete použiť tieto rozšírenia, znova načítajte stránku</translation>
 <translation id="6702639462873609204">&amp;Upraviť...</translation>
 <translation id="6703212423117969852">Môžete to skúsiť neskôr v Nastaveniach.</translation>
 <translation id="6703254819490889819">Obnoviť zálohu</translation>
@@ -7116,6 +7126,7 @@
 <translation id="7903742244674067440">V súbore máte certifikáty, ktoré identifikujú tieto certifikačné autority</translation>
 <translation id="7903925330883316394">Pomôcka: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Sprístupnite porty Linux ďalším zariadeniam vo vašej sieti.</translation>
+<translation id="7906440585529721295">Miestne údaje budú odstránené</translation>
 <translation id="7907837847548254634">Zobrazovať krátke zvýraznenie označeného objektu</translation>
 <translation id="7908378463497120834">Je nám ľúto, ale nepodarilo sa pripojiť minimálne jeden oddiel externého pamäťového zariadenia.</translation>
 <translation id="7909324225945368569">Premenujte svoj profil</translation>
@@ -7454,6 +7465,7 @@
 <translation id="822050276545350872">Odteraz už nemusíte čakať</translation>
 <translation id="8221491193165283816">Zvyčajne blokujete upozornenia. Ak chcete tomuto webu povoliť odosielanie upozornení, kliknite tu.</translation>
 <translation id="822347941086490485">Hľadajú sa zariadenia HID…</translation>
+<translation id="8223573963214454788">Pokračovať a odstrániť údaje</translation>
 <translation id="8225046344534779393">Skontrolujte internetové pripojenie</translation>
 <translation id="8225265270453771718">Zdieľanie okna aplikácie</translation>
 <translation id="8226222018808695353">Zakázané</translation>
@@ -7554,6 +7566,7 @@
 <translation id="8314381333424235892">Chýbajúce alebo neplatné rozšírenie</translation>
 <translation id="831440797644402910">Tento priečinok nie je možné otvoriť</translation>
 <translation id="8314835274931377415">Chcete spustiť nastavenie ovládania prepínačmi?</translation>
+<translation id="8317582043908962055">Rozpoznávať text PDF</translation>
 <translation id="8317671367883557781">Pridať sieťové pripojenie</translation>
 <translation id="8319414634934645341">Rozšírené použitie kľúča</translation>
 <translation id="8321837372750396788">Toto zariadenie <ph name="DEVICE_TYPE" /> bude spravovať <ph name="MANAGER" />.</translation>
@@ -8441,6 +8454,7 @@
 <translation id="9203398526606335860">&amp;Profilovanie povolené</translation>
 <translation id="9203904171912129171">Výber zariadenia</translation>
 <translation id="9206889157914079472">Písanie poznámok dotykovým perom na uzamknutej obrazovke</translation>
+<translation id="9208192193641542858">Miestne údaje sú chránené starým heslom. Ak ste si heslo nedávno zmenili, skúste znova zadať staré.</translation>
 <translation id="9209563766569767417">Kontroluje sa nastavenie kontajnera Linux</translation>
 <translation id="9209689095351280025">Weby nemôžu používať súbory cookie, ktoré vás sledujú na internete</translation>
 <translation id="9211177926627870898">Vyžaduje sa aktualizácia</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 3475954..3dfc63bc 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -385,6 +385,7 @@
 <translation id="1374844444528092021">Omrežja, ki ga zahteva omrežje »<ph name="NETWORK_NAME" />« ni nameščeno ali ni več veljavno. Prenesite novega in znova poskusite vzpostaviti povezavo.</translation>
 <translation id="1375321115329958930">Shranjena gesla</translation>
 <translation id="1375557162880614858">Ali želite aktivirati ChromeVox, vgrajeni bralnik zaslona za ChromeOS Flex?</translation>
+<translation id="1375938286942050085">Namestitev je končana. Napravo zdaj pripravite za igranje iger.</translation>
 <translation id="137651782282853227">Shranjeni naslovi bodo prikazani tukaj</translation>
 <translation id="1376771218494401509">Poimenovanje &amp;okna …</translation>
 <translation id="1377600615067678409">Za zdaj preskoči</translation>
@@ -399,6 +400,7 @@
 <translation id="138784436342154190">Želite obnoviti privzeto začetno stran?</translation>
 <translation id="1388253969141979417">Dovoljena je uporaba mikrofona</translation>
 <translation id="1388728792929436380">Naprava <ph name="DEVICE_TYPE" /> se bo po končanih posodobitvah znova zagnala.</translation>
+<translation id="1389601498324964367">Shramba s količinsko omejitvijo</translation>
 <translation id="139013308650923562">Dovoljena je uporaba pisave, nameščene v napravi</translation>
 <translation id="1390548061267426325">Odpri v navadnem zavihku</translation>
 <translation id="1390907927270446471">Uporabnik <ph name="PROFILE_USERNAME" /> nima pooblastila za tiskanje s tiskalnikom <ph name="PRINTER_NAME" />. Obrnite se na skrbnika.</translation>
@@ -1078,6 +1080,7 @@
 <translation id="1992924914582925289">Odstrani iz naprave</translation>
 <translation id="1994173015038366702">URL spletnega mesta</translation>
 <translation id="1995916364271252349">Nadzira, katere podatke lahko spletna mesta uporabijo in prikažejo (lokacija, kamera, pojavna okna in drugo)</translation>
+<translation id="1997433994358798851">Chrome za vzpostavitev povezave z napravo potrebuje dovoljenje za uporabo Bluetootha.</translation>
 <translation id="1997616988432401742">Vaša potrdila</translation>
 <translation id="1999115740519098545">Ob zagonu</translation>
 <translation id="2000419248597011803">Pošilja nekatere piškotke in iskanja iz naslovne vrstice ter iskalnega polja privzetemu iskalniku</translation>
@@ -1742,6 +1745,7 @@
 <translation id="25899519884572181">Zapiranje načina bralnika</translation>
 <translation id="2593499352046705383">Preden začnete, morate varnostno kopirati podatke. Z namestitvijo sistema <ph name="DEVICE_OS" /> bodo prepisani vsi podatki na trdem disku. Več o tem: g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Iščite v Google ali vnesite URL</translation>
+<translation id="2599048253926156421">Uporabniško ime je bilo kopirano v odložišče.</translation>
 <translation id="2602501489742255173">Povlecite navzgor, če želite začeti</translation>
 <translation id="2603115962224169880">Čiščenje računalnika</translation>
 <translation id="2603355571917519942">Funkcija Voice Match je pripravljena</translation>
@@ -1965,6 +1969,7 @@
 <translation id="2804043232879091219">Nadomestnega brskalnika ni bilo mogoče odpreti</translation>
 <translation id="2804667941345577550">Odjavljeni boste s tega spletnega mesta, vključno s tistim na odprtih zavihkih</translation>
 <translation id="2804680522274557040">Fotoaparat je izklopljen</translation>
+<translation id="280518252911523675">Če boste nadaljevali brez vnosa starega gesla, bodo lokalni podatki izbrisani. Uporabnika boste znova nastavili tako, da se boste prijavili z računom Google.</translation>
 <translation id="2805539617243680210">Pripravljeni ste.</translation>
 <translation id="2805646850212350655">Microsoftov šifrirni datotečni sistem</translation>
 <translation id="2805756323405976993">Aplikacije</translation>
@@ -3080,6 +3085,7 @@
 <translation id="3895090224522145010">Uporabniško ime za Kerberos</translation>
 <translation id="389521680295183045">Spletna mesta lahko zahtevajo, da izvejo, kdaj aktivno uporabljate napravo</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{sliko}one{# sliko}two{# sliki}few{# slike}other{# slik}}</translation>
+<translation id="3897746662269329507">Naprava <ph name="DEVICE_TYPE" /> je zasnovana za igranje iger. Najprej se bo odprla Raziskovanje, kjer lahko dostopate do več sto najnovejših iger, si ogledate ponudbe za igranje iger in odkrivate funkcije za igre, ki jih dobite z napravo.</translation>
 <translation id="3898233949376129212">Jezik naprave</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> želi: <ph name="FIRST_PERMISSION" /> in <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Izbira tipkovnice</translation>
@@ -3230,6 +3236,7 @@
 <translation id="4033471457476425443">Dodaj novo mapo</translation>
 <translation id="4033711848170683365">S tem boste iz te naprave trajno izbrisali podatke o brskanju. Račune Google v tem profilu morda uporabljajo druge aplikacije v napravi <ph name="DEVICE_TYPE" />. Te račune lahko odstranite v <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Varna spletna mesta morda vdelajo vsebino, kot so slike ali spletni okvirji, ki niso varni.</translation>
+<translation id="4034741552964543387">Nadaljuj brez lokalnih podatkov</translation>
 <translation id="4034824040120875894">Tiskalnik</translation>
 <translation id="4035758313003622889">&amp;Upravitelj opravil</translation>
 <translation id="4035877632587724847">Ne dovoli</translation>
@@ -3421,6 +3428,7 @@
 <translation id="4242533952199664413">Odpri nastavitve</translation>
 <translation id="4242577469625748426">Namestitev nastavitev pravilnika v napravi ni uspela: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Tiskalnik je začasno zaustavljen</translation>
+<translation id="424423026762293842">Obnovitev lokalnih podatkov</translation>
 <translation id="4244238649050961491">Iskanje več aplikacij za pisalo</translation>
 <translation id="4246980464509998944">Dodatni komentarji:</translation>
 <translation id="424726838611654458">Vedno odpri v Adobe Readerju</translation>
@@ -4981,6 +4989,7 @@
 <translation id="5792728279623964091">Dotaknite se gumba za vklop</translation>
 <translation id="5793339252089865437">Če prenesete posodobitev v mobilnem omrežju, lahko pri tem nastanejo presežni stroški.</translation>
 <translation id="5793420564274426163">Potrditev seznanitve</translation>
+<translation id="5793430094159150686">Geslo je spremenjeno. Če želite obnoviti lokalne podatke, morate vnesti staro geslo.</translation>
 <translation id="5794034487966529952">Namizje <ph name="DESK_TITLE" /> ima toliko odprtih oken brskalnika: <ph name="NUM_BROWSERS" /></translation>
 <translation id="5794414402486823030">Vedno odpri s sistemskim pregledovalnikom</translation>
 <translation id="5794700615121138172">Mape Linux, deljene z drugimi</translation>
@@ -5911,6 +5920,7 @@
 <translation id="6700093763382332031">Zaklepanje kartice SIM za mobilno omrežje</translation>
 <translation id="6700480081846086223">Predvajanje <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Profila ni bilo mogoče dobiti.</translation>
+<translation id="6701824422332982935">Znova naložite stran, če želite uporabiti te razširitve</translation>
 <translation id="6702639462873609204">&amp;Uredi ...</translation>
 <translation id="6703212423117969852">Poskusite znova pozneje v Chromu.</translation>
 <translation id="6703254819490889819">Obnovi varnostno kopijo</translation>
@@ -7138,6 +7148,7 @@
 <translation id="7903742244674067440">V datoteki so potrdila, ki identificirajo te overitelje potrdil</translation>
 <translation id="7903925330883316394">Pripomoček: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Naj bodo vrata za Linux na voljo drugim napravam v omrežju.</translation>
+<translation id="7906440585529721295">Lokalni podatki bodo izbrisani</translation>
 <translation id="7907837847548254634">Prikaz hitrega poudarka na izbranem predmetu</translation>
 <translation id="7908378463497120834">Vsaj ene particije v zunanji napravi za shranjevanje ni bilo mogoče vpeti.</translation>
 <translation id="7909324225945368569">Preimenujte svoj profil</translation>
@@ -7476,6 +7487,7 @@
 <translation id="822050276545350872">Od zdaj naprej ne bo treba več čakati</translation>
 <translation id="8221491193165283816">Obvestila običajno blokirate. Če želite dovoliti, da vas to spletno mesto obvešča, kliknite tukaj.</translation>
 <translation id="822347941086490485">Iskanje naprav HID …</translation>
+<translation id="8223573963214454788">Nadaljuj in izbriši podatke</translation>
 <translation id="8225046344534779393">Preverite internetno povezavo</translation>
 <translation id="8225265270453771718">Deljenje okna aplikacije</translation>
 <translation id="8226222018808695353">Prepovedano</translation>
@@ -7576,6 +7588,7 @@
 <translation id="8314381333424235892">Manjkajoča ali nenameščena razširitev</translation>
 <translation id="831440797644402910">Te mape ni mogoče odpreti</translation>
 <translation id="8314835274931377415">Želite začeti nastavitev stikalnega dostopa?</translation>
+<translation id="8317582043908962055">Prepoznavanje besedila v datoteki P&amp;DF</translation>
 <translation id="8317671367883557781">Dodaj omrežno povezavo</translation>
 <translation id="8319414634934645341">Razširjena raba ključa</translation>
 <translation id="8321837372750396788">To napravo <ph name="DEVICE_TYPE" /> bo upravljala domena <ph name="MANAGER" />.</translation>
@@ -8464,6 +8477,7 @@
 <translation id="9203398526606335860">&amp;Profiliranje omogočeno</translation>
 <translation id="9203904171912129171">Izberite napravo</translation>
 <translation id="9206889157914079472">Ustvarjanje zapiskov s pisalom na zaklenjenem zaslonu</translation>
+<translation id="9208192193641542858">Lokalni podatki so zaščiteni s starim geslom. Če ste nedavno spremenili geslo, poskusite znova s starim geslom.</translation>
 <translation id="9209563766569767417">Preverjanje nastavitve vsebnika za Linux</translation>
 <translation id="9209689095351280025">Spletna mesta vam ne morejo slediti po spletu na podlagi piškotkov</translation>
 <translation id="9211177926627870898">Potrebna je posodobitev</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 177467e6..755c157 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">Sertifikat koji zahteva mreža „<ph name="NETWORK_NAME" />“ ili nije instaliran ili više nije važeći. Nabavite novi sertifikat i pokušajte ponovo da se povežete.</translation>
 <translation id="1375321115329958930">Sačuvane lozinke</translation>
 <translation id="1375557162880614858">Želite li da aktivirate ChromeVox, ugrađeni čitač ekrana za Chrome OS Flex?</translation>
+<translation id="1375938286942050085">Podešavanje je dovršeno. Sada pripremite uređaj za igranje igara</translation>
 <translation id="137651782282853227">Sačuvane adrese će se pojaviti ovde</translation>
 <translation id="1376771218494401509">Daj naziv prozoru...</translation>
 <translation id="1377600615067678409">Preskoči za sada</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Želite da vratite podrazumevanu polaznu stranicu?</translation>
 <translation id="1388253969141979417">Dozvoljeno im je korišćenje mikrofona</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> će se restartovati kada se ažuriranja završe.</translation>
+<translation id="1389601498324964367">Memorijski prostor kojim se upravlja kvotama</translation>
 <translation id="139013308650923562">Imaju dozvolu da koriste fontove instalirane na uređaju</translation>
 <translation id="1390548061267426325">Otvori kao uobičajenu karticu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nema ovlašćenje da štampa na: <ph name="PRINTER_NAME" />. Obratite se administratoru.</translation>
@@ -1062,6 +1064,7 @@
 <translation id="1992924914582925289">Ukloni sa uređaja</translation>
 <translation id="1994173015038366702">URL sajta</translation>
 <translation id="1995916364271252349">Kontroliše koje informacije sajtovi mogu da koriste i prikazuju (lokacija, kamera, iskačući prozori i drugo)</translation>
+<translation id="1997433994358798851">Chrome-u treba dozvola da bi koristio Bluetooth za povezivanje sa uređajem</translation>
 <translation id="1997616988432401742">Vaši sertifikati</translation>
 <translation id="1999115740519098545">Pri pokretanju</translation>
 <translation id="2000419248597011803">Podrazumevanom pretraživaču šalje neke kolačiće i pretrage iz trake za adresu i okvira za pretragu</translation>
@@ -1723,6 +1726,7 @@
 <translation id="25899519884572181">Izađi iz režima čitača</translation>
 <translation id="2593499352046705383">Pre nego što počnete, uverite se da ste napravili rezervnu kopiju podataka. Instaliranjem sistema <ph name="DEVICE_OS" /> zameniće se podaci na hard-disku. Saznajte više na g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Pretražite Google ili unesite URL</translation>
+<translation id="2599048253926156421">Korisničko ime je kopirano u privremenu memoriju</translation>
 <translation id="2602501489742255173">Prevucite nagore da biste započeli</translation>
 <translation id="2603115962224169880">Očistite računar</translation>
 <translation id="2603355571917519942">Voice Match je spreman</translation>
@@ -1946,6 +1950,7 @@
 <translation id="2804043232879091219">Nismo uspeli da otvorimo alternativni pregledač</translation>
 <translation id="2804667941345577550">Odjavićete se sa ovog sajta, uključujući i instance na otvorenim karticama</translation>
 <translation id="2804680522274557040">Dozvola za kameru je isključena</translation>
+<translation id="280518252911523675">Ako nastavite bez unosa stare lozinke, lokalni podaci će se izbrisati. Prijavićete se pomoću Google naloga da biste ponovo podesili ovog korisnika.</translation>
 <translation id="2805539617243680210">Spremni ste!</translation>
 <translation id="2805646850212350655">Microsoft sistem za šifrovanje datoteka</translation>
 <translation id="2805756323405976993">Aplikacije</translation>
@@ -3061,6 +3066,7 @@
 <translation id="3895090224522145010">Kerberos korisničko ime</translation>
 <translation id="389521680295183045">Sajtovi mogu da zatraže da znaju kada aktivno koristite uređaj</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{slika}one{# slika}few{# slike}other{# slika}}</translation>
+<translation id="3897746662269329507"><ph name="DEVICE_TYPE" /> je napravljen za igranje igara. Sada će se otvoriti aplikacija Istražite, u kojoj možete da pristupite stotinama najnovijih igara, da pregledate ponude za igre i otkrijete funkcije igara koje ste dobili uz uređaj.</translation>
 <translation id="3898233949376129212">Jezik uređaja</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> želi da: <ph name="FIRST_PERMISSION" /> i <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Izaberite tastaturu</translation>
@@ -3211,6 +3217,7 @@
 <translation id="4033471457476425443">Dodaj novi direktorijum</translation>
 <translation id="4033711848170683365">To će trajno izbrisati podatke pregledanja sa ovog uređaja. Google naloge na ovom profilu možda koriste druge aplikacije na uređaju <ph name="DEVICE_TYPE" />. Možete da uklonite te naloge u odeljku <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Bezbedni sajtovi mogu da ugrade sadržaj, poput slika ili veb-okvira koji nisu bezbedni</translation>
+<translation id="4034741552964543387">Nastavi bez lokalnih podataka</translation>
 <translation id="4034824040120875894">Štampač</translation>
 <translation id="4035758313003622889">&amp;Menadžer zadataka</translation>
 <translation id="4035877632587724847">Ne dozvoli</translation>
@@ -3402,6 +3409,7 @@
 <translation id="4242533952199664413">Otvori podešavanja</translation>
 <translation id="4242577469625748426">Nije uspelo instaliranje podešavanja smernica na uređaju: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Štampač je pauziran</translation>
+<translation id="424423026762293842">Vratite lokalne podatke</translation>
 <translation id="4244238649050961491">Pronađi još aplikacija za pisaljku</translation>
 <translation id="4246980464509998944">Dodatni komentari:</translation>
 <translation id="424726838611654458">Uvek otvori u Adobe Reader-u</translation>
@@ -4959,6 +4967,7 @@
 <translation id="5792728279623964091">Dodirnite dugme za uključivanje</translation>
 <translation id="5793339252089865437">Ako preuzmete ažuriranje preko mobilne mreže, to može da izazove troškove prekoračenja.</translation>
 <translation id="5793420564274426163">Potvrda uparivanja</translation>
+<translation id="5793430094159150686">Lozinka je promenjena. Da biste vratili lokalne podatke, morate da unesete staru lozinku.</translation>
 <translation id="5794034487966529952">Na radnoj površini <ph name="DESK_TITLE" /> otvorili ste <ph name="NUM_BROWSERS" /> prozora pregledača</translation>
 <translation id="5794414402486823030">Uvek otvaraj pomoću sistemskog prikazivača</translation>
 <translation id="5794700615121138172">Deljeni Linux direktorijumi</translation>
@@ -5887,6 +5896,7 @@
 <translation id="6700093763382332031">Zaključavanje SIM-a za mobilnu mrežu</translation>
 <translation id="6700480081846086223">Prebaci <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Nije moguće učitati profil.</translation>
+<translation id="6701824422332982935">Ponovo učitajte stranicu da biste koristili ove dodatke</translation>
 <translation id="6702639462873609204">&amp;Izmeni...</translation>
 <translation id="6703212423117969852">Možete ponovo da probate kasnije u Chrome-u.</translation>
 <translation id="6703254819490889819">Vrati rezervnu kopiju</translation>
@@ -7113,6 +7123,7 @@
 <translation id="7903742244674067440">Imate sačuvane sertifikate koji identifikuju ove autoritete za izdavanje sertifikata</translation>
 <translation id="7903925330883316394">Pomoćni proces: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Učinite Linux portove dostupnim za druge uređaje na svojoj mreži.</translation>
+<translation id="7906440585529721295">Lokalni podaci će se izbrisati</translation>
 <translation id="7907837847548254634">Prikaži kratko isticanje fokusiranog objekta</translation>
 <translation id="7908378463497120834">Žao nam je, najmanje jednu particiju spoljnog memorijskog uređaja nije bilo moguće uključiti.</translation>
 <translation id="7909324225945368569">Promenite ime profila</translation>
@@ -7451,6 +7462,7 @@
 <translation id="822050276545350872">Više ne morate da čekate</translation>
 <translation id="8221491193165283816">Obično blokirate obaveštenja. Da biste dozvolili ovom sajtu da vas obaveštava, kliknite ovde.</translation>
 <translation id="822347941086490485">Traže se uređaji sa interfejsom…</translation>
+<translation id="8223573963214454788">Nastavi i izbriši podatke</translation>
 <translation id="8225046344534779393">Proverite internet vezu</translation>
 <translation id="8225265270453771718">Delite prozor aplikacije</translation>
 <translation id="8226222018808695353">Zabranjeno je</translation>
@@ -7551,6 +7563,7 @@
 <translation id="8314381333424235892">Dodatak nedostaje ili je deinstaliran</translation>
 <translation id="831440797644402910">Otvaranje ovog direktorijuma nije uspelo</translation>
 <translation id="8314835274931377415">Želite da započnete podešavanje Pristupa pomoću prekidača?</translation>
+<translation id="8317582043908962055">Prepoznaj P&amp;DF tekst</translation>
 <translation id="8317671367883557781">Dodaj mrežnu vezu</translation>
 <translation id="8319414634934645341">Upotreba proširenog ključa</translation>
 <translation id="8321837372750396788">Ovim <ph name="DEVICE_TYPE" /> će upravljati <ph name="MANAGER" />.</translation>
@@ -8438,6 +8451,7 @@
 <translation id="9203398526606335860">&amp;Profilisanje je omogućeno</translation>
 <translation id="9203904171912129171">Izaberite uređaj</translation>
 <translation id="9206889157914079472">Pravljenje beleški na zaključanom ekranu pomoću pisaljke</translation>
+<translation id="9208192193641542858">Lokalni podaci su zaštićeni starom lozinkom. Ako ste nedavno promenili lozinku, probajte ponovo sa starom lozinkom.</translation>
 <translation id="9209563766569767417">Proverava se podešavanje Linux kontejnera</translation>
 <translation id="9209689095351280025">Sajtovi ne mogu da koriste kolačiće koji vas prate na vebu</translation>
 <translation id="9211177926627870898">Ažuriranje je obavezno</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 34cfc46..ecd17295 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">Сертификат који захтева мрежа „<ph name="NETWORK_NAME" />“ или није инсталиран или више није важећи. Набавите нови сертификат и покушајте поново да се повежете.</translation>
 <translation id="1375321115329958930">Сачуване лозинке</translation>
 <translation id="1375557162880614858">Желите ли да активирате ChromeVox, уграђени читач екрана за Chrome OS Flex?</translation>
+<translation id="1375938286942050085">Подешавање је довршено. Сада припремите уређај за играње игара</translation>
 <translation id="137651782282853227">Сачуване адресе ће се појавити овде</translation>
 <translation id="1376771218494401509">Дај назив прозору...</translation>
 <translation id="1377600615067678409">Прескочи за сада</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">Желите да вратите подразумевану полазну страницу?</translation>
 <translation id="1388253969141979417">Дозвољено им је коришћење микрофона</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> ће се рестартовати када се ажурирања заврше.</translation>
+<translation id="1389601498324964367">Меморијски простор којим се управља квотама</translation>
 <translation id="139013308650923562">Имају дозволу да користе фонтове инсталиране на уређају</translation>
 <translation id="1390548061267426325">Отвори као уобичајену картицу</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> нема овлашћење да штампа на: <ph name="PRINTER_NAME" />. Обратите се администратору.</translation>
@@ -1062,6 +1064,7 @@
 <translation id="1992924914582925289">Уклони са уређаја</translation>
 <translation id="1994173015038366702">URL сајта</translation>
 <translation id="1995916364271252349">Контролише које информације сајтови могу да користе и приказују (локација, камера, искачући прозори и друго)</translation>
+<translation id="1997433994358798851">Chrome-у треба дозвола да би користио Bluetooth за повезивање са уређајем</translation>
 <translation id="1997616988432401742">Ваши сертификати</translation>
 <translation id="1999115740519098545">При покретању</translation>
 <translation id="2000419248597011803">Подразумеваном претраживачу шаље неке колачиће и претраге из траке за адресу и оквира за претрагу</translation>
@@ -1723,6 +1726,7 @@
 <translation id="25899519884572181">Изађи из режима читача</translation>
 <translation id="2593499352046705383">Пре него што почнете, уверите се да сте направили резервну копију података. Инсталирањем система <ph name="DEVICE_OS" /> замениће се подаци на хард-диску. Сазнајте више на g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Претражите Google или унесите URL</translation>
+<translation id="2599048253926156421">Корисничко име је копирано у привремену меморију</translation>
 <translation id="2602501489742255173">Превуците нагоре да бисте започели</translation>
 <translation id="2603115962224169880">Очистите рачунар</translation>
 <translation id="2603355571917519942">Voice Match је спреман</translation>
@@ -1946,6 +1950,7 @@
 <translation id="2804043232879091219">Нисмо успели да отворимо алтернативни прегледач</translation>
 <translation id="2804667941345577550">Одјавићете се са овог сајта, укључујући и инстанце на отвореним картицама</translation>
 <translation id="2804680522274557040">Дозвола за камеру је искључена</translation>
+<translation id="280518252911523675">Ако наставите без уноса старе лозинке, локални подаци ће се избрисати. Пријавићете се помоћу Google налога да бисте поново подесили овог корисника.</translation>
 <translation id="2805539617243680210">Спремни сте!</translation>
 <translation id="2805646850212350655">Microsoft систем за шифровање датотека</translation>
 <translation id="2805756323405976993">Апликације</translation>
@@ -3061,6 +3066,7 @@
 <translation id="3895090224522145010">Kerberos корисничко име</translation>
 <translation id="389521680295183045">Сајтови могу да затраже да знају када активно користите уређај</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{слика}one{# слика}few{# слике}other{# слика}}</translation>
+<translation id="3897746662269329507"><ph name="DEVICE_TYPE" /> је направљен за играње игара. Сада ће се отворити апликација Истражите, у којој можете да приступите стотинама најновијих игара, да прегледате понуде за игре и откријете функције игара које сте добили уз уређај.</translation>
 <translation id="3898233949376129212">Језик уређаја</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> жели да: <ph name="FIRST_PERMISSION" /> и <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">Изаберите тастатуру</translation>
@@ -3211,6 +3217,7 @@
 <translation id="4033471457476425443">Додај нови директоријум</translation>
 <translation id="4033711848170683365">То ће трајно избрисати податке прегледања са овог уређаја. Google налоге на овом профилу можда користе друге апликације на уређају <ph name="DEVICE_TYPE" />. Можете да уклоните те налоге у одељку <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />.</translation>
 <translation id="4033963223187371752">Безбедни сајтови могу да уграде садржај, попут слика или веб-оквира који нису безбедни</translation>
+<translation id="4034741552964543387">Настави без локалних података</translation>
 <translation id="4034824040120875894">Штампач</translation>
 <translation id="4035758313003622889">&amp;Менаџер задатака</translation>
 <translation id="4035877632587724847">Не дозволи</translation>
@@ -3402,6 +3409,7 @@
 <translation id="4242533952199664413">Отвори подешавања</translation>
 <translation id="4242577469625748426">Није успело инсталирање подешавања смерница на уређају: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">Штампач је паузиран</translation>
+<translation id="424423026762293842">Вратите локалне податке</translation>
 <translation id="4244238649050961491">Пронађи још апликација за писаљку</translation>
 <translation id="4246980464509998944">Додатни коментари:</translation>
 <translation id="424726838611654458">Увек отвори у Adobe Reader-у</translation>
@@ -4959,6 +4967,7 @@
 <translation id="5792728279623964091">Додирните дугме за укључивање</translation>
 <translation id="5793339252089865437">Ако преузмете ажурирање преко мобилне мреже, то може да изазове трошкове прекорачења.</translation>
 <translation id="5793420564274426163">Потврда упаривања</translation>
+<translation id="5793430094159150686">Лозинка је промењена. Да бисте вратили локалне податке, морате да унесете стару лозинку.</translation>
 <translation id="5794034487966529952">На радној површини <ph name="DESK_TITLE" /> отворили сте <ph name="NUM_BROWSERS" /> прозора прегледача</translation>
 <translation id="5794414402486823030">Увек отварај помоћу системског приказивача</translation>
 <translation id="5794700615121138172">Дељени Linux директоријуми</translation>
@@ -5887,6 +5896,7 @@
 <translation id="6700093763382332031">Закључавање SIM-а за мобилну мрежу</translation>
 <translation id="6700480081846086223">Пребаци <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">Није могуће учитати профил.</translation>
+<translation id="6701824422332982935">Поново учитајте страницу да бисте користили ове додатке</translation>
 <translation id="6702639462873609204">&amp;Измени...</translation>
 <translation id="6703212423117969852">Можете поново да пробате касније у Chrome-у.</translation>
 <translation id="6703254819490889819">Врати резервну копију</translation>
@@ -7113,6 +7123,7 @@
 <translation id="7903742244674067440">Имате сачуване сертификате који идентификују ове ауторитете за издавање сертификата</translation>
 <translation id="7903925330883316394">Помоћни процес: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">Учините Linux портове доступним за друге уређаје на својој мрежи.</translation>
+<translation id="7906440585529721295">Локални подаци ће се избрисати</translation>
 <translation id="7907837847548254634">Прикажи кратко истицање фокусираног објекта</translation>
 <translation id="7908378463497120834">Жао нам је, најмање једну партицију спољног меморијског уређаја није било могуће укључити.</translation>
 <translation id="7909324225945368569">Промените име профила</translation>
@@ -7451,6 +7462,7 @@
 <translation id="822050276545350872">Више не морате да чекате</translation>
 <translation id="8221491193165283816">Обично блокирате обавештења. Да бисте дозволили овом сајту да вас обавештава, кликните овде.</translation>
 <translation id="822347941086490485">Траже се уређаји са интерфејсом…</translation>
+<translation id="8223573963214454788">Настави и избриши податке</translation>
 <translation id="8225046344534779393">Проверите интернет везу</translation>
 <translation id="8225265270453771718">Делите прозор апликације</translation>
 <translation id="8226222018808695353">Забрањено је</translation>
@@ -7551,6 +7563,7 @@
 <translation id="8314381333424235892">Додатак недостаје или је деинсталиран</translation>
 <translation id="831440797644402910">Отварање овог директоријума није успело</translation>
 <translation id="8314835274931377415">Желите да започнете подешавање Приступа помоћу прекидача?</translation>
+<translation id="8317582043908962055">Препознај P&amp;DF текст</translation>
 <translation id="8317671367883557781">Додај мрежну везу</translation>
 <translation id="8319414634934645341">Употреба проширеног кључа</translation>
 <translation id="8321837372750396788">Овим <ph name="DEVICE_TYPE" /> ће управљати <ph name="MANAGER" />.</translation>
@@ -8438,6 +8451,7 @@
 <translation id="9203398526606335860">&amp;Профилисање је омогућено</translation>
 <translation id="9203904171912129171">Изаберите уређај</translation>
 <translation id="9206889157914079472">Прављење белешки на закључаном екрану помоћу писаљке</translation>
+<translation id="9208192193641542858">Локални подаци су заштићени старом лозинком. Ако сте недавно променили лозинку, пробајте поново са старом лозинком.</translation>
 <translation id="9209563766569767417">Проверава се подешавање Linux контејнера</translation>
 <translation id="9209689095351280025">Сајтови не могу да користе колачиће који вас прате на вебу</translation>
 <translation id="9211177926627870898">Ажурирање је обавезно</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 479a7c89..7392bd9 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -382,6 +382,7 @@
 <translation id="1374844444528092021">"<ph name="NETWORK_NAME" />" నెట్‌వర్క్‌కు అవసరమైన ప్రమాణపత్రం ఇన్‌స్టాల్ చేయబడలేదు లేదా చెల్లదు. దయచేసి కొత్త ప్రమాణపత్రాన్ని పొందండి మరియు మళ్లీ కనెక్ట్ చేయడాన్ని ప్రయత్నించండి.</translation>
 <translation id="1375321115329958930">సేవ్ చేసిన పాస్‌వర్డ్‌లు</translation>
 <translation id="1375557162880614858">మీరు ChromeOS Flexకి బిల్ట్-ఇన్ స్క్రీన్ రీడర్ అయిన ChromeVoxను యాక్టివేట్ చేయాలనుకుంటున్నారా?</translation>
+<translation id="1375938286942050085">సెటప్ పూర్తయింది! తర్వాత, వీడియో గేమ్‌ల కోసం మీ పరికరాన్ని సిద్ధం చేయండి</translation>
 <translation id="137651782282853227">సేవ్ చేసిన అడ్రస్‌లు ఇక్కడ కనిపిస్తాయి</translation>
 <translation id="1376771218494401509">పేరు &amp;విండో...</translation>
 <translation id="1377600615067678409">ప్రస్తుతానికి దాటవేయి</translation>
@@ -396,6 +397,7 @@
 <translation id="138784436342154190">డిఫాల్ట్ ప్రారంభ పేజీని పునరుద్ధరించాలా?</translation>
 <translation id="1388253969141979417">మీ మైక్రోఫోన్ ఉపయోగించడానికి అనుమతించబడింది</translation>
 <translation id="1388728792929436380">అప్‌డేట్‌లు పూర్తయినప్పుడు <ph name="DEVICE_TYPE" /> రీస్టార్ట్ అవుతుంది.</translation>
+<translation id="1389601498324964367">కోటా మేనేజ్ చేసే స్టోరేజ్</translation>
 <translation id="139013308650923562">మీ పరికరంలో ఇన్‌స్టాల్ చేయబడిన ఫాంట్‌లను ఉపయోగించడానికి సైట్‌లకు అనుమతి ఉంది</translation>
 <translation id="1390548061267426325">సాధారణ ట్యాబ్‌ లాగా తెరువు</translation>
 <translation id="1390907927270446471"><ph name="PRINTER_NAME" />కు ప్రింట్ చేయడానికి <ph name="PROFILE_USERNAME" />కు అధికారం లేదు. దయచేసి మీ అడ్మినిస్ట్రేటర్‌ను సంప్రదించండి.</translation>
@@ -1074,6 +1076,7 @@
 <translation id="1992924914582925289">పరికరం నుండి తీసివేయి</translation>
 <translation id="1994173015038366702">సైట్ URL</translation>
 <translation id="1995916364271252349">సైట్‌లు ఉపయోగించగల సమాచారాన్ని, అవి చూపగల కంటెంట్‌ను (లొకేషన్, కెమెరా, పాప్-అప్‌లు, మరిన్ని) నియంత్రిస్తుంది</translation>
+<translation id="1997433994358798851">మీ పరికరానికి కనెక్ట్ చేయడానికి, బ్లూటూత్‌ను ఉపయోగించడానికి Chromeకు అనుమతి కావాలి</translation>
 <translation id="1997616988432401742">మీ ప్రమాణపత్రాలు</translation>
 <translation id="1999115740519098545">ప్రారంభించిన తరువాత</translation>
 <translation id="2000419248597011803">అడ్రస్ బార్, సెర్చ్ బాక్స్‌లలో చేసే సెర్చ్‌లు, కొన్ని కుక్కీలను మీరు ఆటోమేటిక్ ఆప్షన్‌గా సెట్ చేసిన సెర్చ్ ఇంజిన్‌కు పంపుతుంది</translation>
@@ -1738,6 +1741,7 @@
 <translation id="25899519884572181">రీడర్ మోడ్ నుండి నిష్క్రమించండి</translation>
 <translation id="2593499352046705383">ప్రారంభించడానికి ముందు, మీరు మీ డేటాను బ్యాకప్ చేశారని నిర్ధారించుకోండి. <ph name="DEVICE_OS" />‌ను ఇన్‌స్టాల్ చేయడం వలన మీ హార్డ్ డ్రైవ్ ఓవర్‌రైట్ అవుతుంది. g.co/flex/InstallGuide లో మరింత తెలుసుకోండి.</translation>
 <translation id="2594999711683503743">Googleలో వెతకండి లేదా URLను టైప్ చేయండి</translation>
+<translation id="2599048253926156421">యూజర్‌నేమ్ క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది</translation>
 <translation id="2602501489742255173">ప్రారంభించడానికి పైకి స్వైప్ చేయండి</translation>
 <translation id="2603115962224169880">కంప్యూటర్‌ నుండి హానికరమైనవి తీసివేయండి</translation>
 <translation id="2603355571917519942">వాయిస్ మ్యాచ్ సిద్ధంగా ఉంది</translation>
@@ -1961,6 +1965,7 @@
 <translation id="2804043232879091219">ప్రత్యామ్నాయ బ్రౌజర్‌ను తెరవడం సాధ్యపడలేదు</translation>
 <translation id="2804667941345577550">అలాగే మీరు తెరిచిన ట్యాబ్‌లతో సహా, ఈ సైట్‌ నుండి పూర్తిగా సైన్ అవుట్ చేయబడతారు.</translation>
 <translation id="2804680522274557040">కెమెరా ఆఫ్ చేయబడింది</translation>
+<translation id="280518252911523675">మీ పాత పాస్‌వర్డ్‌ను ఎంటర్ చేయకుండా కొనసాగితే, మీ లోకల్ డేటా తొలగించబడుతుంది. ఈ యూజర్‌ను మళ్లీ సెటప్ చేయడానికి, మీరు మీ Google ఖాతాకు సైన్ ఇన్ చేయాలి.</translation>
 <translation id="2805539617243680210">మీరు మొత్తం పూర్తి చేశారు!</translation>
 <translation id="2805646850212350655">Microsoft Encrypting File System</translation>
 <translation id="2805756323405976993">యాప్స్</translation>
@@ -3076,6 +3081,7 @@
 <translation id="3895090224522145010">Kerberos వినియోగదారు పేరు</translation>
 <translation id="389521680295183045">మీరు మీ పరికరాన్ని యాక్టివ్‌గా ఉపయోగించే సమయాలను తెలుసుకోవడానికి సైట్‌లు అడగవచ్చు</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{ఇమేజ్}other{# ఇమేజ్‌లు}}</translation>
+<translation id="3897746662269329507">మీ <ph name="DEVICE_TYPE" />, వీడియో గేమ్‌ల కోసం బిల్డ్ చేయబడింది. తర్వాత, 'అన్వేషణ' యాప్ తెరవబడుతుంది, అందులో మీరు వందల కొద్దీ తాజా గేమ్‌లను యాక్సెస్ చేయవచ్చు, వీడియో గేమ్‌ల ఆఫర్‌లను చూడవచ్చు, మీ పరికరంతో వచ్చే వీడియో గేమ్ ఫీచర్‌ల గురించి తెలుసుకోవచ్చు.</translation>
 <translation id="3898233949376129212">పరికర భాష</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> వీటిని చేయాలనుకుంటోంది: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">కీబోర్డ్‌ను ఎంచుకోండి</translation>
@@ -3226,6 +3232,7 @@
 <translation id="4033471457476425443">కొత్త ఫోల్డర్‌ను జోడించు</translation>
 <translation id="4033711848170683365">ఇది బ్రౌజింగ్ డేటాను ఈ పరికరం నుండి శాశ్వతంగా తొలగిస్తుంది. ఈ ప్రొఫైల్‌లోని Google ఖాతాలను, మీ <ph name="DEVICE_TYPE" />‌లోని ఇతర యాప్‌లు ఉపయోగించవచ్చు. మీరు ఈ ఖాతాలను <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" />‌లో తీసివేయవచ్చు.</translation>
 <translation id="4033963223187371752">సురక్షిత సైట్‌లు సురక్షితం కాని ఇమేజ్‌లు లేదా వెబ్ ఫ్రేమ్‌ల వంటి కంటెంట్‌ను పొందుపరచవచ్చు</translation>
+<translation id="4034741552964543387">లోకల్ డేటా లేకుండా కొనసాగించండి</translation>
 <translation id="4034824040120875894">ప్రింటర్</translation>
 <translation id="4035758313003622889">&amp;కార్య నిర్వాహకుడు</translation>
 <translation id="4035877632587724847">అనుమతించవద్దు</translation>
@@ -3417,6 +3424,7 @@
 <translation id="4242533952199664413">సెట్టింగ్‌లను తెరువు</translation>
 <translation id="4242577469625748426">పరికరంలో విధాన సెట్టింగ్‌లను ఇన్‌స్టాల్ చేయడంలో విఫలమైంది: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4243504193894350135">ప్రింటర్ పాజ్ చేయబడింది</translation>
+<translation id="424423026762293842">మీ లోకల్ డేటాను రీస్టోర్ చేయండి</translation>
 <translation id="4244238649050961491">మరిన్ని స్టైలస్ యాప్‌లను కనుగొనండి</translation>
 <translation id="4246980464509998944">అదనపు కామెంట్‌లు:</translation>
 <translation id="424726838611654458">ఎల్లప్పుడూ Adobe Readerలో తెరువు</translation>
@@ -4975,6 +4983,7 @@
 <translation id="5792728279623964091">దయచేసి మీ పవర్ బటన్‌పై నొక్కండి</translation>
 <translation id="5793339252089865437">మీరు మీ మొబైల్ నెట్‌వర్క్ ద్వారా అప్‌డేట్‌ని డౌన్‌లోడ్ చేసినట్లయితే, అధిక ఛార్జ్‌లు చెల్లించాల్సి రావచ్చు.</translation>
 <translation id="5793420564274426163">పెయిర్‌ను నిర్ధారిస్తోంది</translation>
+<translation id="5793430094159150686">మీ పాస్‌వర్డ్ మార్చబడింది. మీ లోకల్ డేటాను రీస్టోర్ చేయడానికి, మీరు మీ పాత పాస్‌వర్డ్‌ను ఎంటర్ చేయాలి.</translation>
 <translation id="5794034487966529952"><ph name="DESK_TITLE" /> డెస్క్‌లో <ph name="NUM_BROWSERS" /> బ్రౌజర్ విండోలు తెరిచి ఉన్నాయి</translation>
 <translation id="5794414402486823030">ఎల్లప్పుడూ సిస్టమ్ వ్యూయర్‌తో తెరువు</translation>
 <translation id="5794700615121138172">Linux షేర్ చేసిన ఫోల్డర్‌లు</translation>
@@ -5899,6 +5908,7 @@
 <translation id="6700093763382332031">సెల్యూలార్ SIM లాక్</translation>
 <translation id="6700480081846086223"><ph name="HOST_NAME" />ని ప్రసారం చేయండి</translation>
 <translation id="6701535245008341853">ప్రొఫైల్‌ను పొందడం సాధ్యం కాలేదు.</translation>
+<translation id="6701824422332982935">ఈ ఎక్స్‌టెన్షన్‌లను ఉపయోగించడానికి పేజీని రీలోడ్ చేయండి</translation>
 <translation id="6702639462873609204">&amp;సవరించు...</translation>
 <translation id="6703212423117969852">మీరు Chrome సెట్టింగ్‌లలో తర్వాత మళ్లీ ట్రై చేయవచ్చు.</translation>
 <translation id="6703254819490889819">బ్యాకప్‌ను రీస్టోర్ చేయండి</translation>
@@ -7125,6 +7135,7 @@
 <translation id="7903742244674067440">మీకు ఫైల్‌లో ఈ ప్రమాణపత్రం అధికారాలను గుర్తించే ప్రమాణపత్రాలు ఉన్నాయి</translation>
 <translation id="7903925330883316394">యుటిలిటీ: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">మీ నెట్‌వర్క్‌లో ఇతర పరికరాలకు Linux పోర్ట్‌లు అందుబాటులో ఉండేలా చూడండి.</translation>
+<translation id="7906440585529721295">లోకల్ డేటా తొలగించబడుతుంది</translation>
 <translation id="7907837847548254634">ఫోకస్ చేసిన ఆబ్జెక్ట్‌పై త్వరిత హైలైట్‌ను చూపించాలి</translation>
 <translation id="7908378463497120834">క్షమించండి, మీ బాహ్య నిల్వ పరికరంలో కనీసం ఒక విభజన కూడా ఉంచబడదు.</translation>
 <translation id="7909324225945368569">మీ ప్రొఫైల్‌కు పేరు మార్చండి</translation>
@@ -7460,6 +7471,7 @@
 <translation id="822050276545350872">ఇక్కడ నుండి, వేచి ఉండాల్సిన అవసరం లేదు</translation>
 <translation id="8221491193165283816">మీరు సాధారణంగా నోటిఫికేషన్‌లను బ్లాక్ చేస్తుంటారు. ఈ సైట్ నుండి నోటిఫికేషన్‌లను పొందాలంటే, ఇక్కడ క్లిక్ చేయండి.</translation>
 <translation id="822347941086490485">HID పరికరాలను కనుగొంటోంది...</translation>
+<translation id="8223573963214454788">కొనసాగించి, డేటాను తొలగించండి</translation>
 <translation id="8225046344534779393">ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేయండి</translation>
 <translation id="8225265270453771718">అప్లికేషన్ విండోను షేర్ చేయండి</translation>
 <translation id="8226222018808695353">నిషేధించబడింది</translation>
@@ -7560,6 +7572,7 @@
 <translation id="8314381333424235892">ఎక్స్‌టెన్షన్‌ను అందించలేదు లేదా అన్ఇన్‌స్టాల్ చేయబడింది</translation>
 <translation id="831440797644402910">ఈ ఫోల్డర్‌ను తెరవడం సాధ్యం కాదు</translation>
 <translation id="8314835274931377415">స్విచ్ యాక్సెస్ సెటప్‌ను ప్రారంభించాలనుకుంటున్నారా?</translation>
+<translation id="8317582043908962055">P&amp;DF టెక్స్ట్‌ను గుర్తించండి</translation>
 <translation id="8317671367883557781">నెట్‌వర్క్ కనెక్షన్‌ను జోడించు</translation>
 <translation id="8319414634934645341">విస్తరించిన కీ ఉపయోగం</translation>
 <translation id="8321837372750396788"><ph name="MANAGER" /> ఈ <ph name="DEVICE_TYPE" />ను మేనేజ్ చేస్తుంది.</translation>
@@ -8445,6 +8458,7 @@
 <translation id="9203398526606335860">&amp;ప్రొఫైలింగ్ అనుమతించబడింది</translation>
 <translation id="9203904171912129171">ఒక పరికరాన్ని ఎంచుకోండి</translation>
 <translation id="9206889157914079472">స్టైలస్ లాక్ స్క్రీన్ నుండి విషయ సేకరణ</translation>
+<translation id="9208192193641542858">లోకల్ డేటాను మీ పాత పాస్‌వర్డ్ భద్రపరుస్తుంది. మీరు ఇటీవలే మీ పాస్‌వర్డ్‌ను మార్చి ఉంటే, మీ పాత పాస్‌వర్డ్‌తో మళ్లీ ట్రై చేయండి.</translation>
 <translation id="9209563766569767417">Linux కంటెయినర్ సెటప్‌ను తనిఖీ చేస్తోంది</translation>
 <translation id="9209689095351280025">వెబ్ అంతటా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే కుక్కీలను సైట్‌లు ఉపయోగించడం సాధ్యం కాదు</translation>
 <translation id="9211177926627870898">అప్‌డేట్ అవసరం</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 11ab25ad3..8d2908d 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -380,6 +380,7 @@
 <translation id="1374844444528092021">ใบรับรองที่เครือข่าย "<ph name="NETWORK_NAME" />" ต้องการไม่ได้รับการติดตั้ง หรือใช้ไม่ได้อีกต่อไปแล้ว โปรดรับใบรับรองใหม่และลองเชื่อมต่ออีกครั้ง</translation>
 <translation id="1375321115329958930">รหัสผ่านที่บันทึกไว้</translation>
 <translation id="1375557162880614858">คุณต้องการเปิดใช้งาน ChromeVox ซึ่งเป็นโปรแกรมอ่านหน้าจอในตัวสำหรับ Chrome OS Flex ไหม</translation>
+<translation id="1375938286942050085">การตั้งค่าเสร็จสมบูรณ์ เตรียมอุปกรณ์ให้พร้อมสำหรับการเล่นเกมครั้งถัดไป</translation>
 <translation id="137651782282853227">ที่อยู่ที่บันทึกไว้จะแสดงที่นี่</translation>
 <translation id="1376771218494401509">ตั้งชื่อ&amp;หน้าต่าง...</translation>
 <translation id="1377600615067678409">ข้ามไปก่อน</translation>
@@ -394,6 +395,7 @@
 <translation id="138784436342154190">คืนค่าเป็นหน้าเริ่มต้นใช้งานเริ่มต้นไหม</translation>
 <translation id="1388253969141979417">ได้รับอนุญาตให้ใช้ไมโครโฟน</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> จะรีสตาร์ทเมื่อการอัปเดตเสร็จสมบูรณ์</translation>
+<translation id="1389601498324964367">พื้นที่เก็บข้อมูลที่มีการจัดการโควต้า</translation>
 <translation id="139013308650923562">อนุญาตให้ใช้แบบอักษรที่ติดตั้งอยู่ในอุปกรณ์</translation>
 <translation id="1390548061267426325">เปิดเป็นแท็บทั่วไป</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> ไม่ได้รับอนุญาตให้สั่งพิมพ์ไปยัง <ph name="PRINTER_NAME" /> โปรดติดต่อผู้ดูแลระบบ</translation>
@@ -1063,6 +1065,7 @@
 <translation id="1992924914582925289">นำออกจากอุปกรณ์</translation>
 <translation id="1994173015038366702">URL ของเว็บไซต์</translation>
 <translation id="1995916364271252349">กำหนดประเภทข้อมูลที่เว็บไซต์ต่างๆ จะใช้และแสดงได้ (เช่น ข้อมูลตำแหน่ง กล้อง ป๊อปอัป)</translation>
+<translation id="1997433994358798851">Chrome ต้องได้รับสิทธิ์ในการใช้บลูทูธเพื่อเชื่อมต่อกับอุปกรณ์</translation>
 <translation id="1997616988432401742">ใบรับรองของคุณ</translation>
 <translation id="1999115740519098545">เมื่อเริ่มต้นใช้งาน</translation>
 <translation id="2000419248597011803">ส่งคุกกี้และการค้นหาบางรายการจากแถบที่อยู่และช่องค้นหาไปยังเครื่องมือค้นหาเริ่มต้น</translation>
@@ -1724,6 +1727,7 @@
 <translation id="25899519884572181">ออกจากโหมดผู้อ่าน</translation>
 <translation id="2593499352046705383">ตรวจสอบว่าคุณได้สำรองข้อมูลไว้แล้วก่อนที่จะเริ่ม การติดตั้ง <ph name="DEVICE_OS" /> จะเขียนทับข้อมูลในฮาร์ดไดรฟ์ ดูข้อมูลเพิ่มเติมที่ g.co/flex/InstallGuide</translation>
 <translation id="2594999711683503743">ค้นหาด้วย Google หรือพิมพ์ URL</translation>
+<translation id="2599048253926156421">คัดลอกชื่อผู้ใช้ไปยังคลิปบอร์ดแล้ว</translation>
 <translation id="2602501489742255173">เลื่อนขึ้นเพื่อเริ่มต้นใช้งาน</translation>
 <translation id="2603115962224169880">ล้างข้อมูลในคอมพิวเตอร์</translation>
 <translation id="2603355571917519942">Voice Match พร้อมใช้งานแล้ว</translation>
@@ -1947,6 +1951,7 @@
 <translation id="2804043232879091219">เปิดเบราว์เซอร์สำรองไม่ได้</translation>
 <translation id="2804667941345577550">คุณจะออกจากระบบของเว็บไซต์นี้ รวมถึงในแท็บที่เปิดอยู่</translation>
 <translation id="2804680522274557040">ปิดกล้องอยู่</translation>
+<translation id="280518252911523675">หากดำเนินการต่อโดยไม่ป้อนรหัสผ่านเก่า ระบบจะลบข้อมูลในเครื่อง คุณจะต้องลงชื่อเข้าใช้ด้วยบัญชี Google เพื่อตั้งค่าผู้ใช้รายนี้อีกครั้ง</translation>
 <translation id="2805539617243680210">คุณพร้อมแล้ว</translation>
 <translation id="2805646850212350655">ระบบไฟล์การเข้ารหัสของ Microsoft</translation>
 <translation id="2805756323405976993">แอป</translation>
@@ -3062,6 +3067,7 @@
 <translation id="3895090224522145010">ชื่อผู้ใช้ Kerberos</translation>
 <translation id="389521680295183045">เว็บไซต์สามารถขอทราบเวลาที่คุณใช้งานอุปกรณ์อยู่ได้</translation>
 <translation id="3897298432557662720">{COUNT,plural, =1{1 รูปภาพ}other{# รูปภาพ}}</translation>
+<translation id="3897746662269329507"><ph name="DEVICE_TYPE" /> สร้างมาเพื่อการเล่นเกม แอปสำรวจจะเปิดขึ้นถัดไปเพื่อให้คุณเข้าถึงเกมใหม่ล่าสุดหลายร้อยเกม ดูข้อเสนอเกี่ยวกับเกม และค้นพบฟีเจอร์สำหรับเล่นเกมที่มาพร้อมกับอุปกรณ์</translation>
 <translation id="3898233949376129212">ภาษาของอุปกรณ์</translation>
 <translation id="3898327728850887246"><ph name="SITE_NAME" /> ต้องการ<ph name="FIRST_PERMISSION" />และ<ph name="SECOND_PERMISSION" /></translation>
 <translation id="389901847090970821">เลือกแป้นพิมพ์</translation>
@@ -3212,6 +3218,7 @@
 <translation id="4033471457476425443">เพิ่มโฟลเดอร์ใหม่</translation>
 <translation id="4033711848170683365">การดำเนินการนี้จะลบข้อมูลการท่องเว็บของคุณจากอุปกรณ์นี้อย่างถาวร แอปอื่นๆ ใน <ph name="DEVICE_TYPE" /> อาจใช้บัญชี Google ในโปรไฟล์นี้อยู่ คุณนำบัญชีเหล่านี้ออกได้ใน <ph name="BEGIN_LINK" /><ph name="SETTING_SECTION" /> &gt; <ph name="ACCOUNTS_SECTION" /><ph name="END_LINK" /></translation>
 <translation id="4033963223187371752">เว็บไซต์ที่ปลอดภัยอาจฝังเนื้อหา เช่น เฟรมรูปภาพหรือเว็บ ซึ่งไม่ปลอดภัย</translation>
+<translation id="4034741552964543387">ดำเนินการต่อโดยไม่ต้องมีข้อมูลในเครื่อง</translation>
 <translation id="4034824040120875894">เครื่องพิมพ์</translation>
 <translation id="4035758313003622889">&amp;ตัวจัดการงาน</translation>
 <translation id="4035877632587724847">ไม่อนุญาต</translation>
@@ -3403,6 +3410,7 @@
 <translation id="4242533952199664413">เปิดการตั้งค่า</translation>
 <translation id="4242577469625748426">ไม่สามารถติดตั้งการตั้งค่านโยบายบนอุปกรณ์: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4243504193894350135">เครื่องพิมพ์หยุดชั่วคราว</translation>
+<translation id="424423026762293842">กู้คืนข้อมูลในเครื่อง</translation>
 <translation id="4244238649050961491">ค้นหาแอปสไตลัสเพิ่มเติม</translation>
 <translation id="4246980464509998944">ความคิดเห็นเพิ่มเติม</translation>
 <translation id="424726838611654458">เปิดใน Adobe Reader ทุกครั้ง</translation>
@@ -4958,6 +4966,7 @@
 <translation id="5792728279623964091">โปรดแตะปุ่มเปิด/ปิด</translation>
 <translation id="5793339252089865437">หากดาวน์โหลดอัปเดตผ่านเครือข่ายมือถือ อาจทำให้มีค่าบริการเน็ตมือถือเพิ่มเติม</translation>
 <translation id="5793420564274426163">การยืนยันการจับคู่</translation>
+<translation id="5793430094159150686">เปลี่ยนรหัสผ่านแล้ว คุณต้องป้อนรหัสผ่านเก่าหากต้องการกู้คืนข้อมูลในเครื่อง</translation>
 <translation id="5794034487966529952">เดสก์ <ph name="DESK_TITLE" /> มีเบราว์เซอร์เปิดอยู่ <ph name="NUM_BROWSERS" /> หน้าต่าง</translation>
 <translation id="5794414402486823030">เปิดด้วยโปรแกรมดูของระบบทุกครั้ง</translation>
 <translation id="5794700615121138172">โฟลเดอร์ที่แชร์ใน Linux</translation>
@@ -5881,6 +5890,7 @@
 <translation id="6700093763382332031">การล็อกซิมมือถือ</translation>
 <translation id="6700480081846086223">แคสต์ <ph name="HOST_NAME" /></translation>
 <translation id="6701535245008341853">ไม่สามารถโหลดโปรไฟล์</translation>
+<translation id="6701824422332982935">โหลดหน้าเว็บซ้ำเพื่อใช้ส่วนขยายเหล่านี้</translation>
 <translation id="6702639462873609204">&amp;แก้ไข...</translation>
 <translation id="6703212423117969852">คุณลองอีกครั้งภายหลังได้ใน Chrome</translation>
 <translation id="6703254819490889819">กู้คืนข้อมูลสำรอง</translation>
@@ -7107,6 +7117,7 @@
 <translation id="7903742244674067440">คุณมีใบรับรองของไฟล์ซึ่งระบุตัวตนของผู้ออกใบรับรองเหล่านี้</translation>
 <translation id="7903925330883316394">ยูทิลิตี: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904526211178107182">ทำให้พอร์ต Linux ใช้งานได้กับอุปกรณ์อื่นๆ ในเครือข่าย</translation>
+<translation id="7906440585529721295">ระบบจะลบข้อมูลในเครื่อง</translation>
 <translation id="7907837847548254634">แสดงไฮไลต์เป็นระยะเวลาสั้นๆ บนวัตถุที่โฟกัส</translation>
 <translation id="7908378463497120834">ขออภัย ไม่สามารถติดตั้งอย่างน้อยหนึ่งพาร์ทิชันในอุปกรณ์จัดเก็บข้อมูลภายนอกของคุณ</translation>
 <translation id="7909324225945368569">เปลี่ยนชื่อโปรไฟล์</translation>
@@ -7445,6 +7456,7 @@
 <translation id="822050276545350872">คุณไม่จำเป็นต้องรอขั้นตอนต่อจากนี้</translation>
 <translation id="8221491193165283816">คุณมักจะบล็อกการแจ้งเตือน หากต้องการให้เว็บไซต์ส่งการแจ้งเตือน ให้คลิกที่นี่</translation>
 <translation id="822347941086490485">กำลังค้นหาอุปกรณ์ HID...</translation>
+<translation id="8223573963214454788">ดำเนินการต่อและลบข้อมูล</translation>
 <translation id="8225046344534779393">ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="8225265270453771718">แชร์หน้าต่างแอปพลิเคชัน</translation>
 <translation id="8226222018808695353">ต้องห้าม</translation>
@@ -7545,6 +7557,7 @@
 <translation id="8314381333424235892">ไม่มีส่วนขยายหรือไม่ได้ติดตั้ง</translation>
 <translation id="831440797644402910">เปิดโฟลเดอร์นี้ไม่ได้</translation>
 <translation id="8314835274931377415">เริ่มตั้งค่าการเข้าถึงด้วยสวิตช์ไหม</translation>
+<translation id="8317582043908962055">จดจำข้อความจาก PDF</translation>
 <translation id="8317671367883557781">เพิ่มการเชื่อมต่อเครือข่าย</translation>
 <translation id="8319414634934645341">การใช้คีย์เพิ่มเติม</translation>
 <translation id="8321837372750396788"><ph name="MANAGER" /> จะจัดการ <ph name="DEVICE_TYPE" /> นี้</translation>
@@ -8430,6 +8443,7 @@
 <translation id="9203398526606335860">&amp;เปิดใช้งานการทำแฟ้มประวัติ</translation>
 <translation id="9203904171912129171">เลือกอุปกรณ์</translation>
 <translation id="9206889157914079472">การจดบันทึกด้วยสไตลัสจากหน้าจอล็อก</translation>
+<translation id="9208192193641542858">ข้อมูลในเครื่องได้รับการปกป้องโดยรหัสผ่านเก่า หากคุณเพิ่งเปลี่ยนรหัสผ่านไปไม่นาน ลองใช้รหัสผ่านเก่าอีกครั้ง</translation>
 <translation id="9209563766569767417">กำลังตรวจสอบการตั้งค่าคอนเทนเนอร์ Linux</translation>
 <translation id="9209689095351280025">เว็บไซต์ต่างๆ จะใช้คุกกี้ที่ติดตามคุณในอินเทอร์เน็ตไม่ได้</translation>
 <translation id="9211177926627870898">ต้องอัปเดต</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index fe3190a..2e7b132 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4378,7 +4378,6 @@
       "//chrome/app/vector_icons",
       "//chrome/browser/ash/system_web_apps",
       "//chrome/browser/ash/system_web_apps/types:types",
-      "//chrome/browser/autofill_assistant/password_change/proto:proto",
       "//chrome/browser/cart:mojo_bindings",
       "//chrome/browser/enterprise/connectors/analysis:features",
       "//chrome/browser/enterprise/signals:utils",
@@ -4423,6 +4422,7 @@
       "//components/accuracy_tips",
       "//components/app_constants",
       "//components/autofill_assistant/browser/public:proto",
+      "//components/autofill_assistant/browser/public/password_change/proto:proto",
       "//components/commerce/core:cart_db_content_proto",
       "//components/commerce/core:coupon_db_content_proto",
       "//components/commerce/core:public",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 8d09284..9db63b1 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -8717,6 +8717,11 @@
      FEATURE_VALUE_TYPE(features::kEnableWebHidOnExtensionServiceWorker)},
 #endif
 
+    {"enable-sync-history-datatype",
+     flag_descriptions::kSyncEnableHistoryDataTypeName,
+     flag_descriptions::kSyncEnableHistoryDataTypeDescription, kOsAll,
+     FEATURE_VALUE_TYPE(syncer::kSyncEnableHistoryDataType)},
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc b/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
index 37b884d..0bd46da 100644
--- a/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
+++ b/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
@@ -26,8 +26,6 @@
 #include "chrome/browser/ash/child_accounts/time_limits/app_time_test_utils.h"
 #include "chrome/browser/ash/child_accounts/time_limits/app_types.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
-#include "chrome/browser/supervised_user/supervised_user_metrics_service.h"
-#include "chrome/browser/supervised_user/supervised_user_metrics_service_factory.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
@@ -168,10 +166,6 @@
   SystemClockClient::InitializeFake();
   testing::Test::SetUp();
 
-  // Disable supervised user metrics reporting, otherwise the mock timer
-  // will never return.
-  SupervisedUserMetricsServiceFactory::GetForBrowserContext(&profile())
-      ->Shutdown();
   // The tests are going to start at local midnight on January 1.
   base::Time time;
   ASSERT_TRUE(base::Time::FromString(kStartTime, &time));
diff --git a/chrome/browser/ash/crosapi/test_controller_ash.cc b/chrome/browser/ash/crosapi/test_controller_ash.cc
index f3f48b0..366fe177 100644
--- a/chrome/browser/ash/crosapi/test_controller_ash.cc
+++ b/chrome/browser/ash/crosapi/test_controller_ash.cc
@@ -32,8 +32,6 @@
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/views/tabs/tab_scrubber_chromeos.h"
-#include "chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h"
-#include "chromeos/ash/components/network/network_handler_test_helper.h"
 #include "chromeos/dbus/shill/shill_profile_client.h"
 #include "chromeos/dbus/shill/shill_third_party_vpn_driver_client.h"
 #include "components/version_info/version_info.h"
@@ -516,38 +514,6 @@
 #endif  // defined(USE_CUPS)
 }
 
-void TestControllerAsh::BindShillClientTestInterface(
-    mojo::PendingReceiver<crosapi::mojom::ShillClientTestInterface> receiver,
-    BindShillClientTestInterfaceCallback callback) {
-  mojo::MakeSelfOwnedReceiver<crosapi::mojom::ShillClientTestInterface>(
-      std::make_unique<crosapi::ShillClientTestInterfaceAsh>(),
-      std::move(receiver));
-  std::move(callback).Run();
-}
-
-void TestControllerAsh::GetSanitizedActiveUsername(
-    GetSanitizedActiveUsernameCallback callback) {
-  user_manager::UserManager* user_manager = user_manager::UserManager::Get();
-  user_manager::User* user = user_manager->GetActiveUser();
-  CHECK(user);
-
-  ::user_data_auth::GetSanitizedUsernameRequest request;
-
-  request.set_username(
-      cryptohome::CreateAccountIdentifierFromAccountId(user->GetAccountId())
-          .account_id());
-  ash::CryptohomeMiscClient::Get()->GetSanitizedUsername(
-      request,
-      base::BindOnce(
-          [](GetSanitizedActiveUsernameCallback callback,
-             absl::optional<::user_data_auth::GetSanitizedUsernameReply>
-                 result) {
-            CHECK(result.has_value());
-            std::move(callback).Run(result->sanitized_username());
-          },
-          std::move(callback)));
-}
-
 // This class waits for overview mode to either enter or exit and fires a
 // callback. This class will fire the callback at most once.
 class TestControllerAsh::OverviewWaiter : public ash::OverviewObserver {
@@ -639,100 +605,4 @@
   client->OnPlatformMessage(shill_key, message);
 }
 
-////////////
-// ShillClientTestInterfaceAsh
-
-ShillClientTestInterfaceAsh::ShillClientTestInterfaceAsh() = default;
-ShillClientTestInterfaceAsh::~ShillClientTestInterfaceAsh() = default;
-
-void ShillClientTestInterfaceAsh::AddDevice(const std::string& device_path,
-                                            const std::string& type,
-                                            const std::string& name,
-                                            AddDeviceCallback callback) {
-  auto* device_test = chromeos::ShillDeviceClient::Get()->GetTestInterface();
-  device_test->AddDevice(device_path, type, name);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::ClearDevices(ClearDevicesCallback callback) {
-  auto* device_test = chromeos::ShillDeviceClient::Get()->GetTestInterface();
-  device_test->ClearDevices();
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::SetDeviceProperty(
-    const std::string& device_path,
-    const std::string& name,
-    ::base::Value value,
-    bool notify_changed,
-    SetDevicePropertyCallback callback) {
-  auto* device_test = chromeos::ShillDeviceClient::Get()->GetTestInterface();
-  device_test->SetDeviceProperty(device_path, name, value, notify_changed);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::SetSimLocked(const std::string& device_path,
-                                               bool enabled,
-                                               SetSimLockedCallback callback) {
-  auto* device_test = chromeos::ShillDeviceClient::Get()->GetTestInterface();
-  device_test->SetSimLocked(device_path, enabled);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::AddService(
-    const std::string& service_path,
-    const std::string& guid,
-    const std::string& name,
-    const std::string& type,
-    const std::string& state,
-    bool visible,
-    SetDevicePropertyCallback callback) {
-  auto* service_test = chromeos::ShillServiceClient::Get()->GetTestInterface();
-  service_test->AddService(service_path, guid, name, type, state, visible);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::ClearServices(
-    ClearServicesCallback callback) {
-  auto* service_test = chromeos::ShillServiceClient::Get()->GetTestInterface();
-  service_test->ClearServices();
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::SetServiceProperty(
-    const std::string& service_path,
-    const std::string& property,
-    base::Value value,
-    SetServicePropertyCallback callback) {
-  auto* service_test = chromeos::ShillServiceClient::Get()->GetTestInterface();
-  service_test->SetServiceProperty(service_path, property, value);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::AddProfile(const std::string& profile_path,
-                                             const std::string& userhash,
-                                             AddProfileCallback callback) {
-  auto* profile_test = chromeos::ShillProfileClient::Get()->GetTestInterface();
-  profile_test->AddProfile(profile_path, userhash);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::AddServiceToProfile(
-    const std::string& profile_path,
-    const std::string& service_path,
-    AddServiceToProfileCallback callback) {
-  auto* profile_test = chromeos::ShillProfileClient::Get()->GetTestInterface();
-  profile_test->AddService(profile_path, service_path);
-  std::move(callback).Run();
-}
-
-void ShillClientTestInterfaceAsh::AddIPConfig(const std::string& ip_config_path,
-                                              ::base::Value properties,
-                                              AddIPConfigCallback callback) {
-  auto* ip_config_test =
-      chromeos::ShillIPConfigClient::Get()->GetTestInterface();
-  ip_config_test->AddIPConfig(ip_config_path, properties);
-  std::move(callback).Run();
-}
-
 }  // namespace crosapi
diff --git a/chrome/browser/ash/crosapi/test_controller_ash.h b/chrome/browser/ash/crosapi/test_controller_ash.h
index 3faae57..9c36a59 100644
--- a/chrome/browser/ash/crosapi/test_controller_ash.h
+++ b/chrome/browser/ash/crosapi/test_controller_ash.h
@@ -85,13 +85,6 @@
       const std::string& job_title,
       CreateAndCancelPrintJobCallback callback) override;
 
-  void BindShillClientTestInterface(
-      mojo::PendingReceiver<crosapi::mojom::ShillClientTestInterface> receiver,
-      BindShillClientTestInterfaceCallback callback) override;
-
-  void GetSanitizedActiveUsername(
-      GetSanitizedActiveUsernameCallback callback) override;
-
   mojo::Remote<mojom::StandaloneBrowserTestController>&
   GetStandaloneBrowserTestController() {
     DCHECK(standalone_browser_test_controller_.is_bound());
@@ -148,51 +141,6 @@
                          uint32_t message) override;
 };
 
-class ShillClientTestInterfaceAsh
-    : public crosapi::mojom::ShillClientTestInterface {
- public:
-  ShillClientTestInterfaceAsh();
-  ~ShillClientTestInterfaceAsh() override;
-
-  void AddDevice(const std::string& device_path,
-                 const std::string& type,
-                 const std::string& name,
-                 AddDeviceCallback callback) override;
-  void ClearDevices(ClearDevicesCallback callback) override;
-  void SetDeviceProperty(const std::string& device_path,
-                         const std::string& name,
-                         ::base::Value value,
-                         bool notify_changed,
-                         SetDevicePropertyCallback callback) override;
-  void SetSimLocked(const std::string& device_path,
-                    bool enabled,
-                    SetSimLockedCallback callback) override;
-
-  void AddService(const std::string& service_path,
-                  const std::string& guid,
-                  const std::string& name,
-                  const std::string& type,
-                  const std::string& state,
-                  bool visible,
-                  AddServiceCallback callback) override;
-  void ClearServices(ClearServicesCallback callback) override;
-  void SetServiceProperty(const std::string& service_path,
-                          const std::string& property,
-                          base::Value value,
-                          SetServicePropertyCallback callback) override;
-
-  void AddProfile(const std::string& profile_path,
-                  const std::string& userhash,
-                  AddProfileCallback callback) override;
-  void AddServiceToProfile(const std::string& profile_path,
-                           const std::string& service_path,
-                           AddServiceToProfileCallback callback) override;
-
-  void AddIPConfig(const std::string& ip_config_path,
-                   ::base::Value properties,
-                   AddIPConfigCallback callback) override;
-};
-
 }  // namespace crosapi
 
 #endif  // CHROME_BROWSER_ASH_CROSAPI_TEST_CONTROLLER_ASH_H_
diff --git a/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc b/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc
index 1727cc6..9897951 100644
--- a/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc
+++ b/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc
@@ -738,14 +738,10 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-// TODO(crbug.com/1150349): Flaky on ChromeOS ASAN.
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_NextDisabledOnNetworkScreen DISABLED_NextDisabledOnNetworkScreen
-#else
-#define MAYBE_NextDisabledOnNetworkScreen NextDisabledOnNetworkScreen
-#endif
+// crbug.com/1340651 Disable the test due to flakiness. Note that the test is
+// also disabled for ASAN, see crbug.com/1150349 for more information.
 IN_PROC_BROWSER_TEST_F(OfflineDemoSetupTest,
-                       MAYBE_NextDisabledOnNetworkScreen) {
+                       DISABLED_NextDisabledOnNetworkScreen) {
   SimulateNetworkDisconnected();
 
   TriggerDemoModeOnWelcomeScreen();
@@ -1081,15 +1077,10 @@
   }
 };
 
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_VirtualSetCountryCodeRegionPlaceholderIsSet \
-  DISABLED_VirtualSetCountryCodeRegionPlaceholderIsSet
-#else
-#define MAYBE_VirtualSetCountryCodeRegionPlaceholderIsSet \
-  VirtualSetCountryCodeRegionPlaceholderIsSet
-#endif
+// crbug.com/1340618 Disable the test due to flakiness. Note that the test is
+// also disabled for ASAN, see crrev.com/c/3227288 for more information.
 IN_PROC_BROWSER_TEST_F(DemoSetupVirtualSetRegionCodeTest,
-                       MAYBE_VirtualSetCountryCodeRegionPlaceholderIsSet) {
+                       DISABLED_VirtualSetCountryCodeRegionPlaceholderIsSet) {
   // Simulate successful online setup.
   enrollment_helper_.ExpectEnrollmentMode(
       policy::EnrollmentConfig::MODE_ATTESTATION);
diff --git a/chrome/browser/ash/login/reset_browsertest.cc b/chrome/browser/ash/login/reset_browsertest.cc
index 28bf5d2b..253bdc8 100644
--- a/chrome/browser/ash/login/reset_browsertest.cc
+++ b/chrome/browser/ash/login/reset_browsertest.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/ash/login/test/oobe_base_test.h"
 #include "chrome/browser/ash/login/test/oobe_screen_exit_waiter.h"
 #include "chrome/browser/ash/login/test/oobe_screen_waiter.h"
+#include "chrome/browser/ash/login/test/oobe_screens_utils.h"
 #include "chrome/browser/ash/login/test/oobe_window_visibility_waiter.h"
 #include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/ash/login/ui/webui_login_view.h"
@@ -281,13 +282,7 @@
   EXPECT_TRUE(LoginScreenTestApi::IsGuestButtonShown());
 }
 
-// TODO(https://crbug.com/1337714): Flaky.
-#if BUILDFLAG(IS_CHROMEOS)
-#define MAYBE_RestartBeforePowerwash DISABLED_RestartBeforePowerwash
-#else
-#define MAYBE_RestartBeforePowerwash RestartBeforePowerwash
-#endif
-IN_PROC_BROWSER_TEST_F(ResetTest, MAYBE_RestartBeforePowerwash) {
+IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) {
   EXPECT_TRUE(LoginScreenTestApi::IsGuestButtonShown());
   PrefService* prefs = g_browser_process->local_state();
 
@@ -295,7 +290,11 @@
 
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
-  ClickRestartButton();
+
+  // Clicking on the button to restart can be flaky if a synchronous call is
+  // used because the WebUI can be destroyed before it returns.
+  test::TapOnPathAndWaitForOobeToBeDestroyed({kResetScreen, kRestartButton});
+
   ASSERT_EQ(1, FakePowerManagerClient::Get()->num_request_restart_calls());
   ASSERT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
 
diff --git a/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc b/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc
index a97587e..014eaa6 100644
--- a/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc
+++ b/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc
@@ -113,14 +113,7 @@
   EXPECT_FALSE(Notification().has_value());
 }
 
-// Timing out on ASan LSan: http://crbug.com/1306035.
-// Timing out on debug bot: http://crbug.com/1322461
-#if (defined(ADDRESS_SANITIZER) && defined(LEAK_SANITIZER)) || !defined(NDEBUG)
-#define MAYBE_MaybeShow_WillNotExpire DISABLED_MaybeShow_WillNotExpire
-#else
-#define MAYBE_MaybeShow_WillNotExpire MaybeShow_WillNotExpire
-#endif
-TEST_F(InSessionPasswordChangeManagerTest, MAYBE_MaybeShow_WillNotExpire) {
+TEST_F(InSessionPasswordChangeManagerTest, MaybeShow_WillNotExpire) {
   SamlPasswordAttributes::DeleteFromPrefs(profile_->GetPrefs());
   manager_->MaybeShowExpiryNotification();
 
@@ -161,16 +154,7 @@
   EXPECT_EQ(utf16("Password expires in 14 days"), Notification()->title());
 }
 
-// Timing out on ASan LSan: http://crbug.com/1306035.
-// Timing out on debug bot: http://crbug.com/1322461
-#if (defined(ADDRESS_SANITIZER) && defined(LEAK_SANITIZER)) || !defined(NDEBUG)
-#define MAYBE_MaybeShow_DeleteExpirationTime \
-  DISABLED_MaybeShow_DeleteExpirationTime
-#else
-#define MAYBE_MaybeShow_DeleteExpirationTime MaybeShow_DeleteExpirationTime
-#endif
-TEST_F(InSessionPasswordChangeManagerTest,
-       MAYBE_MaybeShow_DeleteExpirationTime) {
+TEST_F(InSessionPasswordChangeManagerTest, MaybeShow_DeleteExpirationTime) {
   SetExpirationTime(base::Time::Now() + kOneYear);
   manager_->MaybeShowExpiryNotification();
 
@@ -183,14 +167,7 @@
   EXPECT_FALSE(Notification().has_value());
 }
 
-// Timing out on ASan LSan: http://crbug.com/1306035.
-// Timing out on debug bot: http://crbug.com/1322461
-#if (defined(ADDRESS_SANITIZER) && defined(LEAK_SANITIZER)) || !defined(NDEBUG)
-#define MAYBE_MaybeShow_PasswordChanged DISABLED_MaybeShow_PasswordChanged
-#else
-#define MAYBE_MaybeShow_PasswordChanged MaybeShow_PasswordChanged
-#endif
-TEST_F(InSessionPasswordChangeManagerTest, MAYBE_MaybeShow_PasswordChanged) {
+TEST_F(InSessionPasswordChangeManagerTest, MaybeShow_PasswordChanged) {
   SetExpirationTime(base::Time::Now() + (kAdvanceWarningTime / 2) - kOneHour);
   manager_->MaybeShowExpiryNotification();
 
diff --git a/chrome/browser/autofill/autofill_context_menu_manager.cc b/chrome/browser/autofill/autofill_context_menu_manager.cc
index 73dd000a..9a90cfad 100644
--- a/chrome/browser/autofill/autofill_context_menu_manager.cc
+++ b/chrome/browser/autofill/autofill_context_menu_manager.cc
@@ -115,15 +115,24 @@
     CommandId command_id,
     content::RenderFrameHost* render_frame_host,
     const content::ContextMenuParams& params) {
-  auto it = command_id_to_menu_item_value_mapper_.find(command_id);
-  if (it == command_id_to_menu_item_value_mapper_.end())
-    return;
-
   ContentAutofillDriver* driver =
       ContentAutofillDriver::GetForRenderFrameHost(render_frame_host);
   if (!driver)
     return;
 
+  ExecuteCommand(command_id, driver, params,
+                 render_frame_host->GetFrameToken());
+}
+
+void AutofillContextMenuManager::ExecuteCommand(
+    CommandId command_id,
+    ContentAutofillDriver* driver,
+    const content::ContextMenuParams& params,
+    const blink::LocalFrameToken local_frame_token) {
+  auto it = command_id_to_menu_item_value_mapper_.find(command_id);
+  if (it == command_id_to_menu_item_value_mapper_.end())
+    return;
+
   DCHECK(IsAutofillCustomCommandId(command_id));
 
   // Field Renderer id should be present because the context menu is triggered
@@ -153,7 +162,7 @@
   }
 
   driver->RendererShouldFillFieldWithValue(
-      {LocalFrameToken(render_frame_host->GetFrameToken().value()),
+      {LocalFrameToken(local_frame_token.value()),
        FieldRendererId(params.field_renderer_id.value())},
       it->second.fill_value);
 
diff --git a/chrome/browser/autofill/autofill_context_menu_manager.h b/chrome/browser/autofill/autofill_context_menu_manager.h
index f5790a90..3d269be 100644
--- a/chrome/browser/autofill/autofill_context_menu_manager.h
+++ b/chrome/browser/autofill/autofill_context_menu_manager.h
@@ -23,6 +23,7 @@
 namespace autofill {
 
 class AutofillProfile;
+class ContentAutofillDriver;
 class CreditCard;
 class PersonalDataManager;
 
@@ -93,6 +94,10 @@
   void ExecuteCommand(CommandId command_id,
                       content::RenderFrameHost* render_frame_host,
                       const content::ContextMenuParams& params);
+  void ExecuteCommand(CommandId command_id,
+                      ContentAutofillDriver* driver,
+                      const content::ContextMenuParams& params,
+                      const blink::LocalFrameToken local_frame_token);
 
 #if defined(UNIT_TEST)
   // Getter for `command_id_to_menu_item_value_mapper_` used for testing
diff --git a/chrome/browser/autofill/autofill_context_menu_manager_unittest.cc b/chrome/browser/autofill/autofill_context_menu_manager_unittest.cc
index e20d2c4..d50edb1 100644
--- a/chrome/browser/autofill/autofill_context_menu_manager_unittest.cc
+++ b/chrome/browser/autofill/autofill_context_menu_manager_unittest.cc
@@ -9,11 +9,42 @@
 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/test_autofill_driver.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/autofill/core/common/autofill_features.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::_;
+
+namespace {
+// Generates a ContextMenuParams for the Autofill context menu options.
+static content::ContextMenuParams CreateContextMenuParams(
+    autofill::FieldRendererId field_render_id) {
+  content::ContextMenuParams rv;
+  rv.is_editable = true;
+  rv.page_url = GURL("http://test.page/");
+  rv.input_field_type = blink::mojom::ContextMenuDataInputFieldType::kPlainText;
+  rv.field_renderer_id = field_render_id.value();
+  return rv;
+}
+}  // namespace
 
 namespace autofill {
 
+class MockAutofillDriver : public TestAutofillDriver {
+ public:
+  MockAutofillDriver() = default;
+  MockAutofillDriver(const MockAutofillDriver&) = delete;
+  MockAutofillDriver& operator=(const MockAutofillDriver&) = delete;
+
+  // Mock methods to enable testability.
+  MOCK_METHOD(void,
+              RendererShouldFillFieldWithValue,
+              (const FieldGlobalId& field_id, const std::u16string& value),
+              (override));
+};
+
 class AutofillContextMenuManagerTest : public ChromeRenderViewHostTestHarness {
  public:
   AutofillContextMenuManagerTest() {
@@ -42,6 +73,8 @@
     autofill_context_menu_manager_ =
         std::make_unique<AutofillContextMenuManager>(
             personal_data_manager_.get(), nullptr, menu_model_.get(), nullptr);
+
+    autofill_context_menu_manager_->AppendItems();
   }
 
   void TearDown() override {
@@ -56,17 +89,18 @@
     return autofill_context_menu_manager_.get();
   }
 
+  MockAutofillDriver* autofill_driver() { return &autofill_driver_; }
+
  private:
   std::unique_ptr<TestPersonalDataManager> personal_data_manager_;
   std::unique_ptr<ui::SimpleMenuModel> menu_model_;
   std::unique_ptr<AutofillContextMenuManager> autofill_context_menu_manager_;
+  MockAutofillDriver autofill_driver_;
   base::test::ScopedFeatureList feature_;
 };
 
 // Tests that the Autofill context menu is correctly set up.
 TEST_F(AutofillContextMenuManagerTest, AutofillContextMenuContents) {
-  autofill_context_menu_manager()->AppendItems();
-
   std::vector<std::u16string> all_added_strings;
 
   // Check for top level menu with autofill options.
@@ -139,4 +173,33 @@
   }));
 }
 
+// For all the command ids that are used to set up the context menu, initiating
+// filling for each one of them results in the call to
+// `RendererShouldFillFieldWithValue`.
+TEST_F(AutofillContextMenuManagerTest, ExecuteCommand) {
+  auto mapper = autofill_context_menu_manager()
+                    ->command_id_to_menu_item_value_mapper_for_testing();
+
+  int incremental_field_renderer_id = 0;
+
+  for (auto const& [command_id, map_value] : mapper) {
+    // Requires a browser instance which is not available in this test.
+    if (map_value.is_manage_item)
+      continue;
+    SCOPED_TRACE(testing::Message() << "Command " << *command_id);
+
+    FieldRendererId field_renderer_id(++incremental_field_renderer_id);
+    FieldGlobalId field_global_id{
+        LocalFrameToken(main_rfh()->GetFrameToken().value()),
+        field_renderer_id};
+
+    EXPECT_CALL(*autofill_driver(), RendererShouldFillFieldWithValue(
+                                        field_global_id, map_value.fill_value));
+    autofill_context_menu_manager()->ExecuteCommand(
+        command_id, autofill_driver(),
+        CreateContextMenuParams(field_renderer_id),
+        main_rfh()->GetFrameToken());
+  }
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/autofill_assistant/password_change/OWNERS b/chrome/browser/autofill_assistant/password_change/OWNERS
index 0472f1f0..ee373ae 100644
--- a/chrome/browser/autofill_assistant/password_change/OWNERS
+++ b/chrome/browser/autofill_assistant/password_change/OWNERS
@@ -1,2 +1 @@
-jkeitel@google.com
-vizcay@google.com
+file://components/autofill_assistant/browser/public/password_change/OWNERS
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc
index 1f63711b..6913dce 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc
+++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc
@@ -12,13 +12,13 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/assistant_display_delegate.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill_assistant/browser/public/external_action.pb.h"
 #include "components/autofill_assistant/browser/public/external_action_delegate.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h
index 50d2a12..5610bc7 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h
+++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h
@@ -8,10 +8,10 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h"
 #include "components/autofill_assistant/browser/public/external_action.pb.h"
 #include "components/autofill_assistant/browser/public/external_action_delegate.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 class PasswordChangeRunDisplay;
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc
index 6750e55..bde5c27c 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc
+++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc
@@ -11,12 +11,12 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/mock_callback.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/mock_assistant_display_delegate.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_display.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill_assistant/browser/public/external_action.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/autofill_assistant/password_change/proto/BUILD.gn b/chrome/browser/autofill_assistant/password_change/proto/BUILD.gn
deleted file mode 100644
index b5e8895..0000000
--- a/chrome/browser/autofill_assistant/password_change/proto/BUILD.gn
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2022 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//third_party/protobuf/proto_library.gni")
-
-proto_library("proto") {
-  proto_in_dir = "//"
-  sources = [ "extensions.proto" ]
-  link_deps = [ "//components/autofill_assistant/browser/public:proto" ]
-}
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn b/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
index 75202463..876cc1d 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
+++ b/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
@@ -80,12 +80,11 @@
     ":api",
     ":fake_hardware_info_delegate",
     "//ash/webui/telemetry_extension_ui/services:telemetry_services",
+    "//ash/webui/telemetry_extension_ui/services:telemetry_services_test",
     "//base",
     "//chrome/browser/ash/wilco_dtc_supportd:mojo_utils",
     "//chrome/common/chromeos/extensions",
     "//chrome/test:test_support",
-    "//chromeos/ash/services/cros_healthd/public/cpp",
-    "//chromeos/ash/services/cros_healthd/public/mojom",
     "//chromeos/dbus",
     "//chromeos/dbus/debug_daemon",
     "//components/user_manager",
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc
index 3874fb73..f28859e 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc
+++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <utility>
 
+#include "ash/webui/telemetry_extension_ui/services/diagnostics_service.h"
 #include "base/bind.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_converters.h"
@@ -18,8 +19,8 @@
 // DiagnosticsApiFunctionBase --------------------------------------------------
 
 DiagnosticsApiFunctionBase::DiagnosticsApiFunctionBase()
-    : diagnostics_service_(
-          remote_diagnostics_service_.BindNewPipeAndPassReceiver()) {}
+    : diagnostics_service_(ash::DiagnosticsService::Factory::Create(
+          remote_diagnostics_service_.BindNewPipeAndPassReceiver())) {}
 DiagnosticsApiFunctionBase::~DiagnosticsApiFunctionBase() = default;
 
 // OsDiagnosticsGetAvailableRoutinesFunction -----------------------------------
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h
index fe3d361..b4fdbf7 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h
+++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_DIAGNOSTICS_API_H_
 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_DIAGNOSTICS_API_H_
 
+#include <memory>
+
 #include "ash/webui/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"
 #include "ash/webui/telemetry_extension_ui/services/diagnostics_service.h"
 #include "chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function.h"
@@ -30,7 +32,7 @@
       remote_diagnostics_service_;
 
  private:
-  DiagnosticsService diagnostics_service_;
+  std::unique_ptr<ash::health::mojom::DiagnosticsService> diagnostics_service_;
 };
 
 class OsDiagnosticsGetAvailableRoutinesFunction
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc
index ac5eb1e..d37cf1f 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc
+++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc
@@ -2,37 +2,66 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/wilco_dtc_supportd/mojo_utils.h"
+#include <memory>
+#include <utility>
+
+#include "ash/webui/telemetry_extension_ui/services/diagnostics_service.h"
+#include "ash/webui/telemetry_extension_ui/services/fake_diagnostics_service.h"
+#include "base/values.h"
 #include "chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.h"
-#include "chromeos/ash/services/cros_healthd/public/cpp/fake_cros_healthd.h"
-#include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_diagnostics.mojom.h"
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace chromeos {
 
-using TelemetryExtensionDiagnosticsApiBrowserTest =
-    BaseTelemetryExtensionBrowserTest;
+class TelemetryExtensionDiagnosticsApiBrowserTest
+    : public BaseTelemetryExtensionBrowserTest {
+ public:
+  TelemetryExtensionDiagnosticsApiBrowserTest() {
+    ash::DiagnosticsService::Factory::SetForTesting(
+        &fake_diagnostics_service_factory_);
+  }
+
+  ~TelemetryExtensionDiagnosticsApiBrowserTest() override = default;
+
+  TelemetryExtensionDiagnosticsApiBrowserTest(
+      const TelemetryExtensionDiagnosticsApiBrowserTest&) = delete;
+  TelemetryExtensionDiagnosticsApiBrowserTest& operator=(
+      const TelemetryExtensionDiagnosticsApiBrowserTest&) = delete;
+
+ protected:
+  void SetServiceForTesting(std::unique_ptr<ash::FakeDiagnosticsService>
+                                fake_diagnostics_service_impl) {
+    fake_diagnostics_service_factory_.SetCreateInstanceResponse(
+        std::move(fake_diagnostics_service_impl));
+  }
+
+  ash::FakeDiagnosticsService::Factory fake_diagnostics_service_factory_;
+};
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        GetAvailableRoutinesSuccess) {
-  cros_healthd::FakeCrosHealthd::Get()->SetAvailableRoutinesForTesting({
-      cros_healthd::mojom::DiagnosticRoutineEnum::kAcPower,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCapacity,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCharge,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryDischarge,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kCpuCache,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kPrimeSearch,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kDiskRead,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kLanConnectivity,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kMemory,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeWearLevel,
-      cros_healthd::mojom::DiagnosticRoutineEnum::kSmartctlCheck,
-  });
+  {
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetAvailableRoutines({
+        ash::health::mojom::DiagnosticRoutineEnum::kAcPower,
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryCapacity,
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryCharge,
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryDischarge,
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryHealth,
+        ash::health::mojom::DiagnosticRoutineEnum::kCpuCache,
+        ash::health::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy,
+        ash::health::mojom::DiagnosticRoutineEnum::kPrimeSearch,
+        ash::health::mojom::DiagnosticRoutineEnum::kCpuStress,
+        ash::health::mojom::DiagnosticRoutineEnum::kDiskRead,
+        ash::health::mojom::DiagnosticRoutineEnum::kLanConnectivity,
+        ash::health::mojom::DiagnosticRoutineEnum::kMemory,
+        ash::health::mojom::DiagnosticRoutineEnum::kNvmeWearLevel,
+        ash::health::mojom::DiagnosticRoutineEnum::kSmartctlCheck,
+    });
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
 
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
@@ -66,24 +95,40 @@
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        GetRoutineUpdateNonInteractiveSuccess) {
-  // Configure FakeCrosHealthd to return noninteractive response for
-  // GetRoutineUpdate().
-  auto nonInteractiveRoutineUpdate =
-      cros_healthd::mojom::NonInteractiveRoutineUpdate::New();
-  nonInteractiveRoutineUpdate->status =
-      cros_healthd::mojom::DiagnosticRoutineStatusEnum::kReady;
-  nonInteractiveRoutineUpdate->status_message = "Routine ran by Google.";
+  // Configure FakeDiagnosticsService.
+  {
+    auto nonInteractiveRoutineUpdate =
+        ash::health::mojom::NonInteractiveRoutineUpdate::New();
+    nonInteractiveRoutineUpdate->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+    nonInteractiveRoutineUpdate->status_message = "Routine ran by Google.";
 
-  auto routineUpdateUnion =
-      cros_healthd::mojom::RoutineUpdateUnion::NewNoninteractiveUpdate(
-          std::move(nonInteractiveRoutineUpdate));
+    auto routineUpdateUnion =
+        ash::health::mojom::RoutineUpdateUnion::NewNoninteractiveUpdate(
+            std::move(nonInteractiveRoutineUpdate));
 
-  auto response = cros_healthd::mojom::RoutineUpdate::New();
-  response->progress_percent = 87;
-  response->routine_update_union = std::move(routineUpdateUnion);
+    auto response = ash::health::mojom::RoutineUpdate::New();
+    response->progress_percent = 87;
+    response->routine_update_union = std::move(routineUpdateUnion);
 
-  cros_healthd::FakeCrosHealthd::Get()->SetGetRoutineUpdateResponseForTesting(
-      response);
+    // Set the return value for a call to GetAvailableRoutines.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRoutineUpdateResponse(std::move(response));
+
+    // Set the expected passed parameters.
+    base::Value::Dict expected_result;
+
+    expected_result.Set("id", 123456);
+    expected_result.Set(
+        "command",
+        static_cast<int32_t>(
+            ash::health::mojom::DiagnosticRoutineCommandEnum::kGetStatus));
+    expected_result.Set("include_output", true);
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
 
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
@@ -106,39 +151,43 @@
       }
     ]);
   )");
-
-  // Verify that CrosHealthd is called with the correct parameters.
-  absl::optional<cros_healthd::FakeCrosHealthd::RoutineUpdateParams>
-      update_params =
-          cros_healthd::FakeCrosHealthd::Get()->GetRoutineUpdateParams();
-
-  ASSERT_TRUE(update_params.has_value());
-  EXPECT_EQ(123456, update_params->id);
-  EXPECT_EQ(cros_healthd::mojom::DiagnosticRoutineCommandEnum::kGetStatus,
-            update_params->command);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        GetRoutineUpdateInteractiveSuccess) {
-  // Configure FakeCrosHealthd to return interactive response for
-  // GetRoutineUpdate().
-  auto interactiveRoutineUpdate =
-      cros_healthd::mojom::InteractiveRoutineUpdate::New();
-  interactiveRoutineUpdate->user_message =
-      cros_healthd::mojom::DiagnosticRoutineUserMessageEnum::kUnplugACPower;
+  // Configure FakeDiagnosticsService.
+  {
+    auto interactiveRoutineUpdate =
+        ash::health::mojom::InteractiveRoutineUpdate::New();
+    interactiveRoutineUpdate->user_message =
+        ash::health::mojom::DiagnosticRoutineUserMessageEnum::kUnplugACPower;
 
-  auto routineUpdateUnion =
-      cros_healthd::mojom::RoutineUpdateUnion::NewInteractiveUpdate(
-          std::move(interactiveRoutineUpdate));
+    auto routineUpdateUnion =
+        ash::health::mojom::RoutineUpdateUnion::NewInteractiveUpdate(
+            std::move(interactiveRoutineUpdate));
 
-  auto response = cros_healthd::mojom::RoutineUpdate::New();
-  response->progress_percent = 50;
-  response->output = ash::MojoUtils::CreateReadOnlySharedMemoryMojoHandle(
-      "routine is running...");
-  response->routine_update_union = std::move(routineUpdateUnion);
+    auto response = ash::health::mojom::RoutineUpdate::New();
+    response->progress_percent = 50;
+    response->output = "routine is running...";
+    response->routine_update_union = std::move(routineUpdateUnion);
 
-  cros_healthd::FakeCrosHealthd::Get()->SetGetRoutineUpdateResponseForTesting(
-      response);
+    // Set the return value for a call to GetAvailableRoutines.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRoutineUpdateResponse(std::move(response));
+
+    // Set the expected passed parameters.
+    base::Value::Dict expected_result;
+    expected_result.Set("id", 654321);
+    expected_result.Set(
+        "command",
+        static_cast<int32_t>(
+            ash::health::mojom::DiagnosticRoutineCommandEnum::kRemove));
+    expected_result.Set("include_output", true);
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
 
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
@@ -163,20 +212,36 @@
       }
     ]);
   )");
-
-  // Verify that CrosHealthd is called with the correct parameters.
-  absl::optional<cros_healthd::FakeCrosHealthd::RoutineUpdateParams>
-      update_params =
-          cros_healthd::FakeCrosHealthd::Get()->GetRoutineUpdateParams();
-
-  ASSERT_TRUE(update_params.has_value());
-  EXPECT_EQ(654321, update_params->id);
-  EXPECT_EQ(cros_healthd::mojom::DiagnosticRoutineCommandEnum::kRemove,
-            update_params->command);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunAcPowerRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunAcPowerRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("expected_status",
+                        static_cast<int32_t>(
+                            ash::health::mojom::AcPowerStatusEnum::kConnected));
+    expected_result.Set("expected_power_type", "ac_power");
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kAcPower);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runAcPowerRoutine() {
@@ -192,12 +257,28 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kAcPower);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunBatteryCapacityRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunBatteryCapacityRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    // Set the expected called routine.
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryCapacity);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runBatteryCapacityRoutine() {
@@ -208,12 +289,34 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCapacity);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunBatteryChargeRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunBatteryChargeRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("length_seconds", 1000);
+    expected_result.Set("minimum_charge_percent_required", 1);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryCharge);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runBatteryChargeRoutine() {
@@ -229,12 +332,34 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCharge);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunBatteryDischargeRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunBatteryDischargeRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("length_seconds", 10);
+    expected_result.Set("maximum_discharge_percent_allowed", 15);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryDischarge);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runBatteryDischargeRoutine() {
@@ -250,12 +375,28 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryDischarge);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunBatteryHealthRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunBatteryHealthRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    // Set the expected called routine.
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kBatteryHealth);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runBatteryHealthRoutine() {
@@ -266,12 +407,33 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunCpuCacheRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunCpuCacheRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("length_seconds", 120);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kCpuCache);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runCpuCacheRoutine() {
@@ -286,12 +448,33 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kCpuCache);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunCpuFloatingPointAccuracyRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunCpuFloatingPointAccuracyRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("length_seconds", 120);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runCpuFloatingPointAccuracyRoutine() {
@@ -306,12 +489,33 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunCpuPrimeSearchRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunCpuPrimeSearchRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("length_seconds", 120);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kPrimeSearch);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runCpuPrimeSearchRoutine() {
@@ -326,12 +530,33 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kPrimeSearch);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunCpuStressRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunCpuStressRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("length_seconds", 120);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kCpuStress);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runCpuStressRoutine() {
@@ -346,12 +571,37 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunDiskReadRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunDiskReadRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set(
+        "type", static_cast<int32_t>(
+                    ash::health::mojom::DiskReadRoutineTypeEnum::kLinearRead));
+    expected_result.Set("length_seconds", 20);
+    expected_result.Set("file_size_mb", 1000);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kDiskRead);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runDiskReadRoutine() {
@@ -368,12 +618,28 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kDiskRead);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunLanConnectivityRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunLanConnectivityRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    // Set the expected called routine.
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kLanConnectivity);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runLanConnectivityRoutine() {
@@ -384,12 +650,28 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kLanConnectivity);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunMemoryRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunMemoryRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    // Set the expected called routine.
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kMemory);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runMemoryRoutine() {
@@ -400,12 +682,33 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kMemory);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunNvmeWearLevelRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunNvmeWearLevelRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    base::Value::Dict expected_result;
+    expected_result.Set("wear_level_threshold", 80);
+
+    // Set the expected runtime actions.
+    fake_service_impl->SetExpectedLastPassedParameters(
+        std::move(expected_result));
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kNvmeWearLevel);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runNvmeWearLevelRoutine() {
@@ -420,12 +723,28 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeWearLevel);
 }
 
 IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest,
                        RunSmartctlCheckRoutineSuccess) {
+  // Configure FakeDiagnosticsService.
+  {
+    auto expected_response = ash::health::mojom::RunRoutineResponse::New();
+    expected_response->id = 0;
+    expected_response->status =
+        ash::health::mojom::DiagnosticRoutineStatusEnum::kReady;
+
+    // Set the return value for a call to RunSmartctlCheckRoutine.
+    auto fake_service_impl = std::make_unique<ash::FakeDiagnosticsService>();
+    fake_service_impl->SetRunRoutineResponse(std::move(expected_response));
+
+    // Set the expected called routine.
+    fake_service_impl->SetExpectedLastCalledRoutine(
+        ash::health::mojom::DiagnosticRoutineEnum::kSmartctlCheck);
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
   CreateExtensionAndRunServiceWorker(R"(
     chrome.test.runTests([
       async function runSmartctlCheckRoutine() {
@@ -436,8 +755,6 @@
       }
     ]);
   )");
-  EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
-            cros_healthd::mojom::DiagnosticRoutineEnum::kSmartctlCheck);
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/device_api/managed_configuration_api.cc b/chrome/browser/device_api/managed_configuration_api.cc
index 6d0e1c4..dc932bc 100644
--- a/chrome/browser/device_api/managed_configuration_api.cc
+++ b/chrome/browser/device_api/managed_configuration_api.cc
@@ -26,6 +26,7 @@
 #include "extensions/browser/extension_file_task_runner.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/cpp/simple_url_loader.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/origin.h"
 
 namespace {
@@ -143,13 +144,13 @@
 void ManagedConfigurationAPI::GetOriginPolicyConfiguration(
     const url::Origin& origin,
     const std::vector<std::string>& keys,
-    base::OnceCallback<void(std::unique_ptr<base::DictionaryValue>)> callback) {
+    base::OnceCallback<void(absl::optional<base::Value::Dict>)> callback) {
   if (!CanHaveManagedStore(origin)) {
-    return std::move(callback).Run(nullptr);
+    return std::move(callback).Run(absl::nullopt);
   }
 
   if (!base::Contains(store_map_, origin))
-    return std::move(callback).Run(nullptr);
+    return std::move(callback).Run(absl::nullopt);
 
   store_map_[origin]
       .AsyncCall(&ManagedConfigurationStore::Get)
diff --git a/chrome/browser/device_api/managed_configuration_api.h b/chrome/browser/device_api/managed_configuration_api.h
index 06445aa..88d332b 100644
--- a/chrome/browser/device_api/managed_configuration_api.h
+++ b/chrome/browser/device_api/managed_configuration_api.h
@@ -14,6 +14,7 @@
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/origin.h"
 
 class Profile;
@@ -48,8 +49,7 @@
   void GetOriginPolicyConfiguration(
       const url::Origin& origin,
       const std::vector<std::string>& keys,
-      base::OnceCallback<void(std::unique_ptr<base::DictionaryValue>)>
-          callback);
+      base::OnceCallback<void(absl::optional<base::Value::Dict>)> callback);
 
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
diff --git a/chrome/browser/device_api/managed_configuration_api_browsertest.cc b/chrome/browser/device_api/managed_configuration_api_browsertest.cc
index b4e9b52..65c183b 100644
--- a/chrome/browser/device_api/managed_configuration_api_browsertest.cc
+++ b/chrome/browser/device_api/managed_configuration_api_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/device_api/managed_configuration_api.h"
 
+#include "base/check.h"
 #include "base/containers/contains.h"
 #include "base/test/test_future.h"
 #include "base/values.h"
@@ -91,10 +92,11 @@
   return http_response;
 }
 
-bool DictValueEquals(std::unique_ptr<base::DictionaryValue> value,
+bool DictValueEquals(absl::optional<base::Value::Dict> value,
                      std::map<std::string, std::string> expected) {
+  DCHECK(value);
   std::map<std::string, std::string> actual;
-  for (auto entry : value->DictItems()) {
+  for (auto entry : *value) {
     if (!entry.second.is_string())
       return false;
     actual.insert({entry.first, entry.second.GetString()});
@@ -130,9 +132,9 @@
                                base::ListValue());
   }
 
-  std::unique_ptr<base::DictionaryValue> GetValues(
+  absl::optional<base::Value::Dict> GetValues(
       const std::vector<std::string>& keys) {
-    base::test::TestFuture<std::unique_ptr<base::DictionaryValue>> value_future;
+    base::test::TestFuture<absl::optional<base::Value::Dict>> value_future;
     api()->GetOriginPolicyConfiguration(origin_, keys,
                                         value_future.GetCallback());
     return value_future.Take();
@@ -218,7 +220,7 @@
 
   ClearConfiguration();
   WaitForUpdate();
-  ASSERT_EQ(GetValues({kKey1, kKey2}), nullptr);
+  ASSERT_EQ(GetValues({kKey1, kKey2}), absl::nullopt);
 }
 
 IN_PROC_BROWSER_TEST_F(ManagedConfigurationAPITest, UnknownKeys) {
diff --git a/chrome/browser/device_api/managed_configuration_service.cc b/chrome/browser/device_api/managed_configuration_service.cc
index 55bcc0e..44219be7 100644
--- a/chrome/browser/device_api/managed_configuration_service.cc
+++ b/chrome/browser/device_api/managed_configuration_service.cc
@@ -52,11 +52,11 @@
       origin(), keys,
       base::BindOnce(
           [](GetManagedConfigurationCallback callback,
-             std::unique_ptr<base::DictionaryValue> result) {
+             absl::optional<base::Value::Dict> result) {
             if (!result)
               return std::move(callback).Run(absl::nullopt);
             std::move(callback).Run(base::MakeFlatMap<std::string, std::string>(
-                result->DictItems(), {},
+                *result, {},
                 [](const auto& it) -> std::pair<std::string, std::string> {
                   return {it.first, it.second.GetString()};
                 }));
diff --git a/chrome/browser/device_api/managed_configuration_store.cc b/chrome/browser/device_api/managed_configuration_store.cc
index 6ff2a310..b6dad5e 100644
--- a/chrome/browser/device_api/managed_configuration_store.cc
+++ b/chrome/browser/device_api/managed_configuration_store.cc
@@ -23,7 +23,7 @@
   if (!store_)
     Initialize();
   // Get the previous policies stored in the database.
-  base::DictionaryValue previous_policy;
+  base::Value::Dict previous_policy;
   value_store::ValueStore::ReadResult read_result = store_->Get();
   if (!read_result.status().ok()) {
     LOG(WARNING) << "Failed to read managed configuration for origin "
@@ -31,13 +31,13 @@
     // Leave |previous_policy| empty, so that events are generated for every
     // policy in |current_policy|.
   } else {
-    read_result.settings().Swap(&previous_policy);
+    std::swap(read_result.settings(), previous_policy);
   }
 
   std::vector<std::string> removed_keys;
 
   bool store_updated = false;
-  for (auto kv : previous_policy.DictItems()) {
+  for (auto kv : previous_policy) {
     if (!current_configuration.FindKey(kv.first))
       removed_keys.push_back(kv.first);
   }
@@ -61,7 +61,7 @@
   return store_updated;
 }
 
-std::unique_ptr<base::DictionaryValue> ManagedConfigurationStore::Get(
+absl::optional<base::Value::Dict> ManagedConfigurationStore::Get(
     const std::vector<std::string>& keys) {
   if (!store_)
     Initialize();
@@ -69,7 +69,7 @@
   auto result = store_->Get(keys);
 
   if (!result.status().ok())
-    return nullptr;
+    return absl::nullopt;
 
   return result.PassSettings();
 }
diff --git a/chrome/browser/device_api/managed_configuration_store.h b/chrome/browser/device_api/managed_configuration_store.h
index c156c8756..e2a2ad4 100644
--- a/chrome/browser/device_api/managed_configuration_store.h
+++ b/chrome/browser/device_api/managed_configuration_store.h
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/values.h"
 #include "components/value_store/leveldb_value_store.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/origin.h"
 
 // Class responsible for internal storage of the managed configuration.
@@ -25,8 +26,7 @@
   // Returns |true| if the new policy is different from the previously set
   // policy.
   bool SetCurrentPolicy(const base::DictionaryValue& current_configuration);
-  std::unique_ptr<base::DictionaryValue> Get(
-      const std::vector<std::string>& keys);
+  absl::optional<base::Value::Dict> Get(const std::vector<std::string>& keys);
 
  private:
   // Initializes connection to the database.
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
index ac2aabb..bae6384 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
@@ -5,6 +5,8 @@
 #include <memory>
 #include <utility>
 
+#include "ash/components/cryptohome/cryptohome_parameters.h"
+#include "ash/constants/ash_switches.h"
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
@@ -18,6 +20,23 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/api/networking_private/networking_private_ui_delegate_chromeos.h"
 #include "chrome/browser/extensions/extension_apitest.h"
+#include "chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h"
+#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
+#include "chromeos/ash/components/network/cellular_metrics_logger.h"
+#include "chromeos/ash/components/network/managed_network_configuration_handler.h"
+#include "chromeos/ash/components/network/network_certificate_handler.h"
+#include "chromeos/ash/components/network/network_handler_test_helper.h"
+#include "chromeos/ash/components/network/onc/network_onc_utils.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/shill/shill_device_client.h"
+#include "chromeos/dbus/shill/shill_ipconfig_client.h"
+#include "chromeos/dbus/shill/shill_manager_client.h"
+#include "chromeos/dbus/shill/shill_profile_client.h"
+#include "chromeos/dbus/shill/shill_service_client.h"
+#include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_state.h"
+#include "chromeos/network/network_state_handler.h"
+#include "chromeos/network/network_type_pattern.h"
 #include "components/onc/onc_constants.h"
 #include "components/onc/onc_pref_names.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
@@ -36,44 +55,16 @@
 #include "components/user_manager/user_names.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/test_utils.h"
+#include "dbus/object_path.h"
 #include "extensions/browser/api/networking_private/networking_private_chromeos.h"
 #include "extensions/browser/api/networking_private/networking_private_delegate_factory.h"
 #include "extensions/common/switches.h"
 #include "extensions/common/value_builder.h"
 #include "extensions/test/extension_test_message_listener.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "ash/components/cryptohome/cryptohome_parameters.h"
-#include "ash/constants/ash_switches.h"
-#include "chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h"
-#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
-#include "chromeos/ash/components/network/cellular_metrics_logger.h"
-#include "chromeos/ash/components/network/managed_network_configuration_handler.h"
-#include "chromeos/ash/components/network/network_certificate_handler.h"
-#include "chromeos/ash/components/network/network_handler_test_helper.h"
-#include "chromeos/ash/components/network/onc/network_onc_utils.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/shill/shill_device_client.h"
-#include "chromeos/dbus/shill/shill_ipconfig_client.h"
-#include "chromeos/dbus/shill/shill_manager_client.h"
-#include "chromeos/dbus/shill/shill_profile_client.h"
-#include "chromeos/dbus/shill/shill_service_client.h"
-#include "chromeos/network/network_handler.h"
-#include "chromeos/network/network_state.h"
-#include "chromeos/network/network_state_handler.h"
-#include "chromeos/network/network_type_pattern.h"
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chromeos/crosapi/mojom/test_controller.mojom-test-utils.h"
-#include "chromeos/crosapi/mojom/test_controller.mojom.h"
-#include "chromeos/lacros/lacros_service.h"
-
-using crosapi::mojom::ShillClientTestInterfaceAsyncWaiter;
-#endif
-
 // This tests the Chrome OS implementation of the networkingPrivate API
 // (NetworkingPrivateChromeOS). Note: The test expectations for chromeos, and
 // win/mac (NetworkingPrivateServiceClient) are different to reflect the
@@ -82,7 +73,6 @@
 using testing::Return;
 using testing::_;
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 using ash::UserDataAuthClient;
 using chromeos::ShillDeviceClient;
 using chromeos::ShillIPConfigClient;
@@ -93,30 +83,41 @@
 using extensions::NetworkingPrivateDelegate;
 using extensions::NetworkingPrivateDelegateFactory;
 using extensions::NetworkingPrivateChromeOS;
-#endif
 
 namespace {
 
-const char kCellular1ServicePath[] = "stub_cellular1";
-const char kCellularDevicePath[] = "/device/stub_cellular_device1";
-const char kEthernetDevicePath[] = "/device/stub_ethernet_device";
-const char kIPConfigPath[] = "/ipconfig/ipconfig1";
 const char kUser1ProfilePath[] = "/profile/user1/shill";
+const char kEthernetDevicePath[] = "/device/stub_ethernet_device";
+const char kWifiDevicePath[] = "/device/stub_wifi_device1";
+const char kCellularDevicePath[] = "/device/stub_cellular_device1";
+const char kIPConfigPath[] = "/ipconfig/ipconfig1";
+
 const char kWifi1ServicePath[] = "stub_wifi1";
 const char kWifi2ServicePath[] = "stub_wifi2";
-const char kWifiDevicePath[] = "/device/stub_wifi_device1";
+const char kCellular1ServicePath[] = "stub_cellular1";
 
-class NetworkingPrivateChromeOSApiTestBase
-    : public extensions::ExtensionApiTest {
+class UIDelegateStub : public NetworkingPrivateDelegate::UIDelegate {
  public:
-  // From extensions::ExtensionApiTest
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    extensions::ExtensionApiTest::SetUpCommandLine(command_line);
-    // Allowlist the extension ID of the test extension.
-    command_line->AppendSwitchASCII(
-        extensions::switches::kAllowlistedExtensionID,
-        "epcifkihnkjgphfkloaaleeakhpmgdmn");
+  static int s_show_account_details_called_;
+
+ private:
+  // UIDelegate
+  void ShowAccountDetails(const std::string& guid) const override {
+    ++s_show_account_details_called_;
   }
+};
+
+// static
+int UIDelegateStub::s_show_account_details_called_ = 0;
+
+class NetworkingPrivateChromeOSApiTest : public extensions::ExtensionApiTest {
+ public:
+  NetworkingPrivateChromeOSApiTest() {}
+
+  NetworkingPrivateChromeOSApiTest(const NetworkingPrivateChromeOSApiTest&) =
+      delete;
+  NetworkingPrivateChromeOSApiTest& operator=(
+      const NetworkingPrivateChromeOSApiTest&) = delete;
 
   bool RunNetworkingSubtest(const std::string& test) {
     const std::string arg =
@@ -126,107 +127,62 @@
         {.custom_arg = arg.c_str(), .launch_as_platform_app = true});
   }
 
-  void ConfigFakeNetwork() {
-    ClearDevices();
-    ClearServices();
+  void SetUpInProcessBrowserTestFixture() override {
+    provider_.SetDefaultReturns(
+        /*is_initialization_complete_return=*/true,
+        /*is_first_policy_load_complete_return=*/true);
+    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
-    std::string userhash = GetSanitizedActiveUsername();
-
-    // Sends a notification about the added profile.
-    AddProfile(kUser1ProfilePath, userhash);
-
-    // Add IPConfigs
-    base::DictionaryValue ipconfig;
-    ipconfig.SetKey(shill::kAddressProperty, base::Value("0.0.0.0"));
-    ipconfig.SetKey(shill::kGatewayProperty, base::Value("0.0.0.1"));
-    ipconfig.SetKey(shill::kPrefixlenProperty, base::Value(0));
-    ipconfig.SetKey(shill::kMethodProperty, base::Value(shill::kTypeIPv4));
-    AddIPConfig(kIPConfigPath, ipconfig);
-
-    // Add Devices
-    AddDevice(kEthernetDevicePath, shill::kTypeEthernet,
-              "stub_ethernet_device1");
-
-    AddDevice(kWifiDevicePath, shill::kTypeWifi, "stub_wifi_device1");
-    base::ListValue wifi_ip_configs;
-    wifi_ip_configs.Append(kIPConfigPath);
-    SetDeviceProperty(kWifiDevicePath, shill::kIPConfigsProperty,
-                      wifi_ip_configs);
-    SetDeviceProperty(kWifiDevicePath, shill::kAddressProperty,
-                      base::Value("001122aabbcc"));
-
-    // Add Services
-    AddService("stub_ethernet", "eth0", shill::kTypeEthernet,
-               shill::kStateOnline);
-    SetServiceProperty("stub_ethernet", shill::kProfileProperty,
-                       base::Value(GetSharedProfilePath()));
-    AddServiceToProfile(GetSharedProfilePath(), "stub_ethernet");
-
-    AddService(kWifi1ServicePath, "wifi1", shill::kTypeWifi,
-               shill::kStateOnline);
-    SetServiceProperty(kWifi1ServicePath, shill::kSecurityClassProperty,
-                       base::Value(shill::kSecurityWep));
-    SetServiceProperty(kWifi1ServicePath, shill::kWifiBSsid,
-                       base::Value("00:01:02:03:04:05"));
-    SetServiceProperty(kWifi1ServicePath, shill::kSignalStrengthProperty,
-                       base::Value(40));
-    SetServiceProperty(kWifi1ServicePath, shill::kProfileProperty,
-                       base::Value(kUser1ProfilePath));
-    SetServiceProperty(kWifi1ServicePath, shill::kConnectableProperty,
-                       base::Value(true));
-    SetServiceProperty(kWifi1ServicePath, shill::kDeviceProperty,
-                       base::Value(kWifiDevicePath));
-    base::DictionaryValue static_ipconfig;
-    static_ipconfig.SetKey(shill::kAddressProperty, base::Value("1.2.3.4"));
-    static_ipconfig.SetKey(shill::kGatewayProperty, base::Value("0.0.0.0"));
-    static_ipconfig.SetKey(shill::kPrefixlenProperty, base::Value(1));
-    SetServiceProperty(kWifi1ServicePath, shill::kStaticIPConfigProperty,
-                       static_ipconfig);
-    base::ListValue frequencies1;
-    frequencies1.Append(2400);
-    SetServiceProperty(kWifi1ServicePath, shill::kWifiFrequencyListProperty,
-                       frequencies1);
-    SetServiceProperty(kWifi1ServicePath, shill::kWifiFrequency,
-                       base::Value(2400));
-    AddServiceToProfile(kUser1ProfilePath, kWifi1ServicePath);
-
-    AddService(kWifi2ServicePath, "wifi2_PSK", shill::kTypeWifi,
-               shill::kStateIdle);
-    SetServiceProperty(kWifi2ServicePath, shill::kSecurityClassProperty,
-                       base::Value(shill::kSecurityPsk));
-    SetServiceProperty(kWifi2ServicePath, shill::kSignalStrengthProperty,
-                       base::Value(80));
-    SetServiceProperty(kWifi2ServicePath, shill::kConnectableProperty,
-                       base::Value(true));
-
-    base::ListValue frequencies2;
-    frequencies2.Append(2400);
-    frequencies2.Append(5000);
-    SetServiceProperty(kWifi2ServicePath, shill::kWifiFrequencyListProperty,
-                       frequencies2);
-    SetServiceProperty(kWifi2ServicePath, shill::kWifiFrequency,
-                       base::Value(5000));
-    SetServiceProperty(kWifi2ServicePath, shill::kProfileProperty,
-                       base::Value(kUser1ProfilePath));
-    AddServiceToProfile(kUser1ProfilePath, kWifi2ServicePath);
-
-    AddService("stub_vpn1", "vpn1", shill::kTypeVPN, shill::kStateOnline);
-    SetServiceProperty("stub_vpn1", shill::kProviderTypeProperty,
-                       base::Value(shill::kProviderOpenVpn));
-    AddServiceToProfile(kUser1ProfilePath, "stub_vpn1");
-
-    AddService("stub_vpn2", "vpn2", shill::kTypeVPN, shill::kStateOffline);
-    SetServiceProperty("stub_vpn2", shill::kProviderTypeProperty,
-                       base::Value(shill::kProviderThirdPartyVpn));
-    SetServiceProperty("stub_vpn2", shill::kProviderHostProperty,
-                       base::Value("third_party_provider_extension_id"));
-    AddServiceToProfile(kUser1ProfilePath, "stub_vpn2");
+    extensions::ExtensionApiTest::SetUpInProcessBrowserTestFixture();
   }
 
-  virtual void SetupCellular() {
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    extensions::ExtensionApiTest::SetUpCommandLine(command_line);
+    // Allowlist the extension ID of the test extension.
+    command_line->AppendSwitchASCII(
+        extensions::switches::kAllowlistedExtensionID,
+        "epcifkihnkjgphfkloaaleeakhpmgdmn");
+
+    // TODO(pneubeck): Remove the following hack, once the NetworkingPrivateAPI
+    // uses the ProfileHelper to obtain the userhash crbug/238623.
+    cryptohome::AccountIdentifier login_user;
+    login_user.set_account_id(user_manager::CanonicalizeUserID(
+        command_line->GetSwitchValueNative(ash::switches::kLoginUser)));
+    const std::string sanitized_user =
+        UserDataAuthClient::GetStubSanitizedUsername(login_user);
+    command_line->AppendSwitchASCII(ash::switches::kLoginProfile,
+                                    sanitized_user);
+  }
+
+  void InitializeSanitizedUsername() {
+    user_manager::UserManager* user_manager = user_manager::UserManager::Get();
+    user_manager::User* user = user_manager->GetActiveUser();
+    CHECK(user);
+    std::string userhash;
+    ::user_data_auth::GetSanitizedUsernameRequest request;
+    request.set_username(
+        cryptohome::CreateAccountIdentifierFromAccountId(user->GetAccountId())
+            .account_id());
+    ash::CryptohomeMiscClient::Get()->GetSanitizedUsername(
+        request,
+        base::BindOnce(
+            [](std::string* out,
+               absl::optional<::user_data_auth::GetSanitizedUsernameReply>
+                   result) {
+              CHECK(result.has_value());
+              *out = result->sanitized_username();
+            },
+            &userhash_));
+    content::RunAllPendingInMessageLoop();
+    CHECK(!userhash_.empty());
+  }
+
+  void SetupCellular() {
+    UIDelegateStub::s_show_account_details_called_ = 0;
+
     // Add a Cellular GSM Device.
-    AddDevice(kCellularDevicePath, shill::kTypeCellular,
-              "stub_cellular_device1");
+    device_test()->AddDevice(kCellularDevicePath, shill::kTypeCellular,
+                             "stub_cellular_device1");
     base::DictionaryValue home_provider;
     home_provider.SetStringKey("name", "Cellular1_Provider");
     home_provider.SetStringKey("code", "000000");
@@ -249,89 +205,31 @@
                       base::Value("test_min"));
     SetDeviceProperty(kCellularDevicePath, shill::kModelIdProperty,
                       base::Value("test_model_id"));
-    SetSimLocked(kCellularDevicePath, false);
+    device_test()->SetSimLocked(kCellularDevicePath, false);
 
     // Add the Cellular Service.
     AddService(kCellular1ServicePath, "cellular1", shill::kTypeCellular,
                shill::kStateIdle);
-    SetServiceProperty(kCellular1ServicePath,
-                       shill::kCellularAllowRoamingProperty,
-                       base::Value(false));
-    SetServiceProperty(kCellular1ServicePath, shill::kAutoConnectProperty,
-                       base::Value(true));
-    SetServiceProperty(kCellular1ServicePath, shill::kIccidProperty,
-                       base::Value("test_iccid"));
-    SetServiceProperty(kCellular1ServicePath, shill::kNetworkTechnologyProperty,
-                       base::Value(shill::kNetworkTechnologyGsm));
-    SetServiceProperty(kCellular1ServicePath, shill::kActivationStateProperty,
-                       base::Value(shill::kActivationStateNotActivated));
-    SetServiceProperty(kCellular1ServicePath, shill::kRoamingStateProperty,
-                       base::Value(shill::kRoamingStateHome));
+    service_test()->SetServiceProperty(kCellular1ServicePath,
+                                       shill::kCellularAllowRoamingProperty,
+                                       base::Value(false));
+    service_test()->SetServiceProperty(
+        kCellular1ServicePath, shill::kAutoConnectProperty, base::Value(true));
+    service_test()->SetServiceProperty(kCellular1ServicePath,
+                                       shill::kIccidProperty,
+                                       base::Value("test_iccid"));
+    service_test()->SetServiceProperty(
+        kCellular1ServicePath, shill::kNetworkTechnologyProperty,
+        base::Value(shill::kNetworkTechnologyGsm));
+    service_test()->SetServiceProperty(
+        kCellular1ServicePath, shill::kActivationStateProperty,
+        base::Value(shill::kActivationStateNotActivated));
+    service_test()->SetServiceProperty(kCellular1ServicePath,
+                                       shill::kRoamingStateProperty,
+                                       base::Value(shill::kRoamingStateHome));
 
-    AddServiceToProfile(kUser1ProfilePath, kCellular1ServicePath);
-  }
-
-  virtual std::string GetSanitizedActiveUsername() = 0;
-
-  virtual void AddDevice(const std::string& device_path,
-                         const std::string& type,
-                         const std::string& name) = 0;
-  virtual void SetDeviceProperty(const std::string& device_path,
-                                 const std::string& name,
-                                 const base::Value& value) = 0;
-  virtual void SetSimLocked(const std::string& device_path, bool enabled) = 0;
-  virtual void ClearDevices() = 0;
-  virtual void AddService(const std::string& service_path,
-                          const std::string& name,
-                          const std::string& type,
-                          const std::string& state) = 0;
-  virtual void ClearServices() = 0;
-  virtual void SetServiceProperty(const std::string& service_path,
-                                  const std::string& property,
-                                  const base::Value& value) = 0;
-  virtual void AddProfile(const std::string& profile_path,
-                          const std::string& userhash) = 0;
-
-  virtual void AddServiceToProfile(const std::string& profile_path,
-                                   const std::string& service_path) = 0;
-  virtual std::string GetSharedProfilePath() = 0;
-  virtual void AddIPConfig(const std::string& ip_config_path,
-                           const base::Value& properties) = 0;
-};
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-class UIDelegateStub : public NetworkingPrivateDelegate::UIDelegate {
- public:
-  static int s_show_account_details_called_;
-
- private:
-  // UIDelegate
-  void ShowAccountDetails(const std::string& guid) const override {
-    ++s_show_account_details_called_;
-  }
-};
-
-// static
-int UIDelegateStub::s_show_account_details_called_ = 0;
-
-class NetworkingPrivateChromeOSApiTestAsh
-    : public NetworkingPrivateChromeOSApiTestBase {
- public:
-  NetworkingPrivateChromeOSApiTestAsh() = default;
-
-  NetworkingPrivateChromeOSApiTestAsh(
-      const NetworkingPrivateChromeOSApiTestAsh&) = delete;
-  NetworkingPrivateChromeOSApiTestAsh& operator=(
-      const NetworkingPrivateChromeOSApiTestAsh&) = delete;
-
-  static std::unique_ptr<KeyedService> CreateNetworkingPrivateDelegate(
-      content::BrowserContext* context) {
-    std::unique_ptr<NetworkingPrivateDelegate> result(
-        new NetworkingPrivateChromeOS(context));
-    std::unique_ptr<NetworkingPrivateDelegate::UIDelegate> ui_delegate(
-        new UIDelegateStub);
-    result->set_ui_delegate(std::move(ui_delegate));
-    return result;
+    profile_test()->AddService(kUser1ProfilePath, kCellular1ServicePath);
+    content::RunAllPendingInMessageLoop();
   }
 
   void SetupTether() {
@@ -349,6 +247,159 @@
         false /* has_connected_to_host */);
   }
 
+  void AddService(const std::string& service_path,
+                  const std::string& name,
+                  const std::string& type,
+                  const std::string& state) {
+    service_test()->AddService(service_path, service_path + "_guid", name, type,
+                               state, true /* add_to_visible */);
+  }
+
+  void SetDeviceProperty(const std::string& device_path,
+                         const std::string& name,
+                         const base::Value& value) {
+    device_test()->SetDeviceProperty(device_path, name, value,
+                                     /*notify_changed=*/true);
+  }
+
+  static std::unique_ptr<KeyedService> CreateNetworkingPrivateDelegate(
+      content::BrowserContext* context) {
+    std::unique_ptr<NetworkingPrivateDelegate> result(
+        new NetworkingPrivateChromeOS(context));
+    std::unique_ptr<NetworkingPrivateDelegate::UIDelegate> ui_delegate(
+        new UIDelegateStub);
+    result->set_ui_delegate(std::move(ui_delegate));
+    return result;
+  }
+
+  void SetUpOnMainThread() override {
+    extensions::ExtensionApiTest::SetUpOnMainThread();
+    content::RunAllPendingInMessageLoop();
+
+    NetworkingPrivateDelegateFactory::GetInstance()->SetTestingFactory(
+        profile(), base::BindRepeating(&CreateNetworkingPrivateDelegate));
+
+    InitializeSanitizedUsername();
+
+    network_handler_test_helper_ =
+        std::make_unique<chromeos::NetworkHandlerTestHelper>();
+    device_test()->ClearDevices();
+    service_test()->ClearServices();
+
+    // Sends a notification about the added profile.
+    profile_test()->AddProfile(kUser1ProfilePath, userhash_);
+
+    // Add IPConfigs
+    base::DictionaryValue ipconfig;
+    ipconfig.SetKey(shill::kAddressProperty, base::Value("0.0.0.0"));
+    ipconfig.SetKey(shill::kGatewayProperty, base::Value("0.0.0.1"));
+    ipconfig.SetKey(shill::kPrefixlenProperty, base::Value(0));
+    ipconfig.SetKey(shill::kMethodProperty, base::Value(shill::kTypeIPv4));
+    network_handler_test_helper_->ip_config_test()->AddIPConfig(kIPConfigPath,
+                                                                ipconfig);
+
+    // Add Devices
+    device_test()->AddDevice(kEthernetDevicePath, shill::kTypeEthernet,
+                             "stub_ethernet_device1");
+
+    device_test()->AddDevice(kWifiDevicePath, shill::kTypeWifi,
+                             "stub_wifi_device1");
+    base::ListValue wifi_ip_configs;
+    wifi_ip_configs.Append(kIPConfigPath);
+    SetDeviceProperty(kWifiDevicePath, shill::kIPConfigsProperty,
+                      wifi_ip_configs);
+    SetDeviceProperty(kWifiDevicePath, shill::kAddressProperty,
+                      base::Value("001122aabbcc"));
+
+    // Add Services
+    AddService("stub_ethernet", "eth0", shill::kTypeEthernet,
+               shill::kStateOnline);
+    service_test()->SetServiceProperty(
+        "stub_ethernet", shill::kProfileProperty,
+        base::Value(ShillProfileClient::GetSharedProfilePath()));
+    profile_test()->AddService(ShillProfileClient::GetSharedProfilePath(),
+                               "stub_ethernet");
+
+    AddService(kWifi1ServicePath, "wifi1", shill::kTypeWifi,
+               shill::kStateOnline);
+    service_test()->SetServiceProperty(kWifi1ServicePath,
+                                       shill::kSecurityClassProperty,
+                                       base::Value(shill::kSecurityWep));
+    service_test()->SetServiceProperty(kWifi1ServicePath, shill::kWifiBSsid,
+                                       base::Value("00:01:02:03:04:05"));
+    service_test()->SetServiceProperty(
+        kWifi1ServicePath, shill::kSignalStrengthProperty, base::Value(40));
+    service_test()->SetServiceProperty(kWifi1ServicePath,
+                                       shill::kProfileProperty,
+                                       base::Value(kUser1ProfilePath));
+    service_test()->SetServiceProperty(
+        kWifi1ServicePath, shill::kConnectableProperty, base::Value(true));
+    service_test()->SetServiceProperty(kWifi1ServicePath,
+                                       shill::kDeviceProperty,
+                                       base::Value(kWifiDevicePath));
+    base::DictionaryValue static_ipconfig;
+    static_ipconfig.SetKey(shill::kAddressProperty, base::Value("1.2.3.4"));
+    static_ipconfig.SetKey(shill::kGatewayProperty, base::Value("0.0.0.0"));
+    static_ipconfig.SetKey(shill::kPrefixlenProperty, base::Value(1));
+    service_test()->SetServiceProperty(
+        kWifi1ServicePath, shill::kStaticIPConfigProperty, static_ipconfig);
+    base::ListValue frequencies1;
+    frequencies1.Append(2400);
+    service_test()->SetServiceProperty(
+        kWifi1ServicePath, shill::kWifiFrequencyListProperty, frequencies1);
+    service_test()->SetServiceProperty(kWifi1ServicePath, shill::kWifiFrequency,
+                                       base::Value(2400));
+    profile_test()->AddService(kUser1ProfilePath, kWifi1ServicePath);
+
+    AddService(kWifi2ServicePath, "wifi2_PSK", shill::kTypeWifi,
+               shill::kStateIdle);
+    service_test()->SetServiceProperty(kWifi2ServicePath,
+                                       shill::kSecurityClassProperty,
+                                       base::Value(shill::kSecurityPsk));
+    service_test()->SetServiceProperty(
+        kWifi2ServicePath, shill::kSignalStrengthProperty, base::Value(80));
+    service_test()->SetServiceProperty(
+        kWifi2ServicePath, shill::kConnectableProperty, base::Value(true));
+
+    base::ListValue frequencies2;
+    frequencies2.Append(2400);
+    frequencies2.Append(5000);
+    service_test()->SetServiceProperty(
+        kWifi2ServicePath, shill::kWifiFrequencyListProperty, frequencies2);
+    service_test()->SetServiceProperty(kWifi2ServicePath, shill::kWifiFrequency,
+                                       base::Value(5000));
+    service_test()->SetServiceProperty(kWifi2ServicePath,
+                                       shill::kProfileProperty,
+                                       base::Value(kUser1ProfilePath));
+    profile_test()->AddService(kUser1ProfilePath, kWifi2ServicePath);
+
+    AddService("stub_vpn1", "vpn1", shill::kTypeVPN, shill::kStateOnline);
+    service_test()->SetServiceProperty("stub_vpn1",
+                                       shill::kProviderTypeProperty,
+                                       base::Value(shill::kProviderOpenVpn));
+    profile_test()->AddService(kUser1ProfilePath, "stub_vpn1");
+
+    AddService("stub_vpn2", "vpn2", shill::kTypeVPN, shill::kStateOffline);
+    service_test()->SetServiceProperty(
+        "stub_vpn2", shill::kProviderTypeProperty,
+        base::Value(shill::kProviderThirdPartyVpn));
+    service_test()->SetServiceProperty(
+        "stub_vpn2", shill::kProviderHostProperty,
+        base::Value("third_party_provider_extension_id"));
+    profile_test()->AddService(kUser1ProfilePath, "stub_vpn2");
+
+    PrefProxyConfigTrackerImpl::RegisterProfilePrefs(user_prefs_.registry());
+    PrefProxyConfigTrackerImpl::RegisterPrefs(local_state_.registry());
+    network_handler_test_helper_->RegisterPrefs(user_prefs_.registry(),
+                                                local_state_.registry());
+
+    network_handler_test_helper_->InitializePrefs(&user_prefs_, &local_state_);
+
+    content::RunAllPendingInMessageLoop();
+  }
+
+  void TearDownOnMainThread() { network_handler_test_helper_.reset(); }
+
   ShillServiceClient::TestInterface* service_test() {
     return network_handler_test_helper_->service_test();
   }
@@ -362,384 +413,74 @@
     return network_handler_test_helper_->manager_test();
   }
 
-  // extensions::ExtensionApiTest overrides:
-
-  void SetUpInProcessBrowserTestFixture() override {
-    provider_.SetDefaultReturns(
-        /*is_initialization_complete_return=*/true,
-        /*is_first_policy_load_complete_return=*/true);
-    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
-
-    extensions::ExtensionApiTest::SetUpInProcessBrowserTestFixture();
-  }
-
-  void SetUpOnMainThread() override {
-    extensions::ExtensionApiTest::SetUpOnMainThread();
-    content::RunAllPendingInMessageLoop();
-
-    NetworkingPrivateDelegateFactory::GetInstance()->SetTestingFactory(
-        profile(), base::BindRepeating(&CreateNetworkingPrivateDelegate));
-
-    network_handler_test_helper_ =
-        std::make_unique<chromeos::NetworkHandlerTestHelper>();
-
-    ConfigFakeNetwork();
-
-    PrefProxyConfigTrackerImpl::RegisterProfilePrefs(user_prefs_.registry());
-    PrefProxyConfigTrackerImpl::RegisterPrefs(local_state_.registry());
-    network_handler_test_helper_->RegisterPrefs(user_prefs_.registry(),
-                                                local_state_.registry());
-
-    network_handler_test_helper_->InitializePrefs(&user_prefs_, &local_state_);
-
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void TearDownOnMainThread() override { network_handler_test_helper_.reset(); }
-
-  // NetworkingPrivateChromeOSApiTestBase overrides:
-
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    NetworkingPrivateChromeOSApiTestBase::SetUpCommandLine(command_line);
-
-    // TODO(pneubeck): Remove the following hack, once the NetworkingPrivateAPI
-    // uses the ProfileHelper to obtain the userhash crbug/238623.
-    cryptohome::AccountIdentifier login_user;
-    login_user.set_account_id(user_manager::CanonicalizeUserID(
-        command_line->GetSwitchValueNative(ash::switches::kLoginUser)));
-    const std::string sanitized_user =
-        UserDataAuthClient::GetStubSanitizedUsername(login_user);
-    command_line->AppendSwitchASCII(ash::switches::kLoginProfile,
-                                    sanitized_user);
-  }
-
-  std::string GetSanitizedActiveUsername() override {
-    user_manager::UserManager* user_manager = user_manager::UserManager::Get();
-    user_manager::User* user = user_manager->GetActiveUser();
-    CHECK(user);
-    std::string userhash;
-    ::user_data_auth::GetSanitizedUsernameRequest request;
-    request.set_username(
-        cryptohome::CreateAccountIdentifierFromAccountId(user->GetAccountId())
-            .account_id());
-    ash::CryptohomeMiscClient::Get()->GetSanitizedUsername(
-        request,
-        base::BindOnce(
-            [](std::string* out,
-               absl::optional<::user_data_auth::GetSanitizedUsernameReply>
-                   result) {
-              CHECK(result.has_value());
-              *out = result->sanitized_username();
-            },
-            &userhash));
-    base::RunLoop().RunUntilIdle();
-    CHECK(!userhash.empty());
-    return userhash;
-  }
-
-  void SetupCellular() override {
-    UIDelegateStub::s_show_account_details_called_ = 0;
-    NetworkingPrivateChromeOSApiTestBase::SetupCellular();
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void AddDevice(const std::string& device_path,
-                 const std::string& type,
-                 const std::string& name) override {
-    device_test()->AddDevice(device_path, type, name);
-  }
-
-  void ClearDevices() override { device_test()->ClearDevices(); }
-
-  void SetDeviceProperty(const std::string& device_path,
-                         const std::string& name,
-                         const base::Value& value) override {
-    device_test()->SetDeviceProperty(device_path, name, value,
-                                     /*notify_changed=*/true);
-  }
-
-  void SetSimLocked(const std::string& device_path, bool enabled) override {
-    device_test()->SetSimLocked(device_path, enabled);
-  }
-
-  void AddService(const std::string& service_path,
-                  const std::string& name,
-                  const std::string& type,
-                  const std::string& state) override {
-    service_test()->AddService(service_path, service_path + "_guid", name, type,
-                               state, true /* add_to_visible */);
-  }
-
-  void ClearServices() override { service_test()->ClearServices(); }
-
-  void SetServiceProperty(const std::string& service_path,
-                          const std::string& property,
-                          const base::Value& value) override {
-    service_test()->SetServiceProperty(service_path, property, value);
-  }
-
-  void AddIPConfig(const std::string& ip_config_path,
-                   const base::Value& properties) override {
-    network_handler_test_helper_->ip_config_test()->AddIPConfig(ip_config_path,
-                                                                properties);
-  }
-
-  void AddProfile(const std::string& profile_path,
-                  const std::string& userhash) override {
-    profile_test()->AddProfile(profile_path, userhash);
-  }
-
-  void AddServiceToProfile(const std::string& profile_path,
-                           const std::string& service_path) override {
-    profile_test()->AddService(profile_path, service_path);
-  }
-
-  std::string GetSharedProfilePath() override {
-    return ShillProfileClient::GetSharedProfilePath();
-  }
-
  protected:
   std::unique_ptr<chromeos::NetworkHandlerTestHelper>
       network_handler_test_helper_;
   testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   sync_preferences::TestingPrefServiceSyncable user_prefs_;
   TestingPrefServiceSimple local_state_;
+  std::string userhash_;
 };
-#else
-class NetworkingPrivateChromeOSApiTestLacros
-    : public NetworkingPrivateChromeOSApiTestBase {
- public:
-  NetworkingPrivateChromeOSApiTestLacros() {}
-
-  NetworkingPrivateChromeOSApiTestLacros(
-      const NetworkingPrivateChromeOSApiTestLacros&) = delete;
-  NetworkingPrivateChromeOSApiTestLacros& operator=(
-      const NetworkingPrivateChromeOSApiTestLacros&) = delete;
-
-  bool SetUpAsh() {
-    auto* service = chromeos::LacrosService::Get();
-    if (!service->IsAvailable<crosapi::mojom::TestController>() ||
-        service->GetInterfaceVersion(crosapi::mojom::TestController::Uuid_) <
-            static_cast<int>(crosapi::mojom::TestController::MethodMinVersions::
-                                 kBindShillClientTestInterfaceMinVersion)) {
-      LOG(ERROR) << "Unsupported ash version.";
-      return false;
-    }
-    crosapi::mojom::TestControllerAsyncWaiter test_controller_waiter{
-        service->GetRemote<crosapi::mojom::TestController>().get()};
-
-    test_controller_waiter.BindShillClientTestInterface(
-        shill_test_.BindNewPipeAndPassReceiver());
-
-    ConfigFakeNetwork();
-
-    return true;
-  }
-
-  // NetworkingPrivateChromeOSApiTestBase overrides
-
-  std::string GetSanitizedActiveUsername() override {
-    auto* service = chromeos::LacrosService::Get();
-    if (!service->IsAvailable<crosapi::mojom::TestController>() ||
-        service->GetInterfaceVersion(crosapi::mojom::TestController::Uuid_) <
-            static_cast<int>(crosapi::mojom::TestController::MethodMinVersions::
-                                 kGetSanitizedActiveUsernameMinVersion)) {
-      LOG(ERROR) << "Unsupported ash version.";
-      return "";
-    }
-
-    crosapi::mojom::TestControllerAsyncWaiter test_controller_waiter{
-        service->GetRemote<crosapi::mojom::TestController>().get()};
-
-    std::string userhash;
-    test_controller_waiter.GetSanitizedActiveUsername(&userhash);
-    return userhash;
-  }
-
-  void AddDevice(const std::string& device_path,
-                 const std::string& type,
-                 const std::string& name) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .AddDevice(device_path, type, name);
-  }
-
-  void SetDeviceProperty(const std::string& device_path,
-                         const std::string& name,
-                         const base::Value& value) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .SetDeviceProperty(device_path, name, value.Clone(),
-                           /*notify_changed=*/true);
-  }
-
-  void SetSimLocked(const std::string& device_path, bool enabled) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .SetSimLocked(device_path, enabled);
-  }
-
-  void ClearDevices() override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get()).ClearDevices();
-  }
-
-  void AddService(const std::string& service_path,
-                  const std::string& name,
-                  const std::string& type,
-                  const std::string& state) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .AddService(service_path, service_path + "_guid", name, type, state,
-                    true /* add_to_visible */);
-  }
-
-  void ClearServices() override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get()).ClearServices();
-  }
-
-  void SetServiceProperty(const std::string& service_path,
-                          const std::string& property,
-                          const base::Value& value) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .SetServiceProperty(service_path, property, value.Clone());
-  }
-
-  void AddIPConfig(const std::string& ip_config_path,
-                   const base::Value& properties) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .AddIPConfig(ip_config_path, properties.Clone());
-  }
-
-  void AddProfile(const std::string& profile_path,
-                  const std::string& userhash) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .AddProfile(profile_path, userhash);
-  }
-
-  void AddServiceToProfile(const std::string& profile_path,
-                           const std::string& service_path) override {
-    ShillClientTestInterfaceAsyncWaiter(shill_test_.get())
-        .AddServiceToProfile(profile_path, service_path);
-  }
-
-  std::string GetSharedProfilePath() override {
-    // TODO(crbug.com/): get this information from Ash
-    const char kSharedProfilePath[] = "/profile/default";
-    return kSharedProfilePath;
-  }
-
- protected:
-  mojo::Remote<crosapi::mojom::ShillClientTestInterface> shill_test_;
-};
-#endif
-
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-using NetworkingPrivateChromeOSApiTest = NetworkingPrivateChromeOSApiTestLacros;
-#else
-using NetworkingPrivateChromeOSApiTest = NetworkingPrivateChromeOSApiTestAsh;
-#endif
 
 // Place each subtest into a separate browser test so that the stub networking
 // library state is reset for each subtest run. This way they won't affect each
 // other.
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, StartConnect) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("startConnect")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, StartDisconnect) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("startDisconnect")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, StartActivate) {
   SetupCellular();
   EXPECT_TRUE(RunNetworkingSubtest("startActivate")) << message_;
   EXPECT_EQ(1, UIDelegateStub::s_show_account_details_called_);
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        StartConnectNonexistent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("startConnectNonexistent")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        StartDisconnectNonexistent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("startDisconnectNonexistent")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        StartGetPropertiesNonexistent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("startGetPropertiesNonexistent"))
       << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetNetworks) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   // Hide stub_wifi2.
-  SetServiceProperty(kWifi2ServicePath, shill::kVisibleProperty,
-                     base::Value(false));
+  service_test()->SetServiceProperty(kWifi2ServicePath, shill::kVisibleProperty,
+                                     base::Value(false));
   // Add a couple of additional networks that are not configured (saved).
   AddService("stub_wifi3", "wifi3", shill::kTypeWifi, shill::kStateIdle);
   AddService("stub_wifi4", "wifi4", shill::kTypeWifi, shill::kStateIdle);
   content::RunAllPendingInMessageLoop();
-
   EXPECT_TRUE(RunNetworkingSubtest("getNetworks")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetVisibleNetworks) {
   EXPECT_TRUE(RunNetworkingSubtest("getVisibleNetworks")) << message_;
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        GetVisibleNetworksWifi) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("getVisibleNetworksWifi")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, EnabledNetworkTypes) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("enabledNetworkTypesDisable")) << message_;
   EXPECT_TRUE(RunNetworkingSubtest("enabledNetworkTypesEnable")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetDeviceStates) {
   SetupCellular();
   manager_test()->RemoveTechnology("cellular");
@@ -747,24 +488,13 @@
   manager_test()->SetTechnologyInitializing("cellular", true);
   EXPECT_TRUE(RunNetworkingSubtest("getDeviceStates")) << message_;
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, RequestNetworkScan) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("requestNetworkScan")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        RequestNetworkScanCellular) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   SetupCellular();
   EXPECT_TRUE(RunNetworkingSubtest("requestNetworkScanCellular")) << message_;
 }
@@ -772,41 +502,23 @@
 // Properties are filtered and translated through
 // ShillToONCTranslator::TranslateWiFiWithState
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetProperties) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("getProperties")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        GetCellularProperties) {
   SetupCellular();
   EXPECT_TRUE(RunNetworkingSubtest("getPropertiesCellular")) << message_;
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetState) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("getState")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetStateNonExistent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("getStateNonExistent")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        SetCellularProperties) {
   SetupCellular();
@@ -855,18 +567,11 @@
 
   EXPECT_TRUE(RunNetworkingSubtest("createNetworkForPolicyControlledNetwork"));
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, ForgetNetwork) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("forgetNetwork")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        ForgetPolicyControlledNetwork) {
   constexpr char kUserPolicyBlob[] =
@@ -952,63 +657,36 @@
       kWifi1ServicePath, "TestErrorState");
   EXPECT_TRUE(RunNetworkingSubtest("getErrorState")) << message_;
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        OnNetworksChangedEventConnect) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("onNetworksChangedEventConnect"))
       << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        OnNetworksChangedEventDisconnect) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("onNetworksChangedEventDisconnect"))
       << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        OnNetworkListChangedEvent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("onNetworkListChangedEvent")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        OnDeviceStateListChangedEvent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   EXPECT_TRUE(RunNetworkingSubtest("onDeviceStateListChangedEvent"))
       << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        OnDeviceScanningChangedEvent) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   SetupCellular();
   EXPECT_TRUE(RunNetworkingSubtest("onDeviceScanningChangedEvent")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        OnCertificateListsChangedEvent) {
   ExtensionTestMessageListener listener("eventListenerReady");
@@ -1025,10 +703,10 @@
                        GetCaptivePortalStatus) {
   // Ethernet defaults to online. Set wifi1 to idle -> 'Offline', and wifi2 to
   // redirect-found -> 'Portal'.
-  SetServiceProperty(kWifi1ServicePath, shill::kStateProperty,
-                     base::Value(shill::kStateIdle));
-  SetServiceProperty(kWifi2ServicePath, shill::kStateProperty,
-                     base::Value(shill::kStateRedirectFound));
+  service_test()->SetServiceProperty(kWifi1ServicePath, shill::kStateProperty,
+                                     base::Value(shill::kStateIdle));
+  service_test()->SetServiceProperty(kWifi2ServicePath, shill::kStateProperty,
+                                     base::Value(shill::kStateRedirectFound));
   base::RunLoop().RunUntilIdle();
 
   EXPECT_TRUE(RunNetworkingSubtest("getCaptivePortalStatus")) << message_;
@@ -1044,43 +722,28 @@
   ExtensionTestMessageListener listener("notifyPortalDetectorObservers");
   listener.SetOnSatisfied(
       base::BindLambdaForTesting([&](const std::string& message) {
-        SetServiceProperty(kWifi1ServicePath, shill::kStateProperty,
-                           base::Value(shill::kStateRedirectFound));
+        service_test()->SetServiceProperty(
+            kWifi1ServicePath, shill::kStateProperty,
+            base::Value(shill::kStateRedirectFound));
       }));
 
   EXPECT_TRUE(RunNetworkingSubtest("captivePortalNotification")) << message_;
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, UnlockCellularSim) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   SetupCellular();
   // Lock the SIM
-  SetSimLocked(kCellularDevicePath, true);
+  device_test()->SetSimLocked(kCellularDevicePath, true);
   EXPECT_TRUE(RunNetworkingSubtest("unlockCellularSim")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, SetCellularSimState) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   SetupCellular();
   EXPECT_TRUE(RunNetworkingSubtest("setCellularSimState")) << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest,
                        SelectCellularMobileNetwork) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   SetupCellular();
   // Create fake list of found networks.
   std::unique_ptr<base::ListValue> found_networks =
@@ -1102,18 +765,12 @@
 }
 
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, CellularSimPuk) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!SetUpAsh()) {
-    GTEST_SKIP() << "Unsupported ash version.";
-  }
-#endif
   SetupCellular();
   // Lock the SIM
-  SetSimLocked(kCellularDevicePath, true);
+  device_test()->SetSimLocked(kCellularDevicePath, true);
   EXPECT_TRUE(RunNetworkingSubtest("cellularSimPuk")) << message_;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 IN_PROC_BROWSER_TEST_F(NetworkingPrivateChromeOSApiTest, GetGlobalPolicy) {
   base::DictionaryValue global_config;
   global_config.SetKey(
@@ -1174,6 +831,5 @@
                                {.launch_as_platform_app = true}))
       << message_;
 }
-#endif
 
 }  // namespace
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
index 8d7d4c84..f470fa7 100644
--- a/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
+++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
@@ -17,6 +17,7 @@
 #include "base/containers/flat_set.h"
 #include "base/feature_list.h"
 #include "base/memory/ref_counted.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/escape.h"
@@ -42,6 +43,7 @@
 #include "components/password_manager/core/browser/leak_detection/encryption_utils.h"
 #include "components/password_manager/core/browser/password_change_success_tracker.h"
 #include "components/password_manager/core/browser/password_form.h"
+#include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/browser/password_scripts_fetcher.h"
 #include "components/password_manager/core/browser/ui/credential_utils.h"
@@ -69,6 +71,7 @@
 using password_manager::LeakCheckCredential;
 using password_manager::PasswordChangeSuccessTracker;
 using password_manager::PasswordForm;
+using password_manager::metrics_util::PasswordCheckScriptsCacheState;
 using ui::TimeFormat;
 
 using InsecureCredentialsView =
@@ -77,6 +80,9 @@
     password_manager::SavedPasswordsPresenter::SavedPasswordsView;
 using State = password_manager::BulkLeakCheckService::State;
 
+constexpr char kPasswordCheckScriptsCacheStateUmaKey[] =
+    "PasswordManager.BulkCheck.ScriptsCacheState";
+
 std::unique_ptr<std::string> GetChangePasswordUrl(const GURL& url) {
   return std::make_unique<std::string>(
       password_manager::CreateChangePasswordUrl(url).spec());
@@ -411,17 +417,21 @@
   // If automated password change from password check in settings is enabled,
   // we make sure that the cache is warm prior to analyzing passwords.
   is_check_running_ = true;
-  // TODO(crbug.com/1340073): Expose method in PasswordScriptsFetcher that
-  // allows checking cache state. Only run this branch if the cache is stale.
   if (base::FeatureList::IsEnabled(
           password_manager::features::kPasswordChange)) {
-    GetPasswordScriptsFetcher()->RefreshScriptsIfNecessary(
-        base::BindOnce(&PasswordCheckDelegate::OnPasswordScriptsFetched,
-                       weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
-  } else {
-    // Otherwise, call directly.
-    StartPasswordAnalyses(std::move(callback));
+    if (GetPasswordScriptsFetcher()->IsCacheStale()) {
+      // The UMA metric for a stale cache is recorded on callback.
+      GetPasswordScriptsFetcher()->RefreshScriptsIfNecessary(
+          base::BindOnce(&PasswordCheckDelegate::OnPasswordScriptsFetched,
+                         weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+      return;
+    }
+    UMA_HISTOGRAM_ENUMERATION(kPasswordCheckScriptsCacheStateUmaKey,
+                              PasswordCheckScriptsCacheState::kCacheFresh);
   }
+
+  // Otherwise, call directly.
+  StartPasswordAnalyses(std::move(callback));
 }
 
 void PasswordCheckDelegate::OnPasswordScriptsFetched(
@@ -434,7 +444,14 @@
     if (base::ranges::any_of(credentials,
                              &api::passwords_private::InsecureCredential::
                                  has_startable_script)) {
+      UMA_HISTOGRAM_ENUMERATION(
+          kPasswordCheckScriptsCacheStateUmaKey,
+          PasswordCheckScriptsCacheState::kCacheStaleAndUiUpdate);
       event_router->OnCompromisedCredentialsChanged(std::move(credentials));
+    } else {
+      UMA_HISTOGRAM_ENUMERATION(
+          kPasswordCheckScriptsCacheStateUmaKey,
+          PasswordCheckScriptsCacheState::kCacheStaleAndNoUiUpdate);
     }
   }
   StartPasswordAnalyses(std::move(callback));
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
index 75e8251..81c749c 100644
--- a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
+++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_move_support.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
@@ -40,6 +41,7 @@
 #include "components/password_manager/core/browser/mock_password_scripts_fetcher.h"
 #include "components/password_manager/core/browser/password_change_success_tracker.h"
 #include "components/password_manager/core/browser/password_form.h"
+#include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
 #include "components/password_manager/core/browser/test_password_store.h"
 #include "components/password_manager/core/browser/ui/saved_passwords_presenter.h"
@@ -100,6 +102,7 @@
 using password_manager::PasswordForm;
 using password_manager::SavedPasswordsPresenter;
 using password_manager::TestPasswordStore;
+using password_manager::metrics_util::PasswordCheckScriptsCacheState;
 using password_manager::prefs::kLastTimePasswordCheckCompleted;
 using signin::IdentityTestEnvironment;
 using ::testing::AllOf;
@@ -1415,6 +1418,7 @@
 TEST_F(PasswordCheckDelegateTest, HasStartableScript) {
   base::test::ScopedFeatureList feature_list(
       password_manager::features::kPasswordChange);
+  base::HistogramTester histogram_tester;
 
   identity_test_env().MakeAccountAvailable(kTestEmail);
   // Enable password sync.
@@ -1441,6 +1445,9 @@
               UnorderedElementsAre(ExpectCredentialWithScriptInfo(
                   kUsername1, /*has_startable_script=*/false)));
 
+  // Simulate a stale cache.
+  EXPECT_CALL(password_scripts_fetcher(), IsCacheStale).WillOnce(Return(true));
+
   base::OnceClosure refresh_callback;
   EXPECT_CALL(password_scripts_fetcher(), RefreshScriptsIfNecessary)
       .WillOnce(MoveArg<0>(&refresh_callback));
@@ -1474,11 +1481,16 @@
                                kUsername1, /*has_startable_script=*/true),
                            ExpectCredentialWithScriptInfo(
                                kUsername2, /*has_startable_script=*/true)));
+
+  histogram_tester.ExpectUniqueSample(
+      "PasswordManager.BulkCheck.ScriptsCacheState",
+      PasswordCheckScriptsCacheState::kCacheStaleAndUiUpdate, 1);
 }
 
 TEST_F(PasswordCheckDelegateTest, HasStartableScript_SyncDisabled) {
   base::test::ScopedFeatureList feature_list(
       password_manager::features::kPasswordChange);
+  base::HistogramTester histogram_tester;
 
   identity_test_env().MakeAccountAvailable(kTestEmail);
   // Disable password sync.
@@ -1497,12 +1509,15 @@
   EXPECT_THAT(delegate().GetCompromisedCredentials(),
               UnorderedElementsAre(ExpectCredentialWithScriptInfo(
                   kUsername1, /*has_startable_script=*/false)));
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.BulkCheck.ScriptsCacheState", 0u);
 }
 
 TEST_F(PasswordCheckDelegateTest, HasStartableScript_FeatureDisabled) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndDisableFeature(
       password_manager::features::kPasswordChange);
+  base::HistogramTester histogram_tester;
 
   identity_test_env().MakeAccountAvailable(kTestEmail);
   // Enable password sync.
@@ -1521,12 +1536,14 @@
   EXPECT_THAT(delegate().GetCompromisedCredentials(),
               UnorderedElementsAre(ExpectCredentialWithScriptInfo(
                   kUsername1, /*has_startable_script=*/false)));
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.BulkCheck.ScriptsCacheState", 0u);
 }
 
-TEST_F(PasswordCheckDelegateTest,
-       HasStartableScript_CredentialListUpdateAfterScriptsFetched) {
+TEST_F(PasswordCheckDelegateTest, HasStartableScript_CacheFresh) {
   base::test::ScopedFeatureList feature_list(
       password_manager::features::kPasswordChange);
+  base::HistogramTester histogram_tester;
 
   identity_test_env().MakeAccountAvailable(kTestEmail);
   // Enable password sync.
@@ -1539,6 +1556,44 @@
 
   RunUntilIdle();
 
+  EXPECT_CALL(password_scripts_fetcher(), IsCacheStale).WillOnce(Return(false));
+  EXPECT_CALL(password_scripts_fetcher(), RefreshScriptsIfNecessary).Times(0);
+  EXPECT_CALL(password_scripts_fetcher(), IsScriptAvailable)
+      .WillRepeatedly(Return(true));
+
+  delegate().StartPasswordCheck();
+  event_router_observer().ClearEvents();
+
+  RunUntilIdle();
+
+  // Check that no update event was fired.
+  EXPECT_FALSE(base::Contains(
+      event_router_observer().events(),
+      api::passwords_private::OnCompromisedCredentialsChanged::kEventName));
+
+  histogram_tester.ExpectUniqueSample(
+      "PasswordManager.BulkCheck.ScriptsCacheState",
+      PasswordCheckScriptsCacheState::kCacheFresh, 1);
+}
+
+TEST_F(PasswordCheckDelegateTest,
+       HasStartableScript_CredentialListUpdateAfterScriptsFetched) {
+  base::test::ScopedFeatureList feature_list(
+      password_manager::features::kPasswordChange);
+  base::HistogramTester histogram_tester;
+
+  identity_test_env().MakeAccountAvailable(kTestEmail);
+  // Enable password sync.
+  sync_service().SetActiveDataTypes(syncer::ModelTypeSet(syncer::PASSWORDS));
+
+  PasswordForm form1 = MakeSavedPassword(kExampleCom, kUsername1, kPassword1);
+  AddIssueToForm(&form1, InsecureType::kLeaked);
+  store().AddLogin(form1);
+  const url::Origin origin1 = url::Origin::Create(GURL(kExampleCom));
+
+  RunUntilIdle();
+
+  EXPECT_CALL(password_scripts_fetcher(), IsCacheStale).WillOnce(Return(true));
   base::OnceClosure refresh_callback;
   EXPECT_CALL(password_scripts_fetcher(), RefreshScriptsIfNecessary)
       .WillOnce(MoveArg<0>(&refresh_callback));
@@ -1561,6 +1616,9 @@
                 .at(api::passwords_private::OnCompromisedCredentialsChanged::
                         kEventName)
                 ->histogram_value);
+  histogram_tester.ExpectUniqueSample(
+      "PasswordManager.BulkCheck.ScriptsCacheState",
+      PasswordCheckScriptsCacheState::kCacheStaleAndUiUpdate, 1);
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc
index d106c61..9cf94fe 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc
@@ -445,6 +445,35 @@
           GetDelegate(browser_context())->GetPasswordCheckStatus())));
 }
 
+// PasswordsPrivateStartAutomatedPasswordChangeFunction:
+PasswordsPrivateStartAutomatedPasswordChangeFunction::
+    ~PasswordsPrivateStartAutomatedPasswordChangeFunction() = default;
+
+ResponseAction PasswordsPrivateStartAutomatedPasswordChangeFunction::Run() {
+  auto parameters =
+      api::passwords_private::StartAutomatedPasswordChange::Params::Create(
+          args());
+  EXTENSION_FUNCTION_VALIDATE(parameters);
+
+  // Forward the call to the delegate.
+  GetDelegate(browser_context())
+      ->StartAutomatedPasswordChange(
+          parameters->credential,
+          base::BindOnce(&PasswordsPrivateStartAutomatedPasswordChangeFunction::
+                             OnResultReceived,
+                         base::RetainedRef(this)));
+
+  // `OnResultReceived()` might respond before we reach this point.
+  return did_respond() ? AlreadyResponded() : RespondLater();
+}
+
+void PasswordsPrivateStartAutomatedPasswordChangeFunction::OnResultReceived(
+    bool success) {
+  Respond(ArgumentList(
+      api::passwords_private::StartAutomatedPasswordChange::Results::Create(
+          success)));
+}
+
 // PasswordsPrivateIsAccountStoreDefaultFunction
 ResponseAction PasswordsPrivateIsAccountStoreDefaultFunction::Run() {
   return RespondNow(OneArgument(
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_api.h b/chrome/browser/extensions/api/passwords_private/passwords_private_api.h
index 01878f1..4217839 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_api.h
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_api.h
@@ -393,6 +393,22 @@
   ResponseAction Run() override;
 };
 
+class PasswordsPrivateStartAutomatedPasswordChangeFunction
+    : public ExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("passwordsPrivate.startAutomatedPasswordChange",
+                             PASSWORDSPRIVATE_STARTAUTOMATEDPASSWORDCHANGE)
+
+ protected:
+  ~PasswordsPrivateStartAutomatedPasswordChangeFunction() override;
+
+  // ExtensionFunction overrides.
+  ResponseAction Run() override;
+
+ private:
+  void OnResultReceived(bool success);
+};
+
 class PasswordsPrivateIsAccountStoreDefaultFunction : public ExtensionFunction {
  public:
   DECLARE_EXTENSION_FUNCTION("passwordsPrivate.isAccountStoreDefault",
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
index e7eeb49b..d059774 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
@@ -393,6 +393,15 @@
   EXPECT_TRUE(RunPasswordsSubtest("getPasswordCheckStatus")) << message_;
 }
 
+IN_PROC_BROWSER_TEST_F(PasswordsPrivateApiTest, StartAutomatedPasswordChange) {
+  EXPECT_TRUE(RunPasswordsSubtest("startAutomatedPasswordChange"));
+}
+
+IN_PROC_BROWSER_TEST_F(PasswordsPrivateApiTest,
+                       StartAutomatedPasswordChangeWithEmptyUrl) {
+  EXPECT_TRUE(RunPasswordsSubtest("startAutomatedPasswordChangeWithEmptyUrl"));
+}
+
 IN_PROC_BROWSER_TEST_F(PasswordsPrivateApiTest, MovePasswordsToAccount) {
   EXPECT_TRUE(last_moved_passwords().empty());
   EXPECT_TRUE(RunPasswordsSubtest("movePasswordsToAccount")) << message_;
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
index 79412d46..4ec0917f 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
@@ -40,6 +40,8 @@
   using PlaintextInsecurePasswordCallback = base::OnceCallback<void(
       absl::optional<api::passwords_private::InsecureCredential>)>;
 
+  using StartAutomatedPasswordChangeCallback = base::OnceCallback<void(bool)>;
+
   ~PasswordsPrivateDelegate() override = default;
 
   // Gets the saved passwords list.
@@ -206,6 +208,13 @@
   virtual api::passwords_private::PasswordCheckStatus
   GetPasswordCheckStatus() = 0;
 
+  // Starts an automated password change flow for `credential` and returns
+  // whether the credential was changed successfully by calling `callback` with
+  // a boolean parameter.
+  virtual void StartAutomatedPasswordChange(
+      const api::passwords_private::InsecureCredential& credential,
+      StartAutomatedPasswordChangeCallback callback) = 0;
+
   // Returns a pointer to the current instance of InsecureCredentialsManager.
   // Needed to get notified when compromised credentials are written out to
   // disk, since BulkLeakCheckService does not know about that step.
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
index 7979ebe..fd168dc3 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
@@ -16,6 +16,7 @@
 #include "base/notreached.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/autofill_assistant/password_change/apc_client.h"
 #include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h"
 #include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h"
 #include "chrome/browser/password_manager/account_password_store_factory.h"
@@ -24,6 +25,8 @@
 #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/browser_navigator.h"
+#include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/common/extensions/api/passwords_private.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/keyed_service/core/service_access_type.h"
@@ -36,10 +39,12 @@
 #include "components/signin/public/base/signin_metrics.h"
 #include "components/sync/driver/sync_service.h"
 #include "components/url_formatter/elide_url.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/base/clipboard/scoped_clipboard_writer.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
+#include "url/scheme_host_port.h"
 
 #if BUILDFLAG(IS_WIN)
 #include "chrome/browser/password_manager/password_manager_util_win.h"
@@ -580,6 +585,38 @@
   return password_check_delegate_.GetPasswordCheckStatus();
 }
 
+void PasswordsPrivateDelegateImpl::StartAutomatedPasswordChange(
+    const api::passwords_private::InsecureCredential& credential,
+    StartAutomatedPasswordChangeCallback callback) {
+  if (!credential.change_password_url) {
+    std::move(callback).Run(false);
+    return;
+  }
+
+  GURL url =
+      url::SchemeHostPort(GURL(*credential.change_password_url)).GetURL();
+  if (!url.is_valid()) {
+    std::move(callback).Run(false);
+    return;
+  }
+
+  NavigateParams params(profile_, url,
+                        ui::PageTransition::PAGE_TRANSITION_LINK);
+  params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
+  base::WeakPtr<content::NavigationHandle> navigation_handle =
+      Navigate(&params);
+
+  if (!navigation_handle) {
+    std::move(callback).Run(false);
+    return;
+  }
+
+  ApcClient* apc_client = ApcClient::GetOrCreateForWebContents(
+      navigation_handle.get()->GetWebContents());
+  apc_client->Start(url, credential.username,
+                    /*skip_login=*/false, std::move(callback));
+}
+
 password_manager::InsecureCredentialsManager*
 PasswordsPrivateDelegateImpl::GetInsecureCredentialsManager() {
   return password_check_delegate_.GetInsecureCredentialsManager();
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
index 91e41b46..0b1e3be 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
@@ -110,6 +110,9 @@
   void StartPasswordCheck(StartPasswordCheckCallback callback) override;
   void StopPasswordCheck() override;
   api::passwords_private::PasswordCheckStatus GetPasswordCheckStatus() override;
+  void StartAutomatedPasswordChange(
+      const api::passwords_private::InsecureCredential& credential,
+      StartAutomatedPasswordChangeCallback callback) override;
   password_manager::InsecureCredentialsManager* GetInsecureCredentialsManager()
       override;
 
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_browsertest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_browsertest.cc
new file mode 100644
index 0000000..d110feb
--- /dev/null
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_browsertest.cc
@@ -0,0 +1,79 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h"
+
+#include <memory>
+#include <string>
+
+#include "base/test/mock_callback.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/autofill_assistant/password_change/apc_client.h"
+#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/ui_features.h"
+#include "chrome/common/extensions/api/passwords_private.h"
+#include "chrome/test/base/chrome_test_utils.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "url/gurl.h"
+
+namespace extensions {
+
+namespace {
+
+constexpr char kUsername[] = "Bob";
+constexpr char kUrl[] = "https://www.example.com";
+
+class PasswordsPrivateDelegateImplBrowserTest : public InProcessBrowserTest {
+ public:
+  PasswordsPrivateDelegateImplBrowserTest() {
+    // Enable the unified side panel, as this is a prerequisite for the
+    // Automated Password Change flow to be startable.
+    feature_list.InitAndEnableFeature(features::kUnifiedSidePanel);
+  }
+  ~PasswordsPrivateDelegateImplBrowserTest() override = default;
+
+  content::WebContents* web_contents() {
+    return chrome_test_utils::GetActiveWebContents(this);
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list;
+};
+
+IN_PROC_BROWSER_TEST_F(PasswordsPrivateDelegateImplBrowserTest,
+                       StartAutomatedPasswordChange) {
+  PasswordsPrivateDelegateImpl delegate(browser()->profile());
+
+  const GURL url(kUrl);
+  api::passwords_private::InsecureCredential credential;
+  credential.username = kUsername;
+  credential.change_password_url = std::make_unique<std::string>(kUrl);
+  base::MockCallback<
+      PasswordsPrivateDelegate::StartAutomatedPasswordChangeCallback>
+      apc_callback;
+
+  content::TestNavigationObserver navigation_observer(url);
+  navigation_observer.StartWatchingNewWebContents();
+
+  delegate.StartAutomatedPasswordChange(credential, apc_callback.Get());
+  navigation_observer.Wait();
+  EXPECT_EQ(web_contents()->GetLastCommittedURL(), url);
+
+  // The `ApcClient` is running.
+  ApcClient* apc_client = ApcClient::GetOrCreateForWebContents(web_contents());
+  ASSERT_TRUE(apc_client);
+  EXPECT_TRUE(apc_client->IsRunning());
+
+  EXPECT_CALL(apc_callback, Run(false)).Times(1);
+  apc_client->Stop();
+}
+
+}  // namespace
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc
index 5ec8dfb..d67a5fa 100644
--- a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc
+++ b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/base/l10n/time_format.h"
+#include "url/gurl.h"
 
 namespace extensions {
 
@@ -307,6 +308,13 @@
   stop_password_check_triggered_ = true;
 }
 
+void TestPasswordsPrivateDelegate::StartAutomatedPasswordChange(
+    const api::passwords_private::InsecureCredential& credential,
+    StartAutomatedPasswordChangeCallback callback) {
+  std::move(callback).Run(credential.change_password_url &&
+                          GURL(*credential.change_password_url).is_valid());
+}
+
 api::passwords_private::PasswordCheckStatus
 TestPasswordsPrivateDelegate::GetPasswordCheckStatus() {
   api::passwords_private::PasswordCheckStatus status;
diff --git a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h
index 4f1b84a..93bf92d 100644
--- a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h
+++ b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h
@@ -97,6 +97,9 @@
   void StartPasswordCheck(StartPasswordCheckCallback callback) override;
   void StopPasswordCheck() override;
   api::passwords_private::PasswordCheckStatus GetPasswordCheckStatus() override;
+  void StartAutomatedPasswordChange(
+      const api::passwords_private::InsecureCredential& credential,
+      StartAutomatedPasswordChangeCallback callback) override;
   password_manager::InsecureCredentialsManager* GetInsecureCredentialsManager()
       override;
 
diff --git a/chrome/browser/extensions/api/storage/policy_value_store.cc b/chrome/browser/extensions/api/storage/policy_value_store.cc
index 504f383..8b9b7ef 100644
--- a/chrome/browser/extensions/api/storage/policy_value_store.cc
+++ b/chrome/browser/extensions/api/storage/policy_value_store.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/extensions/api/storage/policy_value_store.h"
 
+#include <algorithm>
 #include <utility>
 
 #include "base/logging.h"
@@ -52,7 +53,7 @@
   // TODO(joaodasilva): it'd be better to have a less expensive way of
   // determining which keys are currently stored, or of determining which keys
   // must be removed.
-  base::DictionaryValue previous_policy;
+  base::Value::Dict previous_policy;
   ValueStore::ReadResult read_result = delegate_->Get();
 
   if (!read_result.status().ok()) {
@@ -61,14 +62,14 @@
     // Leave |previous_policy| empty, so that events are generated for every
     // policy in |current_policy|.
   } else {
-    read_result.settings().Swap(&previous_policy);
+    std::swap(read_result.settings(), previous_policy);
   }
 
   // Now get two lists of changes: changes after setting the current policies,
   // and changes after removing old policies that aren't in |current_policy|
   // anymore.
   std::vector<std::string> removed_keys;
-  for (auto kv : previous_policy.DictItems()) {
+  for (auto kv : previous_policy) {
     if (!current_policy.FindKey(kv.first))
       removed_keys.push_back(kv.first);
   }
diff --git a/chrome/browser/extensions/api/storage/policy_value_store_unittest.cc b/chrome/browser/extensions/api/storage/policy_value_store_unittest.cc
index 7c2b390..58d5071 100644
--- a/chrome/browser/extensions/api/storage/policy_value_store_unittest.cc
+++ b/chrome/browser/extensions/api/storage/policy_value_store_unittest.cc
@@ -166,10 +166,11 @@
 
   ValueStore::ReadResult result = store_->Get();
   ASSERT_TRUE(result.status().ok());
-  EXPECT_EQ(1u, result.settings().DictSize());
-  base::Value* value = NULL;
-  EXPECT_FALSE(result.settings().Get("may", &value));
-  EXPECT_TRUE(result.settings().Get("must", &value));
+  EXPECT_EQ(1u, result.settings().size());
+  base::Value* value = result.settings().Find("may");
+  EXPECT_FALSE(value);
+  value = result.settings().Find("must");
+  ASSERT_TRUE(value);
   EXPECT_EQ(expected, *value);
 }
 
diff --git a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc
index eee6474..dbf8a92 100644
--- a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc
+++ b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc
@@ -98,7 +98,8 @@
            << "Expected: " << expected
            << ", actual has error: " << actual.status().message;
   }
-  return ValuesEq(_1, _2, &expected, &actual.settings());
+  base::Value settings(actual.PassSettings());
+  return ValuesEq(_1, _2, &expected, &settings);
 }
 
 // SyncChangeProcessor which just records the changes made, accessed after
diff --git a/chrome/browser/extensions/api/storage/sync_storage_backend.cc b/chrome/browser/extensions/api/storage/sync_storage_backend.cc
index 961c263..4b2ce7b4 100644
--- a/chrome/browser/extensions/api/storage/sync_storage_backend.cc
+++ b/chrome/browser/extensions/api/storage/sync_storage_backend.cc
@@ -22,10 +22,10 @@
 namespace {
 
 void AddAllSyncData(const std::string& extension_id,
-                    const base::DictionaryValue& src,
+                    const base::Value::Dict& src,
                     syncer::ModelType type,
                     syncer::SyncDataList* dst) {
-  for (auto it : src.DictItems()) {
+  for (auto it : src) {
     dst->push_back(settings_sync_util::CreateData(extension_id, it.first,
                                                   it.second, type));
   }
diff --git a/chrome/browser/extensions/api/storage/syncable_settings_storage.cc b/chrome/browser/extensions/api/storage/syncable_settings_storage.cc
index f43309e..a171433 100644
--- a/chrome/browser/extensions/api/storage/syncable_settings_storage.cc
+++ b/chrome/browser/extensions/api/storage/syncable_settings_storage.cc
@@ -172,8 +172,7 @@
                                       maybe_settings.status().message.c_str()));
   }
 
-  std::unique_ptr<base::DictionaryValue> current_settings =
-      maybe_settings.PassSettings();
+  base::Value::Dict current_settings = maybe_settings.PassSettings();
   return sync_state->DictEmpty()
              ? SendLocalSettingsToSync(std::move(current_settings))
              : OverwriteLocalSettingsWithSync(std::move(sync_state),
@@ -182,15 +181,15 @@
 
 absl::optional<syncer::ModelError>
 SyncableSettingsStorage::SendLocalSettingsToSync(
-    std::unique_ptr<base::DictionaryValue> local_state) {
+    base::Value::Dict local_state) {
   DCHECK(IsOnBackendSequence());
 
-  if (local_state->DictEmpty())
+  if (local_state.empty())
     return absl::nullopt;
 
   // Transform the current settings into a list of sync changes.
   value_store::ValueStoreChangeList changes;
-  for (auto pair : local_state->DictItems()) {
+  for (auto pair : local_state) {
     changes.push_back(value_store::ValueStoreChange(pair.first, absl::nullopt,
                                                     std::move(pair.second)));
   }
@@ -205,13 +204,13 @@
 absl::optional<syncer::ModelError>
 SyncableSettingsStorage::OverwriteLocalSettingsWithSync(
     std::unique_ptr<base::DictionaryValue> sync_state,
-    std::unique_ptr<base::DictionaryValue> local_state) {
+    base::Value::Dict local_state) {
   DCHECK(IsOnBackendSequence());
   // This is implemented by building up a list of sync changes then sending
   // those to ProcessSyncChanges. This generates events like onStorageChanged.
   std::unique_ptr<SettingSyncDataList> changes(new SettingSyncDataList());
 
-  for (auto it : local_state->DictItems()) {
+  for (auto it : local_state) {
     absl::optional<base::Value> sync_value = sync_state->ExtractKey(it.first);
     if (sync_value.has_value()) {
       if (*sync_value == it.second) {
@@ -277,7 +276,7 @@
             sync_processor_->type()));
         continue;
       }
-      current_value = maybe_settings.settings().ExtractKey(key);
+      current_value = maybe_settings.settings().Extract(key);
     }
 
     syncer::SyncError error;
diff --git a/chrome/browser/extensions/api/storage/syncable_settings_storage.h b/chrome/browser/extensions/api/storage/syncable_settings_storage.h
index 15d9abc..7712c8c9 100644
--- a/chrome/browser/extensions/api/storage/syncable_settings_storage.h
+++ b/chrome/browser/extensions/api/storage/syncable_settings_storage.h
@@ -94,13 +94,13 @@
   // in sync yet.
   // Returns any error when trying to sync, or absl::nullopt on success.
   absl::optional<syncer::ModelError> SendLocalSettingsToSync(
-      std::unique_ptr<base::DictionaryValue> local_state);
+      base::Value::Dict local_state);
 
   // Overwrites local state with sync state.
   // Returns any error when trying to sync, or absl::nullopt on success.
   absl::optional<syncer::ModelError> OverwriteLocalSettingsWithSync(
       std::unique_ptr<base::DictionaryValue> sync_state,
-      std::unique_ptr<base::DictionaryValue> local_state);
+      base::Value::Dict local_state);
 
   // Called when an Add/Update/Remove comes from sync.
   syncer::SyncError OnSyncAdd(const std::string& key,
diff --git a/chrome/browser/fast_checkout/fast_checkout_client_impl.cc b/chrome/browser/fast_checkout/fast_checkout_client_impl.cc
index c538e3c..a78947b 100644
--- a/chrome/browser/fast_checkout/fast_checkout_client_impl.cc
+++ b/chrome/browser/fast_checkout/fast_checkout_client_impl.cc
@@ -20,7 +20,7 @@
 constexpr char kCallerParameterName[] = "CALLER";
 constexpr char kSourceParameterName[] = "SOURCE";
 
-constexpr char kIntentValue[] = "FAST_CHECKOUT";
+constexpr char kIntentValue[] = "CHROME_FAST_CHECKOUT";
 constexpr char kTrue[] = "true";
 // TODO(crbug.com/1338521): Define and specify proper caller(s) and source(s).
 constexpr char kCaller[] = "7";  // run was started from within Chromium
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 75566e4f..34518c9 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2786,6 +2786,11 @@
     "expiry_milestone": 110
   },
   {
+    "name": "enable-sync-history-datatype",
+    "owners": [ "treib", "chrome-sync-dev@google.com" ],
+    "expiry_milestone": 110
+  },
+  {
     "name": "enable-system-notifications",
     "owners": [ "peter", "finnur", "knollr" ],
     "expiry_milestone": 110
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 110f7db..9e823db 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2544,6 +2544,10 @@
 const char kSuppressToolbarCapturesDescription[] =
     "Suppress Toolbar Captures except when certain properties change.";
 
+const char kSyncEnableHistoryDataTypeName[] = "Enable History sync data type";
+const char kSyncEnableHistoryDataTypeDescription[] =
+    "Enables the History sync data type instead of TypedURLs";
+
 const char kSyncSandboxName[] = "Use Chrome Sync sandbox";
 const char kSyncSandboxDescription[] =
     "Connects to the testing server for Chrome Sync.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 39a1dfd..25ad924c 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1433,6 +1433,9 @@
 extern const char kSuggestionsWithSubStringMatchName[];
 extern const char kSuggestionsWithSubStringMatchDescription[];
 
+extern const char kSyncEnableHistoryDataTypeName[];
+extern const char kSyncEnableHistoryDataTypeDescription[];
+
 extern const char kSyncSandboxName[];
 extern const char kSyncSandboxDescription[];
 
diff --git a/chrome/browser/permissions/notifications_engagement_service_unittest.cc b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
index b342a91..c32fb79 100644
--- a/chrome/browser/permissions/notifications_engagement_service_unittest.cc
+++ b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
@@ -10,12 +10,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
-#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/supervised_user/supervised_user_metrics_service.h"
-#include "chrome/browser/supervised_user/supervised_user_metrics_service_factory.h"
-#endif
-
 namespace permissions {
 constexpr char kEngagementKey[] = "click_count";
 constexpr char kDisplayedKey[] = "display_count";
@@ -48,13 +42,6 @@
 
 void NotificationsEngagementServiceTest::SetUp() {
   testing::Test::SetUp();
-
-#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-  // Disable supervised user metrics reporting, otherwise the calls to
-  // FastForwardUntilNoTasksRemain() never return.
-  SupervisedUserMetricsServiceFactory::GetForBrowserContext(profile())
-      ->Shutdown();
-#endif
 }
 
 TEST_F(NotificationsEngagementServiceTest,
diff --git a/chrome/browser/policy/policy_prefs_browsertest.cc b/chrome/browser/policy/policy_prefs_browsertest.cc
index 15d8997..b6dd759 100644
--- a/chrome/browser/policy/policy_prefs_browsertest.cc
+++ b/chrome/browser/policy/policy_prefs_browsertest.cc
@@ -19,7 +19,6 @@
 #include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
-#include "base/sequence_checker_impl.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
@@ -75,11 +74,6 @@
 
  protected:
   void SetUpInProcessBrowserTestFixture() override {
-    // Add debug information to understand how `V4Database::weak_factory_on_io_`
-    // ends up being used from more than one sequence.
-    // TODO(crbug.com/1341434): Remove after the bug is fixed.
-    base::SequenceCheckerImpl::EnableStackLogging();
-
     GetMockPolicyProvider()->SetDefaultReturns(
         true /* is_initialization_complete_return */,
         true /* is_first_policy_load_complete_return */);
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index d25d2e9..75ff828 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -748,6 +748,12 @@
     "user_experience_metrics.stability.renderer_crash_count";
 const char kStabilityExtensionRendererCrashCount[] =
     "user_experience_metrics.stability.extension_renderer_crash_count";
+
+// Deprecated 07/2022
+const char kPrivacySandboxFlocEnabled[] = "privacy_sandbox.floc_enabled";
+const char kPrivacySandboxFlocDataAccessibleSince[] =
+    "privacy_sandbox.floc_data_accessible_since";
+
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
 const char kTokenServiceDiceCompatible[] = "token_service.dice_compatible";
 #endif
@@ -1012,6 +1018,10 @@
 #if BUILDFLAG(IS_ANDROID)
   registry->RegisterIntegerPref(kDownloadLaterPromptStatus, 0);
 #endif  // BUILDFLAG(IS_ANDROID)
+
+  // Deprecated 07/2022
+  registry->RegisterBooleanPref(kPrivacySandboxFlocEnabled, true);
+  registry->RegisterBooleanPref(kPrivacySandboxFlocDataAccessibleSince, false);
 }
 
 }  // namespace
@@ -1981,6 +1991,10 @@
   // Added 06/2022.
   profile_prefs->ClearPref(kPrivacySandboxPreferencesReconciled);
 
+  // Added 07/2022
+  profile_prefs->ClearPref(kPrivacySandboxFlocEnabled);
+  profile_prefs->ClearPref(kPrivacySandboxFlocDataAccessibleSince);
+
   // Please don't delete the following line. It is used by PRESUBMIT.py.
   // END_MIGRATE_OBSOLETE_PROFILE_PREFS
 
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FlocSettingsFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FlocSettingsFragment.java
index 419d8f7..d6e98f6 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FlocSettingsFragment.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/FlocSettingsFragment.java
@@ -64,44 +64,12 @@
         flocToggle.setEnabled(false);
         // Configure the reset button.
         Preference resetButton = findPreference(RESET_FLOC_BUTTON);
+        resetButton.setEnabled(false);
         resetButton.setOnPreferenceClickListener(this);
         resetButton.setTitle(R.string.privacy_sandbox_floc_reset_button);
 
         RecordUserAction.record("Settings.PrivacySandbox.FlocSubpageOpened");
 
-        updateInformation();
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        String key = preference.getKey();
-        if (!FLOC_TOGGLE.equals(key)) return true;
-        boolean enabled = (boolean) newValue;
-        PrivacySandboxBridge.setFlocEnabled(enabled);
-        updateInformation();
-        return true;
-    }
-
-    @Override
-    public boolean onPreferenceClick(Preference preference) {
-        String key = preference.getKey();
-        if (!RESET_FLOC_BUTTON.equals(key)) return true;
-        PrivacySandboxBridge.resetFlocId();
-        updateInformation();
-        return true;
-    }
-
-    /**
-     * Set the necessary CCT helpers to be able to natively open links. This is needed because the
-     * helpers are not modularized.
-     */
-    public void setCustomTabIntentHelper(PrivacySandboxHelpers.CustomTabIntentHelper tabHelper) {
-        mCustomTabHelper = tabHelper;
-    }
-
-    private void updateInformation() {
-        findPreference(RESET_FLOC_BUTTON).setEnabled(PrivacySandboxBridge.isFlocIdResettable());
-
         findPreference(FLOC_STATUS)
                 .setSummary(getContext().getString(R.string.privacy_sandbox_floc_status_title)
                         + "\n" + PrivacySandboxBridge.getFlocStatusString());
@@ -113,6 +81,24 @@
                         + "\n" + PrivacySandboxBridge.getFlocUpdateString());
     }
 
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        return true;
+    }
+
+    @Override
+    public boolean onPreferenceClick(Preference preference) {
+        return true;
+    }
+
+    /**
+     * Set the necessary CCT helpers to be able to natively open links. This is needed because the
+     * helpers are not modularized.
+     */
+    public void setCustomTabIntentHelper(PrivacySandboxHelpers.CustomTabIntentHelper tabHelper) {
+        mCustomTabHelper = tabHelper;
+    }
+
     private String getFlocRegionsUrl() {
         return "https://www.privacysandbox.com/proposals/floc";
     }
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxBridge.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxBridge.java
index 40f4979..9632587 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxBridge.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxBridge.java
@@ -30,22 +30,6 @@
         PrivacySandboxBridgeJni.get().setPrivacySandboxEnabled(enabled);
     }
 
-    public static boolean isFlocEnabled() {
-        return PrivacySandboxBridgeJni.get().isFlocEnabled();
-    }
-
-    public static void setFlocEnabled(boolean enabled) {
-        PrivacySandboxBridgeJni.get().setFlocEnabled(enabled);
-    }
-
-    public static boolean isFlocIdResettable() {
-        return PrivacySandboxBridgeJni.get().isFlocIdResettable();
-    }
-
-    public static void resetFlocId() {
-        PrivacySandboxBridgeJni.get().resetFlocId();
-    }
-
     public static String getFlocStatusString() {
         return PrivacySandboxBridgeJni.get().getFlocStatusString();
     }
@@ -118,10 +102,6 @@
         boolean isPrivacySandboxManaged();
         boolean isPrivacySandboxRestricted();
         void setPrivacySandboxEnabled(boolean enabled);
-        boolean isFlocEnabled();
-        void setFlocEnabled(boolean enabled);
-        boolean isFlocIdResettable();
-        void resetFlocId();
         String getFlocStatusString();
         String getFlocGroupString();
         String getFlocUpdateString();
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FakePrivacySandboxBridge.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FakePrivacySandboxBridge.java
index be4e353..16dae06 100644
--- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FakePrivacySandboxBridge.java
+++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/FakePrivacySandboxBridge.java
@@ -91,26 +91,6 @@
     }
 
     @Override
-    public boolean isFlocEnabled() {
-        return true;
-    }
-
-    @Override
-    public void setFlocEnabled(boolean enabled) {
-        assert false;
-    }
-
-    @Override
-    public boolean isFlocIdResettable() {
-        return true;
-    }
-
-    @Override
-    public void resetFlocId() {
-        assert false;
-    }
-
-    @Override
     public String getFlocStatusString() {
         return null;
     }
diff --git a/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc b/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc
index e9c509a..815f0ce 100644
--- a/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc
+++ b/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc
@@ -18,7 +18,9 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "components/privacy_sandbox/canonical_topic.h"
 #include "components/privacy_sandbox/privacy_sandbox_settings.h"
+#include "components/strings/grit/components_strings.h"
 #include "content/public/browser/browser_thread.h"
+#include "ui/base/l10n/l10n_util.h"
 
 using base::android::ConvertUTF16ToJavaString;
 using base::android::ScopedJavaLocalRef;
@@ -65,52 +67,44 @@
   GetPrivacySandboxService()->SetPrivacySandboxEnabled(enabled);
 }
 
-static jboolean JNI_PrivacySandboxBridge_IsFlocEnabled(JNIEnv* env) {
-  return GetPrivacySandboxService()->IsFlocPrefEnabled();
-}
-
-static void JNI_PrivacySandboxBridge_SetFlocEnabled(JNIEnv* env,
-                                                    jboolean enabled) {
-  GetPrivacySandboxService()->SetFlocPrefEnabled(enabled);
-}
-
-static jboolean JNI_PrivacySandboxBridge_IsFlocIdResettable(JNIEnv* env) {
-  return GetPrivacySandboxService()->IsFlocIdResettable();
-}
-
-static void JNI_PrivacySandboxBridge_ResetFlocId(JNIEnv* env) {
-  GetPrivacySandboxService()->ResetFlocId(/*user_initiated=*/true);
-}
-
 static ScopedJavaLocalRef<jstring> JNI_PrivacySandboxBridge_GetFlocStatusString(
     JNIEnv* env) {
+  // FLoC always disabled while OT not active.
+  // TODO(crbug.com/1299720): Perform cleanup / adjustment as required.
   return ConvertUTF16ToJavaString(
-      env, GetPrivacySandboxService()->GetFlocStatusForDisplay());
+      env,
+      l10n_util::GetStringUTF16(IDS_PRIVACY_SANDBOX_FLOC_STATUS_NOT_ACTIVE));
 }
 
 static ScopedJavaLocalRef<jstring> JNI_PrivacySandboxBridge_GetFlocGroupString(
     JNIEnv* env) {
+  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
   return ConvertUTF16ToJavaString(
-      env, GetPrivacySandboxService()->GetFlocIdForDisplay());
+      env, l10n_util::GetStringUTF16(IDS_PRIVACY_SANDBOX_FLOC_INVALID));
 }
 
 static ScopedJavaLocalRef<jstring> JNI_PrivacySandboxBridge_GetFlocUpdateString(
     JNIEnv* env) {
+  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
   return ConvertUTF16ToJavaString(
-      env, GetPrivacySandboxService()->GetFlocIdNextUpdateForDisplay(
-               base::Time::Now()));
+      env, l10n_util::GetStringUTF16(
+               IDS_PRIVACY_SANDBOX_FLOC_TIME_TO_NEXT_COMPUTE_INVALID));
 }
 
 static ScopedJavaLocalRef<jstring>
 JNI_PrivacySandboxBridge_GetFlocDescriptionString(JNIEnv* env) {
-  return ConvertUTF16ToJavaString(
-      env, GetPrivacySandboxService()->GetFlocDescriptionForDisplay());
+  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
+  return ConvertUTF16ToJavaString(env,
+                                  l10n_util::GetPluralStringFUTF16(
+                                      IDS_PRIVACY_SANDBOX_FLOC_DESCRIPTION, 7));
 }
 
 static ScopedJavaLocalRef<jstring>
 JNI_PrivacySandboxBridge_GetFlocResetExplanationString(JNIEnv* env) {
+  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
   return ConvertUTF16ToJavaString(
-      env, GetPrivacySandboxService()->GetFlocResetExplanationForDisplay());
+      env, l10n_util::GetPluralStringFUTF16(
+               IDS_PRIVACY_SANDBOX_FLOC_RESET_EXPLANATION, 7));
 }
 
 static ScopedJavaLocalRef<jobjectArray>
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc
index 6df9ad9..8497339 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc
@@ -46,21 +46,6 @@
 
 bool g_dialog_diabled_for_tests = false;
 
-// Returns the number of days in |time|, rounded to the closest day by hour if
-// there is at least 1 day, but rounded to 0 if |time| is less than 1 day.
-int GetNumberOfDaysRoundedAboveOne(base::TimeDelta time) {
-  int number_of_days = time.InDays();
-  if (number_of_days == 0)
-    return 0;
-
-  int number_of_hours_past_day = (time - base::Days(number_of_days)).InHours();
-
-  if (number_of_hours_past_day >= 12)
-    number_of_days++;
-
-  return number_of_days;
-}
-
 // Returns whether 3P cookies are blocked by |cookie_settings|. This can be
 // either through blocking 3P cookies directly, or blocking all cookies.
 bool AreThirdPartyCookiesBlocked(
@@ -127,20 +112,12 @@
   DCHECK(pref_service_);
   DCHECK(cookie_settings_);
 
-  // Register observers for the Privacy Sandbox & FLoC preferences.
+  // Register observers for the Privacy Sandbox preferences.
   user_prefs_registrar_.Init(pref_service_);
   user_prefs_registrar_.Add(
-      prefs::kPrivacySandboxApisEnabled,
-      base::BindRepeating(&PrivacySandboxService::OnPrivacySandboxV1PrefChanged,
-                          base::Unretained(this)));
-  user_prefs_registrar_.Add(
       prefs::kPrivacySandboxApisEnabledV2,
       base::BindRepeating(&PrivacySandboxService::OnPrivacySandboxV2PrefChanged,
                           base::Unretained(this)));
-  user_prefs_registrar_.Add(
-      prefs::kPrivacySandboxFlocEnabled,
-      base::BindRepeating(&PrivacySandboxService::OnPrivacySandboxV1PrefChanged,
-                          base::Unretained(this)));
 
   // When the user enters the Privacy Sandbox 3 experiment, the default value
   // of their V2 pref must be set. This is a one time operation that is checked
@@ -285,62 +262,6 @@
   g_dialog_diabled_for_tests = disabled;
 }
 
-std::u16string PrivacySandboxService::GetFlocDescriptionForDisplay() const {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return l10n_util::GetPluralStringFUTF16(
-      IDS_PRIVACY_SANDBOX_FLOC_DESCRIPTION,
-      GetNumberOfDaysRoundedAboveOne(base::Days(7)));
-}
-
-std::u16string PrivacySandboxService::GetFlocIdForDisplay() const {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return l10n_util::GetStringUTF16(IDS_PRIVACY_SANDBOX_FLOC_INVALID);
-}
-
-std::u16string PrivacySandboxService::GetFlocIdNextUpdateForDisplay(
-    const base::Time& current_time) {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return l10n_util::GetStringUTF16(
-      IDS_PRIVACY_SANDBOX_FLOC_TIME_TO_NEXT_COMPUTE_INVALID);
-}
-
-std::u16string PrivacySandboxService::GetFlocResetExplanationForDisplay()
-    const {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return l10n_util::GetPluralStringFUTF16(
-      IDS_PRIVACY_SANDBOX_FLOC_RESET_EXPLANATION,
-      GetNumberOfDaysRoundedAboveOne(base::Days(7)));
-}
-
-std::u16string PrivacySandboxService::GetFlocStatusForDisplay() const {
-  // FLoC always disabled while OT not active.
-  // TODO(crbug.com/1299720): Perform cleanup / adjustment as required.
-  return l10n_util::GetStringUTF16(IDS_PRIVACY_SANDBOX_FLOC_STATUS_NOT_ACTIVE);
-}
-
-bool PrivacySandboxService::IsFlocIdResettable() const {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return false;
-}
-
-void PrivacySandboxService::ResetFlocId(bool user_initiated) const {
-  // This function is left as a non-functional stub to support UI code for the
-  // removed FLoC feature. The UI should not allow the user to perform this
-  // action (see IsFlocIdResettable() definition)
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return;
-}
-
-bool PrivacySandboxService::IsFlocPrefEnabled() const {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return false;
-}
-
-void PrivacySandboxService::SetFlocPrefEnabled(bool enabled) const {
-  // TODO(crbug.com/1299720): Remove this and all the UI code which uses it.
-  return;
-}
-
 bool PrivacySandboxService::IsPrivacySandboxEnabled() {
   return base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings3)
              ? pref_service_->GetBoolean(prefs::kPrivacySandboxApisEnabledV2)
@@ -370,15 +291,6 @@
   privacy_sandbox_settings_->SetPrivacySandboxEnabled(enabled);
 }
 
-void PrivacySandboxService::OnPrivacySandboxV1PrefChanged() {
-  // Any change of the two observed prefs should be accompanied by a
-  // reset of the FLoC cohort. Technically this only needs to occur on the
-  // transition from FLoC being effectively disabled to effectively enabled,
-  // but performing it on every pref change achieves the same user visible
-  // behavior, and is much simpler.
-  ResetFlocId(/*user_initiated=*/false);
-}
-
 void PrivacySandboxService::OnPrivacySandboxV2PrefChanged() {
   // If the user has disabled the Privacy Sandbox, any data stored should be
   // cleared.
@@ -606,28 +518,19 @@
   }
 
   if (privacy_sandbox_settings_->IsPrivacySandboxEnabled()) {
-    const bool floc_enabled =
-        pref_service_->GetBoolean(prefs::kPrivacySandboxFlocEnabled);
-
     if (default_cookie_setting == ContentSetting::CONTENT_SETTING_BLOCK) {
       RecordPrivacySandboxHistogram(
-          floc_enabled ? PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                             kPSEnabledBlockAll
-                       : PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                             kPSEnabledFlocDisabledBlockAll);
+          PrivacySandboxService::SettingsPrivacySandboxEnabled::
+              kPSEnabledBlockAll);
     } else if (cookie_controls_mode_value ==
                content_settings::CookieControlsMode::kBlockThirdParty) {
       RecordPrivacySandboxHistogram(
-          floc_enabled ? PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                             kPSEnabledBlock3P
-                       : PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                             kPSEnabledFlocDisabledBlock3P);
+          PrivacySandboxService::SettingsPrivacySandboxEnabled::
+              kPSEnabledBlock3P);
     } else {
       RecordPrivacySandboxHistogram(
-          floc_enabled ? PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                             kPSEnabledAllowAll
-                       : PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                             kPSEnabledFlocDisabledAllowAll);
+          PrivacySandboxService::SettingsPrivacySandboxEnabled::
+              kPSEnabledAllowAll);
     }
   } else {
     if (default_cookie_setting == ContentSetting::CONTENT_SETTING_BLOCK) {
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.h b/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
index 18def9f..b3c7c817 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
@@ -148,48 +148,6 @@
   // ensure it is reset at the end of your test.
   static void SetDialogDisabledForTests(bool disabled);
 
-  // Returns a description of FLoC ready for display to the user. Correctly
-  // takes into account the FLoC feature parameters when determining the number
-  // of days between cohort calculations.
-  std::u16string GetFlocDescriptionForDisplay() const;
-
-  // Returns the current FLoC cohort identifier for the associated profile in
-  // string format suitable for direct display to the user. If the cohort is
-  // not valid, the appropriate descriptive string is returned instead.
-  std::u16string GetFlocIdForDisplay() const;
-
-  // Returns when the user's current FLoC cohort identifier will next be updated
-  // in a string format suitable for direct display to the user. If no compute
-  // is scheduled, the appropriate descriptive string is returned instead.
-  std::u16string GetFlocIdNextUpdateForDisplay(const base::Time& current_time);
-
-  // Returns the display ready string explaining what happens when the user
-  // resets the FLoC cohort identifier.
-  std::u16string GetFlocResetExplanationForDisplay() const;
-
-  // Returns a display ready string explaining the current status of FloC. E.g.
-  // the effective state of the Finch experiment, and the user's setting.
-  std::u16string GetFlocStatusForDisplay() const;
-
-  // Returns whether the user's current FLoC ID can be reset. This requires that
-  // the FLoC feature be enabled and FLoC be enabled in preferences. It does not
-  // require that the current ID is valid, as resetting the ID also resets the
-  // compute timer, it should be available whenever FLoC is active.
-  bool IsFlocIdResettable() const;
-
-  // Sets the time when history is accessible for FLoC calculation to the
-  // current time and resets the time to the next FLoC id calculation. If
-  // |user_initiated| is true, records the associated User Metrics Action.
-  void ResetFlocId(bool user_initiated) const;
-
-  // Returns whether the FLoC preference is enabled. This should only be used
-  // for displaying the preference state to the user, and should *not* be used
-  // for determining whether FLoC is allowed or not.
-  bool IsFlocPrefEnabled() const;
-
-  // Sets the FLoC preference to |enabled|.
-  void SetFlocPrefEnabled(bool enabled) const;
-
   // Disables the Privacy Sandbox completely if |enabled| is false. If |enabled|
   // is true, context specific as well as restriction/confirmation checks
   // will still be performed to determine if specific APIs are available in
@@ -212,10 +170,6 @@
   // Privacy Sandbox related UI is updated appropriately.
   virtual bool IsPrivacySandboxRestricted();
 
-  // Called when a preference relevant to the the V1 Privacy Sandbox page is
-  // changed.
-  void OnPrivacySandboxV1PrefChanged();
-
   // Called when the V2 Privacy Sandbox preference is changed.
   void OnPrivacySandboxV2PrefChanged();
 
@@ -322,8 +276,11 @@
     kPSDisabledBlockAll = 5,
     kPSDisabledPolicyBlock3P = 6,
     kPSDisabledPolicyBlockAll = 7,
+    // DEPRECATED
     kPSEnabledFlocDisabledAllowAll = 8,
+    // DEPRECATED
     kPSEnabledFlocDisabledBlock3P = 9,
+    // DEPRECATED
     kPSEnabledFlocDisabledBlockAll = 10,
     // Add values above this line with a corresponding label in
     // tools/metrics/histograms/enums.xml
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
index 1c0d139..6a867c4d 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
@@ -757,40 +757,6 @@
   std::unique_ptr<PrivacySandboxService> privacy_sandbox_service_;
 };
 
-TEST_F(PrivacySandboxServiceTest, GetFlocDescriptionForDisplay) {
-  EXPECT_EQ(
-      l10n_util::GetPluralStringFUTF16(IDS_PRIVACY_SANDBOX_FLOC_DESCRIPTION, 7),
-      privacy_sandbox_service()->GetFlocDescriptionForDisplay());
-}
-
-TEST_F(PrivacySandboxServiceTest, GetFlocIdForDisplay) {
-  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PRIVACY_SANDBOX_FLOC_INVALID),
-            privacy_sandbox_service()->GetFlocIdForDisplay());
-}
-
-TEST_F(PrivacySandboxServiceTest, GetFlocIdNextUpdateForDisplay) {
-  EXPECT_EQ(l10n_util::GetStringUTF16(
-                IDS_PRIVACY_SANDBOX_FLOC_TIME_TO_NEXT_COMPUTE_INVALID),
-            privacy_sandbox_service()->GetFlocIdNextUpdateForDisplay(
-                base::Time::Now()));
-}
-
-TEST_F(PrivacySandboxServiceTest, GetFlocResetExplanationForDisplay) {
-  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
-                IDS_PRIVACY_SANDBOX_FLOC_RESET_EXPLANATION, 7),
-            privacy_sandbox_service()->GetFlocResetExplanationForDisplay());
-}
-
-TEST_F(PrivacySandboxServiceTest, GetFlocStatusForDisplay) {
-  EXPECT_EQ(
-      l10n_util::GetStringUTF16(IDS_PRIVACY_SANDBOX_FLOC_STATUS_NOT_ACTIVE),
-      privacy_sandbox_service()->GetFlocStatusForDisplay());
-}
-
-TEST_F(PrivacySandboxServiceTest, IsFlocIdResettable) {
-  EXPECT_FALSE(privacy_sandbox_service()->IsFlocIdResettable());
-}
-
 TEST_F(PrivacySandboxServiceTest, GetFledgeJoiningEtldPlusOne) {
   // Confirm that the set of FLEDGE origins which were top-frame for FLEDGE join
   // actions is correctly converted into a list of eTLD+1s.
@@ -1979,11 +1945,6 @@
   // The histogram should start off empty.
   histograms.ExpectTotalCount(histogram_name, 0);
 
-  // For buckets that do not explicitly mention FLoC, it is assumed to be on,
-  // or its state is irrelevant, i.e. overridden by the Privacy Sandbox pref.
-  profile()->GetTestingPrefService()->SetBoolean(
-      prefs::kPrivacySandboxFlocEnabled, true);
-
   privacy_sandbox_test_util::SetupTestState(
       prefs(), host_content_settings_map(),
       /*privacy_sandbox_enabled=*/true,
@@ -2109,64 +2070,6 @@
       static_cast<int>(PrivacySandboxService::SettingsPrivacySandboxEnabled::
                            kPSDisabledPolicyBlockAll),
       1);
-
-  // Disable FLoC and test the buckets that reflect a disabled FLoC state.
-  profile()->GetTestingPrefService()->SetBoolean(
-      prefs::kPrivacySandboxFlocEnabled, false);
-
-  privacy_sandbox_test_util::SetupTestState(
-      prefs(), host_content_settings_map(),
-      /*privacy_sandbox_enabled=*/true,
-      /*block_third_party_cookies=*/false,
-      /*default_cookie_setting=*/ContentSetting::CONTENT_SETTING_ALLOW,
-      /*user_cookie_exceptions=*/{},
-      /*managed_cookie_setting=*/privacy_sandbox_test_util::kNoSetting,
-      /*managed_cookie_exceptions=*/{});
-
-  CreateService();
-
-  histograms.ExpectTotalCount(histogram_name, 8);
-  histograms.ExpectBucketCount(
-      histogram_name,
-      static_cast<int>(PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                           kPSEnabledFlocDisabledAllowAll),
-      1);
-
-  privacy_sandbox_test_util::SetupTestState(
-      prefs(), host_content_settings_map(),
-      /*privacy_sandbox_enabled=*/true,
-      /*block_third_party_cookies=*/true,
-      /*default_cookie_setting=*/ContentSetting::CONTENT_SETTING_ALLOW,
-      /*user_cookie_exceptions=*/{},
-      /*managed_cookie_setting=*/privacy_sandbox_test_util::kNoSetting,
-      /*managed_cookie_exceptions=*/{});
-
-  CreateService();
-
-  histograms.ExpectTotalCount(histogram_name, 9);
-  histograms.ExpectBucketCount(
-      histogram_name,
-      static_cast<int>(PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                           kPSEnabledFlocDisabledBlock3P),
-      1);
-
-  privacy_sandbox_test_util::SetupTestState(
-      prefs(), host_content_settings_map(),
-      /*privacy_sandbox_enabled=*/true,
-      /*block_third_party_cookies=*/true,
-      /*default_cookie_setting=*/ContentSetting::CONTENT_SETTING_BLOCK,
-      /*user_cookie_exceptions=*/{},
-      /*managed_cookie_setting=*/privacy_sandbox_test_util::kNoSetting,
-      /*managed_cookie_exceptions=*/{});
-
-  CreateService();
-
-  histograms.ExpectTotalCount(histogram_name, 10);
-  histograms.ExpectBucketCount(
-      histogram_name,
-      static_cast<int>(PrivacySandboxService::SettingsPrivacySandboxEnabled::
-                           kPSEnabledFlocDisabledBlockAll),
-      1);
 }
 
 class PrivacySandboxServiceTestNonRegularProfile
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
index 8ac3ef0..f9ebaf6 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Oranje</translation>
 <translation id="1198865190323699001">Aanraakgebare</translation>
 <translation id="1201402288615127009">Volgende</translation>
+<translation id="1202112913213080585">kanselleer</translation>
 <translation id="1206619573307042055">markies</translation>
 <translation id="1207086294218137981">Geen volgende vlak 4-opskrif nie</translation>
 <translation id="1212770441379271564">Die volgende paar kortpaaie is nie ChromeVox-bevele nie, maar hulle is steeds baie nuttig om die meeste voordeel uit Chrome te kry.
@@ -43,6 +44,7 @@
     Druk Alt+F om die Chrome-blaaierkieslys oop te maak.</translation>
 <translation id="1213216066620407844">ChromeVox – Gee Chrome 'n stem</translation>
 <translation id="1225969361094801578">Donker leigrys</translation>
+<translation id="122928249241119550">gaan na vorige sin</translation>
 <translation id="1230503547248836149">Begin van seleksie</translation>
 <translation id="1236794971743289975">Eindnota</translation>
 <translation id="1237797094773582699">Die handeling om met vier vingers van regs na links te swiep, kan ook gebruik word om na die vorige afdeling te beweeg. Probeer dit nou!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Helder hemelblou</translation>
 <translation id="2438712309510062123">Stel voor</translation>
 <translation id="2450814015951372393">Merkblokkie</translation>
+<translation id="2450992626945324272">gaan na die volgende sin</translation>
 <translation id="2461822463642141190">Huidig</translation>
 <translation id="2462626033734746142">Radioknoppiegroep</translation>
 <translation id="2467741090055146971">ontkies</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Kadetblou</translation>
 <translation id="4217571870635786043">Diktee</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{aandagstreep}other{# aandagstrepe}}</translation>
+<translation id="4220024144662591089">kies van <ph name="START_PHRASE" /> tot <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Geen vorige lys nie</translation>
 <translation id="4225355998815256469">Vormkontroles</translation>
 <translation id="4230834257931120629">Ligte leigrys</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">besoek</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">'n Lys- of kombinasiekassie</translation>
+<translation id="613344593214611552">vee die vorige sin uit</translation>
 <translation id="6142308968191113180">Opskrif 4</translation>
 <translation id="6150023170003443621">Geelgroen</translation>
 <translation id="6158882249329863701">ry <ph name="TABLECELLROWINDEX" /> kolom <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Spring na die onderkant van die bladsy</translation>
 <translation id="6187190722927752226">Akwamaryn</translation>
 <translation id="6197361807490522975">Donkerblou</translation>
+<translation id="6218813441317556731">vervang <ph name="DELETE_PHRASE" /> met <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Volgende opskrif</translation>
 <translation id="6254901459154107917">Volgende redigeerbare teks-area</translation>
 <translation id="6259464875943891919">Het by <ph name="TYPE" /> uitgegaan.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Beskrywinglysdetail</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{ampersandteken}other{# ampersandtekens}}</translation>
 <translation id="737396357417333429">klikbaar</translation>
+<translation id="7388656272362719103">vee die vorige karakter uit</translation>
 <translation id="738899727977260036">Leiblou</translation>
 <translation id="7393979322571982935">Klanke en instellings</translation>
 <translation id="739763518212184081">Vorige reël</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Ligte ougoud</translation>
 <translation id="7543255924852002459">Gooi etiket weg</translation>
 <translation id="7552432549459840808">Nuttige Chrome-kortpaaie</translation>
+<translation id="7553679324939294712">voeg <ph name="INSERT_PHRASE" /> voor <ph name="BEFORE_PHRASE" /> in</translation>
 <translation id="7569983096843329377">Swart</translation>
 <translation id="7579911500627256166">kolletjie <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Sommige</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Wysig teks, URL-inskrywing</translation>
 <translation id="7685589220304187312">nutsbalk</translation>
 <translation id="7693840228159394336">Vorige radioknoppie</translation>
+<translation id="7696631298608145306">gaan na volgende woord</translation>
 <translation id="7701040980221191251">Geen</translation>
 <translation id="7701196182766842984">outolys</translation>
 <translation id="7713139339518499741">Natuurlike stem</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Maks. <ph name="X" /></translation>
 <translation id="84575901236241018">het toegangsleutel, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Verlaat tans grammatikafout</translation>
+<translation id="8465573210279050749">vee die vorige woord uit</translation>
 <translation id="847040613207937740">Geen volgende merkblokkie nie</translation>
 <translation id="8473540203671727883">Lees teks onder die muis</translation>
 <translation id="8476408756881832830">Onderbreek terugspeling wanneer ChromeVox besig is om te praat</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{pyp}other{# vertikale pype}}</translation>
 <translation id="8741370088760768424">Wenk: Druk Search + spasie om die huidige item te aktiveer.</translation>
 <translation id="8743786158317878347">voer gestruktureerde inhoud in, soos tabelle</translation>
+<translation id="8746846427395705317">gaan na die vorige woord</translation>
 <translation id="8747966237988593539">Geordende lys</translation>
 <translation id="8749988712346667988">Silwer</translation>
 <translation id="875769700429317857">Aflaai is voltooi <ph name="FILE_NAME" /></translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Geen vorige afdeling nie</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">nutswenk</translation>
+<translation id="898089897833732740">vee <ph name="PHRASE" /> uit</translation>
 <translation id="8986362086234534611">Vergeet</translation>
 <translation id="8989104346085848538">Druk die Control-sleutel om enige ChromeVox-spraak te stop.</translation>
 <translation id="8993737615451556423">Verskaf kontroles om die leesstem vinniger te maak, stadiger te maak en te onderbreek</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb
index 8b10305..2249b9b 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">কমলা</translation>
 <translation id="1198865190323699001">জেসচার মেনুতে স্পর্শ করুন</translation>
 <translation id="1201402288615127009">পরের</translation>
+<translation id="1202112913213080585">বাতিল করুন</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">কোনও পরবর্তী লেভেল ৪ শিরোনাম নেই</translation>
 <translation id="1212770441379271564">পরবর্তী কয়েকটি শর্টকাট ChromeVox-এর কোনও কমান্ড নয়, কিন্তু তবুও, Chrome থেকে সর্বাধিক সুবিধা পাওয়ার জন্য এগুলি খুবই কার্যকরী ভূমিকা নেয়।
@@ -43,6 +44,7 @@
       Chrome ব্রাউজারের মেনু খুলতে, 'Alt' কীয়ের সাথে 'F' কী প্রেস করুন।</translation>
 <translation id="1213216066620407844">ChromeVox - Chrome কে ভয়েস প্রদান</translation>
 <translation id="1225969361094801578">গাঢ় স্লেট ধূসর</translation>
+<translation id="122928249241119550">আগের বাক্যে যান</translation>
 <translation id="1230503547248836149">বেছে নেওয়া শুরু করার জায়গা</translation>
 <translation id="1236794971743289975">এন্ডনোট</translation>
 <translation id="1237797094773582699">একইভাবে, চার আঙুল দিয়ে ডানদিক থেকে বাঁদিকে সোয়াইপ করলে পূর্ববর্তী বিভাগে যেতে পারবেন। এখনই করে দেখুন!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">ডজার নীল</translation>
 <translation id="2438712309510062123">সাজেস্ট করুন</translation>
 <translation id="2450814015951372393">চেকবাক্স</translation>
+<translation id="2450992626945324272">পরবর্তী বাক্যে যান</translation>
 <translation id="2461822463642141190">বর্তমান</translation>
 <translation id="2462626033734746142">রেডিও বোতাম গ্রুপ</translation>
 <translation id="2467741090055146971">বাদ দিন</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">ক্যাডেট নীল</translation>
 <translation id="4217571870635786043">ডিক্টেশন</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{ড্যাশ}one{#টি ড্যাশ}other{#টি ড্যাশ}}</translation>
+<translation id="4220024144662591089"><ph name="START_PHRASE" /> থেকে <ph name="END_PHRASE" /> বেছে নিন</translation>
 <translation id="4221012616705981690">কোনও পূর্ববর্তী তালিকা নেই</translation>
 <translation id="4225355998815256469">কন্ট্রোলগুলি থেকে</translation>
 <translation id="4230834257931120629">হালকা স্লেট ধূসর</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">একটি তালিকা বাক্স বা কম্বো বাক্স</translation>
+<translation id="613344593214611552">আগের বাক্যটি মুছুন</translation>
 <translation id="6142308968191113180">শিরোলেখ ৪</translation>
 <translation id="6150023170003443621">হলদে সবুজ</translation>
 <translation id="6158882249329863701">সারি <ph name="TABLECELLROWINDEX" /> কলাম <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">পৃষ্ঠাটির একেবারে নিচে চলে যান</translation>
 <translation id="6187190722927752226">সবুজাভ নীল</translation>
 <translation id="6197361807490522975">গাঢ় নীল</translation>
+<translation id="6218813441317556731"><ph name="DELETE_PHRASE" />-এর জায়গায় <ph name="INSERT_PHRASE" /> নামটি ব্যবহার করুন</translation>
 <translation id="6236061028292614533">পরবর্তী শিরোনাম</translation>
 <translation id="6254901459154107917">পরবর্তী সম্পাদনার যোগ্য পাঠ্য অঞ্চল</translation>
 <translation id="6259464875943891919"><ph name="TYPE" /> থেকে প্রস্থান করা৷</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">বর্ণনা তালিকার বিবরণ</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{অ্যামপারসেন্ট}one{#টি অ্যামপারসেন্ট}other{#টি অ্যামপারসেন্ট}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">আগের অক্ষরটি মুছুন</translation>
 <translation id="738899727977260036">স্লেট নীল</translation>
 <translation id="7393979322571982935">সাউন্ড ও সেটিংস</translation>
 <translation id="739763518212184081">পূর্ববর্তী লাইন</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">হালকা সোনালী রড হলুদ</translation>
 <translation id="7543255924852002459">লেবেল বাতিল করুন</translation>
 <translation id="7552432549459840808">সহায়ক Chrome শর্টকাটগুলি</translation>
+<translation id="7553679324939294712"><ph name="BEFORE_PHRASE" />-এর আগে <ph name="INSERT_PHRASE" /> যোগ করুন</translation>
 <translation id="7569983096843329377">কালো</translation>
 <translation id="7579911500627256166">ডট <ph name="DOT" /></translation>
 <translation id="7592060599656252486">কিছু</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">URL এন্ট্রি, পাঠ্য সম্পাদনা করুন</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">আগের রেডিও বোতাম</translation>
+<translation id="7696631298608145306">পরবর্তী শব্দে যান</translation>
 <translation id="7701040980221191251">কিছু নেই</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">খুব ভাল কোয়ালিটির ভয়েস</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">সর্বোচ্চ <ph name="X" /></translation>
 <translation id="84575901236241018">অ্যাক্সেস কী আছে, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">ব্যাকরণগত ভুল ছেড়ে দেওয়া হচ্ছে</translation>
+<translation id="8465573210279050749">আগের শব্দটি মুছুন</translation>
 <translation id="847040613207937740">কোনও পরবর্তী চেকবক্স নেই</translation>
 <translation id="8473540203671727883">মাউস কার্সারের নিচে থাকা টেক্সট পড়ুন</translation>
 <translation id="8476408756881832830">ChromeVox কথা বলতে থাকলে প্লেব্যাক সাময়িকভাবে থামান</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{পাইপ}one{#টি উলম্ব পাইপ}other{#টি উলম্ব পাইপ}}</translation>
 <translation id="8741370088760768424">ইঙ্গিত: বর্তমান আইটেম অ্যাক্টিভেট করতে Search + Space কী প্রেস করুন।</translation>
 <translation id="8743786158317878347">সংগঠিত কন্টেন্ট লিখুন, যেমন সারণীগুলি</translation>
+<translation id="8746846427395705317">আগের শব্দে যান</translation>
 <translation id="8747966237988593539">ক্রমযুক্ত তালিকা</translation>
 <translation id="8749988712346667988">রূপালী</translation>
 <translation id="875769700429317857"><ph name="FILE_NAME" /> ডাউনলোড করা হয়ে গেছে</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">কোনও পূর্ববর্তী বিভাগ নেই</translation>
 <translation id="89720367119469899">অব্যাহতি</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740"><ph name="PHRASE" /> মুছুন</translation>
 <translation id="8986362086234534611">ভুলে যান</translation>
 <translation id="8989104346085848538">বর্তমান ChromeVox স্পিচ বন্ধ করতে, Control কী প্রেস করুন।</translation>
 <translation id="8993737615451556423">রিডিং ভয়েসের গতি বাড়াতে, কমাতে ও পজ করতে, নিয়ন্ত্রণের সুবিধা প্রদান করে</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
index bca9b82..951eb2c 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Narandžasta</translation>
 <translation id="1198865190323699001">Pokreti dodirom</translation>
 <translation id="1201402288615127009">Naprijed</translation>
+<translation id="1202112913213080585">otkaži</translation>
 <translation id="1206619573307042055">pokretni tekst</translation>
 <translation id="1207086294218137981">Nema sljedećeg naslova 4. nivoa</translation>
 <translation id="1212770441379271564">Narednih nekoliko prečica nisu ChromeVox komande, ali su ipak veoma korisne da iskoristite prednosti Chromea.
@@ -43,6 +44,7 @@
     Da otvorite meni preglednika Chrome, pritisnite Alt+F.</translation>
 <translation id="1213216066620407844">ChromeVox – daje glas Chromeu</translation>
 <translation id="1225969361094801578">Veoma tamno siva</translation>
+<translation id="122928249241119550">vrati na prethodnu rečenicu</translation>
 <translation id="1230503547248836149">Početak odabira</translation>
 <translation id="1236794971743289975">Bilješka na kraju</translation>
 <translation id="1237797094773582699">Slično tome, prevlačenje s četiri prsta zdesna ulijevo se može koristiti za prelazak na prethodni odjeljak. Isprobajte sada!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Svijetloplava</translation>
 <translation id="2438712309510062123">Predlaganje</translation>
 <translation id="2450814015951372393">Okvir za odabir</translation>
+<translation id="2450992626945324272">pređi na sljedeću rečenicu</translation>
 <translation id="2461822463642141190">Trenutno</translation>
 <translation id="2462626033734746142">Grupa dugmadi za izbor</translation>
 <translation id="2467741090055146971">poništavanje odabira</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Sivkastoplava</translation>
 <translation id="4217571870635786043">Diktiranje</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{crta}one{# crta}few{# crte}other{# crta}}</translation>
+<translation id="4220024144662591089">odaberi od <ph name="START_PHRASE" /> do <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Nema prethodne liste</translation>
 <translation id="4225355998815256469">Kontrole obrazaca</translation>
 <translation id="4230834257931120629">Svijetlosiva</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">pst</translation>
 <translation id="6122013438240733403">dgm</translation>
 <translation id="6132506484792346370">Okvir s listom ili kombinirani okvir</translation>
+<translation id="613344593214611552">briši prethodnu rečenicu</translation>
 <translation id="6142308968191113180">Naslov 4</translation>
 <translation id="6150023170003443621">Žutozelena</translation>
 <translation id="6158882249329863701">red <ph name="TABLECELLROWINDEX" /> kolona <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Preskočite na dno stranice</translation>
 <translation id="6187190722927752226">Marinsko plava</translation>
 <translation id="6197361807490522975">Tamnoplava</translation>
+<translation id="6218813441317556731">zamijeni <ph name="DELETE_PHRASE" /> s <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Sljedeći naslov</translation>
 <translation id="6254901459154107917">Sljedeće tekstualno područje s mogućnošću uređivanja</translation>
 <translation id="6259464875943891919">Napustitli ste <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Detalj spiska opisa</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{znak &amp;}one{# znak &amp;}few{# znaka &amp;}other{# znakova &amp;}}</translation>
 <translation id="737396357417333429">klk</translation>
+<translation id="7388656272362719103">izbriši prethodni znak</translation>
 <translation id="738899727977260036">Sivoplava</translation>
 <translation id="7393979322571982935">Zvukovi i postavke</translation>
 <translation id="739763518212184081">Prethodni red</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Svijetla zlatnožuta</translation>
 <translation id="7543255924852002459">Odbaci oznaku</translation>
 <translation id="7552432549459840808">Korisne prečice za Chrome</translation>
+<translation id="7553679324939294712">umetni <ph name="INSERT_PHRASE" /> prije <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Crna</translation>
 <translation id="7579911500627256166">tačka <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Neki</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Uređivanje teksta, unos URL-a</translation>
 <translation id="7685589220304187312">altrk</translation>
 <translation id="7693840228159394336">Prethodno dugme za izbor</translation>
+<translation id="7696631298608145306">pređi na sljedeću riječ</translation>
 <translation id="7701040980221191251">Nema</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Prirodni glas</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Maksimalno <ph name="X" /></translation>
 <translation id="84575901236241018">ima pristupni ključ, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Ostavljanje gramatičke greške</translation>
+<translation id="8465573210279050749">briši prethodnu riječ</translation>
 <translation id="847040613207937740">Nema sljedećeg polja za potvrdu</translation>
 <translation id="8473540203671727883">Izgovaraj tekst koji se nalazi ispod kursora miša</translation>
 <translation id="8476408756881832830">Pauziraj reprodukciju kada ChromeVox govori</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{uspravna crta}one{# uspravna crta}few{# uspravne crte}other{# uspravnih crta}}</translation>
 <translation id="8741370088760768424">Savjet: pritisnite tipke za pretraživanje i razmak da aktivirate trenutno odabranu stavku.</translation>
 <translation id="8743786158317878347">unos strukturiranog sadržaja, kao što su tabele</translation>
+<translation id="8746846427395705317">vrati na prethodnu riječ</translation>
 <translation id="8747966237988593539">Uređena lista</translation>
 <translation id="8749988712346667988">Srebrna</translation>
 <translation id="875769700429317857">Završeno je preuzimanje fajla <ph name="FILE_NAME" /></translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Nema prethodnog odjeljka</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">savjet</translation>
+<translation id="898089897833732740">izbriši <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Zaboravi</translation>
 <translation id="8989104346085848538">Da zaustavite govor koji je u toku na ChromeVoxu, pritisnite tipku Ctrl.</translation>
 <translation id="8993737615451556423">Pruža kontrole ubrzavanja, usporavanja i pauziranja glasa čitanja</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
index 0c42868..a61828c9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Oranžová</translation>
 <translation id="1198865190323699001">Dotyková gesta</translation>
 <translation id="1201402288615127009">Další</translation>
+<translation id="1202112913213080585">zrušit</translation>
 <translation id="1206619573307042055">běžící text</translation>
 <translation id="1207086294218137981">Žádný další nadpis 4. úrovně</translation>
 <translation id="1212770441379271564">Následující klávesové zkratky nejsou příkazy nástroje ChromeVox, ale přesto jsou velmi užitečné pro maximální využití Chromu.
@@ -43,6 +44,7 @@
     Chcete-li otevřít nabídku prohlížeče Chrome, stiskněte Alt + F.</translation>
 <translation id="1213216066620407844">ChromeVox – hlas Chromu</translation>
 <translation id="1225969361094801578">Tmavá břidlicová šedá</translation>
+<translation id="122928249241119550">přejít na předchozí větu</translation>
 <translation id="1230503547248836149">Začátek výběru</translation>
 <translation id="1236794971743289975">Koncová poznámka</translation>
 <translation id="1237797094773582699">Přejetím čtyřmi prsty zprava doleva můžete obdobně přejít do předchozí sekce. Vyzkoušejte to.</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Jasně modrá</translation>
 <translation id="2438712309510062123">Navrhnout</translation>
 <translation id="2450814015951372393">Zaškrtávací políčko</translation>
+<translation id="2450992626945324272">přejít na další větu</translation>
 <translation id="2461822463642141190">Aktuální</translation>
 <translation id="2462626033734746142">Skupina přepínačů</translation>
 <translation id="2467741090055146971">zrušit výběr</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Šedomodrá</translation>
 <translation id="4217571870635786043">Diktování</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{spojovník}few{# spojovníky}many{# dashes}other{# spojovníků}}</translation>
+<translation id="4220024144662591089">vybrat od <ph name="START_PHRASE" /> do <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Žádný předchozí seznam není</translation>
 <translation id="4225355998815256469">Ovládací prvky formuláře</translation>
 <translation id="4230834257931120629">Světlá břidlicová šedá</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">navštív</translation>
 <translation id="6122013438240733403">tlčtko</translation>
 <translation id="6132506484792346370">Seznam nebo pole se seznamem</translation>
+<translation id="613344593214611552">smazat předchozí větu</translation>
 <translation id="6142308968191113180">Nadpis 4</translation>
 <translation id="6150023170003443621">Žlutozelená</translation>
 <translation id="6158882249329863701">řádek <ph name="TABLECELLROWINDEX" /> sloupec <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Přejít na konec stránky</translation>
 <translation id="6187190722927752226">Akvamarínová</translation>
 <translation id="6197361807490522975">Tmavě modrá</translation>
+<translation id="6218813441317556731">nahradit <ph name="DELETE_PHRASE" /> textem <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Další nadpis</translation>
 <translation id="6254901459154107917">Další upravitelná textová oblast</translation>
 <translation id="6259464875943891919">Opustili jste prvek <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Podrobnosti v seznamu popisů</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{ampersand}few{# ampersandy}many{# ampersands}other{# ampersandů}}</translation>
 <translation id="737396357417333429">klikatelné</translation>
+<translation id="7388656272362719103">smazat předchozí znak</translation>
 <translation id="738899727977260036">Břidlicová modrá</translation>
 <translation id="7393979322571982935">Zvuky a nastavení</translation>
 <translation id="739763518212184081">Předchozí řádek</translation>
@@ -940,6 +947,7 @@
 <translation id="7533226154149229506">Světle žlutá</translation>
 <translation id="7543255924852002459">Zahodit štítek</translation>
 <translation id="7552432549459840808">Užitečné klávesové zkratky prohlížeče Chrome</translation>
+<translation id="7553679324939294712">vložit <ph name="INSERT_PHRASE" /> před <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Černá</translation>
 <translation id="7579911500627256166">bod <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Některé</translation>
@@ -963,6 +971,7 @@
 <translation id="7684431668231950609">Úprava textu, webová adresa</translation>
 <translation id="7685589220304187312">lišta</translation>
 <translation id="7693840228159394336">Předchozí přepínač</translation>
+<translation id="7696631298608145306">přejít na další slovo</translation>
 <translation id="7701040980221191251">Žádné</translation>
 <translation id="7701196182766842984">auto sezn</translation>
 <translation id="7713139339518499741">Přirozený hlas</translation>
@@ -1070,6 +1079,7 @@
 <translation id="8455868257606149352">Max <ph name="X" /></translation>
 <translation id="84575901236241018">má přístupový klíč <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Opuštění gramatické chyby</translation>
+<translation id="8465573210279050749">smazat předchozí slovo</translation>
 <translation id="847040613207937740">Žádné další zaškrtávací políčko není</translation>
 <translation id="8473540203671727883">Přečíst text pod myší</translation>
 <translation id="8476408756881832830">Při hlasové odezvě ChromeVox pozastavit přehrávání</translation>
@@ -1106,6 +1116,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{svislá čára}few{# svislé čáry}many{# vertical pipes}other{# svislých čar}}</translation>
 <translation id="8741370088760768424">Tip: Stisknutím kombinace kláves Hledat + mezerník aktivujete aktuální položku.</translation>
 <translation id="8743786158317878347">vstoupit do strukturovaného obsahu, například tabulky</translation>
+<translation id="8746846427395705317">přejít na předchozí slovo</translation>
 <translation id="8747966237988593539">Seřazený seznam</translation>
 <translation id="8749988712346667988">Stříbrná</translation>
 <translation id="875769700429317857">Bylo dokončeno stažení souboru <ph name="FILE_NAME" /></translation>
@@ -1133,6 +1144,7 @@
 <translation id="8970172509886453271">Žádná předchozí sekce není</translation>
 <translation id="89720367119469899">Escapovat</translation>
 <translation id="8978496506222343566">popisek</translation>
+<translation id="898089897833732740">smazat <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Odstranit</translation>
 <translation id="8989104346085848538">Aktuální hlasovou odezvu čtečky ChromeVox můžete kdykoliv zastavit stisknutím klávesy Control.</translation>
 <translation id="8993737615451556423">Poskytuje ovládací prvky ke zrychlení, zpomalení a pozastavení hlasového čtení</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
index 74582e06..94be551 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Orange</translation>
 <translation id="1198865190323699001">Berøringsbevægelser</translation>
 <translation id="1201402288615127009">Næste</translation>
+<translation id="1202112913213080585">annuller</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">Der er ikke flere niveau 4-overskrifter</translation>
 <translation id="1212770441379271564">Følgende genveje er ikke ChromeVox-kommandoer, men de kan stadig hjælpe dig med at optimere din Chrome-oplevelse.
@@ -43,6 +44,7 @@
     Tryk på Alt+F for at åbne browsermenuen i Chrome.</translation>
 <translation id="1213216066620407844">ChromeVox – talerør til Chrome</translation>
 <translation id="1225969361094801578">Mørk skifergrå</translation>
+<translation id="122928249241119550">gå til den forrige sætning</translation>
 <translation id="1230503547248836149">Start på markering</translation>
 <translation id="1236794971743289975">Slutnote</translation>
 <translation id="1237797094773582699">På samme måde kan du stryge fra højre mod venstre med fire fingre for at gå til den forrige sektion. Prøv det nu.</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Lys azurblå</translation>
 <translation id="2438712309510062123">Foreslå</translation>
 <translation id="2450814015951372393">Afkrydsningsfelt</translation>
+<translation id="2450992626945324272">gå til den næste sætning</translation>
 <translation id="2461822463642141190">Aktuel</translation>
 <translation id="2462626033734746142">Gruppe af alternativknapper</translation>
 <translation id="2467741090055146971">fjern markering</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Blågrå</translation>
 <translation id="4217571870635786043">Diktering</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{tankestreg}one{# tankestreger}other{# tankestreger}}</translation>
+<translation id="4220024144662591089">vælg mellem <ph name="START_PHRASE" /> og <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Der er ingen forrige lister</translation>
 <translation id="4225355998815256469">Styringselementer for formular</translation>
 <translation id="4230834257931120629">Lys skifergrå</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">knp</translation>
 <translation id="6132506484792346370">Et listefelt eller kombifelt</translation>
+<translation id="613344593214611552">slet den forrige sætning</translation>
 <translation id="6142308968191113180">Overskrift 4</translation>
 <translation id="6150023170003443621">Gulgrøn</translation>
 <translation id="6158882249329863701">række <ph name="TABLECELLROWINDEX" /> kolonne <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Gå til bunden af siden</translation>
 <translation id="6187190722927752226">Akvamarin</translation>
 <translation id="6197361807490522975">Mørkeblå</translation>
+<translation id="6218813441317556731">erstat <ph name="DELETE_PHRASE" /> med <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Næste overskrift</translation>
 <translation id="6254901459154107917">Næste tekstområde, som kan redigeres</translation>
 <translation id="6259464875943891919"><ph name="TYPE" /> er afsluttet.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Oplysning i beskrivelsesliste</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{og-tegn}one{# og-tegn}other{# og-tegn}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">slet det forrige tegn</translation>
 <translation id="738899727977260036">Skiferblå</translation>
 <translation id="7393979322571982935">Lyde og indstillinger</translation>
 <translation id="739763518212184081">Forrige linje</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Lysegul gyldenris</translation>
 <translation id="7543255924852002459">Kassér etiket</translation>
 <translation id="7552432549459840808">Nyttige genveje i Chrome</translation>
+<translation id="7553679324939294712">indsæt <ph name="INSERT_PHRASE" /> før <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Sort</translation>
 <translation id="7579911500627256166">prikken <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Udvalgte</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Rediger tekst, webadresseindtastning</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Forrige alternativknap</translation>
+<translation id="7696631298608145306">gå til det næste ord</translation>
 <translation id="7701040980221191251">Ingen</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Naturlig stemme</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Maksimum <ph name="X" /></translation>
 <translation id="84575901236241018">har hurtigtasten <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Går væk fra grammatikfejlen</translation>
+<translation id="8465573210279050749">slet det forrige ord</translation>
 <translation id="847040613207937740">Der er ikke flere afkrydsningsfelter</translation>
 <translation id="8473540203671727883">Oplæs teksten under markøren</translation>
 <translation id="8476408756881832830">Sæt afspilning på pause, når ChromeVox taler</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{streg}one{# lodrette streger}other{# lodrette streger}}</translation>
 <translation id="8741370088760768424">Tip! Tryk på søgetasten+mellemrumstasten for at aktivere det aktuelle element.</translation>
 <translation id="8743786158317878347">angiv struktureret indhold, f.eks. tabeller</translation>
+<translation id="8746846427395705317">gå til det forrige ord</translation>
 <translation id="8747966237988593539">Sorteret liste</translation>
 <translation id="8749988712346667988">Sølvfarvet</translation>
 <translation id="875769700429317857">Download af <ph name="FILE_NAME" /> er gennemført</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Der er ingen forrige afsnit</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">slet <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Glem</translation>
 <translation id="8989104346085848538">Tryk på Ctrl-tasten for at stoppe oplæsning i ChromeVox.</translation>
 <translation id="8993737615451556423">Giver mulighed for at sænke eller øge hastigheden på oplæsningsstemmen eller sætte den på pause</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
index 2dee744..6a4c8fdf 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Πορτοκαλί</translation>
 <translation id="1198865190323699001">Κινήσεις αφής</translation>
 <translation id="1201402288615127009">Επόμενο</translation>
+<translation id="1202112913213080585">ακύρωση</translation>
 <translation id="1206619573307042055">μαρκίζα</translation>
 <translation id="1207086294218137981">Δεν υπάρχει επόμενη κεφαλίδα επιπέδου 4.</translation>
 <translation id="1212770441379271564">Οι ακόλουθες συντομεύσεις δεν είναι εντολές του ChromeVox, αλλά είναι εξαιρετικά χρήσιμες για να αξιοποιήσετε στο έπακρο το Chrome.
@@ -44,6 +45,7 @@
     Για άνοιγμα του μενού του προγράμματος περιήγησης Chrome, πατήστε Alt+F.</translation>
 <translation id="1213216066620407844">ChromeVox - Δίνει φωνή στο Chrome</translation>
 <translation id="1225969361094801578">Σκούρο γκρι του σχιστόλιθου</translation>
+<translation id="122928249241119550">μετακίνηση στην προηγούμενη πρόταση</translation>
 <translation id="1230503547248836149">Αρχή επιλογής</translation>
 <translation id="1236794971743289975">Σημείωση τέλους</translation>
 <translation id="1237797094773582699">Παρομοίως, μπορείτε να σύρετε από τα δεξιά προς τα αριστερά με τέσσερα δάκτυλα για να μεταβείτε στην προηγούμενη ενότητα. Δοκιμάστε το τώρα!</translation>
@@ -214,6 +216,7 @@
 <translation id="2435422727584637732">Μπλε των Ντότζερ</translation>
 <translation id="2438712309510062123">Πρόταση</translation>
 <translation id="2450814015951372393">Πλαίσιο ελέγχου</translation>
+<translation id="2450992626945324272">μετακίνηση στην επόμενη πρόταση</translation>
 <translation id="2461822463642141190">Τρέχουσα</translation>
 <translation id="2462626033734746142">Ομάδα κουμπιών επιλογής</translation>
 <translation id="2467741090055146971">αποεπιλογή</translation>
@@ -490,6 +493,7 @@
 <translation id="42164919740161077">Ανοιχτό μπλε γκρι</translation>
 <translation id="4217571870635786043">Υπαγόρευση</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{παύλα}other{# παύλες}}</translation>
+<translation id="4220024144662591089">επιλογή από <ph name="START_PHRASE" /> έως <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Δεν υπάρχει προηγούμενη λίστα.</translation>
 <translation id="4225355998815256469">Στοιχεία ελέγχου φόρμας</translation>
 <translation id="4230834257931120629">Ανοιχτό γκρι του σχιστόλιθου</translation>
@@ -760,6 +764,7 @@
 <translation id="611827076493383239">ιστότοπος που επισκεφτήκατε</translation>
 <translation id="6122013438240733403">κουμπί</translation>
 <translation id="6132506484792346370">Ένα πλαίσιο λίστας ή ένα σύνθετο πλαίσιο</translation>
+<translation id="613344593214611552">διαγραφή προηγούμενης πρότασης</translation>
 <translation id="6142308968191113180">Επικεφαλίδα 4</translation>
 <translation id="6150023170003443621">Κιτρινοπράσινο</translation>
 <translation id="6158882249329863701">σειρά <ph name="TABLECELLROWINDEX" /> στήλη <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -769,6 +774,7 @@
 <translation id="6186305613600865047">Μετάβαση στο κάτω μέρος της σελίδας</translation>
 <translation id="6187190722927752226">Γαλάζιο της θάλασσας</translation>
 <translation id="6197361807490522975">Σκούρο μπλε</translation>
+<translation id="6218813441317556731">αντικατάσταση <ph name="DELETE_PHRASE" /> με <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Επόμενη επικεφαλίδα</translation>
 <translation id="6254901459154107917">Επόμενη περιοχή κειμένου με δυνατότητα επεξεργασίας</translation>
 <translation id="6259464875943891919">Έγινε έξοδος από <ph name="TYPE" />.</translation>
@@ -922,6 +928,7 @@
 <translation id="7356610683936413584">Λεπτομέρεια λίστας περιγραφής</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{συμπλεκτικό σύμβολο}other{# συμπλεκτικά σύμβολα}}</translation>
 <translation id="737396357417333429">στοιχείο με δυνατότητα κλικ</translation>
+<translation id="7388656272362719103">διαγραφή προηγούμενου χαρακτήρα</translation>
 <translation id="738899727977260036">Μπλε γκρι</translation>
 <translation id="7393979322571982935">Ήχοι και ρυθμίσεις</translation>
 <translation id="739763518212184081">Προηγούμενη γραμμή</translation>
@@ -942,6 +949,7 @@
 <translation id="7533226154149229506">Ανοιχτή χρυσοκίτρινη ράβδος</translation>
 <translation id="7543255924852002459">Ετικέτα απόρριψης</translation>
 <translation id="7552432549459840808">Χρήσιμες συντομεύσεις Chrome</translation>
+<translation id="7553679324939294712">εισαγωγή <ph name="INSERT_PHRASE" /> πριν από <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Μαύρο</translation>
 <translation id="7579911500627256166">κουκκίδα <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Ορισμένα</translation>
@@ -965,6 +973,7 @@
 <translation id="7684431668231950609">Επεξεργασία κειμένου, καταχώριση διεύθυνσης URL</translation>
 <translation id="7685589220304187312">γραμμή εργαλείων</translation>
 <translation id="7693840228159394336">Προηγούμενο κουμπί επιλογής</translation>
+<translation id="7696631298608145306">μετακίνηση στην επόμενη λέξη</translation>
 <translation id="7701040980221191251">Καμία</translation>
 <translation id="7701196182766842984">αυτόματη συμπλήρωση λίστας</translation>
 <translation id="7713139339518499741">Φυσική φωνή</translation>
@@ -1072,6 +1081,7 @@
 <translation id="8455868257606149352">Μέγιστο <ph name="X" /></translation>
 <translation id="84575901236241018">διαθέτει το κλειδί πρόσβασης, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Αποχώρηση από σφάλμα γραμματικής</translation>
+<translation id="8465573210279050749">διαγραφή προηγούμενης λέξης</translation>
 <translation id="847040613207937740">Δεν υπάρχει επόμενο πλαίσιο ελέγχου.</translation>
 <translation id="8473540203671727883">Εκφώνηση κειμένου κάτω από τον δείκτη του ποντικιού.</translation>
 <translation id="8476408756881832830">Παύση αναπαραγωγής κατά την εκφώνηση από το ChromeVox</translation>
@@ -1108,6 +1118,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{κάθετη παύλα}other{# κάθετες παύλες}}</translation>
 <translation id="8741370088760768424">Υπόδειξη: Πιέστε Αναζήτηση + κενό διάστημα για να ενεργοποιήσετε το τρέχον στοιχείο.</translation>
 <translation id="8743786158317878347">εισαγωγή σε δομημένο περιεχόμενο, όπως πίνακες</translation>
+<translation id="8746846427395705317">μετακίνηση στην προηγούμενη λέξη</translation>
 <translation id="8747966237988593539">Ταξινομημένη λίστα</translation>
 <translation id="8749988712346667988">Ασημί</translation>
 <translation id="875769700429317857">Ολοκληρώθηκε η λήψη του αρχείου <ph name="FILE_NAME" /></translation>
@@ -1135,6 +1146,7 @@
 <translation id="8970172509886453271">Δεν υπάρχει προηγούμενη ενότητα.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">επεξήγηση εργαλείου</translation>
+<translation id="898089897833732740">διαγραφή <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Διαγραφή από τη μνήμη</translation>
 <translation id="8989104346085848538">Για να διακόψετε τυχόν τρέχουσα ομιλία στο ChromeVox, πιέστε το πλήκτρο Control.</translation>
 <translation id="8993737615451556423">Παρέχει στοιχεία ελέγχου για επιτάχυνση, επιβράδυνση και παύση της φωνής ανάγνωσης</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
index e01e673..9e4b668 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">نارنجی</translation>
 <translation id="1198865190323699001">اشاره‌های لمسی</translation>
 <translation id="1201402288615127009">بعدی</translation>
+<translation id="1202112913213080585">لغو</translation>
 <translation id="1206619573307042055">محتوای متحرک</translation>
 <translation id="1207086294218137981">عنوان سطح ۴ بعدی وجود ندارد</translation>
 <translation id="1212770441379271564">‏چند میان‌بر بعدی در میان فرمان‌های ChromeVox نیستند، اما برای استفاده بهتر از Chrome خیلی مفید هستند.
@@ -43,6 +44,7 @@
 برای باز کردن منوی مرورگر Chrome، کلیدهای Alt+F را فشار دهید.</translation>
 <translation id="1213216066620407844">‏ChromeVox - ارائه صدا به Chrome</translation>
 <translation id="1225969361094801578">سربی تیره</translation>
+<translation id="122928249241119550">به جمله قبلی برو</translation>
 <translation id="1230503547248836149">شروع بخش انتخاب‌شده</translation>
 <translation id="1236794971743289975">ته‌نویس</translation>
 <translation id="1237797094773582699">همچنین، با تند کشیدن چهار انگشت از راست به چپ می‌توانید به بخش قبلی بروید. امتحان می‌کنید؟</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">نیلی</translation>
 <translation id="2438712309510062123">پیشنهاد</translation>
 <translation id="2450814015951372393">کادر انتخاب</translation>
+<translation id="2450992626945324272">به جمله بعدی برو</translation>
 <translation id="2461822463642141190">فعلی</translation>
 <translation id="2462626033734746142">گروه دکمه رادیویی</translation>
 <translation id="2467741090055146971">لغو انتخاب</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">آبی لجنی</translation>
 <translation id="4217571870635786043">املا</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{خط تیره}one{# خط تیره}other{# خط تیره}}</translation>
+<translation id="4220024144662591089">از <ph name="START_PHRASE" /> تا <ph name="END_PHRASE" /> را انتخاب کن</translation>
 <translation id="4221012616705981690">فهرست قبلی وجود ندارد</translation>
 <translation id="4225355998815256469">کنترل‌های فرم</translation>
 <translation id="4230834257931120629">سربی روشن</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">کادر فهرست یا کادر ترکیبی</translation>
+<translation id="613344593214611552">جمله قبلی را حذف کن</translation>
 <translation id="6142308968191113180">عنوان ۴</translation>
 <translation id="6150023170003443621">سبز لجنی</translation>
 <translation id="6158882249329863701">ردیف <ph name="TABLECELLROWINDEX" /> ستون <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">رفتن به پایین صفحه</translation>
 <translation id="6187190722927752226">آبی کبود</translation>
 <translation id="6197361807490522975">آبی تیره</translation>
+<translation id="6218813441317556731"><ph name="DELETE_PHRASE" /> را با <ph name="INSERT_PHRASE" /> جایگزین کن</translation>
 <translation id="6236061028292614533">عنوان بعدی</translation>
 <translation id="6254901459154107917">کادر نوشتار قابل‌ویرایش بعدی</translation>
 <translation id="6259464875943891919">از <ph name="TYPE" /> خارج شدید.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">جزئیات فهرست شرح</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{امپرسند}one{# امپرسند}other{# امپرسند}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">نویسه قبلی را حذف کن</translation>
 <translation id="738899727977260036">آبی کربنی</translation>
 <translation id="7393979322571982935">صداها و تنظیمات</translation>
 <translation id="739763518212184081">خط قبلی</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">لیمویی روشن</translation>
 <translation id="7543255924852002459">برچسب صرف‌نظر کردن</translation>
 <translation id="7552432549459840808">‏میان‌برهای مفید Chrome</translation>
+<translation id="7553679324939294712"><ph name="INSERT_PHRASE" /> را قبل‌از <ph name="BEFORE_PHRASE" /> وارد کن</translation>
 <translation id="7569983096843329377">سیاه</translation>
 <translation id="7579911500627256166">نقطه <ph name="DOT" /></translation>
 <translation id="7592060599656252486">برخی</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">ویرایش نوشتار، ورودی نشانی وب</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">دکمه رادیویی قبلی</translation>
+<translation id="7696631298608145306">به کلمه بعدی برو</translation>
 <translation id="7701040980221191251">هیچ‌کدام</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">صدای طبیعی</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">حداکثر <ph name="X" /></translation>
 <translation id="84575901236241018">کلید دسترسی دارد، <ph name="KEY" /></translation>
 <translation id="8463645336674919227">خارج شدن از اشتباه دستور زبانی</translation>
+<translation id="8465573210279050749">کلمه قبلی را حذف کن</translation>
 <translation id="847040613207937740">چارگوش انتخاب بعدی وجود ندارد</translation>
 <translation id="8473540203671727883">خواندن نوشتار زیر نشانگر موشواره</translation>
 <translation id="8476408756881832830">‏توقف بازپخش هنگامی که ChromeVox درحال صحبت کردن است</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{میله}one{# میله عمودی}other{# میله عمودی}}</translation>
 <translation id="8741370088760768424">نکته: برای فعال کردن مورد کنونی، کلیدهای «جستجو» + «فاصله» را فشار دهید.</translation>
 <translation id="8743786158317878347">ورود به محتوای سازمان یافته، مانند جداول</translation>
+<translation id="8746846427395705317">به کلمه قبلی برو</translation>
 <translation id="8747966237988593539">فهرست سفارش داده شده</translation>
 <translation id="8749988712346667988">نقره‌‌ای</translation>
 <translation id="875769700429317857">بارگیری <ph name="FILE_NAME" /> کامل شد</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">بخش قبلی وجود ندارد</translation>
 <translation id="89720367119469899">فرار</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740"><ph name="PHRASE" /> را حذف کن</translation>
 <translation id="8986362086234534611">فراموش شود</translation>
 <translation id="8989104346085848538">‏برای متوقف کردن گفتار فعلی ChromeVox، کلید Control را فشار دهید.</translation>
 <translation id="8993737615451556423">کنترل‌هایی برای افزایش سرعت، کاهش سرعت، و توقف موقت صدای خواندن ارائه می‌دهد</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
index 3b4d3a29..bf11b9cc 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Orange</translation>
 <translation id="1198865190323699001">Mga Touch Gesture</translation>
 <translation id="1201402288615127009">Susunod</translation>
+<translation id="1202112913213080585">kanselahin</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">Walang susunod na heading sa antas 4</translation>
 <translation id="1212770441379271564">Ang susunod na ilang shortcut ay hindi mga command sa ChromeVox, pero napakakapaki-pakinabang pa rin ng mga ito para masulit ang paggamit sa Chrome.
@@ -43,6 +44,7 @@
     Para buksan ang menu ng Chrome browser, pindutin ang Alt+F.</translation>
 <translation id="1213216066620407844">ChromeVox - Nagbibigay ng Boses sa Chrome</translation>
 <translation id="1225969361094801578">Dark Slate Grey</translation>
+<translation id="122928249241119550">pumunta sa nakaraang pangungusap</translation>
 <translation id="1230503547248836149">Simula ng pagpipilian</translation>
 <translation id="1236794971743289975">Endnote</translation>
 <translation id="1237797094773582699">Gayundin, puwede ring mag-swipe pakaliwa gamit ang apat na daliri para lumipat sa nakaraang seksyon. Subukan ito ngayon!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Dodger Blue</translation>
 <translation id="2438712309510062123">Magmungkahi</translation>
 <translation id="2450814015951372393">Check box</translation>
+<translation id="2450992626945324272">pumunta sa susunod na pangungusap</translation>
 <translation id="2461822463642141190">Kasalukuyan</translation>
 <translation id="2462626033734746142">Pangkat ng radio button</translation>
 <translation id="2467741090055146971">i-unselect</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Cadet Blue</translation>
 <translation id="4217571870635786043">Pagdidikta</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{gitling}one{# gitling}other{# na gitling}}</translation>
+<translation id="4220024144662591089">piliin mula <ph name="START_PHRASE" /> hanggang <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Walang nakaraang listahan</translation>
 <translation id="4225355998815256469">Mga Control ng Form</translation>
 <translation id="4230834257931120629">Light Slate Grey</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">Isang listbox o combo box</translation>
+<translation id="613344593214611552">i-delete ang nakaraang pangungusap</translation>
 <translation id="6142308968191113180">Heading 4</translation>
 <translation id="6150023170003443621">Yellow Green</translation>
 <translation id="6158882249329863701">row <ph name="TABLECELLROWINDEX" /> column <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Pumunta sa ibaba ng page</translation>
 <translation id="6187190722927752226">Aquamarine</translation>
 <translation id="6197361807490522975">Dark Blue</translation>
+<translation id="6218813441317556731">palitan ang <ph name="DELETE_PHRASE" /> ng <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Susunod na heading</translation>
 <translation id="6254901459154107917">Susunod na na-e-edit na lugar ng text</translation>
 <translation id="6259464875943891919">Lumabas sa <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Detalye ng listahan ng paglalarawan</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{ampersand}one{# ampersand}other{# na ampersand}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">i-delete ang nakaraang character</translation>
 <translation id="738899727977260036">Slate Blue</translation>
 <translation id="7393979322571982935">Mga tunog at setting</translation>
 <translation id="739763518212184081">Nakaraang Linya</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Light Golden Rod Yellow</translation>
 <translation id="7543255924852002459">I-discard ang label</translation>
 <translation id="7552432549459840808">Mga Kapaki-pakinabang na Shortcut sa Chrome</translation>
+<translation id="7553679324939294712">ilagay ang <ph name="INSERT_PHRASE" /> bago ang <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Itim</translation>
 <translation id="7579911500627256166">dot <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Ilan</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">I-edit ang text, entry ng URL</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Nakaraang radio button</translation>
+<translation id="7696631298608145306">pumunta sa susunod na salita</translation>
 <translation id="7701040980221191251">Wala</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Natural na boses</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Max <ph name="X" /></translation>
 <translation id="84575901236241018">may access key, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Umaalis sa error sa grammar</translation>
+<translation id="8465573210279050749">i-delete ang nakaraang salita</translation>
 <translation id="847040613207937740">Walang susunod na checkbox</translation>
 <translation id="8473540203671727883">Bigkasin ang text na hino-hover ng cursor</translation>
 <translation id="8476408756881832830">I-pause ang pag-playback kapag nagsasalita ang ChromeVox</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{pipe}one{# vertical pipe}other{# na vertical pipe}}</translation>
 <translation id="8741370088760768424">Hint: Pindutin ang Search + Space para i-activate ang kasalukuyang item.</translation>
 <translation id="8743786158317878347">maglagay ng nakabalangkas na nilalaman, gaya ng mga talahanayan</translation>
+<translation id="8746846427395705317">pumunta sa nakaraang salita</translation>
 <translation id="8747966237988593539">Nakaayos na Listahan</translation>
 <translation id="8749988712346667988">Silver</translation>
 <translation id="875769700429317857">Nakumpleto ang pag-download ng <ph name="FILE_NAME" /></translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Walang nakaraang seksyon</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">i-delete ang <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Kalimutan</translation>
 <translation id="8989104346085848538">Para ihinto ang anumang kasalukuyang pagsasalita ng ChromeVox, pindutin ang Control key.</translation>
 <translation id="8993737615451556423">Nagbibigay ng mga kontrol para pabilisin, pabagalin, at i-pause ang boses sa pagbabasa</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
index ba85648..818cf59 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Кызгылт сары</translation>
 <translation id="1198865190323699001">Тийүү жаңсоолору</translation>
 <translation id="1201402288615127009">Кийинки</translation>
+<translation id="1202112913213080585">токтотуу</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">Кийинки 4-деңгээлдин башкы аталышы жок</translation>
 <translation id="1212770441379271564">Төмөнкү ыкчам баскычтар ChromeVox'тун башкаруу баскычтарына кирбейт, бирок Chrome'ду колдонууга абдан пайдасы тиет.
@@ -43,6 +44,7 @@
     Chrome серепчисинин менюсун ачуу үчүн Alt+F баскычтарын басыңыз.</translation>
 <translation id="1213216066620407844">ChromeVox – Chrome'го үн берүү</translation>
 <translation id="1225969361094801578">Күңүрт көгүш боз</translation>
+<translation id="122928249241119550">мурунку сүйлөмгө өтүү</translation>
 <translation id="1230503547248836149">Тандоону баштоо</translation>
 <translation id="1236794971743289975">Түшүндүрмө</translation>
 <translation id="1237797094773582699">Ушул сыяктуу эле, мурунку бөлүмгө өтүү үчүн экранды төрт манжаңыз менен оңдон солго сүрүңүз. Азыр байкап көрүңүз!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Ачык көк</translation>
 <translation id="2438712309510062123">Сунуштоо</translation>
 <translation id="2450814015951372393">Белги кутусу</translation>
+<translation id="2450992626945324272">кийинки сүйлөмгө өтүү</translation>
 <translation id="2461822463642141190">Учурда</translation>
 <translation id="2462626033734746142">Радио баскыч тобу</translation>
 <translation id="2467741090055146971">тандоодон чыгаруу</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Бозомтук көк</translation>
 <translation id="4217571870635786043">Үн менен жазуу</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{тире}other{# тире}}</translation>
+<translation id="4220024144662591089"><ph name="START_PHRASE" /> – <ph name="END_PHRASE" /> тандоо</translation>
 <translation id="4221012616705981690">Мурунку тизме жок</translation>
 <translation id="4225355998815256469">Формаларды башкаруу элементтери</translation>
 <translation id="4230834257931120629">Күл түстүү боз</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">Тизме кутусу же айкалыштырылган куту</translation>
+<translation id="613344593214611552">мурунку сүйлөмдү өчүрүү</translation>
 <translation id="6142308968191113180">4-баш аты</translation>
 <translation id="6150023170003443621">Саргылт жашыл</translation>
 <translation id="6158882249329863701">сап <ph name="TABLECELLROWINDEX" /> тилке <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Барактын аягына секирүү</translation>
 <translation id="6187190722927752226">Аквамарин</translation>
 <translation id="6197361807490522975">Кочкул көк</translation>
+<translation id="6218813441317556731"><ph name="DELETE_PHRASE" /> <ph name="INSERT_PHRASE" /> менен алмаштыруу</translation>
 <translation id="6236061028292614533">Кийинки баш аты</translation>
 <translation id="6254901459154107917">Кийинки түзөтмө текст аймагы</translation>
 <translation id="6259464875943891919"><ph name="TYPE" /> чыкты.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Сүрөттөмө тизмесинин чоо-жайы</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{амперсанд}other{# амперсанд}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">мурунку символду өчүрүү</translation>
 <translation id="738899727977260036">Көгүш боз</translation>
 <translation id="7393979322571982935">Добуштар жана жөндөөлөр</translation>
 <translation id="739763518212184081">Мурунку сап</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Ач кызгылтым алтын түстүү сары</translation>
 <translation id="7543255924852002459">Энбелгини жоюу</translation>
 <translation id="7552432549459840808">Chrome'дун пайдалуу ыкчам баскычтары</translation>
+<translation id="7553679324939294712"><ph name="INSERT_PHRASE" /> <ph name="BEFORE_PHRASE" /> чейин киргизүү</translation>
 <translation id="7569983096843329377">Кара</translation>
 <translation id="7579911500627256166"><ph name="DOT" /> чекиттери</translation>
 <translation id="7592060599656252486">Айрымдар</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Киргизилген текстти, URL дарегин түзөтүү</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Мурунку радио баскычы</translation>
+<translation id="7696631298608145306">кийинки сөзгө өтүү</translation>
 <translation id="7701040980221191251">Эч бир</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Кадимки үн</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Эң көп <ph name="X" /></translation>
 <translation id="84575901236241018">мүмкүндүк ачкычы бар, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Грамматикалык ката оңдолгон жок</translation>
+<translation id="8465573210279050749">мурунку сөздү өчүрүү</translation>
 <translation id="847040613207937740">Кийинки белгилөө кутучасы жок</translation>
 <translation id="8473540203671727883">Чычкандын астындагы текстти окуу</translation>
 <translation id="8476408756881832830">ChromeVox сүйлөп жатканда аудио тындырылсын</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{түтүк}other{# тигинен турган түтүк}}</translation>
 <translation id="8741370088760768424">Кыйытма: Учурдагы объектти жандандыруу үчүн Издөө + Боштук баскычтарын басыңыз.</translation>
 <translation id="8743786158317878347">жадыбалдар сыяктуу түзүмдөштүрүлгөн мазмунга кирүү</translation>
+<translation id="8746846427395705317">мурунку сөзгө өтүү</translation>
 <translation id="8747966237988593539">Иреттелген тизме</translation>
 <translation id="8749988712346667988">Күмүш</translation>
 <translation id="875769700429317857"><ph name="FILE_NAME" /> файлын жүктөп алуу аяктады</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Мурунку бөлүм жок</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740"><ph name="PHRASE" /> өчүрүү</translation>
 <translation id="8986362086234534611">Унутуу</translation>
 <translation id="8989104346085848538">ChromeVox окуп жатканда токтотуу үчүн Control баскычын басыңыз.</translation>
 <translation id="8993737615451556423">Окуу ылдамдыгын тездетип, жайлатып жана тындыра турган башкаруу элементтерин колдоносуз</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb
index c89e8143..6a8a807b 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Портокалова</translation>
 <translation id="1198865190323699001">Движења за допир</translation>
 <translation id="1201402288615127009">Следно</translation>
+<translation id="1202112913213080585">откажи</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">Нема следен наслов на ниво 4</translation>
 <translation id="1212770441379271564">Следните неколку кратенки не се наредби на ChromeVox, но сепак се многу корисни за да го извлечете максимумот од Chrome.
@@ -43,6 +44,7 @@
     За да го отворите менито на прелистувачот Chrome, притиснете Alt + F.</translation>
 <translation id="1213216066620407844">ChromeVox - Давање глас на Chrome</translation>
 <translation id="1225969361094801578">Темносива како шкрилец</translation>
+<translation id="122928249241119550">преместете на претходната реченица</translation>
 <translation id="1230503547248836149">Почеток на изборот</translation>
 <translation id="1236794971743289975">Референца</translation>
 <translation id="1237797094773582699">Слично, повлекувањето оддесно налево со четири прста може да се користи за да се преместите на претходниот дел. Пробајте сега.</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Сина како Доџерси</translation>
 <translation id="2438712309510062123">Предложете</translation>
 <translation id="2450814015951372393">Поле за избор</translation>
+<translation id="2450992626945324272">преместете на следната реченица</translation>
 <translation id="2461822463642141190">Моментално</translation>
 <translation id="2462626033734746142">Група радио-копчиња</translation>
 <translation id="2467741090055146971">поништи избор</translation>
@@ -490,6 +493,7 @@
 <translation id="42164919740161077">Сивосина</translation>
 <translation id="4217571870635786043">Диктат</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{цртичка}one{# цртичка}other{# цртички}}</translation>
+<translation id="4220024144662591089">изберете од „<ph name="START_PHRASE" />“ до „<ph name="END_PHRASE" />“</translation>
 <translation id="4221012616705981690">Нема претходен список</translation>
 <translation id="4225355998815256469">Контроли за формулари</translation>
 <translation id="4230834257931120629">Светлосива како шкрилец</translation>
@@ -760,6 +764,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">Список или поле со комбинации</translation>
+<translation id="613344593214611552">избришете ја претходната реченица</translation>
 <translation id="6142308968191113180">Заглавие 4</translation>
 <translation id="6150023170003443621">Жолто-зелена</translation>
 <translation id="6158882249329863701">ред <ph name="TABLECELLROWINDEX" />, колона <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -769,6 +774,7 @@
 <translation id="6186305613600865047">Скокни до дното на страницата</translation>
 <translation id="6187190722927752226">Боја на аквамарин</translation>
 <translation id="6197361807490522975">Темносина</translation>
+<translation id="6218813441317556731">заменете „<ph name="DELETE_PHRASE" />“ со „<ph name="INSERT_PHRASE" />“</translation>
 <translation id="6236061028292614533">Следен наслов</translation>
 <translation id="6254901459154107917">Следна област за уредување текст</translation>
 <translation id="6259464875943891919">Излеговте од <ph name="TYPE" />.</translation>
@@ -922,6 +928,7 @@
 <translation id="7356610683936413584">Детали за списокот со опис</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{амперсанд}one{# амперсанди}other{# амперсанди}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">избришете го претходниот знак</translation>
 <translation id="738899727977260036">Сина како шкрилец</translation>
 <translation id="7393979322571982935">Звуци и поставки</translation>
 <translation id="739763518212184081">Претходна линија</translation>
@@ -942,6 +949,7 @@
 <translation id="7533226154149229506">Светлозлатеста-жолта</translation>
 <translation id="7543255924852002459">Отфрли етикета</translation>
 <translation id="7552432549459840808">Корисни кратенки на Chrome</translation>
+<translation id="7553679324939294712">вметнете „<ph name="INSERT_PHRASE" />“ пред „<ph name="BEFORE_PHRASE" />“</translation>
 <translation id="7569983096843329377">Црна</translation>
 <translation id="7579911500627256166">точка <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Некои</translation>
@@ -965,6 +973,7 @@
 <translation id="7684431668231950609">Измени текст, внес на URL-адреса</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Претходно радио-копче</translation>
+<translation id="7696631298608145306">преместете на следниот збор</translation>
 <translation id="7701040980221191251">Нема</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Природен глас</translation>
@@ -1072,6 +1081,7 @@
 <translation id="8455868257606149352">Макс. <ph name="X" /></translation>
 <translation id="84575901236241018">има пристапен клуч, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Оставате граматичка грешка</translation>
+<translation id="8465573210279050749">избришете го претходниот збор</translation>
 <translation id="847040613207937740">Нема следно поле за избор</translation>
 <translation id="8473540203671727883">Изговарај го текстот под глувчето</translation>
 <translation id="8476408756881832830">Паузирај ja репродукцијата кога зборува ChromeVox</translation>
@@ -1108,6 +1118,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{цевка}one{# вертикална цевка}other{# вертикални цевки}}</translation>
 <translation id="8741370088760768424">Совет: притиснете Search + празно место за да ја активирате тековната ставка.</translation>
 <translation id="8743786158317878347">внесува структурирана содржина како табели</translation>
+<translation id="8746846427395705317">преместете на претходниот збор</translation>
 <translation id="8747966237988593539">Подреден список</translation>
 <translation id="8749988712346667988">Сребрена</translation>
 <translation id="875769700429317857">Преземањето на <ph name="FILE_NAME" /> заврши</translation>
@@ -1135,6 +1146,7 @@
 <translation id="8970172509886453271">Нема претходна секција</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">избришете „<ph name="PHRASE" />“</translation>
 <translation id="8986362086234534611">Заборави</translation>
 <translation id="8989104346085848538">За да го запрете тековниот говор на ChromeVox, притиснете го копчето Control.</translation>
 <translation id="8993737615451556423">Дава контроли за забрзување, забавување и паузирање на гласот за читање</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
index 84e6762f..8be5e67 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Улбар шар</translation>
 <translation id="1198865190323699001">Хүрэх зангаа</translation>
 <translation id="1201402288615127009">Дараагийнх</translation>
+<translation id="1202112913213080585">цуцал</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">Дараагийн 4-р түвшний гарчиг алга байна</translation>
 <translation id="1212770441379271564">Дараагийн хэдэн товчлол нь ChromeVox-н тушаал биш боловч Chrome-г бүрэн ашиглахад ихээхэн тустай.
@@ -43,6 +44,7 @@
     Chrome хөтчийн цэсийг нээхийн тулд Alt+F-г дарна уу.</translation>
 <translation id="1213216066620407844">ChromeVox - Chrome-д дуу оруулах</translation>
 <translation id="1225969361094801578">Гүн хөх саарал</translation>
+<translation id="122928249241119550">өмнөх өгүүлбэр лүү оч</translation>
 <translation id="1230503547248836149">Сонголтын эхлэл</translation>
 <translation id="1236794971743289975">Нэмэлт тэмдэглэл</translation>
 <translation id="1237797094773582699">Үүний адилаар дөрвөн хуруугаараа баруунаас зүүн тийш шудрахыг өмнөх хэсэг рүү очиход ашиглах боломжтой. Одоо туршиж үзээрэй!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Цайвар цэнхэр</translation>
 <translation id="2438712309510062123">Санал болгох</translation>
 <translation id="2450814015951372393">Олон сонголттой талбар</translation>
+<translation id="2450992626945324272">дараагийн өгүүлбэр лүү оч</translation>
 <translation id="2461822463642141190">Одоогийн</translation>
 <translation id="2462626033734746142">Радио товчийн бүлэг</translation>
 <translation id="2467741090055146971">сонголтыг болиулах</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Бага зэргийн номин ногоон туяатай бүдэг хөх</translation>
 <translation id="4217571870635786043">Заавар</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{зураас}other{# зурааснууд}}</translation>
+<translation id="4220024144662591089"><ph name="START_PHRASE" />-с <ph name="END_PHRASE" /> хүртэл сонго</translation>
 <translation id="4221012616705981690">Өмнөх жагсаалт алга байна</translation>
 <translation id="4225355998815256469">Маягтын хяналт</translation>
 <translation id="4230834257931120629">Цайвар хөх саарал</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">Жагсаалтын хайрцаг, эсвэл комбо хайрцаг</translation>
+<translation id="613344593214611552">өмнөх өгүүлбэрийг устга</translation>
 <translation id="6142308968191113180">Гарчиг 4</translation>
 <translation id="6150023170003443621">Шар ногоон</translation>
 <translation id="6158882249329863701">мөр <ph name="TABLECELLROWINDEX" /> багана <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Хуудасны доод тал руу очих</translation>
 <translation id="6187190722927752226">Номин ногоон</translation>
 <translation id="6197361807490522975">Хар хөх</translation>
+<translation id="6218813441317556731"><ph name="DELETE_PHRASE" />-г <ph name="INSERT_PHRASE" />-р соль</translation>
 <translation id="6236061028292614533">Дараах толгой хэсэг</translation>
 <translation id="6254901459154107917">Дараагийн засварлаж болох текстийн талбар</translation>
 <translation id="6259464875943891919"><ph name="TYPE" />-ийг гаргасан</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Тайлбарын жагсаалтын дэлгэрэнгүй мэдээлэл</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{&amp; тэмдэг}other{# &amp; тэмдэгүүд}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">өмнөх тэмдэгтийг устга</translation>
 <translation id="738899727977260036">Үнсэн хөх</translation>
 <translation id="7393979322571982935">Дуу чимээ болон тохиргоо</translation>
 <translation id="739763518212184081">Өмнөх шугам</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Бага зэргийн алтан шаргал туяатай цайвар саарал</translation>
 <translation id="7543255924852002459">Шошгыг болих</translation>
 <translation id="7552432549459840808">Chrome-н хэрэгтэй товчлол</translation>
+<translation id="7553679324939294712"><ph name="BEFORE_PHRASE" />-н өмнө <ph name="INSERT_PHRASE" />-г оруул</translation>
 <translation id="7569983096843329377">Хар</translation>
 <translation id="7579911500627256166">цэг <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Зарим</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Бичвэр засварлах, холбоос оруулах</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Өмнөх ганц сонголтот талбар</translation>
+<translation id="7696631298608145306">дараагийн үг рүү оч</translation>
 <translation id="7701040980221191251">Тодорхойгүй</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Төрөлхийн дуу хоолой</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Макс <ph name="X" /></translation>
 <translation id="84575901236241018">нэвтрэх түлхүүртэй, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Дүрмийн алдаанаас гарч байна</translation>
+<translation id="8465573210279050749">өмнөх үгийг устга</translation>
 <translation id="847040613207937740">Дараагийн тэмдэглэх нүд алга байна</translation>
 <translation id="8473540203671727883">Хулганын доорх текстийг хэлнэ үү</translation>
 <translation id="8476408756881832830">ChromeVox-г ярьж байх үед дахин тоглуулахыг түр зогсооно уу</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{ хоолой}other{ # босоо хоолой}}</translation>
 <translation id="8741370088760768424">Заавар: Одоогийн зүйлийг идэвхжүүлэхийн тулд Хайлт + Зай авах товчийг дарна уу.</translation>
 <translation id="8743786158317878347">Хүснэгт гэх мэт бүтэцжүүлсэн мэдээллийг оруулах</translation>
+<translation id="8746846427395705317">өмнөх үг рүү оч</translation>
 <translation id="8747966237988593539">Захиалсан жагсаалт</translation>
 <translation id="8749988712346667988">Мөнгөлөг</translation>
 <translation id="875769700429317857"><ph name="FILE_NAME" />-г татаж дууслаа</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Өмнөх хэсэг алга байна</translation>
 <translation id="89720367119469899">Гарах</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740"><ph name="PHRASE" />-г устга</translation>
 <translation id="8986362086234534611">Мартах</translation>
 <translation id="8989104346085848538">ChromeVox-н одоогийн аливаа яриаг зогсоохын тулд Control товчийг дарна уу.</translation>
 <translation id="8993737615451556423">Унших дуу хоолойг хурдасгах, удаашруулах болон түр зогсоох удирдлагаар хангана</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
index 12cd632..6cfcc076 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">လိမ္မော်ရောင်</translation>
 <translation id="1198865190323699001">တို့ထိမှု လက်ဟန်များ</translation>
 <translation id="1201402288615127009">ရှေ့သို့</translation>
+<translation id="1202112913213080585">မလုပ်တော့ပါ</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">နောက်ထပ် အဆင့် ၄ ခေါင်စီး မရှိပါ</translation>
 <translation id="1212770441379271564">လာမည့် ဖြတ်လမ်းလင့်ခ်အချို့သည် ChromeVox ကွန်မန်းများ မဟုတ်ပါ။ သို့သော် Chrome ကို အကောင်းဆုံးအသုံးချရန် ၎င်းတို့ကလည်း အလွန်အသုံးဝင်ပါသည်။
@@ -43,6 +44,7 @@
     Chrome ဘရောင်ဇာမီနူးကို ဖွင့်ရန် Alt+F ကို နှိပ်ပါ။</translation>
 <translation id="1213216066620407844">ChromeVox - Chrome သို့အသံ ပေး</translation>
 <translation id="1225969361094801578">မီးခိုးရင့်</translation>
+<translation id="122928249241119550">ယခင်ဝါကျသို့ ရွှေ့ပါ</translation>
 <translation id="1230503547248836149">ရွေးချယ်မှုကို စတင်ရန်</translation>
 <translation id="1236794971743289975">အဆုံးသတ် မှတ်ချက်</translation>
 <translation id="1237797094773582699">အလားတူပင် ပြီးခဲ့သောအပိုင်းသို့သွားရန် လက်လေးချောင်းဖြင့် ညာမှဘယ်သို့ ပွတ်ဆွဲခြင်းကို သုံးနိုင်သည်။ ယခု စမ်းကြည့်ပါ။</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">အပြာတောက်တောက်</translation>
 <translation id="2438712309510062123">အကြံပြုရန်</translation>
 <translation id="2450814015951372393">ခြစ်ရန် အကွက်</translation>
+<translation id="2450992626945324272">နောက်ဝါကျသို့ ရွှေ့ပါ</translation>
 <translation id="2461822463642141190">လက်ရှိ</translation>
 <translation id="2462626033734746142">ရေဒီယို ခဘုတ် အုပ်စု</translation>
 <translation id="2467741090055146971">ပြန်ဖြုတ်ခြင်း</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">ရဲတပ်အပြာ</translation>
 <translation id="4217571870635786043">အသံထွက်၍ ဖတ်ပေးခြင်း</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{ဒက်ရှ်}other{# ဒက်ရှ်}}</translation>
+<translation id="4220024144662591089"><ph name="START_PHRASE" /> မှ <ph name="END_PHRASE" /> အထိ မှတ်ပါ</translation>
 <translation id="4221012616705981690">ယခင် စာရင်း မရှိပါ</translation>
 <translation id="4225355998815256469">ဖောင်ထိန်းချုပ်မှုများ</translation>
 <translation id="4230834257931120629">မီးခိုးပြာ အနု</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">စာရင်းအကွက် သို့မဟုတ် ပူးပေါင်းအကွက်</translation>
+<translation id="613344593214611552">ယခင်ဝါကျကို ဖျက်ပါ</translation>
 <translation id="6142308968191113180">ခေါင်းစီး ၄</translation>
 <translation id="6150023170003443621">အစိမ်းဝါ</translation>
 <translation id="6158882249329863701">အတန်း <ph name="TABLECELLROWINDEX" /> ကော်လံ <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">စာမျက်နှာ အောက်ခြေသို့ ခုန်သွားရန်</translation>
 <translation id="6187190722927752226">မြပြာ</translation>
 <translation id="6197361807490522975">အပြာရင့်</translation>
+<translation id="6218813441317556731"><ph name="DELETE_PHRASE" /> ကို <ph name="INSERT_PHRASE" /> ဖြင့် အစားထိုးပါ</translation>
 <translation id="6236061028292614533">နောက် ခေါင်းစီး</translation>
 <translation id="6254901459154107917">တည်းဖြတ်ရနိုင်သည့် စာသား နေရာ နောက်တစ်ခု</translation>
 <translation id="6259464875943891919"><ph name="TYPE" />မှ ထွက်သွားပြီ</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">အကြောင်းအရာ စာရင်း အသေးစိတ်</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{ampersand}other{# ampersandများ}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">ယခင်အက္ခရာကို ဖျက်ပါ</translation>
 <translation id="738899727977260036">မီးခိုးပြာ</translation>
 <translation id="7393979322571982935">အသံနှင့် ဆက်တင်များ</translation>
 <translation id="739763518212184081">ယခင်လိုင်း</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">ရွှေချောင်းဝါ အနု</translation>
 <translation id="7543255924852002459">အညွှန်းကို ပယ်ရန်</translation>
 <translation id="7552432549459840808">အသုံးဝင်သည့် Chrome ဖြတ်လမ်းများ</translation>
+<translation id="7553679324939294712"><ph name="BEFORE_PHRASE" /> မတိုင်မီ <ph name="INSERT_PHRASE" /> ကိုထည့်ပါ</translation>
 <translation id="7569983096843329377">အနက်ရောင်</translation>
 <translation id="7579911500627256166">အစက် <ph name="DOT" /></translation>
 <translation id="7592060599656252486">အချို့</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">စာသား၊ URL ရိုက်ထည့်မှု တည်းဖြတ်ရန်</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">ယခင် ရေဒီယို ခလုတ်</translation>
+<translation id="7696631298608145306">နောက်စကားလုံးသို့ ရွှေ့ပါ</translation>
 <translation id="7701040980221191251">မရှိ</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">ပင်ကိုအသံ</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">အများဆုံး <ph name="X" /></translation>
 <translation id="84575901236241018">အသုံးပြုရန် ကီးရှိ၊ <ph name="KEY" /></translation>
 <translation id="8463645336674919227">သဒ္ဒါအမှားမှ ထွက်သည်</translation>
+<translation id="8465573210279050749">ယခင်စကားလုံးကို ဖျက်ပါ</translation>
 <translation id="847040613207937740">နောက်ထပ် အမှန်ခြစ်ရန်အကွက် မရှိပါ</translation>
 <translation id="8473540203671727883">မောက်စ်အောက်ရှိ စာသားကို အသံထွက်ဖတ်ရန်</translation>
 <translation id="8476408756881832830">ChromeVox စကားပြောနေသည့်အချိန်တွင် ဗီဒီယိုကို ခဏရပ်ရန်</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{ပိုက်}other{# ဒေါင်လိုက်ပိုက်များ}}</translation>
 <translation id="8741370088760768424">သဲလွန်စ- လက်ရှိအရာကို စတင်ရန် 'ရှာဖွေရေး + နေရာခြားခလုတ်' ကို နှိပ်ပါ။</translation>
 <translation id="8743786158317878347">ဇယားများလို ပုံစံချထားသည့် အကြောင်းအရာသို့ ၐင်ရန်</translation>
+<translation id="8746846427395705317">ယခင်စကားလုံးသို့ ရွှေ့ပါ</translation>
 <translation id="8747966237988593539">မှာယူခဲ့သည့် စာရင်း</translation>
 <translation id="8749988712346667988">ငွေ</translation>
 <translation id="875769700429317857"><ph name="FILE_NAME" /> ဒေါင်းလုဒ်လုပ်ပြီးပါပြီ</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">ယခင် ကဏ္ဍ မရှိပါ</translation>
 <translation id="89720367119469899">ထွက်</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740"><ph name="PHRASE" /> ကို ဖျက်ပါ</translation>
 <translation id="8986362086234534611">မေ့ပစ်လိုက်ပါ</translation>
 <translation id="8989104346085848538">လက်ရှိ ChromeVox ပြောဆိုမှုမှန်သမျှကို ရပ်ရန် Control ကီးကို နှိပ်ပါ။</translation>
 <translation id="8993737615451556423">ဖတ်ပြသည့်အသံကို အရှိန်မြှင့်ရန်၊ လျှော့ရန်နှင့် ခဏရပ်ရန် ထိန်းချုပ်နိုင်သည်</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
index d7a300d..4a805ec 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Oransje</translation>
 <translation id="1198865190323699001">Trykkebevegelser</translation>
 <translation id="1201402288615127009">Neste</translation>
+<translation id="1202112913213080585">avbryt</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">Det finnes ingen flere overskrifter på nivå 4</translation>
 <translation id="1212770441379271564">De neste hurtigtastene er ikke ChromeVox-spesifikke kommandoer, men er likevel nyttige for å få mest mulig ut av Chrome.
@@ -43,6 +44,7 @@
 For å åpne Chrome-menyen, trykk på Alt+F.</translation>
 <translation id="1213216066620407844">ChromeVox – gir Chrome en stemme</translation>
 <translation id="1225969361094801578">Mørk skifergrå</translation>
+<translation id="122928249241119550">gå til forrige setning</translation>
 <translation id="1230503547248836149">Starten av utvalget</translation>
 <translation id="1236794971743289975">Sluttnote</translation>
 <translation id="1237797094773582699">Tilsvarende kan du sveipe fra høyre til venstre med fire fingre for å gå til forrige del. Prøv nå!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Sterk blå</translation>
 <translation id="2438712309510062123">Foreslå</translation>
 <translation id="2450814015951372393">Avmerkingsrute</translation>
+<translation id="2450992626945324272">gå til neste setning</translation>
 <translation id="2461822463642141190">Nåværende</translation>
 <translation id="2462626033734746142">Gruppe med alternativknapper</translation>
 <translation id="2467741090055146971">fjern merkingen</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Kadettblå</translation>
 <translation id="4217571870635786043">Diktering</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{tankestrek}other{# tankestreker}}</translation>
+<translation id="4220024144662591089">velg fra <ph name="START_PHRASE" /> til <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Det finnes ingen tidligere lister</translation>
 <translation id="4225355998815256469">Skjemakontroller</translation>
 <translation id="4230834257931120629">Lys skifergrå</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">En listeboks eller et kombinasjonsfelt</translation>
+<translation id="613344593214611552">slett forrige setning</translation>
 <translation id="6142308968191113180">Overskrift 4</translation>
 <translation id="6150023170003443621">Gulgrønn</translation>
 <translation id="6158882249329863701">rad <ph name="TABLECELLROWINDEX" /> kolonne <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Gå til nederst på siden</translation>
 <translation id="6187190722927752226">Havblå</translation>
 <translation id="6197361807490522975">Mørk blå</translation>
+<translation id="6218813441317556731">erstatt <ph name="DELETE_PHRASE" /> med <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Neste overskrift</translation>
 <translation id="6254901459154107917">Neste redigerbare tekstområde</translation>
 <translation id="6259464875943891919">Avsluttet <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Detalj i beskrivelsesliste</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{og-tegn}other{# og-tegn}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">slett forrige tegn</translation>
 <translation id="738899727977260036">Skiferblå</translation>
 <translation id="7393979322571982935">Lyder og innstillinger</translation>
 <translation id="739763518212184081">Forrige linje</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Lys gullris</translation>
 <translation id="7543255924852002459">Forkast-etiketten</translation>
 <translation id="7552432549459840808">Nyttige hurtigtaster i Chrome</translation>
+<translation id="7553679324939294712">sett inn <ph name="INSERT_PHRASE" /> før <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Svart</translation>
 <translation id="7579911500627256166">punkt <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Noe</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Rediger tekst – nettadresseoppføring</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Forrige alternativknapp</translation>
+<translation id="7696631298608145306">gå til neste ord</translation>
 <translation id="7701040980221191251">Ingen</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Naturlig stemme</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Maksimum <ph name="X" /></translation>
 <translation id="84575901236241018">har tilgangstast, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Forlater grammatikkfeilen</translation>
+<translation id="8465573210279050749">slett forrige ord</translation>
 <translation id="847040613207937740">Det finnes ingen flere avmerkingsbokser</translation>
 <translation id="8473540203671727883">Les opp teksten som er under musepekeren</translation>
 <translation id="8476408756881832830">Sett avspillingen på pause når ChromeVox snakker</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{loddrett strek}other{# loddrette streker}}</translation>
 <translation id="8741370088760768424">Tips: Trykk på søketasten + mellomrom for å aktivere det gjeldende elementet.</translation>
 <translation id="8743786158317878347">åpne strukturert innhold, for eksempel tabeller</translation>
+<translation id="8746846427395705317">gå til forrige ord</translation>
 <translation id="8747966237988593539">Nummerert liste</translation>
 <translation id="8749988712346667988">Sølv</translation>
 <translation id="875769700429317857">Nedlastingen av <ph name="FILE_NAME" /> er fullført</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Det finnes ingen tidligere deler</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">slett <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Glem</translation>
 <translation id="8989104346085848538">For å stoppe eventuell ChromeVox-høytlesning som pågår, trykk på Ctrl-tasten.</translation>
 <translation id="8993737615451556423">Gir deg kontroller for å sette lesestemmen på pause og gjøre den raskere eller tregere</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb
index 90e8579..0f809bf 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Laranja</translation>
 <translation id="1198865190323699001">Gestos de toque</translation>
 <translation id="1201402288615127009">Seguinte</translation>
+<translation id="1202112913213080585">cancelar</translation>
 <translation id="1206619573307042055">painel rolante</translation>
 <translation id="1207086294218137981">Não existe nenhum cabeçalho de nível 4 seguinte.</translation>
 <translation id="1212770441379271564">Os próximos atalhos não são comandos do ChromeVox, mas continuam a ser úteis para tirar o máximo partido do Chrome.
@@ -43,6 +44,7 @@
     Para abrir o menu do navegador Chrome, prima Alt + F.</translation>
 <translation id="1213216066620407844">ChromeVox - A dar voz ao Chrome</translation>
 <translation id="1225969361094801578">Cinzento-ardósia escuro</translation>
+<translation id="122928249241119550">mover para a frase anterior</translation>
 <translation id="1230503547248836149">Início da seleção</translation>
 <translation id="1236794971743289975">Nota final</translation>
 <translation id="1237797094773582699">Da mesma forma, pode deslizar rapidamente da direita para a esquerda com quatro dedos para se deslocar para a secção anterior. Experimente agora!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Azul-claro</translation>
 <translation id="2438712309510062123">Sugerir</translation>
 <translation id="2450814015951372393">Caixa de verificação</translation>
+<translation id="2450992626945324272">mover para a frase seguinte</translation>
 <translation id="2461822463642141190">Atual</translation>
 <translation id="2462626033734746142">Grupo de botões de opção</translation>
 <translation id="2467741090055146971">desmarcar</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Azul-cadete</translation>
 <translation id="4217571870635786043">Ditado</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{traço}other{# traços}}</translation>
+<translation id="4220024144662591089">selecionar entre <ph name="START_PHRASE" /> e <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Não existe nenhuma lista anterior.</translation>
 <translation id="4225355998815256469">Controlos de formulário</translation>
 <translation id="4230834257931120629">Cinzento-ardósia claro</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">Uma caixa de lista ou uma caixa de combinação</translation>
+<translation id="613344593214611552">eliminar a frase anterior</translation>
 <translation id="6142308968191113180">Titulo 4</translation>
 <translation id="6150023170003443621">Verde-amarelado</translation>
 <translation id="6158882249329863701">linha <ph name="TABLECELLROWINDEX" />, coluna <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Ir para o fundo da página</translation>
 <translation id="6187190722927752226">Verde-azulado</translation>
 <translation id="6197361807490522975">Azul-escuro</translation>
+<translation id="6218813441317556731">substituir <ph name="DELETE_PHRASE" /> por <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Título seguinte</translation>
 <translation id="6254901459154107917">Área de texto editável seguinte</translation>
 <translation id="6259464875943891919">Saiu de <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Detalhe da lista de descrições</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{e comercial}other{# e comerciais}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">eliminar o caráter anterior</translation>
 <translation id="738899727977260036">Azul-ardósia</translation>
 <translation id="7393979322571982935">Sons e definições</translation>
 <translation id="739763518212184081">Linha anterior</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Amarelo-ouro claro</translation>
 <translation id="7543255924852002459">Ignorar etiqueta</translation>
 <translation id="7552432549459840808">Atalhos úteis do Chrome</translation>
+<translation id="7553679324939294712">inserir <ph name="INSERT_PHRASE" /> antes de <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Preto</translation>
 <translation id="7579911500627256166">ponto <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Alguma</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Editar texto, entrada de URL</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Botão de opção anterior</translation>
+<translation id="7696631298608145306">mover para a palavra seguinte</translation>
 <translation id="7701040980221191251">Nenhuma</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Voz natural</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Máx.: <ph name="X" /></translation>
 <translation id="84575901236241018">tem chave de acesso, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">A sair do erro gramatical…</translation>
+<translation id="8465573210279050749">eliminar a palavra anterior</translation>
 <translation id="847040613207937740">Não existe nenhuma caixa de verificação seguinte.</translation>
 <translation id="8473540203671727883">Pronunciar o texto sob o rato</translation>
 <translation id="8476408756881832830">Colocar reprodução em pausa quando o ChromeVox estiver a falar</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{traço vertical}other{# traços verticais}}</translation>
 <translation id="8741370088760768424">Sugestão: prima a tecla de pesquisa + barra de espaço para ativar o item atual.</translation>
 <translation id="8743786158317878347">inserir o conteúdo estruturado, por exemplo, tabelas</translation>
+<translation id="8746846427395705317">mover para a palavra anterior</translation>
 <translation id="8747966237988593539">Lista ordenada</translation>
 <translation id="8749988712346667988">Prateado</translation>
 <translation id="875769700429317857">A transferência de <ph name="FILE_NAME" /> foi concluída</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Não existe nenhuma secção anterior.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">eliminar <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Esquecer</translation>
 <translation id="8989104346085848538">Para parar qualquer voz do ChromeVox atual, prima a tecla Control.</translation>
 <translation id="8993737615451556423">Fornece controlos para acelerar, abrandar e pausar a voz de leitura.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
index 861b10bd..bdf8679 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Oranžová</translation>
 <translation id="1198865190323699001">Dotykové gestá</translation>
 <translation id="1201402288615127009">Ďalej</translation>
+<translation id="1202112913213080585">zruš</translation>
 <translation id="1206619573307042055">pohyblivý prvok</translation>
 <translation id="1207086294218137981">Žiadny ďalší nadpis štvrtej úrovne</translation>
 <translation id="1212770441379271564">Nasledujúce skratky nie sú príkazy čítačky ChromeVox, ale sú stále veľmi užitočné a pomôžu vám naplno využívať Chrome.
@@ -43,6 +44,7 @@
     Ak chcete otvoriť ponuku prehliadača Chrome, stlačte kombináciu klávesov Alt + F.</translation>
 <translation id="1213216066620407844">ChromeVox – hlas prehliadača Chrome</translation>
 <translation id="1225969361094801578">Tmavobridlicovosivá</translation>
+<translation id="122928249241119550">prejdi na predchádzajúcu vetu</translation>
 <translation id="1230503547248836149">Začiatok výberu</translation>
 <translation id="1236794971743289975">Vysvetlivka</translation>
 <translation id="1237797094773582699">Podobne môžete potiahnutím štyrmi prstami sprava doľava prejsť na predchádzajúcu sekciu. Vyskúšajte to.</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Výrazná modrá</translation>
 <translation id="2438712309510062123">Návrh</translation>
 <translation id="2450814015951372393">Začiarkavacie políčko</translation>
+<translation id="2450992626945324272">prejdi na ďalšiu vetu</translation>
 <translation id="2461822463642141190">Aktuálna</translation>
 <translation id="2462626033734746142">Skupina prepínačov</translation>
 <translation id="2467741090055146971">zrušiť výber</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Námornícka modrá</translation>
 <translation id="4217571870635786043">Diktovanie</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{pomlčka}few{# pomlčky}many{# dashes}other{# pomlčiek}}</translation>
+<translation id="4220024144662591089">vybrať od frázy <ph name="START_PHRASE" /> po frázu <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Žiadny predchádzajúci zoznam</translation>
 <translation id="4225355998815256469">Ovládacie prvky formulára</translation>
 <translation id="4230834257931120629">Svetlobridlicovosivá</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">tlačidlo</translation>
 <translation id="6132506484792346370">Rozbaľovací zoznam alebo pole</translation>
+<translation id="613344593214611552">odstráň predchádzajúcu vetu</translation>
 <translation id="6142308968191113180">Nadpis 4</translation>
 <translation id="6150023170003443621">Žltozelená</translation>
 <translation id="6158882249329863701">riadok <ph name="TABLECELLROWINDEX" /> stĺpec <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Prechod do spodnej časti stránky</translation>
 <translation id="6187190722927752226">Akvamarínová</translation>
 <translation id="6197361807490522975">Tmavomodrá</translation>
+<translation id="6218813441317556731">nahraď <ph name="DELETE_PHRASE" /> výrazom <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Ďalší nadpis</translation>
 <translation id="6254901459154107917">Ďalšia upraviteľná textová oblasť</translation>
 <translation id="6259464875943891919">Ukončené <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Údaj zoznamu popisov</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{ampersand}few{# ampersandy}many{# ampersands}other{# ampersandov}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">odstráň predchádzajúci znak</translation>
 <translation id="738899727977260036">Bridlicovomodrá</translation>
 <translation id="7393979322571982935">Zvuky a nastavenia</translation>
 <translation id="739763518212184081">Predchádzajúci riadok</translation>
@@ -940,6 +947,7 @@
 <translation id="7533226154149229506">Svetlá žltá</translation>
 <translation id="7543255924852002459">Štítok zahodenia</translation>
 <translation id="7552432549459840808">Užitočné skratky Chromu</translation>
+<translation id="7553679324939294712">vlož <ph name="INSERT_PHRASE" /> pred výraz <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Čierna</translation>
 <translation id="7579911500627256166">bodka <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Niektoré</translation>
@@ -963,6 +971,7 @@
 <translation id="7684431668231950609">Upraviť text, vstup webovej adresy</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">Predchádzajúci prepínač</translation>
+<translation id="7696631298608145306">prejdi na ďalšie slovo</translation>
 <translation id="7701040980221191251">Žiadne</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">Prirodzený hlas</translation>
@@ -1070,6 +1079,7 @@
 <translation id="8455868257606149352">Max. <ph name="X" /></translation>
 <translation id="84575901236241018">má prístupový kľúč <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Gramatická chyba sa neopraví</translation>
+<translation id="8465573210279050749">odstráň predchádzajúce slovo</translation>
 <translation id="847040613207937740">Žiadne ďalšie začiarkavacie políčko</translation>
 <translation id="8473540203671727883">Čítať text pod kurzorom myši</translation>
 <translation id="8476408756881832830">Pri hlasovej odozve ChromeVox pozastaviť prehrávanie</translation>
@@ -1106,6 +1116,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{zvislá čiara}few{# zvislé čiary}many{# vertical pipes}other{# zvislých čiar}}</translation>
 <translation id="8741370088760768424">Tip: Aktuálnu položku aktivujete stlačením kombinácie klávesa vyhľadávania + medzerníka.</translation>
 <translation id="8743786158317878347">zadať štruktúrovaný obsah, ako sú napríklad tabuľky</translation>
+<translation id="8746846427395705317">prejdi na predchádzajúce slovo</translation>
 <translation id="8747966237988593539">Číslovaný zoznam</translation>
 <translation id="8749988712346667988">Strieborná</translation>
 <translation id="875769700429317857">Sťahovanie súboru <ph name="FILE_NAME" /> sa dokončilo</translation>
@@ -1133,6 +1144,7 @@
 <translation id="8970172509886453271">Žiadna predchádzajúca sekcia</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">odstráň výraz <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Odstrániť</translation>
 <translation id="8989104346085848538">Akúkoľvek prebiehajúcu reč v čítačke ChromeVox zastavíte stlačením klávesa Control.</translation>
 <translation id="8993737615451556423">Poskytuje ovládanie zrýchlenia, spomalenia a pozastavenia hlasu čítania</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
index edf3327..46b60e0 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Oranžna</translation>
 <translation id="1198865190323699001">Poteze z dotikom</translation>
 <translation id="1201402288615127009">Naprej</translation>
+<translation id="1202112913213080585">preklic</translation>
 <translation id="1206619573307042055">potujoči napis</translation>
 <translation id="1207086294218137981">Ni naslednjega naslova na ravni 4</translation>
 <translation id="1212770441379271564">Naslednje bližnjične tipke niso ukazi za ChromeVox, ampak so kljub temu zelo uporabne, če želite najbolje izkoristiti Chrome.
@@ -43,6 +44,7 @@
     Če želite odpreti meni brskalnika Chrome, pritisnite tipko Alt in črko F.</translation>
 <translation id="1213216066620407844">ChromeVox – naj Chrome govori</translation>
 <translation id="1225969361094801578">Temno skrilasto siva</translation>
+<translation id="122928249241119550">premik na prejšnji stavek</translation>
 <translation id="1230503547248836149">Začetek izbire</translation>
 <translation id="1236794971743289975">Končna opomba</translation>
 <translation id="1237797094773582699">Podobno se lahko z vlečenjem s štirimi prsti od desne proti levi pomaknete na prejšnji razdelek. Preizkusite zdaj.</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Svetlo modra</translation>
 <translation id="2438712309510062123">Predlagajte</translation>
 <translation id="2450814015951372393">Potrditveno polje</translation>
+<translation id="2450992626945324272">premik na naslednji stavek</translation>
 <translation id="2461822463642141190">Trenutno</translation>
 <translation id="2462626033734746142">Skupina izbirnih gumbov</translation>
 <translation id="2467741090055146971">odznači</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Kadetska modra</translation>
 <translation id="4217571870635786043">Narek</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{pomišljaj}one{# pomišljaj}two{# pomišljaja}few{# pomišljaji}other{# pomišljajev}}</translation>
+<translation id="4220024144662591089">izbira od besedne zveze <ph name="START_PHRASE" /> do besedne zveze <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Ni prejšnjega seznama</translation>
 <translation id="4225355998815256469">Kontrolniki obrazcev</translation>
 <translation id="4230834257931120629">Svetla skrilasto siva</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">obs</translation>
 <translation id="6122013438240733403">bgmb</translation>
 <translation id="6132506484792346370">Polje s seznamom ali kombinirano polje</translation>
+<translation id="613344593214611552">brisanje prejšnjega stavka</translation>
 <translation id="6142308968191113180">Naslov 4</translation>
 <translation id="6150023170003443621">Rumenozelena</translation>
 <translation id="6158882249329863701">vrstica <ph name="TABLECELLROWINDEX" />, stolpec <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Na dno strani</translation>
 <translation id="6187190722927752226">Akvamarin</translation>
 <translation id="6197361807490522975">Temno modra</translation>
+<translation id="6218813441317556731">zamenjava besedne zveze <ph name="DELETE_PHRASE" /> z besedno zvezo <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Naslednji naslov</translation>
 <translation id="6254901459154107917">Naslednje besedilno polje, ki ga je mogoče urejati</translation>
 <translation id="6259464875943891919"><ph name="TYPE" /> zaprt.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Podrobnosti seznama opisov</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{znak &amp;}one{# znak &amp;}two{# znaka &amp;}few{# znaki &amp;}other{# znakov &amp;}}</translation>
 <translation id="737396357417333429">klk</translation>
+<translation id="7388656272362719103">brisanje prejšnjega znaka</translation>
 <translation id="738899727977260036">Skrilasto modra</translation>
 <translation id="7393979322571982935">Zvoki in nastavitve</translation>
 <translation id="739763518212184081">Prejšnja vrstica</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Svetla zlatorumena</translation>
 <translation id="7543255924852002459">Oznaka za opustitev</translation>
 <translation id="7552432549459840808">Uporabne bližnjice za Chrome</translation>
+<translation id="7553679324939294712">vstavljanje besedne zveze <ph name="INSERT_PHRASE" /> pred besedno zvezo <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Črna</translation>
 <translation id="7579911500627256166">pika <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Nekatera</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Urejanje besedila, vnos URL-ja</translation>
 <translation id="7685589220304187312">orvrs</translation>
 <translation id="7693840228159394336">Prejšnji izbirni gumb</translation>
+<translation id="7696631298608145306">premik na naslednjo besedo</translation>
 <translation id="7701040980221191251">Nič</translation>
 <translation id="7701196182766842984">samosez</translation>
 <translation id="7713139339518499741">Naraven glas</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Največ <ph name="X" /></translation>
 <translation id="84575901236241018">ima tipko za dostop <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Zapuščanje slovnične napake</translation>
+<translation id="8465573210279050749">brisanje prejšnje besede</translation>
 <translation id="847040613207937740">Ni naslednjega potrditvenega polja</translation>
 <translation id="8473540203671727883">Izgovori besedilo pod miško</translation>
 <translation id="8476408756881832830">Zaustavi predvajanje, ko ChromeVox govori</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{navpičnica}one{# navpičnica}two{# navpičnici}few{# navpičnice}other{# navpičnic}}</translation>
 <translation id="8741370088760768424">Namig: Če želite aktivirati trenutni element, pritisnite tipko za iskanje + preslednico.</translation>
 <translation id="8743786158317878347">odpiranje strukturirane vsebine, npr. tabele</translation>
+<translation id="8746846427395705317">premik na prejšnjo besedo</translation>
 <translation id="8747966237988593539">Naročeni seznam</translation>
 <translation id="8749988712346667988">Srebrna</translation>
 <translation id="875769700429317857">Prenos je dokončan (<ph name="FILE_NAME" />)</translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Ni prejšnjega razdelka</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">opord</translation>
+<translation id="898089897833732740">brisanje besedne zveze <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Pozabi</translation>
 <translation id="8989104346085848538">Če želite ustaviti trenutni govor ChromeVoxa, pritisnite tipko Control.</translation>
 <translation id="8993737615451556423">Omogoča kontrolnike za pospešitev, upočasnitev in zaustavitev bralnega glasu.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
index 9618d04..9eb92cb4 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Narandžasta</translation>
 <translation id="1198865190323699001">Pokreti sa dodirom</translation>
 <translation id="1201402288615127009">Dalje</translation>
+<translation id="1202112913213080585">otkaži</translation>
 <translation id="1206619573307042055">pokretni tekst</translation>
 <translation id="1207086294218137981">Nema sledećeg zaglavlja 4. nivoa</translation>
 <translation id="1212770441379271564">Sledećih par prečica nisu ChromeVox komande, ali su i dalje veoma korisne ako želite da koristite Chrome na najbolji način.
@@ -43,6 +44,7 @@
     Da biste otvorili meni Chrome pregledača, pritisnite Alt + F.</translation>
 <translation id="1213216066620407844">ChromeVox – daje glas Chrome-u</translation>
 <translation id="1225969361094801578">Tamnosiva</translation>
+<translation id="122928249241119550">premesti u prethodnu rečenicu</translation>
 <translation id="1230503547248836149">Početak izbora</translation>
 <translation id="1236794971743289975">Završna napomena</translation>
 <translation id="1237797094773582699">Slično tome, prevlačenje pomoću četiri prsta zdesna nalevo možete da koristite da biste prešli na prethodni odeljak. Isprobajte odmah!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Otvorenoplava</translation>
 <translation id="2438712309510062123">Predložite</translation>
 <translation id="2450814015951372393">Polje za potvrdu</translation>
+<translation id="2450992626945324272">premesti u sledeću rečenicu</translation>
 <translation id="2461822463642141190">Aktuelno</translation>
 <translation id="2462626033734746142">Grupa dugmadi za izbor</translation>
 <translation id="2467741090055146971">poništi izbor</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Sivoplava</translation>
 <translation id="4217571870635786043">Diktiranje</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{crta}one{# crta}few{# crte}other{# crta}}</translation>
+<translation id="4220024144662591089">izaberi od <ph name="START_PHRASE" /> do <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Nema prethodne liste</translation>
 <translation id="4225355998815256469">Kontrole obrazaca</translation>
 <translation id="4230834257931120629">Svetlosiva</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">posećeno</translation>
 <translation id="6122013438240733403">dugme</translation>
 <translation id="6132506484792346370">Okvir sa listom ili kombinovani okvir</translation>
+<translation id="613344593214611552">izbriši prethodnu rečenicu</translation>
 <translation id="6142308968191113180">Zaglavlje 4</translation>
 <translation id="6150023170003443621">Žutozelena</translation>
 <translation id="6158882249329863701"><ph name="TABLECELLROWINDEX" />. red <ph name="TABLECELLCOLUMNINDEX" />. kolona</translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Prelazak na dno stranice</translation>
 <translation id="6187190722927752226">Akvamarin</translation>
 <translation id="6197361807490522975">Tamnoplava</translation>
+<translation id="6218813441317556731">zameni <ph name="DELETE_PHRASE" /> sa <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Sledeće zaglavlje</translation>
 <translation id="6254901459154107917">Sledeća izmenljiva oblast za tekst</translation>
 <translation id="6259464875943891919">Izašli ste iz kontejnera <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Detalj na listi opisa</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{znak &amp;}one{# znak &amp;}few{# znaka &amp;}other{# znakova &amp;}}</translation>
 <translation id="737396357417333429">klik</translation>
+<translation id="7388656272362719103">izbriši prethodni znak</translation>
 <translation id="738899727977260036">Sivoplava</translation>
 <translation id="7393979322571982935">Zvukovi i podešavanja</translation>
 <translation id="739763518212184081">Prethodni red</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Svetla zlatnožuta</translation>
 <translation id="7543255924852002459">Oznaka dugmeta za odbacivanje</translation>
 <translation id="7552432549459840808">Korisne prečice za Chrome</translation>
+<translation id="7553679324939294712">umetni <ph name="INSERT_PHRASE" /> ispred <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Crna</translation>
 <translation id="7579911500627256166">tačka <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Delimičan</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Izmenite tekst, unos za URL</translation>
 <translation id="7685589220304187312">traka s alatkama</translation>
 <translation id="7693840228159394336">Prethodno dugme za izbor</translation>
+<translation id="7696631298608145306">pređi na sledeću reč</translation>
 <translation id="7701040980221191251">Ništa</translation>
 <translation id="7701196182766842984">automatsko dovršavanje liste</translation>
 <translation id="7713139339518499741">Prirodan glas</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Najviše <ph name="X" /></translation>
 <translation id="84575901236241018">ima pristupnu šifru, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Ostavljate gramatičku grešku</translation>
+<translation id="8465573210279050749">izbriši prethodnu reč</translation>
 <translation id="847040613207937740">Nema sledećeg polja za potvrdu</translation>
 <translation id="8473540203671727883">Izgovaraj tekst pod mišem</translation>
 <translation id="8476408756881832830">Pauziraj reprodukciju dok ChromeVox govori</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{uspravna crta}one{# uspravna crta}few{# uspravne crte}other{# uspravnih crta}}</translation>
 <translation id="8741370088760768424">Savet: Pritisnite taster za pretragu + taster za razmak da biste aktivirali aktuelnu stavku.</translation>
 <translation id="8743786158317878347">uđite u strukturirani sadržaj, poput tabela</translation>
+<translation id="8746846427395705317">pređi na prethodnu reč</translation>
 <translation id="8747966237988593539">Uređena lista</translation>
 <translation id="8749988712346667988">Srebrna</translation>
 <translation id="875769700429317857">Preuzimanje je završeno <ph name="FILE_NAME" /></translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Nema prethodnog odeljka</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">objašnjenje</translation>
+<translation id="898089897833732740">izbriši <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Zaboravi</translation>
 <translation id="8989104346085848538">Da biste zaustavili aktuelni ChromeVox govor, pritisnite taster Control.</translation>
 <translation id="8993737615451556423">Pruža kontrole za ubrzavanje, usporavanje i pauziranje glasa za čitanje</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
index cb17b91c..23fa439 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">Наранџаста</translation>
 <translation id="1198865190323699001">Покрети са додиром</translation>
 <translation id="1201402288615127009">Даље</translation>
+<translation id="1202112913213080585">откажи</translation>
 <translation id="1206619573307042055">покретни текст</translation>
 <translation id="1207086294218137981">Нема следећег заглавља 4. нивоа</translation>
 <translation id="1212770441379271564">Следећих пар пречица нису ChromeVox команде, али су и даље веома корисне ако желите да користите Chrome на најбољи начин.
@@ -43,6 +44,7 @@
     Да бисте отворили мени Chrome прегледача, притисните Alt + F.</translation>
 <translation id="1213216066620407844">ChromeVox – даје глас Chrome-у</translation>
 <translation id="1225969361094801578">Тамносива</translation>
+<translation id="122928249241119550">премести у претходну реченицу</translation>
 <translation id="1230503547248836149">Почетак избора</translation>
 <translation id="1236794971743289975">Завршна напомена</translation>
 <translation id="1237797094773582699">Слично томе, превлачење помоћу четири прста здесна налево можете да користите да бисте прешли на претходни одељак. Испробајте одмах!</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">Отвореноплава</translation>
 <translation id="2438712309510062123">Предложите</translation>
 <translation id="2450814015951372393">Поље за потврду</translation>
+<translation id="2450992626945324272">премести у следећу реченицу</translation>
 <translation id="2461822463642141190">Актуелно</translation>
 <translation id="2462626033734746142">Група дугмади за избор</translation>
 <translation id="2467741090055146971">поништи избор</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">Сивоплава</translation>
 <translation id="4217571870635786043">Диктирање</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{црта}one{# црта}few{# црте}other{# црта}}</translation>
+<translation id="4220024144662591089">изабери од <ph name="START_PHRASE" /> до <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">Нема претходне листе</translation>
 <translation id="4225355998815256469">Контроле образаца</translation>
 <translation id="4230834257931120629">Светлосива</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">посећено</translation>
 <translation id="6122013438240733403">дугме</translation>
 <translation id="6132506484792346370">Оквир са листом или комбиновани оквир</translation>
+<translation id="613344593214611552">избриши претходну реченицу</translation>
 <translation id="6142308968191113180">Заглавље 4</translation>
 <translation id="6150023170003443621">Жутозелена</translation>
 <translation id="6158882249329863701"><ph name="TABLECELLROWINDEX" />. ред <ph name="TABLECELLCOLUMNINDEX" />. колона</translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">Прелазак на дно странице</translation>
 <translation id="6187190722927752226">Аквамарин</translation>
 <translation id="6197361807490522975">Тамноплава</translation>
+<translation id="6218813441317556731">замени <ph name="DELETE_PHRASE" /> са <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">Следеће заглавље</translation>
 <translation id="6254901459154107917">Следећа изменљива област за текст</translation>
 <translation id="6259464875943891919">Изашли сте из контејнера <ph name="TYPE" />.</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">Детаљ на листи описа</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{знак &amp;}one{# знак &amp;}few{# знака &amp;}other{# знакова &amp;}}</translation>
 <translation id="737396357417333429">клик</translation>
+<translation id="7388656272362719103">избриши претходни знак</translation>
 <translation id="738899727977260036">Сивоплава</translation>
 <translation id="7393979322571982935">Звукови и подешавања</translation>
 <translation id="739763518212184081">Претходни ред</translation>
@@ -941,6 +948,7 @@
 <translation id="7533226154149229506">Светла златножута</translation>
 <translation id="7543255924852002459">Ознака дугмета за одбацивање</translation>
 <translation id="7552432549459840808">Корисне пречице за Chrome</translation>
+<translation id="7553679324939294712">уметни <ph name="INSERT_PHRASE" /> испред <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">Црна</translation>
 <translation id="7579911500627256166">тачка <ph name="DOT" /></translation>
 <translation id="7592060599656252486">Делимичан</translation>
@@ -964,6 +972,7 @@
 <translation id="7684431668231950609">Измените текст, унос за URL</translation>
 <translation id="7685589220304187312">трака с алаткама</translation>
 <translation id="7693840228159394336">Претходно дугме за избор</translation>
+<translation id="7696631298608145306">пређи на следећу реч</translation>
 <translation id="7701040980221191251">Ништа</translation>
 <translation id="7701196182766842984">аутоматско довршавање листе</translation>
 <translation id="7713139339518499741">Природан глас</translation>
@@ -1071,6 +1080,7 @@
 <translation id="8455868257606149352">Највише <ph name="X" /></translation>
 <translation id="84575901236241018">има приступну шифру, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">Остављате граматичку грешку</translation>
+<translation id="8465573210279050749">избриши претходну реч</translation>
 <translation id="847040613207937740">Нема следећег поља за потврду</translation>
 <translation id="8473540203671727883">Изговарај текст под мишем</translation>
 <translation id="8476408756881832830">Паузирај репродукцију док ChromeVox говори</translation>
@@ -1107,6 +1117,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{усправна црта}one{# усправна црта}few{# усправне црте}other{# усправних црта}}</translation>
 <translation id="8741370088760768424">Савет: Притисните тастер за претрагу + тастер за размак да бисте активирали актуелну ставку.</translation>
 <translation id="8743786158317878347">уђите у структурирани садржај, попут табела</translation>
+<translation id="8746846427395705317">пређи на претходну реч</translation>
 <translation id="8747966237988593539">Уређена листа</translation>
 <translation id="8749988712346667988">Сребрна</translation>
 <translation id="875769700429317857">Преузимање је завршено <ph name="FILE_NAME" /></translation>
@@ -1134,6 +1145,7 @@
 <translation id="8970172509886453271">Нема претходног одељка</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">објашњење</translation>
+<translation id="898089897833732740">избриши <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">Заборави</translation>
 <translation id="8989104346085848538">Да бисте зауставили актуелни ChromeVox говор, притисните тастер Control.</translation>
 <translation id="8993737615451556423">Пружа контроле за убрзавање, успоравање и паузирање гласа за читање</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
index af4d864..b43efcf9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">నారింజ రంగు</translation>
 <translation id="1198865190323699001">తాకే సంజ్ఞలు</translation>
 <translation id="1201402288615127009">తరువాత</translation>
+<translation id="1202112913213080585">రద్దు చేయండి</translation>
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1207086294218137981">తర్వాత స్థాయి 4 శీర్షిక లేదు</translation>
 <translation id="1212770441379271564">ఈ వాక్యం తర్వాత అందించిన కొన్ని షార్ట్‌కట్‌లు ChromeVox ఆదేశాలు కావు, అయినప్పటికీ Chrome నుండి అత్యధిక ప్రయోజనాలు పొందడంలో ఇవి చాలా ఉపయోగకరంగా ఉంటాయి.
@@ -43,6 +44,7 @@
 Chrome బ్రౌజర్ మెనూను తెరవడానికి, 'Alt+F'ను నొక్కండి.</translation>
 <translation id="1213216066620407844">ChromeVox - Chromeకు వాయిస్‌ను ఇస్తోంది</translation>
 <translation id="1225969361094801578">ముదురు మేఘవర్ణ బూడిద రంగు</translation>
+<translation id="122928249241119550">మునుపటి వాక్యానికి వెళ్లండి</translation>
 <translation id="1230503547248836149">ఎంపికను ప్రారంభించు</translation>
 <translation id="1236794971743289975">ఎండ్‌నోట్</translation>
 <translation id="1237797094773582699">అదే విధంగా, మునుపటి విభాగానికి వెళ్లడానికి కుడి నుండి ఎడమ వైపునకు నాలుగు వేళ్లతో స్వైప్ చేయవచ్చు. దీన్ని ఇప్పుడే ట్రై చేయండి!</translation>
@@ -214,6 +216,7 @@
 <translation id="2435422727584637732">కాంతివంతమైన నీలి రంగు</translation>
 <translation id="2438712309510062123">సూచించండి</translation>
 <translation id="2450814015951372393">చెక్‌ బాక్స్</translation>
+<translation id="2450992626945324272">తర్వాత వాక్యానికి వెళ్లండి</translation>
 <translation id="2461822463642141190">ప్రస్తుత</translation>
 <translation id="2462626033734746142">రేడియో బటన్ గ్రూప్‌</translation>
 <translation id="2467741090055146971">ఎంపిక చేసిన దానిని రద్దు చేయండి</translation>
@@ -490,6 +493,7 @@
 <translation id="42164919740161077">బూడిద నీలి రంగు</translation>
 <translation id="4217571870635786043">డిక్టేషన్</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{అడ్డగీత}other{# అడ్డగీతలు}}</translation>
+<translation id="4220024144662591089"><ph name="START_PHRASE" /> నుండి <ph name="END_PHRASE" /> వరకు ఎంచుకోండి</translation>
 <translation id="4221012616705981690">మునుపటి లిస్ట్‌ లేదు</translation>
 <translation id="4225355998815256469">ఫారమ్ నియంత్రణలు</translation>
 <translation id="4230834257931120629">లేత మేఘవర్ణపు బూడిద రంగు</translation>
@@ -760,6 +764,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">btn</translation>
 <translation id="6132506484792346370">జాబితాపెట్టె లేదా కాంబో పెట్టె</translation>
+<translation id="613344593214611552">మునుపటి వాక్యాన్ని తొలగించండి</translation>
 <translation id="6142308968191113180">శీర్షిక 4</translation>
 <translation id="6150023170003443621">పసుపు ఆకుపచ్చ</translation>
 <translation id="6158882249329863701"><ph name="TABLECELLROWINDEX" />వ అడ్డు వరుస <ph name="TABLECELLCOLUMNINDEX" />వ నిలువు వరుస</translation>
@@ -769,6 +774,7 @@
 <translation id="6186305613600865047">పేజీ దిగువకు వెళ్లండి</translation>
 <translation id="6187190722927752226">సముద్ర నీలం</translation>
 <translation id="6197361807490522975">ముదురు నీలి రంగు</translation>
+<translation id="6218813441317556731">'<ph name="DELETE_PHRASE" />'ను '<ph name="INSERT_PHRASE" />'తో రీప్లేస్ చేయండి</translation>
 <translation id="6236061028292614533">తరువాత శీర్షిక</translation>
 <translation id="6254901459154107917">తరువాత సవరించగల వచన ప్రదేశం</translation>
 <translation id="6259464875943891919"><ph name="TYPE" /> నుండి నిష్క్రమించారు.</translation>
@@ -922,6 +928,7 @@
 <translation id="7356610683936413584">వివరణ లిస్ట్‌ వివరం</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{ఆంపర్సండ్ గుర్తు}other{# ఆంపర్సండ్ గుర్తులు}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">మునుపటి అక్షరాన్ని తొలగించండి</translation>
 <translation id="738899727977260036">మేఘ వర్ణపు నీలం రంగు</translation>
 <translation id="7393979322571982935">సౌండ్‌లు, సెట్టింగ్‌లు</translation>
 <translation id="739763518212184081">మునుపటి పంక్తి</translation>
@@ -942,6 +949,7 @@
 <translation id="7533226154149229506">లేత బంగారం కడ్డీ పసుపు</translation>
 <translation id="7543255924852002459">లేబుల్‌ను విస్మరించండి</translation>
 <translation id="7552432549459840808">సహాయకరమైన Chrome షార్ట్‌కట్‌లు</translation>
+<translation id="7553679324939294712">'<ph name="BEFORE_PHRASE" />'కు ముందు '<ph name="INSERT_PHRASE" />'ను చేర్చండి</translation>
 <translation id="7569983096843329377">నలుపు</translation>
 <translation id="7579911500627256166">చుక్క <ph name="DOT" /></translation>
 <translation id="7592060599656252486">కొన్ని</translation>
@@ -965,6 +973,7 @@
 <translation id="7684431668231950609">వచనం, URL నమోదును ఎడిట్ చేయండి</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">మునుపటి రేడియో బటన్</translation>
+<translation id="7696631298608145306">తర్వాత పదానికి వెళ్లండి</translation>
 <translation id="7701040980221191251">ఏదీ లేదు</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">సహజ వాయిస్</translation>
@@ -1072,6 +1081,7 @@
 <translation id="8455868257606149352">గరిష్ఠం <ph name="X" /></translation>
 <translation id="84575901236241018">యాక్సెస్ కీ కలిగి ఉంది, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">వ్యాకరణ దోషాన్ని వదిలి పెడుతున్నారు</translation>
+<translation id="8465573210279050749">మునుపటి పదాన్ని తొలగించండి</translation>
 <translation id="847040613207937740">తర్వాత చెక్‌బాక్స్ లేదు</translation>
 <translation id="8473540203671727883">మౌస్ కింద ఉన్న వచనాన్ని చదువు</translation>
 <translation id="8476408756881832830">ChromeVox మాట్లాడుతున్నప్పుడు ప్లేబ్యాక్‌ను పాజ్ చేయి</translation>
@@ -1108,6 +1118,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{పైప్ గుర్తు}other{# నిలువు పైప్ గుర్తులు}}</translation>
 <translation id="8741370088760768424">సూచన: ప్రస్తుత ఐటెమ్‌ను యాక్టివేట్ చేయడానికి సెర్చ్ + స్పేస్‌ను నొక్కండి.</translation>
 <translation id="8743786158317878347">పట్టికల వంటి ఆకృతీకరించిన కంటెంట్‌లోకి ప్రవేశించండి</translation>
+<translation id="8746846427395705317">మునుపటి పదానికి వెళ్లండి</translation>
 <translation id="8747966237988593539">క్రమం చేసిన లిస్ట్‌</translation>
 <translation id="8749988712346667988">వెండి</translation>
 <translation id="875769700429317857"><ph name="FILE_NAME" />ను డౌన్‌లోడ్ చేయడం పూర్తయింది</translation>
@@ -1135,6 +1146,7 @@
 <translation id="8970172509886453271">మునుపటి విభాగం లేదు</translation>
 <translation id="89720367119469899">ఎస్కేప్</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">'<ph name="PHRASE" />'ను తొలగించండి</translation>
 <translation id="8986362086234534611">మరిచిపోయారా</translation>
 <translation id="8989104346085848538">ప్రస్తుతం నడుస్తోన్న ఏ ChromeVox స్పీచ్‌ను అయినా ఆపేందుకు, కంట్రోల్ కీను నొక్కండి.</translation>
 <translation id="8993737615451556423">చదివే వాయిస్‌ను వేగవంతం చేయడానికి, వేగాన్ని తగ్గించడానికి, ఇంకా పాజ్ చేయడానికి కంట్రోల్‌లను అందిస్తుంది</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
index 23db7e4..76bf1c9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
@@ -32,6 +32,7 @@
 <translation id="1197088940767939838">สีส้ม</translation>
 <translation id="1198865190323699001">ท่าทางแตะสัมผัส</translation>
 <translation id="1201402288615127009">ถัดไป</translation>
+<translation id="1202112913213080585">ยกเลิก</translation>
 <translation id="1206619573307042055">ตัวอักษรวิ่ง</translation>
 <translation id="1207086294218137981">ไม่มีส่วนหัวระดับ 4 ถัดไป</translation>
 <translation id="1212770441379271564">แป้นพิมพ์ลัดต่อไปนี้ไม่ใช่คำสั่ง ChromeVox แต่มีประโยชน์มากเพื่อให้ได้รับประโยชน์สูงสุดจาก Chrome
@@ -43,6 +44,7 @@
 หากต้องการเปิดเมนูเบราว์เซอร์ Chrome ให้กด Alt+F</translation>
 <translation id="1213216066620407844">ChromeVox - ทำให้ Chrome สามารถพูดได้</translation>
 <translation id="1225969361094801578">สีเทาอมฟ้าเข้ม</translation>
+<translation id="122928249241119550">ย้ายไปที่ประโยคก่อนหน้า</translation>
 <translation id="1230503547248836149">เริ่มส่วนที่เลือก</translation>
 <translation id="1236794971743289975">อ้างอิงท้ายเรื่อง</translation>
 <translation id="1237797094773582699">ในทำนองเดียวกัน คุณใช้ 4 นิ้วปัดจากขวาไปซ้ายเพื่อเลื่อนไปยังส่วนก่อนหน้าได้ ลองทำเลย</translation>
@@ -213,6 +215,7 @@
 <translation id="2435422727584637732">สีฟ้าด็อดเจอร์บลู</translation>
 <translation id="2438712309510062123">แนะนำ</translation>
 <translation id="2450814015951372393">ช่องทำเครื่องหมาย</translation>
+<translation id="2450992626945324272">ย้ายไปที่ประโยคถัดไป</translation>
 <translation id="2461822463642141190">ปัจจุบัน</translation>
 <translation id="2462626033734746142">กลุ่มปุ่มตัวเลือก</translation>
 <translation id="2467741090055146971">ยกเลิกการเลือก</translation>
@@ -489,6 +492,7 @@
 <translation id="42164919740161077">สีฟ้าคาเด็ตบลู</translation>
 <translation id="4217571870635786043">การพิมพ์ตามคำบอก</translation>
 <translation id="4218529045364428769">{COUNT,plural, =1{เครื่องหมายขีดกลาง}other{# เครื่องหมายขีดกลาง}}</translation>
+<translation id="4220024144662591089">เลือกตั้งแต่ <ph name="START_PHRASE" /> ถึง <ph name="END_PHRASE" /></translation>
 <translation id="4221012616705981690">ไม่มีรายการก่อนหน้า</translation>
 <translation id="4225355998815256469">ตัวควบคุมแบบฟอร์ม</translation>
 <translation id="4230834257931120629">สีเทาอมฟ้าอ่อน</translation>
@@ -759,6 +763,7 @@
 <translation id="611827076493383239">vtd</translation>
 <translation id="6122013438240733403">ปุ่ม</translation>
 <translation id="6132506484792346370">ช่องรายการหรือช่องตัวเลือกรวม</translation>
+<translation id="613344593214611552">ลบประโยคก่อนหน้า</translation>
 <translation id="6142308968191113180">ส่วนหัวระดับ 4</translation>
 <translation id="6150023170003443621">สีเขียวอมเหลือง</translation>
 <translation id="6158882249329863701">แถว <ph name="TABLECELLROWINDEX" /> คอลัมน์ <ph name="TABLECELLCOLUMNINDEX" /></translation>
@@ -768,6 +773,7 @@
 <translation id="6186305613600865047">ไปที่ส่วนล่างสุดของหน้าเว็บ</translation>
 <translation id="6187190722927752226">สีฟ้าอะความารีน</translation>
 <translation id="6197361807490522975">สีน้ำเงินเข้ม</translation>
+<translation id="6218813441317556731">แทนที่ <ph name="DELETE_PHRASE" /> ด้วย <ph name="INSERT_PHRASE" /></translation>
 <translation id="6236061028292614533">ส่วนหัวถัดไป</translation>
 <translation id="6254901459154107917">พื้นที่ข้อความที่สามารถแก้ไขได้ถัดไป</translation>
 <translation id="6259464875943891919">ออกจาก <ph name="TYPE" /> แล้ว</translation>
@@ -921,6 +927,7 @@
 <translation id="7356610683936413584">รายละเอียดรายการคำอธิบาย</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{เครื่องหมายแอมเปอร์แซนด์}other{# เครื่องหมายแอมเปอร์แซนด์}}</translation>
 <translation id="737396357417333429">clk</translation>
+<translation id="7388656272362719103">ลบอักขระก่อนหน้า</translation>
 <translation id="738899727977260036">สีน้ำเงินอมเทา</translation>
 <translation id="7393979322571982935">เสียงและการตั้งค่า</translation>
 <translation id="739763518212184081">บรรทัดก่อนหน้า</translation>
@@ -940,6 +947,7 @@
 <translation id="7533226154149229506">สีเหลืองโกลเด้นร็อดอ่อน</translation>
 <translation id="7543255924852002459">ทิ้งป้ายกำกับ</translation>
 <translation id="7552432549459840808">แป้นพิมพ์ลัดของ Chrome ที่มีประโยชน์</translation>
+<translation id="7553679324939294712">แทรก <ph name="INSERT_PHRASE" /> ก่อน <ph name="BEFORE_PHRASE" /></translation>
 <translation id="7569983096843329377">สีดำ</translation>
 <translation id="7579911500627256166">จุด <ph name="DOT" /></translation>
 <translation id="7592060599656252486">บางอย่าง</translation>
@@ -963,6 +971,7 @@
 <translation id="7684431668231950609">แก้ไขข้อความ, รายการ URL</translation>
 <translation id="7685589220304187312">tlbar</translation>
 <translation id="7693840228159394336">ปุ่มตัวเลือกก่อนหน้า</translation>
+<translation id="7696631298608145306">ย้ายไปที่คำถัดไป</translation>
 <translation id="7701040980221191251">ไม่มี</translation>
 <translation id="7701196182766842984">autolst</translation>
 <translation id="7713139339518499741">เสียงตามธรรมชาติ</translation>
@@ -1070,6 +1079,7 @@
 <translation id="8455868257606149352">สูงสุด <ph name="X" /></translation>
 <translation id="84575901236241018">มีรหัสการเข้าถึง <ph name="KEY" /></translation>
 <translation id="8463645336674919227">ออกจากข้อผิดพลาดทางไวยากรณ์</translation>
+<translation id="8465573210279050749">ลบคำก่อนหน้า</translation>
 <translation id="847040613207937740">ไม่มีช่องทำเครื่องหมายถัดไป</translation>
 <translation id="8473540203671727883">พูดข้อความที่อยู่ใต้เมาส์</translation>
 <translation id="8476408756881832830">หยุดเล่นชั่วคราวเมื่อ ChromeVox กำลังพูด</translation>
@@ -1106,6 +1116,7 @@
 <translation id="8697111817566059991">{COUNT,plural, =1{เครื่องหมายขีดตั้ง}other{# เครื่องหมายขีดตั้ง}}</translation>
 <translation id="8741370088760768424">คำแนะนำ: กดแป้น Search + แป้นเว้นวรรค เพื่อเปิดใช้งานรายการปัจจุบัน</translation>
 <translation id="8743786158317878347">ป้อนเนื้อหาที่มีโครงสร้าง เช่น ตาราง</translation>
+<translation id="8746846427395705317">ย้ายไปที่คำก่อนหน้า</translation>
 <translation id="8747966237988593539">รายการที่มีลำดับ</translation>
 <translation id="8749988712346667988">สีเงิน</translation>
 <translation id="875769700429317857">ดาวน์โหลด <ph name="FILE_NAME" /> เสร็จสมบูรณ์แล้ว</translation>
@@ -1133,6 +1144,7 @@
 <translation id="8970172509886453271">ไม่มีส่วนก่อนหน้า</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8978496506222343566">tltip</translation>
+<translation id="898089897833732740">ลบ <ph name="PHRASE" /></translation>
 <translation id="8986362086234534611">เลิกจำ</translation>
 <translation id="8989104346085848538">หากต้องการหยุดเสียงพูดของ ChromeVox ให้กดแป้น Control</translation>
 <translation id="8993737615451556423">ให้ตัวควบคุมเพื่อปรับเสียงที่อ่านให้เร็วขึ้น ช้าลง และหยุดชั่วคราว</translation>
diff --git a/chrome/browser/resources/new_tab_page/app.html b/chrome/browser/resources/new_tab_page/app.html
index 17991fa..6390506 100644
--- a/chrome/browser/resources/new_tab_page/app.html
+++ b/chrome/browser/resources/new_tab_page/app.html
@@ -165,7 +165,7 @@
   }
 
   :host([show-background-image_]) #customizeIcon {
-    background-color: var(--ntp-theme-text-color);
+    background-color: white;
     margin: 0;
   }
 
diff --git a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
index 75d2fcc..e72f797 100644
--- a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
+++ b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
@@ -233,6 +233,13 @@
       Promise<chrome.passwordsPrivate.PasswordCheckStatus>;
 
   /**
+   * Starts an automated password change flow.
+   * @param credential The credential for which to start the flow.
+   */
+  startAutomatedPasswordChange(
+      credential: chrome.passwordsPrivate.InsecureCredential): Promise<boolean>;
+
+  /**
    * Requests to remove |insecureCredential| from the password store.
    */
   removeInsecureCredential(
@@ -532,6 +539,13 @@
     });
   }
 
+  startAutomatedPasswordChange(credential:
+                                   chrome.passwordsPrivate.InsecureCredential) {
+    return new Promise<boolean>(resolve => {
+      chrome.passwordsPrivate.startAutomatedPasswordChange(credential, resolve);
+    });
+  }
+
   optInForAccountStorage(optIn: boolean) {
     chrome.passwordsPrivate.optInForAccountStorage(optIn);
   }
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc
index 17c9b40..ea96226 100644
--- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc
@@ -46,12 +46,6 @@
 #include "base/test/test_reg_util_win.h"
 #endif
 
-#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/supervised_user/supervised_user_metrics_service.h"
-#include "chrome/browser/supervised_user/supervised_user_metrics_service_factory.h"
-#endif
-
 // A test fixture that sets up a test task runner and makes it the thread's
 // runner. The fixture implements a fake environment data collector, extension
 // data collector and a fake report uploader.
@@ -279,13 +273,6 @@
         0,  // avatar_id (unused)
         TestingProfile::TestingFactories());
 
-#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-    // Disable supervised user metrics reporting, otherwise the calls to
-    // FastForwardUntilNoTasksRemain() never return.
-    SupervisedUserMetricsServiceFactory::GetForBrowserContext(profile)
-        ->Shutdown();
-#endif
-
     mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 
     return profile;
diff --git a/chrome/browser/supervised_user/supervised_user_metrics_service.cc b/chrome/browser/supervised_user/supervised_user_metrics_service.cc
index 722d106..e5f638f 100644
--- a/chrome/browser/supervised_user/supervised_user_metrics_service.cc
+++ b/chrome/browser/supervised_user/supervised_user_metrics_service.cc
@@ -56,8 +56,6 @@
 
   CheckForNewDay();
   // Check for a new day every |kTimerInterval| as well.
-  DLOG(WARNING) << "If your test uses mock timers and hangs, you may need "
-                   "to call Shutdown() on SupervisedUserMetricsService.";
   timer_.Start(FROM_HERE, kTimerInterval, this,
                &SupervisedUserMetricsService::CheckForNewDay);
 }
diff --git a/chrome/browser/supervised_user/supervised_user_metrics_service_factory.cc b/chrome/browser/supervised_user/supervised_user_metrics_service_factory.cc
index aae897c..2c9f65c 100644
--- a/chrome/browser/supervised_user/supervised_user_metrics_service_factory.cc
+++ b/chrome/browser/supervised_user/supervised_user_metrics_service_factory.cc
@@ -56,3 +56,7 @@
     const {
   return true;
 }
+
+bool SupervisedUserMetricsServiceFactory::ServiceIsNULLWhileTesting() const {
+  return true;
+}
diff --git a/chrome/browser/supervised_user/supervised_user_metrics_service_factory.h b/chrome/browser/supervised_user/supervised_user_metrics_service_factory.h
index c409e37..a2065fc 100644
--- a/chrome/browser/supervised_user/supervised_user_metrics_service_factory.h
+++ b/chrome/browser/supervised_user/supervised_user_metrics_service_factory.h
@@ -47,6 +47,7 @@
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
+  bool ServiceIsNULLWhileTesting() const override;
 };
 
 #endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_METRICS_SERVICE_FACTORY_H_
diff --git a/chrome/browser/sync/test/integration/extension_settings_helper.cc b/chrome/browser/sync/test/integration/extension_settings_helper.cc
index 683a792..5a8a08f 100644
--- a/chrome/browser/sync/test/integration/extension_settings_helper.cc
+++ b/chrome/browser/sync/test/integration/extension_settings_helper.cc
@@ -28,31 +28,29 @@
 
 namespace {
 
-std::string ToJson(const base::Value& value) {
+std::string ToJson(base::ValueView value) {
   std::string json;
   base::JSONWriter::WriteWithOptions(
       value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
   return json;
 }
 
-void GetAllSettingsOnBackendSequence(base::DictionaryValue* out,
+void GetAllSettingsOnBackendSequence(base::Value::Dict* out,
                                      base::WaitableEvent* signal,
                                      value_store::ValueStore* storage) {
   EXPECT_TRUE(extensions::GetBackendTaskRunner()->RunsTasksInCurrentSequence());
-  out->Swap(&storage->Get().settings());
+  std::swap(*out, storage->Get().settings());
   signal->Signal();
 }
 
-std::unique_ptr<base::DictionaryValue> GetAllSettings(Profile* profile,
-                                                      const std::string& id) {
+base::Value::Dict GetAllSettings(Profile* profile, const std::string& id) {
   base::WaitableEvent signal(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                              base::WaitableEvent::InitialState::NOT_SIGNALED);
-  std::unique_ptr<base::DictionaryValue> settings(new base::DictionaryValue());
+  base::Value::Dict settings;
   extensions::StorageFrontend::Get(profile)->RunWithStorage(
       ExtensionRegistry::Get(profile)->enabled_extensions().GetByID(id),
       extensions::settings_namespace::SYNC,
-      base::BindOnce(&GetAllSettingsOnBackendSequence, settings.get(),
-                     &signal));
+      base::BindOnce(&GetAllSettingsOnBackendSequence, &settings, &signal));
   signal.Wait();
   return settings;
 }
@@ -70,13 +68,11 @@
   for (extensions::ExtensionSet::const_iterator it = extensions.begin();
        it != extensions.end(); ++it) {
     const std::string& id = (*it)->id();
-    std::unique_ptr<base::DictionaryValue> expected(
-        GetAllSettings(expected_profile, id));
-    std::unique_ptr<base::DictionaryValue> actual(
-        GetAllSettings(actual_profile, id));
-    if (*expected != *actual) {
-      ADD_FAILURE() << "Expected " << ToJson(*expected) << " got "
-                    << ToJson(*actual);
+    base::Value::Dict expected(GetAllSettings(expected_profile, id));
+    base::Value::Dict actual(GetAllSettings(actual_profile, id));
+    if (expected != actual) {
+      ADD_FAILURE() << "Expected " << ToJson(expected) << " got "
+                    << ToJson(actual);
       same = false;
     }
   }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index e7a8624..7a8b2b6 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1743,7 +1743,6 @@
       "//chrome/browser:theme_properties",
       "//chrome/browser/ash/system_web_apps",
       "//chrome/browser/ash/system_web_apps/types:types",
-      "//chrome/browser/autofill_assistant/password_change/proto:proto",
       "//chrome/browser/autofill_assistant/password_change/vector_icons",
       "//chrome/browser/browsing_data:constants",
       "//chrome/browser/cart:mojo_bindings",
@@ -1788,6 +1787,7 @@
       "//chrome/common/search:mojo_bindings",
       "//chrome/common/themes:autogenerated_theme_util",
       "//components/app_constants",
+      "//components/autofill_assistant/browser/public/password_change/proto:proto",
       "//components/commerce/content/browser:hint",
       "//components/commerce/core:feature_list",
       "//components/enterprise/common:download_item_reroute_info",
@@ -5754,8 +5754,8 @@
       "webui/help/test_version_updater.h",
     ]
     deps += [
-      "//chrome/browser/autofill_assistant/password_change/proto:proto",
       "//chrome/test:test_support_ui",
+      "//components/autofill_assistant/browser/public/password_change/proto:proto",
       "//components/media_message_center:media_message_center",
       "//components/media_router/browser:browser",
       "//components/signin/core/browser",
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index 02bd0cb..3f815e3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Verander lêeruitbreiding?</translation>
 <translation id="3341262203274374114">Kan nie ontvolg nie. Iets was fout.</translation>
 <translation id="3359667936385849800">Gebruik jou huidige diensverskaffer</translation>
+<translation id="3365271666488085187">Chrome kan hierdie belangstelling oorweeg</translation>
 <translation id="3367813778245106622">Meld weer aan om sinkronisering te begin</translation>
 <translation id="3373979091428520308">Skakel sinkronisering in Chrome-instellings op 'n ander toestel aan om hierdie bladsy met die ander toestel te deel</translation>
 <translation id="3374023511497244703">Jou boekmerke, geskiedenis, wagwoorde en ander Chrome-data sal nie meer met jou Google-rekening gesinkroniseer word nie</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> KB beskikbaar</translation>
 <translation id="3549657413697417275">Deursoek jou geskiedenis</translation>
 <translation id="3557336313807607643">Voeg by kontakte</translation>
+<translation id="3560491354538957576">Werf kan belangstellings definieer</translation>
 <translation id="3563767357928833671">Knipbordinhoud word gewys</translation>
 <translation id="3566923219790363270">Chrome maak nog gereed vir VR. Herbegin Chrome later.</translation>
 <translation id="3568688522516854065">Meld aan en skakel sinkronisering aan om jou oortjies van jou ander toestelle af te kry</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 5dadd5d..2ecdd3d 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
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">ফাইলের এক্সটেনশন পরিবর্তন করতে চান?</translation>
 <translation id="3341262203274374114">ফলো করা থামানো যাচ্ছে না। কোনও সমস্যা হয়েছে।</translation>
 <translation id="3359667936385849800">আপনার বর্তমান পরিষেবা প্রদানকারী ব্যবহার করুন</translation>
+<translation id="3365271666488085187">Chrome এই আগ্রহ বিবেচনা করতে পারে</translation>
 <translation id="3367813778245106622">সিঙ্ক করা শুরু করতে আবার সাইন-ইন করুন</translation>
 <translation id="3373979091428520308">এই পৃষ্ঠাটিকে অন্য আরেকটি ডিভাইসে শেয়ার করতে হলে, অন্য ডিভাইসের Chrome সেটিংসে গিয়ে সিঙ্ক চালু করুন</translation>
 <translation id="3374023511497244703">আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড ও অন্যান্য Chrome ডেটা আর আপনার Google অ্যাকাউন্টের সাথে সিঙ্ক করা হবে না</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> কেবি available</translation>
 <translation id="3549657413697417275">আপনার ইতিহাস খুঁজুন</translation>
 <translation id="3557336313807607643">পরিচিতিতে যোগ করুন</translation>
+<translation id="3560491354538957576">সাইট আগ্রহ বিবেচনা করতে পারে</translation>
 <translation id="3563767357928833671">ক্লিপবোর্ডের কন্টেন্ট দেখানো হয়েছে</translation>
 <translation id="3566923219790363270">ভি আর সমর্থনের জন্য Chrome-এ এখনও কাজ চলছে। পরে Chrome রিস্টার্ট করুন।</translation>
 <translation id="3568688522516854065">আপনার অন্যান্য ডিভাইস থেকে ট্যাবগুলি পেতে সাইন-ইন করে সিঙ্ক বিকল্প চালু করুন</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index 86bb2a55..95e018b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Promijeniti ekstenziju fajla?</translation>
 <translation id="3341262203274374114">Nije moguće prestati pratiti. Nešto nije uredu.</translation>
 <translation id="3359667936385849800">Koristi trenutnog pružaoca usluga</translation>
+<translation id="3365271666488085187">Chrome može razmotriti ovaj interes</translation>
 <translation id="3367813778245106622">Ponovo se prijavite da započnete sinhronizaciju</translation>
 <translation id="3373979091428520308">Da dijelite ovu stranicu s drugim uređajem, u postavkama Chromea na drugom uređaju uključite sinhronizaciju</translation>
 <translation id="3374023511497244703">Oznake, historija, lozinke i drugi podaci iz Chromea se neće više sinhronizirati s vašim Google računom.</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Dostupno: <ph name="KILOBYTES" /> KB</translation>
 <translation id="3549657413697417275">Pretražite svoju historiju</translation>
 <translation id="3557336313807607643">Dodaj u kontakte</translation>
+<translation id="3560491354538957576">Web lokacija može definirati interesovanja</translation>
 <translation id="3563767357928833671">Sadržaj međumemorije je prikazan</translation>
 <translation id="3566923219790363270">Chrome se još uvijek priprema za VR. Ponovo pokrenite Chrome kasnije.</translation>
 <translation id="3568688522516854065">Da dobijete svoje kartice s vaših drugih uređaja, prijavite se i uključite sinhronizaciju</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index ef1b127..c2c139ff 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Změnit příponu souboru?</translation>
 <translation id="3341262203274374114">Sledování nelze zrušit. Něco se pokazilo.</translation>
 <translation id="3359667936385849800">Použít aktuálního poskytovatele služeb</translation>
+<translation id="3365271666488085187">Chrome může vzít v úvahu tento zájem</translation>
 <translation id="3367813778245106622">Chcete-li zahájit synchronizaci, znovu se přihlaste.</translation>
 <translation id="3373979091428520308">Chcete-li tuto stránku sdílet s jiným zařízením, v nastavení Chromu na druhém zařízení zapněte synchronizaci</translation>
 <translation id="3374023511497244703">Vaše záložky, historie, hesla a další data v Chromu se již nebudou synchronizovat do vašeho účtu Google</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Dostupné místo: <ph name="KILOBYTES" /> kB</translation>
 <translation id="3549657413697417275">Prohledávat historii</translation>
 <translation id="3557336313807607643">Přidat do kontaktů</translation>
+<translation id="3560491354538957576">Web může definovat zájmy</translation>
 <translation id="3563767357928833671">Obsah schránky je zobrazen</translation>
 <translation id="3566923219790363270">Chrome se na virtuální realitu stále připravuje. Restartujte Chrome později.</translation>
 <translation id="3568688522516854065">Chcete-li získat přístup ke kartám ze svých ostatních zařízení, zapněte synchronizaci</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 bceb4a5..d831dcd 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
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Vil du ændre filtypen?</translation>
 <translation id="3341262203274374114">"Følg ikke" kan ikke udføres. Der opstod en fejl.</translation>
 <translation id="3359667936385849800">Brug din nuværende tjenesteudbyder</translation>
+<translation id="3365271666488085187">Chrome kan tage højde for denne interesse</translation>
 <translation id="3367813778245106622">Log ind igen for at starte synkroniseringen</translation>
 <translation id="3373979091428520308">Hvis du vil dele denne side med en anden enhed, kan du aktivere synkronisering i indstillingerne for Chrome på den anden enhed</translation>
 <translation id="3374023511497244703">Din historik samt dine bogmærker, adgangskoder og andre Chrome-data synkroniseres ikke længere med din Google-konto</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Der er <ph name="KILOBYTES" /> kB til rådighed</translation>
 <translation id="3549657413697417275">Søg i din historik</translation>
 <translation id="3557336313807607643">Føj til kontakter</translation>
+<translation id="3560491354538957576">Websitet kan definere interesser</translation>
 <translation id="3563767357928833671">Indholdet af udklipsholderen vises</translation>
 <translation id="3566923219790363270">Chrome er stadig i gang med at forberede VR. Genstart Chrome senere.</translation>
 <translation id="3568688522516854065">Log ind, og aktivér synkronisering for at få adgang til dine faner på dine andre enheder</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 b6a1252..1a08008 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
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Θέλετε να αλλάξετε την επέκταση αρχείου;</translation>
 <translation id="3341262203274374114">Δεν είναι δυνατή η κατάργηση παρακολούθησης. Παρουσιάστηκε κάποιο πρόβλημα.</translation>
 <translation id="3359667936385849800">Χρήση του τρέχοντα παρόχου υπηρεσίας σας.</translation>
+<translation id="3365271666488085187">Το Chrome μπορεί να λάβει υπόψη αυτό το ενδιαφέρον</translation>
 <translation id="3367813778245106622">Συνδεθείτε ξανά για να ξεκινήσετε τον συγχρονισμό</translation>
 <translation id="3373979091428520308">Για να κοινοποιήσετε αυτήν τη σελίδα σε μια άλλη συσκευή, ενεργοποιήστε τον συγχρονισμό στις ρυθμίσεις του Chrome στην άλλη συσκευή.</translation>
 <translation id="3374023511497244703">Οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλα δεδομένα Chrome δεν θα συγχρονίζονται πλέον με τον Λογαριασμό σας Google</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> KB διαθέσιμα</translation>
 <translation id="3549657413697417275">Αναζήτηση στο ιστορικό σας</translation>
 <translation id="3557336313807607643">Προσθήκη στις επαφές</translation>
+<translation id="3560491354538957576">Ο ιστότοπος μπορεί να ορίσει ενδιαφέροντα</translation>
 <translation id="3563767357928833671">Το περιεχόμενο του προχείρου εμφανίζεται</translation>
 <translation id="3566923219790363270">Το Chrome εξακολουθεί να προετοιμάζεται για VR. Επανεκκίνηση Chrome αργότερα.</translation>
 <translation id="3568688522516854065">Για να εμφανίζονται οι καρτέλες σας από τις άλλες συσκευές σας, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
index 251292f1..d3c0f2a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">پسوند فایل تغییر کند؟</translation>
 <translation id="3341262203274374114">لغو دنبال کردن ممکن نیست. مشکلی پیش آمد.</translation>
 <translation id="3359667936385849800">استفاده از ارائه‌دهنده خدمات کنونی</translation>
+<translation id="3365271666488085187">‏Chrome می‌تواند این علاقه را درنظر بگیرد</translation>
 <translation id="3367813778245106622">دوباره به سیستم وارد شوید یا همگام‌سازی را شروع کنید</translation>
 <translation id="3373979091428520308">‏برای هم‌رسانی این صفحه در دستگاهی دیگر، همگام‌سازی را در تنظیمات Chrome در دستگاه دیگر روشن کنید</translation>
 <translation id="3374023511497244703">‏نشانک‌ها، سابقه، گذرواژه‌ها و سایر داده‌های Chrome، دیگر با حساب Google شما همگام‌سازی نمی‌شود.</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> کیلوبایت دردسترس است</translation>
 <translation id="3549657413697417275">جستجو در سابقه</translation>
 <translation id="3557336313807607643">افزودن به مخاطبین</translation>
+<translation id="3560491354538957576">سایت می‌تواند علایق را مشخص کند</translation>
 <translation id="3563767357928833671">محتوای بریده‌دان نشان داده شد</translation>
 <translation id="3566923219790363270">‏Chrome هنوز درحال آماده‌سازی برای VR است. Chrome بعداً بازراه‌اندازی شود.</translation>
 <translation id="3568688522516854065">برای اینکه به برگه‌های بازشده در سایر دستگاه‌ها دسترسی داشته باشید، به سیستم وارد شوید و همگام‌سازی را روشن کنید</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
index 851da00..8114481 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Baguhin ang file extension?</translation>
 <translation id="3341262203274374114">Hindi ma-unfollow. Nagkaproblema.</translation>
 <translation id="3359667936385849800">Gamitin ang iyong kasalukuyang service provider</translation>
+<translation id="3365271666488085187">Puwedeng isaalang-alang ng Chrome ang interes na ito</translation>
 <translation id="3367813778245106622">Mag-sign in muli upang simulan ang pag-sync</translation>
 <translation id="3373979091428520308">Para ibahagi ang page na ito sa isa pang device, i-on ang pag-sync sa mga setting ng Chrome sa kabilang device</translation>
 <translation id="3374023511497244703">Hindi na isi-sync ang iyong mga bookmark, history, mga password, at iba pang data ng Chrome sa Google Account mo</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> KB ang available</translation>
 <translation id="3549657413697417275">Hanapin sa iyong history</translation>
 <translation id="3557336313807607643">Idagdag sa mga contact</translation>
+<translation id="3560491354538957576">Puwedeng tumukoy ang site ng mga interes</translation>
 <translation id="3563767357928833671">Ipinapakita ang mga content ng clipboard</translation>
 <translation id="3566923219790363270">Naghahanda pa rin ang Chrome para sa VR. I-restart ang Chrome sa ibang pagkakataon.</translation>
 <translation id="3568688522516854065">Para makuha ang iyong mga tab sa iba mo pang device, mag-sign in at i-on ang pag-sync</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
index 4842afc..597e178b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Файлдын кеңейтүүсү өчүрүлсүнбү?</translation>
 <translation id="3341262203274374114">Жазылуу токтотулган жок. Бир жерден ката кетти.</translation>
 <translation id="3359667936385849800">Учурдагы кызмат көрсөтүүчүңүздү колдонуңуз</translation>
+<translation id="3365271666488085187">Chrome бул кызыкан нерсени эске алышы мүмкүн</translation>
 <translation id="3367813778245106622">Шайкештирүүнү баштоо үчүн кайра кириңиз</translation>
 <translation id="3373979091428520308">Бул баракты башка түзмөк менен бөлүшүү үчүн башка түзмөктүн Chrome жөндөөлөрүн ачып, шайкештирүүнү күйгүзүңүз</translation>
 <translation id="3374023511497244703">Кыстармаларыңыз, таржымалыңыз, сырсөздөрүңүз жана Chrome'догу башка дайындар мындан ары Google аккаунтуңузга шайкештирилбейт.</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" />Кб жеткиликтүү</translation>
 <translation id="3549657413697417275">Серептөө таржымалынан издеңиз</translation>
 <translation id="3557336313807607643">Байланыштарга кошуу</translation>
+<translation id="3560491354538957576">Сайт кызыккан нерселериңизди аныктай алат</translation>
 <translation id="3563767357928833671">Алмашуу буфериндеги мазмундар көрсөтүлдү</translation>
 <translation id="3566923219790363270">Chrome VR'га дагы деле даярданууда. Chrome'ду кийинчерээк өчүрүп күйгүзүү.</translation>
 <translation id="3568688522516854065">Өтмөктөрүңүздү башка түзмөктөрүңүздөн алуу үчүн аккаунтуңузга кирип, шайкештирүүнү күйгүзүңүз</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
index 1f9c78d9..a964a669a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Дали да се промени наставката на датотеката?</translation>
 <translation id="3341262203274374114">Не може да се отследи. Нешто тргна наопаку.</translation>
 <translation id="3359667936385849800">Користете го тековниот давател на услуги</translation>
+<translation id="3365271666488085187">Chrome може да го зема предвид овој интерес</translation>
 <translation id="3367813778245106622">Најавете се повторно за да започнете со синхронизација</translation>
 <translation id="3373979091428520308">За да ја споделите страницава со друг уред, вклучете ја синхронизацијата во поставките за Chrome на другиот уред</translation>
 <translation id="3374023511497244703">Обележувачите, историјата, лозинките и другите податоци на Chrome веќе нема да се синхронизираат со вашата сметка на Google</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Достапни се <ph name="KILOBYTES" /> KB</translation>
 <translation id="3549657413697417275">Пребарајте ја историјата</translation>
 <translation id="3557336313807607643">Додај во контакти</translation>
+<translation id="3560491354538957576">Сајтот може да ги дефинира интересите</translation>
 <translation id="3563767357928833671">Прикажани се содржини од привремената меморија</translation>
 <translation id="3566923219790363270">Chrome сѐ уште се подготвува за VR. Рестартирајте го Chrome подоцна.</translation>
 <translation id="3568688522516854065">За да ги добиете вашите картички од другите уреди, најавете се и вклучете ја синхронизацијата</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 a1db088..98963f6 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
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Файлын өргөтгөлийг өөрчлөх үү?</translation>
 <translation id="3341262203274374114">Дагахаа болих боломжгүй. Алдаа гарлаа.</translation>
 <translation id="3359667936385849800">Одоогийн үйлчилгээ үзүүлэгчээ ашиглах</translation>
+<translation id="3365271666488085187">Chrome энэ сонирхлыг харгалзан үзэх боломжтой</translation>
 <translation id="3367813778245106622">Синк эхлүүлэхийн тулд дахин нэвтэрнэ үү</translation>
 <translation id="3373979091428520308">Энэ хуудсыг өөр төхөөрөмжтэй хуваалцахын тулд нөгөө төхөөрөмжийн Chrome-н тохиргоонд синк хийхийг асаана уу</translation>
 <translation id="3374023511497244703">Таны хавчуурга, түүх, нууц үг болон Chrome-н бусад өгөгдлийг таны Google Бүртгэлд цаашид синк хийхгүй</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> килобайт боломжтой</translation>
 <translation id="3549657413697417275">Түүхээ хайх</translation>
 <translation id="3557336313807607643">Харилцагчид нэмэх</translation>
+<translation id="3560491354538957576">Сайт сонирхлыг тодорхойлох боломжтой</translation>
 <translation id="3563767357928833671">Түр санах ойн контентуудыг харуулсан</translation>
 <translation id="3566923219790363270">Chrome Виртуал бодит байдлыг бэлтгэсээр байна. Chrome-г дараа дахин эхлүүлнэ үү.</translation>
 <translation id="3568688522516854065">Бусад төхөөрөмжөөсөө чихтэй хуудсаа авахын тулд нэвтрээд синкийг асаана уу`</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index a94b829..7011cada 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">ဖိုင်နောက်ဆက်တွဲ ပြောင်းမလား။</translation>
 <translation id="3341262203274374114">လိုက်မကြည့်တော့၍ မရပါ။ တစ်ခုခုမှားသွားသည်။</translation>
 <translation id="3359667936385849800">သင်၏လက်ရှိ ဝန်ဆောင်မှုပေးသူကို သုံးရန်</translation>
+<translation id="3365271666488085187">ဤစိတ်ဝင်စားမှုကို Chrome က ထည့်တွက်နိုင်သည်</translation>
 <translation id="3367813778245106622">စင့်ခ်စတင်ပြုလုပ်ရန် ထပ်မံ၍ လက်မှတ်ထိုးဝင်ပါ</translation>
 <translation id="3373979091428520308">ဤစာမျက်နှာကို နောက်စက်တစ်လုံးသို့ မျှဝေရန် အခြားစက်၏ Chrome ဆက်တင်များထဲတွင် စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ</translation>
 <translation id="3374023511497244703">သင်၏ လိပ်စာများ၊ မှတ်တမ်း၊ စကားဝှက်များနှင့် အခြားသော Chrome ဒေတာများကို သင့် Google အကောင့်သို့ စင့်ခ်လုပ်မည် မဟုတ်တော့ပါ။</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> ကီလိုဘိုက် (KB) သိမ်းနိုင်သည်</translation>
 <translation id="3549657413697417275">သင့်မှတ်တမ်းကို ရှာရန်</translation>
 <translation id="3557336313807607643">အဆက်အသွယ်များသို့ ထည့်သွင်းပါ</translation>
+<translation id="3560491354538957576">ဝဘ်ဆိုက်က စိတ်ဝင်စားမှုကို ခွဲခြားသတ်မှတ်နိုင်သည်</translation>
 <translation id="3563767357928833671">ကလစ်ဘုတ်အကြောင်းအရာများကို ပြထားသည်</translation>
 <translation id="3566923219790363270">Chrome သည် VR အတွက် ပြင်ဆင်နေဆဲဖြစ်သည်။ နောက်မှ Chrome ကို ပြန်စတင်ပါ။</translation>
 <translation id="3568688522516854065">သင်၏ အခြားစက်ပစ္စည်းများမှ တဘ်များကိုအသုံးပြုရန် လက်မှတ်ထိုးဝင်ပြီး စင့်ခ်ကို ဖွင့်ပါ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 3b6e521..5f85a47 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Vil du endre filetternavnet?</translation>
 <translation id="3341262203274374114">Kan ikke slutte å følge. Noe gikk galt.</translation>
 <translation id="3359667936385849800">Bruk den nåværende tjenesteleverandøren din</translation>
+<translation id="3365271666488085187">Chrome kan vurdere denne interessen</translation>
 <translation id="3367813778245106622">Logg på igjen for å starte synkroniseringen</translation>
 <translation id="3373979091428520308">For å dele denne siden med en annen enhet, slå på synkronisering i Chrome-innstillingene på den andre enheten</translation>
 <translation id="3374023511497244703">Bokmerker, logg, passord og andre Chrome-data synkroniseres ikke lenger med Google-kontoen din.</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> kB er tilgjengelig</translation>
 <translation id="3549657413697417275">Søk i loggen</translation>
 <translation id="3557336313807607643">Legg til i kontakter</translation>
+<translation id="3560491354538957576">Nettstedet kan definere interesser</translation>
 <translation id="3563767357928833671">Innholdet på utklippstavlen vises</translation>
 <translation id="3566923219790363270">Chrome klargjør fremdeles for VR. Start Chrome på nytt senere.</translation>
 <translation id="3568688522516854065">For å få fanene dine fra de andre enhetene du bruker, logg på og slå på synkronisering.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index d9c57778..ac57f7b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Pretende alterar a extensão de ficheiro?</translation>
 <translation id="3341262203274374114">Não é possível deixar de seguir. Algo correu mal.</translation>
 <translation id="3359667936385849800">Utilizar o seu fornecedor de serviços atual</translation>
+<translation id="3365271666488085187">O Chrome pode considerar este interesse</translation>
 <translation id="3367813778245106622">Iniciar sessão novamente para iniciar a sincronização</translation>
 <translation id="3373979091428520308">Para partilhar esta página com outro dispositivo, ative a sincronização nas definições do Chrome no outro dispositivo.</translation>
 <translation id="3374023511497244703">Os marcadores, o histórico, as palavras-passe e outros dados do Chrome deixarão de ser sincronizados com a sua Conta Google.</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> KB disponível(eis)</translation>
 <translation id="3549657413697417275">Pesquisar no histórico</translation>
 <translation id="3557336313807607643">Adicionar aos contactos</translation>
+<translation id="3560491354538957576">O site pode definir interesses</translation>
 <translation id="3563767357928833671">Conteúdos de Copiar e colar apresentados</translation>
 <translation id="3566923219790363270">O Chrome ainda se está a preparar para a RV. Reinicie o Chrome mais tarde.</translation>
 <translation id="3568688522516854065">Para obter os separadores dos seus outros dispositivos, inicie sessão e ative a sincronização.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index d8f18f4..2cc060ce7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Chcete zmeniť príponu súboru?</translation>
 <translation id="3341262203274374114">Nedá sa prestať sledovať. Vyskytol sa problém.</translation>
 <translation id="3359667936385849800">Použiť aktuálneho poskytovateľa služieb</translation>
+<translation id="3365271666488085187">Chrome môže tento záujem zohľadniť</translation>
 <translation id="3367813778245106622">Ak chcete spustiť synchronizáciu, znova sa prihláste</translation>
 <translation id="3373979091428520308">Ak chcete zdieľať túto stránku s iným zariadením, zapnite synchronizáciu v nastaveniach Chromu druhého zariadenia</translation>
 <translation id="3374023511497244703">Vaše záložky, história, heslá a ďalšie údaje Chromu nebudú viac synchronizované s účtom Google</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Voľné miesto: <ph name="KILOBYTES" /> kB</translation>
 <translation id="3549657413697417275">Prehľadať históriu</translation>
 <translation id="3557336313807607643">Pridať do kontaktov</translation>
+<translation id="3560491354538957576">Weby môžu definovať záujmy</translation>
 <translation id="3563767357928833671">Zobrazuje sa obsah schránky</translation>
 <translation id="3566923219790363270">Chrome sa stále pripravuje na používanie VR. Skúste Chrome reštartovať neskôr.</translation>
 <translation id="3568688522516854065">Ak chcete získať karty zo svojich ostatných zariadení, prihláste sa a zapnite synchronizáciu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index b9d9e74..6651f63 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Želite spremeniti pripono datoteke?</translation>
 <translation id="3341262203274374114">Spremljanja ni mogoče preklicati. Prišlo je do napake.</translation>
 <translation id="3359667936385849800">Uporaba trenutnega ponudnika storitev</translation>
+<translation id="3365271666488085187">Chrome lahko upošteva to zanimanje</translation>
 <translation id="3367813778245106622">Prijavite se znova, če želite začeti sinhronizacijo</translation>
 <translation id="3373979091428520308">Če želite to stran deliti z drugo napravo, v drugi napravi v nastavitvah Chroma vklopite sinhronizacijo</translation>
 <translation id="3374023511497244703">Vaši zaznamki, zgodovina, gesla in drugi podatki v Chromu ne bodo več sinhronizirani z računom za Google</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Na voljo: <ph name="KILOBYTES" /> KB</translation>
 <translation id="3549657413697417275">Iščite v svoji zgodovini</translation>
 <translation id="3557336313807607643">Dodaj med stike</translation>
+<translation id="3560491354538957576">Spletno mesto lahko določi zanimanja</translation>
 <translation id="3563767357928833671">Vsebina odložišča je prikazana</translation>
 <translation id="3566923219790363270">Chrome se še vedno pripravlja na navidezno resničnost. Znova zaženite Chrome pozneje.</translation>
 <translation id="3568688522516854065">Če želite dostopati do zavihkov iz drugih naprav, vklopite sinhronizacijo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index f8ba82d..4510a8f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Želite da promenite ekstenziju datoteke?</translation>
 <translation id="3341262203274374114">Opozivanje praćenja nije uspelo. Došlo je do greške.</translation>
 <translation id="3359667936385849800">Koristi aktuelnog dobavljača usluge</translation>
+<translation id="3365271666488085187">Chrome može da razmotri ovo interesovanje</translation>
 <translation id="3367813778245106622">Prijavite se ponovo da biste započeli sinhronizaciju</translation>
 <translation id="3373979091428520308">Da biste delili ovu stranicu sa drugim uređajem, uključite sinhronizaciju u podešavanjima Chrome-a na drugom uređaju</translation>
 <translation id="3374023511497244703">Obeleživači, istorija, lozinke i drugi Chrome podaci više se neće sinhronizovati sa Google nalogom</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Dostupno je <ph name="KILOBYTES" /> KB</translation>
 <translation id="3549657413697417275">Pretražite svoju istoriju</translation>
 <translation id="3557336313807607643">Dodaj u kontakte</translation>
+<translation id="3560491354538957576">Sajt može da definiše interesovanja</translation>
 <translation id="3563767357928833671">Prikazan je sadržaj privremene memorije</translation>
 <translation id="3566923219790363270">Chrome se još priprema za VR. Kasnije restartujte Chrome.</translation>
 <translation id="3568688522516854065">Da bi vam kartice bile dostupne na drugim uređajima, prijavite se i uključite sinhronizaciju</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 84dfa022..1e1cd18 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">Желите да промените екстензију датотеке?</translation>
 <translation id="3341262203274374114">Опозивање праћења није успело. Дошло је до грешке.</translation>
 <translation id="3359667936385849800">Користи актуелног добављача услуге</translation>
+<translation id="3365271666488085187">Chrome може да размотри ово интересовање</translation>
 <translation id="3367813778245106622">Пријавите се поново да бисте започели синхронизацију</translation>
 <translation id="3373979091428520308">Да бисте делили ову страницу са другим уређајем, укључите синхронизацију у подешавањима Chrome-а на другом уређају</translation>
 <translation id="3374023511497244703">Обележивачи, историја, лозинке и други Chrome подаци више се неће синхронизовати са Google налогом</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">Доступно је <ph name="KILOBYTES" /> KB</translation>
 <translation id="3549657413697417275">Претражите своју историју</translation>
 <translation id="3557336313807607643">Додај у контакте</translation>
+<translation id="3560491354538957576">Сајт може да дефинише интересовања</translation>
 <translation id="3563767357928833671">Приказан је садржај привремене меморије</translation>
 <translation id="3566923219790363270">Chrome се још припрема за ВР. Касније рестартујте Chrome.</translation>
 <translation id="3568688522516854065">Да би вам картице биле доступне на другим уређајима, пријавите се и укључите синхронизацију</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index 0c7fef81..b9f89a6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">ఫైల్ ఎక్స్‌టెన్షన్‌ను మార్చాలా?</translation>
 <translation id="3341262203274374114">అనుసరణను రద్దు చేయడం సాధ్యపడదు. ఏదో తప్పు జరిగింది.</translation>
 <translation id="3359667936385849800">మీ ప్రస్తుత సర్వీస్ ప్రొవైడర్‌ను ఉపయోగించండి</translation>
+<translation id="3365271666488085187">Chrome ఈ ఆసక్తిని పరిగణించవచ్చు</translation>
 <translation id="3367813778245106622">సింక్‌ను ప్రారంభించడానికి మళ్లీ సైన్ ఇన్ చేయండి</translation>
 <translation id="3373979091428520308">ఈ పేజీని మరొక పరికరానికి షేర్ చేయడానికి, ఆ పరికరంలోని Chrome సెట్టింగ్‌లలో సింక్‌ను ఆన్ చేయండి</translation>
 <translation id="3374023511497244703">మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు, ఇతర Chrome డేటా ఇకపై మీ Google ఖాతాలో సింక్ చేయబడదు</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775"><ph name="KILOBYTES" /> KB అందుబాటులో ఉంది</translation>
 <translation id="3549657413697417275">మీ చరిత్రను వెతకండి</translation>
 <translation id="3557336313807607643">కాంటాక్ట్‌లకు జోడించు</translation>
+<translation id="3560491354538957576">ఆసక్తులను సైట్ నిర్వచించవచ్చు</translation>
 <translation id="3563767357928833671">క్లిప్ బోర్డ్ కంటెంట్‌లను చూపబడ్డాయి</translation>
 <translation id="3566923219790363270">Chrome ఇంకా VR కోసం సన్నద్ధమవుతోంది. Chromeని తర్వాత పునఃప్రారంభించండి.</translation>
 <translation id="3568688522516854065">మీ ఇతర పరికరాలలో ఉన్న మీ అన్ని ట్యాబ్‌‌‍లను పొందాలనుకుంటే, సైన్ ఇన్ చేసి, సింక్‌ ఎంపికను ఆన్ చేయాలి</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
index 42a3be21..baca4f4d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -443,6 +443,7 @@
 <translation id="3334729583274622784">เปลี่ยนนามสกุลไฟล์ใช่ไหม</translation>
 <translation id="3341262203274374114">เลิกติดตามไม่ได้ เกิดข้อผิดพลาด</translation>
 <translation id="3359667936385849800">ใช้ผู้ให้บริการปัจจุบัน</translation>
+<translation id="3365271666488085187">Chrome จะพิจารณาความสนใจนี้ได้</translation>
 <translation id="3367813778245106622">ลงชื่อเข้าใช้อีกครั้งเพื่อเริ่มซิงค์</translation>
 <translation id="3373979091428520308">หากต้องการแชร์หน้านี้กับอุปกรณ์อีกเครื่องหนึ่ง ให้เปิดการซิงค์ในการตั้งค่า Chrome ของอุปกรณ์เครื่องนั้น</translation>
 <translation id="3374023511497244703">บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และข้อมูลอื่นๆ ใน Chrome จะไม่ซิงค์กับบัญชี Google อีกต่อไป</translation>
@@ -476,6 +477,7 @@
 <translation id="3542235761944717775">ใช้ได้ <ph name="KILOBYTES" /> KB</translation>
 <translation id="3549657413697417275">ค้นหาประวัติการเข้าชม</translation>
 <translation id="3557336313807607643">เพิ่มในรายชื่อติดต่อ</translation>
+<translation id="3560491354538957576">เว็บไซต์จะระบุความสนใจได้</translation>
 <translation id="3563767357928833671">เนื้อหาในคลิปบอร์ดแสดงขึ้น</translation>
 <translation id="3566923219790363270">Chrome ยังคงเตรียมความพร้อมสำหรับ VR อยู่ รีสตาร์ท Chrome ภายหลัง</translation>
 <translation id="3568688522516854065">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อรับแท็บจากอุปกรณ์เครื่องอื่นๆ ของคุณ</translation>
diff --git a/chrome/browser/ui/autofill_assistant/password_change/OWNERS b/chrome/browser/ui/autofill_assistant/password_change/OWNERS
index 6ee5c91..ee373ae 100644
--- a/chrome/browser/ui/autofill_assistant/password_change/OWNERS
+++ b/chrome/browser/ui/autofill_assistant/password_change/OWNERS
@@ -1 +1 @@
-file://chrome/browser/autofill_assistant/password_change/OWNERS
+file://components/autofill_assistant/browser/public/password_change/OWNERS
diff --git a/chrome/browser/ui/autofill_assistant/password_change/apc_utils.cc b/chrome/browser/ui/autofill_assistant/password_change/apc_utils.cc
index 97dfbaf..029495f 100644
--- a/chrome/browser/ui/autofill_assistant/password_change/apc_utils.cc
+++ b/chrome/browser/ui/autofill_assistant/password_change/apc_utils.cc
@@ -6,8 +6,8 @@
 
 #include "build/branding_buildflags.h"
 #include "chrome/app/vector_icons/vector_icons.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/autofill_assistant/password_change/vector_icons/vector_icons.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 
 const gfx::VectorIcon& GetAssistantIconOrFallback() {
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
diff --git a/chrome/browser/ui/autofill_assistant/password_change/apc_utils.h b/chrome/browser/ui/autofill_assistant/password_change/apc_utils.h
index 9cac75e..457373bf 100644
--- a/chrome/browser/ui/autofill_assistant/password_change/apc_utils.h
+++ b/chrome/browser/ui/autofill_assistant/password_change/apc_utils.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_UI_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_APC_UTILS_H_
 
 #include "chrome/app/vector_icons/vector_icons.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 
 // Returns the icon for Google Assistant on Google-branded builds and a
 // Chromium icon as a placeholder on non-branded builds.
diff --git a/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_display.h b/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_display.h
index 375b23c4..fba9b1c9 100644
--- a/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_display.h
+++ b/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_display.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 // Mocked PasswordChangeRunDisplay used in unit tests.
diff --git a/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h b/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h
index 7257836..e044bde 100644
--- a/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h
+++ b/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h
@@ -9,7 +9,7 @@
 #include <string>
 
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "url/gurl.h"
 
 class PasswordChangeRunDisplay;
diff --git a/chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h b/chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h
index dce3ef52..6cc6163 100644
--- a/chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h
+++ b/chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/assistant_display_delegate.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 
 class PasswordChangeRunController;
 
diff --git a/chrome/browser/ui/color/chrome_color_mixer.cc b/chrome/browser/ui/color/chrome_color_mixer.cc
index 0abac2d..4d43a31f 100644
--- a/chrome/browser/ui/color/chrome_color_mixer.cc
+++ b/chrome/browser/ui/color/chrome_color_mixer.cc
@@ -341,8 +341,8 @@
       gfx::kGoogleGrey100};
   mixer[kColorNewTabPageSectionBorder] =
       ui::SetAlpha(kColorNewTabPageHeader, 0x50);
-  mixer[kColorNewTabPageText] = ui::SelectBasedOnDarkInput(
-      kColorNewTabPageBackground, gfx::kGoogleGrey200, SK_ColorBLACK);
+  mixer[kColorNewTabPageText] = {dark_mode ? gfx::kGoogleGrey200
+                                           : SK_ColorBLACK};
   mixer[kColorNewTabPageTextUnthemed] = {gfx::kGoogleGrey050};
   mixer[kColorNewTabPageTextLight] =
       IncreaseLightness(kColorNewTabPageText, 0.40);
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/OWNERS b/chrome/browser/ui/views/autofill_assistant/password_change/OWNERS
index 6ee5c91..ee373ae 100644
--- a/chrome/browser/ui/views/autofill_assistant/password_change/OWNERS
+++ b/chrome/browser/ui/views/autofill_assistant/password_change/OWNERS
@@ -1 +1 @@
-file://chrome/browser/autofill_assistant/password_change/OWNERS
+file://components/autofill_assistant/browser/public/password_change/OWNERS
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.cc b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.cc
index c94999c..a8660da 100644
--- a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.cc
+++ b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.cc
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "chrome/app/vector_icons/vector_icons.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "components/vector_icons/vector_icons.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/animation/animation_delegate.h"
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.h b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.h
index 446b6c6..f7ec5ee 100644
--- a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.h
+++ b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_PASSWORD_CHANGE_RUN_PROGRESS_H_
 #define CHROME_BROWSER_UI_VIEWS_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_PASSWORD_CHANGE_RUN_PROGRESS_H_
 
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "ui/views/view.h"
 
 namespace views {
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress_unittest.cc b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress_unittest.cc
index 28e330e..47e5f47 100644
--- a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress_unittest.cc
+++ b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress_unittest.cc
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/animation/linear_animation.h"
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc
index a7ce301..7d18a12 100644
--- a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc
+++ b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc
@@ -10,11 +10,11 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/apc_utils.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h"
 #include "chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_progress.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/controls/button/button.h"
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.h b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.h
index 7c435b2..3b3fb94 100644
--- a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.h
+++ b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.h
@@ -11,8 +11,8 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/autofill_assistant/password_change/proto/extensions.pb.h"
 #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h"
+#include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
diff --git a/chrome/browser/ui/views/hover_button.cc b/chrome/browser/ui/views/hover_button.cc
index 981df89..1095790a 100644
--- a/chrome/browser/ui/views/hover_button.cc
+++ b/chrome/browser/ui/views/hover_button.cc
@@ -220,15 +220,19 @@
 
 void HoverButton::SetBorder(std::unique_ptr<views::Border> b) {
   LabelButton::SetBorder(std::move(b));
-  // Make sure the minimum size is correct according to the layout (if any).
-  if (GetLayoutManager())
-    SetMinSize(GetLayoutManager()->GetPreferredSize(this));
+  PreferredSizeChanged();
 }
 
 void HoverButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
   Button::GetAccessibleNodeData(node_data);
 }
 
+void HoverButton::PreferredSizeChanged() {
+  LabelButton::PreferredSizeChanged();
+  if (GetLayoutManager())
+    SetMinSize(GetLayoutManager()->GetPreferredSize(this));
+}
+
 void HoverButton::OnViewBoundsChanged(View* observed_view) {
   LabelButton::OnViewBoundsChanged(observed_view);
   if (observed_view == label_wrapper_)
@@ -246,6 +250,11 @@
   subtitle()->SetTextContext(text_context);
   subtitle()->SetTextStyle(text_style);
   subtitle()->SetAutoColorReadabilityEnabled(true);
+
+  // `subtitle_`'s preferred size may have changed. Notify the view because
+  // `subtitle_` is an indirect child and thus
+  // HoverButton::ChildPreferredSizeChanged() is not called.
+  PreferredSizeChanged();
 }
 
 void HoverButton::SetTooltipAndAccessibleName() {
diff --git a/chrome/browser/ui/views/hover_button.h b/chrome/browser/ui/views/hover_button.h
index d3cc1305..a46e618 100644
--- a/chrome/browser/ui/views/hover_button.h
+++ b/chrome/browser/ui/views/hover_button.h
@@ -74,6 +74,7 @@
   // views::LabelButton:
   void SetBorder(std::unique_ptr<views::Border> b) override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
+  void PreferredSizeChanged() override;
   void OnViewBoundsChanged(View* observed_view) override;
 
   // Sets the text style of the title considering the color of the background.
diff --git a/chrome/browser/ui/views/hover_button_unittest.cc b/chrome/browser/ui/views/hover_button_unittest.cc
index 0b61067..6c1d5fc9 100644
--- a/chrome/browser/ui/views/hover_button_unittest.cc
+++ b/chrome/browser/ui/views/hover_button_unittest.cc
@@ -16,6 +16,7 @@
 #include "ui/gfx/text_utils.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/label.h"
+#include "ui/views/style/typography.h"
 #include "ui/views/test/views_test_base.h"
 #include "ui/views/view.h"
 #include "ui/views/widget/widget_utils.h"
@@ -160,6 +161,20 @@
   widget()->Close();
 }
 
+// Test that changing the text style updates the return value of
+// views::View::GetHeightForWidth().
+TEST_F(HoverButtonTest, ChangingTextStyleResizesButton) {
+  auto button = std::make_unique<HoverButton>(
+      views::Button::PressedCallback(), CreateIcon(), u"Title", u"Subtitle");
+  button->SetSubtitleTextStyle(views::style::CONTEXT_LABEL,
+                               views::style::STYLE_SECONDARY);
+  int height1 = button->GetHeightForWidth(100);
+  button->SetSubtitleTextStyle(views::style::CONTEXT_DIALOG_TITLE,
+                               views::style::STYLE_SECONDARY);
+  int height2 = button->GetHeightForWidth(100);
+  EXPECT_NE(height1, height2);
+}
+
 // No touch on desktop Mac.
 #if !BUILDFLAG(IS_MAC) || defined(USE_AURA)
 
diff --git a/chrome/browser/ui/views/side_search/side_search_browser_controller_interactive_uitest.cc b/chrome/browser/ui/views/side_search/side_search_browser_controller_interactive_uitest.cc
index d467d62..65ba6aa 100644
--- a/chrome/browser/ui/views/side_search/side_search_browser_controller_interactive_uitest.cc
+++ b/chrome/browser/ui/views/side_search/side_search_browser_controller_interactive_uitest.cc
@@ -578,9 +578,17 @@
   EXPECT_FALSE(side_panel->Contains(focus_manager->GetFocusedView()));
 }
 
+#if BUILDFLAG(IS_MAC)
+// TODO(crbug.com/1340387): Test is flaky on Mac.
+#define MAYBE_SidePanelStatePreservedWhenMovingTabsAcrossBrowserWindows \
+  DISABLED_SidePanelStatePreservedWhenMovingTabsAcrossBrowserWindows
+#else
+#define MAYBE_SidePanelStatePreservedWhenMovingTabsAcrossBrowserWindows \
+  SidePanelStatePreservedWhenMovingTabsAcrossBrowserWindows
+#endif
 IN_PROC_BROWSER_TEST_P(
     SideSearchBrowserControllerTest,
-    SidePanelStatePreservedWhenMovingTabsAcrossBrowserWindows) {
+    MAYBE_SidePanelStatePreservedWhenMovingTabsAcrossBrowserWindows) {
   NavigateToMatchingSearchPageAndOpenSidePanel(browser());
 
   Browser* browser2 = CreateBrowser(browser()->profile());
@@ -737,8 +745,15 @@
   EXPECT_FALSE(side_panel->GetVisible());
 }
 
+#if BUILDFLAG(IS_MAC)
+// TODO(crbug.com/1340387): Test is flaky on Mac.
+#define MAYBE_SidePanelCrashesCloseSidePanel \
+  DISABLED_SidePanelCrashesCloseSidePanel
+#else
+#define MAYBE_SidePanelCrashesCloseSidePanel SidePanelCrashesCloseSidePanel
+#endif
 IN_PROC_BROWSER_TEST_P(SideSearchBrowserControllerTest,
-                       SidePanelCrashesCloseSidePanel) {
+                       MAYBE_SidePanelCrashesCloseSidePanel) {
   // Open two tabs with the side panel open.
   NavigateToMatchingSearchPageAndOpenSidePanel(browser());
   AppendTab(browser(), GetNonMatchingUrl());
@@ -965,7 +980,15 @@
             coordinator->GetCurrentSidePanelEntryForTesting()->id());
 }
 
-IN_PROC_BROWSER_TEST_P(SideSearchV2Test, SwitchTabsWithoutGlobalSidePanel) {
+#if BUILDFLAG(IS_MAC)
+// TODO(crbug.com/1340387): Test is flaky on Mac.
+#define MAYBE_SwitchTabsWithoutGlobalSidePanel \
+  DISABLED_SwitchTabsWithoutGlobalSidePanel
+#else
+#define MAYBE_SwitchTabsWithoutGlobalSidePanel SwitchTabsWithoutGlobalSidePanel
+#endif
+IN_PROC_BROWSER_TEST_P(SideSearchV2Test,
+                       MAYBE_SwitchTabsWithoutGlobalSidePanel) {
   auto* browser_view = BrowserViewFor(browser());
   auto* coordinator = browser_view->side_panel_coordinator();
 
@@ -1167,9 +1190,17 @@
   }
 }
 
+#if BUILDFLAG(IS_MAC)
+// TODO(crbug.com/1340387): Test is flaky on Mac.
+#define MAYBE_ContextualAndGlobalPanelsBehaveAsExpectedWhenDraggingBetweenWindows \
+  DISABLED_ContextualAndGlobalPanelsBehaveAsExpectedWhenDraggingBetweenWindows
+#else
+#define MAYBE_ContextualAndGlobalPanelsBehaveAsExpectedWhenDraggingBetweenWindows \
+  ContextualAndGlobalPanelsBehaveAsExpectedWhenDraggingBetweenWindows
+#endif
 IN_PROC_BROWSER_TEST_P(
     SideSearchDSEClobberingTest,
-    ContextualAndGlobalPanelsBehaveAsExpectedWhenDraggingBetweenWindows) {
+    MAYBE_ContextualAndGlobalPanelsBehaveAsExpectedWhenDraggingBetweenWindows) {
   // Open two browsers with three tabs each. Both have open global side panel
   // and an open side search panel for their last tab.
   Browser* browser2 = CreateBrowser(browser()->profile());
@@ -1212,8 +1243,16 @@
   EXPECT_FALSE(side_search_panel1->GetVisible());
 }
 
+#if BUILDFLAG(IS_MAC)
+// TODO(crbug.com/1340387): Test is flaky on Mac.
+#define MAYBE_ClosingTheContextualPanelClosesAllBrowserPanels \
+  DISABLED_ClosingTheContextualPanelClosesAllBrowserPanels
+#else
+#define MAYBE_ClosingTheContextualPanelClosesAllBrowserPanels \
+  ClosingTheContextualPanelClosesAllBrowserPanels
+#endif
 IN_PROC_BROWSER_TEST_P(SideSearchDSEClobberingTest,
-                       ClosingTheContextualPanelClosesAllBrowserPanels) {
+                       MAYBE_ClosingTheContextualPanelClosesAllBrowserPanels) {
   SetupBrowserForClobberingTests(browser());
   auto* global_panel = GetGlobalSidePanelFor(browser());
   auto* side_search_panel = GetSidePanelFor(browser());
@@ -1296,8 +1335,15 @@
 
 INSTANTIATE_TEST_SUITE_P(All, SideSearchExtensionsTest, ::testing::Bool());
 
+#if BUILDFLAG(IS_MAC)
+// TODO(crbug.com/1340387): Test is flaky on Mac.
+#define MAYBE_ContentScriptsExecuteInSidePanel \
+  DISABLED_ContentScriptsExecuteInSidePanel
+#else
+#define MAYBE_ContentScriptsExecuteInSidePanel ContentScriptsExecuteInSidePanel
+#endif
 IN_PROC_BROWSER_TEST_P(SideSearchExtensionsTest,
-                       ContentScriptsExecuteInSidePanel) {
+                       MAYBE_ContentScriptsExecuteInSidePanel) {
   const GURL first_url = embedded_test_server()->GetURL("first.example", "/");
   const GURL second_url = embedded_test_server()->GetURL("second.example", "/");
   const GURL third_url = embedded_test_server()->GetURL("third.example", "/");
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 fe5bf11..c536324 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1752,8 +1752,8 @@
   // one provided by the Privacy Sandbox service, and one with a URL
   // replacement based on a feature parameter.
   std::u16string floc_explanation =
-      PrivacySandboxServiceFactory::GetForProfile(profile)
-          ->GetFlocDescriptionForDisplay() +
+      l10n_util::GetPluralStringFUTF16(IDS_PRIVACY_SANDBOX_FLOC_DESCRIPTION,
+                                       7) +
       u" " +  // Whitespace is a valid separator w.r.t l10n.
       l10n_util::GetStringFUTF16(IDS_SETTINGS_PRIVACY_SANDBOX_FLOC_TRIAL_ACTIVE,
                                  u"https://privacysandbox.com/proposals/floc");
@@ -1763,8 +1763,8 @@
   // profile, and so the relevant string can be injected here, rather than
   // fetched dynamically from JS.
   html_source->AddString("privacySandboxPageFlocResetExplanation",
-                         PrivacySandboxServiceFactory::GetForProfile(profile)
-                             ->GetFlocResetExplanationForDisplay());
+                         l10n_util::GetPluralStringFUTF16(
+                             IDS_PRIVACY_SANDBOX_FLOC_RESET_EXPLANATION, 7));
 
   html_source->AddBoolean(
       "privacySandboxSettings3Enabled",
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
index 92e36cc..53c0346 100644
--- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
+++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -4377,14 +4377,9 @@
 }
 
 // Disabled due to test flakiness: https://crbug.com/1341954
-#if BUILDFLAG(IS_WIN)
-#define MAYBE_CheckCombinations DISABLED_CheckCombinations
-#else
-#define MAYBE_CheckCombinations CheckCombinations
-#endif
 IN_PROC_BROWSER_TEST_P(
     ManifestUpdateManagerBrowserTest_AppIdentityParameterized,
-    MAYBE_CheckCombinations) {
+    DISABLED_CheckCombinations) {
   constexpr char kManifestTemplate[] = R"(
     {
       "name": "$1",
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index a41d57fd..6d7bc21a 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1657000683-bf710ea6591ccb8f5976caeb3e71912937482abc.profdata
+chrome-mac-arm-main-1657022349-096312dc222be2f882e40fb94c4f51ddc3a3c0a4.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 597fb36..91040d0 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1657000683-751d125c77f9e3de0691664fec9f3b07aea236c8.profdata
+chrome-mac-main-1657022349-b5d238b58d25cbc0137783361983ca34de273d7d.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 53f11d5..b7fcb1c 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1657000683-f2a4e8fb8dc3d187dddb7926031fb1315f1d3b13.profdata
+chrome-win32-main-1657033128-31317df818ce180cb839e5a8925a9b62660a625b.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 2503c33..48e9eec 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1657011560-380fadbba0240cedb557fab3969305e2a8a5cba0.profdata
+chrome-win64-main-1657033128-9412251c0b22b3f38e4b73407fda0b88b7e90c33.profdata
diff --git a/chrome/common/extensions/api/passwords_private.idl b/chrome/common/extensions/api/passwords_private.idl
index 91d37eb..7c5e77eb 100644
--- a/chrome/common/extensions/api/passwords_private.idl
+++ b/chrome/common/extensions/api/passwords_private.idl
@@ -243,6 +243,7 @@
   callback GetPlaintextInsecurePasswordCallback =
       void(InsecureCredential credential);
   callback PasswordCheckStatusCallback = void(PasswordCheckStatus status);
+  callback StartAutomatedPasswordChangeCallback = void(boolean success);
   callback IsAccountStoreDefaultCallback = void(boolean isDefault);
   callback GetUrlCollectionCallback = void(UrlCollection urlCollection);
 
@@ -412,6 +413,13 @@
     [supportsPromises] static void getPasswordCheckStatus(
         PasswordCheckStatusCallback callback);
 
+    // Starts an automated password change for |credential|. Invokes |callback|
+    // on completion with a boolean parameter that signals whether the
+    // credential was changed successfully.
+    [supportsPromises] static void startAutomatedPasswordChange(
+        InsecureCredential credential,
+        optional StartAutomatedPasswordChangeCallback callback);
+
     // Requests whether the account store is a default location for saving
     // passwords. False means the device store is a default one. Must be called
     // when the current user has already opted-in for account storage.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4d485a85..7258a45 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2867,6 +2867,7 @@
         "../browser/extensions/api/offscreen/offscreen_document_manager_browsertest.cc",
         "../browser/extensions/api/page_capture/page_capture_apitest.cc",
         "../browser/extensions/api/passwords_private/passwords_private_apitest.cc",
+        "../browser/extensions/api/passwords_private/passwords_private_delegate_impl_browsertest.cc",
         "../browser/extensions/api/permissions/permissions_apitest.cc",
         "../browser/extensions/api/preference/preference_apitest.cc",
         "../browser/extensions/api/printer_provider/printer_provider_apitest.cc",
@@ -4621,7 +4622,6 @@
       "../browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_apitest.cc",
       "../browser/chromeos/extensions/wallpaper_apitest.cc",
       "../browser/chromeos/tablet_mode/tablet_mode_page_behavior_browsertest.cc",
-      "../browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc",
       "../browser/extensions/api/preference/preference_api_lacros_browsertest.cc",
       "../browser/extensions/api/vpn_provider/vpn_provider_apitest.cc",
       "../browser/lacros/browser_service_lacros_browsertest.cc",
@@ -4688,11 +4688,9 @@
       "//components/infobars/content:content",
       "//components/metrics/structured",
       "//components/metrics/structured:structured_events",
-      "//components/onc:onc",
       "//components/proxy_config:proxy_config",
       "//components/services/app_service/public/cpp:intents",
       "//components/services/app_service/public/cpp:preferred_apps",
-      "//components/user_manager:user_manager",
       "//ui/gfx/codec",
       "//ui/platform_window",
     ]
@@ -6849,7 +6847,6 @@
     deps += [
       "//chrome:packed_resources_integrity_hash",
       "//chrome/browser/ash/system_web_apps/test_support",
-      "//chrome/browser/autofill_assistant/password_change/proto:proto",
       "//chrome/browser/enterprise/connectors/analysis:features",
       "//chrome/browser/media/router:test_support",
       "//chrome/browser/media/router/discovery:discovery",
@@ -6873,6 +6870,7 @@
       "//components/app_constants",
       "//components/autofill_assistant/browser/public:proto",
       "//components/autofill_assistant/browser/public:unit_test_support",
+      "//components/autofill_assistant/browser/public/password_change/proto:proto",
       "//components/chrome_cleaner/test:test_name_helper",
       "//components/commerce/core:cart_db_content_proto",
       "//components/commerce/core:coupon_db_content_proto",
diff --git a/chrome/test/data/extensions/api_test/passwords_private/test.js b/chrome/test/data/extensions/api_test/passwords_private/test.js
index 8e649c2..6856c3a1 100644
--- a/chrome/test/data/extensions/api_test/passwords_private/test.js
+++ b/chrome/test/data/extensions/api_test/passwords_private/test.js
@@ -803,6 +803,55 @@
     });
   },
 
+  function startAutomatedPasswordChange() {
+    chrome.passwordsPrivate.startAutomatedPasswordChange(
+      {
+        id: 0,
+        formattedOrigin: 'example.com',
+        detailedOrigin: 'https://example.com',
+        isAndroidCredential: false,
+        hasStartableScript: true,
+        signonRealm: 'https://example.com',
+        username: 'alice',
+        changePasswordUrl: 'https://example.com/.well-known/change-password',
+        compromisedInfo: {
+          compromiseTime: COMPROMISE_TIME,
+          elapsedTimeSinceCompromise: '3 days ago',
+          compromiseType: 'LEAKED',
+          isMuted: false,
+        },
+      },
+      (status) => {
+        chrome.test.assertNoLastError();
+        chrome.test.assertEq(true, status);
+        chrome.test.succeed();
+      });
+  },
+
+  function startAutomatedPasswordChangeWithEmptyUrl() {
+    chrome.passwordsPrivate.startAutomatedPasswordChange(
+      {
+        id: 0,
+        formattedOrigin: 'example.com',
+        detailedOrigin: 'https://example.com',
+        isAndroidCredential: false,
+        hasStartableScript: true,
+        signonRealm: 'https://example.com',
+        username: 'alice',
+        compromisedInfo: {
+          compromiseTime: COMPROMISE_TIME,
+          elapsedTimeSinceCompromise: '3 days ago',
+          compromiseType: 'LEAKED',
+          isMuted: false,
+        },
+      },
+      (status) => {
+        chrome.test.assertNoLastError();
+        chrome.test.assertEq(false, status);
+        chrome.test.succeed();
+      });
+  },
+
   function movePasswordsToAccount() {
     chrome.passwordsPrivate.movePasswordsToAccount([42]);
     chrome.test.succeed();
diff --git a/chrome/test/data/webui/settings/test_password_manager_proxy.ts b/chrome/test/data/webui/settings/test_password_manager_proxy.ts
index 9c8810f0..e12af37 100644
--- a/chrome/test/data/webui/settings/test_password_manager_proxy.ts
+++ b/chrome/test/data/webui/settings/test_password_manager_proxy.ts
@@ -113,6 +113,7 @@
       'removeSavedPasswords',
       'requestExportProgressStatus',
       'requestPlaintextPassword',
+      'startAutomatedPasswordChange',
       'startBulkPasswordCheck',
       'stopBulkPasswordCheck',
       'unmuteInsecureCredential'
@@ -293,6 +294,13 @@
     return Promise.resolve(this.data.checkStatus);
   }
 
+  startAutomatedPasswordChange(credential:
+                                   chrome.passwordsPrivate.InsecureCredential) {
+    this.methodCalled('startAutomatedPasswordChange', credential);
+    // Return `false` for empty origins for testing purposes.
+    return Promise.resolve(!!credential.changePasswordUrl);
+  }
+
   addCompromisedCredentialsListener(listener: CredentialsChangedListener) {
     this.lastCallback.addCompromisedCredentialsListener = listener;
   }
diff --git a/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_probe.mojom b/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_probe.mojom
index 3863e11..80956831f 100644
--- a/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_probe.mojom
+++ b/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_probe.mojom
@@ -26,7 +26,7 @@
 
 // An enumeration of each category of information that cros_healthd can report.
 //
-// NextMinVersion: 1, NextIndex: 20
+// NextMinVersion: 2, NextIndex: 21
 [Stable, Extensible]
 enum ProbeCategoryEnum {
   [Default] kUnknown = 16,
@@ -49,6 +49,7 @@
   kDisplay = 17,
   kNetworkInterface = 18,
   kInput = 19,
+  [MinVersion=1] kAudioHardware = 20,
 
   // TODO(b/190459636): Rename it to kSystem after migration.
   kSystem2 = 0x10000,
@@ -896,6 +897,50 @@
   uint32 severe_underruns@7;
 };
 
+// Audio hardware probe result.
+//
+// NextMinVersion: 1, NextIndex: 3
+union AudioHardwareResult {
+  // The required field for backwards compatibility. The unrecognized Mojo
+  // field will deserialize to this field. It should not be used.
+  [Default] bool unmapped_field0;
+  // Valid AudioHardwareInfo.
+  AudioHardwareInfo audio_hardware_info@1;
+  // The error that occurred.
+  ProbeError error@2;
+};
+
+// Audio hardware information.
+//
+// NextMinVersion: 1, NextIndex: 2
+struct AudioHardwareInfo {
+  // Audio cards information.
+  array<AudioCard> audio_cards@0;
+};
+
+// Audio card information.
+//
+// NextMinVersion: 1, NextIndex: 3
+struct AudioCard {
+  // The id used by ALSA(Advanced Linux Sound Architecture).
+  string alsa_id@0;
+  // The bus device. If omits, the card is belongs to a bus type which is not
+  // yet supported by Healthd.
+  BusDevice? bus_device@1;
+  // The hd-audio codecs.
+  array<HDAudioCodec> hd_audio_codecs@2;
+};
+
+// HD-Audio codec information.
+//
+// NextMinVersion: 1, NextIndex: 2
+struct HDAudioCodec {
+  // The name. E.g. "ATI R6xx HDMI".
+  string name@0;
+  // The address. E.g. "0".
+  uint8 address@1;
+};
+
 // Boot performance result.
 union BootPerformanceResult {
   // Valid BootPerformanceInfo.
@@ -934,7 +979,7 @@
 // The classes of the bus devices. Can be used to group the devices by their
 // use.
 //
-// NextMinVersion: 1, NextIndex: 6
+// NextMinVersion: 1, NextIndex: 7
 [Extensible]
 enum BusDeviceClass {
   // For the devices which cannot be classified.
@@ -944,6 +989,7 @@
   kWirelessController = 3,
   kBluetoothAdapter = 4,
   kThunderboltController = 5,
+  kAudioCard = 6,
 };
 
 // The bus device info.
@@ -1438,7 +1484,7 @@
 // attempt to fetch that information, and size zero if cros_healthd did attempt
 // to fetch that information, but was unable to.
 //
-// NextMinVersion: 4, NextIndex: 20
+// NextMinVersion: 5, NextIndex: 21
 struct TelemetryInfo {
   // Information about the device's main battery. Only present when kBattery was
   // included in the categories input to ProbeTelemetryInfo.
@@ -1505,4 +1551,7 @@
   // Information about the input software and hardware. Only present when
   // kInput was included in the categories input to ProbeTelemetryInfo.
   [MinVersion=3] InputResult? input_result@19;
+  // Information about audio hardware. Only present when kAudioHardware was
+  // included.
+  [MinVersion=4] AudioHardwareResult? audio_hardware_result@20;
 };
diff --git a/chromeos/crosapi/mojom/test_controller.mojom b/chromeos/crosapi/mojom/test_controller.mojom
index fdb008c..126acf2 100644
--- a/chromeos/crosapi/mojom/test_controller.mojom
+++ b/chromeos/crosapi/mojom/test_controller.mojom
@@ -4,9 +4,8 @@
 
 module crosapi.mojom;
 
-import "chromeos/crosapi/mojom/app_service_types.mojom";
-import "mojo/public/mojom/base/values.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
+import "chromeos/crosapi/mojom/app_service_types.mojom";
 
 [Stable, Extensible]
 enum TouchEventType {
@@ -66,58 +65,10 @@
 };
 
 // This interface is implemented by Ash-Chrome.
-// It enables tests in Lacros-Chrome to access the TestInterfaces
-// of chromeos::Shill*Client classes.
-[Stable, Uuid="12d5dbb4-e974-4f41-820e-6d92c2215452"]
-interface ShillClientTestInterface {
-  // From chromeos::ShillDeviceClient::TestInterface:
-
-  // Adds a fake networking device.
-  AddDevice@0(string device_path, string type,string name) => ();
-  // Clear all fake networking devices.
-  ClearDevices@1() => ();
-  // Sets a property on the given fake device.
-  SetDeviceProperty@2(string device_path,
-      string name,
-      mojo_base.mojom.Value value,
-      bool notify_changed) => ();
-  // Sets whether the SIM in the given fake device should be locked.
-  SetSimLocked@3(string device_path, bool enabled) => ();
-
-  // From chromeos::ShillServiceClient::TestInterface:
-
-  // Adds a Service to the Manager and Service stubs.
-  AddService@4(string service_path,
-      string guid,
-      string name,
-      string type,
-      string state,
-      bool visible) => ();
-  // Clears all Services from the Manager and Service stubs.
-  ClearServices@5() => ();
-  // Sets a property of the specified service.
-  SetServiceProperty@6(string service_path, string property,
-      mojo_base.mojom.Value value) => ();
-
-  // From chromeos::ShillProfileClient::TestInterface:
-
-  // Adds a profile.
-  AddProfile@7(string profile_path, string userhash) => ();
-  // Adds a service to the profile, copying properties from the
-  // ShillServiceClient entry matching |service_path|.
-  AddServiceToProfile@8(string profile_path, string service_path) => ();
-
-  // From chromeos::ShillIPConfigClient::TestInterface:
-
-  // Adds an IPConfig entry.
-  AddIPConfig@9(string ip_config_path, mojo_base.mojom.Value properties) => ();
-};
-
-// This interface is implemented by Ash-Chrome.
 // This interface provides tests a mechanism to mutate or query ash.
 // In the future, this interface may merge with an automation or a11y interface.
-// Next version: 17
-// Next method id: 27
+// Next version: 16
+// Next method id: 25
 [Stable, Uuid="1f93f9d7-e466-466c-a675-c21b48cf30d3"]
 interface TestController {
   // Clicks the middle of the views element identified by |element_name|.
@@ -258,14 +209,4 @@
   // Creates and then cancels a print job.
   [MinVersion=15]
   CreateAndCancelPrintJob@24(string job_title) => ();
-
-  // Binds a |shill_client| that Lacros-Chrome can use to access the Shill
-  // test intefaces in Ash-Chrome.
-  [MinVersion=16]
-  BindShillClientTestInterface@25(
-      pending_receiver<ShillClientTestInterface> shill_client) => ();
-
-  // Returns the sanitized (aka "hashed") username of the active user.
-  [MinVersion=16]
-  GetSanitizedActiveUsername@26() => (string sanitized_active_username);
 };
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt
index d5545a2..11a9cbfe 100644
--- a/chromeos/profiles/orderfile.newest.txt
+++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@
-chromeos-chrome-orderfile-field-104-5112.9-1656324473-benchmark-104.0.5112.33-r1.orderfile.xz
+chromeos-chrome-orderfile-field-104-5112.9-1656324473-benchmark-104.0.5112.34-r1.orderfile.xz
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index c1d86370..780b64d 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Skakel donkermodus af</translation>
 <translation id="1881188606372070653">Gaan na die <ph name="BEGIN_LINK1" />Regshulp-bladsy<ph name="END_LINK1" /> om veranderinge om wetlike redes te versoek. Sekere rekening- en stelselinligting sal dalk na Google toe gestuur word. Ons sal die inligting wat jy vir ons gee, gebruik om te help om aan tegniese kwessies aandag te gee en om ons dienste te verbeter, onderworpe aan ons <ph name="BEGIN_LINK2" />privaatheidsbeleid<ph name="END_LINK2" /> en <ph name="BEGIN_LINK3" />diensbepalings<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Hardewarehersiening</translation>
+<translation id="1904932688895783618">Hier is nog ’n paar nuttige hulpbronne:</translation>
 <translation id="1905710495812624430">Maksimum toegelate pogings is oorskry.</translation>
 <translation id="1908234395526491708">Mislukte UDP-versoeke</translation>
 <translation id="1932611479324127242">Battery-afsluiting</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Probeer foutsporingstappe</translation>
 <translation id="2016848882344942759">--geen wit etiket nie--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Koppel asseblief aan ’n netwerk en herlaai die bladsy om sluimerskerm te bekyk.</translation>
 <translation id="2080070583977670716">Nog instellings</translation>
 <translation id="2085089206770112532">Verlaag skermhelderheid</translation>
 <translation id="2105810540595158374">Toestel is 'n speletjiebeheerder.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Passing vir domein-agtervoegsel</translation>
 <translation id="7769672763586021400">Model-ID</translation>
 <translation id="7784116172884276937">Geen DNS-bedieners is opgestel nie</translation>
+<translation id="779591286616261875">Stuur nuwe verslag</translation>
 <translation id="7799817062559422778">Ligmodus</translation>
 <translation id="780301667611848630">Nee, dankie</translation>
 <translation id="7805768142964895445">Status</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Gebruik hierdie video</translation>
 <translation id="9087578468327036362">Gee hierdie navraag aan</translation>
 <translation id="9088306295921699330">Huidige gebruik</translation>
+<translation id="9092255287806472980">Jou terugvoer help om Chrome OS te verbeter en sal deur ons span nagegaan word. Weens die groot aantal verslae sal ons nie ’n antwoord kan stuur nie.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Jy sal die toestel uitmekaar moet haal</translation>
 <translation id="9098156406873149060">Hou gebruikerdata</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index 785edf6..b592d7e5 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">'ডার্ক মোড' বন্ধ করুন</translation>
 <translation id="1881188606372070653">আইনি কারণে কন্টেন্ট পরিবর্তনের অনুরোধ জানাতে <ph name="BEGIN_LINK1" />আইনি সহায়তা পৃষ্ঠা<ph name="END_LINK1" /> দেখুন। অ্যাকাউন্ট ও সিস্টেমের কিছু তথ্য Google-এর কাছে পাঠানো হতে পারে। আপনার দেওয়া তথ্য আমরা টেকনিক্যাল সমস্যা সমাধানের কাজে এবং আমাদের পরিষেবা আরও ভাল করে তোলার জন্য ব্যবহার করব। এই তথ্য <ph name="BEGIN_LINK2" />গোপনীয়তা নীতি<ph name="END_LINK2" /> এবং <ph name="BEGIN_LINK3" />পরিষেবার শর্তাবলী<ph name="END_LINK3" /> মেনেই ব্যবহার করা হবে।</translation>
 <translation id="1887850431809612466">হার্ডওয়্যার পুনর্বিবেচনাগুলি</translation>
+<translation id="1904932688895783618">এখানে কিছু অন্যান্য সহায়ক রিসোর্স রয়েছে:</translation>
 <translation id="1905710495812624430">সর্বোচ্চ অনুমোদিত প্রচেষ্টা ছাড়িয়ে গেছে।</translation>
 <translation id="1908234395526491708">UDP-এর অনুরোধ করা যায়নি</translation>
 <translation id="1932611479324127242">ব্যাটারি কাটঅফ</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">সমস্যার সমাধান করার বিভিন্ন ধাপ অনুসরণ করে দেখুন</translation>
 <translation id="2016848882344942759">--কোনও সাদা-লেবেল নেই--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">স্ক্রিনসেভার দেখার জন্য কোনও নেটওয়ার্কে কানেক্ট করে পৃষ্ঠা আবার লোড করুন।</translation>
 <translation id="2080070583977670716">আরও সেটিংস</translation>
 <translation id="2085089206770112532">ডিসপ্লে উজ্জ্বলতা কমান</translation>
 <translation id="2105810540595158374">ডিভাইস একটি গেম কন্ট্রোলার।</translation>
@@ -772,6 +774,7 @@
 <translation id="7763470514545477072">ডোমেন সাফিক্সের সাথে মিল থাকা</translation>
 <translation id="7769672763586021400">মডেল আইডি</translation>
 <translation id="7784116172884276937">কোনও ডিএনএস সার্ভার সেট আপ করা হয়নি</translation>
+<translation id="779591286616261875">নতুন রিপোর্ট পাঠান</translation>
 <translation id="7799817062559422778">'লাইট মোড'</translation>
 <translation id="780301667611848630">না থাক</translation>
 <translation id="7805768142964895445">স্থিতি</translation>
@@ -924,6 +927,7 @@
 <translation id="9082718469794970195">এই ভিডিওটি ব্যবহার করুন</translation>
 <translation id="9087578468327036362">এই কোয়েরি সম্পর্কে রিপোর্ট করুন</translation>
 <translation id="9088306295921699330">বর্তমান ব্যবহার</translation>
+<translation id="9092255287806472980">আপনার মতামত ChromeOS-কে উন্নত করতে সাহায্য করে এবং আমাদের টিম তা পর্যালোচনা করবে। অনেক বেশি সংখ্যক রিপোর্টের কারণে, আমরা উত্তর দিতে পারব না।</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">আপনাকে ডিভাইসটি আলাদা করতে হবে</translation>
 <translation id="9098156406873149060">ব্যবহারকারীর ডেটা রাখুন</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index c7e17b4..ba7a5f0 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Isključi tamni način rada</translation>
 <translation id="1881188606372070653">Idite na <ph name="BEGIN_LINK1" />stranicu Pravna pomoć<ph name="END_LINK1" /> da zatražite izmjenu sadržaja zbog zakona. Možda će se neke informacije o računu i sistemu poslati Googleu. Informacije koje navedete će nam pomoći da riješimo tehničke probleme i poboljšamo usluge, u skladu s našim <ph name="BEGIN_LINK2" />Pravilima privatnosti<ph name="END_LINK2" /> i <ph name="BEGIN_LINK3" />Uslovima korištenja usluge<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Revizija hardvera</translation>
+<translation id="1904932688895783618">Evo još nekih korisnih izvora:</translation>
 <translation id="1905710495812624430">Prekoračen je maksimalan broj dozvoljenih pokušaja.</translation>
 <translation id="1908234395526491708">Greške UDP zahtjeva</translation>
 <translation id="1932611479324127242">Isključivanje baterije</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Pokušajte s koracima za rješavanje problema</translation>
 <translation id="2016848882344942759">--ukloni white-label--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Povežite se s mrežom i ponovo učitajte stranicu da vidite čuvara ekrana.</translation>
 <translation id="2080070583977670716">Više postavki</translation>
 <translation id="2085089206770112532">Smanjivanje osvjetljenja ekrana</translation>
 <translation id="2105810540595158374">Uređaj je kontroler za igre.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Podudaranje sufiksa domene</translation>
 <translation id="7769672763586021400">ID modela</translation>
 <translation id="7784116172884276937">Nije postavljen nijedan DNS server</translation>
+<translation id="779591286616261875">Pošalji novu prijavu</translation>
 <translation id="7799817062559422778">Svijetli način rada</translation>
 <translation id="780301667611848630">Ne, hvala</translation>
 <translation id="7805768142964895445">Status</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Koristi ovaj videozapis</translation>
 <translation id="9087578468327036362">Prijavite ovaj upit</translation>
 <translation id="9088306295921699330">Trenutno korištenje</translation>
+<translation id="9092255287806472980">Vaše povratne informacije pomažu nam da poboljšamo ChromeOS i naš tim će ih pregledati. Zbog velikog broja prijava, nećemo moći poslati odgovor.</translation>
 <translation id="9095775724867566971">PluginVM</translation>
 <translation id="90977145661420967">Morat ćete rastaviti uređaj</translation>
 <translation id="9098156406873149060">Zadržavanje korisničkih podataka</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index fd53fe6..df3dde9 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Vypnout tmavý režim</translation>
 <translation id="1881188606372070653">Pokud chcete požádat o změny obsahu z právních důvodů, přejděte na stránku <ph name="BEGIN_LINK1" />Právní nápověda<ph name="END_LINK1" />. Některé údaje o účtu a systému mohou být předány společnosti Google. Informace, které jste nám poskytli, použijeme při řešení technických problémů a ke zlepšení našich služeb podléhajících našim <ph name="BEGIN_LINK2" />zásadám ochrany soukromí<ph name="END_LINK2" /> a <ph name="BEGIN_LINK3" />smluvním podmínkám<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Revize hardwaru</translation>
+<translation id="1904932688895783618">Další užitečné zdroje:</translation>
 <translation id="1905710495812624430">Byl překročen maximální povolený počet pokusů.</translation>
 <translation id="1908234395526491708">Selhání požadavků UDP</translation>
 <translation id="1932611479324127242">Úplné odpojení baterie</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Vyzkoušet postup odstraňování problémů</translation>
 <translation id="2016848882344942759">--žádný bílý štítek--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Pokud chcete zobrazit spořič obrazovky, připojte se k síti a znovu načtěte stránku.</translation>
 <translation id="2080070583977670716">Další nastavení</translation>
 <translation id="2085089206770112532">Snížit jas displeje</translation>
 <translation id="2105810540595158374">Zařízení je herní ovladač.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Shoda přípon domén</translation>
 <translation id="7769672763586021400">ID modelu</translation>
 <translation id="7784116172884276937">Nejsou nastaveny žádné servery DNS</translation>
+<translation id="779591286616261875">Odeslat nové hlášení</translation>
 <translation id="7799817062559422778">Světlý režim</translation>
 <translation id="780301667611848630">Ne, děkuji</translation>
 <translation id="7805768142964895445">Stav</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Použít toto video</translation>
 <translation id="9087578468327036362">Nahlaste tento dotaz</translation>
 <translation id="9088306295921699330">Současné využití</translation>
+<translation id="9092255287806472980">Vaše zpětná vazba nám pomáhá s vylepšováním systému Chrome OS a náš tým si ji přečte. Vzhledem k velkému počtu hlášení vám nebudeme moci odpovědět.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Budete zařízení muset rozebrat</translation>
 <translation id="9098156406873149060">Zachovat uživatelská data</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 5be1fb9..07fff97 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Deaktiver mørk tilstand</translation>
 <translation id="1881188606372070653">Gå til <ph name="BEGIN_LINK1" />siden Hjælp til Juridisk<ph name="END_LINK1" /> for at anmode om indholdsændringer af juridiske årsager. Visse konto- og systemoplysninger kan blive sendt til Google. Vi bruger de oplysninger, du giver os, til at løse tekniske problemer og forbedre vores tjenester. Oplysningerne håndteres i henhold til vores <ph name="BEGIN_LINK2" />privatlivspolitik<ph name="END_LINK2" /> og <ph name="BEGIN_LINK3" />servicevilkår<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Hardwarerevision</translation>
+<translation id="1904932688895783618">Her er nogle andre nyttige ressourcer:</translation>
 <translation id="1905710495812624430">Det maksimale antal forsøg er overskredet.</translation>
 <translation id="1908234395526491708">Mislykkede UDP-anmodninger</translation>
 <translation id="1932611479324127242">Deaktivering af batteri</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Prøv fejlfindingstrinnene</translation>
 <translation id="2016848882344942759">--intet white-label--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Opret forbindelse til et netværk, og genindlæs siden for at se baggrunden.</translation>
 <translation id="2080070583977670716">Flere indstillinger</translation>
 <translation id="2085089206770112532">Reducer skærmens lysstyrke</translation>
 <translation id="2105810540595158374">Enheden er en spilcontroller.</translation>
@@ -772,6 +774,7 @@
 <translation id="7763470514545477072">Match af domænesuffiks</translation>
 <translation id="7769672763586021400">Model-id</translation>
 <translation id="7784116172884276937">Der er ikke konfigureret nogen DNS-servere</translation>
+<translation id="779591286616261875">Send ny rapport</translation>
 <translation id="7799817062559422778">Lys tilstand</translation>
 <translation id="780301667611848630">Nej tak</translation>
 <translation id="7805768142964895445">Status</translation>
@@ -924,6 +927,7 @@
 <translation id="9082718469794970195">Brug denne video</translation>
 <translation id="9087578468327036362">Rapportér denne forespørgsel</translation>
 <translation id="9088306295921699330">Aktuelt forbrug</translation>
+<translation id="9092255287806472980">Din feedback er med til at forbedre Chrome OS og gennemgås af vores team. Vi modtager et stort antal rapporter, så vi kan ikke sende dig et svar.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Du er nødt til at skille enheden ad</translation>
 <translation id="9098156406873149060">Behold brugerdata</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index bbfe9a8..7285268 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Απενεργοποίηση λειτουργίας χαμηλού φωτισμού</translation>
 <translation id="1881188606372070653">Πηγαίνετε στη <ph name="BEGIN_LINK1" />σελίδα Βοήθεια για νομικά ζητήματα<ph name="END_LINK1" />, για να ζητήσετε αλλαγές περιεχομένου για νομικούς λόγους. Ορισμένες πληροφορίες λογαριασμού και συστήματος θα σταλούν στην Google. Θα χρησιμοποιήσουμε τις πληροφορίες που μας παρέχετε για να αντιμετωπίσουμε τεχνικά ζητήματα και να βελτιώσουμε τις υπηρεσίες μας, σύμφωνα με την <ph name="BEGIN_LINK2" />Πολιτική απορρήτου<ph name="END_LINK2" /> και τους <ph name="BEGIN_LINK3" />Όρους Παροχής Υπηρεσιών<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Έκδοση υλικού</translation>
+<translation id="1904932688895783618">Ακολουθούν μερικοί ακόμη χρήσιμοι πόροι:</translation>
 <translation id="1905710495812624430">Έγινε υπέρβαση του μέγιστου αριθμού επιτρεπόμενων προσπαθειών.</translation>
 <translation id="1908234395526491708">Σφάλματα αιτήματος UDP</translation>
 <translation id="1932611479324127242">Αποκοπή τάσης μπαταρίας</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Δοκιμή βημάτων αντιμετώπισης προβλημάτων</translation>
 <translation id="2016848882344942759">--χωρίς λευκή ετικέτα--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Συνδεθείτε σε ένα δίκτυο και επαναλάβετε τη φόρτωση της σελίδας για να δείτε την προφύλαξη οθόνης.</translation>
 <translation id="2080070583977670716">Περισσότερες ρυθμίσεις</translation>
 <translation id="2085089206770112532">Μείωση φωτεινότητας οθόνης</translation>
 <translation id="2105810540595158374">Η συσκευή είναι χειριστήριο παιχνιδιού.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Αντιστοιχία επιθήματος τομέα</translation>
 <translation id="7769672763586021400">Αναγνωριστικό μοντέλου</translation>
 <translation id="7784116172884276937">Δεν έχουν ρυθμιστεί διακομιστές DNS.</translation>
+<translation id="779591286616261875">Αποστολή νέας αναφοράς</translation>
 <translation id="7799817062559422778">Φωτεινή λειτουργία</translation>
 <translation id="780301667611848630">Όχι, ευχαριστώ</translation>
 <translation id="7805768142964895445">Κατάσταση</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Χρήση αυτού του βίντεο</translation>
 <translation id="9087578468327036362">Υποβάλετε αναφορά για αυτό το ερώτημα.</translation>
 <translation id="9088306295921699330">Τρέχουσα χρήση</translation>
+<translation id="9092255287806472980">Τα σχόλιά σας συμβάλλουν στη βελτίωση του Chrome OS και θα ελεγχθούν από την ομάδα μας. Λόγω του μεγάλου αριθμού αναφορών, δεν θα μπορέσουμε να στείλουμε απάντηση.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Θα χρειαστεί να αποσυναρμολογήσετε τη συσκευή</translation>
 <translation id="9098156406873149060">Διατήρηση δεδομένων χρήστη</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index 26ff5d4..3981269 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">خاموش کردن حالت تاریک</translation>
 <translation id="1881188606372070653">‏برای درخواست تغییر محتوا به‌دلایل حقوقی، به <ph name="BEGIN_LINK1" />صفحه «راهنمای حقوقی»<ph name="END_LINK1" /> بروید. ممکن است برخی اطلاعات سیستم و حساب به Google ارسال شود. از اطلاعاتی که به ما می‌دهید برای رسیدگی به مشکلات فنی و بهبود سرویس‌هایمان، مطابق با <ph name="BEGIN_LINK2" />خطمشی رازداری<ph name="END_LINK2" /> و <ph name="BEGIN_LINK3" />شرایط خدمات<ph name="END_LINK3" /> خود استفاده خواهیم کرد.</translation>
 <translation id="1887850431809612466">بازبینی سخت‌افزار</translation>
+<translation id="1904932688895783618">در اینجا منابع مفید دیگری ارائه شده است:</translation>
 <translation id="1905710495812624430">به حداکثر تعداد مجاز تلاش رسیده‌اید.</translation>
 <translation id="1908234395526491708">‏خطاهای درخواست UDP</translation>
 <translation id="1932611479324127242">قطع باتری</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">مراحل عیب‌یابی را امتحان کنید</translation>
 <translation id="2016848882344942759">--بدون برچسب-سفید--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">لطفاً برای مشاهده محافظ صفحه، به شبکه متصل شوید و صفحه را مجدد بار کنید.</translation>
 <translation id="2080070583977670716">تنظیمات بیشتر</translation>
 <translation id="2085089206770112532">کاهش روشنایی نمایشگر</translation>
 <translation id="2105810540595158374">دستگاه کنترل بازی است.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">مطابقت پسوند دامنه</translation>
 <translation id="7769672763586021400">شناسه مدل</translation>
 <translation id="7784116172884276937">هیچ سرور سانادی راه‌اندازی نشده است</translation>
+<translation id="779591286616261875">ارسال گزارش جدید</translation>
 <translation id="7799817062559422778">حالت روشن</translation>
 <translation id="780301667611848630">نه متشکرم</translation>
 <translation id="7805768142964895445">وضعیت</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">استفاده از این ویدیو</translation>
 <translation id="9087578468327036362">گزارش کردن این پرسمان</translation>
 <translation id="9088306295921699330">مصرف فعلی</translation>
+<translation id="9092255287806472980">‏بازخورد شما به بهبود Chrome OS کمک می‌کند و تیم ما آن را مرور خواهد کرد. به‌دلیل تعداد بالای گزارش‌ها، قادر به ارسال پاسخ نخواهیم بود.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">باید دستگاه را جداسازی کنید</translation>
 <translation id="9098156406873149060">حفظ داده‌های کاربر</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index cad4493..727df7d 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">I-off ang dark mode</translation>
 <translation id="1881188606372070653">Pumunta sa <ph name="BEGIN_LINK1" />page na Legal na Tulong<ph name="END_LINK1" /> para humiling ng mga pagbabago sa content para sa mga legal na dahilan. Puwedeng ipadala sa Google ang ilang impormasyon ng account at system. Gagamitin namin ang impormasyong ibibigay mo sa amin para makatulong sa pagtugon sa mga teknikal na isyu at mapahusay ang aming mga serbisyo, na napapailalim sa aming <ph name="BEGIN_LINK2" />Patakaran sa Privacy<ph name="END_LINK2" /> at <ph name="BEGIN_LINK3" />Mga Tuntunin ng Serbisyo<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Rebisyon ng hardware</translation>
+<translation id="1904932688895783618">Narito ang ilang pang kapaki-pakinabang na resource:</translation>
 <translation id="1905710495812624430">Nalampasan na ang maximum na pinapahintulutang bilang ng pagsubok</translation>
 <translation id="1908234395526491708">Mga hindi naisagawang kahilingan sa UDP</translation>
 <translation id="1932611479324127242">Pag-cut off ng baterya</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Subukan ang mga hakbang sa pag-troubleshoot</translation>
 <translation id="2016848882344942759">--walang white-label--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Kumonekta sa network at i-reload ang page para makita ang screen saver.</translation>
 <translation id="2080070583977670716">Higit pang mga setting</translation>
 <translation id="2085089206770112532">Babaan ang liwanag ng display</translation>
 <translation id="2105810540595158374">Game controller ang device.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Pagtugma sa domain suffix</translation>
 <translation id="7769672763586021400">Model ID</translation>
 <translation id="7784116172884276937">Walang naka-set up na DNS server</translation>
+<translation id="779591286616261875">Magpadala ng bagong ulat</translation>
 <translation id="7799817062559422778">Light mode</translation>
 <translation id="780301667611848630">Hindi salamat</translation>
 <translation id="7805768142964895445">Katayuan</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Gamitin ang video na ito</translation>
 <translation id="9087578468327036362">Iulat ang query na ito</translation>
 <translation id="9088306295921699330">Kasalukuyang paggamit</translation>
+<translation id="9092255287806472980">Tumutulong ang iyong feedback na pahusayin ang Chrome OS at susuriin ito ng aming team. Dahil sa napakaraming ulat, hindi kami makakapagpadala ng sagot.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Kakailanganin mong baklasin ang device</translation>
 <translation id="9098156406873149060">Panatilihin ang data ng user</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index ab9e263..4a12f766 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Караңгы теманы өчүрүү</translation>
 <translation id="1881188606372070653">Эгер кандайдыр бир мыйзам бузулуп жатса, <ph name="BEGIN_LINK1" />Юридикалык жардам бетине<ph name="END_LINK1" /> өтүңүз. Аккаунт жана тутум жөнүндө айрым маалымат Google'га жөнөтүлүшү мүмкүн. Сиз берген маалыматты <ph name="BEGIN_LINK2" />Купуялык саясаты<ph name="END_LINK2" /> менен <ph name="BEGIN_LINK3" />Тейлөө шарттарына<ph name="END_LINK3" /> ылайык техникалык маселелерди чечүү жана кызматтарыбызды жакшыртуу үчүн пайдаланабыз.</translation>
 <translation id="1887850431809612466">Жабдыкты оңдоо</translation>
+<translation id="1904932688895783618">Бул жерде башка пайдалуу булактар келтирилди:</translation>
 <translation id="1905710495812624430">Аракеттер уруксат берилген чегинен ашты.</translation>
 <translation id="1908234395526491708">Ишке ашпай калган UDP сурамдары</translation>
 <translation id="1932611479324127242">Батареяны өчүрүү</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Бузулууларды аныктап оңдоо кадамдарын аткарып көрүңүз</translation>
 <translation id="2016848882344942759">--ак энбелги жок--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Көшөгөнү көрүү үчүн тармакка туташып, баракты кайра жүктөңүз.</translation>
 <translation id="2080070583977670716">Дагы параметрлер</translation>
 <translation id="2085089206770112532">Дисплейдин жарыктыгын азайтуу</translation>
 <translation id="2105810540595158374">Түзмөк — оюнду көзөмөлдөгүч.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Домен суффиксине окшош</translation>
 <translation id="7769672763586021400">Үлгү ID'си</translation>
 <translation id="7784116172884276937">DNS серверлери туураланган жок</translation>
+<translation id="779591286616261875">Жаңы кабарды жөнөтүү</translation>
 <translation id="7799817062559422778">Жарык режим</translation>
 <translation id="780301667611848630">Жок, рахмат</translation>
 <translation id="7805768142964895445">Статусу</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Ушул видеону колдонуу</translation>
 <translation id="9087578468327036362">Бул сурам тууралуу кабарлоо</translation>
 <translation id="9088306295921699330">Учурдагы колдонулушу</translation>
+<translation id="9092255287806472980">Пикириңиз Chrome OS'ту жакшыртууга жардам берип, жамаатыбыз тарабынан каралып чыгат. Кабарлардын көп болгонуна байланыштуу жооп жаза албайбыз.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Түзмөктү ажыратышыңыз керек болот</translation>
 <translation id="9098156406873149060">Колдонуучунун маалыматын сактоо</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb
index f2984aa..f3842cfe4b 100644
--- a/chromeos/strings/chromeos_strings_mk.xtb
+++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Исклучи темен режим</translation>
 <translation id="1881188606372070653">Одете на <ph name="BEGIN_LINK1" />страницата „Правна помош“<ph name="END_LINK1" /> за да побарате промени во содржините поради правни причини. Одредени податоци за сметката и системот може да се испратат до Google. Ќе ги користиме податоците што ни ги давате за да помогнеме во решавањето на техничките проблеми и да ги подобриме нашите услуги, што подлежат на нашата <ph name="BEGIN_LINK2" />Политика за приватност<ph name="END_LINK2" /> и<ph name="BEGIN_LINK3" />Условите за користење<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Ревизија на хардвер</translation>
+<translation id="1904932688895783618">Еве неколку други корисни ресурси:</translation>
 <translation id="1905710495812624430">Максималниот број дозволени обиди е надминат.</translation>
 <translation id="1908234395526491708">Неуспешни UDP-барања</translation>
 <translation id="1932611479324127242">Исклучи го напојувањето на батеријата</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Пробајте ги чекорите за решавање проблеми</translation>
 <translation id="2016848882344942759">--без бела етикета--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Поврзете се на мрежа и повторно вчитајте ја страницата за да се прикаже заштитникот на екранот.</translation>
 <translation id="2080070583977670716">Повеќе поставки</translation>
 <translation id="2085089206770112532">Осветленоста на екранот се намали</translation>
 <translation id="2105810540595158374">Уредот е контролер на игра.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Совпаѓање на суфиксот на доменот</translation>
 <translation id="7769672763586021400">ID на модел</translation>
 <translation id="7784116172884276937">Нема поставени DNS-сервери</translation>
+<translation id="779591286616261875">Испратете нова пријава</translation>
 <translation id="7799817062559422778">Светол режим</translation>
 <translation id="780301667611848630">Не, фала</translation>
 <translation id="7805768142964895445">Статус</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Користи го ова видео</translation>
 <translation id="9087578468327036362">Пријавете го барањево</translation>
 <translation id="9088306295921699330">Моментално користење</translation>
+<translation id="9092255287806472980">Вашите повратни информации помагаат да се подобри Chrome OS и ќе бидат разгледани од нашиот тим. Поради големиот број на извештаи, нема да можеме да испратиме одговор.</translation>
 <translation id="9095775724867566971">PluginVm</translation>
 <translation id="90977145661420967">Треба да го раздвоите уредот</translation>
 <translation id="9098156406873149060">Задржи ги податоците на корисникот</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb
index 9f06e3e..f6d97c2 100644
--- a/chromeos/strings/chromeos_strings_mn.xtb
+++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Бараан горимыг унтраах</translation>
 <translation id="1881188606372070653">Хууль эрх зүйн шалтгаанаар контентод өөрчлөлт хийхийг хүсвэл <ph name="BEGIN_LINK1" />Хуулийн тусламжийн хуудас<ph name="END_LINK1" /> руу очно уу. Зарим бүртгэл болон системийн мэдээллийг Google рүү илгээж болзошгүй. Бид таны өгсөн мэдээллийг өөрсдийн <ph name="BEGIN_LINK2" />Нууцлалын бодлого<ph name="END_LINK2" />, <ph name="BEGIN_LINK3" />Үйлчилгээний нөхцөлийн<ph name="END_LINK3" /> дагуу техникийн асуудлыг шийдвэрлэхэд туслах болон үйлчилгээнүүдээ сайжруулахад ашиглана.</translation>
 <translation id="1887850431809612466">Техник хангамжийн шалгалт</translation>
+<translation id="1904932688895783618">Эндээс бусад хэрэгтэй нөөцийг харна уу:</translation>
 <translation id="1905710495812624430">Оролдлогын тоо дээд хэмжээнээс хэтэрсэн.</translation>
 <translation id="1908234395526491708">UDP хүсэлтийн алдаа</translation>
 <translation id="1932611479324127242">Батарейг таслах</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Асуудал шийдэх алхмуудыг турших</translation>
 <translation id="2016848882344942759">--цагаан-шошго байхгүй--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Дэлгэц амраагчийг үзэхийн тулд сүлжээнд холбогдож, хуудсыг дахин ачаална уу.</translation>
 <translation id="2080070583977670716">Нэмэлт тохиргоо</translation>
 <translation id="2085089206770112532">Дэлгэцийн гэрэлтүүлгийг багасгах</translation>
 <translation id="2105810540595158374">Төхөөрөмж нь тоглоомын гар байна.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Домэйн дагаврын тохирол</translation>
 <translation id="7769672763586021400">Загварын ID</translation>
 <translation id="7784116172884276937">Тохируулсан DNS сервер байхгүй</translation>
+<translation id="779591286616261875">Шинэ мэдээлэл илгээх</translation>
 <translation id="7799817062559422778">Гэрэлтэй горим</translation>
 <translation id="780301667611848630">Үгүй, баярлалаа</translation>
 <translation id="7805768142964895445">Байр байдал</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Энэ видеог ашиглах</translation>
 <translation id="9087578468327036362">Энэ асуулгыг мэдээлэх</translation>
 <translation id="9088306295921699330">Одоогийн ашиглалт</translation>
+<translation id="9092255287806472980">Таны санал хүсэлт Chrome OS-г сайжруулахад туслах бөгөөд үүнийг манай баг шалгана. Олон тооны мэдээлэл ирдэг тул бид хариу илгээх боломжгүй.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Та төхөөрөмжийг задлах шаардлагатай болно</translation>
 <translation id="9098156406873149060">Хэрэглэгчийн өгөгдлийг хадгалах</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index 14f0fe4c..f505404 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">အမှောင်မုဒ် ပိတ်ရန်</translation>
 <translation id="1881188606372070653">ဥပဒေဆိုင်ရာ အကြောင်းများကြောင့် အချက်အလက်များ ပြောင်းလိုပါက <ph name="BEGIN_LINK1" />'ဥပဒေဆိုင်ရာ အကူအညီ' စာမျက်နှာ<ph name="END_LINK1" /> သို့ သွားပါ။ အကောင့်နှင့် စနစ်အချက်အလက် အချို့ကို Google သို့ ပေးပို့နိုင်သည်။ ကျွန်ုပ်တို့၏ <ph name="BEGIN_LINK2" />ကိုယ်ရေးအချက်အလက်လုံခြုံမှုဆိုင်ရာ မူဝါဒ<ph name="END_LINK2" /> နှင့် <ph name="BEGIN_LINK3" />ဝန်ဆောင်မှု စည်းမျဉ်းများ<ph name="END_LINK3" /> အရ ကျွန်ုပ်တို့၏ ဝန်ဆောင်မှုများ တိုးတက်ကောင်းမွန်လာစေရန်နှင့် နည်းပညာဆိုင်ရာ ပြဿနာများ ကူညီဖြေရှင်းပေးနိုင်ရန် သင်ပေးသည့် အချက်အလက်များကို ကျွန်ုပ်တို့ အသုံးပြုသွားပါမည်။</translation>
 <translation id="1887850431809612466">စက်ပစ္စည်း စိစစ်သုံးသပ်ခြင်း</translation>
+<translation id="1904932688895783618">အခြားအသုံးဝင်မည့် ရင်းမြစ်အချို့ကို ဤနေရာတွင် ဖော်ပြထားသည်-</translation>
 <translation id="1905710495812624430">အများဆုံးခွင့်ပြုပေးထားသည့် အခေါက်အရေအတွက်ထက် ကျော်လွန်သွားပါပြီ။</translation>
 <translation id="1908234395526491708">UDP တောင်းဆိုချက် ချွတ်ယွင်းမှုများ</translation>
 <translation id="1932611479324127242">ဘက်ထရီ ဖြတ်တောက်ရန်</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">ပြဿနာရှာဖွေဖြေရှင်းခြင်း အဆင့်များ စမ်းကြည့်ရန်</translation>
 <translation id="2016848882344942759">--အဖြူရောင်-အညွှန်း မရှိပါ--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">ဖန်သားပြင်နားသည့်စနစ်ကိုကြည့်ရန် ကွန်ရက်ချိတ်ဆက်ပြီး စာမျက်နှာကို ပြန်လည် စတင်ပါ။</translation>
 <translation id="2080070583977670716">ဆက်တင်များ ပိုမိုပြရန်</translation>
 <translation id="2085089206770112532">ဖန်သားပြင်တောက်ပမှု လျှော့ရန်</translation>
 <translation id="2105810540595158374">ကိရိယာသည် ဂိမ်းခလုတ်ဖြစ်သည်။</translation>
@@ -772,6 +774,7 @@
 <translation id="7763470514545477072">ဒိုမိန်းနောက်ဆက် ကိုက်ညီမှု</translation>
 <translation id="7769672763586021400">မော်ဒယ်နံပါတ်</translation>
 <translation id="7784116172884276937">DNS ဆာဗာများ စနစ်ထည့်သွင်းမထားပါ</translation>
+<translation id="779591286616261875">အကြောင်းကြားချက် အသစ်ပို့ရန်</translation>
 <translation id="7799817062559422778">အလင်းမုဒ်</translation>
 <translation id="780301667611848630">မလိုပါ</translation>
 <translation id="7805768142964895445">အခြေအနေ</translation>
@@ -924,6 +927,7 @@
 <translation id="9082718469794970195">ဤဗီဒီယိုသုံးရန်</translation>
 <translation id="9087578468327036362">ဤမေးမြန်းချက်ကို အကြောင်းကြားရန်</translation>
 <translation id="9088306295921699330">လက်ရှိ အသုံးပြုမှု</translation>
+<translation id="9092255287806472980">သင့်အကြံပြုချက်သည် Chrome OS ပိုမိုကောင်းမွန်စေရန် ကူညီပေးနိုင်ပြီး ၎င်းကို ကျွန်ုပ်တို့အဖွဲ့က စိစစ်ပါမည်။ အကြောင်းကြားချက်ပေးပို့မှု အလွန်များသဖြင့် အကြောင်းပြန်နိုင်မည် မဟုတ်ပါ။</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">စက်ကိုဖြုတ်ရန် လိုအပ်လိမ့်မည်</translation>
 <translation id="9098156406873149060">အသုံးပြုသူဒေတာကို ဆက်ထားရန်</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index 7d0ba38..64a6029 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Slå av mørk modus</translation>
 <translation id="1881188606372070653">Gå til <ph name="BEGIN_LINK1" />siden for juridisk hjelp<ph name="END_LINK1" /> for å be om innholdsendringer på juridisk grunnlag. Noe konto- og systeminformasjon kan bli sendt til Google. Vi bruker informasjonen du gir oss, til å løse tekniske problemer og forbedre tjenestene våre i henhold til <ph name="BEGIN_LINK2" />personvernreglene<ph name="END_LINK2" /> and <ph name="BEGIN_LINK3" />vilkårene for bruk<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Maskinvareversjon</translation>
+<translation id="1904932688895783618">Her er noen andre nyttige ressurser:</translation>
 <translation id="1905710495812624430">Du har overskredet maksimumsgrensen for antall forsøk.</translation>
 <translation id="1908234395526491708">Mislykkede UDP-forespørsler</translation>
 <translation id="1932611479324127242">Batteriavkutting</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Prøv feilsøkingstrinn</translation>
 <translation id="2016848882344942759">– ikke noe eget varemerke –</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Koble til et nettverk og last inn siden på nytt for å se skjermspareren.</translation>
 <translation id="2080070583977670716">Flere innstillinger</translation>
 <translation id="2085089206770112532">Skjermlysstyrke ned</translation>
 <translation id="2105810540595158374">Enheten er en spillkontroller.</translation>
@@ -153,6 +155,7 @@
 <translation id="2163937499206714165">Slå på mørk modus</translation>
 <translation id="2177831236093724629">Fant <ph name="LINK_BEGIN" />ikke-kvalifiserte komponenter<ph name="LINK_END" />. For å sikre at alle kvalifiserte komponenter identifiseres, oppdater Chrome OS til nyeste versjon.</translation>
 <translation id="2180197493692062006">Noe gikk galt. Prøv å åpne appen på nytt.</translation>
+<translation id="2182088270354640012">Takk for tilbakemeldingen. Tilbakemeldingen din bidrar til å gjøre Chrome OS bedre og blir gjennomgått av Chrome OS-teamet. På grunn av antallet rapporter vi mottar, kan vi ikke gi deg noe direkte svar.</translation>
 <translation id="2209788852729124853">Tilbakestill trafikktellere</translation>
 <translation id="2212733584906323460">Navneoppslag</translation>
 <translation id="2217935453350629363">Nåværende hastighet</translation>
@@ -256,6 +259,7 @@
 <translation id="3226405216343213872">Ser etter skannere</translation>
 <translation id="3246869037381808805">Utskriftsjobber som er eldre enn 1 dag, blir fjernet</translation>
 <translation id="3268178239013324452">Mislykket – luken er åpen</translation>
+<translation id="3275729367986477355">Brukerbilde</translation>
 <translation id="3283504360622356314">{0,plural, =1{Rediger filen}other{Rediger filene}}</translation>
 <translation id="3286515922899063534"><ph name="CURRENT" /> GHz</translation>
 <translation id="3291996639387199448">Nøkkelretning</translation>
@@ -429,6 +433,7 @@
 <translation id="4793710386569335688">For å få mer hjelp, gå til <ph name="BEGIN_LINK" />brukerstøtten<ph name="END_LINK" />.</translation>
 <translation id="4793756956024303490">Algoritme for komprimering</translation>
 <translation id="4794140124556169553">Kjøring av en prosessortest kan påvirke systemets ytelse</translation>
+<translation id="4800589996161293643">Chromebook-fellesskapet</translation>
 <translation id="4804818685124855865">Koble fra</translation>
 <translation id="4808449224298348341">Avbrøt utskriftsjobben <ph name="DOCUMENT_TITLE" /></translation>
 <translation id="4809927044794281115">Lyst tema</translation>
@@ -488,6 +493,7 @@
 Prøv å trykke på mikrofonen for å spørre meg om noe.</translation>
 <translation id="5212593641110061691">Tabloid</translation>
 <translation id="5222676887888702881">Logg av</translation>
+<translation id="522307662484862935">Ikke ta med e-postadressen</translation>
 <translation id="5227902338748591677">Tidsplan for mørkt tema</translation>
 <translation id="5234764350956374838">Lukk</translation>
 <translation id="5252456968953390977">Datastreifing</translation>
@@ -614,6 +620,7 @@
 <translation id="6284632978374966585">Slå på mørkt tema</translation>
 <translation id="6295178529664209245">Vil du fortsette reparasjonen?</translation>
 <translation id="6302401976930124515"><ph name="TEST_NAME" />testen er avbrutt</translation>
+<translation id="631063167932043783">Utforsk-appen</translation>
 <translation id="6319207335391420837">Oppdater fastvaren på <ph name="DEVICE_NAME" /></translation>
 <translation id="6321407676395378991">Slå på skjermspareren</translation>
 <translation id="6325525973963619867">Mislykket</translation>
@@ -721,6 +728,7 @@
 <translation id="7297226631177386107">Kan ikke koble til HTTPS-nettsteder gjennom brannmuren</translation>
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
+<translation id="7308203371573257315">Spør ekspertene i Chromebook-hjelpeforumet</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Trykk på Søk + mellomrom for å se resultatet i Google Søk.</translation>
 <translation id="7343649194310845056">Nettverksenheter</translation>
@@ -763,9 +771,11 @@
 <translation id="773153675489693198">Syklusantall</translation>
 <translation id="7747039790905080783">Forhåndsdelt nøkkel</translation>
 <translation id="7762130827864645708">Passordendringen var vellykket. Bruk det nye passordet fra nå av.</translation>
+<translation id="7762839321248874531">Send <ph name="BEGIN_LINK1" />system- og appinformasjon<ph name="END_LINK1" /> samt <ph name="BEGIN_LINK2" />verdier<ph name="END_LINK2" /></translation>
 <translation id="7763470514545477072">Samsvarende domenesuffiks</translation>
 <translation id="7769672763586021400">Modell-ID</translation>
 <translation id="7784116172884276937">Ingen DNS-tjenere er konfigurert</translation>
+<translation id="779591286616261875">Send ny rapport</translation>
 <translation id="7799817062559422778">Lys modus</translation>
 <translation id="780301667611848630">Nei takk</translation>
 <translation id="7805768142964895445">Status</translation>
@@ -832,6 +842,7 @@
 <translation id="8382302752385457774">Eget varemerke</translation>
 <translation id="8395584934117017006">Denne <ph name="DEVICE_TYPE" />-enheten er bedriftsadministrert</translation>
 <translation id="8398927464629426868">Hvor raskt enheten lades eller utlades for øyeblikket</translation>
+<translation id="8420955526972171689">Kjør tester og feilsøking for maskinvareproblemer</translation>
 <translation id="8422748173858722634">IMEI</translation>
 <translation id="8428073762635678092">Internt tastatur</translation>
 <translation id="8431300646573772016">Dette er nytt i ChromeOS</translation>
@@ -917,6 +928,7 @@
 <translation id="9082718469794970195">Bruk denne videoen</translation>
 <translation id="9087578468327036362">Rapportér dette søket</translation>
 <translation id="9088306295921699330">Nåværende bruk</translation>
+<translation id="9092255287806472980">Tilbakemeldingen din bidrar til å gjøre Chrome OS bedre. Den blir gjennomgått av teamet vårt. På grunn av det store antallet rapporter kan vi ikke sende svar.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Du må ta enheten fra hverandre</translation>
 <translation id="9098156406873149060">Behold brukerdata</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index efeef4d..82a21acc 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Desativar modo escuro</translation>
 <translation id="1881188606372070653">Aceda à <ph name="BEGIN_LINK1" />página de Ajuda legal<ph name="END_LINK1" /> para pedir alterações de conteúdo por motivos legais. Algumas informações da conta e do sistema podem ser enviadas para a Google. Usamos as informações fornecidas por si na resolução de problemas técnicos e melhoria dos nossos serviços, sujeitas à <ph name="BEGIN_LINK2" />Política de Privacidade<ph name="END_LINK2" /> e aos <ph name="BEGIN_LINK3" />Termos de Utilização<ph name="END_LINK3" /> da Google.</translation>
 <translation id="1887850431809612466">Revisão de hardware</translation>
+<translation id="1904932688895783618">Seguem-se outros recursos úteis:</translation>
 <translation id="1905710495812624430">Foi excedido o número máximo de tentativas permitidas.</translation>
 <translation id="1908234395526491708">Falhas de pedidos de UDP.</translation>
 <translation id="1932611479324127242">Corte da bateria</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Experimente passos de resolução de problemas</translation>
 <translation id="2016848882344942759">--sem etiqueta de autorizações--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Estabeleça ligação a uma rede e atualize a página para ver a proteção de ecrã.</translation>
 <translation id="2080070583977670716">Mais definições</translation>
 <translation id="2085089206770112532">Diminuir o brilho do ecrã</translation>
 <translation id="2105810540595158374">O dispositivo é um comando de jogos.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Correspondência do sufixo do domínio</translation>
 <translation id="7769672763586021400">ID do modelo</translation>
 <translation id="7784116172884276937">Não foram configurados servidores DNS</translation>
+<translation id="779591286616261875">Enviar novo relatório</translation>
 <translation id="7799817062559422778">Modo claro</translation>
 <translation id="780301667611848630">Não, obrigado</translation>
 <translation id="7805768142964895445">Estado</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Utilizar este vídeo</translation>
 <translation id="9087578468327036362">Denunciar esta consulta</translation>
 <translation id="9088306295921699330">Utilização atual</translation>
+<translation id="9092255287806472980">O seu feedback ajuda a melhorar o Chrome OS e vai ser analisado pela nossa equipa. Devido ao elevado número de relatórios, não é possível enviar uma resposta.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Vai ter de desmontar o dispositivo</translation>
 <translation id="9098156406873149060">Manter dados do utilizador</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index e4083a13..366141d 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Vypnúť tmavý režim</translation>
 <translation id="1881188606372070653">Ak chcete požiadať o zmenu obsahu z právnych dôvodov, prejdite na stránku <ph name="BEGIN_LINK1" />právnej pomoci<ph name="END_LINK1" />. Niektoré informácie o účte a systéme môžu byť odoslané Googlu. Pomocou informácií, ktoré nám poskytnete, odstránime technické problémy a zlepšíme svoje služby v súlade s <ph name="BEGIN_LINK2" />pravidlami ochrany súkromia<ph name="END_LINK2" /> a <ph name="BEGIN_LINK3" />zmluvnými podmienkami<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Revízia hardvéru</translation>
+<translation id="1904932688895783618">Tu je niekoľko ďalších užitočných zdrojov:</translation>
 <translation id="1905710495812624430">Maximálny počet povolených pokusov bol prekročený.</translation>
 <translation id="1908234395526491708">Neúspešné žiadosti UDP</translation>
 <translation id="1932611479324127242">Odpojenie batérie</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Vyskúšať kroky na riešenie problémov</translation>
 <translation id="2016848882344942759">--žiadny štítok White--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Ak chcete zobraziť šetrič obrazovky, pripojte sa k sieti a znova načítajte stránku.</translation>
 <translation id="2080070583977670716">Ďalšie nastavenia</translation>
 <translation id="2085089206770112532">Zníženie jasu obrazovky</translation>
 <translation id="2105810540595158374">Zariadenie je herný ovládač.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Zhoda prípony domény</translation>
 <translation id="7769672763586021400">ID modelu</translation>
 <translation id="7784116172884276937">Nie sú nastavené žiadne servery DNS</translation>
+<translation id="779591286616261875">Odoslať nové hlásenie</translation>
 <translation id="7799817062559422778">Svetlý režim</translation>
 <translation id="780301667611848630">Nie, ďakujem</translation>
 <translation id="7805768142964895445">Stav</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Použiť toto video</translation>
 <translation id="9087578468327036362">Nahlásiť tento dopyt</translation>
 <translation id="9088306295921699330">Aktuálne využitie</translation>
+<translation id="9092255287806472980">Vaša spätná väzba pomáha zlepšovať ChromeOS a náš tím ju skontroluje. Vzhľadom na veľký počet hlásení vám nebudeme môcť odpovedať.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Zariadenie budete musieť rozobrať</translation>
 <translation id="9098156406873149060">Ponechať údaje používateľa</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 363490c..e7f057c7 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Izklop temnega načina</translation>
 <translation id="1881188606372070653">Če želite zahtevati spremembe vsebine zaradi pravnih razlogov, obiščite <ph name="BEGIN_LINK1" />stran s pravno pomočjo<ph name="END_LINK1" />. Nekateri podatki o računu in sistemu bodo morda poslani Googlu. Informacije, ki nam jih pošljete, bomo v skladu z našim <ph name="BEGIN_LINK2" />pravilnikom o zasebnosti<ph name="END_LINK2" /> in <ph name="BEGIN_LINK3" />pogoji storitve<ph name="END_LINK3" /> uporabljali za odpravljanje tehničnih težav in izboljševanje naših storitev.</translation>
 <translation id="1887850431809612466">Različica strojne opreme</translation>
+<translation id="1904932688895783618">Na voljo so še nekateri drugi koristni viri:</translation>
 <translation id="1905710495812624430">Preseženo je največje dovoljeno število dovoljenih poskusov.</translation>
 <translation id="1908234395526491708">Neuspele zahteve UDP</translation>
 <translation id="1932611479324127242">Odtegnitev napajanja bateriji</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Poskusite postopke za odpravljanje težav.</translation>
 <translation id="2016848882344942759">--brez bele nalepke--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Povežite se z omrežjem in znova naložite stran, če si želite ogledati ohranjevalnik zaslona.</translation>
 <translation id="2080070583977670716">Več nastavitev</translation>
 <translation id="2085089206770112532">Zmanjšanje svetlosti zaslona</translation>
 <translation id="2105810540595158374">Naprava je krmilnik za igre.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Ujemanje pripone domene</translation>
 <translation id="7769672763586021400">ID modela</translation>
 <translation id="7784116172884276937">Strežniki DNS niso nastavljeni.</translation>
+<translation id="779591286616261875">Pošlji novo poročilo</translation>
 <translation id="7799817062559422778">Svetli način</translation>
 <translation id="780301667611848630">Ne, hvala</translation>
 <translation id="7805768142964895445">Stanje</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Uporabi ta videoposnetek</translation>
 <translation id="9087578468327036362">Prijavite to poizvedbo</translation>
 <translation id="9088306295921699330">Trenutna poraba</translation>
+<translation id="9092255287806472980">S povratnimi informacijami, ki jih pregleda naša skupina, pomagate izboljšati Chrome OS. Zaradi velikega števila poročil vam ne bomo mogli odgovoriti.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Napravo boste morali razstaviti</translation>
 <translation id="9098156406873149060">Ohrani podatke uporabnika</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index 4538c6f..21ea4341 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Isključite tamni režim</translation>
 <translation id="1881188606372070653">Idite na <ph name="BEGIN_LINK1" />stranicu pravne pomoći<ph name="END_LINK1" /> da biste zatražili promene sadržaja iz pravnih razloga. Neke informacije o nalogu i sistemu mogu da se šalju Google-u. Koristićemo informacije koje nam date kao pomoć u rešavanju tehničkih problema i u cilju poboljšanja usluga, a shodno <ph name="BEGIN_LINK2" />politici privatnosti<ph name="END_LINK2" /> i <ph name="BEGIN_LINK3" />uslovima korišćenja usluge<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Revizija hardvera</translation>
+<translation id="1904932688895783618">Evo još nekih korisnih resursa:</translation>
 <translation id="1905710495812624430">Premašen je maksimalni broj pokušaja.</translation>
 <translation id="1908234395526491708">Neuspeli UDP zahtevi</translation>
 <translation id="1932611479324127242">Gašenje baterije</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Isprobajte korake za rešavanje problema</translation>
 <translation id="2016848882344942759">--nema bele oznake--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Povežite se na mrežu i ponovo učitajte stranicu da biste videli čuvar ekrana.</translation>
 <translation id="2080070583977670716">Više podešavanja</translation>
 <translation id="2085089206770112532">Smanjite osvetljenost ekrana</translation>
 <translation id="2105810540595158374">Uređaj je kontroler za igre.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Podudaranje sufiksa domena</translation>
 <translation id="7769672763586021400">ID modela</translation>
 <translation id="7784116172884276937">Nije podešen nijedan DNS server</translation>
+<translation id="779591286616261875">Pošalji novi izveštaj</translation>
 <translation id="7799817062559422778">Svetli režim</translation>
 <translation id="780301667611848630">Ne, hvala</translation>
 <translation id="7805768142964895445">Status</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Koristi ovaj video</translation>
 <translation id="9087578468327036362">Prijavite ovaj upit</translation>
 <translation id="9088306295921699330">Trenutna iskorišćenost</translation>
+<translation id="9092255287806472980">Povratne informacije nam pomažu da poboljšamo Chrome OS i pregledaće ih naš tim. Zbog velikog broja izveštaja ne možemo da šaljemo odgovore.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Treba da rastavite ovaj uređaj</translation>
 <translation id="9098156406873149060">Zadrži podatke korisnika</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index ac2f9dd..4cbf301 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">Искључите тамни режим</translation>
 <translation id="1881188606372070653">Идите на <ph name="BEGIN_LINK1" />страницу правне помоћи<ph name="END_LINK1" /> да бисте затражили промене садржаја из правних разлога. Неке информације о налогу и систему могу да се шаљу Google-у. Користићемо информације које нам дате као помоћ у решавању техничких проблема и у циљу побољшања услуга, а сходно <ph name="BEGIN_LINK2" />политици приватности<ph name="END_LINK2" /> и <ph name="BEGIN_LINK3" />условима коришћења услуге<ph name="END_LINK3" />.</translation>
 <translation id="1887850431809612466">Ревизија хардвера</translation>
+<translation id="1904932688895783618">Ево још неких корисних ресурса:</translation>
 <translation id="1905710495812624430">Премашен је максимални број покушаја.</translation>
 <translation id="1908234395526491708">Неуспели UDP захтеви</translation>
 <translation id="1932611479324127242">Гашење батерије</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">Испробајте кораке за решавање проблема</translation>
 <translation id="2016848882344942759">--нема беле ознаке--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">Повежите се на мрежу и поново учитајте страницу да бисте видели чувар екрана.</translation>
 <translation id="2080070583977670716">Више подешавања</translation>
 <translation id="2085089206770112532">Смањите осветљеност екрана</translation>
 <translation id="2105810540595158374">Уређај је контролер за игре.</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">Подударање суфикса домена</translation>
 <translation id="7769672763586021400">ИД модела</translation>
 <translation id="7784116172884276937">Није подешен ниједан DNS сервер</translation>
+<translation id="779591286616261875">Пошаљи нови извештај</translation>
 <translation id="7799817062559422778">Светли режим</translation>
 <translation id="780301667611848630">Не, хвала</translation>
 <translation id="7805768142964895445">Статус</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">Користи овај видео</translation>
 <translation id="9087578468327036362">Пријавите овај упит</translation>
 <translation id="9088306295921699330">Тренутна искоришћеност</translation>
+<translation id="9092255287806472980">Повратне информације нам помажу да побољшамо Chrome ОС и прегледаће их наш тим. Због великог броја извештаја не можемо да шаљемо одговоре.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">Треба да раставите овај уређај</translation>
 <translation id="9098156406873149060">Задржи податке корисника</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index e57471c..226d0e74 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">డార్క్ మోడ్‌ను ఆఫ్ చేయండి</translation>
 <translation id="1881188606372070653">చట్టపరమైన కారణాల దృష్ట్యా కంటెంట్‌కు మార్పులను రిక్వెస్ట్ చేయడానికి <ph name="BEGIN_LINK1" />చట్టపరమైన సహాయ పేజీకి<ph name="END_LINK1" /> వెళ్లండి. ఖాతా, సిస్టమ్‌కు సంబంధించిన కొంత సమాచారం Googleకు పంపబడవచ్చు. మీరు మాకు అందించే సమాచారాన్ని మా <ph name="BEGIN_LINK2" />గోప్యతా పాలసీ<ph name="END_LINK2" />, ఇంకా <ph name="BEGIN_LINK3" />సర్వీస్ నియమాలకు<ph name="END_LINK3" /> అనుగుణంగా, టెక్నికల్ సమస్యలను పరిష్కరించడానికి, మా సర్వీస్‌లను మరింత మెరుగుపరచడానికి మేము ఉపయోగిస్తాము.</translation>
 <translation id="1887850431809612466">హార్డ్‌వేర్ పునర్విమర్శ</translation>
+<translation id="1904932688895783618">కొన్ని ఇతర సహాయకరమైన రిసోర్స్‌లు ఇవిగోండి:</translation>
 <translation id="1905710495812624430">అనుమతించిన గరిష్ట ప్రయత్నాలు మించిపోయారు.</translation>
 <translation id="1908234395526491708">UDP రిక్వెస్ట్ వైఫల్యాలు</translation>
 <translation id="1932611479324127242">బ్యాటరీ కట్‌ఆఫ్</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">పరిష్కార ప్రక్రియకు సంబంధించిన దశలను ట్రై చేయండి</translation>
 <translation id="2016848882344942759">--వైట్ లేబుల్ ఉండదు--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">స్క్రీన్ సేవర్‌ను చూడటానికి, దయచేసి నెట్‌వర్క్‌కు కనెక్ట్ చేసి, పేజీని రీలోడ్ చేయండి.</translation>
 <translation id="2080070583977670716">మరిన్ని సెట్టింగ్‌లు</translation>
 <translation id="2085089206770112532">డిస్‌ప్లే బ్రైట్‌నెస్‌ను తగ్గించండి</translation>
 <translation id="2105810540595158374">పరికర రకం గేమ్ కంట్రోలర్.</translation>
@@ -772,6 +774,7 @@
 <translation id="7763470514545477072">డొమైన్ సఫిక్స్ మ్యాచ్</translation>
 <translation id="7769672763586021400">మోడల్ ID</translation>
 <translation id="7784116172884276937">DNS సర్వర్‌లు ఏవీ సెటప్ చేయబడలేదు</translation>
+<translation id="779591286616261875">కొత్త రిపోర్ట్‌ను పంపండి</translation>
 <translation id="7799817062559422778">లైట్ మోడ్</translation>
 <translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation>
 <translation id="7805768142964895445">స్థితి</translation>
@@ -924,6 +927,7 @@
 <translation id="9082718469794970195">ఈ వీడియోను ఉపయోగించండి</translation>
 <translation id="9087578468327036362">ఈ క్వెరీని రిపోర్ట్ చేయండి</translation>
 <translation id="9088306295921699330">ప్రస్తుత వినియోగం</translation>
+<translation id="9092255287806472980">మీ ఫీడ్‌బ్యాక్ Chrome OSను మెరుగుపరచడంలో సహాయం చేస్తుంది, దీనిని మా టీమ్ రివ్యూ చేస్తుంది. పెద్ద సంఖ్యలో రిపోర్ట్‌లు ఉన్నందున మేము రిప్లయిని పంపడం సాధ్యం కాదు.</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">మీరు పరికరాన్ని విడదీయాలి</translation>
 <translation id="9098156406873149060">యూజర్ డేటాను అలానే ఉంచండి</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index 2e0a3bc..41272cc 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -123,6 +123,7 @@
 <translation id="188114911237521550">ปิดโหมดมืด</translation>
 <translation id="1881188606372070653">ไปที่<ph name="BEGIN_LINK1" />หน้าความช่วยเหลือด้านกฎหมาย<ph name="END_LINK1" />เพื่อส่งคำขอเปลี่ยนแปลงเนื้อหาด้วยเหตุผลทางกฎหมาย อาจมีการส่งข้อมูลระบบและบัญชีบางอย่างไปยัง Google เราจะใช้ข้อมูลดังกล่าวเพื่อช่วยแก้ไขปัญหาทางเทคนิคและปรับปรุงบริการ โดยเป็นไปตาม<ph name="BEGIN_LINK2" />นโยบายความเป็นส่วนตัว<ph name="END_LINK2" />และ<ph name="BEGIN_LINK3" />ข้อกำหนดในการให้บริการ<ph name="END_LINK3" /></translation>
 <translation id="1887850431809612466">การแก้ไขฮาร์ดแวร์</translation>
+<translation id="1904932688895783618">แหล่งข้อมูลอื่นๆ บางส่วนที่เป็นประโยชน์มีดังต่อไปนี้</translation>
 <translation id="1905710495812624430">ลองทำเกินจำนวนครั้งที่กำหนดไว้แล้ว</translation>
 <translation id="1908234395526491708">ขอ UDP ไม่สำเร็จ</translation>
 <translation id="1932611479324127242">ตัดแรงดันไฟฟ้าของแบตเตอรี่</translation>
@@ -137,6 +138,7 @@
 <translation id="2016697457005847575">ลองทำตามขั้นตอนการแก้ปัญหา</translation>
 <translation id="2016848882344942759">--ไม่มีไวท์เลเบล--</translation>
 <translation id="202500043506723828">EID</translation>
+<translation id="2047316797244836561">โปรดเชื่อมต่อเครือข่ายและโหลดหน้าเว็บซ้ำเพื่อดูโปรแกรมรักษาหน้าจอ</translation>
 <translation id="2080070583977670716">การตั้งค่าเพิ่มเติม</translation>
 <translation id="2085089206770112532">ลดความสว่างของหน้าจอ</translation>
 <translation id="2105810540595158374">อุปกรณ์เป็นอุปกรณ์ควบคุมเกม</translation>
@@ -773,6 +775,7 @@
 <translation id="7763470514545477072">การจับคู่ส่วนต่อท้ายโดเมน</translation>
 <translation id="7769672763586021400">รหัสรุ่น</translation>
 <translation id="7784116172884276937">ไม่มีเซิร์ฟเวอร์ DNS ที่ตั้งค่าไว้</translation>
+<translation id="779591286616261875">ส่งรายงานใหม่</translation>
 <translation id="7799817062559422778">โหมดสว่าง</translation>
 <translation id="780301667611848630">ไม่ ขอบคุณ</translation>
 <translation id="7805768142964895445">สถานะ</translation>
@@ -925,6 +928,7 @@
 <translation id="9082718469794970195">ใช้วิดีโอนี้</translation>
 <translation id="9087578468327036362">โปรดรายงานการค้นหานี้</translation>
 <translation id="9088306295921699330">การใช้งานปัจจุบัน</translation>
+<translation id="9092255287806472980">ความคิดเห็นของคุณจะช่วยปรับปรุง Chrome OS และได้รับการตรวจสอบจากทีม แต่เราจะตอบกลับไม่ได้เนื่องจากได้รับรายงานเข้ามาเป็นจำนวนมาก</translation>
 <translation id="9095775724867566971">Pluginvm</translation>
 <translation id="90977145661420967">คุณจะต้องแยกชิ้นส่วนอุปกรณ์</translation>
 <translation id="9098156406873149060">เก็บข้อมูลผู้ใช้ไว้</translation>
diff --git a/components/autofill/core/browser/autofill_type.cc b/components/autofill/core/browser/autofill_type.cc
index 58d0bad..9dcb6fc 100644
--- a/components/autofill/core/browser/autofill_type.cc
+++ b/components/autofill/core/browser/autofill_type.cc
@@ -94,11 +94,6 @@
     case NO_SERVER_DATA:
     case EMPTY_TYPE:
     case AMBIGUOUS_TYPE:
-    case PHONE_FAX_NUMBER:
-    case PHONE_FAX_CITY_CODE:
-    case PHONE_FAX_COUNTRY_CODE:
-    case PHONE_FAX_CITY_AND_NUMBER:
-    case PHONE_FAX_WHOLE_NUMBER:
     case FIELD_WITH_DEFAULT_VALUE:
     case MERCHANT_EMAIL_SIGNUP:
     case MERCHANT_PROMO_CODE:
diff --git a/components/autofill/core/browser/field_types.cc b/components/autofill/core/browser/field_types.cc
index 75526749..99cbd8b 100644
--- a/components/autofill/core/browser/field_types.cc
+++ b/components/autofill/core/browser/field_types.cc
@@ -28,11 +28,10 @@
            !(37 <= t && t <= 43) && t != 78 && t != 80 && t != 82 && t != 84 &&
            // Billing phone numbers (values [62,66]) are deprecated.
            !(62 <= t && t <= 66) &&
-           // Billing names (values [67, 72]) are deprecated.
+           // Billing names (values [67,72]) are deprecated.
            !(67 <= t && t <= 72) &&
-           // Fax numbers (values [20,24]) are deprecated in Chrome, but still
-           // supported by the server.
-           !(PHONE_FAX_NUMBER <= t && t <= PHONE_FAX_WHOLE_NUMBER);
+           // Fax numbers (values [20,24]) are deprecated.
+           !(20 <= t && t <= 24);
   };
   return IsValid(raw_value) ? static_cast<ServerFieldType>(raw_value)
                             : fallback_value;
@@ -137,11 +136,6 @@
     case NO_SERVER_DATA:
     case EMPTY_TYPE:
     case AMBIGUOUS_TYPE:
-    case PHONE_FAX_NUMBER:
-    case PHONE_FAX_CITY_CODE:
-    case PHONE_FAX_COUNTRY_CODE:
-    case PHONE_FAX_CITY_AND_NUMBER:
-    case PHONE_FAX_WHOLE_NUMBER:
     case FIELD_WITH_DEFAULT_VALUE:
     case MERCHANT_EMAIL_SIGNUP:
     case PRICE:
@@ -211,16 +205,6 @@
       return "PHONE_HOME_WHOLE_NUMBER";
     case PHONE_HOME_EXTENSION:
       return "PHONE_HOME_EXTENSION";
-    case PHONE_FAX_NUMBER:
-      return "PHONE_FAX_NUMBER";
-    case PHONE_FAX_CITY_CODE:
-      return "PHONE_FAX_CITY_CODE";
-    case PHONE_FAX_COUNTRY_CODE:
-      return "PHONE_FAX_COUNTRY_CODE";
-    case PHONE_FAX_CITY_AND_NUMBER:
-      return "PHONE_FAX_CITY_AND_NUMBER";
-    case PHONE_FAX_WHOLE_NUMBER:
-      return "PHONE_FAX_WHOLE_NUMBER";
     case ADDRESS_HOME_ADDRESS:
       return "ADDRESS_HOME_ADDRESS";
     case ADDRESS_HOME_ADDRESS_WITH_NAME:
diff --git a/components/autofill/core/browser/field_types.h b/components/autofill/core/browser/field_types.h
index d76d342..1b74dd4 100644
--- a/components/autofill/core/browser/field_types.h
+++ b/components/autofill/core/browser/field_types.h
@@ -50,15 +50,7 @@
   PHONE_HOME_WHOLE_NUMBER = 14,
 
   // Work phone numbers (values [15,19]) are deprecated.
-
-  // Fax numbers (values [20,24]) are deprecated in Chrome, but still supported
-  // by the server.
-  PHONE_FAX_NUMBER = 20,
-  PHONE_FAX_CITY_CODE = 21,
-  PHONE_FAX_COUNTRY_CODE = 22,
-  PHONE_FAX_CITY_AND_NUMBER = 23,
-  PHONE_FAX_WHOLE_NUMBER = 24,
-
+  // Fax numbers (values [20,24]) are deprecated.
   // Cell phone numbers (values [25, 29]) are deprecated.
 
   ADDRESS_HOME_LINE1 = 30,
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index 7e4883ed..df4feff4 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -5825,7 +5825,7 @@
   auto* field_prediction0 = field0->add_predictions();
   field_prediction0->set_type(NAME_FULL);
   auto* field_prediction1 = field0->add_predictions();
-  field_prediction1->set_type(PHONE_FAX_COUNTRY_CODE);
+  field_prediction1->set_type(PHONE_HOME_COUNTRY_CODE);
   AddFieldSuggestionToForm(form_suggestion, form.fields[1], ADDRESS_HOME_LINE1);
   // Make form 2 suggestions.
   form_suggestion = api_response.add_form_suggestions();
@@ -5848,7 +5848,8 @@
   EXPECT_EQ(NAME_FULL, forms[0]->field(0)->server_type());
   ASSERT_EQ(2U, forms[0]->field(0)->server_predictions().size());
   EXPECT_EQ(NAME_FULL, forms[0]->field(0)->server_predictions()[0].type());
-  EXPECT_EQ(NO_SERVER_DATA, forms[0]->field(0)->server_predictions()[1].type());
+  EXPECT_EQ(PHONE_HOME_COUNTRY_CODE,
+            forms[0]->field(0)->server_predictions()[1].type());
   EXPECT_EQ(ADDRESS_HOME_LINE1, forms[0]->field(1)->server_type());
   ASSERT_EQ(1U, forms[0]->field(1)->server_predictions().size());
   EXPECT_EQ(ADDRESS_HOME_LINE1,
diff --git a/components/autofill/core/browser/metrics/autofill_metrics.cc b/components/autofill/core/browser/metrics/autofill_metrics.cc
index be726b1..1f74cb5 100644
--- a/components/autofill/core/browser/metrics/autofill_metrics.cc
+++ b/components/autofill/core/browser/metrics/autofill_metrics.cc
@@ -335,11 +335,6 @@
         case PHONE_HOME_CITY_AND_NUMBER:
         case PHONE_HOME_CITY_AND_NUMBER_WITHOUT_TRUNK_PREFIX:
         case PHONE_HOME_WHOLE_NUMBER:
-        case PHONE_FAX_NUMBER:
-        case PHONE_FAX_CITY_CODE:
-        case PHONE_FAX_COUNTRY_CODE:
-        case PHONE_FAX_CITY_AND_NUMBER:
-        case PHONE_FAX_WHOLE_NUMBER:
         case CREDIT_CARD_NAME_FULL:
         case CREDIT_CARD_NUMBER:
         case CREDIT_CARD_EXP_MONTH:
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
index 8123ce3..5d01b05 100644
--- a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
@@ -526,326 +526,132 @@
   }
 }
 
-// Test that we log the perfect filling metric correctly for an address form in
-// which every field is autofilled.
-TEST_F(AutofillMetricsTest, PerfectFillingForAddresses_AllAutofillFilled) {
-  // Set up our form data with two autofilled fields.
+struct Field {
+  ServerFieldType field_type;
+  bool is_autofilled = true;
+  absl::optional<std::u16string> value = absl::nullopt;
+};
+
+struct PerfectFillingTestCase {
+  std::string description;
+  std::vector<Field> fields;
+  std::vector<Bucket> address_buckets;
+  std::vector<Bucket> credit_card_buckets;
+};
+
+class AutofillPerfectFillingMetricsTest
+    : public AutofillMetricsTest,
+      public ::testing::WithParamInterface<PerfectFillingTestCase> {
+ public:
+  std::vector<test::FieldDataDescription> GetFields(std::vector<Field> fields) {
+    std::vector<test::FieldDataDescription> fields_to_return;
+    for (const auto& field : fields) {
+      test::FieldDataDescription f;
+      if (field.value) {
+        f.value = field.value;
+      } else if (field.field_type == NAME_FULL ||
+                 field.field_type == CREDIT_CARD_NAME_FULL) {
+        f.value = u"Elvis Aaron Presley";
+      } else if (field.field_type == EMAIL_ADDRESS) {
+        f.value = u"buddy@gmail.com";
+      } else if (field.field_type == ADDRESS_HOME_CITY) {
+        f.value = u"Munich";
+      } else if (field.field_type == CREDIT_CARD_NUMBER) {
+        f.value = u"01230123012399";
+      } else {
+        NOTREACHED();
+      }
+      f.role = field.field_type;
+      f.is_autofilled = field.is_autofilled;
+      fields_to_return.push_back(f);
+    }
+    return fields_to_return;
+  }
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    AutofillPerfectFillingMetricsTest,
+    AutofillPerfectFillingMetricsTest,
+    testing::Values(
+        // Test that we log the perfect filling metric correctly for an address
+        // form in which every field is autofilled.
+        PerfectFillingTestCase{
+            "PerfectFillingForAddresses_AllAutofillFilled",
+            {{NAME_FULL}, {EMAIL_ADDRESS}, {ADDRESS_HOME_CITY}},
+            {Bucket(false, 0), Bucket(true, 1)},
+            {Bucket(false, 0), Bucket(true, 0)}},
+        // Test that we log the perfect filling metric correctly for an address
+        // form in which every field is autofilled or empty.
+        PerfectFillingTestCase{
+            "PerfectFillingForAddresses_AllAutofillFilledOrEmpty",
+            {{NAME_FULL}, {EMAIL_ADDRESS}, {ADDRESS_HOME_CITY, false, u""}},
+            {Bucket(false, 0), Bucket(true, 1)},
+            {Bucket(false, 0), Bucket(true, 0)}},
+        // Test that we log the perfect filling metric correctly for an address
+        // form in which a non-empty field is not autofilled.
+        PerfectFillingTestCase{
+            "PerfectFillingForAddresses_NotAllAutofilled",
+            {{NAME_FULL}, {EMAIL_ADDRESS}, {ADDRESS_HOME_CITY, false}},
+            {Bucket(false, 1), Bucket(true, 0)},
+            {Bucket(false, 0), Bucket(true, 0)}},
+        // Test that we log the perfect filling metric correctly for a credit
+        // card form in which every field is autofilled.
+        PerfectFillingTestCase{"PerfectFillingForCreditCards_AllAutofilled",
+                               {{CREDIT_CARD_NAME_FULL}, {CREDIT_CARD_NUMBER}},
+                               {Bucket(false, 0), Bucket(true, 0)},
+                               {Bucket(false, 0), Bucket(true, 1)}},
+        // Test that we log the perfect filling metric correctly for a credit
+        // card form in which not every field is autofilled or empty.
+        PerfectFillingTestCase{
+            "PerfectFillingForCreditCards_NotAllAutofilled",
+            {{CREDIT_CARD_NAME_FULL}, {CREDIT_CARD_NUMBER, false}},
+            {Bucket(false, 0), Bucket(true, 0)},
+            {Bucket(false, 1), Bucket(true, 0)}},
+        // Test that we log the perfect filling metric correctly for a form that
+        // contains both credit card and address information. Here, the form is
+        // fully autofilled resulting in a perfect count for both addresses and
+        // credit cards.
+        PerfectFillingTestCase{"PerfectFillingForMixedForm_AllAutofilled",
+                               {{NAME_FULL}, {CREDIT_CARD_NUMBER}},
+                               {Bucket(false, 0), Bucket(true, 1)},
+                               {Bucket(false, 0), Bucket(true, 1)}},
+        // Test that we log the perfect filling metric correctly for a form that
+        // contains both credit card and address information.  Here, the form is
+        // not fully autofilled resulting in a non-perfect count for both
+        // addresses and credit cards.
+        PerfectFillingTestCase{"PerfectFillingForMixedForm_NotAllAutofilled",
+                               {{NAME_FULL}, {CREDIT_CARD_NUMBER, false}},
+                               {Bucket(false, 1), Bucket(true, 0)},
+                               {Bucket(false, 1), Bucket(true, 0)}}));
+
+TEST_P(AutofillPerfectFillingMetricsTest,
+       PerfectFilling_Addresses_CreditCards) {
+  auto test_case = GetParam();
   FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"Email",
-                                  .name = u"email",
-                                  .value = u"buddy@gmail.com",
-                                  .is_autofilled = true},
-                                 {.label = u"City",
-                                  .name = u"city",
-                                  .value = u"Munich",
-                                  .is_autofilled = true},
-                             },
+      test::GetFormData({.description_for_logging = test_case.description,
+                         .fields = GetFields(test_case.fields),
                          .unique_renderer_id = test::MakeFormRendererId(),
                          .main_frame_origin = url::Origin::Create(
                              autofill_client_->form_origin())});
 
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL, EMAIL_ADDRESS,
-                                                  ADDRESS_HOME_CITY};
-  std::vector<ServerFieldType> server_types = {NAME_FULL, EMAIL_ADDRESS,
-                                               ADDRESS_HOME_CITY};
+  std::vector<ServerFieldType> field_types;
+  for (const auto& f : test_case.fields)
+    field_types.push_back(f.field_type);
 
   // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types, field_types);
 
   // Simulate form submission.
   base::HistogramTester histogram_tester;
   autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
                                      SubmissionSource::FORM_SUBMISSION);
 
-  // Here, it is expected that there is a count for perfect filling for
-  // addresses.
   EXPECT_THAT(
       histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 1)));
+      BucketsAre(test_case.address_buckets));
   EXPECT_THAT(
       histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 0)));
-}
-
-// Test that we log the perfect filling metric correctly for an address form in
-// which every field is autofilled or empty.
-TEST_F(AutofillMetricsTest,
-       PerfectFillingForAddresses_AllAutofillFilledOrEmpty) {
-  // Set up our form data with two autofilled fields.
-  FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"Email",
-                                  .name = u"email",
-                                  .value = u"buddy@gmail.com",
-                                  .is_autofilled = true},
-                                 {.label = u"City",
-                                  .name = u"city",
-                                  .value = u"",
-                                  .is_autofilled = false},
-                             },
-                         .unique_renderer_id = test::MakeFormRendererId(),
-                         .main_frame_origin = url::Origin::Create(
-                             autofill_client_->form_origin())});
-
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL, EMAIL_ADDRESS,
-                                                  ADDRESS_HOME_CITY};
-  std::vector<ServerFieldType> server_types = {NAME_FULL, EMAIL_ADDRESS,
-                                               ADDRESS_HOME_CITY};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
-  base::HistogramTester histogram_tester;
-  autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
-                                     SubmissionSource::FORM_SUBMISSION);
-
-  // Here, it is expected that there is a count for perfect filling for
-  // addresses.
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 1)));
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 0)));
-}
-
-// Test that we log the perfect filling metric correctly for an address form in
-// which a non-empty field is not autofilled.
-TEST_F(AutofillMetricsTest, PerfectFillingForAddresses_NotAllAutofilled) {
-  // Set up our form data with two autofilled fields.
-  FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"Email",
-                                  .name = u"email",
-                                  .value = u"buddy@gmail.com",
-                                  .is_autofilled = true},
-                                 {.label = u"City",
-                                  .name = u"city",
-                                  .value = u"Munich",
-                                  .is_autofilled = false},
-                             },
-                         .unique_renderer_id = test::MakeFormRendererId(),
-                         .main_frame_origin = url::Origin::Create(
-                             autofill_client_->form_origin())});
-
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL, EMAIL_ADDRESS,
-                                                  ADDRESS_HOME_CITY};
-  std::vector<ServerFieldType> server_types = {NAME_FULL, EMAIL_ADDRESS,
-                                               ADDRESS_HOME_CITY};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
-  base::HistogramTester histogram_tester;
-  autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
-                                     SubmissionSource::FORM_SUBMISSION);
-
-  // Here, it is expected that there is a count for non-perfect filling for
-  // addresses.
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 1), Bucket(true, 0)));
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 0)));
-}
-
-// Test that we log the perfect filling metric correctly for a credit card form
-// in which every field is autofilled.
-TEST_F(AutofillMetricsTest, PerfectFillingForCreditCards_AllAutofilled) {
-  // Set up our form data with two autofilled fields.
-  FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"CCNumber",
-                                  .name = u"ccnumber",
-                                  .value = u"01230123012399",
-                                  .is_autofilled = true},
-                             },
-                         .unique_renderer_id = test::MakeFormRendererId(),
-                         .main_frame_origin = url::Origin::Create(
-                             autofill_client_->form_origin())});
-
-  std::vector<ServerFieldType> heuristic_types = {CREDIT_CARD_NAME_FULL,
-                                                  CREDIT_CARD_NUMBER};
-  std::vector<ServerFieldType> server_types = {CREDIT_CARD_NAME_FULL,
-                                               CREDIT_CARD_NUMBER};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
-  base::HistogramTester histogram_tester;
-  autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
-                                     SubmissionSource::FORM_SUBMISSION);
-
-  // Here, it is expected that there is a count for perfect filling for credit
-  // cards.
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 0)));
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 1)));
-}
-
-// Test that we log the perfect filling metric correctly for a credit card form
-// in which not every field is autofilled or empty.
-TEST_F(AutofillMetricsTest, PerfectFillingForCreditCards_NotAllAutofilled) {
-  // Set up our form data with two autofilled fields.
-  FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"CCNumber",
-                                  .name = u"ccnumber",
-                                  .value = u"01230123012399",
-                                  .is_autofilled = false},
-                             },
-                         .unique_renderer_id = test::MakeFormRendererId(),
-                         .main_frame_origin = url::Origin::Create(
-                             autofill_client_->form_origin())});
-
-  std::vector<ServerFieldType> heuristic_types = {CREDIT_CARD_NAME_FULL,
-                                                  CREDIT_CARD_NUMBER};
-  std::vector<ServerFieldType> server_types = {CREDIT_CARD_NAME_FULL,
-                                               CREDIT_CARD_NUMBER};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
-  base::HistogramTester histogram_tester;
-  autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
-                                     SubmissionSource::FORM_SUBMISSION);
-
-  // Here, it is expected that there is a count for non-perfect filling for
-  // credit cards.
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 0)));
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 1), Bucket(true, 0)));
-}
-
-// Test that we log the perfect filling metric correctly for a form that
-// contains both credit card and address information. Here, the form is fully
-// autofilled resulting in a perfect count for both addresses and credit cards.
-TEST_F(AutofillMetricsTest, PerfectFillingForMixedForm_AllAutofilled) {
-  // Set up our form data with two autofilled fields.
-  FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"CCNumber",
-                                  .name = u"ccnumber",
-                                  .value = u"01230123012399",
-                                  .is_autofilled = true},
-                             },
-                         .unique_renderer_id = test::MakeFormRendererId(),
-                         .main_frame_origin = url::Origin::Create(
-                             autofill_client_->form_origin())});
-
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
-                                                  CREDIT_CARD_NUMBER};
-  std::vector<ServerFieldType> server_types = {NAME_FULL, CREDIT_CARD_NUMBER};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
-  base::HistogramTester histogram_tester;
-  autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
-                                     SubmissionSource::FORM_SUBMISSION);
-
-  // Here, it is expected that there is a count for perfect filling for credit
-  // cards and for addresses.
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 1)));
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 0), Bucket(true, 1)));
-}
-
-// Test that we log the perfect filling metric correctly for a form that
-// contains both credit card and address information.  Here, the form is not
-// fully autofilled resulting in a non-perfect count for both addresses and
-// credit cards
-TEST_F(AutofillMetricsTest, PerfectFillingForMixedForm_NotAllAutofilled) {
-  // Set up our form data with two autofilled fields.
-  FormData form =
-      test::GetFormData({.description_for_logging = "PerectFilling",
-                         .fields =
-                             {
-                                 {.label = u"Name",
-                                  .name = u"name",
-                                  .value = u"Elvis Aaron Presley",
-                                  .is_autofilled = true},
-                                 {.label = u"CCNumber",
-                                  .name = u"ccnumber",
-                                  .value = u"01230123012399",
-                                  .is_autofilled = false},
-                             },
-                         .unique_renderer_id = test::MakeFormRendererId(),
-                         .main_frame_origin = url::Origin::Create(
-                             autofill_client_->form_origin())});
-
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
-                                                  CREDIT_CARD_NUMBER};
-  std::vector<ServerFieldType> server_types = {NAME_FULL, CREDIT_CARD_NUMBER};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
-  base::HistogramTester histogram_tester;
-  autofill_manager().OnFormSubmitted(form, /*known_success=*/false,
-                                     SubmissionSource::FORM_SUBMISSION);
-
-  // Here, it is expected that there is a count for non-perfect filling for
-  // credit cards and for addresses.
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.Addresses"),
-      BucketsAre(Bucket(false, 1), Bucket(true, 0)));
-  EXPECT_THAT(
-      histogram_tester.GetAllSamples("Autofill.PerfectFilling.CreditCards"),
-      BucketsAre(Bucket(false, 1), Bucket(true, 0)));
+      BucketsAre(test_case.credit_card_buckets));
 }
 
 // Test that we log quality metrics appropriately.
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index 7fe0a6f..3e64f97 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -274,7 +274,7 @@
 // TODO(crbug.com/1098943): Remove once launched.
 const base::Feature kAutofillEnableSupportForMoreStructureInAddresses{
     "AutofillEnableSupportForMoreStructureInAddresses",
-    base::FEATURE_DISABLED_BY_DEFAULT};
+    base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Controls if Autofill supports merging subset names.
 // TODO(crbug.com/1098943): Remove once launched.
diff --git a/components/autofill_assistant/browser/BUILD.gn b/components/autofill_assistant/browser/BUILD.gn
index 79b049a..81fe29e 100644
--- a/components/autofill_assistant/browser/BUILD.gn
+++ b/components/autofill_assistant/browser/BUILD.gn
@@ -9,7 +9,7 @@
 }
 
 proto_library("proto") {
-  proto_in_dir = "//components/autofill_assistant/"
+  proto_in_dir = "//"
   sources = [
     "action_strategy.proto",
     "action_value.proto",
@@ -27,6 +27,7 @@
 }
 
 proto_library("test_proto") {
+  proto_in_dir = "//"
   sources = [
     "external_action_extension_test.proto",
     "parse_jspb_test.proto",
@@ -623,7 +624,7 @@
 
 if (is_android) {
   proto_java_library("proto_java") {
-    proto_path = "//components/autofill_assistant/"
+    proto_path = "//"
     sources = [
       "action_strategy.proto",
       "action_value.proto",
diff --git a/components/autofill_assistant/browser/actions/collect_user_data_action.cc b/components/autofill_assistant/browser/actions/collect_user_data_action.cc
index 5177a342..f3e25f44 100644
--- a/components/autofill_assistant/browser/actions/collect_user_data_action.cc
+++ b/components/autofill_assistant/browser/actions/collect_user_data_action.cc
@@ -1692,7 +1692,8 @@
   user_data->available_contacts_.clear();
   user_data->available_addresses_.clear();
   for (const auto* profile : personal_data_manager->GetProfilesToSuggest()) {
-    if (requires_contact) {
+    if (requires_contact && user_data::ContactHasAtLeastOneRequiredField(
+                                *profile, *collect_user_data_options_)) {
       user_data->available_contacts_.emplace_back(std::make_unique<Contact>(
           user_data::MakeUniqueFromProfile(*profile)));
     }
diff --git a/components/autofill_assistant/browser/cud_condition.proto b/components/autofill_assistant/browser/cud_condition.proto
index 82fc840..c5b28fa 100644
--- a/components/autofill_assistant/browser/cud_condition.proto
+++ b/components/autofill_assistant/browser/cud_condition.proto
@@ -10,7 +10,7 @@
 
 package autofill_assistant;
 
-import "browser/action_value.proto";
+import "components/autofill_assistant/browser/action_value.proto";
 
 message RequiredDataPiece {
   optional string error_message = 1;
diff --git a/components/autofill_assistant/browser/dom_action.proto b/components/autofill_assistant/browser/dom_action.proto
index f58f8484..fd7611e8 100644
--- a/components/autofill_assistant/browser/dom_action.proto
+++ b/components/autofill_assistant/browser/dom_action.proto
@@ -10,7 +10,7 @@
 
 package autofill_assistant;
 
-import "browser/action_value.proto";
+import "components/autofill_assistant/browser/action_value.proto";
 
 // Identifier for elements on the client. This is used to store and retrieve
 // elements. To store an element and create a usable |ClientIdProto| use a
diff --git a/components/autofill_assistant/browser/external_action_extension_test.proto b/components/autofill_assistant/browser/external_action_extension_test.proto
index 18efa16..3d53445 100644
--- a/components/autofill_assistant/browser/external_action_extension_test.proto
+++ b/components/autofill_assistant/browser/external_action_extension_test.proto
@@ -8,7 +8,7 @@
 
 option optimize_for = LITE_RUNTIME;
 
-import "public/external_action.proto";
+import "components/autofill_assistant/browser/public/external_action.proto";
 
 extend external.ResultInfo {
   optional TestResultExtension test_result_extension = 100;
diff --git a/components/autofill_assistant/browser/generic_ui.proto b/components/autofill_assistant/browser/generic_ui.proto
index 6e971b8..5afa986 100644
--- a/components/autofill_assistant/browser/generic_ui.proto
+++ b/components/autofill_assistant/browser/generic_ui.proto
@@ -10,9 +10,9 @@
 
 package autofill_assistant;
 
-import "browser/action_value.proto";
-import "browser/model.proto";
-import "browser/view_layout.proto";
+import "components/autofill_assistant/browser/action_value.proto";
+import "components/autofill_assistant/browser/model.proto";
+import "components/autofill_assistant/browser/view_layout.proto";
 
 message GenericUserInterfaceProto {
   // The root view, usually a view container.
diff --git a/components/autofill_assistant/browser/public/BUILD.gn b/components/autofill_assistant/browser/public/BUILD.gn
index 98381d3..54c5606e 100644
--- a/components/autofill_assistant/browser/public/BUILD.gn
+++ b/components/autofill_assistant/browser/public/BUILD.gn
@@ -28,21 +28,24 @@
   deps = [
     ":proto",
     "//base",
+    "//components/autofill_assistant/browser/public/password_change/proto:proto",
     "//components/version_info:channel",
     "//content/public/browser",
   ]
 }
 
 proto_library("proto") {
-  proto_in_dir = "//components/autofill_assistant/"
+  proto_in_dir = "//"
   sources = [ "external_action.proto" ]
+  link_deps = [ "//components/autofill_assistant/browser/public/password_change/proto:proto" ]
 }
 
 # Java protos are only used for testing.
 if (is_android) {
   proto_java_library("proto_java") {
-    proto_path = "//components/autofill_assistant/browser/public"
-    sources = [ "$proto_path/external_action.proto" ]
+    proto_path = "//"
+    sources = [ "external_action.proto" ]
+    deps = [ "//components/autofill_assistant/browser/public/password_change/proto:proto_java" ]
   }
 }
 
diff --git a/components/autofill_assistant/browser/public/external_action.proto b/components/autofill_assistant/browser/public/external_action.proto
index bddca4c2..031806ac 100644
--- a/components/autofill_assistant/browser/public/external_action.proto
+++ b/components/autofill_assistant/browser/public/external_action.proto
@@ -10,6 +10,8 @@
 
 package autofill_assistant.external;
 
+import "components/autofill_assistant/browser/public/password_change/proto/actions.proto";
+
 // Defines an action to be executed by the ExternalActionDelegate.
 message Action {
   // Integrator-specific information. This was forwarded without modifications.
@@ -20,6 +22,11 @@
 message ActionInfo {
   optional bytes action_payload = 1;
 
+  oneof Action {
+    password_change.GenericPasswordChangeSpecification
+        generic_password_change_specification = 2;
+  }
+
   extensions 100 to max;
 }
 
diff --git a/components/autofill_assistant/browser/public/password_change/OWNERS b/components/autofill_assistant/browser/public/password_change/OWNERS
new file mode 100644
index 0000000..0472f1f0
--- /dev/null
+++ b/components/autofill_assistant/browser/public/password_change/OWNERS
@@ -0,0 +1,2 @@
+jkeitel@google.com
+vizcay@google.com
diff --git a/components/autofill_assistant/browser/public/password_change/proto/BUILD.gn b/components/autofill_assistant/browser/public/password_change/proto/BUILD.gn
new file mode 100644
index 0000000..6534782
--- /dev/null
+++ b/components/autofill_assistant/browser/public/password_change/proto/BUILD.gn
@@ -0,0 +1,22 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/protobuf/proto_library.gni")
+
+if (is_android) {
+  import("//build/config/android/rules.gni")
+}
+
+proto_library("proto") {
+  proto_in_dir = "//"
+  sources = [ "actions.proto" ]
+}
+
+# Java protos are only used for testing.
+if (is_android) {
+  proto_java_library("proto_java") {
+    proto_path = "//"
+    sources = [ "actions.proto" ]
+  }
+}
diff --git a/chrome/browser/autofill_assistant/password_change/proto/extensions.proto b/components/autofill_assistant/browser/public/password_change/proto/actions.proto
similarity index 100%
rename from chrome/browser/autofill_assistant/password_change/proto/extensions.proto
rename to components/autofill_assistant/browser/public/password_change/proto/actions.proto
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto
index 04d75929..1f690d3 100644
--- a/components/autofill_assistant/browser/service.proto
+++ b/components/autofill_assistant/browser/service.proto
@@ -10,15 +10,15 @@
 
 package autofill_assistant;
 
-import "browser/action_strategy.proto";
-import "browser/action_value.proto";
-import "browser/cud_condition.proto";
-import "browser/dom_action.proto";
-import "browser/generic_ui.proto";
-import "browser/model.proto";
-import "browser/view_layout.proto";
-import "content/common/proto/semantic_feature_overrides.proto";
-import "browser/public/external_action.proto";
+import "components/autofill_assistant/browser/action_strategy.proto";
+import "components/autofill_assistant/browser/action_value.proto";
+import "components/autofill_assistant/browser/cud_condition.proto";
+import "components/autofill_assistant/browser/dom_action.proto";
+import "components/autofill_assistant/browser/generic_ui.proto";
+import "components/autofill_assistant/browser/model.proto";
+import "components/autofill_assistant/browser/view_layout.proto";
+import "components/autofill_assistant/content/common/proto/semantic_feature_overrides.proto";
+import "components/autofill_assistant/browser/public/external_action.proto";
 
 // A field trial containing the name of the trial and the name of the
 // randomly selected trial group.
diff --git a/components/autofill_assistant/browser/user_data_util.cc b/components/autofill_assistant/browser/user_data_util.cc
index 06e9ef304..2f47e82 100644
--- a/components/autofill_assistant/browser/user_data_util.cc
+++ b/components/autofill_assistant/browser/user_data_util.cc
@@ -922,5 +922,32 @@
   UpsertAutofillProfile(profile, list);
 }
 
+bool ContactHasAtLeastOneRequiredField(
+    const autofill::AutofillProfile& profile,
+    const CollectUserDataOptions& collect_user_data_options) {
+  autofill::ServerFieldTypeSet non_empty_fields;
+  profile.GetNonEmptyTypes(kDefaultLocale, &non_empty_fields);
+
+  if (collect_user_data_options.request_payer_name &&
+      (non_empty_fields.contains(autofill::NAME_FULL) ||
+       non_empty_fields.contains(autofill::NAME_FIRST) ||
+       non_empty_fields.contains(autofill::NAME_LAST))) {
+    return true;
+  }
+
+  if (collect_user_data_options.request_payer_email &&
+      non_empty_fields.contains(autofill::EMAIL_ADDRESS)) {
+    return true;
+  }
+
+  if (collect_user_data_options.request_payer_phone &&
+      (non_empty_fields.contains(autofill::PHONE_HOME_NUMBER) ||
+       non_empty_fields.contains(autofill::PHONE_HOME_COUNTRY_CODE) ||
+       non_empty_fields.contains(autofill::PHONE_HOME_WHOLE_NUMBER))) {
+    return true;
+  }
+  return false;
+}
+
 }  // namespace user_data
 }  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/user_data_util.h b/components/autofill_assistant/browser/user_data_util.h
index f226c51..0cc925b 100644
--- a/components/autofill_assistant/browser/user_data_util.h
+++ b/components/autofill_assistant/browser/user_data_util.h
@@ -187,6 +187,11 @@
 void UpsertPhoneNumber(const autofill::AutofillProfile& profile,
                        std::vector<std::unique_ptr<PhoneNumber>>& list);
 
+// Returns true if the |profile| contains at least one required field.
+bool ContactHasAtLeastOneRequiredField(
+    const autofill::AutofillProfile& profile,
+    const CollectUserDataOptions& collect_user_data_options);
+
 }  // namespace user_data
 }  // namespace autofill_assistant
 
diff --git a/components/autofill_assistant/browser/user_data_util_unittest.cc b/components/autofill_assistant/browser/user_data_util_unittest.cc
index 7f559c8..c26bd08 100644
--- a/components/autofill_assistant/browser/user_data_util_unittest.cc
+++ b/components/autofill_assistant/browser/user_data_util_unittest.cc
@@ -1711,6 +1711,89 @@
       u"+41441234567");
 }
 
+TEST(UserDataUtilTest, ContactHasAtLeastOneRequiredField) {
+  autofill::AutofillProfile only_email;
+  autofill::test::SetProfileInfo(&only_email, "", "", "", "adam.west@gmail.com",
+                                 "", "", "", "", "", "", "", "");
+
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = true;
+    EXPECT_FALSE(ContactHasAtLeastOneRequiredField(only_email, options));
+  }
+
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = true;
+    options.request_payer_phone = true;
+    EXPECT_FALSE(ContactHasAtLeastOneRequiredField(only_email, options));
+  }
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = true;
+    options.request_payer_phone = true;
+    options.request_payer_email = true;
+    EXPECT_TRUE(ContactHasAtLeastOneRequiredField(only_email, options));
+  }
+
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = false;
+    options.request_payer_phone = false;
+    options.request_payer_email = true;
+    EXPECT_TRUE(ContactHasAtLeastOneRequiredField(only_email, options));
+  }
+
+  autofill::AutofillProfile only_name;
+  autofill::test::SetProfileInfo(&only_name, "Adam", "", "", "", "",
+                                 "Baker Street 221b", "", "London", "",
+                                 "WC2N 5DU", "UK", "");
+
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = false;
+    options.request_payer_phone = false;
+    options.request_payer_email = true;
+    EXPECT_FALSE(ContactHasAtLeastOneRequiredField(only_name, options));
+  }
+
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = true;
+    options.request_payer_phone = false;
+    options.request_payer_email = true;
+    EXPECT_TRUE(ContactHasAtLeastOneRequiredField(only_name, options));
+  }
+
+  autofill::AutofillProfile only_phone;
+  autofill::test::SetProfileInfo(&only_phone, "", "", "", "", "",
+                                 "Baker Street 221b", "", "London", "",
+                                 "WC2N 5DU", "UK", "+44");
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = true;
+    options.request_payer_phone = false;
+    options.request_payer_email = true;
+    EXPECT_FALSE(ContactHasAtLeastOneRequiredField(only_phone, options));
+  }
+  {
+    CollectUserDataOptions options;
+    options.request_payer_name = true;
+    options.request_payer_phone = true;
+    options.request_payer_email = true;
+    EXPECT_TRUE(ContactHasAtLeastOneRequiredField(only_phone, options));
+  }
+
+  autofill::AutofillProfile full_profile;
+  autofill::test::SetProfileInfo(&full_profile, "Adam", "", "West",
+                                 "adam.west@gmail.com", "", "Baker Street 221b",
+                                 "", "London", "", "WC2N 5DU", "UK", "+44");
+  {
+    CollectUserDataOptions options;
+    EXPECT_FALSE(ContactHasAtLeastOneRequiredField(only_phone, options));
+  }
+}
+
 }  // namespace
 }  // namespace user_data
 }  // namespace autofill_assistant
diff --git a/components/autofill_assistant/content/common/proto/BUILD.gn b/components/autofill_assistant/content/common/proto/BUILD.gn
index bbd89c3..94bc9cfe 100644
--- a/components/autofill_assistant/content/common/proto/BUILD.gn
+++ b/components/autofill_assistant/content/common/proto/BUILD.gn
@@ -9,7 +9,7 @@
 }
 
 proto_library("proto") {
-  proto_in_dir = "//components/autofill_assistant/"
+  proto_in_dir = "//"
   sources = [ "semantic_feature_overrides.proto" ]
 }
 
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index 68e8a90..70f9accb 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -926,6 +926,7 @@
   android_library("cronet_common_javatests") {
     testonly = true
     sources = [
+      "test/javatests/src/org/chromium/net/CronetLoggerTestRule.java",
       "test/javatests/src/org/chromium/net/CronetTestRule.java",
       "test/javatests/src/org/chromium/net/TestUploadDataProvider.java",
       "test/javatests/src/org/chromium/net/TestUrlRequestCallback.java",
@@ -938,6 +939,7 @@
       "//build/android:build_java",
       "//third_party/android_sdk:android_test_base_java",
       "//third_party/android_support_test_runner:runner_java",
+      "//third_party/androidx:androidx_annotation_annotation_java",
       "//third_party/junit",
     ]
   }
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java
index aaf10539..4c94926 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java
@@ -5,12 +5,12 @@
 package org.chromium.net.impl;
 
 import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
 
 /**
- * Takes care of instantiating the correct CronetLogger
+ * Takes care of instantiating the correct CronetLogger.
  */
 public final class CronetLoggerFactory {
+    private CronetLoggerFactory() {}
     private static final CronetLogger sDefaultLogger = new NoOpLogger();
     private static CronetLogger sTestingLogger;
 
@@ -23,8 +23,29 @@
         return sDefaultLogger;
     }
 
-    @VisibleForTesting
-    public static void setLoggerForTesting(@Nullable CronetLogger testingLogger) {
+    private static void setLoggerForTesting(@Nullable CronetLogger testingLogger) {
         sTestingLogger = testingLogger;
     }
+
+    /**
+     * Utility class to safely use a custom CronetLogger for the duration of a test.
+     * To be used within a try-with-resources statement within the test.
+     */
+    public static class SwapLoggerForTesting implements AutoCloseable {
+        /**
+         * Forces {@code CronetLoggerFactory#createLogger} to return @param testLogger instead of
+         * what it would have normally returned.
+         */
+        public SwapLoggerForTesting(CronetLogger testLogger) {
+            CronetLoggerFactory.setLoggerForTesting(testLogger);
+        }
+
+        /**
+         * Restores CronetLoggerFactory to its original state.
+         */
+        @Override
+        public void close() {
+            CronetLoggerFactory.setLoggerForTesting(null);
+        }
+    }
 }
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java
index af32822..be7c329 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java
@@ -104,7 +104,8 @@
     private final int mTrafficStatsUid;
     private final VersionSafeCallbacks.RequestFinishedInfoListener mRequestFinishedListener;
     private final long mNetworkHandle;
-    private final int mCronetEngineID;
+    private final int mCronetEngineId;
+    private final CronetLogger mLogger;
 
     private CronetUploadDataStream mUploadDataStream;
 
@@ -172,7 +173,8 @@
 
         mAllowDirectExecutor = allowDirectExecutor;
         mRequestContext = requestContext;
-        mCronetEngineID = requestContext.getCronetEngineId();
+        mCronetEngineId = requestContext.getCronetEngineId();
+        mLogger = requestContext.getCronetLogger();
         mInitialUrl = url;
         mUrlChain.add(url);
         mPriority = convertRequestPriority(priority);
@@ -960,8 +962,7 @@
     private void maybeReportMetrics() {
         if (mMetrics != null) {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-                CronetLogger logger = CronetLoggerFactory.createLogger();
-                logger.logCronetTrafficInfo(mCronetEngineID, buildCronetTrafficInfo());
+                mLogger.logCronetTrafficInfo(mCronetEngineId, buildCronetTrafficInfo());
             }
 
             final RequestFinishedInfo requestInfo = new RequestFinishedInfoImpl(mInitialUrl,
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
index 7e29ebc..cd23d9e 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
@@ -20,6 +20,7 @@
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.annotations.UsedByReflection;
 import org.chromium.net.BidirectionalStream;
+import org.chromium.net.CronetEngine;
 import org.chromium.net.EffectiveConnectionType;
 import org.chromium.net.ExperimentalBidirectionalStream;
 import org.chromium.net.NetworkQualityRttListener;
@@ -164,11 +165,16 @@
     private @Nullable Network mNetwork;
 
     private final int mCronetEngineId;
+    private final CronetLogger mLogger;
 
     int getCronetEngineId() {
         return mCronetEngineId;
     }
 
+    CronetLogger getCronetLogger() {
+        return mLogger;
+    }
+
     @UsedByReflection("CronetEngine.java")
     public CronetUrlRequestContext(final CronetEngineBuilderImpl builder) {
         mCronetEngineId = hashCode();
@@ -197,15 +203,15 @@
                 throw new NullPointerException("Context Adapter creation failed.");
             }
         }
-        CronetLogger logger = CronetLoggerFactory.createLogger();
+        mLogger = CronetLoggerFactory.createLogger();
         // getVersionString()'s output looks like "Cronet/w.x.y.z@hash". CronetVersion only cares
         // about the "w.x.y.z" bit.
         String version = getVersionString();
         version = version.split("/")[1];
         version = version.split("@")[0];
         // TODO(stefanoduo): Correctly generate the CronetSource parameter.
-        logger.logCronetEngineCreation(getCronetEngineId(), new CronetEngineBuilderInfo(builder),
-                new CronetVersion(version), CronetSource.CRONET_SOURCE_STATICALLY_LINKED);
+        mLogger.logCronetEngineCreation(getCronetEngineId(), new CronetEngineBuilderInfo(builder),
+                new CronetVersion(version), getCronetSource());
 
         // Init native Chromium URLRequestContext on init thread.
         CronetLibraryLoader.postToInitThread(new Runnable() {
@@ -223,6 +229,13 @@
         });
     }
 
+    static CronetSource getCronetSource() {
+        ClassLoader apiClassLoader = CronetEngine.class.getClassLoader();
+        ClassLoader implClassLoader = CronetUrlRequest.class.getClassLoader();
+        return apiClassLoader.equals(implClassLoader) ? CronetSource.CRONET_SOURCE_STATICALLY_LINKED
+                                                      : CronetSource.CRONET_SOURCE_PLAY_SERVICES;
+    }
+
     @VisibleForTesting
     public static long createNativeUrlRequestContextConfig(CronetEngineBuilderImpl builder) {
         final long urlRequestContextConfig =
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java b/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java
index 8bdd6f01..b45a9e9 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java
@@ -17,6 +17,9 @@
 import org.chromium.net.NetworkQualityThroughputListener;
 import org.chromium.net.RequestFinishedInfo;
 import org.chromium.net.UrlRequest;
+import org.chromium.net.impl.CronetLogger.CronetEngineBuilderInfo;
+import org.chromium.net.impl.CronetLogger.CronetSource;
+import org.chromium.net.impl.CronetLogger.CronetVersion;
 
 import java.io.IOException;
 import java.net.Proxy;
@@ -42,8 +45,11 @@
 public final class JavaCronetEngine extends CronetEngineBase {
     private final String mUserAgent;
     private final ExecutorService mExecutorService;
+    private final int mCronetEngineId;
+    private final CronetLogger mLogger;
 
     public JavaCronetEngine(CronetEngineBuilderImpl builder) {
+        mCronetEngineId = hashCode();
         // On android, all background threads (and all threads that are part
         // of background processes) are put in a cgroup that is allowed to
         // consume up to 5% of CPU - these worker threads spend the vast
@@ -67,6 +73,22 @@
                         });
                     }
                 });
+        mLogger = CronetLoggerFactory.createLogger();
+        // getVersionString()'s output looks like "Cronet/w.x.y.z@hash". CronetVersion only cares
+        // about the "w.x.y.z" bit.
+        String version = getVersionString();
+        version = version.split("/")[1];
+        version = version.split("@")[0];
+        mLogger.logCronetEngineCreation(mCronetEngineId, new CronetEngineBuilderInfo(builder),
+                new CronetVersion(version), CronetSource.CRONET_SOURCE_FALLBACK);
+    }
+
+    int getCronetEngineId() {
+        return mCronetEngineId;
+    }
+
+    CronetLogger getCronetLogger() {
+        return mLogger;
     }
 
     @Override
@@ -81,7 +103,7 @@
                     "The multi-network API is not supported by the Java implementation "
                     + "of Cronet Engine");
         }
-        return new JavaUrlRequest(callback, mExecutorService, executor, url, mUserAgent,
+        return new JavaUrlRequest(this, callback, mExecutorService, executor, url, mUserAgent,
                 allowDirectExecutor, trafficStatsTagSet, trafficStatsTag, trafficStatsUidSet,
                 trafficStatsUid);
     }
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequest.java
index 34f5462c..788673af 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequest.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequest.java
@@ -10,12 +10,15 @@
 import android.util.Log;
 
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.VisibleForTesting;
 
 import org.chromium.net.CronetException;
 import org.chromium.net.InlineExecutionProhibitedException;
 import org.chromium.net.ThreadStatsUid;
 import org.chromium.net.UploadDataProvider;
 import org.chromium.net.UrlResponseInfo;
+import org.chromium.net.impl.CronetLogger.CronetTrafficInfo;
 import org.chromium.net.impl.JavaUrlRequestUtils.CheckedRunnable;
 import org.chromium.net.impl.JavaUrlRequestUtils.DirectPreventingExecutor;
 import org.chromium.net.impl.JavaUrlRequestUtils.State;
@@ -30,6 +33,7 @@
 import java.nio.channels.Channels;
 import java.nio.channels.ReadableByteChannel;
 import java.nio.channels.WritableByteChannel;
+import java.time.Duration;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
@@ -101,6 +105,8 @@
     private String mPendingRedirectUrl;
     private HttpURLConnection mCurrentUrlConnection; // Only accessed on mExecutor.
     private OutputStreamDataSink mOutputStreamDataSink; // Only accessed on mExecutor.
+    private final int mCronetEngineId;
+    private final CronetLogger mLogger;
 
     // Executor that runs one task at a time on an underlying Executor.
     // NOTE: Do not use to wrap user supplied Executor as lock is held while underlying execute()
@@ -173,9 +179,10 @@
      * @param executor The executor used for reading and writing from sockets
      * @param userExecutor The executor used to dispatch to {@code callback}
      */
-    JavaUrlRequest(Callback callback, final Executor executor, Executor userExecutor, String url,
-            String userAgent, boolean allowDirectExecutor, boolean trafficStatsTagSet,
-            int trafficStatsTag, final boolean trafficStatsUidSet, final int trafficStatsUid) {
+    JavaUrlRequest(JavaCronetEngine engine, Callback callback, final Executor executor,
+            Executor userExecutor, String url, String userAgent, boolean allowDirectExecutor,
+            boolean trafficStatsTagSet, int trafficStatsTag, final boolean trafficStatsUidSet,
+            final int trafficStatsUid) {
         if (url == null) {
             throw new NullPointerException("URL is required");
         }
@@ -189,11 +196,11 @@
             throw new NullPointerException("userExecutor is required");
         }
 
-        this.mAllowDirectExecutor = allowDirectExecutor;
-        this.mCallbackAsync = new AsyncUrlRequestCallback(callback, userExecutor);
+        mAllowDirectExecutor = allowDirectExecutor;
+        mCallbackAsync = new AsyncUrlRequestCallback(callback, userExecutor);
         final int trafficStatsTagToUse =
                 trafficStatsTagSet ? trafficStatsTag : TrafficStats.getThreadStatsTag();
-        this.mExecutor = new SerializingExecutor(new Executor() {
+        mExecutor = new SerializingExecutor(new Executor() {
             @Override
             public void execute(final Runnable command) {
                 executor.execute(new Runnable() {
@@ -216,8 +223,10 @@
                 });
             }
         });
-        this.mCurrentUrl = url;
-        this.mUserAgent = userAgent;
+        mCronetEngineId = engine.getCronetEngineId();
+        mLogger = engine.getCronetLogger();
+        mCurrentUrl = url;
+        mUserAgent = userAgent;
     }
 
     @Override
@@ -732,6 +741,52 @@
         return state == State.COMPLETE || state == State.ERROR || state == State.CANCELLED;
     }
 
+    /**
+     * Estimates the byte size of the headers in their on-wire format.
+     * We are not really interested in their specific size but something which is close enough.
+     */
+    @VisibleForTesting
+    static long estimateHeadersSizeInBytesList(Map<String, List<String>> headers) {
+        if (headers == null) return 0;
+
+        long responseHeaderSizeInBytes = 0;
+        for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
+            String key = entry.getKey();
+            if (key != null) responseHeaderSizeInBytes += key.length();
+            if (entry.getValue() == null) continue;
+
+            for (String content : entry.getValue()) {
+                if (content != null) responseHeaderSizeInBytes += content.length();
+            }
+        }
+        return responseHeaderSizeInBytes;
+    }
+
+    /**
+     * Estimates the byte size of the headers in their on-wire format.
+     * We are not really interested in their specific size but something which is close enough.
+     */
+    @VisibleForTesting
+    static long estimateHeadersSizeInBytes(Map<String, String> headers) {
+        if (headers == null) return 0;
+        long responseHeaderSizeInBytes = 0;
+        for (Map.Entry<String, String> entry : headers.entrySet()) {
+            String key = entry.getKey();
+            if (key != null) responseHeaderSizeInBytes += key.length();
+            String value = entry.getValue();
+            if (value != null) responseHeaderSizeInBytes += value.length();
+        }
+        return responseHeaderSizeInBytes;
+    }
+
+    private static long parseContentLengthString(String contentLength) {
+        try {
+            return Long.parseLong(contentLength);
+        } catch (NumberFormatException e) {
+            return 0;
+        }
+    }
+
     @Override
     public void getStatus(StatusListener listener) {
         @State
@@ -834,6 +889,68 @@
             });
         }
 
+        /**
+         * Builds the {@link CronetTrafficInfo} associated to this request internal state.
+         * This helper methods makes strong assumptions about the state of the request. For this
+         * reason it should only be called within {@link JavaUrlRequest#maybeReportMetrics} where
+         * these assumptions are guaranteed to be true.
+         * @return the {@link CronetTrafficInfo} associated to this request internal state
+         */
+        @RequiresApi(Build.VERSION_CODES.O)
+        private CronetTrafficInfo buildCronetTrafficInfo() {
+            assert mRequestHeaders != null;
+
+            // Most of the CronetTrafficInfo fields have similar names/semantics. To avoid bugs due
+            // to typos everything is final, this means that things have to initialized through an
+            // if/else.
+            final Map<String, List<String>> responseHeaders;
+            final String negotiatedProtocol;
+            final int httpStatusCode;
+            if (mUrlResponseInfo != null) {
+                responseHeaders = mUrlResponseInfo.getAllHeaders();
+                negotiatedProtocol = mUrlResponseInfo.getNegotiatedProtocol();
+                httpStatusCode = mUrlResponseInfo.getHttpStatusCode();
+            } else {
+                responseHeaders = Collections.emptyMap();
+                negotiatedProtocol = "";
+                httpStatusCode = 0;
+            }
+
+            final long requestHeaderSizeInBytes = estimateHeadersSizeInBytes(mRequestHeaders);
+            // TODO(stefanoduo): Add logic to keep track of body size.
+            final long requestBodySizeInBytes = -1;
+
+            final long responseBodySizeInBytes;
+            final long responseHeaderSizeInBytes = estimateHeadersSizeInBytesList(responseHeaders);
+            // Content-Length is not mandatory, if missing report a non-valid response body size for
+            // the time being.
+            if (responseHeaders.containsKey("Content-Length")) {
+                responseBodySizeInBytes =
+                        parseContentLengthString(responseHeaders.get("Content-Length").get(0));
+            } else {
+                responseBodySizeInBytes = -1;
+            }
+
+            final Duration headersLatency = Duration.ofSeconds(0);
+            final Duration totalLatency = Duration.ofSeconds(0);
+
+            return new CronetTrafficInfo(requestHeaderSizeInBytes, requestBodySizeInBytes,
+                    responseHeaderSizeInBytes, responseBodySizeInBytes, httpStatusCode,
+                    headersLatency, totalLatency, negotiatedProtocol,
+                    // There is no connection migration for the fallback implementation.
+                    false, // wasConnectionMigrationAttempted
+                    false // didConnectionMigrationSucceed
+            );
+        }
+
+        // Maybe report metrics. This method should only be called on Callback's executor thread and
+        // after Callback's onSucceeded, onFailed and onCanceled.
+        private void maybeReportMetrics() {
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                mLogger.logCronetTrafficInfo(mCronetEngineId, buildCronetTrafficInfo());
+            }
+        }
+
         void onCanceled(final UrlResponseInfo info) {
             closeResponseChannel();
             mUserExecutor.execute(new Runnable() {
@@ -841,6 +958,7 @@
                 public void run() {
                     try {
                         mCallback.onCanceled(JavaUrlRequest.this, info);
+                        maybeReportMetrics();
                     } catch (Exception exception) {
                         Log.e(TAG, "Exception in onCanceled method", exception);
                     }
@@ -854,6 +972,7 @@
                 public void run() {
                     try {
                         mCallback.onSucceeded(JavaUrlRequest.this, info);
+                        maybeReportMetrics();
                     } catch (Exception exception) {
                         Log.e(TAG, "Exception in onSucceeded method", exception);
                     }
@@ -868,6 +987,7 @@
                 public void run() {
                     try {
                         mCallback.onFailed(JavaUrlRequest.this, urlResponseInfo, e);
+                        maybeReportMetrics();
                     } catch (Exception exception) {
                         Log.e(TAG, "Exception in onFailed method", exception);
                     }
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetLoggerTestRule.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetLoggerTestRule.java
new file mode 100644
index 0000000..bb01b5e
--- /dev/null
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetLoggerTestRule.java
@@ -0,0 +1,61 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net;
+
+import androidx.annotation.NonNull;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import org.chromium.net.impl.CronetLogger;
+import org.chromium.net.impl.CronetLoggerFactory.SwapLoggerForTesting;
+
+/**
+ * Custom TestRule that instantiates a new fake CronetLogger for each test.
+ * @param <T> The actual type of the class extending CronetLogger.
+ */
+public class CronetLoggerTestRule<T extends CronetLogger> implements TestRule {
+    private static final String TAG = CronetLoggerTestRule.class.getSimpleName();
+
+    private Class<T> mTestLoggerClazz;
+
+    // Expose the fake logger to the test.
+    public T mTestLogger;
+
+    public CronetLoggerTestRule(@NonNull Class<T> testLoggerClazz) {
+        if (testLoggerClazz == null) {
+            throw new NullPointerException("TestLoggerClazz is required.");
+        }
+
+        mTestLoggerClazz = testLoggerClazz;
+    }
+
+    @Override
+    public Statement apply(final Statement base, final Description desc) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                try (SwapLoggerForTesting swapper = buildSwapper()) {
+                    base.evaluate();
+                } finally {
+                    mTestLogger = null;
+                }
+            }
+        };
+    }
+
+    private SwapLoggerForTesting buildSwapper() {
+        assert mTestLoggerClazz != null;
+
+        try {
+            mTestLogger = mTestLoggerClazz.getConstructor().newInstance();
+            return new SwapLoggerForTesting(mTestLogger);
+        } catch (ReflectiveOperationException e) {
+            throw new IllegalArgumentException(
+                    "CronetTestBase#runTest failed while swapping TestLogger.", e);
+        }
+    }
+}
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java
index 15f56e5..1a7a7963 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java
@@ -18,7 +18,6 @@
 import android.content.Context;
 import android.os.Build;
 import android.os.ConditionVariable;
-import android.support.test.InstrumentationRegistry;
 
 import androidx.test.filters.SmallTest;
 
@@ -26,21 +25,27 @@
 import org.json.JSONObject;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.RuleChain;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import org.chromium.base.ContextUtils;
-import org.chromium.base.PathUtils;
+import org.chromium.base.test.util.Feature;
 import org.chromium.net.CronetEngine;
-import org.chromium.net.CronetProvider;
+import org.chromium.net.CronetLoggerTestRule;
 import org.chromium.net.CronetTestRule;
+import org.chromium.net.CronetTestRule.CronetTestFramework;
+import org.chromium.net.CronetTestRule.OnlyRunJavaCronet;
+import org.chromium.net.CronetTestRule.OnlyRunNativeCronet;
+import org.chromium.net.CronetTestRule.RequiresMinAndroidApi;
 import org.chromium.net.ExperimentalCronetEngine;
 import org.chromium.net.NativeTestServer;
 import org.chromium.net.TestUrlRequestCallback;
 import org.chromium.net.UrlRequest;
 import org.chromium.net.impl.CronetEngineBuilderImpl.HttpCacheMode;
 import org.chromium.net.impl.CronetLogger.CronetEngineBuilderInfo;
+import org.chromium.net.impl.CronetLogger.CronetSource;
 import org.chromium.net.impl.CronetLogger.CronetTrafficInfo;
 import org.chromium.net.impl.CronetLogger.CronetVersion;
 
@@ -59,13 +64,22 @@
  * Test logging functionalities.
  */
 @RunWith(JUnit4.class)
+@RequiresMinAndroidApi(Build.VERSION_CODES.O)
 public final class CronetLoggerTest {
-    private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "cronet_test";
+    private final CronetTestRule mTestRule = new CronetTestRule();
+    private final CronetLoggerTestRule mLoggerTestRule = new CronetLoggerTestRule(TestLogger.class);
+
+    @Rule
+    public final RuleChain chain = RuleChain.outerRule(mTestRule).around(mLoggerTestRule);
+
     private TestLogger mTestLogger;
     private Context mContext;
-    private CronetProvider mNativeProvider;
+    private CronetTestFramework mTestFramework;
 
-    final class TestLogger extends CronetLogger {
+    /**
+     * Records the last engine creation (and traffic info) call it has received.
+     */
+    public static final class TestLogger extends CronetLogger {
         private AtomicInteger mCallsToLogCronetEngineCreation = new AtomicInteger();
         private AtomicInteger mCallsToLogCronetTrafficInfo = new AtomicInteger();
         private AtomicInteger mCronetEngineId = new AtomicInteger();
@@ -73,6 +87,7 @@
         private AtomicReference<CronetTrafficInfo> mTrafficInfo = new AtomicReference<>();
         private AtomicReference<CronetEngineBuilderInfo> mBuilderInfo = new AtomicReference<>();
         private AtomicReference<CronetVersion> mVersion = new AtomicReference<>();
+        private AtomicReference<CronetSource> mSource = new AtomicReference<>();
         private final ConditionVariable mBlock = new ConditionVariable();
 
         @Override
@@ -83,6 +98,7 @@
             mCronetEngineId.set(cronetEngineId);
             mBuilderInfo.set(engineBuilderInfo);
             mVersion.set(version);
+            mSource.set(source);
         }
 
         @Override
@@ -125,36 +141,30 @@
         public CronetVersion getLastCronetVersion() {
             return mVersion.get();
         }
+
+        public CronetSource getLastCronetSource() {
+            return mSource.get();
+        }
     }
 
     @Before
     public void setUp() {
-        System.loadLibrary("cronet_tests");
-        mTestLogger = new TestLogger();
-        CronetLoggerFactory.setLoggerForTesting(mTestLogger);
-        mContext = InstrumentationRegistry.getTargetContext();
-        for (CronetProvider provider : CronetProvider.getAllProviders(mContext)) {
-            if (provider.getName().equals(CronetProvider.PROVIDER_NAME_APP_PACKAGED)) {
-                mNativeProvider = provider;
-            }
-        }
-        assertNotNull(mNativeProvider);
+        mContext = CronetTestRule.getContext();
+        mTestFramework = mTestRule.buildCronetTestFramework();
+        mTestLogger = (TestLogger) mLoggerTestRule.mTestLogger;
         assertTrue(NativeTestServer.startNativeTestServer(mContext));
-
-        ContextUtils.initApplicationContext(mContext.getApplicationContext());
-        PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
-        CronetTestRule.prepareTestStorage(mContext);
     }
 
     @After
     public void tearDown() {
         mTestLogger = null;
-        CronetLoggerFactory.setLoggerForTesting(null);
         NativeTestServer.shutdownNativeTestServer();
+        mTestFramework.shutdownEngine();
     }
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testCronetEngineInfoCreation() {
         CronetEngineBuilderImpl builder = new NativeCronetEngineBuilderImpl(mContext);
         CronetEngineBuilderInfo builderInfo = new CronetEngineBuilderInfo(builder);
@@ -175,6 +185,7 @@
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testCronetVersionCreation() {
         final int major = 100;
         final int minor = 0;
@@ -190,6 +201,7 @@
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testHttpCacheModeEnum() {
         final int publicBuilderHttpCacheModes[] = {CronetEngine.Builder.HTTP_CACHE_DISABLED,
                 CronetEngine.Builder.HTTP_CACHE_IN_MEMORY,
@@ -203,6 +215,7 @@
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testSetLoggerForTesting() {
         CronetLogger logger = CronetLoggerFactory.createLogger();
         assertEquals(0, mTestLogger.callsToLogCronetTrafficInfo());
@@ -219,10 +232,8 @@
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testEngineCreation() throws JSONException {
-        // CronetLogger is supported starting from Android Oreo.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
-
         JSONObject staleDns = new JSONObject()
                                       .put("enable", true)
                                       .put("delay_ms", 0)
@@ -242,7 +253,7 @@
         final int threadPriority = THREAD_PRIORITY_DEFAULT;
 
         ExperimentalCronetEngine.Builder builder =
-                (ExperimentalCronetEngine.Builder) mNativeProvider.createBuilder();
+                (ExperimentalCronetEngine.Builder) mTestFramework.mBuilder;
 
         builder.setExperimentalOptions(experimentalOptions);
         builder.enablePublicKeyPinningBypassForLocalTrustAnchors(
@@ -259,6 +270,7 @@
         CronetEngine engine = builder.build();
         final CronetEngineBuilderInfo builderInfo = mTestLogger.getLastCronetEngineBuilderInfo();
         final CronetVersion version = mTestLogger.getLastCronetVersion();
+        final CronetSource source = mTestLogger.getLastCronetSource();
 
         assertEquals(isPublicKeyPinningBypassForLocalTrustAnchorsEnabled,
                 builderInfo.isPublicKeyPinningBypassForLocalTrustAnchorsEnabled());
@@ -272,7 +284,12 @@
         assertEquals(
                 isNetworkQualityEstimatorEnabled, builderInfo.isNetworkQualityEstimatorEnabled());
         assertEquals(threadPriority, builderInfo.getThreadPriority());
-        assertEquals(version.toString(), mNativeProvider.getVersion());
+        assertEquals(ImplVersion.getCronetVersion(), version.toString());
+        if (mTestRule.testingJavaImpl()) {
+            assertEquals(CronetSource.CRONET_SOURCE_FALLBACK, source);
+        } else {
+            assertEquals(CronetSource.CRONET_SOURCE_STATICALLY_LINKED, source);
+        }
 
         assertEquals(1, mTestLogger.callsToLogCronetEngineCreation());
         assertEquals(0, mTestLogger.callsToLogCronetTrafficInfo());
@@ -280,13 +297,10 @@
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testEngineCreationAndTrafficInfoEngineId() {
-        // CronetLogger is supported starting from Android Oreo.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
-
         final String url = "www.example.com";
-        CronetEngine.Builder engineBuilder = mNativeProvider.createBuilder();
-        CronetEngine engine = engineBuilder.build();
+        CronetEngine engine = mTestFramework.startEngine();
         final int engineId = mTestLogger.getLastCronetEngineId();
 
         TestUrlRequestCallback callback1 = new TestUrlRequestCallback();
@@ -317,12 +331,10 @@
 
     @Test
     @SmallTest
+    @Feature({"Cronet"})
     public void testMultipleEngineCreationAndTrafficInfoEngineId() {
-        // CronetLogger is supported starting from Android Oreo.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
-
         final String url = "www.example.com";
-        final CronetEngine.Builder engineBuilder = mNativeProvider.createBuilder();
+        final CronetEngine.Builder engineBuilder = mTestFramework.mBuilder;
 
         CronetEngine engine1 = engineBuilder.build();
         final int engine1Id = mTestLogger.getLastCronetEngineId();
@@ -357,13 +369,11 @@
 
     @Test
     @SmallTest
-    public void testSuccessfulRequest() {
-        // CronetLogger is supported starting from Android Oreo.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
-
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    public void testSuccessfulRequestNative() {
         final String url = NativeTestServer.getEchoBodyURL();
-        CronetEngine.Builder engineBuilder = mNativeProvider.createBuilder();
-        CronetEngine engine = engineBuilder.build();
+        CronetEngine engine = mTestFramework.startEngine();
 
         TestUrlRequestCallback callback = new TestUrlRequestCallback();
         UrlRequest.Builder requestBuilder =
@@ -393,13 +403,11 @@
 
     @Test
     @SmallTest
-    public void testFailedRequest() {
-        // CronetLogger is supported starting from Android Oreo.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
-
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    public void testFailedRequestNative() {
         final String url = "www.unreachable-url.com";
-        CronetEngine.Builder engineBuilder = mNativeProvider.createBuilder();
-        CronetEngine engine = engineBuilder.build();
+        CronetEngine engine = mTestFramework.startEngine();
 
         TestUrlRequestCallback callback = new TestUrlRequestCallback();
         UrlRequest.Builder requestBuilder =
@@ -412,12 +420,13 @@
         mTestLogger.waitForLogCronetTrafficInfo();
 
         final CronetTrafficInfo trafficInfo = mTestLogger.getLastCronetTrafficInfo();
-        // When a request fails before hitting the server all these values won't be populated in the
-        // actual code. Check that the logger sets them to some known defaults before logging.
         assertEquals(0, trafficInfo.getRequestHeaderSizeInBytes());
         assertEquals(0, trafficInfo.getRequestBodySizeInBytes());
         assertEquals(0, trafficInfo.getResponseHeaderSizeInBytes());
         assertEquals(0, trafficInfo.getResponseBodySizeInBytes());
+        // When a request fails before hitting the server all these values won't be populated in
+        // the actual code. Check that the logger sets them to some known defaults before
+        // logging.
         assertEquals(0, trafficInfo.getResponseStatusCode());
         assertEquals("", trafficInfo.getNegotiatedProtocol());
         assertFalse(trafficInfo.wasConnectionMigrationAttempted());
@@ -429,13 +438,11 @@
 
     @Test
     @SmallTest
-    public void testCanceledRequest() {
-        // CronetLogger is supported starting from Android Oreo.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
-
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    public void testCanceledRequestNative() {
         final String url = NativeTestServer.getEchoBodyURL();
-        CronetEngine.Builder engineBuilder = mNativeProvider.createBuilder();
-        CronetEngine engine = engineBuilder.build();
+        CronetEngine engine = mTestFramework.startEngine();
 
         TestUrlRequestCallback callback = new TestUrlRequestCallback();
         callback.setAutoAdvance(false);
@@ -450,12 +457,13 @@
         mTestLogger.waitForLogCronetTrafficInfo();
 
         final CronetTrafficInfo trafficInfo = mTestLogger.getLastCronetTrafficInfo();
-        // When a request fails before hitting the server all these values won't be populated in the
-        // actual code. Check that the logger sets them to some known defaults before logging.
         assertEquals(0, trafficInfo.getRequestHeaderSizeInBytes());
         assertEquals(0, trafficInfo.getRequestBodySizeInBytes());
         assertEquals(0, trafficInfo.getResponseHeaderSizeInBytes());
         assertEquals(0, trafficInfo.getResponseBodySizeInBytes());
+        // When a request fails before hitting the server all these values won't be populated in
+        // the actual code. Check that the logger sets them to some known defaults before
+        // logging.
         assertEquals(0, trafficInfo.getResponseStatusCode());
         assertEquals("", trafficInfo.getNegotiatedProtocol());
         assertFalse(trafficInfo.wasConnectionMigrationAttempted());
@@ -467,7 +475,9 @@
 
     @Test
     @SmallTest
-    public void testEmptyHeadersSize() {
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    public void testEmptyHeadersSizeNative() {
         Map<String, List<String>> headers = Collections.emptyMap();
         assertEquals(0, CronetUrlRequest.estimateHeadersSizeInBytes(headers));
         headers = null;
@@ -481,7 +491,9 @@
 
     @Test
     @SmallTest
-    public void testNonEmptyHeadersSize() {
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    public void testNonEmptyHeadersSizeNative() {
         Map<String, List<String>> headers = new HashMap<String, List<String>>() {
             {
                 put("header1", Arrays.asList("value1", "value2")); // 7 + 6 + 6 = 19
@@ -507,4 +519,152 @@
         );
         assertEquals(33, CronetUrlRequest.estimateHeadersSizeInBytes(headersList));
     }
+
+    @Test
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunJavaCronet
+    public void testSuccessfulRequestJava() {
+        final String url = NativeTestServer.getEchoBodyURL();
+        CronetEngine engine = mTestFramework.startEngine();
+
+        TestUrlRequestCallback callback = new TestUrlRequestCallback();
+        UrlRequest.Builder requestBuilder =
+                engine.newUrlRequestBuilder(url, callback, callback.getExecutor());
+        UrlRequest request = requestBuilder.build();
+        request.start();
+        callback.blockForDone();
+        assertFalse(callback.mOnCanceledCalled);
+        assertFalse(callback.mOnErrorCalled);
+        mTestLogger.waitForLogCronetTrafficInfo();
+
+        final CronetTrafficInfo trafficInfo = mTestLogger.getLastCronetTrafficInfo();
+        assertNotEquals(0, trafficInfo.getRequestHeaderSizeInBytes());
+        assertNotEquals(0, trafficInfo.getRequestBodySizeInBytes());
+        assertNotEquals(0, trafficInfo.getResponseHeaderSizeInBytes());
+        assertNotEquals(0, trafficInfo.getResponseBodySizeInBytes());
+        assertEquals(200, trafficInfo.getResponseStatusCode());
+        assertEquals(Duration.ofSeconds(0), trafficInfo.getHeadersLatency());
+        assertEquals(Duration.ofSeconds(0), trafficInfo.getTotalLatency());
+        assertNotNull(trafficInfo.getNegotiatedProtocol());
+        assertFalse(trafficInfo.wasConnectionMigrationAttempted());
+        assertFalse(trafficInfo.didConnectionMigrationSucceed());
+
+        assertEquals(1, mTestLogger.callsToLogCronetEngineCreation());
+        assertEquals(1, mTestLogger.callsToLogCronetTrafficInfo());
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunJavaCronet
+    public void testFailedRequestJava() {
+        final String url = "www.unreachable-url.com";
+        CronetEngine engine = mTestFramework.startEngine();
+
+        TestUrlRequestCallback callback = new TestUrlRequestCallback();
+        UrlRequest.Builder requestBuilder =
+                engine.newUrlRequestBuilder(url, callback, callback.getExecutor());
+        UrlRequest request = requestBuilder.build();
+        request.start();
+        callback.blockForDone();
+        assertFalse(callback.mOnCanceledCalled);
+        assertTrue(callback.mOnErrorCalled);
+        mTestLogger.waitForLogCronetTrafficInfo();
+
+        final CronetTrafficInfo trafficInfo = mTestLogger.getLastCronetTrafficInfo();
+        assertEquals(0, trafficInfo.getRequestHeaderSizeInBytes());
+        assertEquals(0, trafficInfo.getResponseHeaderSizeInBytes());
+        assertEquals(0, trafficInfo.getResponseStatusCode());
+        // When a request fails before hitting the server all these values won't be populated in
+        // the actual code. Check that the logger sets them to some known defaults before
+        // logging.
+        assertEquals(-1, trafficInfo.getRequestBodySizeInBytes());
+        assertEquals(-1, trafficInfo.getResponseBodySizeInBytes());
+        assertEquals("", trafficInfo.getNegotiatedProtocol());
+        assertFalse(trafficInfo.wasConnectionMigrationAttempted());
+        assertFalse(trafficInfo.didConnectionMigrationSucceed());
+
+        assertEquals(1, mTestLogger.callsToLogCronetEngineCreation());
+        assertEquals(1, mTestLogger.callsToLogCronetTrafficInfo());
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunJavaCronet
+    public void testCanceledRequestJava() {
+        final String url = NativeTestServer.getEchoBodyURL();
+        CronetEngine engine = mTestFramework.startEngine();
+
+        TestUrlRequestCallback callback = new TestUrlRequestCallback();
+        callback.setAutoAdvance(false);
+        UrlRequest.Builder requestBuilder =
+                engine.newUrlRequestBuilder(url, callback, callback.getExecutor());
+        UrlRequest request = requestBuilder.build();
+        request.start();
+        request.cancel();
+        callback.blockForDone();
+        assertTrue(callback.mOnCanceledCalled);
+        assertFalse(callback.mOnErrorCalled);
+        mTestLogger.waitForLogCronetTrafficInfo();
+
+        final CronetTrafficInfo trafficInfo = mTestLogger.getLastCronetTrafficInfo();
+        assertEquals(0, trafficInfo.getRequestHeaderSizeInBytes());
+        assertEquals(0, trafficInfo.getResponseHeaderSizeInBytes());
+        assertEquals(0, trafficInfo.getResponseStatusCode());
+        // When a request fails before hitting the server all these values won't be populated in
+        // the actual code. Check that the logger sets them to some known defaults before
+        // logging.
+        assertEquals(-1, trafficInfo.getRequestBodySizeInBytes());
+        assertEquals(-1, trafficInfo.getResponseBodySizeInBytes());
+        assertEquals("", trafficInfo.getNegotiatedProtocol());
+        assertFalse(trafficInfo.wasConnectionMigrationAttempted());
+        assertFalse(trafficInfo.didConnectionMigrationSucceed());
+
+        assertEquals(1, mTestLogger.callsToLogCronetEngineCreation());
+        assertEquals(1, mTestLogger.callsToLogCronetTrafficInfo());
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunJavaCronet
+    public void testEmptyHeadersSizeJava() {
+        Map<String, String> headers = Collections.emptyMap();
+        assertEquals(0, JavaUrlRequest.estimateHeadersSizeInBytes(headers));
+        headers = null;
+        assertEquals(0, JavaUrlRequest.estimateHeadersSizeInBytes(headers));
+
+        Map<String, List<String>> headersList = Collections.emptyMap();
+        assertEquals(0, JavaUrlRequest.estimateHeadersSizeInBytesList(headersList));
+        headersList = null;
+        assertEquals(0, JavaUrlRequest.estimateHeadersSizeInBytesList(headersList));
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunJavaCronet
+    public void testNonEmptyHeadersSizeJava() {
+        Map<String, String> headers = new HashMap() {
+            {
+                put("header1", "value1"); // 7 + 6 = 13
+                put("header2", null); // 13 + 7 + 0 = 20
+                put(null, ""); // 20 + 0 + 0 = 20
+            }
+        };
+        assertEquals(20, JavaUrlRequest.estimateHeadersSizeInBytes(headers));
+
+        Map<String, List<String>> headersList = new HashMap<String, List<String>>() {
+            {
+                put("header1", Arrays.asList("value1", "value2")); // 7 + 6 + 6 = 19
+                put("header2", null); // 19 + 7 = 26
+                put("header3", Collections.emptyList()); // 26 + 7 + 0 = 33
+                put("header4", Arrays.asList("value1", null)); // 33 + 7 + 6 + 0 = 46
+                put(null, Arrays.asList("")); // 46 + 0 + 0 = 46
+            }
+        };
+        assertEquals(46, JavaUrlRequest.estimateHeadersSizeInBytesList(headersList));
+    }
 }
diff --git a/components/exo/data_offer.cc b/components/exo/data_offer.cc
index 06413f34..5c7b874 100644
--- a/components/exo/data_offer.cc
+++ b/components/exo/data_offer.cc
@@ -101,9 +101,16 @@
       ui::Clipboard::GetForCurrentThread()->GetSource(
           ui::ClipboardBuffer::kCopyPaste);
 
-  DCHECK(data_src);
-  std::u16string encoded_endpoint =
-      base::UTF8ToUTF16(ui::ConvertDataTransferEndpointToJson(*data_src));
+  std::u16string encoded_endpoint;
+  if (data_src) {
+    encoded_endpoint =
+        base::UTF8ToUTF16(ui::ConvertDataTransferEndpointToJson(*data_src));
+  } else {
+    DCHECK(data_src) << "Clipboard source DataTransferEndpoint has changed "
+                        "after initial MIME advertising. If you see this "
+                        "please file a bug and contact the chromeos-dlp team.";
+  }
+
   std::move(callback).Run(EncodeAsRefCountedString(encoded_endpoint, charset));
 }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/components/exo/data_offer_unittest.cc b/components/exo/data_offer_unittest.cc
index 2783dda..9f0a7765 100644
--- a/components/exo/data_offer_unittest.cc
+++ b/components/exo/data_offer_unittest.cc
@@ -25,6 +25,7 @@
 #include "components/exo/data_offer_delegate.h"
 #include "components/exo/test/exo_test_base.h"
 #include "components/exo/test/exo_test_data_exchange_delegate.h"
+#include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/base/clipboard/clipboard.h"
 #include "ui/base/clipboard/clipboard_format_type.h"
@@ -582,6 +583,67 @@
   EXPECT_EQ("", dte_json_result);
 }
 
+// See crbug.com/1339344
+TEST_F(DataOfferTest, SetClipboardDataOfferDteToLacrosSourceChanged) {
+  TestDataOfferDelegate delegate;
+  DataOffer data_offer(&delegate);
+
+  TestDataExchangeDelegate data_exchange_delegate;
+  data_exchange_delegate.set_endpoint_type(ui::EndpointType::kLacros);
+  {
+    ui::ScopedClipboardWriter writer(ui::ClipboardBuffer::kCopyPaste);
+    writer.SetDataSource(std::make_unique<ui::DataTransferEndpoint>(
+        (GURL("https://www.google.com"))));
+    writer.WriteText(u"Test data");
+  }
+
+  auto* window = CreateTestWindowInShellWithBounds(gfx::Rect());
+  data_offer.SetClipboardData(
+      &data_exchange_delegate, *ui::Clipboard::GetForCurrentThread(),
+      data_exchange_delegate.GetDataTransferEndpointType(window));
+
+  EXPECT_EQ(4u, delegate.mime_types().size());
+  EXPECT_EQ(1u, delegate.mime_types().count("text/plain;charset=utf-8"));
+  EXPECT_EQ(1u, delegate.mime_types().count("text/plain;charset=utf-16"));
+  EXPECT_EQ(1u, delegate.mime_types().count("UTF8_STRING"));
+  EXPECT_EQ(1u,
+            delegate.mime_types().count("chromium/x-data-transfer-endpoint"));
+
+  // Clipboard data changed
+  {
+    ui::ScopedClipboardWriter writer(ui::ClipboardBuffer::kCopyPaste);
+    writer.WriteText(u"Data changed with no source");
+  }
+
+  base::ScopedFD read_pipe;
+  base::ScopedFD write_pipe;
+
+  // Read as utf-8.
+  ASSERT_TRUE(base::CreatePipe(&read_pipe, &write_pipe));
+  data_offer.Receive("text/plain;charset=utf-8", std::move(write_pipe));
+  std::string text_result;
+  ASSERT_TRUE(ReadString(std::move(read_pipe), &text_result));
+  EXPECT_EQ("Data changed with no source", text_result);
+
+  // Retrieve encoded clipboard source data transfer endpoint.
+  ASSERT_TRUE(base::CreatePipe(&read_pipe, &write_pipe));
+#if DCHECK_IS_ON()
+  EXPECT_DEATH_IF_SUPPORTED(
+      data_offer.Receive("chromium/x-data-transfer-endpoint",
+                         std::move(write_pipe));
+      ,
+      "Check failed: data_src. Clipboard source DataTransferEndpoint has "
+      "changed after initial MIME advertising. If you see this please file a "
+      "bug and contact the chromeos-dlp team.");
+#else
+  data_offer.Receive("chromium/x-data-transfer-endpoint",
+                     std::move(write_pipe));
+  std::string dte_json_result;
+  ASSERT_TRUE(ReadString(std::move(read_pipe), &dte_json_result));
+  EXPECT_EQ("", dte_json_result);
+#endif
+}
+
 TEST_F(DataOfferTest, SetDropDataOfferDteToLacros) {
   base::flat_set<DndAction> source_actions;
   source_actions.insert(DndAction::kCopy);
diff --git a/components/module_installer/android/BUILD.gn b/components/module_installer/android/BUILD.gn
index e917e0d..2487e2c 100644
--- a/components/module_installer/android/BUILD.gn
+++ b/components/module_installer/android/BUILD.gn
@@ -82,7 +82,6 @@
     "//third_party/android_deps:com_google_auto_service_auto_service_annotations_java",
     "//third_party/android_deps:com_google_guava_guava_java",
     "//third_party/android_deps:com_squareup_javapoet_java",
-    "//third_party/android_deps:javax_annotation_jsr250_api_java",
   ]
 }
 
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/ModuleInterfaceProcessor.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/ModuleInterfaceProcessor.java
index 67bb1bba..686f22a1 100644
--- a/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/ModuleInterfaceProcessor.java
+++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/ModuleInterfaceProcessor.java
@@ -7,7 +7,6 @@
 import com.google.auto.service.AutoService;
 import com.google.common.base.CaseFormat;
 import com.google.common.collect.ImmutableSet;
-import com.squareup.javapoet.AnnotationSpec;
 import com.squareup.javapoet.ClassName;
 import com.squareup.javapoet.FieldSpec;
 import com.squareup.javapoet.JavaFile;
@@ -20,7 +19,6 @@
 
 import java.util.Set;
 
-import javax.annotation.Generated;
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.Processor;
 import javax.annotation.processing.RoundEnvironment;
@@ -145,15 +143,8 @@
 
         MethodSpec constructor =
                 MethodSpec.constructorBuilder().addModifiers(Modifier.PRIVATE).build();
-        AnnotationSpec generatedAnnotation =
-                AnnotationSpec.builder(Generated.class)
-                        .addMember("value",
-                                String.format("\"%s\"",
-                                        ModuleInterfaceProcessor.class.getCanonicalName()))
-                        .build();
 
         return TypeSpec.classBuilder(fooModuleClassName)
-                .addAnnotation(generatedAnnotation)
                 .addModifiers(Modifier.PUBLIC)
                 .addField(classNameString)
                 .addField(module)
diff --git a/components/password_manager/core/browser/leak_detection_delegate_helper_unittest.cc b/components/password_manager/core/browser/leak_detection_delegate_helper_unittest.cc
index 53f276a9..b4f56818 100644
--- a/components/password_manager/core/browser/leak_detection_delegate_helper_unittest.cc
+++ b/components/password_manager/core/browser/leak_detection_delegate_helper_unittest.cc
@@ -337,6 +337,8 @@
     std::move(callback_).Run(is_script_available);
   }
 
+  bool IsCacheStale() const override { return true; }
+
   base::Value::Dict GetDebugInformationForInternals() const override {
     return base::Value::Dict();
   }
diff --git a/components/password_manager/core/browser/mock_password_scripts_fetcher.h b/components/password_manager/core/browser/mock_password_scripts_fetcher.h
index 676851d9..d32fede 100644
--- a/components/password_manager/core/browser/mock_password_scripts_fetcher.h
+++ b/components/password_manager/core/browser/mock_password_scripts_fetcher.h
@@ -30,6 +30,8 @@
 
   MOCK_METHOD(bool, IsScriptAvailable, (const url::Origin&), (const override));
 
+  MOCK_METHOD(bool, IsCacheStale, (), (const override));
+
   MOCK_METHOD(base::Value::Dict,
               GetDebugInformationForInternals,
               (),
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index 67bffe1..11596bb 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -205,6 +205,23 @@
   });
 }
 
+// Returns true iff a password field is absent or hidden.
+bool IsSingleUsernameSubmission(const PasswordForm& submitted_form) {
+  if (submitted_form.IsSingleUsername())
+    return true;
+
+  for (auto const& field : submitted_form.form_data.fields) {
+    if (submitted_form.password_element_renderer_id ==
+            field.unique_renderer_id ||
+        submitted_form.new_password_element_renderer_id ==
+            field.unique_renderer_id) {
+      if (field.is_focusable)
+        return false;
+    }
+  }
+  return true;
+}
+
 }  // namespace
 
 // static
@@ -996,10 +1013,13 @@
     return;
 
   client_->GetStoreResultFilter()->ReportFormLoginSuccess(*submitted_manager);
-  // Check for leaks only if there are no muted credentials.
+  // Check for leaks only if there are no muted credentials and it is not a
+  // single username submission (a leak warning may offer an automated password
+  // change, which requires a user to be logged in).
   if (!HasMutedCredentials(
           submitted_manager->GetInsecureCredentials(),
-          submitted_manager->GetSubmittedForm()->username_value)) {
+          submitted_manager->GetSubmittedForm()->username_value) &&
+      !IsSingleUsernameSubmission(*submitted_manager->GetSubmittedForm())) {
     leak_delegate_.StartLeakCheck(submitted_manager->GetPendingCredentials(),
                                   submitted_form->IsLikelySignupForm());
   }
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h
index 3e1ecba..f5b7f6dd 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.h
+++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -463,6 +463,23 @@
   kMaxValue = kChangePasswordAutomatically,
 };
 
+// Represents the (automatic password change) scripts cache state and the UI
+// reaction to it encountered on opening the password check subpage on Desktop.
+// These values are persisted to logs. Always keep this enum in sync with the
+// corresponding `PasswordCheckScriptsCacheState` in enums.xml.
+enum class PasswordCheckScriptsCacheState {
+  // The cache is already fresh and does not need to be refetched.
+  kCacheFresh = 0,
+  // The cache is stale, but none of the credentials has a password change
+  // script and therefore no UI update was triggered.
+  kCacheStaleAndNoUiUpdate = 1,
+  // The cache is stale and at least one of the credential has a password change
+  // script. A UI update was triggered (but, if the credential was already known
+  // to be compromised, the UI may not have changed).
+  kCacheStaleAndUiUpdate = 2,
+  kMaxValue = kCacheStaleAndUiUpdate
+};
+
 // Represents different user interactions related to adding credential from the
 // setting. These values are persisted to logs. Entries should not be renumbered
 // and numeric values should never be reused. Always keep this enum in sync with
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 0f3b06d..6ff6b8d 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -4460,6 +4460,54 @@
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
 }
 
+// Check that a leak warning is not shown for a single username submission.
+TEST_P(PasswordManagerTest, DontStartLeakDetectionForSingleUsernameSubmission) {
+  auto mock_factory =
+      std::make_unique<testing::StrictMock<MockLeakDetectionCheckFactory>>();
+  MockLeakDetectionCheckFactory* weak_factory = mock_factory.get();
+  manager()->set_leak_factory(std::move(mock_factory));
+  EXPECT_CALL(client_, IsSavingAndFillingEnabled).WillRepeatedly(Return(true));
+
+  // User sees a single username field. The password field is hidden.
+  PasswordForm username_form = MakeSimpleForm();
+  username_form.form_data.fields[1].is_focusable = false;
+  username_form.password_issues.insert(
+      {InsecureType::kLeaked,
+       InsecurityMetadata(base::Time(), IsMuted(false))});
+  std::vector<FormData> observed = {username_form.form_data};
+  EXPECT_CALL(*store_, GetLogins)
+      .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), username_form)));
+  manager()->OnPasswordFormsParsed(&driver_, observed);
+  manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+  // User submits the single username. No leak warning expected.
+  OnPasswordFormSubmitted(username_form.form_data);
+  auto check_instance = std::make_unique<MockLeakDetectionCheck>();
+  EXPECT_CALL(*check_instance, Start).Times(0);
+  Mock::VerifyAndClearExpectations(&check_instance);
+
+  // User sees a single password field. The username field is hidden.
+  PasswordForm password_form = MakeSimpleForm();
+  password_form.form_data.fields[0].is_focusable = false;
+  password_form.password_issues.insert(
+      {InsecureType::kLeaked,
+       InsecurityMetadata(base::Time(), IsMuted(false))});
+  observed = {password_form.form_data};
+  manager()->OnPasswordFormsParsed(&driver_, observed);
+  manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+  // User submits the single password field.
+  OnPasswordFormSubmitted(password_form.form_data);
+
+  // As no forms are seen, login has completed. Now expect a leak warning.
+  observed.clear();
+  EXPECT_CALL(*check_instance, Start);
+  EXPECT_CALL(*weak_factory, TryCreateLeakCheck)
+      .WillOnce(Return(ByMove(std::move(check_instance))));
+  manager()->OnPasswordFormsParsed(&driver_, observed);
+  manager()->OnPasswordFormsRendered(&driver_, observed, true);
+}
+
 TEST_P(PasswordManagerTest, ParsingNewFormsTriggersSettingFetch) {
   // Check that seeing the form for the first time triggers fetching settings.
   std::vector<FormData> observed;
diff --git a/components/password_manager/core/browser/password_scripts_fetcher.h b/components/password_manager/core/browser/password_scripts_fetcher.h
index dc640f4..61db65f 100644
--- a/components/password_manager/core/browser/password_scripts_fetcher.h
+++ b/components/password_manager/core/browser/password_scripts_fetcher.h
@@ -59,6 +59,10 @@
   // return stale data.
   virtual bool IsScriptAvailable(const url::Origin& origin) const = 0;
 
+  // Returns if the cache is not currently ready and a refresh is needed (and
+  // possibly currently ongoing).
+  virtual bool IsCacheStale() const = 0;
+
   // Return high-level state summary of the PasswordScriptsFetcher in form
   // of a `base::Value::Dict` for display on chrome://apc-internals.
   virtual base::Value::Dict GetDebugInformationForInternals() const = 0;
diff --git a/components/password_manager/core/browser/password_scripts_fetcher_impl.h b/components/password_manager/core/browser/password_scripts_fetcher_impl.h
index c0d7860..2cb291a6 100644
--- a/components/password_manager/core/browser/password_scripts_fetcher_impl.h
+++ b/components/password_manager/core/browser/password_scripts_fetcher_impl.h
@@ -69,6 +69,7 @@
   void FetchScriptAvailability(const url::Origin& origin,
                                ResponseCallback callback) override;
   bool IsScriptAvailable(const url::Origin& origin) const override;
+  bool IsCacheStale() const override;
   base::Value::Dict GetDebugInformationForInternals() const override;
   base::Value::List GetCacheEntries() const override;
 
@@ -79,22 +80,22 @@
 #endif
 
  private:
-  using CacheState = PasswordScriptsFetcher::CacheState;
   // Sends new request to gstatic.
   void StartFetch();
+
   // Callback for the request to gstatic.
   void OnFetchComplete(base::TimeTicks request_start_timestamp,
                        std::unique_ptr<std::string> response_body);
-  // Parses |response_body| and stores the result in |password_change_domains_|
-  // (always overwrites the old list). Sets an empty list if |response_body| is
+
+  // Parses |response_body| and stores the result in `password_change_domains_`
+  // (always overwrites the old list). Sets an empty list if `response_body` is
   // invalid. Returns a parsing result for a histogram. The function tries to be
   // forgiving and rather return warnings and skip an entry than cancel the
   // parsing.
   base::flat_set<ParsingResult> ParseResponse(
       std::unique_ptr<std::string> response_body);
-  // Returns whether a re-fetch is needed.
-  bool IsCacheStale() const;
-  // Runs |callback| immediately with the script availability for |origin|.
+
+  // Runs `callback` immediately with the script availability for `origin`.
   void RunResponseCallback(url::Origin origin, ResponseCallback callback);
 
   // Indicates whether the user has a supervised account - for those, script
diff --git a/components/password_manager/core/browser/password_scripts_fetcher_impl_unittest.cc b/components/password_manager/core/browser/password_scripts_fetcher_impl_unittest.cc
index 20235a1..38ae0d02 100644
--- a/components/password_manager/core/browser/password_scripts_fetcher_impl_unittest.cc
+++ b/components/password_manager/core/browser/password_scripts_fetcher_impl_unittest.cc
@@ -160,9 +160,12 @@
 TEST_F(PasswordScriptsFetcherImplTest, PrewarmCache) {
   std::unique_ptr<base::HistogramTester> histogram_tester =
       std::make_unique<base::HistogramTester>();
+  EXPECT_TRUE(fetcher()->IsCacheStale());
   fetcher()->PrewarmCache();
   EXPECT_EQ(1, GetNumberOfPendingRequests());
+  EXPECT_TRUE(fetcher()->IsCacheStale());
   SimulateResponse();
+  EXPECT_FALSE(fetcher()->IsCacheStale());
   EXPECT_EQ(0, GetNumberOfPendingRequests());
 
   // The cache is not stale yet. So, no new request is expected.
@@ -183,11 +186,13 @@
   // Make cache stale and re-fetch the map.
   histogram_tester = std::make_unique<base::HistogramTester>();
   fetcher()->make_cache_stale_for_testing();
+  EXPECT_TRUE(fetcher()->IsCacheStale());
   recorded_responses().clear();
 
   StartBulkCheck();
   EXPECT_EQ(1, GetNumberOfPendingRequests());
   // OriginWithScript2 (test.com) is not available anymore.
+  EXPECT_TRUE(fetcher()->IsCacheStale());
   SimulateResponseWithContent(
       R"({
         "example.com":
@@ -197,6 +202,7 @@
           }
         })");
   base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(fetcher()->IsCacheStale());
 
   EXPECT_THAT(recorded_responses(),
               UnorderedElementsAre(Pair(GetOriginWithScript1(), true),
diff --git a/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.cc b/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.cc
index 9be036a..5ce5177 100644
--- a/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.cc
+++ b/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.cc
@@ -280,6 +280,10 @@
              : CacheState::kReady;
 }
 
+bool SavedPasswordsCapabilitiesFetcher::IsCacheStale() const {
+  return GetCacheState() != CacheState::kReady;
+}
+
 SavedPasswordsCapabilitiesFetcher::CapabilitiesFetchResult::
     CapabilitiesFetchResult() = default;
 SavedPasswordsCapabilitiesFetcher::CapabilitiesFetchResult::
diff --git a/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.h b/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.h
index f603d75..ccd3966 100644
--- a/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.h
+++ b/components/password_manager/core/browser/saved_passwords_capabilities_fetcher.h
@@ -48,11 +48,11 @@
   void FetchScriptAvailability(const url::Origin& origin,
                                ResponseCallback callback) override;
   bool IsScriptAvailable(const url::Origin& origin) const override;
+  bool IsCacheStale() const override;
   base::Value::Dict GetDebugInformationForInternals() const override;
   base::Value::List GetCacheEntries() const override;
 
  private:
-  using CacheState = PasswordScriptsFetcher::CacheState;
   // SavedPasswordsPresenter::Observer:
   void OnEdited(const PasswordForm& form) override;
   void OnSavedPasswordsChanged(
@@ -60,47 +60,59 @@
 
   // Fetches capabilities for all origins in cache.
   void FetchCapababilitiesForAllStoredOrigins();
+
   // Callback to process refresh capabilities request.
   void FetchCapababilitiesForAllStoredOriginsDone(
       base::TimeTicks request_start_timestamp,
       const std::set<url::Origin>& capabilities);
+
   // Fetches capabilities info for a single origin.
   void FetchCapababilitiesForSingleOrigin(const url::Origin& origin,
                                           ResponseCallback callback);
-  // Callback to process FetchCapababilitiesForSingleOrigin request.
+
+  // Callback to process `FetchCapababilitiesForSingleOrigin` request.
   void FetchCapababilitiesForSingleOriginDone(
       const url::Origin& origin,
       ResponseCallback callback,
       base::TimeTicks request_start_timestamp,
       const std::set<url::Origin>& capabilities);
+
   // Returns a sorted list of unique origins of all stored credentials.
   std::vector<url::Origin> GetOriginsOfStoredPasswords() const;
-  // Resets the |cache_| with the current list of origins from stored
+
+  // Resets the `cache_` with the current list of origins from stored
   // credentials.
   void ReinitializeCache();
 
+  // Returns the state of the cache.
   CacheState GetCacheState() const;
 
   std::unique_ptr<CapabilitiesService> fetcher_;
+
   // Manages the list of saved passwords, including updates.
   password_manager::SavedPasswordsPresenter saved_passwords_presenter_;
+
   // Stores the callbacks that are waiting for the refresh capabilities request
   // to finish.
   std::vector<base::OnceClosure> all_origins_callbacks_;
+
   // Stores the single origin callbacks that are waiting for the capabilities
   // refresh request to finish.
   std::vector<std::pair<url::Origin, ResponseCallback>>
       single_origin_callbacks_;
+
   // Stores script capabilities and last request timestamp per origin.
   std::map<url::Origin, CapabilitiesFetchResult> cache_;
 
-  // Boolean that remembers whether |cache_| is initialized. This is set to
+  // Boolean that remembers whether `cache_` is initialized. This is set to
   // true when the delegate obtains the list of saved passwords for the first
   // time.
   bool is_cache_initialized_ = false;
+
   // Boolean that remembers whether there is a refresh capabilities request in
   // process.
   bool refresh_in_process_ = false;
+
   // Boolean that remembers whether cache should be refreshed (e.g due to an new
   // password added to the store or a prewarming request before initialization).
   bool should_refresh_cache_ = false;
diff --git a/components/password_manager/core/browser/saved_passwords_capabilities_fetcher_unittest.cc b/components/password_manager/core/browser/saved_passwords_capabilities_fetcher_unittest.cc
index ffdcdd1..2d3a57c 100644
--- a/components/password_manager/core/browser/saved_passwords_capabilities_fetcher_unittest.cc
+++ b/components/password_manager/core/browser/saved_passwords_capabilities_fetcher_unittest.cc
@@ -204,7 +204,9 @@
 TEST_F(SavedPasswordsCapabilitiesFetcherTest, PrewarmCache) {
   base::HistogramTester histogram_tester;
   ExpectCacheRefresh();
+  EXPECT_TRUE(fetcher_->IsCacheStale());
   fetcher_->PrewarmCache();
+  EXPECT_FALSE(fetcher_->IsCacheStale());
 
   // The cache is not stale yet. No new request is expected.
   EXPECT_CALL(*mock_capabilities_service_,
@@ -212,11 +214,13 @@
       .Times(0);
 
   fetcher_->RefreshScriptsIfNecessary(base::DoNothing());
+  EXPECT_FALSE(fetcher_->IsCacheStale());
   CheckScriptAvailabilityDefaultResults();
 
   // Make cache stale again.
   RunUntilIdle();
   task_env_.AdvanceClock(base::Minutes(10));
+  EXPECT_TRUE(fetcher_->IsCacheStale());
   EXPECT_CALL(*mock_capabilities_service_,
               QueryPasswordChangeScriptAvailability(
                   UnorderedElementsAre(
@@ -225,6 +229,7 @@
                   _))
       .WillOnce(RunOnceCallback<1>(std::set<url::Origin>()));
   fetcher_->PrewarmCache();
+  EXPECT_FALSE(fetcher_->IsCacheStale());
 
   histogram_tester.ExpectUniqueSample(
       "PasswordManager.SavedPasswordsCapabilitiesFetcher.CacheState",
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index b9236ca..6b61edb 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -3290,7 +3290,7 @@
 <translation id="4508728400492074981">Controla políticas para la función Conjuntos propios.</translation>
 <translation id="4510923771103268849">El usuario puede tener acceso root a los contenedores de Crostini</translation>
 <translation id="4512407512989846472">Permitir bloquear la copia en el portapapeles en URLs especificadas</translation>
-<translation id="4513691822411041977">No forzar el uso de Búsqueda Segura en la Búsqueda de Google ni en el modo restringido de YouTube</translation>
+<translation id="4513691822411041977">No forzar el uso de Búsqueda Segura en la Búsqueda de Google ni en el modo Restringido de YouTube</translation>
 <translation id="4515404363392014383">Habilitar Navegación segura en fuentes de confianza</translation>
 <translation id="4518251772179446575">Preguntar siempre que un sitio quiera hacer un seguimiento de la ubicación física de los usuarios</translation>
 <translation id="4521193243799782295">Durante el inicio de sesión, <ph name="PRODUCT_OS_NAME" /> puede realizar la autenticación a través de un servidor (con conexión) o una contraseña almacenada en caché (sin conexión).
@@ -3829,13 +3829,13 @@
       </translation>
 <translation id="51859390023061147">Inhabilitar la función de restauración completa</translation>
 <translation id="5189360528842591274">Permitir conectarse solo a los servicios Bluetooth de la lista</translation>
-<translation id="5190426551516379357">Si la política se define, se aplica un modo restringido mínimo en YouTube y se evita que los usuarios seleccionen un modo menos restringido. Cuando se asignan estos valores:
+<translation id="5190426551516379357">Si la política se define, se aplica un modo Restringido mínimo en YouTube y se evita que los usuarios seleccionen un modo menos restringido. Cuando se asignan estos valores:
 
-      * Estricto: el modo restringido estricto siempre está activo en YouTube.
+      * Estricto: el modo Restringido estricto siempre está activo en YouTube.
 
-      * Moderado: el usuario solo puede seleccionar los modos restringidos moderado y estricto en YouTube, pero no puede desactivar el modo restringido.
+      * Moderado: el usuario solo puede seleccionar los modos restringidos moderado y estricto en YouTube, pero no puede desactivar el modo Restringido.
 
-      * Desactivado, o si no se define: Chrome no aplica el modo restringido en YouTube. Políticas externas, como las de YouTube, pueden seguir aplicando el modo restringido.</translation>
+      * Desactivado, o si no se define: Chrome no aplica el modo Restringido en YouTube. Políticas externas, como las de YouTube, pueden seguir aplicando el modo Restringido.</translation>
 <translation id="5191476996923842491">Comportamiento predeterminado del redondeo de la función setTimeout().</translation>
 <translation id="519247340330463721">Configura las políticas relacionadas con la función Navegación segura</translation>
 <translation id="5196520640744454600">Habilitar las teclas persistentes en la pantalla de inicio de sesión</translation>
@@ -6933,7 +6933,7 @@
 <translation id="8455551509936646199">Día de la semana en el que se debe reiniciar, interpretado en la zona horaria local del dispositivo. Solo se utiliza si el valor de "frequency" (frecuencia) es "WEEKLY" (semanal).</translation>
 <translation id="8461914792118322307">Proxy</translation>
 <translation id="8465065632133292531">Parámetros para URL instantánea que utiliza POST</translation>
-<translation id="8470317291588703478">No forzar el modo restringido de YouTube</translation>
+<translation id="8470317291588703478">No forzar el modo Restringido de YouTube</translation>
 <translation id="8477885780684655676">TLS 1.0</translation>
 <translation id="8479032202539686055">WebRTC usará todas las interfaces disponibles al buscar la mejor ruta.</translation>
 <translation id="8483004350080020634">Elimina las partes de las URL de tipo https:// que contienen información sensible de seguridad y privacidad antes de que se transfieran a las secuencias de comandos de configuración automática de proxy que utiliza <ph name="PRODUCT_NAME" /> durante la resolución de proxy.
@@ -7011,7 +7011,7 @@
       Si se combina con <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />, podrá restablecerse una versión anterior concreta del dispositivo.
 
       Advertencia: No se recomienda configurar las restricciones de versiones, ya que podrían impedir que los usuarios reciban actualizaciones de software y correcciones de seguridad críticas. Limitar las actualizaciones a una versión concreta puede poner en riesgo a los usuarios.</translation>
-<translation id="8520064498689833152">Forzar el uso de Búsqueda Segura en la Búsqueda de Google y que el modo restringido de YouTube se aplique en la opción moderada como mínimo</translation>
+<translation id="8520064498689833152">Forzar el uso de Búsqueda Segura en la Búsqueda de Google y que el modo Restringido de YouTube se aplique en la opción moderada como mínimo</translation>
 <translation id="8524334245528364388">URL de un archivo JSON con una lista de servidores de impresión.</translation>
 <translation id="8525526490824335042">Contenedor de Linux</translation>
 <translation id="8526745614158856826">Establecer esta política permite definir una lista de sitios a los que se les concederá permiso automáticamente para acceder a todos los dispositivos disponibles.
@@ -7153,7 +7153,7 @@
 <translation id="8676959842615154675">Si se habilita esta política, el host de acceso remoto comparará el nombre del usuario local al que está asociado el host con el nombre de la cuenta de Google registrado como el propietario del host; por ejemplo, "juanmartinez" si el host pertenece a la cuenta de Google juanmartinez@example.com. Este host no se iniciará si el nombre del propietario del host es diferente al nombre del usuario local al que está asociado el host. Para establecer que la cuenta de Google del propietario se asocie a un dominio específico, usa esta política junto a <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />.
 
       Si se inhabilita esta política o no se le asigna ningún valor, el host de acceso remoto podrá asociarse a cualquier usuario local.</translation>
-<translation id="867708016260789630">Forzar que el modo restringido de YouTube se aplique en la opción moderada como mínimo</translation>
+<translation id="867708016260789630">Forzar que el modo Restringido de YouTube se aplique en la opción moderada como mínimo</translation>
 <translation id="8677853537025397834">Permite la API WebHID en estos sitios</translation>
 <translation id="8685024486845674965">La advertencia de protección de contraseña se activa al reutilizar la contraseña</translation>
 <translation id="8685680544554917389">Si se asigna el valor "True" a esta política, <ph name="PRODUCT_NAME" /> reproducirá automáticamente el contenido multimedia. Si se le asigna el valor "False", <ph name="PRODUCT_NAME" /> no podrá reproducir automáticamente el contenido multimedia.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index b4e6bc02..195610d3 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -1608,6 +1608,7 @@
 <translation id="264771271300359481">ไม่อนุญาตให้เว็บไซต์ใช้สิทธิ์เข้าถึงคลิปบอร์ด</translation>
 <translation id="2649896281375932517">ให้ผู้ใช้เลือก</translation>
 <translation id="2650049181907741121">การทำงานของอุปกรณ์เมื่อผู้ใช้ปิดฝา</translation>
+<translation id="2656559539624760733">ไม่ใช้ Chrome Root Store</translation>
 <translation id="2658653824183107970">ควรใช้การใช้งาน <ph name="CORS" /> เดิมมากกว่า <ph name="CORS" /> ใหม่</translation>
 <translation id="2660846099862559570">ไม่ใช้พร็อกซี</translation>
 <translation id="2661628029848851543">ระบบจะอนุญาตการใช้งานทั้งหมดของบัญชีที่จัดการ</translation>
@@ -3485,6 +3486,12 @@
 
       หากไม่ได้ตั้งค่านโยบายนี้ ทั้งผู้ใช้ที่มีองค์กรเป็นผู้จัดการและผู้ใช้ที่ไม่มีการจัดการจะใช้ค่าเริ่มต้นได้</translation>
 <translation id="487460824085252184">ย้ายข้อมูลอัตโนมัติโดยไม่ขอคำยินยอมจากผู้ใช้</translation>
+<translation id="48749493657448872">เมื่อเปิดใช้การตั้งค่านี้ "<ph name="PRODUCT_NAME" />" จะยืนยันใบรับรองเซิร์ฟเวอร์โดยใช้ตัวตรวจสอบใบรับรองในตัว
+      เมื่อปิดใช้การตั้งค่านี้ "<ph name="PRODUCT_NAME" />" จะยืนยันใบรับรองเซิร์ฟเวอร์โดยใช้ตัวตรวจสอบใบรับรองเดิมที่แพลตฟอร์มมีให้จนกว่าจะเปิดใช้ "<ph name="CHROME_ROOT_STORE_ENABLED_POLICY_NAME" />"
+      เมื่อไม่ได้ตั้งค่านี้ ระบบอาจใช้ตัวตรวจสอบใบรับรองในตัวหรือตัวตรวจสอบใบรับรองเดิมก็ได้
+
+      เรามีแผนจะนำนโยบายนี้ออกใน "<ph name="PRODUCT_NAME" />" สำหรับ "<ph name="MAC_OS_NAME" />" เวอร์ชัน 107 เมื่อถึงกำหนดการหยุดรองรับตัวตรวจสอบใบรับรองเดิมใน "<ph name="MAC_OS_NAME" />"
+      </translation>
 <translation id="4874982543810021567">บล็อก WebUSB ในเว็บไซต์เหล่านี้</translation>
 <translation id="4876805738539874299">เปิดใช้เวอร์ชันสูงสุดของ SSL ไว้</translation>
 <translation id="4877402532842958110">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้นโยบาย "<ph name="URL_ALLOWLIST_POLICY_NAME" />" แทน
@@ -4279,6 +4286,7 @@
 <translation id="5733040281451845496">การตั้งค่านโยบายเป็น "เปิดใช้" หมายความว่าจะไม่มีการเริ่มการหน่วงเวลาการจัดการพลังงานและการจำกัดความยาวของเซสชันจนกว่ากิจกรรมแรกของผู้ใช้จะเกิดขึ้นในเซสชัน
 
       การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ตั้งค่าจะทำให้การหน่วงเวลาการจัดการพลังงานและการจำกัดความยาวของเซสชันเริ่มทันทีหลังจากที่เริ่มเซสชัน</translation>
+<translation id="5733357908790472408">ใช้ Chrome Root Store</translation>
 <translation id="5735915264686983150">ซ่อนและบล็อกฟีเจอร์ที่ปิดใช้</translation>
 <translation id="5737394734996319911">ฟีเจอร์การช่วยเหลือพิเศษ <ph name="PRODUCT_NAME" /> ช่วยให้ผู้ใช้โปรแกรมอ่านหน้าจอซึ่งมีความบกพร่องทางสายตารู้รายละเอียดของรูปภาพในเว็บที่ไม่มีป้ายกำกับบอกไว้ ผู้ใช้ที่เลือกเปิดใช้ฟีเจอร์จะมีตัวเลือกการใช้บริการ Google ที่ไม่ระบุตัวบุคคล เพื่อฟังคำอธิบายแบบอัตโนมัติสำหรับรูปภาพที่ไม่ได้ติดป้ายกำกับซึ่งผู้ใช้พบเจอในเว็บ
 
@@ -4738,6 +4746,7 @@
 <translation id="6258658183356534534">ควบคุมฟีเจอร์ User-Agent Client Hints GREASE Update</translation>
 <translation id="6261643884958898336">รายงานข้อมูลการระบุเครื่อง</translation>
 <translation id="6265892395051519509">อนุญาตให้เข้าถึงเซ็นเซอร์ในเว็บไซต์เหล่านี้</translation>
+<translation id="6266043141694454734">กำหนดว่าจะใช้ Chrome Root Store และตัวตรวจสอบใบรับรองในตัวเพื่อยืนยันใบรับรองเซิร์ฟเวอร์หรือไม่</translation>
 <translation id="6273015149273504999">
       ระบุรายชื่อแอปและส่วนขยายที่ติดตั้งแบบเงียบในหน้าจอการเข้าสู่ระบบ (ผู้ใช้ไม่ต้องดำเนินการ) ซึ่งผู้ใช้ถอนการติดตั้งหรือปิดใช้ไม่ได้
 
@@ -5725,6 +5734,23 @@
       การไม่ตั้งค่าทั้ง <ph name="HOMEPAGE_LOCATION_POLICY_NAME" /> และ <ph name="HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_NAME" /> จะทำให้ผู้ใช้เลือกหน้าแรกเองได้
 
       ใน <ph name="MS_WIN_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่เข้าร่วมโดเมน <ph name="MS_AD_NAME" />, ทำงานใน Windows 10 Pro หรือลงทะเบียนใน<ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> ใน <ph name="MAC_OS_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่จัดการผ่าน MDM หรือเข้าร่วมโดเมนผ่าน MCX</translation>
+<translation id="7258250780552783197">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_FILE_TRANSFER_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีการโอนไฟล์ใน "<ph name="PRODUCT_OS_NAME" />"
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_SOURCE_DESTINATION_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งไฟล์สำหรับการวิเคราะห์หรือไม่เมื่อมีการโอนระหว่างแหล่งที่มาและปลายทาง รวมถึงแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับไฟล์นั้น แท็กที่สอดคล้องกับกฎ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หากแหล่งที่มาและปลายทางตรงกับกฎที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีกฎ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับการโอน การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ กฎ <ph name="ENTERPRISE_CONNECTOR_SOURCE_DESTINATION_LIST_FIELD" /> กำหนดโดยรายการการจับคู่ ซึ่งแต่ละคู่มีรายการแหล่งที่มาและรายการปลายทาง <ph name="ENTERPRISE_CONNECTOR_FILE_SYSTEM_TYPE_FIELD" /> จะกำหนดว่าควรใช้กฎกับระบบไฟล์ใด
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า "<ph name="PRODUCT_OS_NAME" />" จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนอนุญาตการโอน ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า "<ph name="PRODUCT_OS_NAME" />" จะอนุญาตการโอนทันที
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> จะควบคุมให้ "<ph name="PRODUCT_OS_NAME" />" บล็อกหรืออนุญาตไฟล์ที่มีการป้องกันด้วยรหัสผ่าน
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> จะควบคุมให้ "<ph name="PRODUCT_OS_NAME" />" บล็อกหรืออนุญาตให้วิเคราะห์ไฟล์ที่มีขนาดใหญ่เกินไป
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อต้องกำหนดให้ผู้ใช้ป้อนเหตุผลสำหรับแท็กใดเพื่อข้ามการสแกนที่ทำให้เกิดคำเตือนแบบข้ามได้ หากไม่ได้ตั้งค่าช่องนี้ ระบบจะถือว่าไม่จำเป็นต้องป้อนเหตุผล
+
+      ช่อง <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> ใช้เพื่อกำหนดค่าข้อความที่จะแสดงแก่ผู้ใช้เมื่อมีคำเตือนปรากฏขึ้นหลังจากที่การสแกนตรวจพบการละเมิด ช่องข้อความมีข้อความที่จะแสดงต่อผู้ใช้และต้องมีความยาวไม่เกิน 200 อักขระ ช่อง <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" /> มี URL จากผู้ดูแลระบบ ซึ่งผู้ใช้สามารถคลิกเพื่อดูข้อมูลเพิ่มเติมจากลูกค้าเกี่ยวกับเหตุผลที่การดำเนินการถูกบล็อก ช่อง <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> จะมีหรือไม่มีก็ได้และจะมีภาษาของข้อความ ช่อง <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> ที่เว้นว่างไว้หรือมีค่าเป็น "ค่าเริ่มต้น" จะระบุข้อความที่จะใช้เมื่อภาษาของผู้ใช้ไม่มีข้อความ ช่องแท็กจะระบุประเภทการสแกนที่จะมีการแสดงข้อความ รายการ <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" /> อาจมีหรือไม่มีรายการย่อยเพิ่มเติม โดยที่รายการย่อยแต่ละรายการจำเป็นต้องมีช่องข้อความและช่องแท็กที่ไม่เว้นว่างไว้
+
+      นโยบายนี้ต้องมีการตั้งค่าเพิ่มเติมจึงจะมีผล โปรดดูข้อมูลเพิ่มเติมที่ https://support.google.com/chrome/a?p=chrome_enterprise_connector_policies_setting</translation>
 <translation id="7258823566580374486">เปิดใช้งานการปิดม่านโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="7260204423892780600">ควบคุมการตั้งค่าสำหรับ Google Assistant</translation>
 <translation id="7261140115553020049">เปิดใช้บริการพื้นที่ทำงานแบบลอย</translation>
@@ -7165,6 +7191,7 @@
 
       การไม่ตั้งค่านโยบายนี้จะทำให้ระบบใช้ค่าเริ่มต้นเฉพาะแพลตฟอร์มนั้นๆ ได้แก่ <ph name="IE_PRODUCT_NAME" /> สำหรับ <ph name="MS_WIN_NAME" /> หรือ <ph name="SAFARI_PRODUCT_NAME" /> สำหรับ <ph name="MAC_OS_NAME" /> ส่วนใน <ph name="LINUX_OS_NAME" /> การเปิดเบราว์เซอร์สำรองจะทำไม่สำเร็จ</translation>
 <translation id="8836975838488342340">เวลาที่ใช้รหัสการเข้าถึงได้ (เป็นวินาที)</translation>
+<translation id="883744045558067826">ระบบอาจใช้ Chrome Root Store ขึ้นอยู่กับขั้นตอนการเปิดตัวฟีเจอร์</translation>
 <translation id="8839799083601163225">นโยบายนี้ควบคุมว่ากระบวนการของบริการเครือข่ายจะเรียกใช้โดยใช้แซนด์บ็อกซ์หรือไม่
       หากเปิดใช้นโยบายนี้ กระบวนการของบริการเครือข่ายจะเรียกใช้โดยใช้แซนด์บ็อกซ์
       หากปิดใช้นโยบายนี้ กระบวนการของบริการเครือข่ายจะเรียกใช้โดยไม่ใช้แซนด์บ็อกซ์ ซึ่งทำให้ผู้ใช้มีความเสี่ยงด้านความปลอดภัยเพิ่มเติมที่เกี่ยวข้องกับการเรียกใช้บริการเครือข่ายโดยไม่ใช้แซนด์บ็อกซ์
@@ -7339,6 +7366,12 @@
 
       ควรระบุค่าของนโยบายเป็นมิลลิวินาที โดยจำกัดช่วงของค่าให้อยู่ระหว่าง 30 วินาทีถึง 24 ชั่วโมง</translation>
 <translation id="9040042535845939426">ตั้งสถานะหน้าจอส่วนตัวในหน้าจอการเข้าสู่ระบบ</translation>
+<translation id="9046609670147277653">เมื่อเปิดใช้การตั้งค่านี้ "<ph name="PRODUCT_NAME" />" จะยืนยันใบรับรองเซิร์ฟเวอร์โดยใช้ตัวตรวจสอบใบรับรองในตัวที่มี Chrome Root Store เป็นแหล่งที่มาของความน่าเชื่อถือสาธารณะ
+      เมื่อปิดใช้การตั้งค่านี้ "<ph name="PRODUCT_NAME" />" จะไม่ใช้ Chrome Root Store การยืนยันอาจใช้ตัวตรวจสอบใบรับรองของระบบ หรือตัวตรวจสอบในตัวหากนโยบาย <ph name="BUILT_IN_CERTIFICATE_VERIFIER_ENABLED_POLICY_NAME" /> พร้อมใช้งานและไม่ได้ปิดใช้
+      เมื่อไม่ได้ตั้งค่านี้ ระบบอาจใช้ Chrome Root Store หรือรูทที่ระบบมีให้
+
+      เรามีแผนจะนำนโยบายนี้ออกใน "<ph name="PRODUCT_NAME" />" สำหรับ "<ph name="MS_WIN_NAME" />" และ "<ph name="MAC_OS_NAME" />" เวอร์ชัน 111 เมื่อถึงกำหนดการหยุดรองรับการใช้ตัวตรวจสอบใบรับรองและรูทที่แพลตฟอร์มให้มา
+      </translation>
 <translation id="9050853837490399534">นโยบายนี้จะควบคุมว่าอุปกรณ์ควรอัปเดตเป็นบิวด์ Quick Fix หรือไม่
 
       หากกำหนดค่านโยบายเป็นโทเค็นที่แมปไปยังบิวด์ Quick Fix อุปกรณ์จะได้รับการอัปเดตเป็นบิวด์ Quick Fix ที่เกี่ยวข้องหากการอัปเดตไม่ได้ถูกบล็อกโดยนโยบายอื่น
@@ -7388,6 +7421,7 @@
 
       หากตั้งค่านโยบายเป็น "เท็จ" หรือไม่ได้ตั้งค่า จะไม่มีการรายงานข้อมูล
       หากตั้งค่าเป็น "จริง" จะมีการรายงานเหตุการณ์การเข้าสู่ระบบ/ออกจากระบบของอุปกรณ์</translation>
+<translation id="9087652369391570821">นโยบายการกำหนดค่าสำหรับเครื่องมือเชื่อมต่อ Chrome Enterprise OnFileTransfer</translation>
 <translation id="9088191250434406767">การไม่ตั้งค่านโยบายหรือตั้งค่าเป็น "เปิดใช้" จะอนุญาตให้ผู้ใช้ค้นหาด้วยกล้องของตนโดยใช้ <ph name="GOOGLE_LENS_PRODUCT_NAME" /> ได้ การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้ผู้ใช้จะไม่เห็นปุ่ม <ph name="GOOGLE_LENS_PRODUCT_NAME" /> ในช่องค้นหาเมื่อระบบรองรับการค้นหาที่ได้รับความช่วยเหลือจากกล้อง <ph name="GOOGLE_LENS_PRODUCT_NAME" /></translation>
 <translation id="9088433379343318874">เปิดใช้ผู้ให้บริการเนื้อหาสำหรับผู้ใช้ภายใต้การควบคุมดูแล</translation>
 <translation id="9088444059179765143">กำหนดค่าวิธีการตรวจหาเขตเวลาอัตโนมัติ</translation>
diff --git a/components/privacy_sandbox/privacy_sandbox_prefs.cc b/components/privacy_sandbox/privacy_sandbox_prefs.cc
index 3aaacca..0dd645c 100644
--- a/components/privacy_sandbox/privacy_sandbox_prefs.cc
+++ b/components/privacy_sandbox/privacy_sandbox_prefs.cc
@@ -25,14 +25,9 @@
 
 const char kPrivacySandboxPageViewed[] = "privacy_sandbox.page_viewed";
 
-const char kPrivacySandboxFlocDataAccessibleSince[] =
-    "privacy_sandbox.floc_data_accessible_since";
-
 const char kPrivacySandboxTopicsDataAccessibleSince[] =
     "privacy_sandbox.topics_data_accessible_since";
 
-extern const char kPrivacySandboxFlocEnabled[] = "privacy_sandbox.floc_enabled";
-
 const char kPrivacySandboxBlockedTopics[] = "privacy_sandbox.blocked_topics";
 
 extern const char kPrivacySandboxFledgeJoinBlocked[] =
@@ -78,13 +73,8 @@
   registry->RegisterBooleanPref(prefs::kPrivacySandboxManuallyControlledV2,
                                 false);
   registry->RegisterBooleanPref(prefs::kPrivacySandboxPageViewed, false);
-  registry->RegisterTimePref(prefs::kPrivacySandboxFlocDataAccessibleSince,
-                             base::Time());
   registry->RegisterTimePref(prefs::kPrivacySandboxTopicsDataAccessibleSince,
                              base::Time());
-  registry->RegisterBooleanPref(
-      prefs::kPrivacySandboxFlocEnabled, true,
-      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
   registry->RegisterListPref(prefs::kPrivacySandboxBlockedTopics);
   registry->RegisterDictionaryPref(prefs::kPrivacySandboxFledgeJoinBlocked);
   registry->RegisterBooleanPref(prefs::kPrivacySandboxNoticeDisplayed, false);
diff --git a/components/privacy_sandbox/privacy_sandbox_prefs.h b/components/privacy_sandbox/privacy_sandbox_prefs.h
index b1c0d4b..47dc75d3 100644
--- a/components/privacy_sandbox/privacy_sandbox_prefs.h
+++ b/components/privacy_sandbox/privacy_sandbox_prefs.h
@@ -43,19 +43,9 @@
 extern const char kPrivacySandboxPageViewed[];
 
 // The point in time from which history is eligible to be used when calculating
-// a user's FLoC ID.
-// TODO(crbug.com/1292898): Deprecate this preference once Privacy Sandbox
-// Settings 3 has been launched.
-extern const char kPrivacySandboxFlocDataAccessibleSince[];
-
-// The point in time from which history is eligible to be used when calculating
 // a user's Topics API topics.
 extern const char kPrivacySandboxTopicsDataAccessibleSince[];
 
-// Synced boolean that controls whether FLoC is enabled. Requires that the
-// kPrivacySandboxApisEnabled preference be enabled to take effect.
-extern const char kPrivacySandboxFlocEnabled[];
-
 // List of entries representing Topics API topics which are blocked for
 // the profile. Blocked topics cannot be provided to site, or considered as
 // part of the profile's "top topics". Entries in the list are dictionaries
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 776eee8..1dbf96c 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Kleinkiekies</translation>
 <translation id="3227137524299004712">Mikrofoon</translation>
 <translation id="3229041911291329567">Weergawe-inligting oor jou toestel en blaaier</translation>
+<translation id="3229277193950731405">Kopieer weergawestring</translation>
 <translation id="323107829343500871">Voer die CVC vir <ph name="CREDIT_CARD" /> in</translation>
 <translation id="3234666976984236645">Bespeur altyd belangrike inhoud op hierdie werf</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />; druk Tab en dan Enter om die voorkoms van jou blaaier te pasmaak</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Blad vir geen passende eiebewys vir veilige betalingeiebewys is toegemaak</translation>
 <translation id="6393956493820063117">Administrateurbeleid blokkeer plak van <ph name="ORIGIN_NAME" /> af na hierdie ligging toe</translation>
+<translation id="6394852772105848029">Hierdie werf wil die <ph name="APP_NAME" />-app oopmaak</translation>
 <translation id="6398277657359595425">Huil hardop</translation>
 <translation id="6398765197997659313">Gaan by volskerm uit</translation>
 <translation id="6401136357288658127">Hierdie beleid is opgeskort. Jy moet liewer die <ph name="NEW_POLICY" />-beleid gebruik.</translation>
 <translation id="6404511346730675251">Wysig boekmerk</translation>
+<translation id="6405181733356710802">Gaan voort na <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Voer die vervaldatum en CVC vir <ph name="CREDIT_CARD" /> in</translation>
 <translation id="6415778972515849510">Chromium kan jou help om jou Google-rekening te beskerm en jou wagwoord te verander.</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index bf943d4..ec5b089 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">ምሕንድስና-E</translation>
 <translation id="6391700400718590966">ደህንነቱ የተጠበቀ የመግቢያ ማስረጃ ምንም ተዛማጅ የመግቢያ ማስረጃ ሉህ አልተዘጋም</translation>
 <translation id="6393956493820063117">ከ<ph name="ORIGIN_NAME" /> ወደዚህ አካባቢ መለጠፍ በአስተዳዳሪ መመሪያ ታግዷል</translation>
+<translation id="6394852772105848029">ይህ ጣቢያ የ<ph name="APP_NAME" /> መተግበሪያውን መክፈት ይፈልጋል</translation>
 <translation id="6398277657359595425">ጮክ ብሎ ማልቀስ</translation>
 <translation id="6398765197997659313">ከሙሉ ማሳያ መስኮት ይውጡ</translation>
 <translation id="6401136357288658127">ይህ መመሪያ ተቋርጧል። በምትኩ የ<ph name="NEW_POLICY" /> መመሪያውን መጠቀም አለብዎት።</translation>
 <translation id="6404511346730675251">ዕልባት አርትዕ</translation>
+<translation id="6405181733356710802">ወደ <ph name="APP_NAME" /> ይቀጥሉ?</translation>
 <translation id="6406765186087300643">C0 (የደብዳቤ ፖስታ)</translation>
 <translation id="6410264514553301377">የ<ph name="CREDIT_CARD" /> የአገልግሎት ማብቂያ ቀን እና ሲቪሲ ያስገቡ</translation>
 <translation id="6415778972515849510">Chromium የGoogle መለያዎን እንዲጠብቁ እና የይለፍ ቃልዎን እንዲቀይሩት ያግዘዎታል።</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 73dcd263..1b8ac781 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -1963,10 +1963,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">تم إغلاق صفحة عدم تطابق بيانات اعتماد الدفع الآمن.</translation>
 <translation id="6393956493820063117">تحظر سياسة المشرف إمكانية اللصق من <ph name="ORIGIN_NAME" /> إلى هذا المكان.</translation>
+<translation id="6394852772105848029">يريد هذا الموقع الإلكتروني فتح تطبيق <ph name="APP_NAME" />.</translation>
 <translation id="6398277657359595425">بكاء بصوت مرتفع</translation>
 <translation id="6398765197997659313">إنهاء وضع ملء الشاشة</translation>
 <translation id="6401136357288658127">تم إيقاف هذه السياسة. يمكنك استخدام السياسة <ph name="NEW_POLICY" /> بدلاً من ذلك.</translation>
 <translation id="6404511346730675251">تعديل الإشارة المرجعية</translation>
+<translation id="6405181733356710802">هل تريد المتابعة إلى تطبيق <ph name="APP_NAME" />؟</translation>
 <translation id="6406765186087300643">‏C0 (مغلف)</translation>
 <translation id="6410264514553301377">‏أدخِل تاريخ انتهاء الصلاحية ورمز التحقّق (CVC) لبطاقة <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">‏يمكن أن يساعدك Chromium على حماية حسابك على Google وتغيير كلمة المرور.</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index d03c324..858632f6 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -1955,10 +1955,12 @@
 <translation id="6390662030813198813">অভিযান্ত্রিক-E</translation>
 <translation id="6391700400718590966">কোনো মিল নথকা সুৰক্ষিত পৰিশোধৰ ক্ৰিডেনশ্বিয়েল থকা শ্বীটখন বন্ধ কৰা হৈছে</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" />ৰ পৰা এই অৱস্থানটোত পে’ষ্ট কৰাৰ সুবিধাটো প্রশাসকৰ নীতিয়ে অৱৰোধ কৰিছে</translation>
+<translation id="6394852772105848029">এই ছাইটটোৱে <ph name="APP_NAME" /> এপ্‌টো খুলিব বিচাৰিছে</translation>
 <translation id="6398277657359595425">ডাঙৰকৈ কান্দি থকা</translation>
 <translation id="6398765197997659313">সম্পূর্ণ স্ক্ৰীণ ম’ডৰ পৰা বাহিৰ হওক</translation>
 <translation id="6401136357288658127">এই নীতিটো অপ্ৰচলিত। আপুনি তাৰ পৰিৱৰ্তে <ph name="NEW_POLICY" /> নীতিটো ব্যৱহাৰ কৰা উচিত।</translation>
 <translation id="6404511346730675251">বুকমার্ক সম্পাদনা কৰক</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" />লৈ যাবনে?</translation>
 <translation id="6406765186087300643">C0 (লেফাফা)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" />ৰ ম্যাদ উকলা তাৰিখ আৰু CVC দিয়ক</translation>
 <translation id="6415778972515849510">Chromiumএ আপোনাৰ Google একাউণ্ট সুৰক্ষিত কৰাত আৰু আপোনৰ পাছৱৰ্ড সলনি কৰাত সহায় কৰিব পাৰে।</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index cb9a30b..dc974bd 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -1956,10 +1956,12 @@
 <translation id="6390662030813198813">Texniki-E</translation>
 <translation id="6391700400718590966">"Təhlükəsiz ödəniş giriş məlumatları uyğun gəlmir" giriş məlumatları səhifəsi bağlanıb</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> mənbəyindən bu məkana əlavə etmək administrator siyasətinə əsasən bloklanıb</translation>
+<translation id="6394852772105848029">Bu sayt <ph name="APP_NAME" /> tətbiqini açmaq istəyir</translation>
 <translation id="6398277657359595425">Ucadan Ağlamaq</translation>
 <translation id="6398765197997659313">Tam ekrandan çıxın</translation>
 <translation id="6401136357288658127">Bu siyasət ləğv edilib. Əvəzinə <ph name="NEW_POLICY" /> siyasətindən istifadə edin.</translation>
 <translation id="6404511346730675251">Əlfəcinə düzəliş edin</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> ünvanında davam etmək istəyirsiniz?</translation>
 <translation id="6406765186087300643">C0 (Zərf)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> üçün bitmə tarixi və CVC nömrəsini daxil edin</translation>
 <translation id="6415778972515849510">Chromium Google Hesabını qorumağa və parolu dəyişməyə kömək edir.</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 8f8312a..0e5f237a 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Быў закрыты аркуш, які паказваецца пры адсутнасці супадзення ўліковых даных для бяспечных плацяжоў</translation>
 <translation id="6393956493820063117">Палітыка, зададзеная адміністратарам, блакіруе магчымасць устаўляць сюды элементы з сайта <ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Гэты сайт спрабуе адкрыць праграму <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Рыдае</translation>
 <translation id="6398765197997659313">Выключыць поўнаэкранны рэжым</translation>
 <translation id="6401136357288658127">Гэта палітыка састарэла – выкарыстоўвайце замест яе "<ph name="NEW_POLICY" />".</translation>
 <translation id="6404511346730675251">Змяніце закладку</translation>
+<translation id="6405181733356710802">Перайсці ў праграму <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (канверт)</translation>
 <translation id="6410264514553301377">Увядзіце тэрмін дзеяння і код CVC з карткі <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium можа дапамагчы абараніць ваш Уліковы запіс Google і змяніць ваш пароль.</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index d40baedc..39e88a6 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Листът за несъответстващи идентификационни данни за сигурни плащания е затворен</translation>
 <translation id="6393956493820063117">Поставянето на информация от <ph name="ORIGIN_NAME" /> тук е блокирано от администраторски правила</translation>
+<translation id="6394852772105848029">Този сайт иска да отвори приложението <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Рев</translation>
 <translation id="6398765197997659313">Изход от цял екран</translation>
 <translation id="6401136357288658127">Това правило е оттеглено. Вместо него използвайте <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Редактиране на отметката</translation>
+<translation id="6405181733356710802">Искате ли да продължите към <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (плик)</translation>
 <translation id="6410264514553301377">Въвеждане на датата на валидност и кода за проверка за <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium може да ви помогне да защитите профила си в Google и да промените паролата си.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 79fa055..8d9abaaa 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -832,6 +832,7 @@
 <translation id="3226387218769101247">থাম্বনেল দেখুন</translation>
 <translation id="3227137524299004712">মাইক্রোফোন</translation>
 <translation id="3229041911291329567">আপনার ডিভাইস এবং ব্রাউজারের ভার্সন সম্বন্ধীয় তথ্য</translation>
+<translation id="3229277193950731405">ভার্সন স্ট্রিং কপি করুন</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" />-এর CVC লিখুন</translation>
 <translation id="3234666976984236645">এই সাইটে সবসময় গুরুত্বপূর্ণ কন্টেন্ট শনাক্ত করুন</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, আপনার ব্রাউজার কেমন দেখাবে তা কাস্টমাইজ করতে Tab প্রেস করার পর Enter প্রেস করুন</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">সুরক্ষিত পেমেন্ট ক্রেডেনশিয়ালের সাথে মিল নেই এমন ক্রেডেনশিয়াল শিট বন্ধ আছে</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> থেকে কপি করে এই লোকেশনে পেস্ট করা অ্যাডমিনিস্ট্রেটর পলিসির মাধ্যমে ব্লক করা হয়েছে</translation>
+<translation id="6394852772105848029">এই সাইট <ph name="APP_NAME" /> অ্যাপ খুলতে চায়</translation>
 <translation id="6398277657359595425">সশব্দে কান্নাকাটি করা</translation>
 <translation id="6398765197997659313">পূর্ণ স্ক্রীণ বন্ধ করুন</translation>
 <translation id="6401136357288658127">এই নীতি বন্ধ করে দেওয়া হয়েছে। পরিবর্তে আপনাকে <ph name="NEW_POLICY" /> নীতি ব্যবহার করতে হবে।</translation>
 <translation id="6404511346730675251">বুকমার্ক সম্পাদনা করুন</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" />-এ চালিয়ে যেতে চান?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Enter the expiration date and CVC for <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">আপনার পাসওয়ার্ড পরিবর্তন করে Google অ্যাকাউন্ট সুরক্ষিত রাখতে Chromium সাহায্য করতে পারবে।</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index d6444e6..3438716 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Sličice</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="3229041911291329567">Informacije o verziji vašeg uređaja i preglednika</translation>
+<translation id="3229277193950731405">Kopiraj niz verzije</translation>
 <translation id="323107829343500871">Unesite CVC za <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Uvijek detektiraj važan sadržaj s ove web lokacije</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da prilagodite izgled preglednika</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Zatvorena je tabela obavještenja da nema akreditiva za sigurno plaćanje koji se podudaraju</translation>
 <translation id="6393956493820063117">Lijepljenje sa <ph name="ORIGIN_NAME" /> na ovu lokaciju je blokirano pravilom administratora</translation>
+<translation id="6394852772105848029">Ova web lokacija želi otvoriti aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Glasan plač</translation>
 <translation id="6398765197997659313">Napusti prikaz preko cijelog ekrana</translation>
 <translation id="6401136357288658127">Ovo pravilo je zastarjelo. Umjesto njega koristite pravilo <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Uredite oznaku</translation>
+<translation id="6405181733356710802">Nastaviti na aplikaciji <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (koverta)</translation>
 <translation id="6410264514553301377">Unesite datum isteka i CVC za karticu <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium vam može pomoći da zaštitite svoj Google račun i promijenite lozinku.</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index bca9bd33..6413c12 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">S'ha tancat el full de credencials no coincidents de credencials de pagament segur</translation>
 <translation id="6393956493820063117">La política de l'administrador no permet enganxar contingut de <ph name="ORIGIN_NAME" /> en aquesta ubicació</translation>
+<translation id="6394852772105848029">Aquest lloc web vol obrir l'aplicació <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Cara que plora molt</translation>
 <translation id="6398765197997659313">Surt del mode de pantalla completa</translation>
 <translation id="6401136357288658127">Aquesta política es considera obsoleta. Hauries de fer servir la política <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Edita l'adreça d'interès</translation>
+<translation id="6405181733356710802">Vols continuar a <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (sobre)</translation>
 <translation id="6410264514553301377">Introdueix la data de caducitat i el CVC de la targeta <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium et pot ajudar a protegir el Compte de Google i a canviar la contrasenya.</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 7e3f9e75..727a524f 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -828,6 +828,7 @@
 <translation id="3226387218769101247">Miniatury</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="3229041911291329567">Informace o verzi zařízení a prohlížeče</translation>
+<translation id="3229277193950731405">Zkopírovat řetězec verze</translation>
 <translation id="323107829343500871">Zadejte kód CVC karty <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Vždy na tomto webu zjišťovat důležitý obsah</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, stisknutím tabulátoru a poté klávesy Enter si přizpůsobíte vzhled prohlížeče</translation>
@@ -1955,10 +1956,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">List identifikačních údajů pro zabezpečené platby o nenalezených odpovídajících identifikačních údajích je zavřený</translation>
 <translation id="6393956493820063117">Vkládání ze zdroje <ph name="ORIGIN_NAME" /> do tohoto umístění blokuje zásada administrátora</translation>
+<translation id="6394852772105848029">Web chce otevřít aplikaci <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Hlasitý pláč</translation>
 <translation id="6398765197997659313">Ukončit režim celé obrazovky</translation>
 <translation id="6401136357288658127">Podpora této zásady byla ukončena. Měli byste místo ní používat zásadu <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Upravit záložku</translation>
+<translation id="6405181733356710802">Pokračovat na <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (obálka)</translation>
 <translation id="6410264514553301377">Zadejte datum vypršení platnosti a kód CVC karty <ph name="CREDIT_CARD" />.</translation>
 <translation id="6415778972515849510">Chromium vám může pomoci ochránit váš účet Google a změnit heslo.</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 5918448..7e8a6ef 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Peirianneg-E</translation>
 <translation id="6391700400718590966">Mae dalen dim manylion sy'n cyfateb y prosiect manylion talu diogel ar gau</translation>
 <translation id="6393956493820063117">Mae gludo o <ph name="ORIGIN_NAME" /> i'r lleoliad hwn wedi'i rwystro gan bolisi gweinyddwyr</translation>
+<translation id="6394852772105848029">Mae'r wefan hon eisiau agor yr ap <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Llefain yn uchel</translation>
 <translation id="6398765197997659313">Gadael y sgrîn lawn</translation>
 <translation id="6401136357288658127">Mae'r polisi hwn bellach yn hen. Dylech ddefnyddio'r polisi <ph name="NEW_POLICY" /> yn lle.</translation>
 <translation id="6404511346730675251">Golygu nod tudalen</translation>
+<translation id="6405181733356710802">Parhau i <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Amlen)</translation>
 <translation id="6410264514553301377">Rhowch y dyddiad darfod a'r CVC ar gyfer <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Gall Chromium eich helpu i amddiffyn eich Cyfrif Google ac i newid eich cyfrinair.</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index be8029a..9a769ba 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Miniaturebilleder</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="3229041911291329567">Versionsoplysninger om din enhed og browser</translation>
+<translation id="3229277193950731405">Kopiér versionsstreng</translation>
 <translation id="323107829343500871">Angiv kontrolkoden for <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Registrer altid vigtigt indhold på dette website</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />– tryk på Tab-tasten efterfulgt af Enter for at tilpasse din browsers udseende</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Regneark uden matchende loginoplysninger til sikker betaling er lukket</translation>
 <translation id="6393956493820063117">Administratorpolitikken tillader ikke, at du indsætter fra <ph name="ORIGIN_NAME" /> på denne placering</translation>
+<translation id="6394852772105848029">Dette website vil have tilladelse til at åbne appen <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Vræler</translation>
 <translation id="6398765197997659313">Afslut fuld skærm</translation>
 <translation id="6401136357288658127">Denne politik er udfaset. Du bør bruge politikken <ph name="NEW_POLICY" /> i stedet.</translation>
 <translation id="6404511346730675251">Rediger bogmærke</translation>
+<translation id="6405181733356710802">Vil du fortsætte til <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Angiv udløbsdatoen og kontrolkoden for <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium kan hjælpe dig med at beskytte din Google-konto og ændre din adgangskode.</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 30d968c..1ab4b472 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -1958,10 +1958,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Sichere Anmeldedaten für Zahlungen – Tabellenblatt für nicht übereinstimmende sichere Anmeldedaten ist geschlossen</translation>
 <translation id="6393956493820063117">Die Administratorrichtlinie blockiert das Einfügen von Inhalten aus <ph name="ORIGIN_NAME" /> an dieser Stelle</translation>
+<translation id="6394852772105848029">Diese Website möchte die App <ph name="APP_NAME" /> öffnen</translation>
 <translation id="6398277657359595425">Laut weinen</translation>
 <translation id="6398765197997659313">Vollbildmodus beenden</translation>
 <translation id="6401136357288658127">Diese Richtlinie ist veraltet. Verwende stattdessen die Richtlinie "<ph name="NEW_POLICY" />".</translation>
 <translation id="6404511346730675251">Lesezeichen bearbeiten</translation>
+<translation id="6405181733356710802">Weiter zu <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Umschlag)</translation>
 <translation id="6410264514553301377">Ablaufdatum und CVC für <ph name="CREDIT_CARD" /> eingeben</translation>
 <translation id="6415778972515849510">Mithilfe von Chromium kannst du dein Google-Konto schützen und dein Passwort ändern.</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 3eec3c1..bafb51f 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Μικρογραφίες</translation>
 <translation id="3227137524299004712">Μικρόφωνο</translation>
 <translation id="3229041911291329567">Πληροφορίες έκδοσης σχετικά με τη συσκευή και το πρόγραμμα περιήγησης</translation>
+<translation id="3229277193950731405">Αντιγραφή συμβολοσειράς έκδοσης</translation>
 <translation id="323107829343500871">Εισαγάγετε τον κωδικό CVC για την πιστωτική κάρτα <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Να εντοπίζεται πάντα σημαντικό περιεχόμενο σε αυτόν τον ιστότοπο</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε το πλήκτρο Tab και έπειτα το πλήκτρο Enter για να προσαρμόσετε την εμφάνιση του προγράμματος περιήγησης</translation>
@@ -1964,10 +1965,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Έχει κλείσει το φύλλο μη αντιστοίχισης διαπιστευτηρίων με τα διαπιστευτήρια ασφαλούς πληρωμής</translation>
 <translation id="6393956493820063117">Η επικόλληση από το <ph name="ORIGIN_NAME" /> σε αυτήν την τοποθεσία έχει αποκλειστεί από την πολιτική του διαχειριστή.</translation>
+<translation id="6394852772105848029">Αυτός ο ιστότοπος θέλει να ανοίξει την εφαρμογή <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Δυνατό κλάμα</translation>
 <translation id="6398765197997659313">Έξοδος από πλήρη οθόνη</translation>
 <translation id="6401136357288658127">Αυτή η πολιτική έχει καταργηθεί. Θα πρέπει να χρησιμοποιήσετε εναλλακτικά την πολιτική <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Επεξεργασία σελιδοδείκτη</translation>
+<translation id="6405181733356710802">Συνέχεια στην εφαρμογή <ph name="APP_NAME" />;</translation>
 <translation id="6406765186087300643">C0 (Φάκελος)</translation>
 <translation id="6410264514553301377">Εισαγάγετε την ημερομηνία λήξης και τον κωδικό CVC για την κάρτα <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Το Chromium μπορεί να σας βοηθήσει να προστατεύσετε τον Λογαριασμό σας Google και να αλλάξετε τον κωδικό πρόσβασής σας.</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 133c8a2..7e797eb 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -1961,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Secure payment credential no matching credential sheet is closed</translation>
 <translation id="6393956493820063117">Pasting from <ph name="ORIGIN_NAME" /> to this location is blocked by administrator policy</translation>
+<translation id="6394852772105848029">This site wants to open the <ph name="APP_NAME" /> app</translation>
 <translation id="6398277657359595425">Loudly crying</translation>
 <translation id="6398765197997659313">Exit full screen</translation>
 <translation id="6401136357288658127">This policy is deprecated. You should use the <ph name="NEW_POLICY" /> policy instead.</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
+<translation id="6405181733356710802">Continue to <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Enter the expiry date and CVC for <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium can help you protect your Google account and change your password.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 9931993..8cb882e1 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -1961,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Se cerró la hoja inferior que indicaba que las credenciales de pago seguro no coinciden</translation>
 <translation id="6393956493820063117">Una política del administrador no permite pegar contenido de <ph name="ORIGIN_NAME" /> en esta ubicación</translation>
+<translation id="6394852772105848029">Este sitio quiere abrir la app de <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Llanto desconsolado</translation>
 <translation id="6398765197997659313">Salir de pantalla completa</translation>
 <translation id="6401136357288658127">Esta política es obsoleta. En su lugar, debes usar la política <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
+<translation id="6405181733356710802">¿Quieres continuar a <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Ingresar la fecha de vencimiento y el CVC para <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium puede ayudarte a proteger tu Cuenta de Google y cambiar tu contraseña.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 6fb561c..a06d6d8 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Se ha cerrado la hoja de credenciales de pago seguro con una credencial que no coincide</translation>
 <translation id="6393956493820063117">La política del administrador no permite pegar desde <ph name="ORIGIN_NAME" /> en esta ubicación.</translation>
+<translation id="6394852772105848029">Este sitio quiere abrir la aplicación <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Llanto</translation>
 <translation id="6398765197997659313">Salir del modo de pantalla completa</translation>
 <translation id="6401136357288658127">Esta política está obsoleta. Deberías usar la política <ph name="NEW_POLICY" /> en su lugar.</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
+<translation id="6405181733356710802">¿Ir a <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (sobre)</translation>
 <translation id="6410264514553301377">Introduce la fecha de vencimiento y el código CVC de la tarjeta <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium puede ayudarte a proteger tu cuenta de Google y a cambiar tu contraseña.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 3c7246b..c9962d8 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Turvalise maksemandaadi leht selle kohta, et pole ühtegi sobivat mandaati, on suletud</translation>
 <translation id="6393956493820063117">Saidilt <ph name="ORIGIN_NAME" /> sellesse asukohta kleepimine on administraatori reegliga blokeeritud</translation>
+<translation id="6394852772105848029">See sait soovib avada rakenduse <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Valjusti nuttev</translation>
 <translation id="6398765197997659313">Välju täisekraanilt</translation>
 <translation id="6401136357288658127">Selle reegli tugi on katkestatud. Peaksite selle asemel kasutama reeglit <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Muuda järjehoidjat</translation>
+<translation id="6405181733356710802">Kas minna edasi rakendusse <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (ümbrik)</translation>
 <translation id="6410264514553301377">Sisestage krediitkaardi <ph name="CREDIT_CARD" /> aegumiskuupäev ja CVC</translation>
 <translation id="6415778972515849510">Chromium aitab teil oma Google'i kontot kaitsta ja parooli muuta.</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 3335cf5..835bc84 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -1955,10 +1955,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Ordainketak egiteko kredentzial segurua bat ez datorrela dioen kredentzial-orria itxita dago</translation>
 <translation id="6393956493820063117">Administratzailearen gidalerroek blokeatu egin dute <ph name="ORIGIN_NAME" /> domeinuko edukia kokapen honetan itsasteko aukera</translation>
+<translation id="6394852772105848029">Webguneak <ph name="APP_NAME" /> aplikazioa ireki nahi du</translation>
 <translation id="6398277657359595425">Ozen negarrez</translation>
 <translation id="6398765197997659313">Irten pantaila osoko modutik</translation>
 <translation id="6401136357288658127">Gidalerro hau zaharkituta dago. Horren ordez <ph name="NEW_POLICY" /> gidalerroa erabili beharko zenuke.</translation>
 <translation id="6404511346730675251">Editatu laster-marka</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> aplikaziora joan nahi duzu?</translation>
 <translation id="6406765186087300643">C0 (gutun-azala)</translation>
 <translation id="6410264514553301377">Idatzi <ph name="CREDIT_CARD" /> txartelaren iraungitze-data eta CVC kodea</translation>
 <translation id="6415778972515849510">Google-ko kontua babesten eta pasahitza aldatzen lagun diezazuke Chromium-ek.</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 199613a9..b27b2d6 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">تصاویر کوچک</translation>
 <translation id="3227137524299004712">میکروفن</translation>
 <translation id="3229041911291329567">اطلاعات مربوط به نسخه دستگاه و مرورگر</translation>
+<translation id="3229277193950731405">کپی کردن رشته نسخه</translation>
 <translation id="323107829343500871">‏CVC کارت <ph name="CREDIT_CARD" /> را وارد کنید</translation>
 <translation id="3234666976984236645">همیشه محتوای مهم در این سایت شناسایی شود</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای سفارشی کردن ظاهر مرورگر، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">برگ «اطلاعات کاربری مطابقت ندارد» در روند وارد کردن اطلاعات کاربری پرداخت امن بسته شد</translation>
 <translation id="6393956493820063117">براساس خط‌مشی سرپرست، جای‌گذاری از <ph name="ORIGIN_NAME" /> در این ناحیه مسدود شده است</translation>
+<translation id="6394852772105848029">این سایت می‌خواهد برنامه <ph name="APP_NAME" /> را باز کند</translation>
 <translation id="6398277657359595425">گریه با صدای بلند</translation>
 <translation id="6398765197997659313">خروج از حالت تمام صفحه</translation>
 <translation id="6401136357288658127">این خط‌مشی منسوخ شده است. درعوض، باید از خط‌مشی <ph name="NEW_POLICY" /> استفاده کنید.</translation>
 <translation id="6404511346730675251">ویرایش نشانک</translation>
+<translation id="6405181733356710802">به <ph name="APP_NAME" /> می‌روید؟</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">‏CVC‏ و تاریخ انقضای <ph name="CREDIT_CARD" /> را وارد کنید</translation>
 <translation id="6415778972515849510">‏Chromium می‌تواند کمک کند از حساب Google خود محافظت کنید و گذرواژه‌تان را تغییر دهید.</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 161f916..f8b8f576 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -1961,10 +1961,12 @@
 <translation id="6390662030813198813">Insinööri-E</translation>
 <translation id="6391700400718590966">Suojatun maksun kirjautumistiedot eivät täsmää ‑kirjautumistietotaulukko on suljettu</translation>
 <translation id="6393956493820063117">Järjestelmänvalvojakäytäntö on estänyt tähän paikkaan liittämisen sivustolta<ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Sivusto haluaa avata <ph name="APP_NAME" />-sovelluksen</translation>
 <translation id="6398277657359595425">Äänekäs itku</translation>
 <translation id="6398765197997659313">Poistu koko näytön tilasta</translation>
 <translation id="6401136357288658127">Tämä käytäntö on vanhentunut. Käytä <ph name="NEW_POLICY" /> ‑käytäntöä sen sijaan.</translation>
 <translation id="6404511346730675251">Muokkaa kirjanmerkkiä</translation>
+<translation id="6405181733356710802">Jatketaanko osoitteeseen <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (kirjekuori)</translation>
 <translation id="6410264514553301377">Anna kortin <ph name="CREDIT_CARD" /> vanhentumispäivä ja CVC</translation>
 <translation id="6415778972515849510">Chromium voi auttaa suojaamaan Google-tiliäsi ja vaihtamaan salasanasi.</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index d6b7635..54cc03f 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Mga Thumbnail</translation>
 <translation id="3227137524299004712">Mikropono</translation>
 <translation id="3229041911291329567">Impormasyon ng bersyon tungkol sa iyong device at browser</translation>
+<translation id="3229277193950731405">Kopyahin ang string ng bersyon</translation>
 <translation id="323107829343500871">Ilagay ang iyong CVC para sa <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Palaging tukuyin ang mahalagang content sa site na ito</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Pindutin ang tab at pagkatapos ay ang Enter para i-customize ang hitsura ng iyong browser</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Nakasara ang sheet na walang tumutugmang kredensyal sa kredensyal sa secure na pagbabayad</translation>
 <translation id="6393956493820063117">Na-block ng patakaran ng administrator ang pag-paste sa lokasyong ito mula sa <ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Gusto ng site na ito na buksan ang <ph name="APP_NAME" /> app</translation>
 <translation id="6398277657359595425">Umiiyak Nang Malakas</translation>
 <translation id="6398765197997659313">Lumabas sa buong screen</translation>
 <translation id="6401136357288658127">Hindi na ginagamit ang patakarang ito. Dapat mong gamitin ang patakarang <ph name="NEW_POLICY" /> sa halip.</translation>
 <translation id="6404511346730675251">I-edit ang bookmark</translation>
+<translation id="6405181733356710802">Magpatuloy sa <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Ilagay ang petsa ng pag-expire at CVC para sa <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Makakatulong sa iyo ang Chromium na protektahan ang iyong Google Account at palitan ang password mo.</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index ca2c419..0f94b845 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Ingénierie E</translation>
 <translation id="6391700400718590966">L'authentifiant de paiement sécurisé ne correspond pas, la feuille d'authentification est fermée</translation>
 <translation id="6393956493820063117">La politique de l'administrateur bloque le collage de contenu provenant de <ph name="ORIGIN_NAME" /> à cet endroit</translation>
+<translation id="6394852772105848029">Ce site veut ouvrir l'application <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Très triste</translation>
 <translation id="6398765197997659313">Quitter le mode plein écran</translation>
 <translation id="6401136357288658127">Cette politique est obsolète. Vous devriez utiliser la politique <ph name="NEW_POLICY" /> à la place.</translation>
 <translation id="6404511346730675251">Modifier le favori</translation>
+<translation id="6405181733356710802">Continuer vers <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">Enveloppe C0</translation>
 <translation id="6410264514553301377">Entrez la date d'expiration et le code de vérification de carte (CVC) pour <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium peut vous aider à protéger votre compte Google et à changer votre mot de passe.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 1bf480d..2f148e1 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">La bottom sheet indiquant qu'aucun identifiant ne correspond pour le paiement sécurisé est fermée</translation>
 <translation id="6393956493820063117">Le règlement de l'administrateur bloque le collage de contenus provenant de "<ph name="ORIGIN_NAME" />" à cet endroit</translation>
+<translation id="6394852772105848029">Ce site veut ouvrir l'appli <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Pleurer fort</translation>
 <translation id="6398765197997659313">Quitter le mode plein écran</translation>
 <translation id="6401136357288658127">Cette règle est obsolète. Vous devez utiliser la règle "<ph name="NEW_POLICY" />" à la place.</translation>
 <translation id="6404511346730675251">Modifier le favori</translation>
+<translation id="6405181733356710802">Accéder à <ph name="APP_NAME" /> ?</translation>
 <translation id="6406765186087300643">C0 (enveloppe)</translation>
 <translation id="6410264514553301377">Saisissez la date d'expiration et le code CVC pour <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium peut vous aider à protéger votre compte Google et à modifier votre mot de passe.</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index 66f5746..e210a8a 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">A folla da credencial de pagos seguros correspondente ás credenciais non coincidentes está pechada</translation>
 <translation id="6393956493820063117">A política do administrador bloqueou a función de pegar contido nesta localización desde <ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Este sitio quere abrir a aplicación <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Choro desconsolado</translation>
 <translation id="6398765197997659313">Saír do modo de pantalla completa</translation>
 <translation id="6401136357288658127">Esta política quedou obsoleta. Debes utilizar a política <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
+<translation id="6405181733356710802">Queres ir á aplicación <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (sobre)</translation>
 <translation id="6410264514553301377">Introduce a data de caducidade e o código CVC da tarxeta <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium pode axudarche a protexer a túa Conta de Google e a cambiar o teu contrasinal.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index eac45b6..ad54b89 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">એન્જિનિયરિંગ-E</translation>
 <translation id="6391700400718590966">ચુકવણીની સુરક્ષિત લૉગ ઇન વિગત, મેળ ખાતી લૉગ ઇન વિગતની કોઈપણ શીટ બંધ કરવામાં આવી નથી</translation>
 <translation id="6393956493820063117">વ્યવસ્થાપકની નીતિને કારણે <ph name="ORIGIN_NAME" />થી આ સ્થાનમાં પેસ્ટ કરવાની સુવિધા બ્લૉક કરવામાં આવી છે</translation>
+<translation id="6394852772105848029">આ સાઇટ <ph name="APP_NAME" /> ઍપ ખોલવા માગે છે</translation>
 <translation id="6398277657359595425">મોટેથી રડતો ચહેરો</translation>
 <translation id="6398765197997659313">પૂર્ણ સ્ક્રીનથી બહાર નીકળો</translation>
 <translation id="6401136357288658127">આ પૉલિસી ટાળવામાં આવી છે. તેના બદલે તમારે <ph name="NEW_POLICY" /> પૉલિસીનો ઉપયોગ કરવો જોઈએ.</translation>
 <translation id="6404511346730675251">બુકમાર્કમાં ફેરફાર કરો</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> પર આગળ વધીએ?</translation>
 <translation id="6406765186087300643">C0 (એન્વલપ)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> માટે સમાપ્તિ તારીખ અને CVC દાખલ કરો</translation>
 <translation id="6415778972515849510">Chromium તમારા Google એકાઉન્ટને સુરક્ષિત કરવામાં અને તમારો પાસવર્ડ બદલવામાં તમારી સહાય કરી શકે છે.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 98af75d..77a452a 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">इंजीनियरिंग-ई</translation>
 <translation id="6391700400718590966">मेल नहीं खाने वाले पेमेंट क्रेडेंशियल की शीट बंद है</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> से इस जगह पर टेक्स्ट चिपकाने की सुविधा को आपके एडमिन ने ब्लॉक कर दिया है</translation>
+<translation id="6394852772105848029">यह साइट, <ph name="APP_NAME" /> ऐप्लिकेशन को खोलना चाहती है</translation>
 <translation id="6398277657359595425">ज़ोर से रोते हुए</translation>
 <translation id="6398765197997659313">फ़ुल स्क्रीन से बाहर निकलें</translation>
 <translation id="6401136357288658127">यह नीति हटा दी गई है. आपको इसके बजाय, इस <ph name="NEW_POLICY" /> नीति का इस्तेमाल करना चाहिए.</translation>
 <translation id="6404511346730675251">बुकमार्क में बदलाव करें</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> पर जारी रखना है?</translation>
 <translation id="6406765186087300643">सी0 (एन्वेलप)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> का समाप्ति तारीख और CVC डालें</translation>
 <translation id="6415778972515849510">क्रोमियम से आप अपने Google खाते की सुरक्षा कर सकते हैं और अपना पासवर्ड बदल सकते हैं.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index fe89931..f456f80 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Zatvoren je list obavijesti da nema podudarnih vjerodajnica za sigurno plaćanje</translation>
 <translation id="6393956493820063117">Lijepljenje s <ph name="ORIGIN_NAME" /> na ovu lokaciju blokirano je pravilima administratora</translation>
+<translation id="6394852772105848029">Ova web-lokacija želi otvoriti aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Glasno plakanje</translation>
 <translation id="6398765197997659313">Izađi iz cijelog zaslona</translation>
 <translation id="6401136357288658127">Pravilo je ukinuto. Trebali biste koristiti pravilo <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Uredi oznaku</translation>
+<translation id="6405181733356710802">Nastaviti u aplikaciju <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (omotnica)</translation>
 <translation id="6410264514553301377">Unesite datum isteka i CVC za karticu <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium vam može pomoći da zaštitite svoj Google račun i promijenite zaporku.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 241f1ef2..1b92f73 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -1958,10 +1958,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">A biztonságos fizetés hitelesítési adataihoz tartozó nem egyező hitelesítési adatok űrlapja bezárva</translation>
 <translation id="6393956493820063117">Rendszergazdai házirend tiltja a tartalmak ide történő beillesztését a következő helyről: <ph name="ORIGIN_NAME" />.</translation>
+<translation id="6394852772105848029">Ez a webhely szeretné megnyitni a(z) <ph name="APP_NAME" /> alkalmazást</translation>
 <translation id="6398277657359595425">Hangos sírás</translation>
 <translation id="6398765197997659313">Kilépés a teljes képernyős módból</translation>
 <translation id="6401136357288658127">Ez a házirend megszűnt. Használja helyette a(z) <ph name="NEW_POLICY" /> házirendet.</translation>
 <translation id="6404511346730675251">Könyvjelző szerkesztése</translation>
+<translation id="6405181733356710802">Továbblép a(z) <ph name="APP_NAME" /> webhelyre?</translation>
 <translation id="6406765186087300643">C0 (boríték)</translation>
 <translation id="6410264514553301377">Írja be a(z) <ph name="CREDIT_CARD" /> kártyán szereplő lejárati dátumot és CVC-t</translation>
 <translation id="6415778972515849510">A Chromium segíthet a Google-fiók védelmében és a jelszó módosításában.</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index 8fc089e..8bbfeef3 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -1961,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Փակվել է պատուհան, որը ցուցադրում է անվտանգ վճարման տվյալների անհամապատասխանությունը տվյալների աղյուսակի հետ</translation>
 <translation id="6393956493820063117">Դուք չեք կարող <ph name="ORIGIN_NAME" /> կայքից բովանդակություն տեղադրել այստեղ, քանի որ ադմինիստրատորն արգելափակել է այդ հնարավորությունը։</translation>
+<translation id="6394852772105848029">Այս կայքին անհրաժեշտ է բացել <ph name="APP_NAME" /> հավելվածը</translation>
 <translation id="6398277657359595425">Հեկեկոց</translation>
 <translation id="6398765197997659313">Ելնել լիաէկրան ռեժիմից</translation>
 <translation id="6401136357288658127">Այս կանոնը հնացել է: Փոխարենն օգտագործեք <ph name="NEW_POLICY" /> կանոնը։</translation>
 <translation id="6404511346730675251">Փոփոխել էջանիշը</translation>
+<translation id="6405181733356710802">Անցնե՞լ <ph name="APP_NAME" /></translation>
 <translation id="6406765186087300643">C0 (ծրար)</translation>
 <translation id="6410264514553301377">Մուտքագրեք <ph name="CREDIT_CARD" /> քարտի սպառման ամսաթիվը և CVC կոդը</translation>
 <translation id="6415778972515849510">Chromium-ը կօգնի պաշտպանել ձեր Google հաշիվը և փոխել գաղտնաբառը։</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index a72cbaf..115f1041 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Sheet tidak ada kredensial yang cocok untuk Kredensial pembayaran aman ditutup</translation>
 <translation id="6393956493820063117">Penempelan dari <ph name="ORIGIN_NAME" /> ke lokasi ini diblokir oleh kebijakan administrator</translation>
+<translation id="6394852772105848029">Situs ini ingin membuka aplikasi <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Menangis Keras</translation>
 <translation id="6398765197997659313">Keluar dari tampilan layar penuh</translation>
 <translation id="6401136357288658127">Kebijakan ini tidak digunakan lagi. Sebaiknya Anda menggunakan kebijakan <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
+<translation id="6405181733356710802">Lanjutkan ke <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Masukkan tanggal kedaluwarsa dan CVC <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium dapat membantu Anda melindungi Akun Google dan mengubah sandi Anda.</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index da3e902..c0b5fc7 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Skilríki öruggrar greiðslu — tilkynningasíðu um engin samsvarandi skilríki var lokað</translation>
 <translation id="6393956493820063117">Regla stjórnanda lokar á að hægt sé að líma frá <ph name="ORIGIN_NAME" /> á þessa staðsetningu</translation>
+<translation id="6394852772105848029">Þetta forrit vill opna <ph name="APP_NAME" /> forritið</translation>
 <translation id="6398277657359595425">Hávær grátur</translation>
 <translation id="6398765197997659313">Hætta að nota allan skjáinn</translation>
 <translation id="6401136357288658127">Þessi regla er úrelt. Þú ættir að nota regluna <ph name="NEW_POLICY" /> í staðinn.</translation>
 <translation id="6404511346730675251">Breyta bókamerki</translation>
+<translation id="6405181733356710802">Halda áfram í <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (umslag)</translation>
 <translation id="6410264514553301377">Sláðu inn gildistímann og CVC-númerið fyrir <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium getur hjálpað þér að vernda Google reikninginn þinn og breyta aðgangsorðinu.</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index b1337b83..d8b5a69 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -1956,10 +1956,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Le credenziali per il pagamento sicuro non corrispondono: riquadro inferiore chiuso</translation>
 <translation id="6393956493820063117">La possibilità di incollare da <ph name="ORIGIN_NAME" /> a questa posizione è stata bloccata da un criterio dell'amministratore</translation>
+<translation id="6394852772105848029">Questo sito vuole aprire l'app <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Pianto disperato</translation>
 <translation id="6398765197997659313">Esci da schermo intero</translation>
 <translation id="6401136357288658127">Questa norma è obsoleta. Dovresti usare invece la norma <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Modifica preferito</translation>
+<translation id="6405181733356710802">Continuare su <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Inserisci la data di scadenza e il codice CVC della carta <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium può aiutarti a proteggere il tuo Account Google e a modificare la password.</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index ca79140..51629fe 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -1965,10 +1965,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">הגיליון 'אין התאמה בין פרטי הכניסה לפרטי הכניסה לתשלום מאובטח' סגור</translation>
 <translation id="6393956493820063117">אפשרות ההדבקה מ-<ph name="ORIGIN_NAME" /> במיקום הזה חסומה בהתאם למדיניות של מנהל המערכת</translation>
+<translation id="6394852772105848029">האתר הזה מבקש לפתוח את האפליקציה <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">בכי רם</translation>
 <translation id="6398765197997659313">יציאה ממסך מלא</translation>
 <translation id="6401136357288658127">המדיניות הזו הוצאה משימוש. במקומה יש להשתמש במדיניות <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">עריכת סימנייה</translation>
+<translation id="6405181733356710802">להמשיך אל <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)‎</translation>
 <translation id="6410264514553301377">יש להזין את תאריך התפוגה ואת קוד האימות של <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">‏בעזרת Chromium אפשר להגן על חשבון Google ולשנות את הסיסמה.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index af0f187..1a2d2b85 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">保護されたお支払い認証情報(認証情報の一致なし)シートは閉じています</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> からこの場所への貼り付けは管理者が設定したポリシーによってブロックされています</translation>
+<translation id="6394852772105848029">このサイトは <ph name="APP_NAME" /> アプリを開くよう要求しています</translation>
 <translation id="6398277657359595425">大泣き</translation>
 <translation id="6398765197997659313">全画面表示を終了</translation>
 <translation id="6401136357288658127">このポリシーはサポートが終了したため、代わりに <ph name="NEW_POLICY" /> ポリシーを使用してください。</translation>
 <translation id="6404511346730675251">ブックマークを編集</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> に移動しますか?</translation>
 <translation id="6406765186087300643">C0(封筒)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> の有効期限と CVC を入力</translation>
 <translation id="6415778972515849510">Chromium には Google アカウントの保護とパスワードの変更をサポートする機能があります。</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index 21c780b..d6bfc0ea 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">უსაფრთხო გადახდისთვის საჭირო ავტორიზაციის მონაცემების არარსებობის ფურცელი დახურულია</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" />-დან ამ მდებარეობაზე ჩასმა დაბლოკილია ადმინისტრატორის წესების მიხედვით</translation>
+<translation id="6394852772105848029">ამ საიტს სურს, გახსნას <ph name="APP_NAME" /> აპი</translation>
 <translation id="6398277657359595425">ხმამაღლა მტირალი</translation>
 <translation id="6398765197997659313">სრულეკრანიანი რეჟიმიდან გამოსვლა</translation>
 <translation id="6401136357288658127">ეს წესები მოძველდა. სანაცვლოდ უნდა გამოიყენოთ <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">სანიშნის რედაქტირება</translation>
+<translation id="6405181733356710802">გსურთ <ph name="APP_NAME" />-ზე გადასვლა?</translation>
 <translation id="6406765186087300643">C0 (კონვერტი)</translation>
 <translation id="6410264514553301377">შეიყვანეთ <ph name="CREDIT_CARD" />-ის მოქმედების ვადა და CVC</translation>
 <translation id="6415778972515849510">Chromium-ს შეუძლია დაგეხმაროთ თქვენი Google ანგარიშის დაცვასა და პაროლის შეცვლაში.</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 2652754..43541ef4 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Қауіпсіз төлемге арналған деректердің сәйкес келмейтіндігі көрсетілген парақ жабылды.</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> сайтынан осы орынға қоюға әкімші саясатымен тыйым салынған.</translation>
+<translation id="6394852772105848029">Бұл сайт <ph name="APP_NAME" /> қолданбасын ашқысы келіп тұр.</translation>
 <translation id="6398277657359595425">Дауыстап жылау</translation>
 <translation id="6398765197997659313">Толық экраннан шығу</translation>
 <translation id="6401136357288658127">Бұл саясат ескірді. Орнына <ph name="NEW_POLICY" /> саясатын пайдаланғаныңыз жөн.</translation>
 <translation id="6404511346730675251">Бетбелгіні өзгерту</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> ашылсын ба?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> картасының жарамдылық мерзімін және CVC кодын енгізіңіз</translation>
 <translation id="6415778972515849510">Chromium браузері Google аккаунтыңызды қорғауға және құпия сөзіңізді өзгертуге көмектеседі.</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index 6db5586..33bc7c0 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -1965,10 +1965,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">សន្លឹក​ព័ត៌មានផ្ទៀងផ្ទាត់​ការបង់ប្រាក់​មានសុវត្ថិភាព ដែលគ្មានព័ត៌មានផ្ទៀងផ្ទាត់​ត្រូវគ្នា​ត្រូវបានបិទ</translation>
 <translation id="6393956493820063117">ការដាក់ចូលពី <ph name="ORIGIN_NAME" /> ទៅក្នុងទីតាំងនេះត្រូវបានទប់ស្កាត់ដោយគោលការណ៍របស់អ្នកគ្រប់គ្រង</translation>
+<translation id="6394852772105848029">គេហទំព័រ​នេះ​ចង់​បើក​កម្មវិធី <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">យំឮៗ</translation>
 <translation id="6398765197997659313">ចាកចេញពីអេក្រង់ពេញ</translation>
 <translation id="6401136357288658127">គោលការណ៍នេះ​ត្រូវបានបញ្ឈប់។ អ្នក​គួរតែ​ប្រើ​គោលការណ៍ <ph name="NEW_POLICY" /> ជំនួសវិញ។</translation>
 <translation id="6404511346730675251">កែប្រែចំណាំ</translation>
+<translation id="6405181733356710802">បន្ត​ទៅ​កាន់ <ph name="APP_NAME" /> ឬ?</translation>
 <translation id="6406765186087300643">C0 (ស្រោម​សំបុត្រ)</translation>
 <translation id="6410264514553301377">បញ្ចូល​កាលបរិច្ឆេទ​ផុត​កំណត់​ និង​ CVC សម្រាប់ <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium អាច​ជួយ​អ្នក​ក្នុងការការពារ​គណនី Google និង​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់អ្នក​។</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 6d0db2eb..c25858a 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -1955,10 +1955,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">ಸುರಕ್ಷಿತ ಪಾವತಿ ರುಜುವಾತಿಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುವ ಯಾವುದೇ ರುಜುವಾತು ಶೀಟ್ ಅನ್ನು ಮುಚ್ಚಲಾಗಿಲ್ಲ</translation>
 <translation id="6393956493820063117">ನಿರ್ವಾಹಕರ ನೀತಿಯು, <ph name="ORIGIN_NAME" /> ನಿಂದ ಈ ಸ್ಥಳಕ್ಕೆ ಪೇಸ್ಟ್ ಮಾಡುವುದನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ</translation>
+<translation id="6394852772105848029">ಈ ಸೈಟ್ <ph name="APP_NAME" /> ಆ್ಯಪ್ ತೆರೆಯಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="6398277657359595425">ಜೋರಾಗಿ ಅಳುವುದು</translation>
 <translation id="6398765197997659313">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="6401136357288658127">ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ತಡೆಹಿಡಿಯಲಾಗಿದೆ. ಇದರ ಬದಲಿಗೆ, ನೀವು <ph name="NEW_POLICY" /> ಕಾರ್ಯನೀತಿಯನ್ನು ಬಳಸಬೇಕು.</translation>
 <translation id="6404511346730675251">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> ಗೆ ಮುಂದುವರಿಯಲು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> ಗೆ ಮುಕ್ತಾಯ ದಿನಾಂಕ ಮತ್ತು ಸಿವಿಸಿ ಅನ್ನು ನಮೂದಿಸಿ</translation>
 <translation id="6415778972515849510">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ಸಂರಕ್ಷಿಸಲು ಹಾಗೂ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, Chromium ನಿಮಗೆ ಸಹಾಯ ಮಾಡಬಲ್ಲದು.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 6272b86..c0b18db 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">일치하는 결제 사용자 인증 정보 시트가 없는 보안 결제 사용자 인증 정보 닫힘</translation>
 <translation id="6393956493820063117">관리자 정책에 의해 <ph name="ORIGIN_NAME" />에서 이 위치로 붙여넣는 작업이 차단되었습니다.</translation>
+<translation id="6394852772105848029">이 사이트에서 <ph name="APP_NAME" /> 앱을 열려고 합니다.</translation>
 <translation id="6398277657359595425">엉엉 울기</translation>
 <translation id="6398765197997659313">전체화면 닫기</translation>
 <translation id="6401136357288658127">지원 중단된 정책입니다. <ph name="NEW_POLICY" /> 정책을 대신 사용해야 합니다.</translation>
 <translation id="6404511346730675251">북마크 수정</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> 앱으로 이동</translation>
 <translation id="6406765186087300643">C0(봉투)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" />의 만료일과 CVC를 입력하세요.</translation>
 <translation id="6415778972515849510">Chromium을 통해 Google 계정을 보호하고 비밀번호를 변경할 수 있습니다.</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 476419d..d818ab0 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Эскиздер</translation>
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="3229041911291329567">Түзмөгүңүздүн жана серепчиңиздин версиясы тууралуу маалымат</translation>
+<translation id="3229277193950731405">Версиянын сабын көчүрүү</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" /> карточкаңыз үчүн CVC кодун киргизиңиз</translation>
 <translation id="3234666976984236645">Бул сайттагы маанилүү мазмун ар дайым аныкталсын</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, серепчинин көрүнүшүн ыңгайлаштыруу үчүн Tab, андан кийин Enter баскычын басыңыз</translation>
@@ -1959,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Коопсуз төлөө үчүн дал келбеген эсептик дайындар барагы жабылды</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> cайтынан бул жерге чаптоо аракети администратордун саясатына ылайык бөгөттөлгөн</translation>
+<translation id="6394852772105848029">Бул сайт <ph name="APP_NAME" /> колдонмосун ачканы жатат</translation>
 <translation id="6398277657359595425">Боздогон</translation>
 <translation id="6398765197997659313">Толук экран режиминен чыгуу</translation>
 <translation id="6401136357288658127">Бул саясат жоюлган. Анын ордуна <ph name="NEW_POLICY" /> саясатын колдонуңуз.</translation>
 <translation id="6404511346730675251">Кыстарманы түзөтүү</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> колдонмосуна өтөсүзбү?</translation>
 <translation id="6406765186087300643">C0 (Конверт)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> карточкасынын мөөнөтү аяктоочу күнүн жана CVC кодун киргизиңиз</translation>
 <translation id="6415778972515849510">Chromium Google аккаунтуңуздун коопсуздугун коргоп, сырсөзүңүздү өзгөртүүгө жардам берет.</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 545e0f8b..a0b0824 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">ປິດຊີດຂໍ້ມູນການເຂົ້າສູ່ລະບົບການຈ່າຍເງິນທີ່ປອດໄພທີ່ບໍ່ມີຂໍ້ມູນການເຂົ້າສູ່ລະບົບທີ່ກົງກັນແລ້ວ</translation>
 <translation id="6393956493820063117">ນະໂຍບາຍຂອງຜູ້ເບິ່ງແຍງລະບົບບລັອກການວາງຈາກ <ph name="ORIGIN_NAME" /> ໃສ່ຕຳແໜ່ງນີ້ໄວ້</translation>
+<translation id="6394852772105848029">ເວັບໄຊນີ້ຕ້ອງການເປີດແອັບ <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">ຮ້ອງໄຫ້ດັງໆ</translation>
 <translation id="6398765197997659313">ອອກຈາກເຕັມໜ້າຈໍ</translation>
 <translation id="6401136357288658127">ເຊົາຮອງຮັບນະໂຍບາຍນີ້ແລ້ວ. ທ່ານຄວນໃຊ້ນະໂຍບາຍ <ph name="NEW_POLICY" /> ນີ້ແທນ.</translation>
 <translation id="6404511346730675251">ແກ້​ໄຂບຸກມາກສ໌</translation>
+<translation id="6405181733356710802">ສືບຕໍ່ຫາ <ph name="APP_NAME" /> ບໍ?</translation>
 <translation id="6406765186087300643">C0 (ຊອງຈົດໝາຍ)</translation>
 <translation id="6410264514553301377">ປ້ອນວັນທີໝົດອາຍຸ ແລະ CVC ສຳລັບ <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium ສາມາດຊ່ວຍທ່ານປົກປ້ອງບັນຊີ Google ຂອງທ່ານ ແລະ ປ່ຽນລະຫັດຜ່າຂອງທ່ານໄດ້.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 56b542b..a2d7260 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -1961,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Saugaus mokėjimo prisijungimo duomenų lapas, informuojantis, kad atitinkančių prisijungimo duomenų nerasta, uždarytas</translation>
 <translation id="6393956493820063117">Pagal administratoriaus politiką galimybė įklijuoti iš <ph name="ORIGIN_NAME" /> į šią vietą blokuojama</translation>
+<translation id="6394852772105848029">Ši svetainė nori atidaryti programą „<ph name="APP_NAME" />“</translation>
 <translation id="6398277657359595425">Garsiai verkiantis</translation>
 <translation id="6398765197997659313">Išeiti iš viso ekrano režimo</translation>
 <translation id="6401136357288658127">Ši politika nebenaudojama. Vietoj jos turėtumėte naudoti politiką „<ph name="NEW_POLICY" />“.</translation>
 <translation id="6404511346730675251">Redaguoti žymę</translation>
+<translation id="6405181733356710802">Eiti toliau į „<ph name="APP_NAME" />“?</translation>
 <translation id="6406765186087300643">C0 (vokas)</translation>
 <translation id="6410264514553301377">įveskite „<ph name="CREDIT_CARD" />“ galiojimo pabaigos datą ir kortelės saugos kodą (CVC)</translation>
 <translation id="6415778972515849510">„Chromium“ gali padėti apsaugoti „Google“ paskyrą ir pakeisti slaptažodį.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 852446b..1f382e30 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Ir aizvērta lapa ar akreditācijas datiem, kas neatbilst drošu maksājumu akreditācijas datiem</translation>
 <translation id="6393956493820063117">Saskaņā ar administratora iestatīto politiku ielīmēšana no <ph name="ORIGIN_NAME" /> ir bloķēta šajā atrašanās vietā.</translation>
+<translation id="6394852772105848029">Šī vietne vēlas atvērt lietotni <ph name="APP_NAME" />.</translation>
 <translation id="6398277657359595425">Skaļa raudāšana</translation>
 <translation id="6398765197997659313">Iziet no pilnekrāna režīma</translation>
 <translation id="6401136357288658127">Šī politika ir novecojusi. Tās vietā jums vajadzētu izmantot <ph name="NEW_POLICY" /> politiku.</translation>
 <translation id="6404511346730675251">Rediģēt grāmatzīmi</translation>
+<translation id="6405181733356710802">Vai pāriet uz lietotni <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (aploksne)</translation>
 <translation id="6410264514553301377">Ievadiet kredītkartes <ph name="CREDIT_CARD" /> derīguma termiņu un CVC.</translation>
 <translation id="6415778972515849510">Chromium var palīdzēt jums aizsargāt jūsu Google kontu un nomainīt paroli.</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index 6ccbbb8..3b506fd4 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Сликички</translation>
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="3229041911291329567">Информации за верзијата за уредот и прелистувачот</translation>
+<translation id="3229277193950731405">Копирај ја низата на верзијата</translation>
 <translation id="323107829343500871">Внесете го CVC за <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Секогаш откривај важна содржина на оваа локација</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, притиснете Tab, а потоа Enter за да го приспособите изгледот на прелистувачот</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Листот што означува дека нема акредитив што се совпаѓа за акредитивот за безбедно плаќање е затворен</translation>
 <translation id="6393956493820063117">Лепењето од <ph name="ORIGIN_NAME" /> на локацијава е блокирано со правило на администраторот</translation>
+<translation id="6394852772105848029">Сајтов сака да ја отвори апликацијата <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Гласно плачење</translation>
 <translation id="6398765197997659313">Излези од цел екран</translation>
 <translation id="6401136357288658127">Правилово е неподдржано. Наместо него, треба да го користите правилото <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Измени обележувач</translation>
+<translation id="6405181733356710802">Сакате да продолжите кон <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (плик)</translation>
 <translation id="6410264514553301377">Внесете ги датумот на истекување и CVC за <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium може да ви помогне да ја заштитите сметката на Google и да ја промените лозинката.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 31e1729..81d2ffb 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">എഞ്ചിനീയറിംഗ്-E</translation>
 <translation id="6391700400718590966">സുരക്ഷിതമായ പേയ്‌മെന്റ് ക്രെഡൻഷ്യലുമായി പൊരുത്തമില്ലാത്ത ക്രെഡൻഷ്യൽ ഷീറ്റ് അടച്ചു</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> -ൽ നിന്ന് ഈ ലൊക്കേഷനിൽ ഒട്ടിക്കുന്നത് നിങ്ങളുടെ അഡ്‌മിൻ നയം ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു</translation>
+<translation id="6394852772105848029">ഈ സൈറ്റിന് <ph name="APP_NAME" /> ആപ്പ് തുറക്കണമെന്നുണ്ട്</translation>
 <translation id="6398277657359595425">ഉച്ചത്തിൽ കരയൽ</translation>
 <translation id="6398765197997659313">പൂര്‍ണ്ണ സ്ക്രീനില്‍ നിന്ന് പുറത്തുകടക്കുക</translation>
 <translation id="6401136357288658127">ഈ നയം അവസാനിപ്പിച്ചു. പകരം <ph name="NEW_POLICY" /> നയം ഉപയോഗിക്കണം.</translation>
 <translation id="6404511346730675251">ബുക്ക്‌മാർക്ക് എഡിറ്റ് ചെയ്യുക</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> എന്നതിലേക്ക് പോകണോ?</translation>
 <translation id="6406765186087300643">C0 (എൻവലപ്പ്)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" />-ന്‍റെ കാലാവധി തീരുന്ന തീയതിയും CVC-യും നൽകുക</translation>
 <translation id="6415778972515849510">നിങ്ങളുടെ Google അക്കൗണ്ട് പരിരക്ഷിക്കാനും പാസ്‌വേഡ് മാറ്റാനും Chromium സഹായിക്കും.</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 1d2554ce..2d774e9 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -832,6 +832,7 @@
 <translation id="3226387218769101247">Өнгөц зураг</translation>
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="3229041911291329567">Таны төхөөрөмж болон хөтчийн хувилбарын талаарх мэдээлэл</translation>
+<translation id="3229277193950731405">Хувилбарын мөрийг хуулах</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" />-н карт баталгаажуулалтын кодыг оруулна уу</translation>
 <translation id="3234666976984236645">Чухал агуулга бүхий мэдээллийг үргэлж илрүүлэх</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Хөтчийнхөө харагдах байдлыг өөрчлөхийн тулд tab, дараа нь Enter дээр дарна уу</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Инженерчлэл-E</translation>
 <translation id="6391700400718590966">Тохирох мандат үнэмлэхгүй аюулгүй төлбөрийн мандат үнэмлэхийн хүснэгтийг хаасан</translation>
 <translation id="6393956493820063117">Администраторын бодлогын дагуу <ph name="ORIGIN_NAME" />-с энэ байршил руу буулгахыг блоклосон</translation>
+<translation id="6394852772105848029">Энэ сайт <ph name="APP_NAME" /> аппыг нээхийг хүсэж байна</translation>
 <translation id="6398277657359595425">Чангаар уйлж буй</translation>
 <translation id="6398765197997659313">Дэлгэц дүүрэн харах горимоос гарах</translation>
 <translation id="6401136357288658127">Энэ удирдамжийг зогсоосон байна. Та оронд нь <ph name="NEW_POLICY" /> удирдамжийг ашиглавал зохино.</translation>
 <translation id="6404511346730675251">Хадгалагдсан хуудсыг засах</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> руу үргэлжлүүлэх үү?</translation>
 <translation id="6406765186087300643">C0 (Дугтуй)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" />-н дуусах огноо, карт баталгаажуулалтын кодыг оруулна уу</translation>
 <translation id="6415778972515849510">Chromium танд Google Бүртгэлээ хамгаалах болон нууц үгээ солиход туслах боломжтой.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index e26d6c5..e79a062 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">सुरक्षित पेमेंट क्रेडेंशियल याची जुळणारे कोणतेही क्रेडेंशियल नाही ही शीट बंद केली आहे</translation>
 <translation id="6393956493820063117">अ‍ॅडमिनिस्ट्रेटर धोरणाद्वारे <ph name="ORIGIN_NAME" /> वरून या स्थानावर पेस्ट करणे ब्लॉक केले आहे</translation>
+<translation id="6394852772105848029">या साइटला <ph name="APP_NAME" /> हे ॲप उघडायचे आहे</translation>
 <translation id="6398277657359595425">मोठ्याने रडणे</translation>
 <translation id="6398765197997659313">पूर्ण स्क्रीनमधून निर्गमन करा</translation>
 <translation id="6401136357288658127">हे धोरण कालबाह्य झाले आहे. तुम्ही त्याऐवजी <ph name="NEW_POLICY" /> धोरण वापरले पाहिजे.</translation>
 <translation id="6404511346730675251">बुकमार्क संपादित करा</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> वर पुढे सुरू ठेवायचे आहे का?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> साठी कालबाह्यता तारीख आणि CVC प्रविष्‍ट करा</translation>
 <translation id="6415778972515849510">तुमच्या Google खात्याचे संरक्षण करण्यात आणि तुमचा पासवर्ड बदलण्यात Chromium तुम्हाला मदत करू शकते.</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 5cd6979..879f6b0 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -1961,10 +1961,12 @@
 <translation id="6390662030813198813">Kejuruteraan-E</translation>
 <translation id="6391700400718590966">Bukti kelayakan pembayaran selamat tiada helaian bukti kelayakan yang sepadan ditutup</translation>
 <translation id="6393956493820063117">Penampalan daripada <ph name="ORIGIN_NAME" /> pada lokasi ini disekat oleh dasar pentadbir</translation>
+<translation id="6394852772105848029">Laman ini mahu membuka apl <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Meraung</translation>
 <translation id="6398765197997659313">Keluar daripada skrin penuh</translation>
 <translation id="6401136357288658127">Dasar ini telah ditamatkan. Anda harus menggunakan dasar <ph name="NEW_POLICY" /> sebagai ganti.</translation>
 <translation id="6404511346730675251">Edit penanda halaman</translation>
+<translation id="6405181733356710802">Teruskan ke <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Sampul Surat)</translation>
 <translation id="6410264514553301377">Masukkan tarikh tamat tempoh dan CVC untuk <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium boleh membantu anda melindungi Akaun Google anda dan menukar kata laluan anda.</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index e2bbd3c1..35d4edac 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -833,6 +833,7 @@
 <translation id="3226387218769101247">ပုံသေးများ</translation>
 <translation id="3227137524299004712">မိုက်ခရိုဖုန်း</translation>
 <translation id="3229041911291329567">သင့်စက်နှင့် ဘရောင်ဇာအကြောင်း ဗားရှင်းအချက်အလက်</translation>
+<translation id="3229277193950731405">ဗားရှင်းစာကြောင်း မိတ္တူကူးရန်</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" /> အတွက် CVC ကို ထည့်ပါ</translation>
 <translation id="3234666976984236645">ဤအင်တာနက်စာမျက်နှာ‌ပေါ်တွင် အရေးကြီး‌သော မာတိကာများကို အစဉ် ထောက်လှမ်းပါ</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />၊ တဘ်နှိပ်ပြီးနောက် Enter နှိပ်၍ ဘရောင်ဇာ၏အသွင်ကို စိတ်ကြိုက်ပြင်ပါ</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">ကိုက်ညီမှုရှိသည့် လုံခြုံသောပေးချေမှုအထောက်အထားဆိုင်ရာ စာရွက်မပိတ်ထားပါ</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> မှ ဤနေရာသို့ ကူးထည့်ခြင်းကို စီမံခန့်ခွဲသူမူဝါဒက ပိတ်ထားသည်</translation>
+<translation id="6394852772105848029">ဤဝဘ်ဆိုက်က <ph name="APP_NAME" /> အက်ပ်ကို ဖွင့်လိုသည်</translation>
 <translation id="6398277657359595425">ကျယ်လောင်စွာ ငိုကြွေးခြင်း</translation>
 <translation id="6398765197997659313">မျက်နှာပြင် အပြည့်မှ ထွက်ရန်</translation>
 <translation id="6401136357288658127">ဤမူဝါဒကို ဆက်မသုံးတော့ပါ။ ၎င်းအစား <ph name="NEW_POLICY" /> မူဝါဒကို အသုံးပြုရပါမည်။</translation>
 <translation id="6404511346730675251">စာညှပ် တည်းဖြတ်ရန်</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> သို့ ရှေ့ဆက်မလား။</translation>
 <translation id="6406765186087300643">C0 (စာအိတ်)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> အတွက် ကုန်ဆုံးရက်နှင့် CVC ကို ထည့်ပါ</translation>
 <translation id="6415778972515849510">Chromium က သင်၏ Google အကောင့်ကို ကာကွယ်ရန်နှင့် စကားဝှက်ပြောင်းရန် ကူညီနိုင်ပါသည်။</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 96fda51..0ec4b89 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1957,10 +1957,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">क्रिडेन्सियल सिटसँग नमिल्ने सुरक्षित भुक्तानी क्रिडेन्सियल बन्द गरियो</translation>
 <translation id="6393956493820063117">एड्मिनले <ph name="ORIGIN_NAME" /> बाट कपी गरी यो स्थानमा पेस्ट गर्न रोक लगाउनुभएको छ</translation>
+<translation id="6394852772105848029">यो साइटले <ph name="APP_NAME" /> एप खोल्न चाहन्छ</translation>
 <translation id="6398277657359595425">चर्को स्वर निकालेर रोइरहेको</translation>
 <translation id="6398765197997659313">पूर्ण स्क्रिनलाई हटाउनुहोस्</translation>
 <translation id="6401136357288658127">यो नीति चल्तीबाट हटाइएको छ। तपाईंले यसको साटो <ph name="NEW_POLICY" /> नीति प्रयोग गर्नु पर्छ।</translation>
 <translation id="6404511346730675251">बुकमार्क सम्पादन गर्नुहोस्</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> मा जारी राख्ने हो?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> को म्याद सकिने मिति र CVC प्रविष्टि गर्नुहोस्</translation>
 <translation id="6415778972515849510">Chromium ले तपाईंलाई आफ्नो Google खाता सुरक्षित गर्न र पासवर्ड बदल्न मद्दत गर्न सक्छ।</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 136896d..c09ddde 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -1954,10 +1954,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Pagina gesloten waarop staat dat er geen overeenkomende inloggegevens zijn voor beveiligde betaling</translation>
 <translation id="6393956493820063117">Plakken van <ph name="ORIGIN_NAME" /> naar deze locatie is geblokkeerd op basis van beheerdersbeleid</translation>
+<translation id="6394852772105848029">Deze site wil de <ph name="APP_NAME" />-app openen</translation>
 <translation id="6398277657359595425">Hard huilend</translation>
 <translation id="6398765197997659313">Volledig scherm sluiten</translation>
 <translation id="6401136357288658127">Dit beleid is beëindigd. Gebruik in plaats daarvan dit beleid: <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Bookmark bewerken</translation>
+<translation id="6405181733356710802">Doorgaan naar <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (envelop)</translation>
 <translation id="6410264514553301377">Geef de vervaldatum en CVC-code op voor <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium kan je helpen je Google-account te beschermen en je wachtwoord te wijzigen.</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index bcf0c1b..48b8c284 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Miniatyrbilder</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="3229041911291329567">Versjonsinformasjon om enheten og nettleseren din</translation>
+<translation id="3229277193950731405">Kopier versjonsstrengen</translation>
 <translation id="323107829343500871">Skriv inn verifiseringskoden for <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Oppdag alltid viktig innhold på dette nettstedet</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" /> – trykk på Tab og deretter på Enter for å tilpasse nettleserens utseende</translation>
@@ -931,6 +932,7 @@
 <translation id="3477679029130949506">Kino- og teaterprogram</translation>
 <translation id="3479552764303398839">Ikke nå</translation>
 <translation id="3484560055331845446">Du kan miste tilgangen til Google-kontoen din. Chrome anbefaler at du endrer passordet ditt nå. Du blir bedt om å logge på.</translation>
+<translation id="3484861421501147767">Påminnelse: En lagret kampanjekode er tilgjengelig</translation>
 <translation id="3487845404393360112">Skuff 4</translation>
 <translation id="3495081129428749620">Finn på siden
     <ph name="PAGE_TITLE" /></translation>
@@ -1959,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Ark for sikker betalingslegitimasjon uten samsvarende legitimasjon er lukket</translation>
 <translation id="6393956493820063117">Innliming fra <ph name="ORIGIN_NAME" /> på denne plasseringen er blokkert av en administratorregel</translation>
+<translation id="6394852772105848029">Dette nettstedet vil åpne <ph name="APP_NAME" />-appen</translation>
 <translation id="6398277657359595425">Strigråtende</translation>
 <translation id="6398765197997659313">Avslutt fullskjerm</translation>
 <translation id="6401136357288658127">Denne regelen er avviklet. Du bør bruke den nye regelen <ph name="NEW_POLICY" /> i stedet.</translation>
 <translation id="6404511346730675251">Rediger bokmerket</translation>
+<translation id="6405181733356710802">Vil du fortsette til <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (konvolutt)</translation>
 <translation id="6410264514553301377">Skriv inn utløpsdatoen og verifiseringskoden for <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium kan hjelpe deg med å beskytte Google-kontoen din og endre passordet ditt.</translation>
@@ -2209,6 +2213,7 @@
             <ph name="LIST_ITEM" />Informasjon du har lagt inn i skjemaer<ph name="END_LIST_ITEM" />
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Kan ikke sende til denne adressen. Velg en annen adresse.</translation>
+<translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
 <translation id="7132939140423847331">Administratoren din har forbudt kopiering av disse dataene.</translation>
 <translation id="7135130955892390533">Vis statusen</translation>
 <translation id="7138472120740807366">Leveringsmetode</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index 1934f8a..c5a66cc 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -1957,10 +1957,12 @@
 <translation id="6390662030813198813">ଇଞ୍ଜିନିୟରିଂ-E</translation>
 <translation id="6391700400718590966">ସୁରକ୍ଷିତ ପେମେଣ୍ଟ କ୍ରେଡେନସିଆଲ୍ ସହ ମେଳ ହେଉଥିବା କୌଣସି କ୍ରେଡେନସିଆଲ୍ ସିଟ୍ ବନ୍ଦ କରାଯାଇନାହିଁ</translation>
 <translation id="6393956493820063117">ଆଡମିନିଷ୍ଟ୍ରେଟର୍ ନୀତି ଦ୍ୱାରା <ph name="ORIGIN_NAME" />ରୁ ଏହି ଲୋକେସନକୁ ପେଷ୍ଟ କରିବା ବ୍ଲକ୍ କରାଯାଇଛି</translation>
+<translation id="6394852772105848029">ଏହି ସାଇଟ <ph name="APP_NAME" /> ଆପକୁ ଖୋଲିବା ପାଇଁ ଚାହୁଁଛି</translation>
 <translation id="6398277657359595425">ଜୋରରେ କାନ୍ଦିବା</translation>
 <translation id="6398765197997659313">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରୁ ପ୍ରସ୍ଥାନ କରନ୍ତୁ</translation>
 <translation id="6401136357288658127">ଏହି ନୀତିକୁ ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି। ଏହା ପରିବର୍ତ୍ତେ ଆପଣ <ph name="NEW_POLICY" /> ନୀତି ବ୍ୟବହାର କରିବା ଉଚିତ।</translation>
 <translation id="6404511346730675251">ବୁକ୍‍ମାର୍କ ଏଡିଟ୍ କରନ୍ତୁ</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" />ରେ ଜାରି ରଖିବେ?</translation>
 <translation id="6406765186087300643">C0 (ଏନଭଲପ୍)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> ପାଇଁ ମିଆଦ ଶେଷ ହେଉଥିବା ତାରିଖ ଏବଂ CVC ଲେଖନ୍ତୁ</translation>
 <translation id="6415778972515849510">Chromium ଆପଣଙ୍କୁ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟକୁ ସୁରକ୍ଷିତ ରଖିବା ଏବଂ ଆପଣଙ୍କର ପାସ୍‍ୱାର୍ଡ ବଦଳାଇବାରେ ସାହାଯ୍ୟ କରିପାରିବ।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index 8ee9f7e6..7fe0dad 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -1956,10 +1956,12 @@
 <translation id="6390662030813198813">ਇੰਜੀਨੀਅਰਿੰਗ-E</translation>
 <translation id="6391700400718590966">ਭਗਤਾਨ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਬਣਾਓ ਕੋਈ ਮੇਲ ਖਾਂਦੇ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਸੰਬੰਧੀ ਸ਼ੀਟ ਬੰਦ ਨਹੀਂ ਹੈ</translation>
 <translation id="6393956493820063117">ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਵੱਲੋਂ <ph name="ORIGIN_NAME" /> ਤੋਂ ਇਸ ਟਿਕਾਣੇ 'ਤੇ ਪੇਸਟ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ</translation>
+<translation id="6394852772105848029">ਇਹ ਸਾਈਟ <ph name="APP_NAME" /> ਐਪ ਨੂੰ ਖੋਲ੍ਹਣਾ ਚਾਹੁੰਦੀ ਹੈ</translation>
 <translation id="6398277657359595425">ਉੱਚੀ-ਉੱਚੀ ਰੋਣਾ</translation>
 <translation id="6398765197997659313">ਪੂਰੀ ਸਕ੍ਰੀਨ ਤੋਂ ਬਾਹਰ ਜਾਓ</translation>
 <translation id="6401136357288658127">ਇਹ ਨੀਤੀ ਨਾਪਸੰਦ ਕੀਤੀ ਗਈ। ਤੁਹਾਨੂੰ ਇਸਦੀ ਬਜਾਏ <ph name="NEW_POLICY" /> ਨੀਤੀ ਵਰਤਣੀ ਚਾਹੀਦੀ ਹੈ।</translation>
 <translation id="6404511346730675251">ਬੁੱਕਮਾਰਕ ਸੰਪਾਦਿਤ ਕਰੋ</translation>
+<translation id="6405181733356710802">ਕੀ <ph name="APP_NAME" /> 'ਤੇ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?</translation>
 <translation id="6406765186087300643">C0 (ਲਿਫ਼ਾਫ਼ਾ)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> ਲਈ ਮਿਆਦ ਸਮਾਪਤੀ ਦੀ ਤਾਰੀਖ ਅਤੇ CVC ਦਾਖਲ ਕਰੋ</translation>
 <translation id="6415778972515849510">Chromium ਤੁਹਾਡੇ Google ਖਾਤੇ ਦੀ ਸੁਰੱਖਿਆ ਕਰਨ ਅਤੇ ਪਾਸਵਰਡ ਬਦਲਣ ਵਿੱਚ ਤੁਹਾਡੀ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index a7dc789bc..83d82f9 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Arkusz dotyczący braku pasujących danych uwierzytelniających na potrzeby bezpiecznych płatności jest zamknięty</translation>
 <translation id="6393956493820063117">Zasady administratora uniemożliwiają wklejanie tu informacji z <ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Ta strona chce otworzyć aplikację <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Głośny płacz</translation>
 <translation id="6398765197997659313">Zamknij pełny ekran</translation>
 <translation id="6401136357288658127">Ta zasada została wycofana. Zalecamy używanie zasady <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Edytuj zakładkę</translation>
+<translation id="6405181733356710802">Otworzyć aplikację <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (koperta)</translation>
 <translation id="6410264514553301377">Wpisz datę ważności i kod CVC karty <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium może Ci pomóc w zabezpieczeniu Twojego konta Google i zmianie hasła.</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 7a9a684..2d6c6e7 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering E</translation>
 <translation id="6391700400718590966">A página de credenciais para pagamento seguro sem correspondência está fechada</translation>
 <translation id="6393956493820063117">A política do administrador bloqueou a opção de colar conteúdo de <ph name="ORIGIN_NAME" /> neste local</translation>
+<translation id="6394852772105848029">Este site quer abrir o app <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Chorando muito</translation>
 <translation id="6398765197997659313">Sair do modo tela cheia</translation>
 <translation id="6401136357288658127">Essa política está obsoleta. Use a política <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Editar favorito</translation>
+<translation id="6405181733356710802">Ir para <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Digite a data de validade e o CVC do <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">No Chromium, você pode receber ajuda para proteger sua Conta do Google e alterar sua senha.</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 9577fef..faf99a3 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Miniaturas</translation>
 <translation id="3227137524299004712">Microfone</translation>
 <translation id="3229041911291329567">Informações da versão do dispositivo e do navegador.</translation>
+<translation id="3229277193950731405">Copiar string da versão</translation>
 <translation id="323107829343500871">Introduzir o Código de Segurança/CVC de <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Detetar sempre conteúdo importante neste site</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, prima Tab e, em seguida, Enter para personalizar o aspeto do seu navegador</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">A página de credenciais de pagamento seguro sem correspondência com as credenciais está fechada</translation>
 <translation id="6393956493820063117">A ação de colar a partir de <ph name="ORIGIN_NAME" /> nesta localização está bloqueada por uma política do administrador.</translation>
+<translation id="6394852772105848029">Este site quer abrir a app <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Choro alto</translation>
 <translation id="6398765197997659313">Sair do modo de ecrã inteiro</translation>
 <translation id="6401136357288658127">Esta política foi descontinuada. Deverá optar por utilizar a política <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
+<translation id="6405181733356710802">Continuar para <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Introduza a data de validade e o Código de Segurança/CVC de <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">O Chromium pode ajudá-lo a proteger a sua Conta Google e alterar a palavra-passe.</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index c6e681a..ca6c5313 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Foaia „Datele de conectare pentru plăți securizate nu corespund datelor de conectare” este închisă</translation>
 <translation id="6393956493820063117">Inserarea de pe <ph name="ORIGIN_NAME" /> în această locație a fost blocată de politica implementată de administrator</translation>
+<translation id="6394852772105848029">Site-ul dorește să deschidă aplicația <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Plâns zgomotos</translation>
 <translation id="6398765197997659313">Ieși din ecranul complet</translation>
 <translation id="6401136357288658127">Această politică este învechită. Ar trebui să folosești politica <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Modifică marcajul</translation>
+<translation id="6405181733356710802">Accesezi <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Plic)</translation>
 <translation id="6410264514553301377">Introdu data de expirare și codul CVC pentru <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium te poate ajuta să îți protejezi Contul Google și să îți schimbi parola.</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 494b5d4..fb1db097 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Экран несоответствия учетных данных для защищенных платежей закрыт</translation>
 <translation id="6393956493820063117">Администратор запретил вставлять сюда контент со страницы <ph name="ORIGIN_NAME" />.</translation>
+<translation id="6394852772105848029">Этот сайт пытается открыть приложение "<ph name="APP_NAME" />".</translation>
 <translation id="6398277657359595425">Рыдание</translation>
 <translation id="6398765197997659313">Обычный режим</translation>
 <translation id="6401136357288658127">Правило устарело. Используйте <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Изменить закладку</translation>
+<translation id="6405181733356710802">Открыть приложение "<ph name="APP_NAME" />"?</translation>
 <translation id="6406765186087300643">C0 (конверт)</translation>
 <translation id="6410264514553301377">Введите срок действия и CVC-код карты <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Защитите свой аккаунт Google и смените пароль с помощью Chromium.</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index ee940230..ed8790c 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">සුරක්ෂිත ගෙවීම් අක්තපත්‍ර ගැළපෙන අක්තපත්‍ර පත්‍රය වසා නැත</translation>
 <translation id="6393956493820063117">පරිපාලක ප්‍රතිපත්තිය මගින් මෙම ස්ථානයට <ph name="ORIGIN_NAME" /> වෙතින් ඇලවීම අවහිර කර ඇත</translation>
+<translation id="6394852772105848029">මෙම අඩවියට <ph name="APP_NAME" /> යෙදුම විවෘත කිරීමට අවශ්‍ය වේ</translation>
 <translation id="6398277657359595425">කෑගසා හැඬීම</translation>
 <translation id="6398765197997659313">සම්පුර්ණ තිරයෙන් ඉවත් වන්න</translation>
 <translation id="6401136357288658127">මෙම ප්‍රතිපත්තිය අත්හරින ලදි. ඒ වෙනුවට ඔබ <ph name="NEW_POLICY" /> ප්‍රතිපත්තිය භාවිත කළ යුතු ය.</translation>
 <translation id="6404511346730675251">පිටු සලකුණ සංස්කරණය කරන්න</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> හි ඉදිරියට යන්නද?</translation>
 <translation id="6406765186087300643">C0 (ලියුම් කවරය)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> සඳහා කල් ඉකුත් වීමේ දිනය සහ CVC ඇතුළු කරන්න</translation>
 <translation id="6415778972515849510">Chromium ඔබට ඔබේ Google ගිණුම ආරක්‍ෂා කිරීමටත් ඔබේ මුරපදය වෙනස් කිරීමටත් ඔබට උදවු කළ හැක.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 6d4cb39..39afc8a 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -828,6 +828,7 @@
 <translation id="3226387218769101247">Miniatúry</translation>
 <translation id="3227137524299004712">Mikrofón</translation>
 <translation id="3229041911291329567">Informácie o verzii vášho zariadenia a prehliadača</translation>
+<translation id="3229277193950731405">Kopírovať reťazec verzie</translation>
 <translation id="323107829343500871">Zadajte kód CVC karty <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Vždy na tomto webe zisťovať dôležitý obsah</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, postupným stlačením klávesov Tab a Enter si prispôsobte vzhľad prehliadača</translation>
@@ -1955,10 +1956,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Hárok s nezodpovedajúcim poverením pre prihlasovací údaj zabezpečenej platby je zavretý</translation>
 <translation id="6393956493820063117">Prilepenie zo zdroja <ph name="ORIGIN_NAME" /> na toto miesto je blokované pravidlami správcu</translation>
+<translation id="6394852772105848029">Tento web chce otvoriť aplikáciu <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Nahlas plačúca tvár</translation>
 <translation id="6398765197997659313">Ukončiť zobrazenie na celú obrazovku</translation>
 <translation id="6401136357288658127">Podpora tohto pravidla bola ukončená. Namiesto neho použite pravidlo <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Upraviť záložku</translation>
+<translation id="6405181733356710802">Chcete pokračovať do aplikácie <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (obálka)</translation>
 <translation id="6410264514553301377">Zadajte dátum vypršania platnosti a kód CVC karty <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium vám pomôže ochrániť účet Google a zmeniť heslo.</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index c81dfe4..c6e00cedb 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Sličice</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="3229041911291329567">Podatki o različici za napravo in brskalnik</translation>
+<translation id="3229277193950731405">Kopiraj niz različice</translation>
 <translation id="323107829343500871">Vnesite CVC za <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Vedno zaznaj pomembno vsebino na tem spletnem mestu</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite tabulatorko, nato Enter, če želite prilagoditi videz brskalnika.</translation>
@@ -1960,10 +1961,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Preglednica za neujemanje poverilnic poverilnice za varno plačilo je zaprta</translation>
 <translation id="6393956493820063117">Lepljenje iz vira <ph name="ORIGIN_NAME" /> na to mesto je blokiral pravilnik skrbnika.</translation>
+<translation id="6394852772105848029">To spletno mesto želi odpreti aplikacijo <ph name="APP_NAME" />.</translation>
 <translation id="6398277657359595425">Točenje solz</translation>
 <translation id="6398765197997659313">Izhod iz celozaslonskega načina</translation>
 <translation id="6401136357288658127">Ta pravilnik je zastarel. Uporabite pravilnik <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Uredi zaznamek</translation>
+<translation id="6405181733356710802">Želite nadaljevati v aplikacijo <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Vnesite datum poteka veljavnosti in kodo CVC za kartico <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium vam lahko pomaga zaščititi račun za Google in spremeniti geslo.</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 58db1b0..cead389 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Kredenciali i pagesës së sigurt pa fletë përkatëse kredenciali është i mbyllur</translation>
 <translation id="6393956493820063117">Ngjitja nga <ph name="ORIGIN_NAME" /> te kjo vendndodhje është bllokuar nga politika e administratorit</translation>
+<translation id="6394852772105848029">Ky sajt dëshiron të hapë aplikacionin "<ph name="APP_NAME" />"</translation>
 <translation id="6398277657359595425">Duke qarë me zë të lartë</translation>
 <translation id="6398765197997659313">Dil nga ekrani i plotë</translation>
 <translation id="6401136357288658127">Kjo politikë është e vjetruar. Duhet të përdorësh politikën <ph name="NEW_POLICY" /> më mirë.</translation>
 <translation id="6404511346730675251">Redakto faqeshënuesin</translation>
+<translation id="6405181733356710802">Do të vazhdosh te "<ph name="APP_NAME" />"?</translation>
 <translation id="6406765186087300643">C0 (Zarf)</translation>
 <translation id="6410264514553301377">Fut datën e skadimit dhe kodin CVC për <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium mund të të ndihmojë ta mbrosh "Llogarinë tënde të Google" dhe të ndryshosh fjalëkalimin tënd.</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 908454b..44f92a2 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Sličice</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="3229041911291329567">Informacije o verziji za uređaj i pregledač</translation>
+<translation id="3229277193950731405">Kopiraj string verzije</translation>
 <translation id="323107829343500871">Unesite CVC za karticu <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Uvek otkrivaj važan sadržaj na ovom sajtu</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, pa Enter da biste prilagodili izgled pregledača</translation>
@@ -1959,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Zatvoreno je obaveštenje da nema akreditiva koji se podudaraju za bezbedno plaćanje</translation>
 <translation id="6393956493820063117">Smernice za administratore blokiraju nalepljivanje sa <ph name="ORIGIN_NAME" /> na ovu lokaciju</translation>
+<translation id="6394852772105848029">Ovaj sajt želi da otvori aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Glasno plače</translation>
 <translation id="6398765197997659313">Izađi iz režima celog ekrana</translation>
 <translation id="6401136357288658127">Ove smernice su zastarele. Umesto njih treba da koristite nove smernice <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Izmena obeleživača</translation>
+<translation id="6405181733356710802">Želite li da nastavite na: <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (koverat)</translation>
 <translation id="6410264514553301377">Unesite datum isteka i CVC za karticu <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium može da vam pomogne da zaštitite Google nalog i promenite lozinku.</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index b5724beb..a9bae4a 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">Сличице</translation>
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="3229041911291329567">Информације о верзији за уређај и прегледач</translation>
+<translation id="3229277193950731405">Копирај стринг верзије</translation>
 <translation id="323107829343500871">Унесите CVC за картицу <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Увек откривај важан садржај на овом сајту</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, притисните Tab, па Enter да бисте прилагодили изглед прегледача</translation>
@@ -1959,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Затворено је обавештење да нема акредитива који се подударају за безбедно плаћање</translation>
 <translation id="6393956493820063117">Смернице за администраторе блокирају налепљивање са <ph name="ORIGIN_NAME" /> на ову локацију</translation>
+<translation id="6394852772105848029">Овај сајт жели да отвори апликацију <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Гласно плаче</translation>
 <translation id="6398765197997659313">Изађи из режима целог екрана</translation>
 <translation id="6401136357288658127">Ове смернице су застареле. Уместо њих треба да користите нове смернице <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Измена обележивача</translation>
+<translation id="6405181733356710802">Желите ли да наставите на: <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (коверат)</translation>
 <translation id="6410264514553301377">Унесите датум истека и CVC за картицу <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium може да вам помогне да заштитите Google налог и промените лозинку.</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index f4a8746..3e48562 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Arbetsblad för användaruppgifter för säker betalning utan överensstämmande användaruppgifter är stängt</translation>
 <translation id="6393956493820063117">Möjligheten att klistra in från <ph name="ORIGIN_NAME" /> här blockeras av administratörspolicyn</translation>
+<translation id="6394852772105848029">Webbplatsen vill öppna <ph name="APP_NAME" />-appen</translation>
 <translation id="6398277657359595425">Storgråter</translation>
 <translation id="6398765197997659313">Avsluta helskärmsläge</translation>
 <translation id="6401136357288658127">Den här principen är utfasad. Använd principen <ph name="NEW_POLICY" /> i stället.</translation>
 <translation id="6404511346730675251">Redigera bokmärke</translation>
+<translation id="6405181733356710802">Vill du fortsätta till <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (kuvert)</translation>
 <translation id="6410264514553301377">Ange utgångsdatum och CVC-kod för <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Du kan skydda Google-kontot genom att byta lösenord.</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 6daa8585..a6b9b2a2 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Laha ya 'hakuna kitambulisho kinacholingana' imefungwa</translation>
 <translation id="6393956493820063117">Sera ya msimamizi imezuia kubandika hapa kutoka <ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Tovuti hii inataka kufungua programu ya <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Kulia kwa Sauti</translation>
 <translation id="6398765197997659313">Ondoka kwenye Skrini nzima</translation>
 <translation id="6401136357288658127">Sera hii imeacha kuendesha huduma. Ni sharti utumie sera ya <ph name="NEW_POLICY" /> badala yake.</translation>
 <translation id="6404511346730675251">Badilisha alamisho</translation>
+<translation id="6405181733356710802">Ungependa kuendelea kwenye <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Bahasha)</translation>
 <translation id="6410264514553301377">Weka tarehe ya mwisho wa matumizi na CVC ya <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium inaweza kukusaidia kulinda Akaunti yako ya Google na kubadilisha nenosiri lako.</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index ee550d9f..3cfec94f 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -1955,10 +1955,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">பாதுகாப்பான பேமெண்ட் அனுமதிச் சான்றுகள் பொருந்தவில்லை என்பதற்கான தாள் மூடப்பட்டது</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> என்ற தளத்திலிருந்து நகலெடுத்து இங்கே ஒட்டுவது நிர்வாகக் கொள்கையின்படி தடுக்கப்பட்டுள்ளது</translation>
+<translation id="6394852772105848029">இந்தத் தளம் <ph name="APP_NAME" /> ஆப்ஸைத் திறக்கக் கோருகிறது</translation>
 <translation id="6398277657359595425">சத்தமாக அழும் ஈமோஜி</translation>
 <translation id="6398765197997659313">முழுத்திரையிலிருந்து வெளியேறு</translation>
 <translation id="6401136357288658127">இது நிறுத்தப்பட்ட கொள்கை. இதற்குப் பதிலாக <ph name="NEW_POLICY" /> கொள்கையைப் பயன்படுத்த வேண்டும்.</translation>
 <translation id="6404511346730675251">புக்மார்க்களைத் திருத்து</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> ஆப்ஸிற்குச் செல்லவா?</translation>
 <translation id="6406765186087300643">C0 (என்வலப்)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" />க்கான காலாவதித் தேதியையும் CVC எண்ணையும் உள்ளிடவும்</translation>
 <translation id="6415778972515849510">உங்கள் Google கணக்கைப் பாதுகாக்கவும் கடவுச்சொல்லை மாற்றவும் Chromium உதவும்.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index c1d2ca8..14d2526 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -833,6 +833,7 @@
 <translation id="3226387218769101247">థంబ్‌నెయిల్‌లు</translation>
 <translation id="3227137524299004712">మైక్రోఫోన్</translation>
 <translation id="3229041911291329567">మీ పరికరం, బ్రౌజర్‌ల వెర్షన్ సమాచారం</translation>
+<translation id="3229277193950731405">వెర్షన్ స్ట్రింగ్‌ను కాపీ చేయండి</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" /> కార్డ్ CVCని నమోదు చేయండి</translation>
 <translation id="3234666976984236645">ఈ సైట్‌లో ఎప్పుడూ ముఖ్యమైన కంటెంట్‌ను గుర్తించు</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, మీ బ్రౌజర్ రూపాన్ని అనుకూలంగా మార్చడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation>
@@ -1962,10 +1963,12 @@
 <translation id="6390662030813198813">ఇంజనీరింగ్-E</translation>
 <translation id="6391700400718590966">సురక్షితమైన పేమెంట్ ఆధారానికి సంబంధించిన మ్యాచ్ అయ్యే ఆధారాల షీట్ ఏదీ మూసివేయబడలేదు</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> నుండి ఈ లొకేషన్‌లో పేస్ట్ చేయడం అడ్మినిస్ట్రేటర్ పాలసీ ద్వారా బ్లాక్ చేయబడింది</translation>
+<translation id="6394852772105848029">ఈ సైట్ <ph name="APP_NAME" /> యాప్‌ను తెరవాలనుకుంటోంది</translation>
 <translation id="6398277657359595425">బిగ్గరగా ఏడవడం</translation>
 <translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
 <translation id="6401136357288658127">ఈ విధానం విస్మరించబడింది. దానికి బదులుగా, మీరు <ph name="NEW_POLICY" /> విధానాన్ని ఉపయోగించాలి.</translation>
 <translation id="6404511346730675251">బుక్‌మార్క్‌ను ఎడిట్ చేయండి</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" />‌కు కొనసాగించాలా?</translation>
 <translation id="6406765186087300643">C0 (ఎన్వలప్)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి</translation>
 <translation id="6415778972515849510">మీ Google ఖాతాను సంరక్షించుకోవడంలో, మీ పాస్‌వర్డ్‌ను మార్చడంలో Chromium మీకు సహాయపడగలదు.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index e85f782..28ddf664 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -831,6 +831,7 @@
 <translation id="3226387218769101247">ภาพขนาดย่อ</translation>
 <translation id="3227137524299004712">ไมโครโฟน</translation>
 <translation id="3229041911291329567">ข้อมูลเวอร์ชันเกี่ยวกับอุปกรณ์และเบราว์เซอร์</translation>
+<translation id="3229277193950731405">คัดลอกสตริงเวอร์ชัน</translation>
 <translation id="323107829343500871">ป้อน CVC สำหรับ <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">ตรวจหาเนื้อหาที่สำคัญบนไซต์นี้เสมอ</translation>
 <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" /> กด Tab ตามด้วย Enter เพื่อปรับแต่งรูปลักษณ์ของเบราว์เซอร์</translation>
@@ -1959,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">ระบบได้ปิด Bottom Sheet ซึ่งแจ้งว่าไม่พบข้อมูลเข้าสู่ระบบที่ตรงกันสำหรับข้อมูลเข้าสู่ระบบการชำระเงินที่ปลอดภัย</translation>
 <translation id="6393956493820063117">นโยบายของผู้ดูแลระบบบล็อกการวางจาก <ph name="ORIGIN_NAME" /> ลงในตำแหน่งนี้ไว้</translation>
+<translation id="6394852772105848029">เว็บไซต์นี้ต้องการเปิดแอป <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">ร้องไห้ฟูมฟาย</translation>
 <translation id="6398765197997659313">ออกจากการแสดงแบบเต็มหน้าจอ</translation>
 <translation id="6401136357288658127">นโยบายนี้เลิกใช้งานไปแล้ว คุณควรใช้นโยบาย <ph name="NEW_POLICY" /> แทน</translation>
 <translation id="6404511346730675251">แก้ไขบุ๊กมาร์ก</translation>
+<translation id="6405181733356710802">ไปที่ <ph name="APP_NAME" /> ไหม</translation>
 <translation id="6406765186087300643">C0 (ซองจดหมาย)</translation>
 <translation id="6410264514553301377">ป้อนวันหมดอายุและ CVC ของ <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium ช่วยคุณปกป้องบัญชี Google และเปลี่ยนรหัสผ่านได้</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 962baad..f10fc75 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Eşleşmeyen güvenli ödeme kimlik bilgisi sayfası kapatıldı</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> sitesinden bu konuma yapıştırma işlevi, yönetici politikası tarafından engellendi</translation>
+<translation id="6394852772105848029">Bu site, <ph name="APP_NAME" /> uygulamasını açmak istiyor</translation>
 <translation id="6398277657359595425">Yüksek Sesle Ağlama</translation>
 <translation id="6398765197997659313">Tam ekrandan çık</translation>
 <translation id="6401136357288658127">Bu politika kullanımdan kaldırılmıştır. Onun yerine <ph name="NEW_POLICY" /> politikasını kullanmalısınız.</translation>
 <translation id="6404511346730675251">Yer işaretini düzenle</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> uygulamasına devam edilsin mi?</translation>
 <translation id="6406765186087300643">C0 (Zarf)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> numaralı kartın son kullanma tarihini ve CVC kodunu girin</translation>
 <translation id="6415778972515849510">Chromium, Google Hesabınızı korumanıza ve şifrenizi değiştirmenize yardımcı olabilir.</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 6008552e..901e8fee 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Закрито нижній екран невідповідності облікових даних для безпечних платежів</translation>
 <translation id="6393956493820063117">Адміністратор заблокував можливість вставляти сюди контент зі сторінки <ph name="ORIGIN_NAME" /></translation>
+<translation id="6394852772105848029">Сайт хоче відкрити додаток <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Гірко ридає</translation>
 <translation id="6398765197997659313">Вийти з повноекранного режиму</translation>
 <translation id="6401136357288658127">Це правило не підтримується. Натомість потрібно застосувати правило <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Редагувати закладку</translation>
+<translation id="6405181733356710802">Перейти в додаток <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (конверт)</translation>
 <translation id="6410264514553301377">Введіть дату закінчення терміну дії та код CVC картки <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium допоможе захистити обліковий запис Google і змінити пароль.</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index de82530..0885e72d 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -1963,10 +1963,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">ادائیگی کی اسناد محفوظ کریں کوئی مماثل اسناد نہیں کی شیٹ بند ہے</translation>
 <translation id="6393956493820063117">منتظم کی پالیسی کے ذریعے <ph name="ORIGIN_NAME" /> سے اس مقام پر پیسٹ کرنا مسدود کر دیا گیا ہے</translation>
+<translation id="6394852772105848029">یہ سائٹ <ph name="APP_NAME" /> ایپ کو کھولنا چاہتی ہے</translation>
 <translation id="6398277657359595425">تیز آواز میں روتا ہوا</translation>
 <translation id="6398765197997659313">پوری سکرین سے خارج ہوں</translation>
 <translation id="6401136357288658127">یہ پالیسی فرسودہ ہے۔ اس کی بجائے، آپ کو <ph name="NEW_POLICY" /> پالیسی کا استعمال کرنا چاہیے۔</translation>
 <translation id="6404511346730675251">بک مارک میں ترمیم کریں</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> پر جاری رکھیں؟</translation>
 <translation id="6406765186087300643">C0 ‎(Envelope‎)‎</translation>
 <translation id="6410264514553301377">‏<ph name="CREDIT_CARD" /> کی اختتامی تاریخ اور CVC درج کریں</translation>
 <translation id="6415778972515849510">‏Chromium آپ کی اپنا Google اکاؤنٹ محفوظ اور پاس ورڈ تبدیل کرنے میں مدد کر سکتا ہے۔</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb
index bb19f92..04ddbdd9 100644
--- a/components/strings/components_strings_uz.xtb
+++ b/components/strings/components_strings_uz.xtb
@@ -1955,10 +1955,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Xavfsiz toʻlov maʼlumotlari yopilgan jadvaldagi maʼlumotlarga mos kelmadi</translation>
 <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> saytidan bu manzilga joylashni administrator taqiqlagan</translation>
+<translation id="6394852772105848029">Bu sayt <ph name="APP_NAME" /> ilovasini ochmoqchi</translation>
 <translation id="6398277657359595425">Hoʻngrab yigʻlash</translation>
 <translation id="6398765197997659313">To‘liq ekran rejimidan chiqish</translation>
 <translation id="6401136357288658127">Bu parametr eskirgan. Oʻrniga <ph name="NEW_POLICY" /> parametridan foydalaning.</translation>
 <translation id="6404511346730675251">Xatcho‘pni tahrirlash</translation>
+<translation id="6405181733356710802"><ph name="APP_NAME" /> ochilsinmi?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> kartasining amal qilish muddati va CVC kodini kiriting</translation>
 <translation id="6415778972515849510">Chromium Google hisobingizni himoyalash va parolni almashtirish uchun yordam beradi.</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index afc5053..c843144 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Đã đóng thông tin xác thực thanh toán an toàn không khớp với bảng thông tin xác thực</translation>
 <translation id="6393956493820063117">Chính sách của quản trị viên đã chặn thao tác dán từ <ph name="ORIGIN_NAME" /> vào trị trí này</translation>
+<translation id="6394852772105848029">Trang web này muốn mở ứng dụng <ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Khóc oà</translation>
 <translation id="6398765197997659313">Thoát khỏi chế độ toàn màn hình</translation>
 <translation id="6401136357288658127">Chính sách này không còn dùng nữa. Thay vào đó, bạn nên sử dụng chính sách <ph name="NEW_POLICY" />.</translation>
 <translation id="6404511346730675251">Chỉnh sửa dấu trang</translation>
+<translation id="6405181733356710802">Tiếp tục truy cập <ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Phong bì)</translation>
 <translation id="6410264514553301377">Nhập ngày hết hạn và CVC cho <ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">Chromium có thể giúp bạn bảo vệ Tài khoản Google của mình và đổi mật khẩu.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index dbb4582..d62e4c4 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -1955,10 +1955,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">“无匹配的安全付款凭据”表单已关闭</translation>
 <translation id="6393956493820063117">管理员政策禁止将 <ph name="ORIGIN_NAME" /> 上的内容粘贴到此处</translation>
+<translation id="6394852772105848029">此网站想打开<ph name="APP_NAME" />应用</translation>
 <translation id="6398277657359595425">嚎啕大哭</translation>
 <translation id="6398765197997659313">退出全屏模式</translation>
 <translation id="6401136357288658127">此政策已被弃用。您应改用 <ph name="NEW_POLICY" /> 政策。</translation>
 <translation id="6404511346730675251">修改书签</translation>
+<translation id="6405181733356710802">继续访问<ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">请输入“<ph name="CREDIT_CARD" />”的到期日期和银行卡验证码 (CVC)</translation>
 <translation id="6415778972515849510">Chromium 可以帮助您保护您的 Google 帐号和更改密码。</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index a87d1ec..ff7fbd0 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -1959,10 +1959,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">閂咗冇相符安全付款憑證工作表</translation>
 <translation id="6393956493820063117">管理員政策已禁止將內容由 <ph name="ORIGIN_NAME" /> 貼到此位置</translation>
+<translation id="6394852772105848029">此網站要求開啟 <ph name="APP_NAME" /> 應用程式</translation>
 <translation id="6398277657359595425">大聲喊</translation>
 <translation id="6398765197997659313">退出全螢幕模式</translation>
 <translation id="6401136357288658127">此政策已被淘汰,請改用 <ph name="NEW_POLICY" /> 政策。</translation>
 <translation id="6404511346730675251">編輯書籤</translation>
+<translation id="6405181733356710802">要繼續前往 <ph name="APP_NAME" /> 嗎?</translation>
 <translation id="6406765186087300643">C0 (信封)</translation>
 <translation id="6410264514553301377">請輸入 <ph name="CREDIT_CARD" /> 的到期日和信用卡驗證碼 (CVC)</translation>
 <translation id="6415778972515849510">Chromium 可助您保護 Google 帳戶並變更密碼。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 470f7fc..70ffee7 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -1960,10 +1960,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">無相符安全付款憑證表已關閉</translation>
 <translation id="6393956493820063117">系統管理員政策禁止將 <ph name="ORIGIN_NAME" /> 的內容貼到這個位置</translation>
+<translation id="6394852772105848029">這個網站想要開啟「<ph name="APP_NAME" />」應用程式</translation>
 <translation id="6398277657359595425">大哭</translation>
 <translation id="6398765197997659313">退出全螢幕模式</translation>
 <translation id="6401136357288658127">這項政策目前已淘汰,請改用 <ph name="NEW_POLICY" /> 政策。</translation>
 <translation id="6404511346730675251">編輯書籤</translation>
+<translation id="6405181733356710802">要繼續使用「<ph name="APP_NAME" />」嗎?</translation>
 <translation id="6406765186087300643">C0 (信封)</translation>
 <translation id="6410264514553301377">輸入 <ph name="CREDIT_CARD" /> 的到期日和信用卡驗證碼</translation>
 <translation id="6415778972515849510">Chromium 可協助你保護 Google 帳戶並變更密碼。</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index c1b2f7f..16c8f96 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -1957,10 +1957,12 @@
 <translation id="6390662030813198813">Engineering-E</translation>
 <translation id="6391700400718590966">Imfanelo yokukhokha evikelekile yeshidi lemfanelo elingafani ivaliwe</translation>
 <translation id="6393956493820063117">Ukunamathisela kusuka ku-<ph name="ORIGIN_NAME" /> kuya kule ndawo kuvinjelwe inqubomgomo yomlawuli</translation>
+<translation id="6394852772105848029">Le sayithi ifuna ukuvula i-app ye-<ph name="APP_NAME" /></translation>
 <translation id="6398277657359595425">Ukukhalela Phezulu</translation>
 <translation id="6398765197997659313">Phuma kusikrini esigcwele</translation>
 <translation id="6401136357288658127">Le nqubomgomo ihoxisiwe. Kuzomele usebenzise inqubomgomo ye-<ph name="NEW_POLICY" /> kunalokho.</translation>
 <translation id="6404511346730675251">Hlela ibhukhimakhi</translation>
+<translation id="6405181733356710802">Qhubekela ku-<ph name="APP_NAME" />?</translation>
 <translation id="6406765186087300643">C0 (Envelope)</translation>
 <translation id="6410264514553301377">Faka idethi yokuphelelwa isikhathi ne-CVC ye-<ph name="CREDIT_CARD" /></translation>
 <translation id="6415778972515849510">I-Chromium ingakusiza ukuthi uvikele i-akhawunti yakho ye-Google uphinde uguqule iphasiwedi yakho.</translation>
diff --git a/components/value_store/leveldb_value_store.cc b/components/value_store/leveldb_value_store.cc
index 11a52e3..50bd89ae 100644
--- a/components/value_store/leveldb_value_store.cc
+++ b/components/value_store/leveldb_value_store.cc
@@ -81,7 +81,7 @@
   if (!status.ok())
     return ReadResult(std::move(status));
 
-  std::unique_ptr<base::DictionaryValue> settings(new base::DictionaryValue());
+  base::Value::Dict settings;
 
   for (const std::string& key : keys) {
     absl::optional<base::Value> setting;
@@ -89,7 +89,7 @@
     if (!status.ok())
       return ReadResult(std::move(status));
     if (setting)
-      settings->SetKey(key, std::move(*setting));
+      settings.Set(key, std::move(*setting));
   }
 
   return ReadResult(std::move(settings), std::move(status));
@@ -100,7 +100,7 @@
   if (!status.ok())
     return ReadResult(std::move(status));
 
-  std::unique_ptr<base::DictionaryValue> settings(new base::DictionaryValue());
+  base::Value::Dict settings;
 
   std::unique_ptr<leveldb::Iterator> it(db()->NewIterator(read_options()));
   for (it->SeekToFirst(); it->Valid(); it->Next()) {
@@ -113,7 +113,7 @@
                                                 : VALUE_RESTORE_DELETE_FAILURE,
                                kInvalidJson));
     }
-    settings->SetKey(key, std::move(*value));
+    settings.Set(key, std::move(*value));
   }
 
   if (!it->status().ok()) {
@@ -212,10 +212,10 @@
   if (!read_result.status().ok())
     return WriteResult(read_result.PassStatus());
 
-  base::DictionaryValue& whole_db = read_result.settings();
-  while (!whole_db.DictEmpty()) {
-    std::string next_key = base::DictionaryValue::Iterator(whole_db).key();
-    absl::optional<base::Value> next_value = whole_db.ExtractKey(next_key);
+  base::Value::Dict& whole_db = read_result.settings();
+  while (!whole_db.empty()) {
+    std::string next_key = whole_db.begin()->first;
+    absl::optional<base::Value> next_value = whole_db.Extract(next_key);
     changes.emplace_back(next_key, std::move(*next_value), absl::nullopt);
   }
 
diff --git a/components/value_store/leveldb_value_store_unittest.cc b/components/value_store/leveldb_value_store_unittest.cc
index d7e0470..89452802 100644
--- a/components/value_store/leveldb_value_store_unittest.cc
+++ b/components/value_store/leveldb_value_store_unittest.cc
@@ -94,15 +94,15 @@
   result = store()->Get(kCorruptKey);
   EXPECT_TRUE(result.status().ok())
       << "Get result not OK: " << result.status().message;
-  EXPECT_TRUE(result.settings().DictEmpty());
+  EXPECT_TRUE(result.settings().empty());
 
   // Verify that the valid pair is still present.
   result = store()->Get(kNotCorruptKey);
   EXPECT_TRUE(result.status().ok());
-  EXPECT_TRUE(result.settings().FindKey(kNotCorruptKey));
-  std::string value_string;
-  EXPECT_TRUE(result.settings().GetString(kNotCorruptKey, &value_string));
-  EXPECT_EQ(kValue, value_string);
+  const std::string* value_string =
+      result.settings().FindString(kNotCorruptKey);
+  ASSERT_TRUE(value_string);
+  EXPECT_EQ(kValue, *value_string);
 }
 
 // Test that the Restore() method does not just delete the entire database
@@ -137,14 +137,14 @@
             result.status().restore_status);
 
   // We should still have all valid pairs present in the database.
-  std::string value_string;
+  std::string* value_string;
   for (auto* kNotCorruptKey : kNotCorruptKeys) {
     result = store()->Get(kNotCorruptKey);
     EXPECT_TRUE(result.status().ok());
     ASSERT_EQ(ValueStore::RESTORE_NONE, result.status().restore_status);
-    EXPECT_TRUE(result.settings().FindKey(kNotCorruptKey));
-    EXPECT_TRUE(result.settings().GetString(kNotCorruptKey, &value_string));
-    EXPECT_EQ(kValue, value_string);
+    value_string = result.settings().FindString(kNotCorruptKey);
+    ASSERT_TRUE(value_string);
+    EXPECT_EQ(kValue, *value_string);
   }
 }
 
@@ -184,7 +184,7 @@
   ASSERT_EQ(ValueStore::DB_RESTORE_REPAIR_SUCCESS,
             result.status().restore_status);
   EXPECT_TRUE(result.status().ok());
-  EXPECT_EQ(0u, result.settings().DictSize());
+  EXPECT_EQ(0u, result.settings().size());
 }
 
 }  // namespace value_store
diff --git a/components/value_store/testing_value_store.cc b/components/value_store/testing_value_store.cc
index dcc8d626..42dc5b5 100644
--- a/components/value_store/testing_value_store.cc
+++ b/components/value_store/testing_value_store.cc
@@ -59,11 +59,11 @@
   if (!status_.ok())
     return ReadResult(CreateStatusCopy(status_));
 
-  auto settings = std::make_unique<base::DictionaryValue>();
+  base::Value::Dict settings;
   for (const auto& key : keys) {
-    base::Value* value = storage_.FindKey(key);
+    base::Value* value = storage_.Find(key);
     if (value) {
-      settings->SetKey(key, value->Clone());
+      settings.Set(key, value->Clone());
     }
   }
   return ReadResult(std::move(settings), CreateStatusCopy(status_));
@@ -73,7 +73,7 @@
   read_count_++;
   if (!status_.ok())
     return ReadResult(CreateStatusCopy(status_));
-  return ReadResult(storage_.CreateDeepCopy(), CreateStatusCopy(status_));
+  return ReadResult(storage_.Clone(), CreateStatusCopy(status_));
 }
 
 ValueStore::WriteResult TestingValueStore::Set(WriteOptions options,
@@ -94,14 +94,14 @@
   ValueStoreChangeList changes;
   for (base::DictionaryValue::Iterator it(settings); !it.IsAtEnd();
        it.Advance()) {
-    base::Value* old_value = storage_.FindKey(it.key());
+    base::Value* old_value = storage_.Find(it.key());
     if (!old_value || *old_value != it.value()) {
       changes.emplace_back(it.key(),
                            old_value
                                ? absl::optional<base::Value>(old_value->Clone())
                                : absl::nullopt,
                            it.value().Clone());
-      storage_.SetKey(it.key(), it.value().Clone());
+      storage_.Set(it.key(), it.value().Clone());
     }
   }
   return WriteResult(std::move(changes), CreateStatusCopy(status_));
@@ -119,7 +119,7 @@
 
   ValueStoreChangeList changes;
   for (auto const& key : keys) {
-    absl::optional<base::Value> old_value = storage_.ExtractKey(key);
+    absl::optional<base::Value> old_value = storage_.Extract(key);
     if (old_value.has_value()) {
       changes.emplace_back(key, std::move(*old_value), absl::nullopt);
     }
@@ -129,9 +129,8 @@
 
 ValueStore::WriteResult TestingValueStore::Clear() {
   std::vector<std::string> keys;
-  for (base::DictionaryValue::Iterator it(storage_); !it.IsAtEnd();
-       it.Advance()) {
-    keys.push_back(it.key());
+  for (const auto [key, value] : storage_) {
+    keys.push_back(key);
   }
   return Remove(keys);
 }
diff --git a/components/value_store/testing_value_store.h b/components/value_store/testing_value_store.h
index 0d5ecb7..f82839b 100644
--- a/components/value_store/testing_value_store.h
+++ b/components/value_store/testing_value_store.h
@@ -53,7 +53,7 @@
   WriteResult Clear() override;
 
  private:
-  base::DictionaryValue storage_;
+  base::Value::Dict storage_;
   int read_count_ = 0;
   int write_count_ = 0;
   ValueStore::Status status_;
diff --git a/components/value_store/value_store.cc b/components/value_store/value_store.cc
index eb25dbf..d7a34c5 100644
--- a/components/value_store/value_store.cc
+++ b/components/value_store/value_store.cc
@@ -39,12 +39,8 @@
 
 // Implementation of ReadResult.
 
-ValueStore::ReadResult::ReadResult(
-    std::unique_ptr<base::DictionaryValue> settings,
-    Status status)
-    : settings_(std::move(settings)), status_(std::move(status)) {
-  CHECK(settings_);
-}
+ValueStore::ReadResult::ReadResult(base::Value::Dict settings, Status status)
+    : settings_(std::move(settings)), status_(std::move(status)) {}
 
 ValueStore::ReadResult::ReadResult(Status status)
     : status_(std::move(status)) {}
diff --git a/components/value_store/value_store.h b/components/value_store/value_store.h
index 520252cf..6ff40e30 100644
--- a/components/value_store/value_store.h
+++ b/components/value_store/value_store.h
@@ -91,7 +91,7 @@
   // The result of a read operation (Get).
   class ReadResult {
    public:
-    ReadResult(std::unique_ptr<base::DictionaryValue> settings, Status status);
+    ReadResult(base::Value::Dict settings, Status status);
     explicit ReadResult(Status status);
     ReadResult(ReadResult&& other);
     ~ReadResult();
@@ -104,16 +104,14 @@
     // be in |settings|.|foo|.
     //
     // Must only be called if there is no error.
-    base::DictionaryValue& settings() { return *settings_; }
-    std::unique_ptr<base::DictionaryValue> PassSettings() {
-      return std::move(settings_);
-    }
+    base::Value::Dict& settings() { return settings_; }
+    base::Value::Dict PassSettings() { return std::move(settings_); }
     Status PassStatus() { return std::move(status_); }
 
     const Status& status() const { return status_; }
 
    private:
-    std::unique_ptr<base::DictionaryValue> settings_;
+    base::Value::Dict settings_;
     Status status_;
   };
 
diff --git a/components/value_store/value_store_frontend.cc b/components/value_store/value_store_frontend.cc
index 8952b80b..0dea488 100644
--- a/components/value_store/value_store_frontend.cc
+++ b/components/value_store/value_store_frontend.cc
@@ -42,7 +42,7 @@
     // callback.
     absl::optional<base::Value> value;
     if (result.status().ok()) {
-      value = result.settings().ExtractKey(key);
+      value = result.settings().Extract(key);
     } else {
       LOG(WARNING) << "Reading " << key << " from " << db_path_.value()
                    << " failed: " << result.status().message;
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc
index 5125f2e..f8a1078 100644
--- a/components/viz/service/display/dc_layer_overlay.cc
+++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -61,7 +61,8 @@
   DC_LAYER_FAILED_VIDEO_CAPTURE_ENABLED = 13,
   DC_LAYER_FAILED_OUTPUT_HDR = 14,
   DC_LAYER_FAILED_NOT_DAMAGED = 15,
-  kMaxValue = DC_LAYER_FAILED_NOT_DAMAGED,
+  DC_LAYER_FAILED_YUV_VIDEO_QUAD_MOVED = 16,
+  kMaxValue = DC_LAYER_FAILED_YUV_VIDEO_QUAD_MOVED,
 };
 
 enum : size_t {
@@ -263,7 +264,7 @@
   dc_layer->color_space = gfx::ColorSpace::CreateSRGB();
 }
 
-bool IsProtectedVideo(const QuadList::Iterator& it) {
+bool IsProtectedVideo(const QuadList::ConstIterator& it) {
   if (it->material == DrawQuad::Material::kYuvVideoContent) {
     const auto* yuv_quad = YUVVideoDrawQuad::MaterialCast(*it);
     return yuv_quad->protected_video_type ==
@@ -383,7 +384,7 @@
   }
 }
 
-void RecordDCLayerResult(DCLayerResult result, QuadList::Iterator it) {
+void RecordDCLayerResult(DCLayerResult result, QuadList::ConstIterator it) {
   // Skip recording unsupported quads since that'd dwarf the data we care about.
   if (result == DC_LAYER_FAILED_UNSUPPORTED_QUAD)
     return;
@@ -449,6 +450,11 @@
   return it;
 }
 
+bool IsClearVideoQuad(const QuadList::ConstIterator& it) {
+  return it->material == DrawQuad::Material::kYuvVideoContent &&
+         !IsProtectedVideo(it);
+}
+
 }  // namespace
 
 DCLayerOverlay::DCLayerOverlay() = default;
@@ -662,6 +668,55 @@
   }
 }
 
+void DCLayerOverlayProcessor::RemoveClearVideoQuadCandidatesIfMoving(
+    const gfx::Transform& transform_to_root_target,
+    const QuadList* quad_list,
+    std::vector<size_t>* candidate_index_list) {
+  // The number of frames all overlay candidates need to be stable before we
+  // allow overlays again. This number was chosen experimentally.
+  constexpr int kFramesOfStabilityForOverlayPromotion = 5;
+
+  std::vector<gfx::Rect> current_frame_overlay_candidate_rects;
+  current_frame_overlay_candidate_rects.reserve(candidate_index_list->size());
+
+  for (auto index : *candidate_index_list) {
+    auto candidate_it = std::next(quad_list->begin(), index);
+    if (IsClearVideoQuad(candidate_it)) {
+      gfx::Rect quad_rectangle_in_target_space =
+          cc::MathUtil::MapEnclosingClippedRect(
+              transform_to_root_target,
+              gfx::ToEnclosingRect(ClippedQuadRectangle(*candidate_it)));
+      current_frame_overlay_candidate_rects.push_back(
+          quad_rectangle_in_target_space);
+    }
+  }
+
+  if (previous_frame_overlay_candidate_rects_ !=
+      current_frame_overlay_candidate_rects) {
+    frames_since_last_overlay_candidate_rects_change_ = 0;
+
+    std::swap(previous_frame_overlay_candidate_rects_,
+              current_frame_overlay_candidate_rects);
+  } else {
+    frames_since_last_overlay_candidate_rects_change_++;
+  }
+
+  if (frames_since_last_overlay_candidate_rects_change_ <=
+      kFramesOfStabilityForOverlayPromotion) {
+    // Remove all video quad candidates if any of them moved recently
+    auto candidate_index_it = candidate_index_list->begin();
+    while (candidate_index_it != candidate_index_list->end()) {
+      auto candidate_it = std::next(quad_list->begin(), *candidate_index_it);
+      if (IsClearVideoQuad(candidate_it)) {
+        candidate_index_it = candidate_index_list->erase(candidate_index_it);
+        RecordDCLayerResult(DC_LAYER_FAILED_YUV_VIDEO_QUAD_MOVED, candidate_it);
+      } else {
+        candidate_index_it++;
+      }
+    }
+  }
+}
+
 void DCLayerOverlayProcessor::Process(
     DisplayResourceProvider* resource_provider,
     const gfx::RectF& display_rect,
@@ -825,6 +880,12 @@
   // successfully.
   processed_yuv_overlay_count_ = 0;
 
+  if (base::FeatureList::IsEnabled(features::kDisableVideoOverlayIfMoving)) {
+    RemoveClearVideoQuadCandidatesIfMoving(
+        render_pass->transform_to_root_target, quad_list,
+        &candidate_index_list);
+  }
+
   // Copy the overlay quad info to dc_layer_overlays and replace/delete overlay
   // quads in quad_list.
   for (auto index : candidate_index_list) {
diff --git a/components/viz/service/display/dc_layer_overlay.h b/components/viz/service/display/dc_layer_overlay.h
index 2b09638..53bf411c 100644
--- a/components/viz/service/display/dc_layer_overlay.h
+++ b/components/viz/service/display/dc_layer_overlay.h
@@ -163,6 +163,31 @@
   bool IsPreviousFrameUnderlayRect(const gfx::Rect& quad_rectangle,
                                    size_t index);
 
+  // Remove all video overlay candidates from `candidate_index_list` if any of
+  // them have moved in the last several frames.
+  //
+  // We do this because it could cause visible stuttering of playback on certain
+  // older hardware. The stuttering does not occur if other overlay quads move
+  // while a non-moving video is playing.
+  //
+  // This only tracks clear video quads because hardware-protected videos cannot
+  // be accessed by the viz compositor, so they must be promoted to overlay,
+  // even if they could cause stutter. Software-protected video aren't required
+  // to be in overlay, but we also exclude them from de-promotion to keep the
+  // protection benefits of being in an overlay.
+  //
+  // `transform_to_root_target` is needed to track the quad positions in a
+  // uniform space. It should be in screen space (to handle the case when the
+  // window itself moves), but we don't easily know of the position of the
+  // window in screen space.
+  //
+  // `candidate_index_list` contains the indexes in `quad_list` of overlay
+  // candidates.
+  void RemoveClearVideoQuadCandidatesIfMoving(
+      const gfx::Transform& transform_to_root_target,
+      const QuadList* quad_list,
+      std::vector<size_t>* candidate_index_list);
+
   bool has_overlay_support_;
   const int allowed_yuv_overlay_count_;
   int processed_yuv_overlay_count_ = 0;
@@ -188,6 +213,11 @@
   std::vector<OverlayRect> current_frame_overlay_rects_;
   SurfaceDamageRectList surface_damage_rect_list_;
 
+  // Used in `RemoveClearVideoQuadCandidatesIfMoving`:
+  // List of clear video content candidate bounds.
+  std::vector<gfx::Rect> previous_frame_overlay_candidate_rects_{};
+  int frames_since_last_overlay_candidate_rects_change_ = 0;
+
   scoped_refptr<base::SingleThreadTaskRunner> viz_task_runner_;
 };
 
diff --git a/components/viz/service/display/overlay_dc_unittest.cc b/components/viz/service/display/overlay_dc_unittest.cc
index ad1fbd53..8ea8f65 100644
--- a/components/viz/service/display/overlay_dc_unittest.cc
+++ b/components/viz/service/display/overlay_dc_unittest.cc
@@ -245,6 +245,61 @@
   std::vector<gfx::Rect> content_bounds_;
 };
 
+TEST_F(DCLayerOverlayTest, DisableVideoOverlayIfMovingFeature) {
+  auto ProcessForOverlaysSingleVideoRectWithOffset =
+      [&](gfx::Vector2d video_rect_offset) {
+        auto pass = CreateRenderPass();
+        auto* video_quad = CreateFullscreenCandidateYUVVideoQuad(
+            resource_provider_.get(), child_resource_provider_.get(),
+            child_provider_.get(), pass->shared_quad_state_list.back(),
+            pass.get());
+        video_quad->rect = gfx::Rect(0, 0, 10, 10) + video_rect_offset;
+        video_quad->visible_rect = gfx::Rect(0, 0, 10, 10) + video_rect_offset;
+
+        DCLayerOverlayList dc_layer_list;
+        OverlayProcessorInterface::FilterOperationsMap render_pass_filters;
+        OverlayProcessorInterface::FilterOperationsMap
+            render_pass_backdrop_filters;
+
+        AggregatedRenderPassList pass_list;
+        pass_list.push_back(std::move(pass));
+
+        overlay_processor_->ProcessForOverlays(
+            resource_provider_.get(), &pass_list, GetIdentityColorMatrix(),
+            render_pass_filters, render_pass_backdrop_filters, {}, nullptr,
+            &dc_layer_list, &damage_rect_, &content_bounds_);
+
+        return dc_layer_list;
+      };
+
+  {
+    base::test::ScopedFeatureList scoped_feature_list;
+    scoped_feature_list.InitAndDisableFeature(
+        features::kDisableVideoOverlayIfMoving);
+    EXPECT_EQ(1U, ProcessForOverlaysSingleVideoRectWithOffset({0, 0}).size());
+    EXPECT_EQ(1U, ProcessForOverlaysSingleVideoRectWithOffset({1, 0}).size());
+  }
+  {
+    base::test::ScopedFeatureList scoped_feature_list;
+    scoped_feature_list.InitAndEnableFeature(
+        features::kDisableVideoOverlayIfMoving);
+    // We expect an overlay promotion after a couple frames of no movement
+    for (int i = 0; i < 10; i++) {
+      ProcessForOverlaysSingleVideoRectWithOffset({0, 0}).size();
+    }
+    EXPECT_EQ(1U, ProcessForOverlaysSingleVideoRectWithOffset({0, 0}).size());
+
+    // Since the overlay candidate moved, we expect no overlays
+    EXPECT_EQ(0U, ProcessForOverlaysSingleVideoRectWithOffset({1, 0}).size());
+
+    // After some number of frames with no movement, we expect an overlay again
+    for (int i = 0; i < 10; i++) {
+      ProcessForOverlaysSingleVideoRectWithOffset({1, 0}).size();
+    }
+    EXPECT_EQ(1U, ProcessForOverlaysSingleVideoRectWithOffset({1, 0}).size());
+  }
+}
+
 TEST_F(DCLayerOverlayTest, Occluded) {
   {
     auto pass = CreateRenderPass();
diff --git a/components/viz/service/display_embedder/buffer_queue.cc b/components/viz/service/display_embedder/buffer_queue.cc
index ef0c294..d33c75a 100644
--- a/components/viz/service/display_embedder/buffer_queue.cc
+++ b/components/viz/service/display_embedder/buffer_queue.cc
@@ -6,74 +6,89 @@
 
 #include <utility>
 
-#include "base/containers/adapters.h"
-#include "base/logging.h"
-#include "build/build_config.h"
 #include "components/viz/common/resources/resource_format_utils.h"
-#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/command_buffer/common/sync_token.h"
-#include "ui/gfx/gpu_memory_buffer.h"
 
 namespace viz {
 
 BufferQueue::BufferQueue(gpu::SharedImageInterface* sii,
-                         gpu::SurfaceHandle surface_handle)
+                         gpu::SurfaceHandle surface_handle,
+                         size_t number_of_buffers)
     : sii_(sii),
-      allocated_count_(0),
-      surface_handle_(surface_handle) {}
+      surface_handle_(surface_handle),
+      number_of_buffers_(number_of_buffers) {}
 
 BufferQueue::~BufferQueue() {
-  FreeAllSurfaces();
+  FreeAllBuffers();
 }
 
-void BufferQueue::SetSyncTokenProvider(SyncTokenProvider* sync_token_provider) {
-  DCHECK(!sync_token_provider_);
-  sync_token_provider_ = sync_token_provider;
-}
-
-gpu::Mailbox BufferQueue::GetCurrentBuffer(gpu::SyncToken* creation_sync_token,
-                                           gfx::GpuFenceHandle* release_fence) {
-  DCHECK(creation_sync_token);
-  if (!current_surface_)
-    current_surface_ = GetNextSurface(creation_sync_token);
-  if (release_fence)
-    *release_fence = current_surface_->release_fence.Clone();
-  return current_surface_ ? current_surface_->mailbox : gpu::Mailbox();
+gpu::Mailbox BufferQueue::GetCurrentBuffer() {
+  if (!current_buffer_) {
+    current_buffer_ = GetNextBuffer();
+  }
+  DCHECK(current_buffer_);
+  return current_buffer_->mailbox;
 }
 
 void BufferQueue::UpdateBufferDamage(const gfx::Rect& damage) {
-  if (displayed_surface_)
-    displayed_surface_->damage.Union(damage);
-  for (auto& surface : available_surfaces_)
-    surface->damage.Union(damage);
-  for (auto& surface : in_flight_surfaces_) {
-    if (surface)
-      surface->damage.Union(damage);
+  if (displayed_buffer_) {
+    displayed_buffer_->damage.Union(damage);
+  }
+  for (auto& buffer : available_buffers_) {
+    buffer->damage.Union(damage);
+  }
+  for (auto& buffer : in_flight_buffers_) {
+    if (buffer) {
+      buffer->damage.Union(damage);
+    }
   }
 }
 
 gfx::Rect BufferQueue::CurrentBufferDamage() const {
-  if (current_surface_)
-    return current_surface_->damage;
-
-  // In case there is no current_surface_, we get the damage from the surface
-  // that will be set as current_surface_ by the next call to GetNextSurface.
-  if (!available_surfaces_.empty()) {
-    return available_surfaces_.back()->damage;
+  if (current_buffer_) {
+    return current_buffer_->damage;
   }
 
-  // If we can't determine which surface will be the next current_surface_, we
+  // In case there is no current_buffer_, we get the damage from the buffer
+  // that will be set as current_buffer_ by the next call to GetNextBuffer.
+  if (!available_buffers_.empty()) {
+    return available_buffers_.front()->damage;
+  }
+
+  // If we can't determine which buffer will be the next current_buffer_, we
   // conservatively invalidate the whole buffer.
   return gfx::Rect(size_);
 }
 
 void BufferQueue::SwapBuffers(const gfx::Rect& damage) {
   UpdateBufferDamage(damage);
-  if (current_surface_)
-    current_surface_->damage = gfx::Rect();
-  in_flight_surfaces_.push_back(std::move(current_surface_));
+  if (current_buffer_) {
+    current_buffer_->damage = gfx::Rect();
+  }
+  // Note: In the case of an empty-swap frame, GetCurrentBuffer() was not called
+  // this frame and current_buffer_ will be nullptr. We will still push nullptr
+  // into in_flight_buffers_ so the queue is kept in sync when
+  // SwapBuffersComplete() is called.
+  in_flight_buffers_.push_back(std::move(current_buffer_));
+}
+
+void BufferQueue::SwapBuffersComplete() {
+  DCHECK(!in_flight_buffers_.empty());
+
+  if (in_flight_buffers_.front()) {
+    if (displayed_buffer_) {
+      available_buffers_.push_back(std::move(displayed_buffer_));
+    }
+    displayed_buffer_ = std::move(in_flight_buffers_.front());
+  }
+
+  in_flight_buffers_.pop_front();
+}
+
+void BufferQueue::SwapBuffersSkipped(const gfx::Rect& damage) {
+  UpdateBufferDamage(damage);
 }
 
 bool BufferQueue::Reshape(const gfx::Size& size,
@@ -82,101 +97,83 @@
   if (size == size_ && color_space == color_space_ && format == format_)
     return false;
 
-#if !BUILDFLAG(IS_APPLE)
-  // TODO(ccameron): This assert is being hit on Mac try jobs. Determine if that
-  // is cause for concern or if it is benign.
-  // http://crbug.com/524624
-  DCHECK(!current_surface_);
-#endif
   size_ = size;
   color_space_ = color_space;
   format_ = format;
 
-  FreeAllSurfaces();
+  FreeAllBuffers();
+  AllocateBuffers(number_of_buffers_);
+
   return true;
 }
 
-void BufferQueue::SetMaxBuffers(size_t max) {
-  max_buffers_ = max;
-}
-
-void BufferQueue::PageFlipComplete(gfx::GpuFenceHandle release_fence) {
-  DCHECK(!in_flight_surfaces_.empty());
-  if (in_flight_surfaces_.front()) {
-    if (displayed_surface_) {
-      displayed_surface_->release_fence = std::move(release_fence);
-      available_surfaces_.push_back(std::move(displayed_surface_));
-    }
-    displayed_surface_ = std::move(in_flight_surfaces_.front());
-  }
-
-  in_flight_surfaces_.pop_front();
-}
-
-void BufferQueue::FreeAllSurfaces() {
-  DCHECK(sync_token_provider_);
-  const gpu::SyncToken destruction_sync_token =
-      sync_token_provider_->GenSyncToken();
-  FreeSurface(std::move(displayed_surface_), destruction_sync_token);
-  FreeSurface(std::move(current_surface_), destruction_sync_token);
+void BufferQueue::FreeAllBuffers() {
+  FreeBuffer(std::move(displayed_buffer_));
+  FreeBuffer(std::move(current_buffer_));
 
   // This is intentionally not emptied since the swap buffers acks are still
   // expected to arrive.
-  for (auto& surface : in_flight_surfaces_) {
-    FreeSurface(std::move(surface), destruction_sync_token);
+  for (auto& buffer : in_flight_buffers_) {
+    FreeBuffer(std::move(buffer));
   }
 
-  for (auto& surface : available_surfaces_) {
-    FreeSurface(std::move(surface), destruction_sync_token);
+  for (auto& buffer : available_buffers_) {
+    FreeBuffer(std::move(buffer));
   }
-  available_surfaces_.clear();
+  available_buffers_.clear();
 }
 
-void BufferQueue::FreeSurface(std::unique_ptr<AllocatedSurface> surface,
-                              const gpu::SyncToken& sync_token) {
-  if (!surface)
+void BufferQueue::FreeBuffer(std::unique_ptr<AllocatedBuffer> buffer) {
+  if (!buffer) {
     return;
-  DCHECK(!surface->mailbox.IsZero());
-  sii_->DestroySharedImage(sync_token, surface->mailbox);
-  allocated_count_--;
+  }
+  DCHECK(!buffer->mailbox.IsZero());
+  sii_->DestroySharedImage(gpu::SyncToken(), buffer->mailbox);
 }
 
-std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::GetNextSurface(
-    gpu::SyncToken* creation_sync_token) {
-  DCHECK(creation_sync_token);
-  if (!available_surfaces_.empty()) {
-    std::unique_ptr<AllocatedSurface> surface =
-        std::move(available_surfaces_.back());
-    available_surfaces_.pop_back();
-    return surface;
-  }
-
-  // We don't want to allow anything more than triple buffering.
-  DCHECK_LT(allocated_count_, max_buffers_);
-
+void BufferQueue::AllocateBuffers(size_t n) {
   DCHECK(format_);
   const ResourceFormat format = GetResourceFormat(format_.value());
-  const gpu::Mailbox mailbox = sii_->CreateSharedImage(
-      format, size_, color_space_, kTopLeft_GrSurfaceOrigin,
-      kPremul_SkAlphaType,
-      gpu::SHARED_IMAGE_USAGE_SCANOUT |
-          gpu::SHARED_IMAGE_USAGE_GLES2_FRAMEBUFFER_HINT,
-      surface_handle_);
 
-  if (mailbox.IsZero()) {
-    LOG(ERROR) << "Failed to create SharedImage";
-    return nullptr;
+  available_buffers_.reserve(available_buffers_.size() + n);
+  for (size_t i = 0; i < n; ++i) {
+    const gpu::Mailbox mailbox = sii_->CreateSharedImage(
+        format, size_, color_space_, kTopLeft_GrSurfaceOrigin,
+        kPremul_SkAlphaType,
+        gpu::SHARED_IMAGE_USAGE_SCANOUT | gpu::SHARED_IMAGE_USAGE_DISPLAY,
+        surface_handle_);
+    DCHECK(!mailbox.IsZero());
+
+    available_buffers_.push_back(
+        std::make_unique<AllocatedBuffer>(mailbox, gfx::Rect(size_)));
   }
-
-  allocated_count_++;
-  *creation_sync_token = sii_->GenUnverifiedSyncToken();
-  return std::make_unique<AllocatedSurface>(mailbox, gfx::Rect(size_));
 }
 
-BufferQueue::AllocatedSurface::AllocatedSurface(const gpu::Mailbox& mailbox,
-                                                const gfx::Rect& rect)
+std::unique_ptr<BufferQueue::AllocatedBuffer> BufferQueue::GetNextBuffer() {
+  DCHECK(!available_buffers_.empty());
+
+  std::unique_ptr<AllocatedBuffer> buffer =
+      std::move(available_buffers_.front());
+  available_buffers_.pop_front();
+  return buffer;
+}
+
+void BufferQueue::EnsureMinNumberOfBuffers(size_t n) {
+  if (n <= number_of_buffers_) {
+    return;
+  }
+
+  // If Reshape hasn't been called yet we can't allocate the buffers.
+  if (!size_.IsEmpty()) {
+    AllocateBuffers(n - number_of_buffers_);
+  }
+  number_of_buffers_ = n;
+}
+
+BufferQueue::AllocatedBuffer::AllocatedBuffer(const gpu::Mailbox& mailbox,
+                                              const gfx::Rect& rect)
     : mailbox(mailbox), damage(rect) {}
 
-BufferQueue::AllocatedSurface::~AllocatedSurface() = default;
+BufferQueue::AllocatedBuffer::~AllocatedBuffer() = default;
 
 }  // namespace viz
diff --git a/components/viz/service/display_embedder/buffer_queue.h b/components/viz/service/display_embedder/buffer_queue.h
index a7c9c15..f3d30132 100644
--- a/components/viz/service/display_embedder/buffer_queue.h
+++ b/components/viz/service/display_embedder/buffer_queue.h
@@ -13,7 +13,6 @@
 #include "base/containers/circular_deque.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
-#include "base/memory/ref_counted.h"
 #include "components/viz/service/viz_service_export.h"
 #include "gpu/command_buffer/common/mailbox.h"
 #include "gpu/ipc/common/surface_handle.h"
@@ -22,107 +21,73 @@
 #include "ui/gfx/color_space.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
-#include "ui/gfx/gpu_fence_handle.h"
-
-namespace gfx {
-class GpuMemoryBuffer;
-}
 
 namespace gpu {
-class GpuMemoryBufferManager;
 class SharedImageInterface;
-struct SyncToken;
 }  // namespace gpu
 
 namespace viz {
 
-// Encapsulates a queue of buffers for compositing backed by SharedImages (in
-// turn backed by GpuMemoryBuffers). Double/triple buffering is implemented
-// internally. Double buffering occurs if PageFlipComplete is called before the
-// next BindFramebuffer call, otherwise it creates extra buffers.
-//
-// SetSyncTokenProvider() must be called prior to using the BufferQueue. The
-// reason the SyncTokenProvider is not passed in the constructor is testing:
-// this allows us to create a mock BufferQueue that can be injected into a
-// GLOutputSurfaceBufferQueue. The surface can then set itself as the
-// SyncTokenProvider and fully own the BufferQueue thus guaranteeing that the
-// queue's SyncTokenProvider outlives the queue.
+// Encapsulates a queue of buffers for compositing backed by SharedImages.
+// Double/triple/N-buffering is configured by specifying |number_of_buffers| at
+// construction, or by calling EnsureMinNumberOfBuffers().
 class VIZ_SERVICE_EXPORT BufferQueue {
  public:
-  // A BufferQueue uses a SyncTokenProvider to get sync tokens that ensure
-  // operations on the buffers done by the BufferQueue client are synchronized
-  // with respect to other work.
-  //
-  // TODO(crbug.com/958670): extend this abstraction to allow both fences and
-  // sync tokens.
-  class SyncTokenProvider {
-   public:
-    SyncTokenProvider() = default;
-    virtual ~SyncTokenProvider() = default;
-    virtual gpu::SyncToken GenSyncToken() = 0;
-  };
-
-  // Creates a BufferQueue that allocates buffers using
-  // |gpu_memory_buffer_manager| and associates them with SharedImages using
-  // |sii|.
+  // Creates a BufferQueue that allocates SharedImage buffers using |sii|.
+  // Buffers are not allocated until Reshape() is called. |number_of_buffers|
+  // specifies the number of buffers that will be allocated, and can be
+  // increased by calling EnsureMinNumberOfBuffers() when
+  // |supports_dynamic_frame_buffer_allocation| capability is true.
   BufferQueue(gpu::SharedImageInterface* sii,
-              gpu::SurfaceHandle surface_handle);
+              gpu::SurfaceHandle surface_handle,
+              size_t number_of_buffers);
 
   BufferQueue(const BufferQueue&) = delete;
   BufferQueue& operator=(const BufferQueue&) = delete;
 
-  virtual ~BufferQueue();
-
-  // Sets the provider of sync tokens that the BufferQueue needs to ensure
-  // operations on a SharedImage are ordered correctly with respect to the
-  // operations issued by the client of the BufferQueue. |sync_token_provider|
-  // is not used after the BufferQueue is destroyed.
-  virtual void SetSyncTokenProvider(SyncTokenProvider* sync_token_provider);
+  ~BufferQueue();
 
   // Returns the SharedImage backed by the current buffer (i.e., the render
-  // target for compositing). A zeroed mailbox is returned if there is no
-  // current buffer and one could not be created. The caller needs to wait on
-  // *|creation_sync_token| if non-empty before consuming the mailbox.
-  // If *|release_fence| is a valid fence, the caller must ensure that the fence
-  // is signalled before performing any writes to the underlying buffer, either
-  // by executing a CPU wait or by inserting the fence into the GPU command
-  // queue.
-  virtual gpu::Mailbox GetCurrentBuffer(gpu::SyncToken* creation_sync_token,
-                                        gfx::GpuFenceHandle* release_fence);
+  // target for compositing).
+  gpu::Mailbox GetCurrentBuffer();
 
   // Returns a rectangle whose contents may have changed since the current
   // buffer was last submitted and needs to be redrawn. For partial swap,
   // only the contents outside this rectangle can be considered valid and do not
   // need to be redrawn.
-  virtual gfx::Rect CurrentBufferDamage() const;
+  gfx::Rect CurrentBufferDamage() const;
 
   // Called by the user of this object to indicate that the buffer currently
   // marked for drawing should be moved to the list of in-flight buffers.
   // |damage| represents the rectangle containing the damaged area since the
   // last SwapBuffers.
-  virtual void SwapBuffers(const gfx::Rect& damage);
+  void SwapBuffers(const gfx::Rect& damage);
 
   // Called by the user of this object to indicate that a previous request to
   // swap buffers has completed. This allows us to correctly keep track of the
   // state of the buffers: the buffer currently marked as being displayed will
   // now marked as available, and the next buffer marked as in-flight will now
   // be marked as displayed.
-  virtual void PageFlipComplete(gfx::GpuFenceHandle release_fence);
+  void SwapBuffersComplete();
 
-  // Requests a sync token from the SyncTokenProvider passed in the constructor
-  // and frees all buffers after that sync token has passed.
-  virtual void FreeAllSurfaces();
+  // Called when SwapBuffers is skipped this frame. Damages allocated buffers,
+  // but does not advance |in_flight_buffers_| or |current_buffer_|. We don't
+  // clear the damage on |current_buffer_| because it hasn't been displayed yet.
+  void SwapBuffersSkipped(const gfx::Rect& damage);
 
-  // If |size| or |color_space| correspond to a change of state, requests a sync
-  // token from the SyncTokenProvider passed in the constructor and frees all
-  // the buffers after that sync token passes. Otherwise, it's a no-op. Returns
-  // true if there was a change of state, false otherwise.
-  virtual bool Reshape(const gfx::Size& size,
-                       const gfx::ColorSpace& color_space,
-                       gfx::BufferFormat format);
+  // If |size| or |color_space| correspond to a change of state, frees all
+  // the buffers and reallocatess |number_of_buffers_| buffers. Otherwise, it's
+  // a no-op. Returns true if there was a change of state, false otherwise.
+  bool Reshape(const gfx::Size& size,
+               const gfx::ColorSpace& color_space,
+               gfx::BufferFormat format);
 
   gfx::BufferFormat buffer_format() const { return *format_; }
-  void SetMaxBuffers(size_t max);
+
+  // Sets the number of frame buffers to use when
+  // |supports_dynamic_frame_buffer_allocation| is true, and allocates those
+  // buffers if necessary. If |n| <= |number_of_buffers_| this is a no-op.
+  void EnsureMinNumberOfBuffers(size_t n);
 
  private:
   friend class BufferQueueTest;
@@ -131,50 +96,57 @@
   FRIEND_TEST_ALL_PREFIXES(BufferQueueMockedSharedImageInterfaceTest,
                            AllocateFails);
 
-  // TODO(andrescj): consider renaming this to AllocatedBuffer because 'surface'
-  // is an overloaded term (also problematic in the unit tests).
-  struct VIZ_SERVICE_EXPORT AllocatedSurface {
-    AllocatedSurface(const gpu::Mailbox& mailbox, const gfx::Rect& rect);
-    ~AllocatedSurface();
+  struct VIZ_SERVICE_EXPORT AllocatedBuffer {
+    AllocatedBuffer(const gpu::Mailbox& mailbox, const gfx::Rect& rect);
+    ~AllocatedBuffer();
 
     gpu::Mailbox mailbox;
-    gfx::GpuFenceHandle release_fence;
     gfx::Rect damage;  // This is the damage for this frame from the previous.
   };
 
-  void FreeSurface(std::unique_ptr<AllocatedSurface> surface,
-                   const gpu::SyncToken& sync_token);
+  // Frees all buffers that have been allocated, and destroys their shared
+  // images.
+  void FreeAllBuffers();
 
+  // Free |buffer| and destroy its shared image.
+  void FreeBuffer(std::unique_ptr<AllocatedBuffer> buffer);
+
+  // Unions |damage| to all allocated buffers except |current_buffer_| which
+  // hasn't been displayed yet.
   void UpdateBufferDamage(const gfx::Rect& damage);
 
-  // Return a buffer that is available to be drawn into or nullptr if there is
-  // no available buffer and one cannot be created. If a new buffer is created
-  // *|creation_sync_token| is set to a sync token that the client must wait on
-  // before using the buffer.
-  std::unique_ptr<AllocatedSurface> GetNextSurface(
-      gpu::SyncToken* creation_sync_token);
+  // Allocates |n| buffers and pushes them into |available_buffers_|.
+  void AllocateBuffers(size_t n);
 
+  // Return a buffer that is available to be drawn into.
+  std::unique_ptr<AllocatedBuffer> GetNextBuffer();
+
+  // Used to create and destroy shared images.
   const raw_ptr<gpu::SharedImageInterface> sii_;
-  gfx::Size size_;
-  gfx::ColorSpace color_space_;
-
-  // We don't want to allow anything more than triple buffering by default.
-  size_t max_buffers_ = 3U;
-  size_t allocated_count_;
-  // The |format_| is optional to prevent use of uninitialized values.
-  absl::optional<gfx::BufferFormat> format_;
-  // This surface is currently bound. This may be nullptr if no surface has
-  // been bound, or if allocation failed at bind.
-  std::unique_ptr<AllocatedSurface> current_surface_;
-  // The surface currently on the screen, if any.
-  std::unique_ptr<AllocatedSurface> displayed_surface_;
-  // These are free for use, and are not nullptr.
-  std::vector<std::unique_ptr<AllocatedSurface>> available_surfaces_;
-  // These have been swapped but are not displayed yet. Entries of this deque
-  // may be nullptr, if they represent frames that have been destroyed.
-  base::circular_deque<std::unique_ptr<AllocatedSurface>> in_flight_surfaces_;
+  // Used when creating shared images.
   gpu::SurfaceHandle surface_handle_;
-  raw_ptr<SyncTokenProvider> sync_token_provider_ = nullptr;
+  // The number of buffers that should be allocated when Reshape() is called.
+  size_t number_of_buffers_ = 0;
+
+  // The size of all allocated buffers.
+  gfx::Size size_;
+  // The color space of all allocated buffers.
+  gfx::ColorSpace color_space_;
+  // The format of all allocated buffers. The |format_| is optional to prevent
+  // use of uninitialized values.
+  absl::optional<gfx::BufferFormat> format_;
+
+  // This buffer is currently bound. This may be nullptr if no buffer has
+  // been bound.
+  std::unique_ptr<AllocatedBuffer> current_buffer_;
+  // The buffer currently on the screen, if any.
+  std::unique_ptr<AllocatedBuffer> displayed_buffer_;
+  // These are free for use, and are not nullptr.
+  base::circular_deque<std::unique_ptr<AllocatedBuffer>> available_buffers_;
+  // These have been swapped but are not displayed yet. Entries of this deque
+  // may be nullptr, if they represent frames that have been destroyed, or
+  // frames where SwapBuffers() was called without calling GetCurrentBuffer().
+  base::circular_deque<std::unique_ptr<AllocatedBuffer>> in_flight_buffers_;
 };
 
 }  // namespace viz
diff --git a/components/viz/service/display_embedder/buffer_queue_unittest.cc b/components/viz/service/display_embedder/buffer_queue_unittest.cc
index aad0bc3..ee5fbc94 100644
--- a/components/viz/service/display_embedder/buffer_queue_unittest.cc
+++ b/components/viz/service/display_embedder/buffer_queue_unittest.cc
@@ -12,17 +12,14 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
-#include "base/memory/raw_ptr.h"
 #include "build/build_config.h"
 #include "components/viz/test/test_context_provider.h"
-#include "components/viz/test/test_gpu_memory_buffer_manager.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
 #include "gpu/command_buffer/common/mailbox.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/command_buffer/common/sync_token.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "ui/display/types/display_snapshot.h"
 
 using ::testing::_;
 using ::testing::Expectation;
@@ -39,77 +36,6 @@
 
 }  // namespace
 
-class FakeSyncTokenProvider : public BufferQueue::SyncTokenProvider {
- public:
-  ~FakeSyncTokenProvider() override = default;
-  gpu::SyncToken GenSyncToken() override { return gpu::SyncToken(); }
-};
-
-class StubGpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
- public:
-  explicit StubGpuMemoryBufferImpl(size_t* set_color_space_count)
-      : set_color_space_count_(set_color_space_count) {}
-
-  // Overridden from gfx::GpuMemoryBuffer:
-  bool Map() override { return false; }
-  void* memory(size_t plane) override { return nullptr; }
-  void Unmap() override {}
-  gfx::Size GetSize() const override { return gfx::Size(); }
-  gfx::BufferFormat GetFormat() const override { return kBufferQueueFormat; }
-  int stride(size_t plane) const override { return 0; }
-  gfx::GpuMemoryBufferType GetType() const override {
-    return gfx::EMPTY_BUFFER;
-  }
-  gfx::GpuMemoryBufferId GetId() const override {
-    return gfx::GpuMemoryBufferId(0);
-  }
-  void SetColorSpace(const gfx::ColorSpace& color_space) override {
-    *set_color_space_count_ += 1;
-  }
-  gfx::GpuMemoryBufferHandle CloneHandle() const override {
-    return gfx::GpuMemoryBufferHandle();
-  }
-  ClientBuffer AsClientBuffer() override {
-    return reinterpret_cast<ClientBuffer>(this);
-  }
-  void OnMemoryDump(
-      base::trace_event::ProcessMemoryDump* pmd,
-      const base::trace_event::MemoryAllocatorDumpGuid& buffer_dump_guid,
-      uint64_t tracing_process_id,
-      int importance) const override {}
-
-  raw_ptr<size_t> set_color_space_count_;
-};
-
-class StubGpuMemoryBufferManager : public TestGpuMemoryBufferManager {
- public:
-  StubGpuMemoryBufferManager() : allocate_succeeds_(true) {}
-
-  size_t set_color_space_count() const { return set_color_space_count_; }
-
-  void set_allocate_succeeds(bool value) { allocate_succeeds_ = value; }
-
-  std::unique_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBuffer(
-      const gfx::Size& size,
-      gfx::BufferFormat format,
-      gfx::BufferUsage usage,
-      gpu::SurfaceHandle surface_handle,
-      base::WaitableEvent* shutdown_event) override {
-    if (surface_handle == gpu::kNullSurfaceHandle) {
-      return TestGpuMemoryBufferManager::CreateGpuMemoryBuffer(
-          size, format, usage, surface_handle, shutdown_event);
-    }
-    if (allocate_succeeds_)
-      return base::WrapUnique<gfx::GpuMemoryBuffer>(
-          new StubGpuMemoryBufferImpl(&set_color_space_count_));
-    return nullptr;
-  }
-
- private:
-  bool allocate_succeeds_;
-  size_t set_color_space_count_ = 0;
-};
-
 #if BUILDFLAG(IS_WIN)
 const gpu::SurfaceHandle kFakeSurfaceHandle =
     reinterpret_cast<gpu::SurfaceHandle>(1);
@@ -117,94 +43,82 @@
 const gpu::SurfaceHandle kFakeSurfaceHandle = 1;
 #endif
 
-class BufferQueueTest : public ::testing::Test,
-                        public BufferQueue::SyncTokenProvider {
+class BufferQueueTest : public ::testing::Test {
  public:
   BufferQueueTest() = default;
 
   void SetUp() override {
-    InitWithSharedImageInterface(std::make_unique<TestSharedImageInterface>());
-  }
-
-  void TearDown() override { output_surface_.reset(); }
-
-  gpu::SyncToken GenSyncToken() override { return gpu::SyncToken(); }
-
-  void InitWithSharedImageInterface(
-      std::unique_ptr<TestSharedImageInterface> sii) {
-    context_provider_ = TestContextProvider::Create(std::move(sii));
+    context_provider_ = TestContextProvider::Create(
+        std::make_unique<TestSharedImageInterface>());
     context_provider_->BindToCurrentThread();
-    output_surface_ = std::make_unique<BufferQueue>(
-        context_provider_->SharedImageInterface(), kFakeSurfaceHandle);
-    output_surface_->SetSyncTokenProvider(this);
+    buffer_queue_ = std::make_unique<BufferQueue>(
+        context_provider_->SharedImageInterface(), kFakeSurfaceHandle, 3);
   }
 
-  gpu::Mailbox current_surface() {
-    return output_surface_->current_surface_
-               ? output_surface_->current_surface_->mailbox
+  void TearDown() override { buffer_queue_.reset(); }
+
+  gpu::Mailbox current_buffer() {
+    return buffer_queue_->current_buffer_
+               ? buffer_queue_->current_buffer_->mailbox
                : gpu::Mailbox();
   }
-  const std::vector<std::unique_ptr<BufferQueue::AllocatedSurface>>&
-  available_surfaces() {
-    return output_surface_->available_surfaces_;
+  const base::circular_deque<std::unique_ptr<BufferQueue::AllocatedBuffer>>&
+  available_buffers() {
+    return buffer_queue_->available_buffers_;
   }
-  base::circular_deque<std::unique_ptr<BufferQueue::AllocatedSurface>>&
-  in_flight_surfaces() {
-    return output_surface_->in_flight_surfaces_;
+  base::circular_deque<std::unique_ptr<BufferQueue::AllocatedBuffer>>&
+  in_flight_buffers() {
+    return buffer_queue_->in_flight_buffers_;
   }
 
-  const BufferQueue::AllocatedSurface* displayed_frame() {
-    return output_surface_->displayed_surface_.get();
+  const BufferQueue::AllocatedBuffer* displayed_frame() {
+    return buffer_queue_->displayed_buffer_.get();
   }
-  const BufferQueue::AllocatedSurface* current_frame() {
-    return output_surface_->current_surface_.get();
+  const BufferQueue::AllocatedBuffer* current_frame() {
+    return buffer_queue_->current_buffer_.get();
   }
-  const BufferQueue::AllocatedSurface* next_frame() {
-    return output_surface_->available_surfaces_.back().get();
-  }
-  const gfx::Size size() { return output_surface_->size_; }
+  const gfx::Size size() { return buffer_queue_->size_; }
 
   int CountBuffers() {
-    int n = available_surfaces().size() + in_flight_surfaces().size() +
+    int n = available_buffers().size() + in_flight_buffers().size() +
             (displayed_frame() ? 1 : 0);
-    if (!current_surface().IsZero())
+    if (!current_buffer().IsZero())
       n++;
     return n;
   }
 
   // Check that each buffer is unique if present.
-  void CheckUnique() {
+  bool CheckUnique() {
     std::set<gpu::Mailbox> buffers;
-    EXPECT_TRUE(InsertUnique(&buffers, current_surface()));
-    if (displayed_frame())
-      EXPECT_TRUE(InsertUnique(&buffers, displayed_frame()->mailbox));
-    for (auto& surface : available_surfaces())
-      EXPECT_TRUE(InsertUnique(&buffers, surface->mailbox));
-    for (auto& surface : in_flight_surfaces()) {
-      if (surface)
-        EXPECT_TRUE(InsertUnique(&buffers, surface->mailbox));
+    if (!InsertUnique(&buffers, current_buffer())) {
+      return false;
     }
+    if (displayed_frame() &&
+        !InsertUnique(&buffers, displayed_frame()->mailbox)) {
+      return false;
+    }
+    for (auto& buffer : available_buffers()) {
+      if (!InsertUnique(&buffers, buffer->mailbox)) {
+        return false;
+      }
+    }
+    for (auto& buffer : in_flight_buffers()) {
+      if (buffer && !InsertUnique(&buffers, buffer->mailbox)) {
+        return false;
+      }
+    }
+    return true;
   }
 
-  void SwapBuffers(const gfx::Rect& damage) {
-    output_surface_->SwapBuffers(damage);
-  }
-
-  void SwapBuffers() { SwapBuffers(gfx::Rect(output_surface_->size_)); }
-
   void SendDamagedFrame(const gfx::Rect& damage) {
     // We don't care about the GL-level implementation here, just how it uses
     // damage rects.
-    gpu::SyncToken creation_sync_token;
-    EXPECT_FALSE(output_surface_
-                     ->GetCurrentBuffer(&creation_sync_token,
-                                        /*release_fence=*/nullptr)
-                     .IsZero());
-    SwapBuffers(damage);
-    output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+    buffer_queue_->GetCurrentBuffer();
+    buffer_queue_->SwapBuffers(damage);
+    buffer_queue_->SwapBuffersComplete();
   }
 
-  void SendFullFrame() { SendDamagedFrame(gfx::Rect(output_surface_->size_)); }
+  void SendFullFrame() { SendDamagedFrame(gfx::Rect(buffer_queue_->size_)); }
 
  protected:
   bool InsertUnique(std::set<gpu::Mailbox>* set, gpu::Mailbox value) {
@@ -217,7 +131,7 @@
   }
 
   scoped_refptr<TestContextProvider> context_provider_;
-  std::unique_ptr<BufferQueue> output_surface_;
+  std::unique_ptr<BufferQueue> buffer_queue_;
 };
 
 const gfx::Size screen_size = gfx::Size(30, 30);
@@ -261,18 +175,6 @@
   }
 };
 
-class BufferQueueMockedSharedImageInterfaceTest : public BufferQueueTest {
- public:
-  void SetUp() override {
-    sii_ = new MockedSharedImageInterface();
-    InitWithSharedImageInterface(
-        base::WrapUnique<TestSharedImageInterface>(sii_.get()));
-  }
-
- protected:
-  raw_ptr<MockedSharedImageInterface> sii_;
-};
-
 scoped_refptr<TestContextProvider> CreateMockedSharedImageInterfaceProvider(
     MockedSharedImageInterface** sii) {
   std::unique_ptr<MockedSharedImageInterface> owned_sii(
@@ -284,95 +186,72 @@
   return context_provider;
 }
 
-std::unique_ptr<BufferQueue> CreateBufferQueue(
-    gpu::SharedImageInterface* sii,
-    BufferQueue::SyncTokenProvider* sync_token_provider) {
-  std::unique_ptr<BufferQueue> buffer_queue(
-      new BufferQueue(sii, kFakeSurfaceHandle));
-  buffer_queue->SetSyncTokenProvider(sync_token_provider);
-  return buffer_queue;
-}
-
 TEST(BufferQueueStandaloneTest, BufferCreationAndDestruction) {
   MockedSharedImageInterface* sii;
   scoped_refptr<TestContextProvider> context_provider =
       CreateMockedSharedImageInterfaceProvider(&sii);
-  std::unique_ptr<BufferQueue::SyncTokenProvider> sync_token_provider(
-      new FakeSyncTokenProvider);
-  std::unique_ptr<BufferQueue> output_surface = CreateBufferQueue(
-      context_provider->SharedImageInterface(), sync_token_provider.get());
-
-  EXPECT_TRUE(output_surface->Reshape(screen_size, kBufferQueueColorSpace,
-                                      kBufferQueueFormat));
+  std::unique_ptr<BufferQueue> buffer_queue = std::make_unique<BufferQueue>(
+      context_provider->SharedImageInterface(), kFakeSurfaceHandle, 1);
 
   const gpu::Mailbox expected_mailbox = gpu::Mailbox::GenerateForSharedImage();
   {
     testing::InSequence dummy;
-    EXPECT_CALL(*sii, CreateSharedImage(
-                          _, _, _, _, _,
-                          gpu::SHARED_IMAGE_USAGE_SCANOUT |
-                              gpu::SHARED_IMAGE_USAGE_GLES2_FRAMEBUFFER_HINT,
-                          _))
+    EXPECT_CALL(*sii, CreateSharedImage(_, _, _, _, _,
+                                        gpu::SHARED_IMAGE_USAGE_SCANOUT |
+                                            gpu::SHARED_IMAGE_USAGE_DISPLAY,
+                                        _))
         .WillOnce(Return(expected_mailbox));
     EXPECT_CALL(*sii, DestroySharedImage(_, expected_mailbox));
   }
-  gpu::SyncToken creation_sync_token;
-  EXPECT_EQ(expected_mailbox,
-            output_surface->GetCurrentBuffer(&creation_sync_token,
-                                             /*release_fence=*/nullptr));
+
+  EXPECT_TRUE(buffer_queue->Reshape(screen_size, kBufferQueueColorSpace,
+                                    kBufferQueueFormat));
+  EXPECT_EQ(expected_mailbox, buffer_queue->GetCurrentBuffer());
 }
 
 TEST_F(BufferQueueTest, PartialSwapReuse) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
   SendFullFrame();
   SendDamagedFrame(small_damage);
   SendDamagedFrame(small_damage);
   SendDamagedFrame(large_damage);
   // Verify that the damage has propagated.
-  EXPECT_EQ(next_frame()->damage, large_damage);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), large_damage);
 }
 
 TEST_F(BufferQueueTest, PartialSwapFullFrame) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
   SendFullFrame();
   SendDamagedFrame(small_damage);
   SendFullFrame();
   SendFullFrame();
-  EXPECT_EQ(next_frame()->damage, screen_rect);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), screen_rect);
 }
 
 // Make sure that each time we swap buffers, the damage gets propagated to the
 // previously swapped buffers.
 TEST_F(BufferQueueTest, PartialSwapWithTripleBuffering) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_EQ(0, CountBuffers());
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  EXPECT_EQ(3, CountBuffers());
+
   SendFullFrame();
   SendFullFrame();
   // Let's triple buffer.
-  gpu::SyncToken creation_sync_token;
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  SwapBuffers(small_damage);
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(3, CountBuffers());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  buffer_queue_->SwapBuffers(small_damage);
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
   // The whole buffer needs to be redrawn since it's a newly allocated buffer
-  EXPECT_EQ(output_surface_->CurrentBufferDamage(), screen_rect);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), screen_rect);
 
   SendDamagedFrame(overlapping_damage);
   // The next buffer should include damage from |overlapping_damage| and
   // |small_damage|.
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  const auto current_buffer_damage = output_surface_->CurrentBufferDamage();
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  const auto current_buffer_damage = buffer_queue_->CurrentBufferDamage();
   EXPECT_TRUE(current_buffer_damage.Contains(overlapping_damage));
   EXPECT_TRUE(current_buffer_damage.Contains(small_damage));
 
@@ -381,313 +260,286 @@
 }
 
 TEST_F(BufferQueueTest, PartialSwapOverlapping) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
 
   SendFullFrame();
   SendDamagedFrame(small_damage);
   SendDamagedFrame(overlapping_damage);
-  EXPECT_EQ(next_frame()->damage, overlapping_damage);
+  // Expect small_damage UNION overlapping_damage
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), gfx::Rect(0, 0, 10, 20));
 }
 
 TEST_F(BufferQueueTest, MultipleGetCurrentBufferCalls) {
   // It is not valid to call GetCurrentBuffer without having set an initial
   // size via Reshape.
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
-  // Check that multiple bind calls do not create or change surfaces.
-  gpu::SyncToken creation_sync_token;
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(1, CountBuffers());
-  gpu::Mailbox fb = current_surface();
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(1, CountBuffers());
-  EXPECT_EQ(fb, current_surface());
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  // Check that multiple bind calls do not create or change buffers.
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  gpu::Mailbox fb = buffer_queue_->GetCurrentBuffer();
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_EQ(fb, buffer_queue_->GetCurrentBuffer());
 }
 
 TEST_F(BufferQueueTest, CheckDoubleBuffering) {
   // Check buffer flow through double buffering path.
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+
+  // Create a BufferQueue with only 2 buffers.
+  buffer_queue_ = std::make_unique<BufferQueue>(
+      context_provider_->SharedImageInterface(), kFakeSurfaceHandle, 2);
+
   EXPECT_EQ(0, CountBuffers());
-  gpu::SyncToken creation_sync_token;
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(1, CountBuffers());
-  EXPECT_FALSE(current_surface().IsZero());
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  EXPECT_EQ(2, CountBuffers());
+
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
   EXPECT_FALSE(displayed_frame());
-  SwapBuffers();
-  EXPECT_EQ(1U, in_flight_surfaces().size());
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  EXPECT_EQ(0U, in_flight_surfaces().size());
+
+  buffer_queue_->SwapBuffers(screen_rect);
+
+  EXPECT_EQ(1U, in_flight_buffers().size());
+  buffer_queue_->SwapBuffersComplete();
+
+  EXPECT_EQ(0U, in_flight_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(2, CountBuffers());
-  CheckUnique();
-  EXPECT_FALSE(current_surface().IsZero());
-  EXPECT_EQ(0U, in_flight_surfaces().size());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_EQ(0U, in_flight_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  SwapBuffers();
-  CheckUnique();
-  EXPECT_EQ(1U, in_flight_surfaces().size());
+  buffer_queue_->SwapBuffers(screen_rect);
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_EQ(1U, in_flight_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  CheckUnique();
-  EXPECT_EQ(0U, in_flight_surfaces().size());
-  EXPECT_EQ(1U, available_surfaces().size());
+  buffer_queue_->SwapBuffersComplete();
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_EQ(0U, in_flight_buffers().size());
+  EXPECT_EQ(1U, available_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(2, CountBuffers());
-  CheckUnique();
-  EXPECT_TRUE(available_surfaces().empty());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_TRUE(available_buffers().empty());
 }
 
 TEST_F(BufferQueueTest, CheckTripleBuffering) {
   // Check buffer flow through triple buffering path.
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_EQ(0, CountBuffers());
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  EXPECT_EQ(3, CountBuffers());
 
   // This bit is the same sequence tested in the doublebuffering case.
-  gpu::SyncToken creation_sync_token;
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
   EXPECT_FALSE(displayed_frame());
-  SwapBuffers();
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  SwapBuffers();
+  buffer_queue_->SwapBuffers(screen_rect);
+  buffer_queue_->SwapBuffersComplete();
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  buffer_queue_->SwapBuffers(screen_rect);
 
-  EXPECT_EQ(2, CountBuffers());
-  CheckUnique();
-  EXPECT_EQ(1U, in_flight_surfaces().size());
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_EQ(1U, in_flight_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_EQ(3, CountBuffers());
-  CheckUnique();
-  EXPECT_FALSE(current_surface().IsZero());
-  EXPECT_EQ(1U, in_flight_surfaces().size());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_EQ(1U, in_flight_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  EXPECT_EQ(3, CountBuffers());
-  CheckUnique();
-  EXPECT_FALSE(current_surface().IsZero());
-  EXPECT_EQ(0U, in_flight_surfaces().size());
+  buffer_queue_->SwapBuffersComplete();
+  EXPECT_TRUE(CheckUnique());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+  EXPECT_EQ(0U, in_flight_buffers().size());
   EXPECT_FALSE(displayed_frame()->mailbox.IsZero());
-  EXPECT_EQ(1U, available_surfaces().size());
+  EXPECT_EQ(1U, available_buffers().size());
 }
 
 TEST_F(BufferQueueTest, CheckEmptySwap) {
   // It is not valid to call GetCurrentBuffer without having set an initial
   // size via Reshape.
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
-  // Check empty swap flow, in which the damage is empty and BindFramebuffer
-  // might not be called.
-  EXPECT_EQ(0, CountBuffers());
-  gpu::SyncToken creation_sync_token;
-  gpu::Mailbox mailbox = output_surface_->GetCurrentBuffer(
-      &creation_sync_token, /*release_fence=*/nullptr);
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  // Check empty swap flow, in which the damage is empty.
+  gpu::Mailbox mailbox = buffer_queue_->GetCurrentBuffer();
   EXPECT_FALSE(mailbox.IsZero());
-  EXPECT_EQ(1, CountBuffers());
-  EXPECT_FALSE(current_surface().IsZero());
+  EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
   EXPECT_FALSE(displayed_frame());
 
-  SwapBuffers();
+  buffer_queue_->SwapBuffers(gfx::Rect());
   // Make sure we won't be drawing to the buffer we just sent for scanout.
-  gpu::SyncToken new_creation_sync_token;
-  gpu::Mailbox new_mailbox = output_surface_->GetCurrentBuffer(
-      &new_creation_sync_token, /*release_fence=*/nullptr);
+  gpu::Mailbox new_mailbox = buffer_queue_->GetCurrentBuffer();
   EXPECT_FALSE(new_mailbox.IsZero());
   EXPECT_NE(mailbox, new_mailbox);
 
-  EXPECT_EQ(1U, in_flight_surfaces().size());
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+  EXPECT_EQ(1U, in_flight_buffers().size());
+  buffer_queue_->SwapBuffersComplete();
 
-  // Test swapbuffers without calling BindFramebuffer. DirectRenderer skips
-  // BindFramebuffer if not necessary.
-  SwapBuffers();
-  SwapBuffers();
-  EXPECT_EQ(2U, in_flight_surfaces().size());
+  buffer_queue_->SwapBuffers(gfx::Rect());
+  // Test SwapBuffers() without calling GetCurrentBuffer().
+  buffer_queue_->SwapBuffers(gfx::Rect());
+  EXPECT_EQ(2U, in_flight_buffers().size());
 
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  EXPECT_EQ(1U, in_flight_surfaces().size());
+  buffer_queue_->SwapBuffersComplete();
+  EXPECT_EQ(1U, in_flight_buffers().size());
 
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  EXPECT_EQ(0U, in_flight_surfaces().size());
+  buffer_queue_->SwapBuffersComplete();
+  EXPECT_EQ(0U, in_flight_buffers().size());
 }
 
 TEST_F(BufferQueueTest, CheckCorrectBufferOrdering) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
   const size_t kSwapCount = 3;
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::SyncToken creation_sync_token;
-    EXPECT_FALSE(
-        output_surface_
-            ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-            .IsZero());
-    SwapBuffers();
+    EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+    buffer_queue_->SwapBuffers(screen_rect);
   }
 
-  EXPECT_EQ(kSwapCount, in_flight_surfaces().size());
+  EXPECT_EQ(kSwapCount, in_flight_buffers().size());
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::Mailbox next_mailbox = in_flight_surfaces().front()->mailbox;
-    output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+    gpu::Mailbox next_mailbox = in_flight_buffers().front()->mailbox;
+    buffer_queue_->SwapBuffersComplete();
     EXPECT_EQ(displayed_frame()->mailbox, next_mailbox);
   }
 }
 
-TEST_F(BufferQueueTest, ReshapeWithInFlightSurfaces) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+TEST_F(BufferQueueTest, ReshapeWithInFlightBuffers) {
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
   const size_t kSwapCount = 3;
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::SyncToken creation_sync_token;
-    EXPECT_FALSE(
-        output_surface_
-            ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-            .IsZero());
-    SwapBuffers();
+    EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+    buffer_queue_->SwapBuffers(screen_rect);
   }
 
-  EXPECT_TRUE(output_surface_->Reshape(
-      gfx::Size(10, 20), kBufferQueueColorSpace, kBufferQueueFormat));
-  EXPECT_EQ(3u, in_flight_surfaces().size());
+  EXPECT_TRUE(buffer_queue_->Reshape(gfx::Size(10, 20), kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  EXPECT_EQ(3u, in_flight_buffers().size());
+  EXPECT_EQ(3u, available_buffers().size());
+  // The inflight images are destroyed, but the buffers are still around for
+  // now, in addition to the newly created buffers.
+  EXPECT_EQ(6, CountBuffers());
 
   for (size_t i = 0; i < kSwapCount; ++i) {
-    output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+    buffer_queue_->SwapBuffersComplete();
     EXPECT_FALSE(displayed_frame());
   }
 
-  // The dummy surfacess left should be discarded.
-  EXPECT_EQ(0u, available_surfaces().size());
+  // The dummy buffers left should be discarded.
+  EXPECT_EQ(3u, available_buffers().size());
 }
 
 TEST_F(BufferQueueTest, SwapAfterReshape) {
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
   const size_t kSwapCount = 3;
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::SyncToken creation_sync_token;
-    EXPECT_FALSE(
-        output_surface_
-            ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-            .IsZero());
-    SwapBuffers();
+    EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+    buffer_queue_->SwapBuffers(screen_rect);
   }
 
-  EXPECT_TRUE(output_surface_->Reshape(
-      gfx::Size(10, 20), kBufferQueueColorSpace, kBufferQueueFormat));
+  EXPECT_TRUE(buffer_queue_->Reshape(gfx::Size(10, 20), kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
 
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::SyncToken creation_sync_token;
-    EXPECT_FALSE(
-        output_surface_
-            ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-            .IsZero());
-    SwapBuffers();
+    EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+    buffer_queue_->SwapBuffers(screen_rect);
   }
-  EXPECT_EQ(2 * kSwapCount, in_flight_surfaces().size());
+  EXPECT_EQ(2 * kSwapCount, in_flight_buffers().size());
 
   for (size_t i = 0; i < kSwapCount; ++i) {
-    output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+    buffer_queue_->SwapBuffersComplete();
     EXPECT_FALSE(displayed_frame());
   }
 
-  CheckUnique();
+  EXPECT_TRUE(CheckUnique());
 
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::Mailbox next_mailbox = in_flight_surfaces().front()->mailbox;
-    output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+    gpu::Mailbox next_mailbox = in_flight_buffers().front()->mailbox;
+    buffer_queue_->SwapBuffersComplete();
     EXPECT_EQ(displayed_frame()->mailbox, next_mailbox);
     EXPECT_TRUE(displayed_frame());
   }
 
   for (size_t i = 0; i < kSwapCount; ++i) {
-    gpu::SyncToken creation_sync_token;
-    EXPECT_FALSE(
-        output_surface_
-            ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-            .IsZero());
-    SwapBuffers();
-    output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
+    EXPECT_FALSE(buffer_queue_->GetCurrentBuffer().IsZero());
+    buffer_queue_->SwapBuffers(screen_rect);
+    buffer_queue_->SwapBuffersComplete();
   }
 }
 
-TEST_F(BufferQueueMockedSharedImageInterfaceTest, AllocateFails) {
-  const gpu::Mailbox expected_mailbox = gpu::Mailbox::GenerateForSharedImage();
-  EXPECT_TRUE(output_surface_->Reshape(screen_size, kBufferQueueColorSpace,
-                                       kBufferQueueFormat));
-  EXPECT_CALL(*sii_, CreateSharedImage(
-                         _, _, _, _, _,
-                         gpu::SHARED_IMAGE_USAGE_SCANOUT |
-                             gpu::SHARED_IMAGE_USAGE_GLES2_FRAMEBUFFER_HINT,
-                         _))
-      .WillOnce(Return(expected_mailbox))
-      .WillOnce(Return(gpu::Mailbox()))  // Fail the next surface allocation.
-      .WillRepeatedly(Return(expected_mailbox));
+TEST_F(BufferQueueTest, SwapBuffersSkipped) {
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+  SendDamagedFrame(small_damage);
+  SendDamagedFrame(small_damage);
+  SendDamagedFrame(small_damage);
 
-  EXPECT_CALL(*sii_, DestroySharedImage(_, expected_mailbox)).Times(3);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
 
-  // Succeed in the two swaps.
-  gpu::SyncToken creation_sync_token;
-  const gpu::Mailbox result_mailbox = output_surface_->GetCurrentBuffer(
-      &creation_sync_token, /*release_fence=*/nullptr);
-  EXPECT_FALSE(result_mailbox.IsZero());
-  EXPECT_EQ(result_mailbox, expected_mailbox);
-  EXPECT_TRUE(current_frame());
-  SwapBuffers(screen_rect);
+  auto mailbox1 = buffer_queue_->GetCurrentBuffer();
+  buffer_queue_->SwapBuffersSkipped(large_damage);
+  auto mailbox2 = buffer_queue_->GetCurrentBuffer();
 
-  EXPECT_TRUE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_FALSE(current_frame());
-  SwapBuffers(screen_rect);
-  EXPECT_FALSE(current_frame());
+  // SwapBuffersSkipped() didn't advance the current buffer.
+  EXPECT_EQ(mailbox1, mailbox2);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
 
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  SwapBuffers(small_damage);
+  // Swap on the next frame with no additional damage.
+  buffer_queue_->SwapBuffers(gfx::Rect());
+  buffer_queue_->SwapBuffersComplete();
 
-  // Destroy the just-created buffer, and try another swap.
-  output_surface_->PageFlipComplete(/*release_fence=*/gfx::GpuFenceHandle());
-  output_surface_->FreeSurface(
-      std::move(output_surface_->in_flight_surfaces_.back()), gpu::SyncToken());
-  EXPECT_EQ(2u, in_flight_surfaces().size());
-  for (auto& surface : in_flight_surfaces())
-    EXPECT_FALSE(surface);
-  EXPECT_FALSE(
-      output_surface_
-          ->GetCurrentBuffer(&creation_sync_token, /*release_fence=*/nullptr)
-          .IsZero());
-  EXPECT_TRUE(current_frame());
-  EXPECT_TRUE(displayed_frame());
-  SwapBuffers(small_damage);
+  // The next frame has the damage from the last SwapBuffersSkipped().
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), large_damage);
+}
+
+TEST_F(BufferQueueTest, EnsureMinNumberOfBuffers) {
+  EXPECT_EQ(CountBuffers(), 0);
+
+  buffer_queue_->EnsureMinNumberOfBuffers(4);
+
+  // EnsureMinNumberOfBuffers does nothing before Reshape() is called.
+  EXPECT_EQ(CountBuffers(), 0);
+
+  EXPECT_TRUE(buffer_queue_->Reshape(screen_size, kBufferQueueColorSpace,
+                                     kBufferQueueFormat));
+
+  EXPECT_EQ(CountBuffers(), 4);
+
+  buffer_queue_->EnsureMinNumberOfBuffers(2);
+
+  // EnsureMinNumberOfBuffers will never decrease the number of buffers.
+  EXPECT_EQ(CountBuffers(), 4);
+
+  SendDamagedFrame(small_damage);
+  SendDamagedFrame(small_damage);
+  SendDamagedFrame(small_damage);
+  SendDamagedFrame(small_damage);
+
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
+
+  buffer_queue_->EnsureMinNumberOfBuffers(5);
+
+  EXPECT_EQ(CountBuffers(), 5);
+
+  // 3 of the existing buffers will be in available_buffers_ already, with
+  // existing small_damage.
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
+  SendDamagedFrame(small_damage);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
+  SendDamagedFrame(small_damage);
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
+  SendDamagedFrame(small_damage);
+
+  // The new buffer will come next with full damage.
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), screen_rect);
+  SendDamagedFrame(small_damage);
+
+  // Finally the buffer that was being displayed while we added the 5th buffer
+  // will also have small damage.
+  EXPECT_EQ(buffer_queue_->CurrentBufferDamage(), small_damage);
+  SendDamagedFrame(small_damage);
 }
 
 }  // namespace viz
diff --git a/components/viz/service/display_embedder/output_presenter_fuchsia.cc b/components/viz/service/display_embedder/output_presenter_fuchsia.cc
index 6d74abd..a451f62 100644
--- a/components/viz/service/display_embedder/output_presenter_fuchsia.cc
+++ b/components/viz/service/display_embedder/output_presenter_fuchsia.cc
@@ -113,10 +113,11 @@
             /*needs_gl_image=*/false);
     DCHECK(scoped_overlay_read_access_);
 
-    // Take ownership of acquire fences.
-    for (auto& gpu_fence : scoped_overlay_read_access_->TakeAcquireFences()) {
-      read_begin_fences_.push_back(gpu_fence.GetGpuFenceHandle().Clone());
-    }
+    // Take ownership of acquire fence.
+    gfx::GpuFenceHandle gpu_fence_handle =
+        scoped_overlay_read_access_->TakeAcquireFence();
+    if (!gpu_fence_handle.is_null())
+      read_begin_fences_.push_back(std::move(gpu_fence_handle));
   }
 
   // A new release fence is generated for each present. The fence for the last
diff --git a/components/viz/service/display_embedder/output_presenter_gl.cc b/components/viz/service/display_embedder/output_presenter_gl.cc
index ed20a6f..a101152 100644
--- a/components/viz/service/display_embedder/output_presenter_gl.cc
+++ b/components/viz/service/display_embedder/output_presenter_gl.cc
@@ -39,11 +39,10 @@
 
 namespace {
 
-// Helper function for moving a GpuFence from a vector to a unique_ptr.
-std::unique_ptr<gfx::GpuFence> TakeGpuFence(std::vector<gfx::GpuFence> fences) {
-  DCHECK(fences.empty() || fences.size() == 1u);
-  return fences.empty() ? nullptr
-                        : std::make_unique<gfx::GpuFence>(std::move(fences[0]));
+// Helper function for moving a GpuFence from a fence handle to a unique_ptr.
+std::unique_ptr<gfx::GpuFence> TakeGpuFence(gfx::GpuFenceHandle fence) {
+  return fence.is_null() ? nullptr
+                         : std::make_unique<gfx::GpuFence>(std::move(fence));
 }
 
 class PresenterImageGL : public OutputPresenter::Image {
@@ -148,7 +147,7 @@
     std::unique_ptr<gfx::GpuFence>* fence) {
   DCHECK(scoped_overlay_read_access_);
   if (fence) {
-    *fence = TakeGpuFence(scoped_overlay_read_access_->TakeAcquireFences());
+    *fence = TakeGpuFence(scoped_overlay_read_access_->TakeAcquireFence());
   }
   return scoped_overlay_read_access_->gl_image();
 }
@@ -425,7 +424,7 @@
 #endif
     gl_surface_->ScheduleOverlayPlane(
         gl_image,
-        (access ? TakeGpuFence(access->TakeAcquireFences())
+        (access ? TakeGpuFence(access->TakeAcquireFence())
                 : std::move(acquire_fence)),
         gfx::OverlayPlaneData(
             overlay_plane_candidate.plane_z_order,
diff --git a/content/browser/fenced_frame/fenced_frame_browsertest.cc b/content/browser/fenced_frame/fenced_frame_browsertest.cc
index c920f2a..e0b781b 100644
--- a/content/browser/fenced_frame/fenced_frame_browsertest.cc
+++ b/content/browser/fenced_frame/fenced_frame_browsertest.cc
@@ -955,6 +955,31 @@
   fenced_frame_rfh->GetRenderWidgetHost()->ForwardMouseEvent(mouse_event);
 }
 
+// Test that WebContents::GetFocusedFrame includes results from a fenced
+// frame's frame tree.
+IN_PROC_BROWSER_TEST_F(FencedFrameBrowserTest, FocusedFrameInFencedFrame) {
+  ASSERT_TRUE(https_server()->Start());
+  const GURL url = https_server()->GetURL("c.test", "/title1.html");
+  ASSERT_TRUE(NavigateToURL(shell(), url));
+
+  const GURL fenced_frame_url =
+      https_server()->GetURL("c.test", "/fenced_frames/title1.html");
+  RenderFrameHostImplWrapper fenced_frame_rfh(
+      fenced_frame_test_helper().CreateFencedFrame(primary_main_frame_host(),
+                                                   fenced_frame_url));
+
+  // NavigateToURL sets initial focus, which is why GetFocusedFrame doesn't
+  // start as null.
+  EXPECT_EQ(web_contents()->GetFocusedFrame(), primary_main_frame_host());
+
+  FrameFocusedObserver focus_observer(fenced_frame_rfh.get());
+  // ExecJs runs with a user gesture which is needed for the fenced frame to be
+  // allowed to take focus.
+  EXPECT_TRUE(ExecJs(fenced_frame_rfh.get(), "window.focus()"));
+  focus_observer.Wait();
+  EXPECT_EQ(web_contents()->GetFocusedFrame(), fenced_frame_rfh.get());
+}
+
 IN_PROC_BROWSER_TEST_F(FencedFrameBrowserTest,
                        ProcessAllocationWithFullSiteIsolation) {
   ASSERT_TRUE(https_server()->Start());
diff --git a/content/browser/lock_screen/lock_screen_storage_impl.cc b/content/browser/lock_screen/lock_screen_storage_impl.cc
index fb6eb29..01a04817 100644
--- a/content/browser/lock_screen/lock_screen_storage_impl.cc
+++ b/content/browser/lock_screen/lock_screen_storage_impl.cc
@@ -74,7 +74,7 @@
   std::vector<std::string> result;
   if (!read.status().ok())
     return result;
-  for (auto kv : read.settings().DictItems()) {
+  for (auto kv : read.settings()) {
     result.push_back(kv.first);
   }
 
@@ -192,4 +192,4 @@
   Init(browser_context, base_path);
 }
 
-}  // namespace content
\ No newline at end of file
+}  // namespace content
diff --git a/content/browser/portal/portal.cc b/content/browser/portal/portal.cc
index d56ae8f..8094b9eb 100644
--- a/content/browser/portal/portal.cc
+++ b/content/browser/portal/portal.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/callback_helpers.h"
+#include "base/check_op.h"
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/stringprintf.h"
@@ -226,6 +227,11 @@
 void Portal::Navigate(const GURL& url,
                       blink::mojom::ReferrerPtr referrer,
                       NavigateCallback callback) {
+  // |RenderFrameHostImpl::CreatePortal| doesn't allow portals to be created in
+  // a prerender page.
+  DCHECK_NE(RenderFrameHost::LifecycleState::kPrerendering,
+            owner_render_frame_host_->GetLifecycleState());
+
   if (!url.SchemeIsHTTPOrHTTPS()) {
     mojo::ReportBadMessage("Portal::Navigate tried to use non-HTTP protocol.");
     DestroySelf();  // Also deletes |this|.
diff --git a/content/browser/portal/portal_browsertest.cc b/content/browser/portal/portal_browsertest.cc
index 2c6a3acf..59370194 100644
--- a/content/browser/portal/portal_browsertest.cc
+++ b/content/browser/portal/portal_browsertest.cc
@@ -1800,6 +1800,20 @@
   EXPECT_EQ(pending_url, activated_controller.GetEntryAtIndex(1)->GetURL());
 }
 
+namespace {
+
+// Returns which RenderFrameHost is focused within a given portal's frame tree.
+RenderFrameHostImpl* GetFocusedFrameWithinPortalFrameTree(
+    WebContentsImpl* portal_contents) {
+  FrameTreeNode* focused_node =
+      portal_contents->GetPrimaryFrameTree().GetFocusedFrame();
+  if (!focused_node)
+    return nullptr;
+  return focused_node->current_frame_host();
+}
+
+}  // namespace
+
 IN_PROC_BROWSER_TEST_F(PortalBrowserTest, DidFocusIPCFromFrameInsidePortal) {
   EXPECT_TRUE(NavigateToURL(
       shell(), embedded_test_server()->GetURL("portal.test", "/title1.html")));
@@ -1825,6 +1839,7 @@
   EXPECT_EQ(web_contents_impl->GetFocusedWebContents(), web_contents_impl);
   EXPECT_EQ(web_contents_impl->GetFocusedFrame(), main_frame);
   EXPECT_EQ(portal_contents->GetFocusedFrame(), nullptr);
+  EXPECT_EQ(GetFocusedFrameWithinPortalFrameTree(portal_contents), nullptr);
 
   // Simulate renderer sending LocalFrameHost::DidFocusFrame IPC.
   RenderFrameHostImpl* iframe =
@@ -1835,7 +1850,8 @@
   // focused frame should have updated.
   EXPECT_EQ(web_contents_impl->GetFocusedWebContents(), web_contents_impl);
   EXPECT_EQ(web_contents_impl->GetFocusedFrame(), main_frame);
-  EXPECT_EQ(portal_contents->GetFocusedFrame(), iframe);
+  EXPECT_EQ(portal_contents->GetFocusedFrame(), nullptr);
+  EXPECT_EQ(GetFocusedFrameWithinPortalFrameTree(portal_contents), iframe);
 }
 
 IN_PROC_BROWSER_TEST_F(PortalBrowserTest,
@@ -1868,6 +1884,7 @@
   EXPECT_EQ(web_contents_impl->GetFocusedWebContents(), web_contents_impl);
   EXPECT_EQ(web_contents_impl->GetFocusedFrame(), main_frame);
   EXPECT_EQ(portal_contents->GetFocusedFrame(), nullptr);
+  EXPECT_EQ(GetFocusedFrameWithinPortalFrameTree(portal_contents), nullptr);
 
   FrameTreeNode* iframe_ftn = portal_main_frame->child_at(0);
   RenderFrameHostImpl* rfhi = iframe_ftn->current_frame_host();
@@ -1882,7 +1899,8 @@
   // focused frame should have updated.
   EXPECT_EQ(web_contents_impl->GetFocusedWebContents(), web_contents_impl);
   EXPECT_EQ(web_contents_impl->GetFocusedFrame(), main_frame);
-  EXPECT_EQ(portal_contents->GetFocusedFrame(), rfhi);
+  EXPECT_EQ(portal_contents->GetFocusedFrame(), nullptr);
+  EXPECT_EQ(GetFocusedFrameWithinPortalFrameTree(portal_contents), rfhi);
 }
 
 IN_PROC_BROWSER_TEST_F(PortalBrowserTest, DidFocusIPCFromOrphanedPortal) {
@@ -1901,6 +1919,7 @@
   EXPECT_EQ(web_contents_impl->GetFocusedWebContents(), web_contents_impl);
   EXPECT_EQ(web_contents_impl->GetFocusedFrame(), main_frame);
   EXPECT_EQ(portal_contents->GetFocusedFrame(), nullptr);
+  EXPECT_EQ(GetFocusedFrameWithinPortalFrameTree(portal_contents), nullptr);
   EXPECT_TRUE(main_frame->GetRenderWidgetHost()->is_focused());
 
   // Activate portal, keep in orphaned state for a while, and then adopt and
@@ -1949,7 +1968,9 @@
   // Adoption is complete, so |web_contents_impl_| is no longer orphaned and is
   // an inner WebContents.
   EXPECT_EQ(web_contents_impl->GetFocusedWebContents(), portal_contents);
-  EXPECT_EQ(web_contents_impl->GetFocusedFrame(), main_frame);
+  EXPECT_EQ(web_contents_impl->GetFocusedFrame(), nullptr);
+  EXPECT_EQ(GetFocusedFrameWithinPortalFrameTree(web_contents_impl),
+            main_frame);
   EXPECT_FALSE(main_frame->GetRenderWidgetHost()->is_focused());
 }
 
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc
index 8ef4239d..28bbdef 100644
--- a/content/browser/prerender/prerender_browsertest.cc
+++ b/content/browser/prerender/prerender_browsertest.cc
@@ -29,6 +29,7 @@
 #include "components/services/storage/public/mojom/test_api.test-mojom.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "content/browser/file_system_access/file_system_chooser_test_helpers.h"
+#include "content/browser/portal/portal.h"
 #include "content/browser/prerender/prerender_host.h"
 #include "content/browser/prerender/prerender_host_registry.h"
 #include "content/browser/prerender/prerender_metrics.h"
@@ -71,6 +72,8 @@
 #include "content/shell/browser/shell_content_browser_client.h"
 #include "content/test/content_browser_test_utils_internal.h"
 #include "content/test/mock_commit_deferring_condition.h"
+#include "content/test/portal/portal_activated_observer.h"
+#include "content/test/portal/portal_created_observer.h"
 #include "content/test/render_document_feature.h"
 #include "content/test/test_content_browser_client.h"
 #include "content/test/test_mojo_binder_policy_applier_unittest.mojom.h"
@@ -6079,4 +6082,130 @@
                          PrerenderFencedFrameBrowserTest,
                          testing::Bool());
 
+namespace {
+
+class PrerenderPortalBrowserTest : public PrerenderBrowserTest {
+ public:
+  PrerenderPortalBrowserTest() {
+    scoped_feature_list_.InitWithFeatures(
+        /*enabled_features=*/{blink::features::kPortals},
+        /*disabled_features=*/{});
+  }
+  ~PrerenderPortalBrowserTest() override = default;
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+}  // namespace
+
+// Test that the Prerender skips Portal element in a prerendered page.
+IN_PROC_BROWSER_TEST_F(PrerenderPortalBrowserTest, DeferPortalForPrerender) {
+  const GURL kInitialUrl = GetUrl("/empty.html");
+  const GURL kPrerenderingUrl = GetUrl("/title1.html");
+  const GURL kPortalUrl = GetUrl("/title2.html");
+
+  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
+
+  int host_id = AddPrerender(kPrerenderingUrl);
+
+  // Adds a Portal to the prerendered page.
+  auto* prerendered_rfh = GetPrerenderedMainFrameHost(host_id);
+  ASSERT_TRUE(
+      ExecJs(prerendered_rfh,
+             JsReplace("{"
+                       "  let portal = document.createElement('portal');"
+                       "  portal.src = $1;"
+                       "  document.body.appendChild(portal);"
+                       "}",
+                       kPortalUrl)));
+
+  // Since we defer the Portal creation, we expect no child frames.
+  ASSERT_EQ(prerendered_rfh->GetPortals().size(), 0UL);
+
+  PortalCreatedObserver portal_created_observer(prerendered_rfh);
+  // Activates the prerender page. The Portal is created.
+  NavigatePrimaryPage(kPrerenderingUrl);
+
+  auto* primary_main_rfh =
+      static_cast<RenderFrameHostImpl*>(web_contents()->GetPrimaryMainFrame());
+  ASSERT_EQ(primary_main_rfh, prerendered_rfh);
+
+  Portal* portal = portal_created_observer.WaitUntilPortalCreated();
+  ASSERT_NE(nullptr, portal);
+  auto* portal_contents = portal->GetPortalContents();
+  TestNavigationObserver portal_wc_observer(portal_contents, 1);
+  portal_wc_observer.Wait();
+  ASSERT_EQ(kPortalUrl, portal_wc_observer.last_navigation_url());
+
+  // Since the Portal is now created after navigation to the prerender page, we
+  // expect one child frame.
+  ASSERT_EQ(prerendered_rfh->GetPortals().size(), 1UL);
+
+  // The rest of this test asserts the correct behavior of the Portal.
+
+  // Ensures the portal is NOT the current tab
+  ASSERT_NE(nullptr, portal_contents);
+  ASSERT_NE(portal_contents, web_contents());
+
+  // Installs the adoption script to Portal's frame.
+  auto* portal_frame = portal_contents->GetPrimaryMainFrame();
+  ASSERT_TRUE(ExecJs(portal_frame,
+                     "window.addEventListener('portalactivate', e => { "
+                     "  const portal = e.adoptPredecessor(document); "
+                     "  document.body.appendChild(portal); "
+                     "});"));
+
+  // Activates the portal. We expect successful activation of the portal, and
+  // the previous WebContents is adopted in a new portal.
+  PortalActivatedObserver activated_observer(portal);
+  PortalCreatedObserver adoption_observer(portal_frame);
+  ExecuteScriptAsync(primary_main_rfh,
+                     "document.querySelector('portal').activate();");
+  ASSERT_EQ(blink::mojom::PortalActivateResult::kPredecessorWasAdopted,
+            activated_observer.WaitForActivateResult());
+  adoption_observer.WaitUntilPortalCreated();
+}
+
+// Tests that the portal is deleted when the embedding page is prerendered.
+IN_PROC_BROWSER_TEST_F(PrerenderPortalBrowserTest, DeleteDeferredPortal) {
+  const GURL kInitialUrl = GetUrl("/empty.html");
+  const GURL kPrerenderingUrl = GetUrl("/title1.html");
+  const GURL kPortalUrl = GetUrl("/title2.html");
+
+  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
+
+  int host_id = AddPrerender(kPrerenderingUrl);
+
+  // Adds a Portal to the prerendered page.
+  auto* prerendered_rfh = GetPrerenderedMainFrameHost(host_id);
+  ASSERT_TRUE(
+      ExecJs(prerendered_rfh,
+             JsReplace("{"
+                       "  let portal = document.createElement('portal');"
+                       "  portal.src = $1;"
+                       "  document.body.appendChild(portal);"
+                       "}",
+                       kPortalUrl)));
+
+  // Since we defer the Portal creation, we expect no child frames.
+  ASSERT_EQ(prerendered_rfh->GetPortals().size(), 0UL);
+
+  // Deletes the portal before navigating to the prerendered page. This will
+  // result in the |HTMLPortalElement| being disconnected.
+  ASSERT_TRUE(
+      ExecJs(prerendered_rfh,
+             "document.body.removeChild(document.querySelector('portal'));"));
+
+  // Activates the prerender page.
+  NavigatePrimaryPage(kPrerenderingUrl);
+
+  auto* primary_main_rfh =
+      static_cast<RenderFrameHostImpl*>(web_contents()->GetPrimaryMainFrame());
+  ASSERT_EQ(primary_main_rfh, prerendered_rfh);
+
+  // The activated prerender page shall have no child.
+  ASSERT_EQ(prerendered_rfh->GetPortals().size(), 0UL);
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/input/input_device_change_observer.h b/content/browser/renderer_host/input/input_device_change_observer.h
index 76d51a6..5c700f4 100644
--- a/content/browser/renderer_host/input/input_device_change_observer.h
+++ b/content/browser/renderer_host/input/input_device_change_observer.h
@@ -31,7 +31,8 @@
   void OnInputDeviceConfigurationChanged(uint8_t input_device_types) override;
 
  private:
-  raw_ptr<RenderViewHostImpl> render_view_host_impl_;
+  // TODO(crbug.com/1298696): Breaks extensions_unittests.
+  raw_ptr<RenderViewHostImpl, DegradeToNoOpWhenMTE> render_view_host_impl_;
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_frame_host_delegate.cc b/content/browser/renderer_host/render_frame_host_delegate.cc
index 36ccf06..faebf4a9 100644
--- a/content/browser/renderer_host/render_frame_host_delegate.cc
+++ b/content/browser/renderer_host/render_frame_host_delegate.cc
@@ -99,7 +99,7 @@
 }
 
 RenderFrameHostImpl*
-RenderFrameHostDelegate::GetFocusedFrameIncludingInnerWebContents() {
+RenderFrameHostDelegate::GetFocusedFrameIncludingInnerFrameTrees() {
   return nullptr;
 }
 
diff --git a/content/browser/renderer_host/render_frame_host_delegate.h b/content/browser/renderer_host/render_frame_host_delegate.h
index 0a259ad..63c82977 100644
--- a/content/browser/renderer_host/render_frame_host_delegate.h
+++ b/content/browser/renderer_host/render_frame_host_delegate.h
@@ -361,14 +361,10 @@
   // initializations instead.
   virtual bool IsInnerWebContentsForGuest();
 
-  // Searches the WebContents for a focused frame, potentially in an inner
-  // WebContents. If this WebContents has no focused frame, returns |nullptr|.
-  // If there is no inner WebContents at the focused tree node, returns its
-  // RenderFrameHost. If there is an inner WebContents, search it for focused
-  // frames and inner contents. If an inner WebContents does not have a focused
-  // frame, return its main frame, since the attachment frame in its outer
-  // WebContents is not live.
-  virtual RenderFrameHostImpl* GetFocusedFrameIncludingInnerWebContents();
+  // Returns the focused frame if it exists, potentially in an inner frame tree.
+  // If an inner frame tree has focus, but doesn't have a focused frame, returns
+  // the inner frame tree's main frame. Otherwise returns nullptr.
+  virtual RenderFrameHostImpl* GetFocusedFrameIncludingInnerFrameTrees();
 
   // Called by when |source_rfh| advances focus to a RenderFrameProxyHost.
   virtual void OnAdvanceFocus(RenderFrameHostImpl* source_rfh) {}
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 3f177327..61c4302 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -7387,6 +7387,16 @@
     return;
   }
 
+  // If a Portal is nested inside a prerendered page, its owning RFH is also
+  // |kPrerendering|. In this case the creation of the Portal is deferred from
+  // the renderer.
+  if (GetLifecycleState() == RenderFrameHost::LifecycleState::kPrerendering) {
+    frame_host_associated_receiver_.ReportBadMessage(
+        "RenderFrameHostImpl::CreatePortal cannot be called when the RFH is "
+        "being prerendered.");
+    return;
+  }
+
   // We don't support attaching a portal inside a nested browsing context or
   // inside a fenced frame.
   if (!is_main_frame() || IsFencedFrameRoot()) {
@@ -9969,7 +9979,7 @@
     return ui::AXTreeIDUnknown();
 
   auto* focused_frame = static_cast<RenderFrameHostImpl*>(
-      delegate_->GetFocusedFrameIncludingInnerWebContents());
+      delegate_->GetFocusedFrameIncludingInnerFrameTrees());
   if (focused_frame)
     return focused_frame->GetAXTreeID();
 
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 31c37aa0..9d3ef7d 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1315,9 +1315,23 @@
 }
 
 RenderFrameHostImpl* WebContentsImpl::GetFocusedFrame() {
-  FrameTreeNode* focused_node = primary_frame_tree_.GetFocusedFrame();
-  if (!focused_node)
+  // If this method is called on an inner WebContents, don't return frames from
+  // outside of the inner WebContents's subtree.
+  if (GetOuterWebContents() && !ContainsOrIsFocusedWebContents()) {
     return nullptr;
+  }
+
+  FrameTreeNode* focused_node = GetFocusedFrameTree()->GetFocusedFrame();
+  if (!focused_node) {
+    return nullptr;
+  }
+
+  // If an inner frame tree has focus, we should return a RenderFrameHost from
+  // the inner frame tree and not the placeholder RenderFrameHost.
+  DCHECK_EQ(
+      focused_node->current_frame_host()->inner_tree_main_frame_tree_node_id(),
+      FrameTreeNode::kFrameTreeNodeInvalidId);
+
   return focused_node->current_frame_host();
 }
 
@@ -7841,30 +7855,22 @@
 }
 
 RenderFrameHostImpl*
-WebContentsImpl::GetFocusedFrameIncludingInnerWebContents() {
+WebContentsImpl::GetFocusedFrameIncludingInnerFrameTrees() {
   OPTIONAL_TRACE_EVENT0(
-      "content", "WebContentsImpl::GetFocusedFrameIncludingInnerWebContents");
-  WebContentsImpl* contents = this;
-  FrameTreeNode* focused_node = contents->primary_frame_tree_.GetFocusedFrame();
-
-  // If there is no focused frame in the outer WebContents, we need to return
-  // null.
-  if (!focused_node)
-    return nullptr;
-
-  // If the focused frame is embedding an inner WebContents, we must descend
-  // into that contents. If the current WebContents does not have a focused
-  // frame, return the main frame of this contents instead of the focused empty
-  // frame embedding this contents.
-  while (true) {
-    contents = contents->node_.GetInnerWebContentsInFrame(focused_node);
-    if (!contents)
-      return focused_node->current_frame_host();
-
-    focused_node = contents->primary_frame_tree_.GetFocusedFrame();
-    if (!focused_node)
-      return contents->GetPrimaryMainFrame();
+      "content", "WebContentsImpl::GetFocusedFrameIncludingInnerFrameTrees");
+  auto* focused_frame = GetFocusedFrame();
+  if (focused_frame) {
+    return focused_frame;
   }
+
+  // If there is no focused frame in the primary frame tree, we need to return
+  // null. If an inner frame tree has focus, but doesn't have a focused frame,
+  // treat its main frame as having focus.
+  if (GetFocusedFrameTree() != &primary_frame_tree_) {
+    return GetFocusedFrameTree()->root()->current_frame_host();
+  }
+
+  return nullptr;
 }
 
 void WebContentsImpl::OnAdvanceFocus(RenderFrameHostImpl* source_rfh) {
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index f5fbdbd..02fbb81 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -661,7 +661,7 @@
       const GURL& url) override;
   void SetFocusedFrame(FrameTreeNode* node, SiteInstanceGroup* source) override;
   void DidCallFocus() override;
-  RenderFrameHostImpl* GetFocusedFrameIncludingInnerWebContents() override;
+  RenderFrameHostImpl* GetFocusedFrameIncludingInnerFrameTrees() override;
   void OnFocusedElementChangedInFrame(
       RenderFrameHostImpl* frame,
       const gfx::Rect& bounds_in_root_view,
diff --git a/content/browser/webid/README.md b/content/browser/webid/README.md
index 2affc8a..96e78e9 100644
--- a/content/browser/webid/README.md
+++ b/content/browser/webid/README.md
@@ -34,8 +34,8 @@
    IDP and showing appropriate UI (e.g., account chooser, permission dialog) to the user. Most of
    the implementation of this step lives in this directory.
 1. A successful authentication request often results in an [OIDC
-   idtoken](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) being generated by the
-   IDP. This idtoken is then passed to the RP renderer process via the mojo interface.
+   token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) being generated by the
+   IDP. This token is then passed to the RP renderer process via the mojo interface.
 1. A failed request often results in passing an appropriate error message to the RP renderer
    process via the mojo interface.
 1. The RP renderer process resolves or rejects the returned promise based on the response that it
@@ -87,7 +87,7 @@
 possible for the final id token generated by the IDP to be for a different account (as denoted by its
 `subject` field in the OIDC). This is considered a bug and it is because the browser currently does not
 have any enforcement to ensure these two accounts are the same. The browser may (and probably will)
-add such enforcements after its starts inspecting the returned idtoken so this behavior should not
+add such enforcements after its starts inspecting the returned token so this behavior should not
 be relied upon.
 
 
diff --git a/content/browser/webid/fedcm_metrics.cc b/content/browser/webid/fedcm_metrics.cc
index 99e16ba..6c33ed9 100644
--- a/content/browser/webid/fedcm_metrics.cc
+++ b/content/browser/webid/fedcm_metrics.cc
@@ -78,15 +78,14 @@
   UMA_HISTOGRAM_MEDIUM_TIMES("Blink.FedCm.Timing.CancelOnDialog", duration);
 }
 
-void RecordIdTokenResponseAndTurnaroundTime(
-    base::TimeDelta id_token_response_time,
-    base::TimeDelta turnaround_time,
-    ukm::SourceId source_id,
-    const GURL& provider) {
+void RecordTokenResponseAndTurnaroundTime(base::TimeDelta token_response_time,
+                                          base::TimeDelta turnaround_time,
+                                          ukm::SourceId source_id,
+                                          const GURL& provider) {
   auto RecordUkm = [&](auto& ukm_builder) {
     ukm_builder
         .SetTiming_IdTokenResponse(ukm::GetExponentialBucketMinForUserTiming(
-            id_token_response_time.InMilliseconds()))
+            token_response_time.InMilliseconds()))
         .SetTiming_TurnaroundTime(ukm::GetExponentialBucketMinForUserTiming(
             turnaround_time.InMilliseconds()));
     ukm_builder.Record(ukm::UkmRecorder::Get());
@@ -99,14 +98,14 @@
   RecordUkm(fedcm_idp_builder);
 
   UMA_HISTOGRAM_MEDIUM_TIMES("Blink.FedCm.Timing.IdTokenResponse",
-                             id_token_response_time);
+                             token_response_time);
   UMA_HISTOGRAM_MEDIUM_TIMES("Blink.FedCm.Timing.TurnaroundTime",
                              turnaround_time);
 }
 
-void RecordRequestIdTokenStatus(FedCmRequestIdTokenStatus status,
-                                ukm::SourceId source_id,
-                                const GURL& provider) {
+void RecordRequestTokenStatus(FedCmRequestIdTokenStatus status,
+                              ukm::SourceId source_id,
+                              const GURL& provider) {
   auto RecordUkm = [&](auto& ukm_builder) {
     ukm_builder.SetStatus_RequestIdToken(static_cast<int>(status));
     ukm_builder.Record(ukm::UkmRecorder::Get());
diff --git a/content/browser/webid/fedcm_metrics.h b/content/browser/webid/fedcm_metrics.h
index d213a1f..c760b92 100644
--- a/content/browser/webid/fedcm_metrics.h
+++ b/content/browser/webid/fedcm_metrics.h
@@ -71,18 +71,17 @@
                               const GURL& provider);
 
 // Records the time from when the user presses the Continue button to when the
-// idtoken response is received. Also records the overall time from when the API
-// is called to when the idtoken response is received.
-void RecordIdTokenResponseAndTurnaroundTime(
-    base::TimeDelta id_token_response_time,
-    base::TimeDelta turnaround_time,
-    ukm::SourceId source_id,
-    const GURL& provider);
+// token response is received. Also records the overall time from when the API
+// is called to when the token response is received.
+void RecordTokenResponseAndTurnaroundTime(base::TimeDelta token_response_time,
+                                          base::TimeDelta turnaround_time,
+                                          ukm::SourceId source_id,
+                                          const GURL& provider);
 
-// Records the status of the |RequestIdToken| call.
-void RecordRequestIdTokenStatus(FedCmRequestIdTokenStatus status,
-                                ukm::SourceId source_id,
-                                const GURL& provider);
+// Records the status of the |RequestToken| call.
+void RecordRequestTokenStatus(FedCmRequestIdTokenStatus status,
+                              ukm::SourceId source_id,
+                              const GURL& provider);
 
 // Records whether the user selected account is for sign-in or not.
 void RecordIsSignInUser(bool is_sign_in);
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc
index a6e828a..d7f99f0 100644
--- a/content/browser/webid/federated_auth_request_impl.cc
+++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -32,17 +32,17 @@
 
 using blink::mojom::FederatedAuthRequestResult;
 using blink::mojom::LogoutRpsStatus;
-using blink::mojom::RequestIdTokenStatus;
+using blink::mojom::RequestTokenStatus;
 using FederatedApiPermissionStatus =
     content::FederatedIdentityApiPermissionContextDelegate::PermissionStatus;
-using IdTokenStatus = content::FedCmRequestIdTokenStatus;
+using TokenStatus = content::FedCmRequestIdTokenStatus;
 using LoginState = content::IdentityRequestAccount::LoginState;
 using SignInMode = content::IdentityRequestAccount::SignInMode;
 
 namespace content {
 
 namespace {
-static constexpr base::TimeDelta kDefaultIdTokenRequestDelay = base::Seconds(3);
+static constexpr base::TimeDelta kDefaultTokenRequestDelay = base::Seconds(3);
 // TODO(yigu): We need to make sure the delay is greater than the time required
 // for a successful flow based on `Blink.FedCm.Timing.TurnaroundTime`.
 // https://crbug.com/1298316.
@@ -156,11 +156,11 @@
       return "The provider's id token endpoint cannot be found.";
     }
     case FederatedAuthRequestResult::kErrorFetchingIdTokenNoResponse: {
-      return "The provider's id token fetch resulted in an error response "
+      return "The provider's token fetch resulted in an error response "
              "code.";
     }
     case FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidResponse: {
-      return "Provider's id token is invalid.";
+      return "Provider's token is invalid.";
     }
     case FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidRequest: {
       return "The id token fetching request is invalid.";
@@ -169,7 +169,7 @@
       return "The request has been aborted.";
     }
     case FederatedAuthRequestResult::kError: {
-      return "Error retrieving an id token.";
+      return "Error retrieving a token.";
     }
     case FederatedAuthRequestResult::kSuccess: {
       DCHECK(false);
@@ -178,22 +178,22 @@
   }
 }
 
-RequestIdTokenStatus FederatedAuthRequestResultToRequestIdTokenStatus(
+RequestTokenStatus FederatedAuthRequestResultToRequestTokenStatus(
     FederatedAuthRequestResult result) {
   // Avoids exposing to renderer detailed error messages which may leak cross
   // site information to the API call site.
   switch (result) {
     case FederatedAuthRequestResult::kSuccess: {
-      return RequestIdTokenStatus::kSuccess;
+      return RequestTokenStatus::kSuccess;
     }
     case FederatedAuthRequestResult::kApprovalDeclined: {
-      return RequestIdTokenStatus::kApprovalDeclined;
+      return RequestTokenStatus::kApprovalDeclined;
     }
     case FederatedAuthRequestResult::kErrorTooManyRequests: {
-      return RequestIdTokenStatus::kErrorTooManyRequests;
+      return RequestTokenStatus::kErrorTooManyRequests;
     }
     case FederatedAuthRequestResult::kErrorCanceled: {
-      return RequestIdTokenStatus::kErrorCanceled;
+      return RequestTokenStatus::kErrorCanceled;
     }
     case FederatedAuthRequestResult::kErrorDisabledInSettings:
     case FederatedAuthRequestResult::kErrorFetchingManifestListHttpNotFound:
@@ -218,7 +218,7 @@
     case FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidResponse:
     case FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidRequest:
     case FederatedAuthRequestResult::kError: {
-      return RequestIdTokenStatus::kError;
+      return RequestTokenStatus::kError;
     }
   }
 }
@@ -234,7 +234,7 @@
                    kRequestRejectionDelay,
                    this,
                    &FederatedAuthRequestImpl::OnRejectRequest),
-      id_token_request_delay_(kDefaultIdTokenRequestDelay) {}
+      token_request_delay_(kDefaultTokenRequestDelay) {}
 
 FederatedAuthRequestImpl::~FederatedAuthRequestImpl() {
   // Ensures key data members are destructed in proper order and resolves any
@@ -250,9 +250,9 @@
     // either. We record `kUnhandledRequest` only when the user refreshed,
     // closed or left the page while the UI is displayed.
     if (!errors_logged_to_console_) {
-      RecordRequestIdTokenStatus(IdTokenStatus::kUnhandledRequest,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kUnhandledRequest,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
     }
     CompleteRequest(FederatedAuthRequestResult::kError, "",
                     /*should_call_callback=*/true);
@@ -271,16 +271,16 @@
   new FederatedAuthRequestImpl(host, std::move(receiver));
 }
 
-void FederatedAuthRequestImpl::RequestIdToken(const GURL& provider,
-                                              const std::string& client_id,
-                                              const std::string& nonce,
-                                              bool prefer_auto_sign_in,
-                                              RequestIdTokenCallback callback) {
+void FederatedAuthRequestImpl::RequestToken(const GURL& provider,
+                                            const std::string& client_id,
+                                            const std::string& nonce,
+                                            bool prefer_auto_sign_in,
+                                            RequestTokenCallback callback) {
   if (HasPendingRequest()) {
-    RecordRequestIdTokenStatus(IdTokenStatus::kTooManyRequests,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
-    std::move(callback).Run(RequestIdTokenStatus::kErrorTooManyRequests, "");
+    RecordRequestTokenStatus(TokenStatus::kTooManyRequests,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
+    std::move(callback).Run(RequestTokenStatus::kErrorTooManyRequests, "");
     return;
   }
 
@@ -301,9 +301,9 @@
 
   network_manager_ = CreateNetworkManager(provider);
   if (!network_manager_) {
-    RecordRequestIdTokenStatus(IdTokenStatus::kNoNetworkManager,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+    RecordRequestTokenStatus(TokenStatus::kNoNetworkManager,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
     // TODO(yigu): this is due to provider url being non-secure. We should
     // reject early in the renderer process.
     CompleteRequest(FederatedAuthRequestResult::kError, "",
@@ -314,23 +314,23 @@
   FederatedApiPermissionStatus permission_status =
       GetApiPermissionContext()->GetApiPermissionStatus(origin());
 
-  absl::optional<IdTokenStatus> error_id_token_status;
+  absl::optional<TokenStatus> error_token_status;
   FederatedAuthRequestResult request_result =
       FederatedAuthRequestResult::kError;
 
   switch (permission_status) {
     case FederatedApiPermissionStatus::BLOCKED_VARIATIONS:
-      error_id_token_status = IdTokenStatus::kDisabledInFlags;
+      error_token_status = TokenStatus::kDisabledInFlags;
       break;
     case FederatedApiPermissionStatus::BLOCKED_THIRD_PARTY_COOKIES_BLOCKED:
-      error_id_token_status = IdTokenStatus::kThirdPartyCookiesBlocked;
+      error_token_status = TokenStatus::kThirdPartyCookiesBlocked;
       break;
     case FederatedApiPermissionStatus::BLOCKED_SETTINGS:
-      error_id_token_status = IdTokenStatus::kDisabledInSettings;
+      error_token_status = TokenStatus::kDisabledInSettings;
       request_result = FederatedAuthRequestResult::kErrorDisabledInSettings;
       break;
     case FederatedApiPermissionStatus::BLOCKED_EMBARGO:
-      error_id_token_status = IdTokenStatus::kDisabledEmbargo;
+      error_token_status = TokenStatus::kDisabledEmbargo;
       request_result = FederatedAuthRequestResult::kErrorDisabledInSettings;
       break;
     case FederatedApiPermissionStatus::GRANTED:
@@ -341,10 +341,10 @@
       break;
   }
 
-  if (error_id_token_status) {
-    RecordRequestIdTokenStatus(*error_id_token_status,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+  if (error_token_status) {
+    RecordRequestTokenStatus(*error_token_status,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
     CompleteRequest(request_result, "", /*should_call_callback=*/false);
     return;
   }
@@ -360,9 +360,8 @@
 
   // Dialog will be hidden by the destructor for request_dialog_controller_,
   // triggered by CompleteRequest.
-  RecordRequestIdTokenStatus(IdTokenStatus::kAborted,
-                             render_frame_host_->GetPageUkmSourceId(),
-                             provider_);
+  RecordRequestTokenStatus(TokenStatus::kAborted,
+                           render_frame_host_->GetPageUkmSourceId(), provider_);
   CompleteRequest(FederatedAuthRequestResult::kErrorCanceled, "",
                   /*should_call_callback=*/true);
 }
@@ -476,9 +475,9 @@
     const std::set<GURL>& urls) {
   switch (status) {
     case IdpNetworkRequestManager::FetchStatus::kHttpNotFoundError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kManifestListHttpNotFound,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kManifestListHttpNotFound,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingManifestListHttpNotFound,
           "",
@@ -486,18 +485,18 @@
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kNoResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kManifestListNoResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kManifestListNoResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingManifestListNoResponse, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kInvalidResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kManifestListInvalidResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kManifestListInvalidResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingManifestListInvalidResponse,
           "",
@@ -514,9 +513,9 @@
   }
 
   if (urls.size() > kMaxProvidersInManifestList) {
-    RecordRequestIdTokenStatus(IdTokenStatus::kManifestListTooBig,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+    RecordRequestTokenStatus(TokenStatus::kManifestListTooBig,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
     CompleteRequest(FederatedAuthRequestResult::kErrorManifestListTooBig, "",
                     /*should_call_callback=*/false);
     return;
@@ -548,9 +547,9 @@
   bool provider_url_is_valid = (urls.count(provider_url) != 0);
 
   if (!provider_url_is_valid) {
-    RecordRequestIdTokenStatus(IdTokenStatus::kManifestNotInManifestList,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+    RecordRequestTokenStatus(TokenStatus::kManifestNotInManifestList,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
     CompleteRequest(FederatedAuthRequestResult::kErrorManifestNotInManifestList,
                     "",
                     /*should_call_callback=*/false);
@@ -568,27 +567,27 @@
     IdentityProviderMetadata idp_metadata) {
   switch (status) {
     case IdpNetworkRequestManager::FetchStatus::kHttpNotFoundError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kManifestHttpNotFound,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kManifestHttpNotFound,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingManifestHttpNotFound, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kNoResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kManifestNoResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kManifestNoResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingManifestNoResponse, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kInvalidResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kManifestInvalidResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kManifestInvalidResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse, "",
           /*should_call_callback=*/false);
@@ -628,9 +627,9 @@
     }
     render_frame_host_->AddMessageToConsole(
         blink::mojom::ConsoleMessageLevel::kError, message);
-    RecordRequestIdTokenStatus(IdTokenStatus::kManifestInvalidResponse,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+    RecordRequestTokenStatus(TokenStatus::kManifestInvalidResponse,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
     CompleteRequest(
         FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse, "",
         /*should_call_callback=*/false);
@@ -670,27 +669,27 @@
     IdpNetworkRequestManager::AccountList accounts) {
   switch (status) {
     case IdpNetworkRequestManager::FetchStatus::kHttpNotFoundError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kAccountsHttpNotFound,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kAccountsHttpNotFound,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingAccountsHttpNotFound, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kNoResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kAccountsNoResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kAccountsNoResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingAccountsNoResponse, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kInvalidResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kAccountsInvalidResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kAccountsInvalidResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingAccountsInvalidResponse, "",
           /*should_call_callback=*/false);
@@ -769,9 +768,9 @@
   // have time to disable the FedCM API in other types of requests.
   if (GetApiPermissionContext()->GetApiPermissionStatus(origin()) !=
       FederatedApiPermissionStatus::GRANTED) {
-    RecordRequestIdTokenStatus(IdTokenStatus::kDisabledInSettings,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+    RecordRequestTokenStatus(TokenStatus::kDisabledInSettings,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
 
     CompleteRequest(FederatedAuthRequestResult::kErrorDisabledInSettings, "",
                     /*should_call_callback=*/false);
@@ -784,9 +783,9 @@
     RecordCancelOnDialogTime(dismiss_dialog_time - show_accounts_dialog_time_,
                              render_frame_host_->GetPageUkmSourceId(),
                              provider_);
-    RecordRequestIdTokenStatus(IdTokenStatus::kNotSelectAccount,
-                               render_frame_host_->GetPageUkmSourceId(),
-                               provider_);
+    RecordRequestTokenStatus(TokenStatus::kNotSelectAccount,
+                             render_frame_host_->GetPageUkmSourceId(),
+                             provider_);
 
     if (should_embargo && GetApiPermissionContext()) {
       GetApiPermissionContext()->RecordDismissAndEmbargo(origin());
@@ -826,58 +825,58 @@
   // When fetching id tokens we show a "Verify" sheet to users in case fetching
   // takes a long time due to latency etc.. In case that the fetching process is
   // fast, we still want to show the "Verify" sheet for at least
-  // |id_token_request_delay_| seconds for better UX.
-  id_token_response_time_ = base::TimeTicks::Now();
-  base::TimeDelta fetch_time = id_token_response_time_ - select_account_time_;
+  // |token_request_delay_| seconds for better UX.
+  token_response_time_ = base::TimeTicks::Now();
+  base::TimeDelta fetch_time = token_response_time_ - select_account_time_;
   if (ShouldCompleteRequestImmediately() ||
-      fetch_time >= id_token_request_delay_) {
-    CompleteIdTokenRequest(status, id_token);
+      fetch_time >= token_request_delay_) {
+    CompleteTokenRequest(status, id_token);
     return;
   }
 
   base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
       FROM_HERE,
-      base::BindOnce(&FederatedAuthRequestImpl::CompleteIdTokenRequest,
+      base::BindOnce(&FederatedAuthRequestImpl::CompleteTokenRequest,
                      weak_ptr_factory_.GetWeakPtr(), status, id_token),
-      id_token_request_delay_ - fetch_time);
+      token_request_delay_ - fetch_time);
 }
 
-void FederatedAuthRequestImpl::CompleteIdTokenRequest(
+void FederatedAuthRequestImpl::CompleteTokenRequest(
     IdpNetworkRequestManager::FetchStatus status,
-    const std::string& id_token) {
+    const std::string& token) {
   DCHECK(!start_time_.is_null());
   switch (status) {
     case IdpNetworkRequestManager::FetchStatus::kHttpNotFoundError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kIdTokenHttpNotFound,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kIdTokenHttpNotFound,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingIdTokenHttpNotFound, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kNoResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kIdTokenNoResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kIdTokenNoResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingIdTokenNoResponse, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kInvalidRequestError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kIdTokenInvalidRequest,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kIdTokenInvalidRequest,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidRequest, "",
           /*should_call_callback=*/false);
       return;
     }
     case IdpNetworkRequestManager::FetchStatus::kInvalidResponseError: {
-      RecordRequestIdTokenStatus(IdTokenStatus::kIdTokenInvalidResponse,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kIdTokenInvalidResponse,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
       CompleteRequest(
           FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidResponse, "",
           /*should_call_callback=*/false);
@@ -907,14 +906,14 @@
             origin(), url::Origin::Create(provider_), account_id_);
       }
 
-      RecordIdTokenResponseAndTurnaroundTime(
-          id_token_response_time_ - select_account_time_,
-          id_token_response_time_ - start_time_,
+      RecordTokenResponseAndTurnaroundTime(
+          token_response_time_ - select_account_time_,
+          token_response_time_ - start_time_,
           render_frame_host_->GetPageUkmSourceId(), provider_);
-      RecordRequestIdTokenStatus(IdTokenStatus::kSuccess,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
-      CompleteRequest(FederatedAuthRequestResult::kSuccess, id_token,
+      RecordRequestTokenStatus(TokenStatus::kSuccess,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
+      CompleteRequest(FederatedAuthRequestResult::kSuccess, token,
                       /*should_call_callback=*/true);
       return;
     }
@@ -989,8 +988,8 @@
   if (should_call_callback || ShouldCompleteRequestImmediately()) {
     errors_logged_to_console_ = false;
 
-    RequestIdTokenStatus status =
-        FederatedAuthRequestResultToRequestIdTokenStatus(result);
+    RequestTokenStatus status =
+        FederatedAuthRequestResultToRequestTokenStatus(result);
     std::move(auth_request_callback_).Run(status, id_token);
   }
 }
@@ -1004,7 +1003,7 @@
   start_time_ = base::TimeTicks();
   show_accounts_dialog_time_ = base::TimeTicks();
   select_account_time_ = base::TimeTicks();
-  id_token_response_time_ = base::TimeTicks();
+  token_response_time_ = base::TimeTicks();
   manifest_list_checked_ = false;
   idp_metadata_.reset();
 }
@@ -1070,9 +1069,9 @@
   return GetContentClient()->browser()->CreateIdentityRequestDialogController();
 }
 
-void FederatedAuthRequestImpl::SetIdTokenRequestDelayForTests(
+void FederatedAuthRequestImpl::SetTokenRequestDelayForTests(
     base::TimeDelta delay) {
-  id_token_request_delay_ = delay;
+  token_request_delay_ = delay;
 }
 
 void FederatedAuthRequestImpl::SetNetworkManagerForTests(
@@ -1143,9 +1142,9 @@
     // either. We record `kUserInterfaceTimedOut` only when the UI is displayed
     // and then time out without user interaction.
     if (!errors_logged_to_console_) {
-      RecordRequestIdTokenStatus(IdTokenStatus::kUserInterfaceTimedOut,
-                                 render_frame_host_->GetPageUkmSourceId(),
-                                 provider_);
+      RecordRequestTokenStatus(TokenStatus::kUserInterfaceTimedOut,
+                               render_frame_host_->GetPageUkmSourceId(),
+                               provider_);
     }
     CompleteRequest(FederatedAuthRequestResult::kError, "",
                     /*should_call_callback=*/true);
diff --git a/content/browser/webid/federated_auth_request_impl.h b/content/browser/webid/federated_auth_request_impl.h
index 3209832c..16b7fda 100644
--- a/content/browser/webid/federated_auth_request_impl.h
+++ b/content/browser/webid/federated_auth_request_impl.h
@@ -50,16 +50,16 @@
   ~FederatedAuthRequestImpl() override;
 
   // blink::mojom::FederatedAuthRequest:
-  void RequestIdToken(const GURL& provider,
-                      const std::string& client_id,
-                      const std::string& nonce,
-                      bool prefer_auto_sign_in,
-                      RequestIdTokenCallback) override;
+  void RequestToken(const GURL& provider,
+                    const std::string& client_id,
+                    const std::string& nonce,
+                    bool prefer_auto_sign_in,
+                    RequestTokenCallback) override;
   void CancelTokenRequest() override;
   void LogoutRps(std::vector<blink::mojom::LogoutRpsRequestPtr> logout_requests,
                  LogoutRpsCallback) override;
 
-  void SetIdTokenRequestDelayForTests(base::TimeDelta delay);
+  void SetTokenRequestDelayForTests(base::TimeDelta delay);
   void SetNetworkManagerForTests(
       std::unique_ptr<IdpNetworkRequestManager> manager);
   void SetDialogControllerForTests(
@@ -106,14 +106,14 @@
   void OnAccountSelected(const std::string& account_id,
                          bool is_sign_in,
                          bool should_embargo);
-  void CompleteIdTokenRequest(IdpNetworkRequestManager::FetchStatus status,
-                              const std::string& id_token);
+  void CompleteTokenRequest(IdpNetworkRequestManager::FetchStatus status,
+                            const std::string& token);
   void OnTokenResponseReceived(IdpNetworkRequestManager::FetchStatus status,
-                               const std::string& id_token);
+                               const std::string& token);
   void DispatchOneLogout();
   void OnLogoutCompleted();
   void CompleteRequest(blink::mojom::FederatedAuthRequestResult,
-                       const std::string& id_token,
+                       const std::string& token,
                        bool should_call_callback);
   void CompleteLogoutRequest(blink::mojom::LogoutRpsStatus);
 
@@ -196,11 +196,11 @@
   base::TimeTicks start_time_;
   base::TimeTicks show_accounts_dialog_time_;
   base::TimeTicks select_account_time_;
-  base::TimeTicks id_token_response_time_;
+  base::TimeTicks token_response_time_;
   base::DelayTimer delay_timer_;
-  base::TimeDelta id_token_request_delay_;
+  base::TimeDelta token_request_delay_;
   bool errors_logged_to_console_{false};
-  RequestIdTokenCallback auth_request_callback_;
+  RequestTokenCallback auth_request_callback_;
 
   base::queue<blink::mojom::LogoutRpsRequestPtr> logout_requests_;
   LogoutRpsCallback logout_callback_;
diff --git a/content/browser/webid/federated_auth_request_impl_unittest.cc b/content/browser/webid/federated_auth_request_impl_unittest.cc
index 8bfd4ac..6e3ae06 100644
--- a/content/browser/webid/federated_auth_request_impl_unittest.cc
+++ b/content/browser/webid/federated_auth_request_impl_unittest.cc
@@ -44,14 +44,14 @@
 using blink::mojom::LogoutRpsRequest;
 using blink::mojom::LogoutRpsRequestPtr;
 using blink::mojom::LogoutRpsStatus;
-using blink::mojom::RequestIdTokenStatus;
+using blink::mojom::RequestTokenStatus;
 using AccountList = content::IdpNetworkRequestManager::AccountList;
 using ApiPermissionStatus =
     content::FederatedIdentityApiPermissionContextDelegate::PermissionStatus;
 using FedCmEntry = ukm::builders::Blink_FedCm;
 using FedCmIdpEntry = ukm::builders::Blink_FedCmIdp;
 using FetchStatus = content::IdpNetworkRequestManager::FetchStatus;
-using IdTokenStatus = content::FedCmRequestIdTokenStatus;
+using TokenStatus = content::FedCmRequestIdTokenStatus;
 using LoginState = content::IdentityRequestAccount::LoginState;
 using SignInMode = content::IdentityRequestAccount::SignInMode;
 using UserApproval = content::IdentityRequestDialogController::UserApproval;
@@ -94,7 +94,7 @@
 
 static const std::set<std::string> kManifestList{kProviderUrl};
 
-// Parameters for a call to RequestIdToken.
+// Parameters for a call to RequestToken.
 struct RequestParameters {
   const char* provider;
   const char* client_id;
@@ -112,15 +112,15 @@
 };
 
 // All endpoints which are fetched in a successful
-// FederatedAuthRequestImpl::RequestIdToken() request.
-int FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN =
+// FederatedAuthRequestImpl::RequestToken() request.
+int FETCH_ENDPOINT_ALL_REQUEST_TOKEN =
     FetchedEndpoint::MANIFEST | FetchedEndpoint::CLIENT_METADATA |
     FetchedEndpoint::ACCOUNTS | FetchedEndpoint::TOKEN |
     FetchedEndpoint::MANIFEST_LIST;
 
-// Expected return values from a call to RequestIdToken.
+// Expected return values from a call to RequestToken.
 struct RequestExpectations {
-  absl::optional<RequestIdTokenStatus> return_status;
+  absl::optional<RequestTokenStatus> return_status;
   absl::optional<FederatedAuthRequestResult> devtools_issue_status;
   // Any combination of FetchedEndpoint flags.
   int fetched_endpoints;
@@ -185,8 +185,8 @@
     "" /* post_request_body */};
 
 static const RequestExpectations kExpectationSuccess{
-    RequestIdTokenStatus::kSuccess, FederatedAuthRequestResult::kSuccess,
-    FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN};
+    RequestTokenStatus::kSuccess, FederatedAuthRequestResult::kSuccess,
+    FETCH_ENDPOINT_ALL_REQUEST_TOKEN};
 
 // Helper class for receiving the mojo method callback.
 class AuthRequestCallbackHelper {
@@ -198,11 +198,11 @@
   AuthRequestCallbackHelper& operator=(const AuthRequestCallbackHelper&) =
       delete;
 
-  absl::optional<RequestIdTokenStatus> status() const { return status_; }
+  absl::optional<RequestTokenStatus> status() const { return status_; }
   absl::optional<std::string> token() const { return token_; }
 
   // This can only be called once per lifetime of this object.
-  base::OnceCallback<void(RequestIdTokenStatus,
+  base::OnceCallback<void(RequestTokenStatus,
                           const absl::optional<std::string>&)>
   callback() {
     return base::BindOnce(&AuthRequestCallbackHelper::ReceiverMethod,
@@ -220,7 +220,7 @@
   }
 
  private:
-  void ReceiverMethod(RequestIdTokenStatus status,
+  void ReceiverMethod(RequestTokenStatus status,
                       const absl::optional<std::string>& token) {
     CHECK(!was_called_);
     status_ = status;
@@ -231,7 +231,7 @@
 
   bool was_called_ = false;
   base::RunLoop wait_for_callback_loop_;
-  absl::optional<RequestIdTokenStatus> status_;
+  absl::optional<RequestTokenStatus> status_;
   absl::optional<std::string> token_;
 };
 
@@ -535,7 +535,7 @@
         std::make_unique<TestIdpNetworkRequestManager>();
     SetNetworkRequestManager(std::move(network_request_manager));
 
-    federated_auth_request_impl_->SetIdTokenRequestDelayForTests(
+    federated_auth_request_impl_->SetTokenRequestDelayForTests(
         base::TimeDelta());
   }
 
@@ -559,7 +559,7 @@
         request_parameters.nonce, request_parameters.prefer_auto_sign_in,
         configuration.wait_for_callback);
     ASSERT_EQ(auth_response.first, expectation.return_status);
-    if (auth_response.first == RequestIdTokenStatus::kSuccess) {
+    if (auth_response.first == RequestTokenStatus::kSuccess) {
       EXPECT_EQ(configuration.token, auth_response.second);
     } else {
       EXPECT_TRUE(auth_response.second == absl::nullopt ||
@@ -572,7 +572,7 @@
     if (expectation.devtools_issue_status) {
       int issue_count = main_test_rfh()->GetFederatedAuthRequestIssueCount(
           *expectation.devtools_issue_status);
-      if (auth_response.first == RequestIdTokenStatus::kSuccess) {
+      if (auth_response.first == RequestTokenStatus::kSuccess) {
         EXPECT_EQ(0, issue_count);
       } else {
         EXPECT_LT(0, issue_count);
@@ -609,8 +609,7 @@
              "error response code."},
             {FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse,
              "Provider's FedCM manifest configuration is invalid."},
-            {FederatedAuthRequestResult::kError,
-             "Error retrieving an id token."},
+            {FederatedAuthRequestResult::kError, "Error retrieving a token."},
             {FederatedAuthRequestResult::kErrorFetchingAccountsNoResponse,
              "The provider's accounts list fetch resulted in an error response "
              "code."},
@@ -633,7 +632,7 @@
              "Provider's client metadata is missing or has an invalid privacy "
              "policy url."},
             {FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidResponse,
-             "Provider's id token is invalid."},
+             "Provider's token is invalid."},
         };
     std::vector<std::string> messages =
         RenderFrameHostTester::For(main_rfh())->GetConsoleMessages();
@@ -647,15 +646,14 @@
     }
   }
 
-  std::pair<absl::optional<RequestIdTokenStatus>, absl::optional<std::string>>
+  std::pair<absl::optional<RequestTokenStatus>, absl::optional<std::string>>
   PerformAuthRequest(const GURL& provider,
                      const std::string& client_id,
                      const std::string& nonce,
                      bool prefer_auto_sign_in,
                      bool wait_for_callback) {
-    request_remote_->RequestIdToken(provider, client_id, nonce,
-                                    prefer_auto_sign_in,
-                                    auth_helper_.callback());
+    request_remote_->RequestToken(provider, client_id, nonce,
+                                  prefer_auto_sign_in, auth_helper_.callback());
     // Ensure that the request makes its way to FederatedAuthRequestImpl.
     request_remote_.FlushForTesting();
     if (wait_for_callback) {
@@ -726,23 +724,23 @@
 
   ukm::TestAutoSetUkmRecorder* ukm_recorder() { return ukm_recorder_.get(); }
 
-  void ExpectRequestIdTokenStatusUKM(IdTokenStatus status) {
-    ExpectRequestIdTokenStatusUKMInternal(status, FedCmEntry::kEntryName);
-    ExpectRequestIdTokenStatusUKMInternal(status, FedCmIdpEntry::kEntryName);
+  void ExpectRequestTokenStatusUKM(TokenStatus status) {
+    ExpectRequestTokenStatusUKMInternal(status, FedCmEntry::kEntryName);
+    ExpectRequestTokenStatusUKMInternal(status, FedCmIdpEntry::kEntryName);
   }
 
-  void ExpectRequestIdTokenStatusUKMInternal(IdTokenStatus status,
-                                             const char* entry_name) {
+  void ExpectRequestTokenStatusUKMInternal(TokenStatus status,
+                                           const char* entry_name) {
     auto entries = ukm_recorder()->GetEntriesByName(entry_name);
 
     if (entries.empty())
-      FAIL() << "No RequestIdTokenStatus was recorded";
+      FAIL() << "No RequestTokenStatus was recorded";
 
     // There are multiple types of metrics under the same FedCM UKM. We need to
     // make sure that the metric only includes the expected one.
     for (const auto* const entry : entries) {
       const int64_t* metric =
-          ukm_recorder()->GetEntryMetric(entry, "Status_RequestIdToken");
+          ukm_recorder()->GetEntryMetric(entry, "Status_RequestToken");
       if (metric && *metric != static_cast<int>(status))
         FAIL() << "Unexpected status was recorded";
     }
@@ -855,7 +853,7 @@
   list.InitAndEnableFeature(features::kFedCmManifestValidation);
 
   RequestExpectations request_not_in_list = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorManifestNotInManifestList,
       FetchedEndpoint::MANIFEST_LIST};
 
@@ -912,7 +910,7 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.manifest.token_endpoint = "";
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse,
       FetchedEndpoint::MANIFEST | FetchedEndpoint::MANIFEST_LIST};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
@@ -933,7 +931,7 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.manifest.accounts_endpoint = "";
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse,
       FetchedEndpoint::MANIFEST | FetchedEndpoint::MANIFEST_LIST};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
@@ -954,8 +952,8 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.manifest.client_metadata_endpoint = "";
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kSuccess, FederatedAuthRequestResult::kSuccess,
-      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN & ~FetchedEndpoint::CLIENT_METADATA};
+      RequestTokenStatus::kSuccess, FederatedAuthRequestResult::kSuccess,
+      FETCH_ENDPOINT_ALL_REQUEST_TOKEN & ~FetchedEndpoint::CLIENT_METADATA};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
 }
 
@@ -965,7 +963,7 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.manifest.accounts_endpoint = kCrossOriginAccountsEndpoint;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse,
       FetchedEndpoint::MANIFEST | FetchedEndpoint::MANIFEST_LIST};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
@@ -976,7 +974,7 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.accounts_response = FetchStatus::kNoResponseError;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingAccountsNoResponse,
       FetchedEndpoint::MANIFEST | FetchedEndpoint::CLIENT_METADATA |
           FetchedEndpoint::ACCOUNTS | FetchedEndpoint::MANIFEST_LIST};
@@ -988,7 +986,7 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.accounts_response = FetchStatus::kInvalidResponseError;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingAccountsInvalidResponse,
       FetchedEndpoint::MANIFEST | FetchedEndpoint::CLIENT_METADATA |
           FetchedEndpoint::ACCOUNTS | FetchedEndpoint::MANIFEST_LIST};
@@ -1029,7 +1027,7 @@
   configuration.manifest.accounts_endpoint = "https://cross-origin-1.com";
   configuration.manifest.token_endpoint = "";
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingManifestInvalidResponse,
       FetchedEndpoint::MANIFEST | FetchedEndpoint::MANIFEST_LIST};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
@@ -1155,9 +1153,9 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.token_response = FetchStatus::kInvalidResponseError;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorFetchingIdTokenInvalidResponse,
-      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN};
+      FETCH_ENDPOINT_ALL_REQUEST_TOKEN};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
 }
 
@@ -1307,7 +1305,7 @@
   histogram_tester_.ExpectTotalCount("Blink.FedCm.Timing.TurnaroundTime", 1);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kSuccess, 1);
+                                       TokenStatus::kSuccess, 1);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.IsSignInUser", 1, 1);
 
@@ -1317,7 +1315,7 @@
   ExpectTimingUKM("Timing.TurnaroundTime");
   ExpectNoTimingUKM("Timing.CancelOnDialog");
 
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kSuccess);
+  ExpectRequestTokenStatusUKM(TokenStatus::kSuccess);
 }
 
 // Test that request fails if user does not select an account.
@@ -1348,8 +1346,8 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.customized_dialog = true;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError, FederatedAuthRequestResult::kError,
-      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN & ~FetchedEndpoint::TOKEN};
+      RequestTokenStatus::kError, FederatedAuthRequestResult::kError,
+      FETCH_ENDPOINT_ALL_REQUEST_TOKEN & ~FetchedEndpoint::TOKEN};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
 
   ukm_loop.Run();
@@ -1365,7 +1363,7 @@
   histogram_tester_.ExpectTotalCount("Blink.FedCm.Timing.TurnaroundTime", 0);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kNotSelectAccount, 1);
+                                       TokenStatus::kNotSelectAccount, 1);
 
   ExpectTimingUKM("Timing.ShowAccountsDialog");
   ExpectTimingUKM("Timing.CancelOnDialog");
@@ -1373,7 +1371,7 @@
   ExpectNoTimingUKM("Timing.IdTokenResponse");
   ExpectNoTimingUKM("Timing.TurnaroundTime");
 
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kNotSelectAccount);
+  ExpectRequestTokenStatusUKM(TokenStatus::kNotSelectAccount);
 }
 
 TEST_F(BasicFederatedAuthRequestImplTest, MetricsForWebContentsVisible) {
@@ -1412,8 +1410,8 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.customized_dialog = true;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError, FederatedAuthRequestResult::kError,
-      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN & ~FetchedEndpoint::TOKEN};
+      RequestTokenStatus::kError, FederatedAuthRequestResult::kError,
+      FETCH_ENDPOINT_ALL_REQUEST_TOKEN & ~FetchedEndpoint::TOKEN};
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.WebContentsVisible", 0, 1);
@@ -1425,15 +1423,15 @@
       std::make_pair(main_test_rfh()->GetLastCommittedOrigin(),
                      ApiPermissionStatus::BLOCKED_THIRD_PARTY_COOKIES_BLOCKED);
 
-  RequestExpectations expectations = {RequestIdTokenStatus::kError,
+  RequestExpectations expectations = {RequestTokenStatus::kError,
                                       FederatedAuthRequestResult::kError,
                                       /*fetched_endpoints=*/0};
   RunAuthTest(kDefaultRequestParameters, expectations, kConfigurationValid);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kThirdPartyCookiesBlocked,
+                                       TokenStatus::kThirdPartyCookiesBlocked,
                                        1);
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kThirdPartyCookiesBlocked);
+  ExpectRequestTokenStatusUKM(TokenStatus::kThirdPartyCookiesBlocked);
 }
 
 TEST_F(BasicFederatedAuthRequestImplTest, MetricsForFeatureIsDisabled) {
@@ -1441,14 +1439,14 @@
       std::make_pair(main_test_rfh()->GetLastCommittedOrigin(),
                      ApiPermissionStatus::BLOCKED_VARIATIONS);
 
-  RequestExpectations expectations = {RequestIdTokenStatus::kError,
+  RequestExpectations expectations = {RequestTokenStatus::kError,
                                       FederatedAuthRequestResult::kError,
                                       /*fetched_endpoints=*/0};
   RunAuthTest(kDefaultRequestParameters, expectations, kConfigurationValid);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kDisabledInFlags, 1);
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kDisabledInFlags);
+                                       TokenStatus::kDisabledInFlags, 1);
+  ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInFlags);
 }
 
 TEST_F(BasicFederatedAuthRequestImplTest,
@@ -1470,16 +1468,16 @@
   // If double counted, the the samples would not be unique so the following
   // checks will fail.
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kDisabledInFlags, 1);
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kDisabledInFlags);
+                                       TokenStatus::kDisabledInFlags, 1);
+  ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInFlags);
 }
 
 // Test that embargo is requested if the
 // IdentityRequestDialogController::ShowAccountsDialog() callback requests it.
 TEST_F(BasicFederatedAuthRequestImplTest, RequestEmbargo) {
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError, FederatedAuthRequestResult::kError,
-      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN & ~FetchedEndpoint::TOKEN};
+      RequestTokenStatus::kError, FederatedAuthRequestResult::kError,
+      FETCH_ENDPOINT_ALL_REQUEST_TOKEN & ~FetchedEndpoint::TOKEN};
 
   MockConfiguration configuration = kConfigurationValid;
   configuration.customized_dialog = true;
@@ -1519,7 +1517,7 @@
       std::make_pair(main_test_rfh()->GetLastCommittedOrigin(),
                      ApiPermissionStatus::BLOCKED_SETTINGS);
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorDisabledInSettings,
       /*fetched_endpoints=*/0};
   RunAuthTest(kDefaultRequestParameters, expectations, kConfigurationValid);
@@ -1543,9 +1541,9 @@
 TEST_F(BasicFederatedAuthRequestImplTest, TokenRequestTimesOut) {
   MockConfiguration configuration = kConfigurationValid;
   configuration.delay_token_response = true;
-  RequestExpectations expectations = {RequestIdTokenStatus::kError,
+  RequestExpectations expectations = {RequestTokenStatus::kError,
                                       FederatedAuthRequestResult::kError,
-                                      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN};
+                                      FETCH_ENDPOINT_ALL_REQUEST_TOKEN};
   // RunAuthTest() fast forwards time by a sufficient amount to cause the
   // request to timeout. `MockConfiguration::delay_token_response` disables
   // the auto-run logic for the token request response and enables emulating
@@ -1556,9 +1554,8 @@
   test_network_request_manager_->RunDelayedCallbacks();
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kUserInterfaceTimedOut,
-                                       1);
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kUserInterfaceTimedOut);
+                                       TokenStatus::kUserInterfaceTimedOut, 1);
+  ExpectRequestTokenStatusUKM(TokenStatus::kUserInterfaceTimedOut);
 }
 
 class FederatedAuthRequestImplTestCancelConsistency
@@ -1590,14 +1587,14 @@
       /*fetched_endpoints=*/
       fedcm_disabled
           ? 0
-          : FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN & ~FetchedEndpoint::TOKEN};
+          : FETCH_ENDPOINT_ALL_REQUEST_TOKEN & ~FetchedEndpoint::TOKEN};
   RunAuthTest(kDefaultRequestParameters, expectation, configuration);
   EXPECT_FALSE(auth_helper_.was_callback_called());
 
   request_remote_->CancelTokenRequest();
   request_remote_.FlushForTesting();
   EXPECT_TRUE(auth_helper_.was_callback_called());
-  EXPECT_EQ(RequestIdTokenStatus::kErrorCanceled, auth_helper_.status());
+  EXPECT_EQ(RequestTokenStatus::kErrorCanceled, auth_helper_.status());
 }
 
 // Test that the request fails if user proceeds with the sign in workflow after
@@ -1631,9 +1628,9 @@
   MockConfiguration configuration = kConfigurationValid;
   configuration.customized_dialog = true;
   RequestExpectations expectations = {
-      RequestIdTokenStatus::kError,
+      RequestTokenStatus::kError,
       FederatedAuthRequestResult::kErrorDisabledInSettings,
-      FETCH_ENDPOINT_ALL_REQUEST_ID_TOKEN & ~FetchedEndpoint::TOKEN};
+      FETCH_ENDPOINT_ALL_REQUEST_TOKEN & ~FetchedEndpoint::TOKEN};
 
   RunAuthTest(kDefaultRequestParameters, expectations, configuration);
 
@@ -1646,14 +1643,14 @@
   histogram_tester_.ExpectTotalCount("Blink.FedCm.Timing.TurnaroundTime", 0);
 
   histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken",
-                                       IdTokenStatus::kDisabledInSettings, 1);
+                                       TokenStatus::kDisabledInSettings, 1);
 
   ExpectTimingUKM("Timing.ShowAccountsDialog");
   ExpectNoTimingUKM("Timing.ContinueOnDialog");
   ExpectNoTimingUKM("Timing.IdTokenResponse");
   ExpectNoTimingUKM("Timing.TurnaroundTime");
 
-  ExpectRequestIdTokenStatusUKM(IdTokenStatus::kDisabledInSettings);
+  ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInSettings);
 }
 
 // Test that disclosure text is shown for first time user.
diff --git a/content/browser/webid/idp_network_request_manager.cc b/content/browser/webid/idp_network_request_manager.cc
index 07c28ac3..ec1a756 100644
--- a/content/browser/webid/idp_network_request_manager.cc
+++ b/content/browser/webid/idp_network_request_manager.cc
@@ -46,6 +46,7 @@
 constexpr char kProviderUrlListKey[] = "provider_urls";
 
 // fedcm.json configuration keys.
+// TODO(crbug.com/1339373): Rename id_token_endpoint to another name.
 constexpr char kTokenEndpointKey[] = "id_token_endpoint";
 constexpr char kAccountsEndpointKey[] = "accounts_endpoint";
 constexpr char kClientMetadataEndpointKey[] = "client_metadata_endpoint";
@@ -76,7 +77,7 @@
 constexpr char kIdpBrandingIconUrl[] = "url";
 constexpr char kIdpBrandingIconSize[] = "size";
 
-constexpr char kIdTokenKey[] = "id_token";
+constexpr char kTokenKey[] = "token";
 
 // Token request body keys
 constexpr char kTokenAccountKey[] = "account_id";
@@ -809,15 +810,15 @@
   }
 
   auto& response = *result.value;
-  const base::Value* id_token = response.FindKey(kIdTokenKey);
-  bool token_present = id_token && id_token->is_string();
+  const base::Value* token = response.FindKey(kTokenKey);
+  bool token_present = token && token->is_string();
 
   if (!token_present) {
     Fail();
     return;
   }
   std::move(token_request_callback_)
-      .Run(FetchStatus::kSuccess, id_token->GetString());
+      .Run(FetchStatus::kSuccess, token->GetString());
 }
 
 void IdpNetworkRequestManager::OnRevokeResponse(
diff --git a/content/browser/webid/idp_network_request_manager.h b/content/browser/webid/idp_network_request_manager.h
index 94421a7..28680ea0 100644
--- a/content/browser/webid/idp_network_request_manager.h
+++ b/content/browser/webid/idp_network_request_manager.h
@@ -51,15 +51,15 @@
 //      | POST /idp_url with OIDC request |
 //      |-------------------------------->|
 //      |                                 |
-//      |      id_token or signin_url     |
+//      |       token or signin_url       |
 //      |<--------------------------------|
 //  .-------.                           .---.
 //  |Browser|                           |IDP|
 //  '-------'                           '---'
 //
-// If the IDP returns an id_token, the sequence finishes. If it returns a
-// signin_url, that URL is loaded as a rendered Document into a new window
-// for the user to interact with the IDP.
+// If the IDP returns an token, the sequence finishes. If it returns a
+// signin_url, that URL is loaded as a rendered Document into a new window for
+// the user to interact with the IDP.
 class CONTENT_EXPORT IdpNetworkRequestManager {
  public:
   enum class FetchStatus {
diff --git a/content/browser/webid/idp_network_request_manager_unittest.cc b/content/browser/webid/idp_network_request_manager_unittest.cc
index bca6d17..c0b2028 100644
--- a/content/browser/webid/idp_network_request_manager_unittest.cc
+++ b/content/browser/webid/idp_network_request_manager_unittest.cc
@@ -133,7 +133,7 @@
       const char* account,
       const char* request,
       net::HttpStatusCode http_status = net::HTTP_OK) {
-    const char response[] = R"({"id_token": "token"})";
+    const char response[] = R"({"token": "token"})";
     GURL token_endpoint(kTestTokenEndpoint);
     test_url_loader_factory().AddResponse(token_endpoint.spec(), response,
                                           http_status);
diff --git a/content/browser/webid/webid_browsertest.cc b/content/browser/webid/webid_browsertest.cc
index dd6683d..9194a9a 100644
--- a/content/browser/webid/webid_browsertest.cc
+++ b/content/browser/webid/webid_browsertest.cc
@@ -50,8 +50,8 @@
 constexpr char kTestContentType[] = "application/json";
 constexpr char kIdpForbiddenHeader[] = "Sec-FedCM-CSRF";
 
-// Id token value in //content/test/data/id_token_endpoint.json
-constexpr char kIdToken[] = "[not a real token]";
+// Token value in //content/test/data/id_token_endpoint.json
+constexpr char kToken[] = "[not a real token]";
 
 // This class implements the IdP logic, and responds to requests sent to the
 // test HTTP server.
@@ -198,7 +198,7 @@
               }]
             }
           }));
-          return x.idToken;
+          return x.token;
         }) ()
     )";
   }
@@ -234,7 +234,7 @@
 IN_PROC_BROWSER_TEST_F(WebIdBrowserTest, FullLoginFlow) {
   idp_server()->SetManifestResponseDetails(BuildValidManifestDetails());
 
-  EXPECT_EQ(std::string(kIdToken), EvalJs(shell(), GetBasicRequestString()));
+  EXPECT_EQ(std::string(kToken), EvalJs(shell(), GetBasicRequestString()));
 }
 
 // Verify full login flow where the IdP uses absolute rather than relative
@@ -248,7 +248,7 @@
 
   idp_server()->SetManifestResponseDetails(manifest_details);
 
-  EXPECT_EQ(std::string(kIdToken), EvalJs(shell(), GetBasicRequestString()));
+  EXPECT_EQ(std::string(kToken), EvalJs(shell(), GetBasicRequestString()));
 }
 
 // Verify an attempt to invoke FedCM with an insecure IDP path fails.
@@ -267,13 +267,13 @@
               }]
             }
           }));
-          return x.idToken;
+          return x.token;
         }) ()
     )";
 
   std::string expected_error =
       "a JavaScript error: \"NetworkError: Error "
-      "retrieving an id token.\"\n";
+      "retrieving a token.\"\n";
   EXPECT_EQ(expected_error, EvalJs(shell(), script).error);
 }
 
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index 7293829f..f1b8dee 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -399,8 +399,8 @@
   // be used instead of getting the primary page from the WebContents.
   virtual Page& GetPrimaryPage() = 0;
 
-  // Returns the focused frame for the currently active view. Might be nullptr
-  // if nothing is focused.
+  // Returns the focused frame for the primary page or an inner page thereof.
+  // Might be nullptr if nothing is focused.
   virtual RenderFrameHost* GetFocusedFrame() = 0;
 
   // Returns true if |frame_tree_node_id| refers to a frame in a prerendered
diff --git a/content/public/renderer/render_frame.h b/content/public/renderer/render_frame.h
index d40c35f2..a7426fc5 100644
--- a/content/public/renderer/render_frame.h
+++ b/content/public/renderer/render_frame.h
@@ -130,11 +130,6 @@
   // Visit all live RenderFrames.
   static void ForEach(RenderFrameVisitor* visitor);
 
-  // Returns the routing ID for |web_frame|, whether it is a WebLocalFrame in
-  // this process or a WebRemoteFrame placeholder for a frame in a different
-  // process.
-  static int GetRoutingIdForWebFrame(blink::WebFrame* web_frame);
-
   // Returns the RenderFrame associated with the main frame of the WebView.
   // See `blink::WebView::MainFrame()`. Note that this will be null when
   // the main frame in this process is a remote frame.
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index f40e6c53..2708bf73 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1751,17 +1751,6 @@
 }
 
 // static
-int RenderFrame::GetRoutingIdForWebFrame(blink::WebFrame* web_frame) {
-  if (!web_frame)
-    return MSG_ROUTING_NONE;
-  if (web_frame->IsWebRemoteFrame()) {
-    return RenderFrameProxy::FromWebFrame(web_frame->ToWebRemoteFrame())
-        ->routing_id();
-  }
-  return RenderFrameImpl::FromWebFrame(web_frame)->GetRoutingID();
-}
-
-// static
 RenderFrameImpl* RenderFrameImpl::FromWebFrame(blink::WebFrame* web_frame) {
   DCHECK(RenderThread::IsMainThread());
   auto iter = g_frame_map.Get().find(web_frame);
@@ -1880,9 +1869,8 @@
   initialized_ = true;
   is_main_frame_ = !parent;
 
-  TRACE_EVENT2("navigation,rail", "RenderFrameImpl::Initialize", "routing_id",
-               routing_id_, "parent_id",
-               RenderFrame::GetRoutingIdForWebFrame(parent));
+  TRACE_EVENT1("navigation,rail", "RenderFrameImpl::Initialize", "routing_id",
+               routing_id_);
 
 #if BUILDFLAG(ENABLE_PLUGINS)
   new PepperBrowserConnection(this);
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 0694c99..890d4fd 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -46,11 +46,6 @@
 static base::LazyInstance<RoutingIDProxyMap>::DestructorAtExit
     g_routing_id_proxy_map = LAZY_INSTANCE_INITIALIZER;
 
-// Facilitates lookup of RenderFrameProxy by WebRemoteFrame.
-typedef std::map<blink::WebRemoteFrame*, RenderFrameProxy*> FrameProxyMap;
-base::LazyInstance<FrameProxyMap>::DestructorAtExit g_frame_proxy_map =
-    LAZY_INSTANCE_INITIALIZER;
-
 }  // namespace
 
 // static
@@ -166,25 +161,6 @@
   return proxy.release();
 }
 
-// static
-RenderFrameProxy* RenderFrameProxy::FromWebFrame(
-    blink::WebRemoteFrame* web_frame) {
-  // TODO(dcheng): Turn this into a DCHECK() if it doesn't crash on canary.
-  CHECK(web_frame);
-  auto iter = g_frame_proxy_map.Get().find(web_frame);
-  if (iter != g_frame_proxy_map.Get().end()) {
-    RenderFrameProxy* proxy = iter->second;
-    DCHECK_EQ(web_frame, proxy->web_frame());
-    return proxy;
-  }
-  // Reaching this is not expected: this implies that the |web_frame| in
-  // question is not managed by the content API, or the associated
-  // RenderFrameProxy is already deleted--in which case, it's not safe to touch
-  // |web_frame|.
-  NOTREACHED();
-  return nullptr;
-}
-
 RenderFrameProxy::RenderFrameProxy(AgentSchedulingGroup& agent_scheduling_group,
                                    int routing_id)
     : agent_scheduling_group_(agent_scheduling_group),
@@ -206,10 +182,6 @@
 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame) {
   CHECK(web_frame);
   web_frame_ = web_frame;
-
-  std::pair<FrameProxyMap::iterator, bool> result =
-      g_frame_proxy_map.Get().insert(std::make_pair(web_frame_, this));
-  CHECK(result.second) << "Inserted a duplicate item.";
 }
 
 void RenderFrameProxy::SetReplicatedState(
@@ -281,14 +253,6 @@
 
 void RenderFrameProxy::FrameDetached(DetachType type) {
   web_frame_->Close();
-
-  // Remove the entry in the WebFrame->RenderFrameProxy map, as the |web_frame_|
-  // is no longer valid.
-  auto it = g_frame_proxy_map.Get().find(web_frame_);
-  CHECK(it != g_frame_proxy_map.Get().end());
-  CHECK_EQ(it->second, this);
-  g_frame_proxy_map.Get().erase(it);
-
   web_frame_ = nullptr;
 
   delete this;
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index 914f62e..8b46ab5 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -128,7 +128,6 @@
   // RenderFrameProxy's WebRemoteFrame.
   void SetReplicatedState(blink::mojom::FrameReplicationStatePtr state);
 
-  int routing_id() { return routing_id_; }
   blink::WebRemoteFrame* web_frame() { return web_frame_; }
 
   // blink::WebRemoteFrameClient implementation:
diff --git a/content/shell/browser/shell_platform_delegate_views.cc b/content/shell/browser/shell_platform_delegate_views.cc
index 3efc5c99..ab567d65 100644
--- a/content/shell/browser/shell_platform_delegate_views.cc
+++ b/content/shell/browser/shell_platform_delegate_views.cc
@@ -398,7 +398,7 @@
 
 void ShellPlatformDelegate::ResizeWebContent(Shell* shell,
                                              const gfx::Size& content_size) {
-  shell->web_contents()->GetRenderWidgetHostView()->SetSize(content_size);
+  shell->web_contents()->Resize(gfx::Rect(content_size));
 }
 
 void ShellPlatformDelegate::EnableUIControl(Shell* shell,
diff --git a/content/test/data/fedcm/id_token_endpoint.json b/content/test/data/fedcm/id_token_endpoint.json
index 90faa169..8a4d527 100644
--- a/content/test/data/fedcm/id_token_endpoint.json
+++ b/content/test/data/fedcm/id_token_endpoint.json
@@ -1,3 +1,3 @@
 {
-  "id_token": "[not a real token]"
+  "token": "[not a real token]"
 }
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc
index d9c0a1da..51f15c9 100644
--- a/content/web_test/browser/web_test_control_host.cc
+++ b/content/web_test/browser/web_test_control_host.cc
@@ -579,6 +579,8 @@
     // size. See http://crbug.com/1011191 for more details.
     // TODO(crbug.com/309760): This resize to half-size could go away if
     // testRunner.useUnfortunateSynchronousResizeMode() goes away.
+    main_window_->web_contents()->GetRenderWidgetHostView()->DisableAutoResize(
+        gfx::Size());
     main_window_->ResizeWebContentForTests(
         gfx::ScaleToCeiledSize(window_size, 0.5f, 1));
     main_window_->ResizeWebContentForTests(window_size);
@@ -1767,6 +1769,17 @@
   web_contents()->SyncRendererPrefs();
 }
 
+void WebTestControlHost::EnableAutoResize(const gfx::Size& min_size,
+                                          const gfx::Size& max_size) {
+  web_contents()->GetRenderWidgetHostView()->EnableAutoResize(min_size,
+                                                              max_size);
+}
+
+void WebTestControlHost::DisableAutoResize(const gfx::Size& new_size) {
+  web_contents()->GetRenderWidgetHostView()->DisableAutoResize(new_size);
+  main_window_->ResizeWebContentForTests(new_size);
+}
+
 void WebTestControlHost::GoToOffset(int offset) {
   main_window_->GoBackOrForward(offset);
 }
diff --git a/content/web_test/browser/web_test_control_host.h b/content/web_test/browser/web_test_control_host.h
index 0f7f1b9..beef319 100644
--- a/content/web_test/browser/web_test_control_host.h
+++ b/content/web_test/browser/web_test_control_host.h
@@ -257,6 +257,9 @@
   void WorkQueueStatesChanged(
       base::Value::Dict changed_work_queue_states) override;
   void SetAcceptLanguages(const std::string& accept_languages) override;
+  void EnableAutoResize(const gfx::Size& min_size,
+                        const gfx::Size& max_size) override;
+  void DisableAutoResize(const gfx::Size& new_size) override;
 
   void DiscardMainWindow();
   // Closes all windows opened by the test. This is every window but the main
diff --git a/content/web_test/common/web_test.mojom b/content/web_test/common/web_test.mojom
index 5b807a4..0934c5c 100644
--- a/content/web_test/common/web_test.mojom
+++ b/content/web_test/common/web_test.mojom
@@ -325,4 +325,12 @@
 
   // Set Accept Languages via RendererPreferences on the WebContents.
   SetAcceptLanguages(string accept_languages);
+
+  // Enable Auto Resize mode. This will cause a layout of the content and
+  // the new size will be determined by the renderer after it dispatches
+  // the resize event.
+  EnableAutoResize(gfx.mojom.Size min_size, gfx.mojom.Size max_size);
+
+  // Disable Auto Resize mode, resizing the contents to `new_size`.
+  DisableAutoResize(gfx.mojom.Size new_size);
 };
diff --git a/content/web_test/renderer/test_runner.cc b/content/web_test/renderer/test_runner.cc
index e3e9ee97..4dd52d49 100644
--- a/content/web_test/renderer/test_runner.cc
+++ b/content/web_test/renderer/test_runner.cc
@@ -1284,11 +1284,9 @@
   if (max_width <= 0 || max_height <= 0)
     return;
 
-  blink::WebView* web_view = GetWebFrame()->View();
-
   gfx::Size min_size(min_width, min_height);
   gfx::Size max_size(max_width, max_height);
-  web_view->EnableAutoResizeForTesting(min_size, max_size);
+  runner_->GetWebTestControlHostRemote()->EnableAutoResize(min_size, max_size);
 }
 
 void TestRunnerBindings::DisableAutoResizeMode(int new_width, int new_height) {
@@ -1300,14 +1298,8 @@
   if (new_width <= 0 || new_height <= 0)
     return;
 
-  blink::WebFrameWidget* widget = frame_->GetLocalRootWebFrameWidget();
-
   gfx::Size new_size(new_width, new_height);
-  blink::WebView* web_view = GetWebFrame()->View();
-  web_view->DisableAutoResizeForTesting(new_size);
-
-  gfx::Rect window_rect(widget->WindowRect().origin(), new_size);
-  web_view->SetWindowRectSynchronouslyForTesting(window_rect);
+  runner_->GetWebTestControlHostRemote()->DisableAutoResize(new_size);
 }
 
 void TestRunnerBindings::SetMockScreenOrientation(
diff --git a/extensions/browser/api/lock_screen_data/data_item.cc b/extensions/browser/api/lock_screen_data/data_item.cc
index 65bfbfe..b5ae4a1c 100644
--- a/extensions/browser/api/lock_screen_data/data_item.cc
+++ b/extensions/browser/api/lock_screen_data/data_item.cc
@@ -84,9 +84,9 @@
   ValueStore::ReadResult read = store->Get(kStoreKeyRegisteredItems);
   if (!read.status().ok())
     return false;
-  const base::Value* registered_items =
-      read.settings().FindDictKey(kStoreKeyRegisteredItems);
-  return registered_items && registered_items->FindKey(item_id);
+  const base::Value::Dict* registered_items =
+      read.settings().FindDict(kStoreKeyRegisteredItems);
+  return registered_items && registered_items->Find(item_id);
 }
 
 // Gets a dictionary value that contains set of all registered data items from
@@ -110,7 +110,7 @@
   // |registered_items| (and avoid doing a copy |read.settings()|
   // sub-dictionary).
   absl::optional<base::Value> registered_items =
-      read.settings().ExtractKey(kStoreKeyRegisteredItems);
+      read.settings().Extract(kStoreKeyRegisteredItems);
   if (!registered_items) {
     // If the registered items dictionary cannot be found, assume no items have
     // yet been registered, and return empty result.
@@ -139,7 +139,7 @@
     return;
   }
   absl::optional<base::Value> registered_items =
-      read.settings().ExtractKey(kStoreKeyRegisteredItems);
+      read.settings().Extract(kStoreKeyRegisteredItems);
   if (!registered_items)
     registered_items = base::Value(base::Value::Type::DICTIONARY);
 
@@ -216,8 +216,8 @@
     return;
   }
 
-  const base::Value* item;
-  if (!read.settings().Get(item_id, &item)) {
+  const base::Value* item = read.settings().Find(item_id);
+  if (!item) {
     *result = OperationResult::kSuccess;
     *data = std::vector<char>();
     return;
@@ -250,15 +250,16 @@
     return;
   }
 
-  base::Value* registered_items =
-      read.settings().FindDictKey(kStoreKeyRegisteredItems);
-  if (!registered_items || !registered_items->RemoveKey(item_id)) {
+  base::Value::Dict* registered_items =
+      read.settings().FindDict(kStoreKeyRegisteredItems);
+  if (!registered_items || !registered_items->Remove(item_id)) {
     *result = OperationResult::kNotFound;
     return;
   }
 
-  ValueStore::WriteResult write = store->Set(
-      ValueStore::DEFAULTS, kStoreKeyRegisteredItems, *registered_items);
+  ValueStore::WriteResult write =
+      store->Set(ValueStore::DEFAULTS, kStoreKeyRegisteredItems,
+                 base::Value(std::move(*registered_items)));
   *result = write.status().ok() ? OperationResult::kSuccess
                                 : OperationResult::kFailed;
 }
diff --git a/extensions/browser/api/storage/settings_storage_quota_enforcer.cc b/extensions/browser/api/storage/settings_storage_quota_enforcer.cc
index 2818024..18ee97dd 100644
--- a/extensions/browser/api/storage/settings_storage_quota_enforcer.cc
+++ b/extensions/browser/api/storage/settings_storage_quota_enforcer.cc
@@ -232,9 +232,8 @@
     return;
   }
 
-  for (base::DictionaryValue::Iterator it(maybe_settings.settings());
-       !it.IsAtEnd(); it.Advance()) {
-    Allocate(it.key(), it.value(), &used_total_, &used_per_setting_);
+  for (const auto [key, value] : maybe_settings.settings()) {
+    Allocate(key, value, &used_total_, &used_per_setting_);
   }
 
   usage_calculated_ = true;
diff --git a/extensions/browser/api/storage/storage_api.cc b/extensions/browser/api/storage/storage_api.cc
index 8b3444ca..28e3eb8 100644
--- a/extensions/browser/api/storage/storage_api.cc
+++ b/extensions/browser/api/storage/storage_api.cc
@@ -190,7 +190,7 @@
   if (!result.status().ok())
     return Error(result.status().message);
 
-  return OneArgument(std::move(result.settings()));
+  return OneArgument(base::Value(result.PassSettings()));
 }
 
 ExtensionFunction::ResponseValue SettingsFunction::UseWriteResult(
@@ -263,9 +263,8 @@
       if (!result.status().ok()) {
         return UseReadResult(std::move(result));
       }
-      std::unique_ptr<base::DictionaryValue> with_default_values =
-          base::Value::AsDictionaryValue(input).CreateDeepCopy();
-      with_default_values->MergeDictionary(&result.settings());
+      base::Value::Dict with_default_values = input.GetDict().Clone();
+      with_default_values.Merge(result.PassSettings());
       return UseReadResult(ValueStore::ReadResult(
           std::move(with_default_values), result.PassStatus()));
     }
diff --git a/extensions/browser/api/storage/storage_frontend_unittest.cc b/extensions/browser/api/storage/storage_frontend_unittest.cc
index fed2841..6db5cdc 100644
--- a/extensions/browser/api/storage/storage_frontend_unittest.cc
+++ b/extensions/browser/api/storage/storage_frontend_unittest.cc
@@ -104,7 +104,7 @@
   {
     ValueStore::ReadResult result = storage->Get();
     ASSERT_TRUE(result.status().ok());
-    EXPECT_FALSE(result.settings().DictEmpty());
+    EXPECT_FALSE(result.settings().empty());
   }
 
   ResetFrontend();
@@ -114,7 +114,7 @@
   {
     ValueStore::ReadResult result = storage->Get();
     ASSERT_TRUE(result.status().ok());
-    EXPECT_FALSE(result.settings().DictEmpty());
+    EXPECT_FALSE(result.settings().empty());
   }
 }
 
@@ -144,7 +144,7 @@
   {
     ValueStore::ReadResult result = storage->Get();
     ASSERT_TRUE(result.status().ok());
-    EXPECT_TRUE(result.settings().DictEmpty());
+    EXPECT_TRUE(result.settings().empty());
   }
 }
 
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 9e31564..0dc326a3 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1740,6 +1740,7 @@
   AUTOTESTPRIVATE_ISINPUTMETHODREADYFORTESTING = 1677,
   AUTOTESTPRIVATE_GETARCAPPKILLS = 1678,
   FILEMANAGERPRIVATE_OPENMANAGESYNCSETTINGS = 1679,
+  PASSWORDSPRIVATE_STARTAUTOMATEDPASSWORDCHANGE = 1680,
   // Last entry: Add new entries above, then run:
   // tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/gpu/command_buffer/service/external_vk_image_overlay_representation.cc b/gpu/command_buffer/service/external_vk_image_overlay_representation.cc
index 1ad31c50..f234add13 100644
--- a/gpu/command_buffer/service/external_vk_image_overlay_representation.cc
+++ b/gpu/command_buffer/service/external_vk_image_overlay_representation.cc
@@ -26,7 +26,7 @@
     default;
 
 bool ExternalVkImageOverlayRepresentation::BeginReadAccess(
-    std::vector<gfx::GpuFence>* acquire_fences) {
+    gfx::GpuFenceHandle& acquire_fence) {
   DCHECK(read_begin_semaphores_.empty());
   if (!vk_image_backing_->BeginAccess(/*readonly=*/true,
                                       &read_begin_semaphores_,
@@ -34,7 +34,7 @@
     return false;
   }
 
-  GetAcquireFences(acquire_fences);
+  GetAcquireFence(acquire_fence);
   return true;
 }
 
@@ -66,17 +66,18 @@
   return nullptr;
 }
 
-void ExternalVkImageOverlayRepresentation::GetAcquireFences(
-    std::vector<gfx::GpuFence>* fences) {
+void ExternalVkImageOverlayRepresentation::GetAcquireFence(
+    gfx::GpuFenceHandle& fence) {
   const VkDevice& device = vk_image_backing_->context_provider()
                                ->GetDeviceQueue()
                                ->GetVulkanDevice();
-  for (auto& semaphore : read_begin_semaphores_) {
-    DCHECK(semaphore.is_valid());
-    fences->emplace_back(
-        vk_image_backing_->vulkan_implementation()
-            ->GetSemaphoreHandle(device, semaphore.GetVkSemaphore())
-            .ToGpuFenceHandle());
+  if (!read_begin_semaphores_.empty()) {
+    DCHECK(read_begin_semaphores_.size() == 1);
+    DCHECK(read_begin_semaphores_.front().is_valid());
+    fence = vk_image_backing_->vulkan_implementation()
+                ->GetSemaphoreHandle(
+                    device, read_begin_semaphores_.front().GetVkSemaphore())
+                .ToGpuFenceHandle();
   }
 }
 
diff --git a/gpu/command_buffer/service/external_vk_image_overlay_representation.h b/gpu/command_buffer/service/external_vk_image_overlay_representation.h
index 7c2680b..ce76502 100644
--- a/gpu/command_buffer/service/external_vk_image_overlay_representation.h
+++ b/gpu/command_buffer/service/external_vk_image_overlay_representation.h
@@ -26,12 +26,12 @@
 
  protected:
   // SharedImageRepresentationOverlay implementation
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override;
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override;
   void EndReadAccess(gfx::GpuFenceHandle release_fence) override;
   gl::GLImage* GetGLImage() override;
 
  private:
-  void GetAcquireFences(std::vector<gfx::GpuFence>* fences);
+  void GetAcquireFence(gfx::GpuFenceHandle& fence);
 
   const raw_ptr<ExternalVkImageBacking> vk_image_backing_;
   std::vector<ExternalSemaphore> read_begin_semaphores_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
index f12ca3e..759ec64 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
+++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -219,12 +219,12 @@
     return static_cast<SharedImageBackingAHB*>(backing());
   }
 
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override {
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override {
     gfx::GpuFenceHandle fence_handle;
     gl_image_ = ahb_backing()->BeginOverlayAccess(fence_handle);
 
     if (!fence_handle.is_null())
-      acquire_fences->emplace_back(std::move(fence_handle));
+      acquire_fence = std::move(fence_handle);
 
     return !!gl_image_;
   }
diff --git a/gpu/command_buffer/service/shared_image_backing_gl_image.cc b/gpu/command_buffer/service/shared_image_backing_gl_image.cc
index 5010e7b5..a234665 100644
--- a/gpu/command_buffer/service/shared_image_backing_gl_image.cc
+++ b/gpu/command_buffer/service/shared_image_backing_gl_image.cc
@@ -282,11 +282,11 @@
     default;
 
 bool SharedImageRepresentationOverlayImpl::BeginReadAccess(
-    std::vector<gfx::GpuFence>* acquire_fences) {
+    gfx::GpuFenceHandle& acquire_fence) {
   auto* gl_backing = static_cast<SharedImageBackingGLImage*>(backing());
   std::unique_ptr<gfx::GpuFence> fence = gl_backing->GetLastWriteGpuFence();
   if (fence)
-    acquire_fences->push_back(std::move(*fence));
+    acquire_fence = fence->GetGpuFenceHandle().Clone();
   return true;
 }
 
diff --git a/gpu/command_buffer/service/shared_image_backing_gl_image.h b/gpu/command_buffer/service/shared_image_backing_gl_image.h
index 70721ce..02d723e4 100644
--- a/gpu/command_buffer/service/shared_image_backing_gl_image.h
+++ b/gpu/command_buffer/service/shared_image_backing_gl_image.h
@@ -137,7 +137,7 @@
   ~SharedImageRepresentationOverlayImpl() override;
 
  private:
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override;
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override;
   void EndReadAccess(gfx::GpuFenceHandle release_fence) override;
   gl::GLImage* GetGLImage() override;
 
diff --git a/gpu/command_buffer/service/shared_image_backing_ozone.cc b/gpu/command_buffer/service/shared_image_backing_ozone.cc
index d13b27d..3cb8649 100644
--- a/gpu/command_buffer/service/shared_image_backing_ozone.cc
+++ b/gpu/command_buffer/service/shared_image_backing_ozone.cc
@@ -91,7 +91,7 @@
   ~SharedImageRepresentationOverlayOzone() override = default;
 
  private:
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override {
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override {
     auto* ozone_backing = static_cast<SharedImageBackingOzone*>(backing());
     std::vector<gfx::GpuFenceHandle> fences;
     bool need_end_fence;
@@ -99,8 +99,9 @@
                                &fences, need_end_fence);
     // Always need an end fence when finish reading from overlays.
     DCHECK(need_end_fence);
-    for (auto& fence : fences) {
-      acquire_fences->emplace_back(std::move(fence));
+    if (!fences.empty()) {
+      DCHECK(fences.size() == 1);
+      acquire_fence = std::move(fences.front());
     }
     return true;
   }
diff --git a/gpu/command_buffer/service/shared_image_representation.cc b/gpu/command_buffer/service/shared_image_representation.cc
index 3185b97..76e8da0 100644
--- a/gpu/command_buffer/service/shared_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image_representation.cc
@@ -311,10 +311,10 @@
     base::PassKey<SharedImageRepresentationOverlay> pass_key,
     SharedImageRepresentationOverlay* representation,
     gl::GLImage* gl_image,
-    std::vector<gfx::GpuFence> acquire_fences)
+    gfx::GpuFenceHandle acquire_fence)
     : ScopedAccessBase(representation),
       gl_image_(gl_image),
-      acquire_fences_(std::move(acquire_fences)) {}
+      acquire_fence_(std::move(acquire_fence)) {}
 
 SharedImageRepresentationOverlay::ScopedReadAccess::~ScopedReadAccess() {
   representation()->EndReadAccess(std::move(release_fence_));
@@ -327,15 +327,15 @@
     return nullptr;
   }
 
-  std::vector<gfx::GpuFence> acquire_fences;
-  if (!BeginReadAccess(&acquire_fences))
+  gfx::GpuFenceHandle acquire_fence;
+  if (!BeginReadAccess(acquire_fence))
     return nullptr;
 
   backing()->OnReadSucceeded();
 
   return std::make_unique<ScopedReadAccess>(
       base::PassKey<SharedImageRepresentationOverlay>(), this,
-      needs_gl_image ? GetGLImage() : nullptr, std::move(acquire_fences));
+      needs_gl_image ? GetGLImage() : nullptr, std::move(acquire_fence));
 }
 
 SharedImageRepresentationDawn::ScopedAccess::ScopedAccess(
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h
index c195746..0db2311 100644
--- a/gpu/command_buffer/service/shared_image_representation.h
+++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -417,7 +417,7 @@
     ScopedReadAccess(base::PassKey<SharedImageRepresentationOverlay> pass_key,
                      SharedImageRepresentationOverlay* representation,
                      gl::GLImage* gl_image,
-                     std::vector<gfx::GpuFence> acquire_fences);
+                     gfx::GpuFenceHandle acquire_fence);
     ~ScopedReadAccess();
 
     gl::GLImage* gl_image() const { return gl_image_; }
@@ -432,9 +432,7 @@
     }
 #endif
 
-    std::vector<gfx::GpuFence> TakeAcquireFences() {
-      return std::move(acquire_fences_);
-    }
+    gfx::GpuFenceHandle TakeAcquireFence() { return std::move(acquire_fence_); }
     void SetReleaseFence(gfx::GpuFenceHandle release_fence) {
       // Note: We overwrite previous fence. In case if window manager uses fence
       // for each frame we schedule overlay and the same image is scheduled for
@@ -445,7 +443,7 @@
 
    private:
     const raw_ptr<gl::GLImage> gl_image_;
-    std::vector<gfx::GpuFence> acquire_fences_;
+    gfx::GpuFenceHandle acquire_fence_;
     gfx::GpuFenceHandle release_fence_;
   };
 
@@ -454,10 +452,10 @@
  protected:
   // Notifies the backing that an access will start. Returns false if there is a
   // conflict. Otherwise, returns true and:
-  // - Adds gpu fences to |acquire_fences| that should be waited on before the
-  // SharedImage is ready to be displayed. These fences are fired when the gpu
+  // - Set a gpu fence to |acquire_fence| that should be waited on before the
+  // SharedImage is ready to be displayed. This fence is fired when the gpu
   // has finished writing.
-  virtual bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) = 0;
+  virtual bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) = 0;
 
   // |release_fence| is a fence that will be signaled when the image can be
   // safely re-used. Note, on some platforms window manager doesn't support
diff --git a/gpu/command_buffer/service/shared_image_representation_d3d.cc b/gpu/command_buffer/service/shared_image_representation_d3d.cc
index c2f84f7b..e9aca434 100644
--- a/gpu/command_buffer/service/shared_image_representation_d3d.cc
+++ b/gpu/command_buffer/service/shared_image_representation_d3d.cc
@@ -127,7 +127,7 @@
     default;
 
 bool SharedImageRepresentationOverlayD3D::BeginReadAccess(
-    std::vector<gfx::GpuFence>* acquire_fences) {
+    gfx::GpuFenceHandle& acquire_fence) {
   // Only D3D images need keyed mutex synchronization.
   if (gl_image_->GetType() == gl::GLImage::Type::D3D)
     return static_cast<SharedImageBackingD3D*>(backing())->BeginAccessD3D11();
diff --git a/gpu/command_buffer/service/shared_image_representation_d3d.h b/gpu/command_buffer/service/shared_image_representation_d3d.h
index dae1cdd..f046166 100644
--- a/gpu/command_buffer/service/shared_image_representation_d3d.h
+++ b/gpu/command_buffer/service/shared_image_representation_d3d.h
@@ -82,7 +82,7 @@
   ~SharedImageRepresentationOverlayD3D() override;
 
  private:
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override;
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override;
   void EndReadAccess(gfx::GpuFenceHandle release_fence) override;
 
   gl::GLImage* GetGLImage() override;
diff --git a/gpu/command_buffer/service/shared_image_video_image_reader.cc b/gpu/command_buffer/service/shared_image_video_image_reader.cc
index 9791e1d..94d6a9f7 100644
--- a/gpu/command_buffer/service/shared_image_video_image_reader.cc
+++ b/gpu/command_buffer/service/shared_image_video_image_reader.cc
@@ -514,7 +514,7 @@
       const SharedImageRepresentationOverlayVideo&) = delete;
 
  protected:
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override {
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override {
     base::AutoLockMaybe auto_lock(GetDrDcLockPtr());
     // A |CodecImage| must have TextureOwner() for SurfaceControl overlays.
     // Legacy overlays are handled by SharedImageRepresentationLegacyOverlay.
@@ -530,7 +530,7 @@
     gfx::GpuFenceHandle handle;
     handle.owned_fd = scoped_hardware_buffer_->TakeFence();
     if (!handle.is_null())
-      acquire_fences->emplace_back(std::move(handle));
+      acquire_fence = std::move(handle);
 
     return true;
   }
diff --git a/gpu/command_buffer/service/test_shared_image_backing.cc b/gpu/command_buffer/service/test_shared_image_backing.cc
index cabbc1b..21011c8 100644
--- a/gpu/command_buffer/service/test_shared_image_backing.cc
+++ b/gpu/command_buffer/service/test_shared_image_backing.cc
@@ -130,7 +130,7 @@
                                        MemoryTypeTracker* tracker)
       : SharedImageRepresentationOverlay(manager, backing, tracker) {}
 
-  bool BeginReadAccess(std::vector<gfx::GpuFence>* acquire_fences) override {
+  bool BeginReadAccess(gfx::GpuFenceHandle& acquire_fence) override {
     return true;
   }
   void EndReadAccess(gfx::GpuFenceHandle release_fence) override {}
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
index da460e6..dbcdfc2 100644
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -159,6 +159,11 @@
 // Use a high priority for GPU process on Windows.
 const base::Feature kGpuProcessHighPriorityWin{
     "GpuProcessHighPriorityWin", base::FEATURE_ENABLED_BY_DEFAULT};
+
+// Disable overlay promotion for clear video quads when their MPO quad would
+// move.
+const base::Feature kDisableVideoOverlayIfMoving{
+    "DisableVideoOverlayIfMoving", base::FEATURE_DISABLED_BY_DEFAULT};
 #endif
 
 // Use ThreadPriority::DISPLAY for GPU main, viz compositor and IO threads.
diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h
index 659b3fc..6d0e0b7 100644
--- a/gpu/config/gpu_finch_features.h
+++ b/gpu/config/gpu_finch_features.h
@@ -38,6 +38,8 @@
 
 #if BUILDFLAG(IS_WIN)
 GPU_EXPORT extern const base::Feature kGpuProcessHighPriorityWin;
+
+GPU_EXPORT extern const base::Feature kDisableVideoOverlayIfMoving;
 #endif
 
 GPU_EXPORT extern const base::Feature kGpuUseDisplayThreadPriority;
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index fc994c9..43332aa 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -1326,15 +1326,16 @@
 
 #if BUILDFLAG(IOS_CREDENTIAL_PROVIDER_ENABLED)
 - (void)performFaviconsCleanup {
-  if (!self.currentBrowserState)
+  ChromeBrowserState* browserState = self.currentBrowserState;
+  if (!browserState)
     return;
 
   syncer::SyncService* syncService =
-      SyncServiceFactory::GetForBrowserState(self.currentBrowserState);
+      SyncServiceFactory::GetForBrowserState(browserState);
   if (syncService) {
-    UpdateFaviconsStorage(IOSChromeFaviconLoaderFactory::GetForBrowserState(
-                              self.currentBrowserState),
-                          syncService->IsSyncFeatureEnabled());
+    UpdateFaviconsStorage(
+        IOSChromeFaviconLoaderFactory::GetForBrowserState(browserState),
+        syncService->IsSyncFeatureEnabled());
   }
 }
 #endif
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
index abc5090..2c7e79c 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
@@ -20,7 +20,7 @@
 <translation id="2313070403598893276">‏Google Chrome ساده، ایمن، و سریع‌تر از همیشه است</translation>
 <translation id="2339201583852607431">‏گذرواژه در «حساب Google» خودتان (<ph name="EMAIL" />) ذخیره خواهد شد.</translation>
 <translation id="2342919707875585281">‏Chrome مکانتان را با سایت‌هایی که مجاز کرده‌اید هم‌رسانی می‌کند.</translation>
-<translation id="2347208864470321755">‏وقتی این ویژگی روشن است، Chrome ترجمه صفحات نوشته شده به دیگر زبان‌ها را با استفاده از ‏‫ترجمه Google‬ پیشنهاد می‌دهد. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
+<translation id="2347208864470321755">‏وقتی این ویژگی روشن است، Chrome ترجمه صفحه‌های نوشته‌شده به دیگر زبان‌ها را بااستفاده از «ترجمه Google» پیشنهاد می‌دهد. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="2427791862912929107">‏Chrome ویژگی‌هایی دارد که به شما کمک می‌کنند داده‌های اینترنت و سرعت بارگیری صفحه‌های وب را مدیریت کنید.
 <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="2561231791489583059">‏از Chrome به‌عنوان مرورگر پیش‌فرض استفاده کنید تا دربرابر سایت‌های خطرناک از شما محافظت شود و امنیت گذرواژه‌هایتان حفظ شود</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 903acb3..4670d26 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -571,7 +571,7 @@
 <translation id="5896576662943111387">‏ساخته‌شده برای iOS</translation>
 <translation id="5897956970858271241">به پیوندی که کپی کرده‌اید بروید</translation>
 <translation id="5899314093904173337">‏برای هم‌رسانی کردن با افراد حاضر در اطراف، به‌آن‌ها اجازه دهید این رمزینه پاسخ‌سریع را با دوربین خود یا برنامه اسکنر QR اسکن کنند</translation>
-<translation id="5911030830365207728">‏‫ترجمه Google‬</translation>
+<translation id="5911030830365207728">‏ترجمه Google</translation>
 <translation id="5913600720976431809">گزینه‌های ترجمه صفحه</translation>
 <translation id="5938160824633642847">دستگاهتان تقریباً پر است. فضا آزاد کنید و دوباره امتحان کنید.</translation>
 <translation id="5948291296578561264">با این کار می‌توانید عکس‌ها را در کتابخانه عکستان ذخیره کنید.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index d9eff4fb..77ac269b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -324,6 +324,7 @@
 <translation id="369349502275246497">Tilby å lagre passord</translation>
 <translation id="3709582977625132201">Merk som ulest</translation>
 <translation id="371230970611282515">Forutser og advarer deg om farlige hendelser før de inntreffer.</translation>
+<translation id="37207012422556617">Søk på vei opp</translation>
 <translation id="3740397331642243698">Åpner de oppgitte nettadressene i Google Chrome i inkognitomodus.</translation>
 <translation id="3762232513783804601">Laget for iPaden din</translation>
 <translation id="3771033907050503522">Inkognitofaner</translation>
diff --git a/ios/chrome/browser/credential_provider/credential_provider_util.mm b/ios/chrome/browser/credential_provider/credential_provider_util.mm
index 8961f81..1220d2f 100644
--- a/ios/chrome/browser/credential_provider/credential_provider_util.mm
+++ b/ios/chrome/browser/credential_provider/credential_provider_util.mm
@@ -140,8 +140,7 @@
   DCHECK(filename);
   if (skip_max_verification) {
     ContinueFetchingFavicon(favicon_loader->AsWeakPtr(), site_url, filename,
-                            sync_enabled,
-                            /* continue_fetching */ YES);
+                            sync_enabled, /* continue_fetching */ YES);
   } else {
     base::ThreadPool::PostTaskAndReplyWithResult(
         FROM_HERE, {base::MayBlock()},
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 91270ea..a9e39f0 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -1009,6 +1009,10 @@
     {"enable-user-policy", flag_descriptions::kEnableUserPolicyName,
      flag_descriptions::kEnableUserPolicyDescription, flags_ui::kOsIos,
      SINGLE_VALUE_TYPE(policy::kEnableUserPolicy)},
+    {"enable-sync-history-datatype",
+     flag_descriptions::kSyncEnableHistoryDataTypeName,
+     flag_descriptions::kSyncEnableHistoryDataTypeDescription, flags_ui::kOsIos,
+     FEATURE_VALUE_TYPE(syncer::kSyncEnableHistoryDataType)},
 };
 
 bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 93a0d99..e9d967a 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -617,6 +617,10 @@
     "When enabled the app will create synthetic crash report when chrome "
     "starts up after Unexplained Termination Event (UTE).";
 
+const char kSyncEnableHistoryDataTypeName[] = "Enable History sync data type";
+const char kSyncEnableHistoryDataTypeDescription[] =
+    "Enables the History sync data type instead of TypedURLs";
+
 const char kSyncTrustedVaultPassphraseiOSRPCName[] =
     "Enable RPC for sync trusted vault passphrase.";
 const char kSyncTrustedVaultPassphraseiOSRPCDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 58b63791..2120e72d 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -564,6 +564,10 @@
 extern const char kSynthesizedRestoreSessionName[];
 extern const char kSynthesizedRestoreSessionDescription[];
 
+// Title and description for the flag to enable the Sync History data type.
+extern const char kSyncEnableHistoryDataTypeName[];
+extern const char kSyncEnableHistoryDataTypeDescription[];
+
 // Title and description for the flag to control if Chrome Sync should support
 // trusted vault RPC.
 extern const char kSyncTrustedVaultPassphraseiOSRPCName[];
diff --git a/ios/chrome/browser/providers/BUILD.gn b/ios/chrome/browser/providers/BUILD.gn
index eb772f0..53ab3c52 100644
--- a/ios/chrome/browser/providers/BUILD.gn
+++ b/ios/chrome/browser/providers/BUILD.gn
@@ -52,6 +52,7 @@
     "//ios/chrome/browser/providers/signin:chromium_signin_error",
     "//ios/chrome/browser/providers/signin:chromium_signin_resources",
     "//ios/chrome/browser/providers/signin:chromium_signin_sso",
+    "//ios/chrome/browser/providers/signin:chromium_trusted_vault",
     "//ios/chrome/browser/providers/text_classifier:chromium_text_classifier",
     "//ios/chrome/browser/providers/text_zoom:chromium_text_zoom",
     "//ios/chrome/browser/providers/ui_utils:chromium_ui_utils",
diff --git a/ios/chrome/browser/providers/signin/BUILD.gn b/ios/chrome/browser/providers/signin/BUILD.gn
index 147595e..0035c128 100644
--- a/ios/chrome/browser/providers/signin/BUILD.gn
+++ b/ios/chrome/browser/providers/signin/BUILD.gn
@@ -28,3 +28,12 @@
   deps = [ "//ios/public/provider/chrome/browser/signin:signin_sso_api" ]
   frameworks = [ "Foundation.framework" ]
 }
+
+source_set("chromium_trusted_vault") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [ "chromium_trusted_vault.mm" ]
+  deps = [
+    "//base",
+    "//ios/public/provider/chrome/browser/signin:trusted_vault_api",
+  ]
+}
diff --git a/ios/chrome/browser/providers/signin/chromium_trusted_vault.mm b/ios/chrome/browser/providers/signin/chromium_trusted_vault.mm
new file mode 100644
index 0000000..c1e1fcdf
--- /dev/null
+++ b/ios/chrome/browser/providers/signin/chromium_trusted_vault.mm
@@ -0,0 +1,96 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/public/provider/chrome/browser/signin/trusted_vault_api.h"
+
+#import "base/callback.h"
+#import "base/notreached.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace ios {
+namespace provider {
+namespace {
+
+// A null implementation of TrustedVaultClient used for the public builds. It
+// fails all method calls (as it should only be called after the user has been
+// signed-in which is not supported by public build).
+class ChromiumTrustedVaultClientBackend final
+    : public TrustedVaultClientBackend {
+ public:
+  // TrustedVaultClientBackend implementation.
+  void AddObserver(Observer* observer) final;
+  void RemoveObserver(Observer* observer) final;
+  void FetchKeys(ChromeIdentity* chrome_identity,
+                 KeyFetchedCallback callback) final;
+  void MarkLocalKeysAsStale(ChromeIdentity* chrome_identity,
+                            base::OnceClosure callback) final;
+  void GetDegradedRecoverabilityStatus(
+      ChromeIdentity* chrome_identity,
+      base::OnceCallback<void(bool)> callback) final;
+  void Reauthentication(ChromeIdentity* chrome_identity,
+                        UIViewController* presenting_view_controller,
+                        CompletionBlock callback) final;
+  void FixDegradedRecoverability(ChromeIdentity* chrome_identity,
+                                 UIViewController* presenting_view_controller,
+                                 CompletionBlock callback) final;
+  void CancelDialog(BOOL animated, ProceduralBlock callback) final;
+};
+
+void ChromiumTrustedVaultClientBackend::AddObserver(Observer* observer) {
+  // Do nothing.
+}
+
+void ChromiumTrustedVaultClientBackend::RemoveObserver(Observer* observer) {
+  // Do nothing.
+}
+
+void ChromiumTrustedVaultClientBackend::FetchKeys(
+    ChromeIdentity* chrome_identity,
+    KeyFetchedCallback callback) {
+  NOTREACHED();
+}
+
+void ChromiumTrustedVaultClientBackend::MarkLocalKeysAsStale(
+    ChromeIdentity* chrome_identity,
+    base::OnceClosure callback) {
+  NOTREACHED();
+}
+
+void ChromiumTrustedVaultClientBackend::GetDegradedRecoverabilityStatus(
+    ChromeIdentity* chrome_identity,
+    base::OnceCallback<void(bool)> callback) {
+  NOTREACHED();
+}
+
+void ChromiumTrustedVaultClientBackend::Reauthentication(
+    ChromeIdentity* chrome_identity,
+    UIViewController* presenting_view_controller,
+    CompletionBlock callback) {
+  NOTREACHED();
+}
+
+void ChromiumTrustedVaultClientBackend::FixDegradedRecoverability(
+    ChromeIdentity* chrome_identity,
+    UIViewController* presenting_view_controller,
+    CompletionBlock callback) {
+  NOTREACHED();
+}
+
+void ChromiumTrustedVaultClientBackend::CancelDialog(BOOL animated,
+                                                     ProceduralBlock callback) {
+  NOTREACHED();
+}
+
+}  // anonymous namespace
+
+std::unique_ptr<TrustedVaultClientBackend> CreateTrustedVaultClientBackend(
+    TrustedVaultConfiguration* configuration) {
+  return std::make_unique<ChromiumTrustedVaultClientBackend>();
+}
+
+}  // namespace provider
+}  // namespace ios
diff --git a/ios/chrome/browser/signin/BUILD.gn b/ios/chrome/browser/signin/BUILD.gn
index 0f357a3..7c9b620 100644
--- a/ios/chrome/browser/signin/BUILD.gn
+++ b/ios/chrome/browser/signin/BUILD.gn
@@ -149,6 +149,26 @@
   ]
 }
 
+source_set("trusted_vault") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "trusted_vault_client_backend.h",
+    "trusted_vault_client_backend.mm",
+    "trusted_vault_configuration.h",
+    "trusted_vault_configuration.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/keyed_service/core",
+    "//components/sync/driver",
+    "//ios/public/provider/chrome/browser/signin:signin_sso_api",
+  ]
+  frameworks = [
+    "UIKit.framework",
+    "Foundation.framework",
+  ]
+}
+
 source_set("test_support") {
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
@@ -160,6 +180,7 @@
   ]
   deps = [
     ":signin",
+    ":trusted_vault",
     "//base",
     "//components/image_fetcher/core:test_support",
     "//components/keyed_service/core",
diff --git a/ios/chrome/browser/signin/trusted_vault_client_backend.h b/ios/chrome/browser/signin/trusted_vault_client_backend.h
new file mode 100644
index 0000000..88e1be8
--- /dev/null
+++ b/ios/chrome/browser/signin/trusted_vault_client_backend.h
@@ -0,0 +1,90 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_CLIENT_BACKEND_H_
+#define IOS_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_CLIENT_BACKEND_H_
+
+#include <UIKit/UIKit.h>
+
+#include <vector>
+
+#include "base/callback_forward.h"
+#include "base/ios/block_types.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/sync/driver/trusted_vault_client.h"
+
+@class ChromeIdentity;
+
+// Abstract class to manage shared keys.
+class TrustedVaultClientBackend : public KeyedService {
+ public:
+  // Helper types representing a key and a list of key respectively.
+  using SharedKey = std::vector<uint8_t>;
+  using SharedKeyList = std::vector<SharedKey>;
+
+  // Represents the TrustedVaultClientBackend observers.
+  using Observer = syncer::TrustedVaultClient::Observer;
+
+  // Types for the different callbacks.
+  using KeyFetchedCallback = base::OnceCallback<void(const SharedKeyList&)>;
+  using CompletionBlock = void (^)(BOOL success, NSError* error);
+
+  TrustedVaultClientBackend();
+
+  TrustedVaultClientBackend(const TrustedVaultClientBackend&) = delete;
+  TrustedVaultClientBackend& operator=(const TrustedVaultClientBackend&) =
+      delete;
+
+  ~TrustedVaultClientBackend() override;
+
+  // Adds/removes observers.
+  virtual void AddObserver(Observer* observer) = 0;
+  virtual void RemoveObserver(Observer* observer) = 0;
+
+  // Asynchronously fetches the shared keys for `identity` and invokes
+  // `callback` with the fetched keys.
+  virtual void FetchKeys(ChromeIdentity* chrome_identity,
+                         KeyFetchedCallback callback) = 0;
+
+  // Invoked when the result of FetchKeys() contains keys that are not
+  // up-to-date. During the execution, before `callback` is invoked, the
+  // behavior is unspecified if FetchKeys() is invoked, that is, FetchKeys()
+  // may or may not treat existing keys as stale (only guaranteed upon
+  // completion of MarkLocalKeysAsStale()).
+  virtual void MarkLocalKeysAsStale(ChromeIdentity* chrome_identity,
+                                    base::OnceClosure callback) = 0;
+
+  // Returns whether recoverability of the keys is degraded and user action is
+  // required to add a new method.
+  virtual void GetDegradedRecoverabilityStatus(
+      ChromeIdentity* chrome_identity,
+      base::OnceCallback<void(bool)> callback) = 0;
+
+  // Presents the trusted vault key reauthentication UI for `identity` for the
+  // purpose of extending the set of keys returned via FetchKeys(). Once the
+  // reauth is done and the UI is dismissed, `callback` is called. `callback` is
+  // not called if the reauthentication is canceled.
+  virtual void Reauthentication(ChromeIdentity* chrome_identity,
+                                UIViewController* presenting_view_controller,
+                                CompletionBlock callback) = 0;
+
+  // Presents the trusted vault key reauthentication UI for `identity` for the
+  // purpose of improving recoverability as returned via
+  // GetDegradedRecoverabilityStatus(). Once the reauth is done and the UI is
+  // dismissed, `callback` is called. `callback` is not called if the
+  // reauthentication is canceled.
+  virtual void FixDegradedRecoverability(
+      ChromeIdentity* chrome_identity,
+      UIViewController* presenting_view_controller,
+      CompletionBlock callback) = 0;
+
+  // Cancels the presented trusted vault reauthentication UI, triggered via
+  // either Reauthentication() or via
+  // FixDegradedRecoverability(). The reauthentication callback
+  // will not be called. If no reauthentication dialog is not present,
+  // `callback` is called synchronously.
+  virtual void CancelDialog(BOOL animated, ProceduralBlock callback) = 0;
+};
+
+#endif  // IOS_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_CLIENT_BACKEND_H_
diff --git a/ios/chrome/browser/signin/trusted_vault_client_backend.mm b/ios/chrome/browser/signin/trusted_vault_client_backend.mm
new file mode 100644
index 0000000..0df331d
--- /dev/null
+++ b/ios/chrome/browser/signin/trusted_vault_client_backend.mm
@@ -0,0 +1,13 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/signin/trusted_vault_client_backend.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+TrustedVaultClientBackend::TrustedVaultClientBackend() = default;
+
+TrustedVaultClientBackend::~TrustedVaultClientBackend() = default;
diff --git a/ios/chrome/browser/signin/trusted_vault_configuration.h b/ios/chrome/browser/signin/trusted_vault_configuration.h
new file mode 100644
index 0000000..bec633e
--- /dev/null
+++ b/ios/chrome/browser/signin/trusted_vault_configuration.h
@@ -0,0 +1,20 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_CONFIGURATION_H_
+#define IOS_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_CONFIGURATION_H_
+
+#import <Foundation/Foundation.h>
+
+#import "ios/public/provider/chrome/browser/signin/signin_sso_api.h"
+
+// Configuration object used by the TrustedVaultClientBackend.
+@interface TrustedVaultConfiguration : NSObject
+
+// SingleSignOnService used by TrustedVaultClientBackend.
+@property(nonatomic, strong) id<SingleSignOnService> ssoService;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_CONFIGURATION_H_
diff --git a/ios/chrome/browser/signin/trusted_vault_configuration.mm b/ios/chrome/browser/signin/trusted_vault_configuration.mm
new file mode 100644
index 0000000..24dcda0
--- /dev/null
+++ b/ios/chrome/browser/signin/trusted_vault_configuration.mm
@@ -0,0 +1,13 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/signin/trusted_vault_configuration.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@implementation TrustedVaultConfiguration
+
+@end
diff --git a/ios/chrome/browser/ui/badges/badge_button_factory.mm b/ios/chrome/browser/ui/badges/badge_button_factory.mm
index b12eaa769..851f155 100644
--- a/ios/chrome/browser/ui/badges/badge_button_factory.mm
+++ b/ios/chrome/browser/ui/badges/badge_button_factory.mm
@@ -29,10 +29,10 @@
     @"kOverflowPopupMenuActionIdentifier";
 
 // The size of the incognito symbol image.
-NSInteger kSymbolIncognitoPointSize = 28;
+const CGFloat kSymbolIncognitoPointSize = 28.;
 
 // The size of the incognito full screen symbol image.
-NSInteger kSymbolIncognitoFullScreenPointSize = 14;
+const CGFloat kSymbolIncognitoFullScreenPointSize = 14.;
 
 }  // namespace
 
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
index dbc0411..6927117 100644
--- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -12,6 +12,7 @@
 #import "components/feature_engagement/public/tracker.h"
 #import "components/profile_metrics/browser_profile_type.h"
 #import "components/safe_browsing/core/common/features.h"
+#import "components/signin/ios/browser/active_state_manager.h"
 #import "components/translate/core/browser/translate_manager.h"
 #import "ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h"
 #import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
@@ -128,6 +129,8 @@
 #import "ios/chrome/browser/ui/toolbar/secondary_toolbar_coordinator.h"
 #import "ios/chrome/browser/ui/toolbar/toolbar_coordinator_adaptor.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
+#import "ios/chrome/browser/ui/voice/text_to_speech_playback_controller.h"
+#import "ios/chrome/browser/ui/voice/text_to_speech_playback_controller_factory.h"
 #import "ios/chrome/browser/ui/webui/net_export_coordinator.h"
 #import "ios/chrome/browser/url_loading/url_loading_browser_agent.h"
 #import "ios/chrome/browser/url_loading/url_loading_params.h"
@@ -370,6 +373,7 @@
   [self startChildCoordinators];
   // Browser delegates can have dependencies on coordinators.
   [self installDelegatesForBrowser];
+  [self installDelegatesForBrowserState];
   [self addWebStateListObserver];
   [super start];
   self.started = YES;
@@ -379,7 +383,10 @@
   if (!self.started)
     return;
   [super stop];
+
+  self.active = NO;
   [self removeWebStateListObserver];
+  [self uninstallDelegatesForBrowserState];
   [self uninstallDelegatesForBrowser];
   [self uninstallDelegatesForAllWebStates];
   [self.tabLifecycleMediator disconnect];
@@ -408,6 +415,18 @@
     [self showActivityOverlay];
   }
 
+  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  if (browserState) {
+    // TODO(crbug.com/1272520): Refactor ActiveStateManager for multiwindow.
+    ActiveStateManager* active_state_manager =
+        ActiveStateManager::FromBrowserState(browserState);
+    active_state_manager->SetActive(active);
+
+    TextToSpeechPlaybackControllerFactory::GetInstance()
+        ->GetForBrowserState(browserState)
+        ->SetEnabled(active);
+  }
+
   // TODO(crbug.com/1272516): Update the WebUsageEnablerBrowserAgent as part of
   // setting active/inactive.
   self.viewController.active = active;
@@ -512,6 +531,7 @@
 // Shuts down the BrowserViewController.
 - (void)destroyViewController {
   // TODO(crbug.com/1272516): Set the WebUsageEnablerBrowserAgent to disabled.
+  self.viewController.active = NO;
   [self.viewController shutdown];
   _viewController = nil;
 }
@@ -1530,6 +1550,26 @@
       self.browser, self.viewController, applicationCommandHandler);
 }
 
+// Installs delegates for self.browser->GetBrowserState()
+- (void)installDelegatesForBrowserState {
+  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  if (browserState) {
+    TextToSpeechPlaybackControllerFactory::GetInstance()
+        ->GetForBrowserState(browserState)
+        ->SetWebStateList(self.browser->GetWebStateList());
+  }
+}
+
+// Uninstalls delegates for self.browser->GetBrowserState()
+- (void)uninstallDelegatesForBrowserState {
+  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  if (browserState) {
+    TextToSpeechPlaybackControllerFactory::GetInstance()
+        ->GetForBrowserState(browserState)
+        ->SetWebStateList(nullptr);
+  }
+}
+
 // Uninstalls delegates for self.browser.
 - (void)uninstallDelegatesForBrowser {
   UrlLoadingBrowserAgent* loadingAgent =
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index df8a56c..fdedf6f 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -18,7 +18,6 @@
 #import "components/feature_engagement/public/tracker.h"
 #import "components/reading_list/core/reading_list_model.h"
 #import "components/sessions/core/tab_restore_service_helper.h"
-#import "components/signin/ios/browser/active_state_manager.h"
 #import "components/strings/grit/components_strings.h"
 #import "components/ukm/ios/ukm_url_recorder.h"
 #import "ios/chrome/app/application_delegate/app_state.h"
@@ -118,8 +117,6 @@
 #import "ios/chrome/browser/ui/util/page_animation_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/chrome/browser/ui/util/url_with_title.h"
-#import "ios/chrome/browser/ui/voice/text_to_speech_playback_controller.h"
-#import "ios/chrome/browser/ui/voice/text_to_speech_playback_controller_factory.h"
 #import "ios/chrome/browser/upgrade/upgrade_center.h"
 #import "ios/chrome/browser/url_loading/url_loading_browser_agent.h"
 #import "ios/chrome/browser/url_loading/url_loading_notifier_browser_agent.h"
@@ -496,7 +493,7 @@
                           (BrowserViewControllerDependencies)dependencies {
   self = [super initWithNibName:nil bundle:base::mac::FrameworkBundle()];
   if (self) {
-    // TODO(crbug.com/1272524): DCHECK that `browser` is non-null.
+    DCHECK(browser);
 
     _browserContainerViewController = browserContainerViewController;
     _browserViewControllerHelper = browserViewControllerHelper;
@@ -897,18 +894,6 @@
   }
   _active = active;
 
-  // TODO(crbug.com/1272524): Move these updates to BrowserCoordinator.
-  if (self.browserState) {
-    // TODO(crbug.com/1272520): Refactor ActiveStateManager for multiwindow.
-    ActiveStateManager* active_state_manager =
-        ActiveStateManager::FromBrowserState(self.browserState);
-    active_state_manager->SetActive(active);
-
-    TextToSpeechPlaybackControllerFactory::GetInstance()
-        ->GetForBrowserState(self.browserState)
-        ->SetEnabled(_active);
-  }
-
   self.webUsageEnabled = active;
   [self updateBroadcastState];
 
@@ -1020,21 +1005,10 @@
   DCHECK(!_isShutdown);
   _isShutdown = YES;
 
-  [self setActive:NO];
-
-  // TODO(crbug.com/1272524): Move these updates to BrowserCoordinator.
-  if (self.browserState) {
-    TextToSpeechPlaybackController* controller =
-        TextToSpeechPlaybackControllerFactory::GetInstance()
-            ->GetForBrowserState(self.browserState);
-    if (controller)
-      controller->SetWebStateList(nullptr);
-
     UrlLoadingNotifierBrowserAgent* notifier =
         UrlLoadingNotifierBrowserAgent::FromBrowser(self.browser);
     if (notifier)
       notifier->RemoveObserver(_URLLoadingObserverBridge.get());
-  }
 
   // Disconnect child coordinators.
   if (base::FeatureList::IsEnabled(kModernTabStrip)) {
@@ -1209,7 +1183,7 @@
       [self primaryToolbarHeightWithInset];
 
   if (self.isNTPActiveForCurrentWebState && self.webUsageEnabled) {
-    _ntpCoordinator.viewController.view.frame =
+    self.ntpCoordinator.viewController.view.frame =
         [self ntpFrameForWebState:self.currentWebState];
   }
 }
@@ -1601,13 +1575,6 @@
   UrlLoadingNotifierBrowserAgent::FromBrowser(self.browser)
       ->AddObserver(_URLLoadingObserverBridge.get());
 
-  // Set the TTS playback controller's WebStateList.
-  // TODO(crbug.com/1272528): Move this somewhere else -- BrowserCoordinator at
-  // least.
-  TextToSpeechPlaybackControllerFactory::GetInstance()
-      ->GetForBrowserState(self.browserState)
-      ->SetWebStateList(self.browser->GetWebStateList());
-
   // When starting the browser with an open tab, it is necessary to reset the
   // clipsToBounds property of the WKWebView so the page can bleed behind the
   // toolbar.
@@ -2078,7 +2045,7 @@
     NewTabPageTabHelper* NTPHelper =
         NewTabPageTabHelper::FromWebState(webState);
     if (NTPHelper && NTPHelper->IsActive()) {
-      NewTabPageCoordinator* coordinator = _ntpCoordinator;
+      NewTabPageCoordinator* coordinator = self.ntpCoordinator;
       UIViewController* viewController = coordinator.viewController;
       [coordinator ntpDidChangeVisibility:YES];
       viewController.view.frame = [self ntpFrameForWebState:webState];
@@ -2261,7 +2228,9 @@
     return nil;
   NewTabPageTabHelper* NTPHelper = NewTabPageTabHelper::FromWebState(webState);
   if (NTPHelper && NTPHelper->IsActive()) {
-    return _ntpCoordinator.viewController.view;
+    return self.ntpCoordinator.webState != nil
+               ? self.ntpCoordinator.viewController.view
+               : nil;
   }
   DCHECK(self.browser->GetWebStateList()->GetIndexOfWebState(webState) !=
          WebStateList::kInvalidIndex);
@@ -2439,8 +2408,8 @@
 }
 
 - (void)stopNTP {
-  [_ntpCoordinator stop];
-  _ntpCoordinator = nullptr;
+  [self.ntpCoordinator stop];
+  self.ntpCoordinator = nullptr;
 }
 
 #pragma mark - ** Protocol Implementations and Helpers **
@@ -2751,7 +2720,7 @@
 
   // If NTP exists, use NTP coordinator's scroll offset.
   if (self.isNTPActiveForCurrentWebState) {
-    NewTabPageCoordinator* coordinator = _ntpCoordinator;
+    NewTabPageCoordinator* coordinator = self.ntpCoordinator;
     CGFloat scrolledToTopOffset = [coordinator contentInset].top;
     return [coordinator contentOffset].y == scrolledToTopOffset;
   }
@@ -2874,7 +2843,7 @@
     willUpdateSnapshotForWebState:(web::WebState*)webState {
   DCHECK(webState);
   if (self.isNTPActiveForCurrentWebState) {
-    [_ntpCoordinator willUpdateSnapshot];
+    [self.ntpCoordinator willUpdateSnapshot];
   }
   OverscrollActionsTabHelper::FromWebState(webState)->Clear();
 }
@@ -2883,7 +2852,7 @@
          baseViewForWebState:(web::WebState*)webState {
   NewTabPageTabHelper* NTPHelper = NewTabPageTabHelper::FromWebState(webState);
   if (NTPHelper && NTPHelper->IsActive())
-    return _ntpCoordinator.viewController.view;
+    return self.ntpCoordinator.viewController.view;
   return webState->GetView();
 }
 
@@ -3051,7 +3020,7 @@
     NewTabPageTabHelper* NTPHelper =
         NewTabPageTabHelper::FromWebState(webState);
     if (NTPHelper && NTPHelper->IsActive()) {
-      UIViewController* viewController = _ntpCoordinator.viewController;
+      UIViewController* viewController = self.ntpCoordinator.viewController;
       [viewController becomeFirstResponder];
     } else {
       [self.currentWebState->GetWebViewProxy() becomeFirstResponder];
@@ -3485,7 +3454,7 @@
 
 - (void)locationBarDidBecomeFirstResponder {
   if (self.isNTPActiveForCurrentWebState) {
-    [_ntpCoordinator locationBarDidBecomeFirstResponder];
+    [self.ntpCoordinator locationBarDidBecomeFirstResponder];
   }
   [_sideSwipeController setEnabled:NO];
 
@@ -3510,7 +3479,7 @@
   _keyCommandsProvider.canDismissModals = NO;
   [_sideSwipeController setEnabled:YES];
 
-  [_ntpCoordinator locationBarDidResignFirstResponder];
+  [self.ntpCoordinator locationBarDidResignFirstResponder];
 
   [UIView animateWithDuration:0.3
       animations:^{
@@ -3608,7 +3577,7 @@
 
 - (void)focusFakebox {
   if (self.isNTPActiveForCurrentWebState) {
-    [_ntpCoordinator focusFakebox];
+    [self.ntpCoordinator focusFakebox];
   }
 }
 
@@ -3638,11 +3607,11 @@
 }
 
 - (void)updateFollowingFeedHasUnseenContent:(BOOL)hasUnseenContent {
-  [_ntpCoordinator updateFollowingFeedHasUnseenContent:hasUnseenContent];
+  [self.ntpCoordinator updateFollowingFeedHasUnseenContent:hasUnseenContent];
 }
 
 - (void)handleFeedModelDidEndUpdates:(FeedType)feedType {
-  [_ntpCoordinator handleFeedModelDidEndUpdates:feedType];
+  [self.ntpCoordinator handleFeedModelDidEndUpdates:feedType];
 }
 
 #pragma mark - WebStateListObserving methods
@@ -3666,7 +3635,7 @@
     NewTabPageTabHelper* NTPHelper =
         NewTabPageTabHelper::FromWebState(oldWebState);
     if (NTPHelper && NTPHelper->IsActive()) {
-      [_ntpCoordinator ntpDidChangeVisibility:NO];
+      [self.ntpCoordinator ntpDidChangeVisibility:NO];
     }
     [self dismissPopups];
   }
@@ -3684,7 +3653,7 @@
   NewTabPageTabHelper* NTPHelper =
       NewTabPageTabHelper::FromWebState(newWebState);
   if (NTPHelper && NTPHelper->IsActive()) {
-    [_ntpCoordinator ntpDidChangeVisibility:YES];
+    [self.ntpCoordinator ntpDidChangeVisibility:YES];
   }
 
   [self webStateSelected:newWebState notifyToolbar:YES];
@@ -4049,7 +4018,7 @@
 
 - (id<LogoAnimationControllerOwner>)logoAnimationControllerOwner {
   if (self.isNTPActiveForCurrentWebState) {
-    NewTabPageCoordinator* coordinator = _ntpCoordinator;
+    NewTabPageCoordinator* coordinator = self.ntpCoordinator;
     if ([coordinator logoAnimationControllerOwner]) {
       // If NTP coordinator is showing a GLIF view (e.g. the NTP when there is
       // no doodle), use that GLIFControllerOwner.
diff --git a/ios/chrome/browser/ui/icons/chrome_symbol.h b/ios/chrome/browser/ui/icons/chrome_symbol.h
index 64c1aa8..f63c757 100644
--- a/ios/chrome/browser/ui/icons/chrome_symbol.h
+++ b/ios/chrome/browser/ui/icons/chrome_symbol.h
@@ -54,21 +54,21 @@
 
 // Returns a SF symbol named `symbolName` configured with the default
 // configuration and the given `pointSize`.
-UIImage* DefaultSymbolWithPointSize(NSString* symbolName, NSInteger pointSize);
+UIImage* DefaultSymbolWithPointSize(NSString* symbolName, CGFloat pointSize);
 
 // Returns a custom symbol named `symbolName` configured with the default
 // configuration and the given `pointSize`.
-UIImage* CustomSymbolWithPointSize(NSString* symbolName, NSInteger pointSize);
+UIImage* CustomSymbolWithPointSize(NSString* symbolName, CGFloat pointSize);
 
 // Returns a SF symbol named `symbolName` as a template image, configured with
 // the default configuration and the given `pointSize`.
 UIImage* DefaultSymbolTemplateWithPointSize(NSString* symbolName,
-                                            NSInteger pointSize);
+                                            CGFloat pointSize);
 
 // Returns a custom symbol named `symbolName` as a template image, configured
 // with the default configuration and the given `pointSize`.
 UIImage* CustomSymbolTemplateWithPointSize(NSString* symbolName,
-                                           NSInteger pointSize);
+                                           CGFloat pointSize);
 
 // Returns YES if the kUseSFSymbols flag is enabled.
 bool UseSymbols();
diff --git a/ios/chrome/browser/ui/icons/chrome_symbol.mm b/ios/chrome/browser/ui/icons/chrome_symbol.mm
index e7ca3a7..ceb5665f 100644
--- a/ios/chrome/browser/ui/icons/chrome_symbol.mm
+++ b/ios/chrome/browser/ui/icons/chrome_symbol.mm
@@ -15,7 +15,7 @@
 
 // Returns the default configuration with the given `pointSize`.
 UIImageConfiguration* DefaultSymbolConfigurationWithPointSize(
-    NSInteger pointSize) {
+    CGFloat pointSize) {
   return [UIImageSymbolConfiguration
       configurationWithPointSize:pointSize
                           weight:UIImageSymbolWeightMedium
@@ -90,24 +90,24 @@
   return SymbolWithConfiguration(symbolName, configuration, false);
 }
 
-UIImage* DefaultSymbolWithPointSize(NSString* symbolName, NSInteger pointSize) {
+UIImage* DefaultSymbolWithPointSize(NSString* symbolName, CGFloat pointSize) {
   return DefaultSymbolWithConfiguration(
       symbolName, DefaultSymbolConfigurationWithPointSize(pointSize));
 }
 
-UIImage* CustomSymbolWithPointSize(NSString* symbolName, NSInteger pointSize) {
+UIImage* CustomSymbolWithPointSize(NSString* symbolName, CGFloat pointSize) {
   return CustomSymbolWithConfiguration(
       symbolName, DefaultSymbolConfigurationWithPointSize(pointSize));
 }
 
 UIImage* DefaultSymbolTemplateWithPointSize(NSString* symbolName,
-                                            NSInteger pointSize) {
+                                            CGFloat pointSize) {
   return [DefaultSymbolWithPointSize(symbolName, pointSize)
       imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
 }
 
 UIImage* CustomSymbolTemplateWithPointSize(NSString* symbolName,
-                                           NSInteger pointSize) {
+                                           CGFloat pointSize) {
   return [CustomSymbolWithPointSize(symbolName, pointSize)
       imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
 }
diff --git a/ios/chrome/browser/ui/icons/download_icon.h b/ios/chrome/browser/ui/icons/download_icon.h
index 08fbc57..b99253d7 100644
--- a/ios/chrome/browser/ui/icons/download_icon.h
+++ b/ios/chrome/browser/ui/icons/download_icon.h
@@ -8,12 +8,12 @@
 #import <UIKit/UIKit.h>
 
 // The size of the symbol image used in the download toolbar.
-extern NSInteger kSymbolDownloadInfobarPointSize;
-extern NSInteger kSymbolDownloadSmallInfobarPointSize;
+extern const CGFloat kSymbolDownloadInfobarPointSize;
+extern const CGFloat kSymbolDownloadSmallInfobarPointSize;
 
 // Specific symbols used in the download toolbar.
-extern NSString* kDownloadPromptFillSymbol;
-extern NSString* kDownloadDocFillSymbol;
-extern NSString* kOpenInDownloadsSymbol;
+extern NSString* const kDownloadPromptFillSymbol;
+extern NSString* const kDownloadDocFillSymbol;
+extern NSString* const kOpenInDownloadsSymbol;
 
 #endif  // IOS_CHROME_BROWSER_UI_ICONS_DOWNLOAD_ICON_H_
diff --git a/ios/chrome/browser/ui/icons/download_icon.mm b/ios/chrome/browser/ui/icons/download_icon.mm
index 04e8a7a..bf30d47 100644
--- a/ios/chrome/browser/ui/icons/download_icon.mm
+++ b/ios/chrome/browser/ui/icons/download_icon.mm
@@ -8,9 +8,9 @@
 #error "This file requires ARC support."
 #endif
 
-NSInteger kSymbolDownloadInfobarPointSize = 18;
-NSInteger kSymbolDownloadSmallInfobarPointSize = 13;
+const CGFloat kSymbolDownloadInfobarPointSize = 18.;
+const CGFloat kSymbolDownloadSmallInfobarPointSize = 13.;
 
-NSString* kDownloadPromptFillSymbol = @"arrow.down.to.line.circle.fill";
-NSString* kDownloadDocFillSymbol = @"doc.fill";
-NSString* kOpenInDownloadsSymbol = @"arrow.down.to.line.alt";
+NSString* const kDownloadPromptFillSymbol = @"arrow.down.to.line.circle.fill";
+NSString* const kDownloadDocFillSymbol = @"doc.fill";
+NSString* const kOpenInDownloadsSymbol = @"arrow.down.to.line.alt";
diff --git a/ios/chrome/browser/ui/icons/infobar_icon.h b/ios/chrome/browser/ui/icons/infobar_icon.h
index fc7eac74..77dac550 100644
--- a/ios/chrome/browser/ui/icons/infobar_icon.h
+++ b/ios/chrome/browser/ui/icons/infobar_icon.h
@@ -8,6 +8,6 @@
 #import <UIKit/UIKit.h>
 
 // The size of the symbol image displayed in infobars.
-extern NSInteger kSymbolImagePointSize;
+extern const CGFloat kSymbolImagePointSize;
 
 #endif  // IOS_CHROME_BROWSER_UI_ICONS_INFOBAR_ICON_H_
diff --git a/ios/chrome/browser/ui/icons/infobar_icon.mm b/ios/chrome/browser/ui/icons/infobar_icon.mm
index 516818b4c8..36998bd 100644
--- a/ios/chrome/browser/ui/icons/infobar_icon.mm
+++ b/ios/chrome/browser/ui/icons/infobar_icon.mm
@@ -8,4 +8,4 @@
 #error "This file requires ARC support."
 #endif
 
-NSInteger kSymbolImagePointSize = 18;
+const CGFloat kSymbolImagePointSize = 18.;
diff --git a/ios/chrome/browser/ui/icons/item_icon.h b/ios/chrome/browser/ui/icons/item_icon.h
index be8965e..de4b2ee 100644
--- a/ios/chrome/browser/ui/icons/item_icon.h
+++ b/ios/chrome/browser/ui/icons/item_icon.h
@@ -8,10 +8,10 @@
 #import <UIKit/UIKit.h>
 
 // The size of accessory symbol images.
-extern NSInteger kSymbolAccessoryPointSize;
+extern const CGFloat kSymbolAccessoryPointSize;
 
 // Specific symbols used to create items.
-extern NSString* kExternalLinkSmbol;
-extern NSString* kChevronForwardSymbol;
+extern NSString* const kExternalLinkSmbol;
+extern NSString* const kChevronForwardSymbol;
 
 #endif  // IOS_CHROME_BROWSER_UI_ICONS_ITEM_ICON_H_
diff --git a/ios/chrome/browser/ui/icons/item_icon.mm b/ios/chrome/browser/ui/icons/item_icon.mm
index e8becf910..424edaf 100644
--- a/ios/chrome/browser/ui/icons/item_icon.mm
+++ b/ios/chrome/browser/ui/icons/item_icon.mm
@@ -8,7 +8,7 @@
 #error "This file requires ARC support."
 #endif
 
-NSInteger kSymbolAccessoryPointSize = 22;
+const CGFloat kSymbolAccessoryPointSize = 22.;
 
-NSString* kExternalLinkSmbol = @"arrow.up.forward.square";
-NSString* kChevronForwardSymbol = @"chevron.forward";
+NSString* const kExternalLinkSmbol = @"arrow.up.forward.square";
+NSString* const kChevronForwardSymbol = @"chevron.forward";
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
index 8680338..0d2e7577 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
@@ -45,7 +45,7 @@
 };
 
 // The size of the symbol image.
-NSInteger kSymbolImagePointSize = 18;
+const CGFloat kSymbolImagePointSize = 18.;
 
 // FullScreen progress threshold in which to toggle between full screen on and
 // off mode for the badge view.
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm
index 5913043c..7e6634b1 100644
--- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm
+++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm
@@ -31,7 +31,7 @@
 NSString* const kCloseActionImage = @"ptr_close";
 
 // The size of overscroll symbol images.
-NSInteger kOverScrollSymbolPointSize = 17;
+const CGFloat kOverScrollSymbolPointSize = 17.;
 
 // Represents a simple min/max range.
 typedef struct {
diff --git a/ios/chrome/browser/ui/settings/password/password_issues_mediator.mm b/ios/chrome/browser/ui/settings/password/password_issues_mediator.mm
index bd3e45d..885b255 100644
--- a/ios/chrome/browser/ui/settings/password/password_issues_mediator.mm
+++ b/ios/chrome/browser/ui/settings/password/password_issues_mediator.mm
@@ -128,12 +128,11 @@
 
 - (void)faviconForURL:(CrURL*)URL
            completion:(void (^)(FaviconAttributes*))completion {
-  self.faviconLoader->FaviconForPageUrl(
-      URL.gurl, kDesiredMediumFaviconSizePt, kMinFaviconSizePt,
-      self.syncService->IsSyncFeatureEnabled(),
-      ^(FaviconAttributes* attributes) {
-        completion(attributes);
-      });
+  syncer::SyncService* syncService = self.syncService;
+  const BOOL isSyncEnabled = syncService && syncService->IsSyncFeatureEnabled();
+  self.faviconLoader->FaviconForPageUrl(URL.gurl, kDesiredMediumFaviconSizePt,
+                                        kMinFaviconSizePt, isSyncEnabled,
+                                        completion);
 }
 
 @end
diff --git a/ios/chrome/browser/ui/settings/password/passwords_mediator.mm b/ios/chrome/browser/ui/settings/password/passwords_mediator.mm
index 18bbbb8a..ff98f94 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_mediator.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_mediator.mm
@@ -374,12 +374,11 @@
 
 - (void)faviconForURL:(CrURL*)URL
            completion:(void (^)(FaviconAttributes*))completion {
-  self.faviconLoader->FaviconForPageUrl(
-      URL.gurl, kDesiredMediumFaviconSizePt, kMinFaviconSizePt,
-      self.syncService->IsSyncFeatureEnabled(),
-      ^(FaviconAttributes* attributes) {
-        completion(attributes);
-      });
+  syncer::SyncService* syncService = self.syncService;
+  const BOOL isSyncEnabled = syncService && syncService->IsSyncFeatureEnabled();
+  self.faviconLoader->FaviconForPageUrl(URL.gurl, kDesiredMediumFaviconSizePt,
+                                        kMinFaviconSizePt, isSyncEnabled,
+                                        completion);
 }
 
 #pragma mark - IdentityManagerObserverBridgeDelegate
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm b/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
index 84c86d59..e7f7411 100644
--- a/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
+++ b/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
@@ -41,7 +41,7 @@
 namespace {
 
 // The size of the symbol image.
-NSInteger kSymbolImagePointSize = 17;
+CGFloat kSymbolImagePointSize = 17.;
 
 // List of item types.
 typedef NS_ENUM(NSInteger, ItemType) {
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_page_control.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_page_control.mm
index 31ce62f9..a35a401 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_page_control.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_page_control.mm
@@ -107,7 +107,7 @@
 const CGFloat kSelectedColor = 0x3C4043;
 
 // The size of the symbol image.
-NSInteger kSymbolTabGridPageControlPointSize = 24;
+const CGFloat kSymbolTabGridPageControlPointSize = 24.;
 
 // Returns the point that's at the center of `rect`.
 CGPoint RectCenter(CGRect rect) {
diff --git a/ios/chrome/browser/web/blocked_popup_tab_helper.mm b/ios/chrome/browser/web/blocked_popup_tab_helper.mm
index d9f0106..c699afcf 100644
--- a/ios/chrome/browser/web/blocked_popup_tab_helper.mm
+++ b/ios/chrome/browser/web/blocked_popup_tab_helper.mm
@@ -36,7 +36,7 @@
 // The infobar to display when a popup is blocked.
 
 // The size of the symbol image.
-NSInteger kSymbolImagePointSize = 18;
+const CGFloat kSymbolImagePointSize = 18.;
 
 // The name if the popup symbol.
 NSString* const kPopupBadgeMinusSymbol = @"popup_badge_minus";
diff --git a/ios/chrome/test/providers/signin/BUILD.gn b/ios/chrome/test/providers/signin/BUILD.gn
index 5f3080d..8013e00 100644
--- a/ios/chrome/test/providers/signin/BUILD.gn
+++ b/ios/chrome/test/providers/signin/BUILD.gn
@@ -8,6 +8,7 @@
     ":signin_error",
     ":signin_resources",
     ":signin_sso",
+    ":trusted_vault",
   ]
 }
 
@@ -40,3 +41,19 @@
   deps = [ "//ios/public/provider/chrome/browser/signin:signin_sso_api" ]
   frameworks = [ "Foundation.framework" ]
 }
+
+source_set("trusted_vault") {
+  testonly = true
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "fake_trusted_vault_client_backend.h",
+    "fake_trusted_vault_client_backend.mm",
+    "test_trusted_vault.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/signin:trusted_vault",
+    "//ios/public/provider/chrome/browser/signin:trusted_vault_api",
+  ]
+  frameworks = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.h b/ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.h
new file mode 100644
index 0000000..e68f41fc
--- /dev/null
+++ b/ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.h
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_TEST_PROVIDERS_SIGNIN_FAKE_TRUSTED_VAULT_CLIENT_BACKEND_H_
+#define IOS_CHROME_TEST_PROVIDERS_SIGNIN_FAKE_TRUSTED_VAULT_CLIENT_BACKEND_H_
+
+#include "ios/chrome/browser/signin/trusted_vault_client_backend.h"
+
+@class FakeTrustedVaultClientBackendViewController;
+
+// A fake implementation of TrustedVaultClientBackend API for tests.
+class FakeTrustedVaultClientBackend final : public TrustedVaultClientBackend {
+ public:
+  FakeTrustedVaultClientBackend();
+  ~FakeTrustedVaultClientBackend() final;
+
+  // TrustedVaultClientBackend implementation.
+  void AddObserver(Observer* observer) final;
+  void RemoveObserver(Observer* observer) final;
+  void FetchKeys(ChromeIdentity* chrome_identity,
+                 KeyFetchedCallback callback) final;
+  void MarkLocalKeysAsStale(ChromeIdentity* chrome_identity,
+                            base::OnceClosure callback) final;
+  void GetDegradedRecoverabilityStatus(
+      ChromeIdentity* chrome_identity,
+      base::OnceCallback<void(bool)> callback) final;
+  void Reauthentication(ChromeIdentity* chrome_identity,
+                        UIViewController* presenting_view_controller,
+                        CompletionBlock callback) final;
+  void FixDegradedRecoverability(ChromeIdentity* chrome_identity,
+                                 UIViewController* presenting_view_controller,
+                                 CompletionBlock callback) final;
+  void CancelDialog(BOOL animated, ProceduralBlock callback) final;
+
+  // Simulates user cancelling the reauth dialog.
+  void SimulateUserCancel();
+
+ private:
+  FakeTrustedVaultClientBackendViewController* view_controller_ = nil;
+};
+
+#endif  // IOS_CHROME_TEST_PROVIDERS_SIGNIN_FAKE_TRUSTED_VAULT_CLIENT_BACKEND_H_
diff --git a/ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.mm b/ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.mm
new file mode 100644
index 0000000..8d41ab4
--- /dev/null
+++ b/ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.mm
@@ -0,0 +1,124 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.h"
+
+#import <UIKit/UIKit.h>
+
+#import "base/callback.h"
+#import "base/check.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+using CompletionBlock = TrustedVaultClientBackend::CompletionBlock;
+
+@interface FakeTrustedVaultClientBackendViewController : UIViewController
+
+// Completion to call once the view controller is dismiss.
+@property(nonatomic, copy) CompletionBlock completion;
+
+- (instancetype)initWithCompletion:(CompletionBlock)completion
+    NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)initWithNibName:(NSString*)nibNameOrNil
+                         bundle:(NSBundle*)nibBundleOrNil NS_UNAVAILABLE;
+
+- (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE;
+
+// Simulate user cancelling the reauth dialog.
+- (void)simulateUserCancel;
+
+@end
+
+@implementation FakeTrustedVaultClientBackendViewController
+
+- (instancetype)initWithCompletion:(CompletionBlock)completion {
+  if ((self = [super initWithNibName:nil bundle:nil])) {
+    _completion = completion;
+  }
+  return self;
+}
+
+- (void)simulateUserCancel {
+  __weak __typeof(self) weakSelf = self;
+  [self.presentingViewController
+      dismissViewControllerAnimated:YES
+                         completion:^() {
+                           if (weakSelf.completion) {
+                             weakSelf.completion(NO, nil);
+                           }
+                         }];
+}
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  self.view.backgroundColor = UIColor.orangeColor;
+}
+
+@end
+
+FakeTrustedVaultClientBackend::FakeTrustedVaultClientBackend() = default;
+
+FakeTrustedVaultClientBackend::~FakeTrustedVaultClientBackend() = default;
+
+void FakeTrustedVaultClientBackend::AddObserver(Observer* observer) {
+  // Do nothing.
+}
+
+void FakeTrustedVaultClientBackend::RemoveObserver(Observer* observer) {
+  // Do nothing.
+}
+
+void FakeTrustedVaultClientBackend::FetchKeys(ChromeIdentity* chrome_identity,
+                                              KeyFetchedCallback callback) {
+  // Do nothing.
+}
+
+void FakeTrustedVaultClientBackend::MarkLocalKeysAsStale(
+    ChromeIdentity* chrome_identity,
+    base::OnceClosure callback) {
+  // Do nothing.
+}
+
+void FakeTrustedVaultClientBackend::GetDegradedRecoverabilityStatus(
+    ChromeIdentity* chrome_identity,
+    base::OnceCallback<void(bool)> callback) {
+  // Do nothing.
+}
+
+void FakeTrustedVaultClientBackend::Reauthentication(
+    ChromeIdentity* chrome_identity,
+    UIViewController* presenting_view_controller,
+    CompletionBlock callback) {
+  DCHECK(!view_controller_);
+  view_controller_ = [[FakeTrustedVaultClientBackendViewController alloc]
+      initWithCompletion:callback];
+  [presenting_view_controller presentViewController:view_controller_
+                                           animated:YES
+                                         completion:nil];
+}
+
+void FakeTrustedVaultClientBackend::FixDegradedRecoverability(
+    ChromeIdentity* chrome_identity,
+    UIViewController* presenting_view_controller,
+    CompletionBlock callback) {
+  // Do nothing.
+}
+
+void FakeTrustedVaultClientBackend::CancelDialog(BOOL animated,
+                                                 ProceduralBlock callback) {
+  DCHECK(view_controller_);
+  [view_controller_.presentingViewController
+      dismissViewControllerAnimated:animated
+                         completion:callback];
+  view_controller_ = nil;
+}
+
+void FakeTrustedVaultClientBackend::SimulateUserCancel() {
+  DCHECK(view_controller_);
+  [view_controller_ simulateUserCancel];
+  view_controller_ = nil;
+}
diff --git a/ios/chrome/test/providers/signin/test_trusted_vault.mm b/ios/chrome/test/providers/signin/test_trusted_vault.mm
new file mode 100644
index 0000000..2acbab1
--- /dev/null
+++ b/ios/chrome/test/providers/signin/test_trusted_vault.mm
@@ -0,0 +1,22 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/public/provider/chrome/browser/signin/trusted_vault_api.h"
+
+#import "ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace ios {
+namespace provider {
+
+std::unique_ptr<TrustedVaultClientBackend> CreateTrustedVaultClientBackend(
+    TrustedVaultConfiguration* configuration) {
+  return std::make_unique<FakeTrustedVaultClientBackend>();
+}
+
+}  // namespace provider
+}  // namespace ios
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 ea9b794..650773f 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 @@
-1d2ca3640ff21fe577ba32bfd404c9facc14718a
\ No newline at end of file
+bc05f8f44551dde018befa3bf64e0e8498d08749
\ 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 b473bf4..f6ebe9b 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 @@
-f994274d40ce3b550d85329391a1f6c84630ba81
\ No newline at end of file
+b32cc23b2e4395b2e151e8f4dcd560d44b5be449
\ 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 86cb68d..b1ca7f12 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 @@
-ad6b36d2d292de6a109062bdf4e3e0e985cd4e92
\ No newline at end of file
+ad19c1c649bac4d7edca3863afadf896b8fce896
\ 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 6443bf52..7ff547a 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 @@
-539da355cee7fb5fa9bdccc4f4d871f6d78163bc
\ No newline at end of file
+f04943706edc0c2a214d18cb177fdd4dfae61186
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
index 2ce0c737..58e155e 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-30f5e2c9e2a34427b84ba1765b84f4c0d532f4ed
\ No newline at end of file
+a5714521362716cd2aa82d9f2fb16962dc8a3ef3
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
index 098d532..ef06dbf4 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-88e0293c54f516d49119e2f11d2d0fadf74281b0
\ No newline at end of file
+ba43f2ca8aac48cefd981a0a0952b0e5566b5eb2
\ 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 5e14f11..5e46ce2 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 @@
-c8a141fb27e68f10ceb754a2d6fb4fe274b2fc45
\ No newline at end of file
+2e592fbdc6ba177c1b1ff606223d131c8e959c52
\ 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 ea264bc..5e96741 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 @@
-0d6d89f9651c5cde59d6f55dcf5c3c70721d1fff
\ No newline at end of file
+e1b673d25b7fbe93ff0d39904e84f202ec9fa399
\ 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 3774eb3..268ade0 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 @@
-75c1939d938f398c74779ad221a5d07d8e41a3d4
\ No newline at end of file
+98e70b016736bf50682917995525d5ff8916db88
\ 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 8b437ef..1f50430 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 @@
-d34be43ec81fd96994c95b0d3fc9868c9775d792
\ No newline at end of file
+ebf4db35291f19e39ddae2a7f25d5fd07a90f89f
\ No newline at end of file
diff --git a/ios/public/provider/chrome/browser/BUILD.gn b/ios/public/provider/chrome/browser/BUILD.gn
index 8d45307..6195dcb 100644
--- a/ios/public/provider/chrome/browser/BUILD.gn
+++ b/ios/public/provider/chrome/browser/BUILD.gn
@@ -40,6 +40,7 @@
     "//ios/public/provider/chrome/browser/signin:signin_error_api",
     "//ios/public/provider/chrome/browser/signin:signin_resources_api",
     "//ios/public/provider/chrome/browser/signin:signin_sso_api",
+    "//ios/public/provider/chrome/browser/signin:trusted_vault_api",
     "//ios/public/provider/chrome/browser/text_classifier:text_classifier_api",
     "//ios/public/provider/chrome/browser/text_zoom:text_zoom_api",
     "//ios/public/provider/chrome/browser/ui_utils:ui_utils_api",
diff --git a/ios/public/provider/chrome/browser/signin/BUILD.gn b/ios/public/provider/chrome/browser/signin/BUILD.gn
index 6b6ddaad..eca42a5 100644
--- a/ios/public/provider/chrome/browser/signin/BUILD.gn
+++ b/ios/public/provider/chrome/browser/signin/BUILD.gn
@@ -43,6 +43,12 @@
   frameworks = [ "Foundation.framework" ]
 }
 
+source_set("trusted_vault_api") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [ "trusted_vault_api.h" ]
+  deps = [ "//ios/chrome/browser/signin:trusted_vault" ]
+}
+
 source_set("test_support") {
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
diff --git a/ios/public/provider/chrome/browser/signin/DEPS b/ios/public/provider/chrome/browser/signin/DEPS
index 0e1534f..c1abb04 100644
--- a/ios/public/provider/chrome/browser/signin/DEPS
+++ b/ios/public/provider/chrome/browser/signin/DEPS
@@ -1,7 +1,9 @@
 include_rules = [
-  "+components/sync/driver/trusted_vault_client.h",
   "+components/signin/internal/identity_manager/account_capabilities_constants.h",
   "+components/signin/public/base/signin_metrics.h",
+  "+components/sync/driver/trusted_vault_client.h",
+  "+ios/chrome/browser/signin/trusted_vault_client_backend.h",
+  "+ios/chrome/browser/signin/trusted_vault_configuration.h",
 ]
 
 specific_include_rules = {
diff --git a/ios/public/provider/chrome/browser/signin/trusted_vault_api.h b/ios/public/provider/chrome/browser/signin/trusted_vault_api.h
new file mode 100644
index 0000000..54e35b1a3c
--- /dev/null
+++ b/ios/public/provider/chrome/browser/signin/trusted_vault_api.h
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_API_H_
+#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_API_H_
+
+#include <memory>
+
+#include "ios/chrome/browser/signin/trusted_vault_client_backend.h"
+#include "ios/chrome/browser/signin/trusted_vault_configuration.h"
+
+namespace ios {
+namespace provider {
+
+// Creates a new instance of TrustedVaultClientBackend.
+std::unique_ptr<TrustedVaultClientBackend> CreateTrustedVaultClientBackend(
+    TrustedVaultConfiguration* configuration);
+
+}  // namespace provider
+}  // namespace ios
+
+#endif  // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SIGNIN_TRUSTED_VAULT_API_H_
diff --git a/media/audio/alsa/alsa_input.cc b/media/audio/alsa/alsa_input.cc
index 513c4122..2a750922 100644
--- a/media/audio/alsa/alsa_input.cc
+++ b/media/audio/alsa/alsa_input.cc
@@ -120,10 +120,10 @@
     base::TimeDelta delay = buffer_duration_ + buffer_duration_ / 2;
     next_read_time_ = base::TimeTicks::Now() + delay;
     running_ = true;
-    capture_thread_.task_runner()->PostDelayedTask(
-        FROM_HERE,
+    capture_thread_.task_runner()->PostDelayedTaskAt(
+        base::subtle::PostDelayedTaskPassKey(), FROM_HERE,
         base::BindOnce(&AlsaPcmInputStream::ReadAudio, base::Unretained(this)),
-        delay);
+        next_read_time_, base::subtle::DelayPolicy::kPrecise);
   }
 }
 
@@ -178,20 +178,21 @@
   }
 
   if (frames < params_.frames_per_buffer()) {
+    base::TimeTicks now = base::TimeTicks::Now();
     // Not enough data yet or error happened. In both cases wait for a very
     // small duration before checking again.
     // Even Though read callback was behind schedule, there is no data, so
     // reset the next_read_time_.
     if (read_callback_behind_schedule_) {
-      next_read_time_ = base::TimeTicks::Now();
+      next_read_time_ = now;
       read_callback_behind_schedule_ = false;
     }
 
-    base::TimeDelta next_check_time = buffer_duration_ / 2;
-    capture_thread_.task_runner()->PostDelayedTask(
-        FROM_HERE,
+    base::TimeTicks next_check_time = now + buffer_duration_ / 2;
+    capture_thread_.task_runner()->PostDelayedTaskAt(
+        base::subtle::PostDelayedTaskPassKey(), FROM_HERE,
         base::BindOnce(&AlsaPcmInputStream::ReadAudio, base::Unretained(this)),
-        next_check_time);
+        next_check_time, base::subtle::DelayPolicy::kPrecise);
     return;
   }
 
@@ -239,21 +240,21 @@
   }
 
   next_read_time_ += buffer_duration_;
-  base::TimeDelta delay = next_read_time_ - base::TimeTicks::Now();
-  if (delay.is_negative()) {
+  base::TimeTicks now = base::TimeTicks::Now();
+  if (next_read_time_ < now) {
+    base::TimeDelta delay = now - next_read_time_;
     DVLOG(1) << "Audio read callback behind schedule by "
-             << (buffer_duration_ - delay).InMicroseconds()
-             << " (us).";
+             << (buffer_duration_ + delay).InMicroseconds() << " (us).";
     // Read callback is behind schedule. Assuming there is data pending in
     // the soundcard, invoke the read callback immediate in order to catch up.
     read_callback_behind_schedule_ = true;
-    delay = base::TimeDelta();
   }
 
-  capture_thread_.task_runner()->PostDelayedTask(
-      FROM_HERE,
+  // If |next_read_time_| is in the past, it will be scheduled immediately.
+  capture_thread_.task_runner()->PostDelayedTaskAt(
+      base::subtle::PostDelayedTaskPassKey(), FROM_HERE,
       base::BindOnce(&AlsaPcmInputStream::ReadAudio, base::Unretained(this)),
-      delay);
+      next_read_time_, base::subtle::DelayPolicy::kPrecise);
 }
 
 void AlsaPcmInputStream::Stop() {
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index ca6459db..99a9983f 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5688,21 +5688,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5161.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -5715,7 +5715,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "isolate_profile_data": true,
@@ -5853,21 +5853,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -5879,7 +5879,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "args": [
@@ -5999,21 +5999,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -6025,7 +6025,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index a3b0009..83f0964 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -92974,21 +92974,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5161.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -92996,7 +92996,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "isolate_profile_data": true,
@@ -93109,28 +93109,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "args": [
@@ -93230,28 +93230,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "isolate_profile_data": true,
@@ -94589,20 +94589,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5161.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -94616,7 +94616,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "merge": {
@@ -94754,20 +94754,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -94780,7 +94780,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "args": [
@@ -94900,20 +94900,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -94926,7 +94926,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "merge": {
@@ -96422,20 +96422,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5161.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -96449,7 +96449,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "merge": {
@@ -96587,20 +96587,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -96613,7 +96613,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "args": [
@@ -96733,20 +96733,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -96759,7 +96759,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "merge": {
@@ -97494,20 +97494,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5161.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -97520,7 +97520,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       }
     ]
   },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 69390c4..ecdf29d 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -20874,21 +20874,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5161.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -20901,7 +20901,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "isolate_profile_data": true,
@@ -21039,21 +21039,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -21065,7 +21065,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "args": [
@@ -21185,21 +21185,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5161.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5161.0",
-              "revision": "version:105.0.5161.0"
+              "location": "lacros_version_skew_tests_v105.0.5162.0",
+              "revision": "version:105.0.5162.0"
             }
           ],
           "dimension_sets": [
@@ -21211,7 +21211,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5161.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 4cac2a9..4e2f598 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,15 +22,15 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5161.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome',
     ],
-    'identifier': 'Lacros version skew testing ash 105.0.5161.0',
+    'identifier': 'Lacros version skew testing ash 105.0.5162.0',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v105.0.5161.0',
-          'revision': 'version:105.0.5161.0',
+          'location': 'lacros_version_skew_tests_v105.0.5162.0',
+          'revision': 'version:105.0.5162.0',
         },
       ],
     },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index c827061..003560e 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2141,6 +2141,21 @@
             ]
         }
     ],
+    "Canvas2DHibernationMac": [
+        {
+            "platforms": [
+                "mac"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "Canvas2DHibernation"
+                    ]
+                }
+            ]
+        }
+    ],
     "CanvasOutOfProcessRasterization": [
         {
             "platforms": [
@@ -8777,6 +8792,24 @@
             ]
         }
     ],
+    "UseMultipleOverlaysStudySupportedBoards": [
+        {
+            "platforms": [
+                "chromeos"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_20220502",
+                    "params": {
+                        "max_overlays": "8"
+                    },
+                    "enable_features": [
+                        "UseMultipleOverlays"
+                    ]
+                }
+            ]
+        }
+    ],
     "UseNativeThreadPool": [
         {
             "platforms": [
diff --git a/third_party/blink/public/mojom/webid/federated_auth_request.mojom b/third_party/blink/public/mojom/webid/federated_auth_request.mojom
index 978265d9..6f2e2de 100644
--- a/third_party/blink/public/mojom/webid/federated_auth_request.mojom
+++ b/third_party/blink/public/mojom/webid/federated_auth_request.mojom
@@ -15,7 +15,7 @@
 // the error message of such exception should say. This enum is a subset of
 // FederatedAuthRequestResult in
 // third_party/blink/public/mojom/devtools/inspector_issue.mojom.
-enum RequestIdTokenStatus {
+enum RequestTokenStatus {
   kSuccess,
   kApprovalDeclined,
   kErrorTooManyRequests,
@@ -45,15 +45,15 @@
 // This interface is called from a renderer process and implemented in the
 // browser process.
 interface FederatedAuthRequest {
-  // Requests an IdToken to be generated, given an IDP URL.
+  // Requests a token to be generated, given an IDP URL.
   // |client_id| and |nonce| can be empty strings to omit the fields in the
   // request sent to the provider.
-  // Returns the raw content of the IdToken.
-  RequestIdToken(url.mojom.Url provider,
+  // Returns the raw content of the token.
+  RequestToken(url.mojom.Url provider,
                  string client_id,
                  string nonce,
                  bool prefer_auto_sign_in) =>
-      (RequestIdTokenStatus status, string? id_token);
+      (RequestTokenStatus status, string? token);
 
   // Cancels the pending token request, if any.
   CancelTokenRequest();
diff --git a/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc b/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc
index 958b916..3188fe6 100644
--- a/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc
+++ b/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc
@@ -82,6 +82,10 @@
           To<LocalDOMWindow>(target),
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
     code_ = handler;
+    auto* tracker = ThreadScheduler::Current()->GetTaskAttributionTracker();
+    if (tracker && script_state->World().IsMainWorld()) {
+      code_parent_task_id_ = tracker->RunningTaskId(script_state);
+    }
   } else {
     UseCounter::Count(target, WebFeature::kScheduledActionIgnored);
   }
@@ -119,6 +123,7 @@
     DVLOG(1) << "ScheduledAction::execute " << this << ": context is empty";
     return;
   }
+  ScriptState* script_state = script_state_->Get();
 
   {
     // ExecutionContext::CanExecuteScripts() relies on the current context to
@@ -129,7 +134,7 @@
     // - InvokeAndReportException() => V8Function::Invoke() =>
     //   IsCallbackFunctionRunnable() and
     // - V8ScriptRunner::CompileAndRunScript().
-    ScriptState::Scope scope(script_state_->Get());
+    ScriptState::Scope scope(script_state);
     if (!context->CanExecuteScripts(kAboutToExecuteScript)) {
       DVLOG(1) << "ScheduledAction::execute " << this
                << ": window can not execute scripts";
@@ -148,6 +153,16 @@
     // evaluation below.
   }
 
+  // We create a TaskScope, to ensure code strings passed to ScheduledAction
+  // APIs properly track their ancestor as the registering task.
+  std::unique_ptr<scheduler::TaskAttributionTracker::TaskScope>
+      task_attribution_scope;
+  auto* tracker = ThreadScheduler::Current()->GetTaskAttributionTracker();
+  if (tracker && script_state->World().IsMainWorld()) {
+    task_attribution_scope =
+        tracker->CreateTaskScope(script_state, code_parent_task_id_);
+  }
+
   // We use |SanitizeScriptErrors::kDoNotSanitize| because muted errors flag is
   // not set in https://html.spec.whatwg.org/C/#timer-initialisation-steps
   // TODO(crbug.com/1133238): Plumb base URL etc. from the initializing script.
@@ -156,7 +171,7 @@
       ClassicScript::Create(code_, KURL(), KURL(), ScriptFetchOptions(),
                             ScriptSourceLocationType::kEvalForScheduledAction,
                             SanitizeScriptErrors::kDoNotSanitize);
-  script->RunScriptOnScriptState(script_state_->Get());
+  script->RunScriptOnScriptState(script_state);
 }
 
 void ScheduledAction::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/bindings/core/v8/scheduled_action.h b/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
index e47d4a1..fc5df33d 100644
--- a/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
+++ b/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
@@ -31,9 +31,11 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SCHEDULED_ACTION_H_
 #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SCHEDULED_ACTION_H_
 
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/platform/bindings/name_client.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/scheduler/public/task_id.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "v8/include/v8.h"
@@ -76,6 +78,7 @@
   Member<V8Function> function_;
   HeapVector<ScriptValue> arguments_;
   String code_;
+  absl::optional<scheduler::TaskId> code_parent_task_id_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni
index e952b407..7a1b1e7 100644
--- a/third_party/blink/renderer/bindings/generated_in_modules.gni
+++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -365,6 +365,10 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gamepad_event_init.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_get_notification_options.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_get_notification_options.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints_set.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints_set.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_bind_group_descriptor.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_bind_group_descriptor.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_bind_group_entry.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index 227dd50c..f1ea28af2 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -527,6 +527,7 @@
           "//third_party/blink/renderer/modules/payments/payment_shipping_option.idl",
           "//third_party/blink/renderer/modules/payments/payment_validation_errors.idl",
           "//third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl",
+          "//third_party/blink/renderer/modules/peerconnection/goog_media_constraints.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_answer_options.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_certificate.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl",
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
index 94e5186..8580013 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
@@ -447,7 +447,7 @@
   void SetZoomLevel(double zoom_level);
 
   // Called when the View has auto resized.
-  void DidAutoResize(const gfx::Size& size);
+  virtual void DidAutoResize(const gfx::Size& size);
 
   // This method returns the focused frame belonging to this WebWidget, that
   // is, a focused frame with the same local root as the one corresponding
diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.cc b/third_party/blink/renderer/core/html/portal/html_portal_element.cc
index 7c7441a..d7de474 100644
--- a/third_party/blink/renderer/core/html/portal/html_portal_element.cc
+++ b/third_party/blink/renderer/core/html/portal/html_portal_element.cc
@@ -15,6 +15,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_portal_activate_options.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_window_post_message_options.h"
+#include "third_party/blink/renderer/core/dom/container_node.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/core/dom/node.h"
@@ -66,6 +67,9 @@
                     {SchedulingPolicy::DisableBackForwardCache()})
               : FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle()) {
   if (remote_portal) {
+    // For adoption we must have a populated Portal with contents, which is
+    // created post-prerendering.
+    DCHECK(!GetDocument().IsPrerendering());
     DCHECK(portal_token);
     was_just_adopted_ = true;
     DCHECK(CanHaveGuestContents())
@@ -78,7 +82,7 @@
   UseCounter::Count(document, WebFeature::kHTMLPortalElement);
 }
 
-HTMLPortalElement::~HTMLPortalElement() {}
+HTMLPortalElement::~HTMLPortalElement() = default;
 
 void HTMLPortalElement::Trace(Visitor* visitor) const {
   HTMLFrameOwnerElement::Trace(visitor);
@@ -375,77 +379,17 @@
     ContainerNode& node) {
   auto result = HTMLFrameOwnerElement::InsertedInto(node);
 
-  if (!CheckPortalsEnabledOrWarn())
-    return result;
-
-  if (!CheckWithinFrameLimitOrWarn())
-    return result;
-
-  if (!SubframeLoadingDisabler::CanLoadFrame(*this))
-    return result;
-
-  switch (GetGuestContentsEligibility()) {
-    case GuestContentsEligibility::kIneligible:
-      return result;
-
-    case GuestContentsEligibility::kNotTopLevel:
-      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-          mojom::ConsoleMessageSource::kRendering,
-          mojom::ConsoleMessageLevel::kWarning,
-          "Cannot use <portal> in a nested browsing context."));
-      return result;
-
-    case GuestContentsEligibility::kSandboxed:
-      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-          mojom::ConsoleMessageSource::kRendering,
-          mojom::ConsoleMessageLevel::kWarning,
-          "Cannot use <portal> in a sandboxed browsing context."));
-      return result;
-
-    case GuestContentsEligibility::kNotHTTPFamily:
-      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-          mojom::ConsoleMessageSource::kRendering,
-          mojom::ConsoleMessageLevel::kWarning,
-          "<portal> use is restricted to the HTTP family."));
-      return result;
-
-    case GuestContentsEligibility::kEligible:
-      break;
-  };
-
-  // When adopting a predecessor, it is possible to insert a portal that's
-  // eligible to have a guest contents to a node that's not connected. In this
-  // case, do not create the portal frame yet.
-  if (!node.isConnected()) {
-    return result;
-  }
-
   if (portal_) {
-    // The interface is already bound if the HTMLPortalElement is adopting the
-    // predecessor.
-    GetDocument().GetFrame()->Client()->AdoptPortal(this);
+    DCHECK(!GetDocument().IsPrerendering());
+    if (IsPortalCreationOrAdoptionAllowed(&node)) {
+      // The interface is already bound if the HTMLPortalElement is adopting the
+      // predecessor.
+      GetDocument().GetFrame()->Client()->AdoptPortal(this);
+      probe::PortalRemoteFrameCreated(&GetDocument(), this);
+    }
   } else {
-    mojo::PendingAssociatedRemote<mojom::blink::Portal> portal;
-    mojo::PendingAssociatedReceiver<mojom::blink::Portal> portal_receiver =
-        portal.InitWithNewEndpointAndPassReceiver();
-
-    mojo::PendingAssociatedRemote<mojom::blink::PortalClient> client;
-    mojo::PendingAssociatedReceiver<mojom::blink::PortalClient>
-        client_receiver = client.InitWithNewEndpointAndPassReceiver();
-
-    RemoteFrame* portal_frame;
-    PortalToken portal_token;
-    std::tie(portal_frame, portal_token) =
-        GetDocument().GetFrame()->Client()->CreatePortal(
-            this, std::move(portal_receiver), std::move(client));
-    DCHECK(portal_frame);
-
-    portal_ = MakeGarbageCollected<PortalContents>(
-        *this, portal_token, std::move(portal), std::move(client_receiver));
-
-    Navigate();
+    CreatePortalAndNavigate(&node);
   }
-  probe::PortalRemoteFrameCreated(&GetDocument(), this);
   return result;
 }
 
@@ -535,4 +479,93 @@
   return referrer_policy_;
 }
 
+bool HTMLPortalElement::IsPortalCreationOrAdoptionAllowed(
+    const ContainerNode* node) {
+  if (!node) {
+    return false;
+  }
+  // When adopting a predecessor, it is possible to insert a portal that's
+  // eligible to have a guest contents to a node that's not connected. In this
+  // case, do not create the portal frame yet.
+  if (!node->isConnected()) {
+    return false;
+  }
+  if (!CheckPortalsEnabledOrWarn()) {
+    return false;
+  }
+  if (!CheckWithinFrameLimitOrWarn()) {
+    return false;
+  }
+  if (!SubframeLoadingDisabler::CanLoadFrame(*this)) {
+    return false;
+  }
+  switch (GetGuestContentsEligibility()) {
+    case GuestContentsEligibility::kIneligible:
+      return false;
+
+    case GuestContentsEligibility::kNotTopLevel:
+      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::blink::ConsoleMessageSource::kRendering,
+          mojom::blink::ConsoleMessageLevel::kWarning,
+          "Cannot use <portal> in a nested browsing context."));
+      return false;
+
+    case GuestContentsEligibility::kSandboxed:
+      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::blink::ConsoleMessageSource::kRendering,
+          mojom::blink::ConsoleMessageLevel::kWarning,
+          "Cannot use <portal> in a sandboxed browsing context."));
+      return false;
+
+    case GuestContentsEligibility::kNotHTTPFamily:
+      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::blink::ConsoleMessageSource::kRendering,
+          mojom::blink::ConsoleMessageLevel::kWarning,
+          "<portal> use is restricted to the HTTP family."));
+      return false;
+
+    case GuestContentsEligibility::kEligible:
+      break;
+  };
+
+  return true;
+}
+
+void HTMLPortalElement::CreatePortalAndNavigate(const ContainerNode* node) {
+  if (GetDocument().IsPrerendering()) {
+    GetDocument().AddPostPrerenderingActivationStep(
+        WTF::Bind(&HTMLPortalElement::CreatePortalAndNavigate,
+                  WrapWeakPersistent(this), WrapWeakPersistent(node)));
+    return;
+  }
+
+  if (!IsPortalCreationOrAdoptionAllowed(node)) {
+    return;
+  }
+
+  mojo::PendingAssociatedRemote<mojom::blink::Portal> portal;
+  mojo::PendingAssociatedReceiver<mojom::blink::Portal> portal_receiver =
+      portal.InitWithNewEndpointAndPassReceiver();
+
+  mojo::PendingAssociatedRemote<mojom::blink::PortalClient> client;
+  mojo::PendingAssociatedReceiver<mojom::blink::PortalClient> client_receiver =
+      client.InitWithNewEndpointAndPassReceiver();
+
+  RemoteFrame* portal_frame;
+  PortalToken portal_token;
+
+  std::tie(portal_frame, portal_token) =
+      GetDocument().GetFrame()->Client()->CreatePortal(
+          this, std::move(portal_receiver), std::move(client));
+  DCHECK(portal_frame);
+
+  DCHECK(!portal_);
+  portal_ = MakeGarbageCollected<PortalContents>(
+      *this, portal_token, std::move(portal), std::move(client_receiver));
+
+  Navigate();
+
+  probe::PortalRemoteFrameCreated(&GetDocument(), this);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.h b/third_party/blink/renderer/core/html/portal/html_portal_element.h
index e5cca8f1..319b1890 100644
--- a/third_party/blink/renderer/core/html/portal/html_portal_element.h
+++ b/third_party/blink/renderer/core/html/portal/html_portal_element.h
@@ -141,6 +141,11 @@
   void AttachLayoutTree(AttachContext& context) override;
   network::mojom::ReferrerPolicy ReferrerPolicyAttribute() override;
 
+  bool IsPortalCreationOrAdoptionAllowed(const ContainerNode* node);
+
+  // Defers the portal creation if the current document is being prerendered.
+  void CreatePortalAndNavigate(const ContainerNode* node);
+
   Member<PortalContents> portal_;
 
   network::mojom::ReferrerPolicy referrer_policy_ =
diff --git a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
index 3fcfab5c..0ca90032 100644
--- a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
@@ -289,4 +289,18 @@
   ScheduleAnimationForWebTests();
 }
 
+void WebTestWebFrameWidgetImpl::DidAutoResize(const gfx::Size& size) {
+  WebFrameWidgetImpl::DidAutoResize(size);
+
+  // Window rect resize for threaded compositing is delivered via requesting a
+  // new surface. The browser then reacts to the bounds of the surface changing
+  // and adjusts the WindowRect. For single threaded compositing the
+  // surface size is never processed so we force the WindowRect to be the
+  // same size as the WidgetSize when AutoResize is applied.
+  if (LayerTreeHost()->IsSingleThreaded()) {
+    gfx::Rect new_pos(Size());
+    SetWindowRect(new_pos, new_pos);
+  }
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h
index 219e0f33..4c3b1c0 100644
--- a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h
+++ b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h
@@ -69,6 +69,7 @@
                      DragOperationsMask operations_allowed,
                      const SkBitmap& drag_image,
                      const gfx::Point& drag_image_offset) override;
+  void DidAutoResize(const gfx::Size& size) override;
 
   // WidgetBaseClient overrides:
   void ScheduleAnimation() override;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc
index 77cb4eb4..0409c5d 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc
@@ -1445,8 +1445,9 @@
   blink::test::RunPendingTasks();  // Run hibernation task.
   // If enabled, hibernation should cause repaint of the painting layer.
   EXPECT_FALSE(box->NeedsPaintPropertyUpdate());
-  EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED, painting_layer->SelfNeedsRepaint());
-  EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED,
+  EXPECT_EQ(Canvas2DLayerBridge::IsHibernationEnabled(),
+            painting_layer->SelfNeedsRepaint());
+  EXPECT_EQ(Canvas2DLayerBridge::IsHibernationEnabled(),
             !CanvasElement().ResourceProvider());
 
   // The page is hidden so it doesn't make sense to paint, and doing so will
@@ -1459,7 +1460,8 @@
       mojom::blink::PageVisibilityState::kVisible,
       /*is_initial_state=*/false);
   EXPECT_FALSE(box->NeedsPaintPropertyUpdate());
-  EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED, painting_layer->SelfNeedsRepaint());
+  EXPECT_EQ(Canvas2DLayerBridge::IsHibernationEnabled(),
+            painting_layer->SelfNeedsRepaint());
 }
 
 TEST_P(CanvasRenderingContext2DTestAccelerated,
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
index 8eb35e06..12a76e5 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
+++ b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
@@ -100,7 +100,7 @@
 using MojoPublicKeyCredentialRequestOptions =
     mojom::blink::PublicKeyCredentialRequestOptions;
 using mojom::blink::GetAssertionAuthenticatorResponsePtr;
-using mojom::blink::RequestIdTokenStatus;
+using mojom::blink::RequestTokenStatus;
 using payments::mojom::blink::PaymentCredentialStorageStatus;
 
 constexpr char kCryptotokenOrigin[] =
@@ -564,33 +564,33 @@
   auth_request->CancelTokenRequest();
 }
 
-void OnRequestIdToken(ScriptPromiseResolver* resolver,
-                      const KURL& provider_url,
-                      const String& client_id,
-                      const CredentialRequestOptions* options,
-                      RequestIdTokenStatus status,
-                      const WTF::String& id_token) {
+void OnRequestToken(ScriptPromiseResolver* resolver,
+                    const KURL& provider_url,
+                    const String& client_id,
+                    const CredentialRequestOptions* options,
+                    RequestTokenStatus status,
+                    const WTF::String& token) {
   switch (status) {
-    case RequestIdTokenStatus::kErrorTooManyRequests: {
+    case RequestTokenStatus::kErrorTooManyRequests: {
       resolver->Reject(MakeGarbageCollected<DOMException>(
           DOMExceptionCode::kAbortError,
           "Only one navigator.credentials.get request may be outstanding at "
           "one time."));
       return;
     }
-    case RequestIdTokenStatus::kErrorCanceled: {
+    case RequestTokenStatus::kErrorCanceled: {
       resolver->Reject(MakeGarbageCollected<DOMException>(
           DOMExceptionCode::kAbortError, "The request has been aborted."));
       return;
     }
-    case RequestIdTokenStatus::kError: {
+    case RequestTokenStatus::kError: {
       resolver->Reject(MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kNetworkError, "Error retrieving an id token."));
+          DOMExceptionCode::kNetworkError, "Error retrieving a token."));
       return;
     }
-    case RequestIdTokenStatus::kSuccess: {
-      FederatedCredential* credential = FederatedCredential::Create(
-          provider_url, client_id, options, id_token);
+    case RequestTokenStatus::kSuccess: {
+      FederatedCredential* credential =
+          FederatedCredential::Create(provider_url, client_id, options, token);
       resolver->Resolve(credential);
       return;
     }
@@ -1248,9 +1248,9 @@
         auto* auth_request =
             CredentialManagerProxy::From(script_state)->FederatedAuthRequest();
 
-        auth_request->RequestIdToken(
+        auth_request->RequestToken(
             provider_url, client_id, nonce, prefer_auto_sign_in,
-            WTF::Bind(&OnRequestIdToken, WrapPersistent(resolver), provider_url,
+            WTF::Bind(&OnRequestToken, WrapPersistent(resolver), provider_url,
                       client_id, WrapPersistent(options)));
 
         return promise;
diff --git a/third_party/blink/renderer/modules/credentialmanagement/federated_credential.cc b/third_party/blink/renderer/modules/credentialmanagement/federated_credential.cc
index 56f591f..e9a2059 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/federated_credential.cc
+++ b/third_party/blink/renderer/modules/credentialmanagement/federated_credential.cc
@@ -22,7 +22,7 @@
 
 namespace {
 using mojom::blink::LogoutRpsStatus;
-using mojom::blink::RequestIdTokenStatus;
+using mojom::blink::RequestTokenStatus;
 
 constexpr char kFederatedCredentialType[] = "federated";
 
@@ -96,9 +96,9 @@
     const KURL& provider_url,
     const String& client_id,
     const CredentialRequestOptions* options,
-    const String& id_token) {
+    const String& token) {
   return MakeGarbageCollected<FederatedCredential>(provider_url, client_id,
-                                                   options, id_token);
+                                                   options, token);
 }
 
 bool FederatedCredential::IsRejectingPromiseDueToCSP(
@@ -154,13 +154,13 @@
     const KURL& provider_url,
     const String& client_id,
     const CredentialRequestOptions* options,
-    const String& id_token)
+    const String& token)
     : Credential(/* id = */ "", kFederatedCredentialType),
       provider_origin_(SecurityOrigin::Create(provider_url)),
       provider_url_(provider_url),
       client_id_(client_id),
       options_(options),
-      id_token_(id_token) {}
+      token_(token) {}
 
 void FederatedCredential::Trace(Visitor* visitor) const {
   Credential::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/credentialmanagement/federated_credential.h b/third_party/blink/renderer/modules/credentialmanagement/federated_credential.h
index f8d205b2..1650f17 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/federated_credential.h
+++ b/third_party/blink/renderer/modules/credentialmanagement/federated_credential.h
@@ -33,7 +33,7 @@
   static FederatedCredential* Create(const KURL& provider_url,
                                      const String& client_id,
                                      const CredentialRequestOptions* options,
-                                     const String& id_token);
+                                     const String& token);
 
   static bool IsRejectingPromiseDueToCSP(ContentSecurityPolicy* policy,
                                          ScriptPromiseResolver* resolver,
@@ -47,7 +47,7 @@
   FederatedCredential(const KURL& provider_url,
                       const String& client_id,
                       const CredentialRequestOptions* options,
-                      const String& id_token);
+                      const String& token);
 
   void Trace(Visitor*) const override;
 
@@ -65,7 +65,7 @@
   }
   const String& name() const { return name_; }
   const KURL& iconURL() const { return icon_url_; }
-  const String& idToken() const { return id_token_; }
+  const String& token() const { return token_; }
   const String& protocol() const {
     // TODO(mkwst): This is a stub, as we don't yet have any support on the
     // Chromium-side.
@@ -85,7 +85,7 @@
   const KURL provider_url_;
   const String client_id_;
   Member<const CredentialRequestOptions> options_;
-  const String id_token_;
+  const String token_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/credentialmanagement/federated_credential.idl b/third_party/blink/renderer/modules/credentialmanagement/federated_credential.idl
index 73a34d0..23a5196 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/federated_credential.idl
+++ b/third_party/blink/renderer/modules/credentialmanagement/federated_credential.idl
@@ -15,8 +15,8 @@
     [RuntimeEnabled=FedCm, CallWith=ScriptState]
     Promise<FederatedCredential> login();
 
-    // https://fedidcg.github.io/FedCM/#dom-id_token_endpoint_response-id_token
-    [RuntimeEnabled=FedCm] readonly attribute USVString idToken;
+    // https://fedidcg.github.io/FedCM/#dom-id_token_endpoint_response-token
+    [RuntimeEnabled=FedCm] readonly attribute USVString token;
 
     // Allows IDPs to logout the user out of all of the logged in RPs.
     [RuntimeEnabled=FedCmIdpSignout, CallWith=ScriptState, MeasureAs=FedCmLogoutRps]
diff --git a/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc b/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc
index 442d9d0..946994d 100644
--- a/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc
@@ -111,15 +111,6 @@
 // Google-specific constraint keys for a local video source (getUserMedia).
 const char kNoiseReduction[] = "googNoiseReduction";
 
-// Legacy RTCPeerConnection constructor constraints.
-
-// DtlsSrtpKeyAgreement is already ignored, except when building Fuchsia.
-// TODO(crbug.com/804275): Ignore on all platforms when Fuchsia dependency is
-// gone to unblock mediaConstraints removal.
-const char kEnableDtlsSrtp[] = "DtlsSrtpKeyAgreement";
-// TODO(https://crbug.com/1315576): Deprecate and ignore.
-const char kEnableIPv6[] = "googIPv6";
-
 // Names used for testing.
 const char kTestConstraint1[] = "valid_and_supported_1";
 const char kTestConstraint2[] = "valid_and_supported_2";
@@ -312,29 +303,6 @@
       result.goog_da_echo_cancellation.SetExact(ToBoolean(constraint.value_));
     } else if (constraint.name_.Equals(kNoiseReduction)) {
       result.goog_noise_reduction.SetExact(ToBoolean(constraint.value_));
-    } else if (constraint.name_.Equals(kEnableDtlsSrtp)) {
-      bool value = ToBoolean(constraint.value_);
-      if (value) {
-        Deprecation::CountDeprecation(
-            context, WebFeature::kRTCConstraintEnableDtlsSrtpTrue);
-      } else {
-        Deprecation::CountDeprecation(
-            context, WebFeature::kRTCConstraintEnableDtlsSrtpFalse);
-      }
-#if BUILDFLAG(IS_FUCHSIA)
-      // Special dispensation for Fuchsia to run SDES in 2022
-      // TODO(crbug.com/804275): Delete when Fuchsia no longer depends on it.
-      result.enable_dtls_srtp.SetExact(ToBoolean(constraint.value_));
-#endif
-    } else if (constraint.name_.Equals(kEnableIPv6)) {
-      result.enable_i_pv6.SetExact(ToBoolean(constraint.value_));
-      // Count deprecated usage of googIPv6, when it is set to false. Setting it
-      // to true is a NO-OP and apps doing this will not be affected when this
-      // constraint is ignored.
-      if (!result.enable_i_pv6.Exact()) {
-        Deprecation::CountDeprecation(context,
-                                      WebFeature::kLegacyConstraintGoogIPv6);
-      }
     } else if (constraint.name_.Equals(kTestConstraint1) ||
                constraint.name_.Equals(kTestConstraint2)) {
       // These constraints are only for testing parsing.
diff --git a/third_party/blink/renderer/modules/peerconnection/goog_media_constraints.idl b/third_party/blink/renderer/modules/peerconnection/goog_media_constraints.idl
new file mode 100644
index 0000000..c69d177
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/goog_media_constraints.idl
@@ -0,0 +1,23 @@
+// Copyright (c) 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// TODO(https://crbug.com/1318448): When all goog-constraints have been removed,
+// delete these non-standard dictionaries.
+
+dictionary GoogMediaConstraintsSet {
+  // TODO(https://crbug.com/1315576): Target removal: M108.
+  (boolean or ConstrainBooleanParameters) googIPv6;
+
+  // Already ignored on all platforms except for Fuchsia.
+  // TODO(https://crbug.com/804275): Delete when Fuchsia dependency is gone.
+  (boolean or ConstrainBooleanParameters) DtlsSrtpKeyAgreement;
+};
+
+dictionary GoogMediaConstraints {
+  GoogMediaConstraintsSet mandatory;
+
+  // The JavaScript observable name is "optional". The underscore is used to
+  // tell WebIDL not to treat this as a special keyword.
+  sequence<GoogMediaConstraintsSet> _optional;
+};
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.cc b/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.cc
index c39e588..9c9a4a84 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.cc
+++ b/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.cc
@@ -267,8 +267,9 @@
     default;
 
 bool MockRTCPeerConnectionHandlerPlatform::Initialize(
+    ExecutionContext*,
     const webrtc::PeerConnectionInterface::RTCConfiguration&,
-    const MediaConstraints&,
+    GoogMediaConstraints*,
     WebLocalFrame*,
     ExceptionState&) {
   return true;
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.h b/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.h
index ac192ba..45a0a07 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.h
+++ b/third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.h
@@ -86,8 +86,9 @@
   MockRTCPeerConnectionHandlerPlatform();
   ~MockRTCPeerConnectionHandlerPlatform() override;
 
-  bool Initialize(const webrtc::PeerConnectionInterface::RTCConfiguration&,
-                  const MediaConstraints&,
+  bool Initialize(ExecutionContext* context,
+                  const webrtc::PeerConnectionInterface::RTCConfiguration&,
+                  GoogMediaConstraints* media_constraints,
                   WebLocalFrame*,
                   ExceptionState&) override;
   void Close() override;
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
index 19dc8f6d9..0bb1a960 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
@@ -28,11 +28,10 @@
             blink::scheduler::GetSingleThreadTaskRunnerForTesting(),
             /*force_encoded_audio_insertable_streams=*/false,
             /*force_encoded_video_insertable_streams=*/false);
-    MediaConstraints constraints;
     DummyExceptionStateForTesting exception_state;
     webrtc::PeerConnectionInterface::RTCConfiguration config;
     config.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan;
-    handler->InitializeForTest(config, constraints,
+    handler->InitializeForTest(config,
                                /*peer_connection_tracker=*/nullptr,
                                exception_state);
     return handler;
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
index 30e5b6b..6c5cf70b 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
@@ -15,6 +15,8 @@
 #include "base/containers/contains.h"
 #include "base/types/pass_key.h"
 #include "base/values.h"
+#include "build/build_config.h"
+#include "build/buildflag.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom-blink.h"
@@ -102,7 +104,27 @@
   return result.ToString();
 }
 
-String SerializeMediaConstraints(const MediaConstraints& constraints) {
+// TODO(https://crbug.com/1318448): When goog-constraints have been removed,
+// this serialization code is no longer needed.
+String SerializePeerConnectionMediaConstraints(
+    const webrtc::PeerConnectionInterface::RTCConfiguration& config) {
+  StringBuilder builder;
+  if (config.disable_ipv6) {
+    builder.Append("googIPv6: false");
+  }
+#if BUILDFLAG(IS_FUCHSIA)
+  if (config.enable_dtls_srtp.has_value()) {
+    if (builder.length())
+      builder.Append(", ");
+    builder.Append("DtlsSrtpKeyAgreement: ");
+    builder.Append(config.enable_dtls_srtp.value() ? "true" : "false");
+  }
+#endif
+  return builder.ToString();
+}
+
+String SerializeGetUserMediaMediaConstraints(
+    const MediaConstraints& constraints) {
   return String(constraints.ToString());
 }
 
@@ -329,6 +351,9 @@
   return "\"" + sdp_semantics_str + "\"";
 }
 
+// Serializes things that are of interest from the RTCConfiguration. Note that
+// this does not include some parameters that were passed down via
+// GoogMediaConstraints; see SerializePeerConnectionMediaConstraints() for that.
 String SerializeConfiguration(
     const webrtc::PeerConnectionInterface::RTCConfiguration& config,
     bool usesInsertableStreams) {
@@ -754,7 +779,6 @@
 void PeerConnectionTracker::RegisterPeerConnection(
     RTCPeerConnectionHandler* pc_handler,
     const webrtc::PeerConnectionInterface::RTCConfiguration& config,
-    const MediaConstraints& constraints,
     const blink::WebLocalFrame* frame) {
   DCHECK_CALLED_ON_VALID_THREAD(main_thread_);
   DCHECK(pc_handler);
@@ -769,7 +793,7 @@
   info->rtc_configuration =
       SerializeConfiguration(config, usesInsertableStreams);
 
-  info->constraints = SerializeMediaConstraints(constraints);
+  info->constraints = SerializePeerConnectionMediaConstraints(config);
   if (frame)
     info->url = frame->GetDocument().Url().GetString();
   else
@@ -1131,8 +1155,10 @@
   peer_connection_tracker_host_->GetUserMedia(
       user_media_request->request_id(), user_media_request->Audio(),
       user_media_request->Video(),
-      SerializeMediaConstraints(user_media_request->AudioConstraints()),
-      SerializeMediaConstraints(user_media_request->VideoConstraints()));
+      SerializeGetUserMediaMediaConstraints(
+          user_media_request->AudioConstraints()),
+      SerializeGetUserMediaMediaConstraints(
+          user_media_request->VideoConstraints()));
 }
 
 void PeerConnectionTracker::TrackGetUserMediaSuccess(
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h
index 477dfc3..3b3c847 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h
@@ -29,7 +29,6 @@
 
 namespace blink {
 class LocalFrame;
-class MediaConstraints;
 class MockPeerConnectionTracker;
 class PeerConnectionTrackerTest;
 class RTCAnswerOptionsPlatform;
@@ -105,15 +104,13 @@
 
   // Sends an update when a PeerConnection has been created in Javascript. This
   // should be called once and only once for each PeerConnection. The
-  // |pc_handler| is the handler object associated with the PeerConnection, the
-  // |servers| are the server configurations used to establish the connection,
-  // the |constraints| are the media constraints used to initialize the
-  // PeerConnection, the |frame| is the WebLocalFrame object representing the
-  // page in which the PeerConnection is created.
+  // `pc_handler` is the handler object associated with the PeerConnection,
+  // the `config` is used to initialize the PeerConnection and the `frame` is
+  // the WebLocalFrame object representing the page in which the PeerConnection
+  // is created.
   void RegisterPeerConnection(
       RTCPeerConnectionHandler* pc_handler,
       const webrtc::PeerConnectionInterface::RTCConfiguration& config,
-      const MediaConstraints& constraints,
       const blink::WebLocalFrame* frame);
 
   // Sends an update when a PeerConnection has been destroyed.
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
index a022f014..97431ba 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
@@ -168,7 +168,7 @@
     mock_handler_ = std::make_unique<MockPeerConnectionHandler>();
     EXPECT_CALL(*mock_host_, AddPeerConnection(_));
     tracker_->RegisterPeerConnection(mock_handler_.get(), DefaultConfig(),
-                                     MediaConstraints(), nullptr);
+                                     nullptr);
     base::RunLoop().RunUntilIdle();
   }
 
@@ -251,8 +251,7 @@
   // Nothing is reported by default.
   EXPECT_CALL(handler0, OnThermalStateChange(_)).Times(0);
   EXPECT_CALL(*mock_host_, AddPeerConnection(_)).Times(1);
-  tracker_->RegisterPeerConnection(&handler0, DefaultConfig(),
-                                   MediaConstraints(), nullptr);
+  tracker_->RegisterPeerConnection(&handler0, DefaultConfig(), nullptr);
   base::RunLoop().RunUntilIdle();
 
   // Report a known thermal state.
@@ -266,8 +265,7 @@
               OnThermalStateChange(mojom::blink::DeviceThermalState::kNominal))
       .Times(1);
   EXPECT_CALL(*mock_host_, AddPeerConnection(_)).Times(1);
-  tracker_->RegisterPeerConnection(&handler1, DefaultConfig(),
-                                   MediaConstraints(), nullptr);
+  tracker_->RegisterPeerConnection(&handler1, DefaultConfig(), nullptr);
   base::RunLoop().RunUntilIdle();
 
   // Report the unknown thermal state.
@@ -282,8 +280,7 @@
   // Handlers registered late get no event.
   EXPECT_CALL(handler2, OnThermalStateChange(_)).Times(0);
   EXPECT_CALL(*mock_host_, AddPeerConnection(_)).Times(1);
-  tracker_->RegisterPeerConnection(&handler2, DefaultConfig(),
-                                   MediaConstraints(), nullptr);
+  tracker_->RegisterPeerConnection(&handler2, DefaultConfig(), nullptr);
   base::RunLoop().RunUntilIdle();
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index 868d6f5..0bc65b5 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -57,6 +57,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_object_string.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_string_stringsequence.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_void_function.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_media_stream_track.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_answer_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_certificate.h"
@@ -612,7 +613,7 @@
 RTCPeerConnection* RTCPeerConnection::Create(
     ExecutionContext* context,
     const RTCConfiguration* rtc_configuration,
-    const Dictionary& media_constraints,
+    GoogMediaConstraints* media_constraints,
     ExceptionState& exception_state) {
   if (context->IsContextDestroyed()) {
     exception_state.ThrowDOMException(
@@ -638,7 +639,7 @@
       UseCounter::Count(context, WebFeature::kRTCPeerConnectionWithBlockingCsp);
     }
   }
-  if (media_constraints.IsObject()) {
+  if (media_constraints->hasMandatory() || media_constraints->hasOptional()) {
     UseCounter::Count(context,
                       WebFeature::kRTCPeerConnectionConstructorConstraints);
   } else {
@@ -666,18 +667,10 @@
     }
   }
 
-  MediaErrorState media_error_state;
-  MediaConstraints constraints = media_constraints_impl::Create(
-      context, media_constraints, media_error_state);
-  if (media_error_state.HadException()) {
-    media_error_state.RaiseException(exception_state);
-    return nullptr;
-  }
-
   RTCPeerConnection* peer_connection = MakeGarbageCollected<RTCPeerConnection>(
       context, std::move(configuration), rtc_configuration->hasSdpSemantics(),
       rtc_configuration->encodedInsertableStreams(),
-      rtc_configuration->encodedInsertableStreams(), constraints,
+      rtc_configuration->encodedInsertableStreams(), media_constraints,
       exception_state);
   if (exception_state.HadException())
     return nullptr;
@@ -704,22 +697,9 @@
 RTCPeerConnection* RTCPeerConnection::Create(
     ExecutionContext* context,
     const RTCConfiguration* rtc_configuration,
-    const ScriptValue& media_constraints_value,
     ExceptionState& exception_state) {
-  Dictionary media_constraints(context->GetIsolate(),
-                               media_constraints_value.V8Value(),
-                               exception_state);
-  if (exception_state.HadException())
-    return nullptr;
-
-  return Create(context, rtc_configuration, media_constraints, exception_state);
-}
-
-RTCPeerConnection* RTCPeerConnection::Create(
-    ExecutionContext* context,
-    const RTCConfiguration* rtc_configuration,
-    ExceptionState& exception_state) {
-  return Create(context, rtc_configuration, Dictionary(), exception_state);
+  return Create(context, rtc_configuration, GoogMediaConstraints::Create(),
+                exception_state);
 }
 
 RTCPeerConnection::RTCPeerConnection(
@@ -728,7 +708,7 @@
     bool sdp_semantics_specified,
     bool force_encoded_audio_insertable_streams,
     bool force_encoded_video_insertable_streams,
-    MediaConstraints constraints,
+    GoogMediaConstraints* media_constraints,
     ExceptionState& exception_state)
     : ExecutionContextLifecycleObserver(context),
       pending_local_description_(nullptr),
@@ -785,8 +765,8 @@
 
   auto* web_frame =
       static_cast<WebLocalFrame*>(WebFrame::FromCoreFrame(window->GetFrame()));
-  if (!peer_handler_->Initialize(configuration, constraints, web_frame,
-                                 exception_state)) {
+  if (!peer_handler_->Initialize(context, configuration, media_constraints,
+                                 web_frame, exception_state)) {
     DCHECK(exception_state.HadException());
     return;
   }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
index 54d099d7..87945d4 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
@@ -66,13 +66,13 @@
 
 namespace blink {
 
-class Dictionary;
 class ExceptionState;
+class GoogMediaConstraints;
 class MediaStreamTrack;
 class RTCAnswerOptions;
 class RTCConfiguration;
-class RTCDTMFSender;
 class RTCDataChannel;
+class RTCDTMFSender;
 class RTCDataChannelInit;
 class RTCDtlsTransport;
 class RTCIceCandidateInit;
@@ -106,11 +106,7 @@
  public:
   static RTCPeerConnection* Create(ExecutionContext*,
                                    const RTCConfiguration*,
-                                   const Dictionary&,
-                                   ExceptionState&);
-  static RTCPeerConnection* Create(ExecutionContext*,
-                                   const RTCConfiguration*,
-                                   const ScriptValue&,
+                                   GoogMediaConstraints*,
                                    ExceptionState&);
   static RTCPeerConnection* Create(ExecutionContext*,
                                    const RTCConfiguration*,
@@ -121,7 +117,7 @@
                     bool sdp_semantics_specified,
                     bool force_encoded_audio_insertable_streams,
                     bool force_encoded_video_insertable_streams,
-                    MediaConstraints,
+                    GoogMediaConstraints*,
                     ExceptionState&);
   ~RTCPeerConnection() override;
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl
index a7fa528..6a415ec 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl
@@ -60,16 +60,14 @@
 
 // https://w3c.github.io/webrtc-pc/#interface-definition
 
-// TODO(guidou): Many types are of the wrong type in this interface:
-//  * any -> specific dictionary types like RTCConfiguration
 [
     ActiveScriptWrappable,
     Exposed=Window,
     LegacyWindowAlias=webkitRTCPeerConnection,
     LegacyWindowAlias_Measure
 ] interface RTCPeerConnection : EventTarget {
-    // TODO(guidou): There should only be one constructor argument.
-    [CallWith=ExecutionContext, RaisesException] constructor(optional RTCConfiguration configuration = {}, optional any mediaConstraints);
+    // TODO(https://crbug.com/1318448): Deprecated `mediaConstraints` should be removed.
+    [CallWith=ExecutionContext, RaisesException] constructor(optional RTCConfiguration configuration = {}, optional GoogMediaConstraints mediaConstraints);
     [CallWith=ScriptState, RaisesException] Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options = {});
     [CallWith=ScriptState, RaisesException] Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions options = {});
     [CallWith=ScriptState, RaisesException] Promise<void> setLocalDescription(optional RTCSessionDescriptionInit description = {});
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 228f630..b7fa21f 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -29,7 +29,13 @@
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_constrain_boolean_parameters.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints_set.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_session_description_init.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_union_boolean_constrainbooleanparameters.h"
+#include "third_party/blink/renderer/core/frame/deprecation/deprecation.h"
+#include "third_party/blink/renderer/core/frame/web_feature.h"
 #include "third_party/blink/renderer/modules/mediastream/media_stream_constraints_util.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h"
 #include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h"
@@ -157,40 +163,90 @@
 
 // Converter functions from Blink types to WebRTC types.
 
-#if BUILDFLAG(IS_FUCHSIA)
-absl::optional<bool> ConstraintToOptional(
-    const MediaConstraints& constraints,
-    const blink::BooleanConstraint MediaTrackConstraintSetPlatform::*picker) {
-  bool value;
-  if (GetConstraintValueAsBoolean(constraints, picker, &value)) {
-    return absl::optional<bool>(value);
+std::vector<const GoogMediaConstraintsSet*> AllMediaConstraintSets(
+    GoogMediaConstraints* media_constraints) {
+  std::vector<const GoogMediaConstraintsSet*> result;
+  if (media_constraints->hasMandatory()) {
+    result.push_back(media_constraints->mandatory());
   }
+  if (media_constraints->hasOptional()) {
+    for (const GoogMediaConstraintsSet* optional_constraints_set :
+         media_constraints->optional()) {
+      result.push_back(optional_constraints_set);
+    }
+  }
+  return result;
+}
+
+absl::optional<bool> BooleanOrConstrainBooleanToBool(
+    const V8UnionBooleanOrConstrainBooleanParameters& parameter) {
+  if (parameter.IsBoolean()) {
+    return parameter.GetAsBoolean();
+  }
+  RTC_DCHECK(parameter.IsConstrainBooleanParameters());
+  ConstrainBooleanParameters* constrain_boolean =
+      parameter.GetAsConstrainBooleanParameters();
+  if (constrain_boolean->hasExact()) {
+    return constrain_boolean->exact();
+  }
+  if (constrain_boolean->hasIdeal()) {
+    return constrain_boolean->ideal();
+  }
+  // If the parameter is not specified (or we pass in an empty dictionary),
+  // we'll neither have an exact or ideal value. In this case return nullopt.
   return absl::nullopt;
 }
-#endif
 
 void CopyConstraintsIntoRtcConfiguration(
-    const MediaConstraints constraints,
+    ExecutionContext* context,
+    GoogMediaConstraints* media_constraints,
     webrtc::PeerConnectionInterface::RTCConfiguration* configuration) {
-  // Copy info from constraints into configuration, if present.
-  if (constraints.IsUnconstrained()) {
+  if (!media_constraints) {
     return;
   }
 
-  bool the_value;
-  if (GetConstraintValueAsBoolean(
-          constraints, &MediaTrackConstraintSetPlatform::enable_i_pv6,
-          &the_value)) {
-    configuration->disable_ipv6 = !the_value;
-  } else {
-    // Note: IPv6 WebRTC value is "disable" while Blink is "enable".
-    configuration->disable_ipv6 = false;
-  }
+  // Legacy constraints parsing looks at both mandatory and optional constraints
+  // sets (similar to how ScanConstraintsForExactValue() looks at basic and
+  // advanced constraints). The sets are iterated until an exact or ideal value
+  // is found.
+  std::vector<const GoogMediaConstraintsSet*> all_constraints_sets =
+      AllMediaConstraintSets(media_constraints);
 
-#if BUILDFLAG(IS_FUCHSIA)
+  absl::optional<bool> goog_ipv6;
+  for (auto* constraints_set : all_constraints_sets) {
+    if (!constraints_set->hasGoogIPv6())
+      continue;
+    goog_ipv6 = BooleanOrConstrainBooleanToBool(*constraints_set->googIPv6());
+    break;
+  }
+  if (goog_ipv6.has_value() && !goog_ipv6.value()) {
+    // Setting googIPv6 to the non-default value triggers count deprecation.
+    Deprecation::CountDeprecation(context,
+                                  WebFeature::kLegacyConstraintGoogIPv6);
+  }
+  bool enable_ipv6 = goog_ipv6.value_or(true);  // googIPv6 is true by default.
+  configuration->disable_ipv6 = !enable_ipv6;
+
   // TODO(crbug.com/804275): Delete when Fuchsia no longer depends on it.
-  configuration->enable_dtls_srtp = ConstraintToOptional(
-      constraints, &MediaTrackConstraintSetPlatform::enable_dtls_srtp);
+  absl::optional<bool> dtls_srtp_key_agreement;
+  for (auto* constraints_set : all_constraints_sets) {
+    if (!constraints_set->hasDtlsSrtpKeyAgreement())
+      continue;
+    dtls_srtp_key_agreement = BooleanOrConstrainBooleanToBool(
+        *constraints_set->dtlsSrtpKeyAgreement());
+    break;
+  }
+  if (dtls_srtp_key_agreement.has_value()) {
+    if (dtls_srtp_key_agreement.value()) {
+      Deprecation::CountDeprecation(
+          context, WebFeature::kRTCConstraintEnableDtlsSrtpTrue);
+    } else {
+      Deprecation::CountDeprecation(
+          context, WebFeature::kRTCConstraintEnableDtlsSrtpFalse);
+    }
+  }
+#if BUILDFLAG(IS_FUCHSIA)
+  configuration->enable_dtls_srtp = dtls_srtp_key_agreement;
 #endif
 }
 
@@ -1116,9 +1172,10 @@
 }
 
 bool RTCPeerConnectionHandler::Initialize(
+    ExecutionContext* context,
     const webrtc::PeerConnectionInterface::RTCConfiguration&
         server_configuration,
-    const MediaConstraints& options,
+    GoogMediaConstraints* media_constraints,
     WebLocalFrame* frame,
     ExceptionState& exception_state) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
@@ -1147,8 +1204,9 @@
       blink::Platform::Current()->IsWebRtcSrtpEncryptedHeadersEnabled();
   configuration_.enable_implicit_rollback = true;
 
-  // Copy all the relevant constraints into |config|.
-  CopyConstraintsIntoRtcConfiguration(options, &configuration_);
+  // Copy all the relevant constraints into `config`.
+  CopyConstraintsIntoRtcConfiguration(context, media_constraints,
+                                      &configuration_);
 
   peer_connection_observer_ =
       MakeGarbageCollected<Observer>(weak_factory_.GetWeakPtr(), task_runner_);
@@ -1164,7 +1222,7 @@
 
   if (peer_connection_tracker_) {
     peer_connection_tracker_->RegisterPeerConnection(this, configuration_,
-                                                     options, frame_);
+                                                     frame_);
   }
 
   return true;
@@ -1173,7 +1231,6 @@
 bool RTCPeerConnectionHandler::InitializeForTest(
     const webrtc::PeerConnectionInterface::RTCConfiguration&
         server_configuration,
-    const MediaConstraints& options,
     PeerConnectionTracker* peer_connection_tracker,
     ExceptionState& exception_state) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
@@ -1186,7 +1243,6 @@
 
   peer_connection_observer_ =
       MakeGarbageCollected<Observer>(weak_factory_.GetWeakPtr(), task_runner_);
-  CopyConstraintsIntoRtcConfiguration(options, &configuration_);
 
   native_peer_connection_ = dependency_factory_->CreatePeerConnection(
       configuration_, nullptr, peer_connection_observer_, exception_state);
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
index 1ad6f58..86879dc 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
@@ -17,6 +17,7 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom-blink.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_goog_media_constraints.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.h"
@@ -179,15 +180,14 @@
   bool InitializeForTest(
       const webrtc::PeerConnectionInterface::RTCConfiguration&
           server_configuration,
-      const MediaConstraints& options,
       PeerConnectionTracker* peer_connection_tracker,
       ExceptionState& exception_state);
 
-  // RTCPeerConnectionHandlerPlatform implementation
   virtual bool Initialize(
+      ExecutionContext* context,
       const webrtc::PeerConnectionInterface::RTCConfiguration&
           server_configuration,
-      const MediaConstraints& options,
+      GoogMediaConstraints* media_constraints,
       WebLocalFrame* web_frame,
       ExceptionState& exception_state);
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
index 5413ac75..56d38955 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -47,7 +47,6 @@
 #include "third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h"
 #include "third_party/blink/renderer/modules/peerconnection/testing/fake_resource_listener.h"
 #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h"
-#include "third_party/blink/renderer/platform/mediastream/media_constraints.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_track.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h"
@@ -319,10 +318,9 @@
     mock_tracker_ = MakeGarbageCollected<NiceMock<MockPeerConnectionTracker>>();
     webrtc::PeerConnectionInterface::RTCConfiguration config;
     config.sdp_semantics = webrtc::SdpSemantics::kPlanB;
-    MediaConstraints constraints;
     DummyExceptionStateForTesting exception_state;
-    EXPECT_TRUE(pc_handler_->InitializeForTest(
-        config, constraints, mock_tracker_.Get(), exception_state));
+    EXPECT_TRUE(pc_handler_->InitializeForTest(config, mock_tracker_.Get(),
+                                               exception_state));
     mock_peer_connection_ = pc_handler_->native_peer_connection();
     ASSERT_TRUE(mock_peer_connection_);
     EXPECT_CALL(*mock_peer_connection_, Close());
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
index d5a740b..63ea54a 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
@@ -400,9 +400,9 @@
   // that errors can be generated in the appropriate error scope.
   device_ = descriptor->device();
 
-  WGPUTextureUsage usage = AsDawnFlags<WGPUTextureUsage>(descriptor->usage());
-  WGPUTextureFormat format = AsDawnEnum(descriptor->format());
-  switch (format) {
+  usage_ = AsDawnFlags<WGPUTextureUsage>(descriptor->usage());
+  format_ = AsDawnEnum(descriptor->format());
+  switch (format_) {
     case WGPUTextureFormat_BGRA8Unorm:
       // TODO(crbug.com/1298618): support RGBA8Unorm on MAC.
 #if !BUILDFLAG(IS_MAC)
@@ -454,26 +454,6 @@
     return;
   }
 
-  swap_buffers_ = base::AdoptRef(
-      new WebGPUSwapBufferProvider(this, device_->GetDawnControlClient(),
-                                   device_->GetHandle(), usage, format));
-  swap_buffers_->SetFilterQuality(filter_quality_);
-
-  // Note: SetContentsOpaque is only an optimization hint. It doesn't
-  // actually make the contents opaque.
-  switch (alpha_mode_) {
-    case V8GPUCanvasAlphaMode::Enum::kOpaque: {
-      CcLayer()->SetContentsOpaque(true);
-      if (!alpha_clearer_ || alpha_clearer_->IsCompatible(device_, format)) {
-        alpha_clearer_ = std::make_unique<TextureAlphaClearer>(device_, format);
-      }
-      break;
-    }
-    case V8GPUCanvasAlphaMode::Enum::kPremultiplied:
-      CcLayer()->SetContentsOpaque(false);
-      break;
-  }
-
   // Set the size while configuring.
   if (descriptor->hasSize()) {
     // TODO(crbug.com/1326473): Remove this branch after deprecation period.
@@ -505,6 +485,22 @@
     configured_size_.SetSize(0, 0);
     ResizeSwapbuffers(Host()->Size());
   }
+
+  // Note: SetContentsOpaque is only an optimization hint. It doesn't
+  // actually make the contents opaque.
+  switch (alpha_mode_) {
+    case V8GPUCanvasAlphaMode::Enum::kOpaque: {
+      CcLayer()->SetContentsOpaque(true);
+      if (!alpha_clearer_ || alpha_clearer_->IsCompatible(device_, format_)) {
+        alpha_clearer_ =
+            std::make_unique<TextureAlphaClearer>(device_, format_);
+      }
+      break;
+    }
+    case V8GPUCanvasAlphaMode::Enum::kPremultiplied:
+      CcLayer()->SetContentsOpaque(false);
+      break;
+  }
 }
 
 void GPUCanvasContext::ResizeSwapbuffers(gfx::Size size) {
@@ -512,7 +508,19 @@
 
   // The spec indicates that when the canvas is resized the current texture is
   // set to null. It will be reallocated on the next call to getCurrentTexture.
-  texture_ = nullptr;
+
+  // TODO(bajones): Currently the only way to clear the swap_buffers texture
+  // reference is to neuter it, which renders the swap_buffers unusable and
+  // requires a new one to be created. Resizing could be handled more
+  // efficiently if the swap_buffers internal texture reference could be
+  // discarded without needing to recreate the entire thing.
+  if (device_) {
+    UnconfigureInternal();
+    swap_buffers_ = base::AdoptRef(
+        new WebGPUSwapBufferProvider(this, device_->GetDawnControlClient(),
+                                     device_->GetHandle(), usage_, format_));
+    swap_buffers_->SetFilterQuality(filter_quality_);
+  }
 
   // If we don't notify the host that something has changed it may never check
   // for the new cc::Layer.
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.h b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.h
index efa88035..ce9b8398 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.h
+++ b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.h
@@ -135,6 +135,11 @@
   std::unique_ptr<TextureAlphaClearer> alpha_clearer_;
   scoped_refptr<WebGPUSwapBufferProvider> swap_buffers_;
 
+  // TODO(bajones): These don't need to be tracked if swap_buffers can persist
+  // across resizes.
+  WGPUTextureUsage usage_;
+  WGPUTextureFormat format_;
+
   gfx::Size size_;
 
   bool stopped_ = false;
diff --git a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc
index 2fade31..8ebe83af 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc
@@ -28,6 +28,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/feature_list.h"
 #include "base/location.h"
 #include "base/rand_util.h"
 #include "base/task/single_thread_task_runner.h"
@@ -57,6 +58,21 @@
 
 namespace blink {
 
+#if BUILDFLAG(IS_MAC)
+
+namespace {
+
+base::Feature kCanvas2DHibernation{
+    "Canvas2DHibernation", base::FeatureState::FEATURE_DISABLED_BY_DEFAULT};
+}
+
+// static
+bool Canvas2DLayerBridge::IsHibernationEnabled() {
+  return base::FeatureList::IsEnabled(kCanvas2DHibernation);
+}
+
+#endif  // BUILDFLAG(IS_MAC)
+
 Canvas2DLayerBridge::Canvas2DLayerBridge(const gfx::Size& size,
                                          RasterMode raster_mode,
                                          OpacityMode opacity_mode)
@@ -382,8 +398,8 @@
           FROM_HERE, WTF::Bind(&LoseContextInBackgroundWrapper,
                                weak_ptr_factory_.GetWeakPtr()));
     }
-  } else if (CANVAS2D_HIBERNATION_ENABLED && ResourceProvider() &&
-             IsAccelerated() && IsHidden() && !hibernation_scheduled_ &&
+  } else if (IsHibernationEnabled() && ResourceProvider() && IsAccelerated() &&
+             IsHidden() && !hibernation_scheduled_ &&
              !base::FeatureList::IsEnabled(
                  ::features::kCanvasContextLostInBackground)) {
     if (layer_)
diff --git a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h
index 07543cc..1edd389 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h
@@ -64,14 +64,6 @@
 class SharedContextRateLimiter;
 class StaticBitmapImage;
 
-#if BUILDFLAG(IS_MAC)
-// Canvas hibernation is currently disabled on MacOS X due to a bug that causes
-// content loss. TODO: Find a better fix for crbug.com/588434
-#define CANVAS2D_HIBERNATION_ENABLED 0
-#else
-#define CANVAS2D_HIBERNATION_ENABLED 1
-#endif
-
 class PLATFORM_EXPORT Canvas2DLayerBridge : public cc::TextureLayerClient {
  public:
   Canvas2DLayerBridge(const gfx::Size&, RasterMode, OpacityMode opacity_mode);
@@ -165,6 +157,14 @@
 
   bool HasRateLimiterForTesting();
 
+#if BUILDFLAG(IS_MAC)
+  // Canvas hibernation is not always enabled on MacOS X due to a bug that
+  // causes content loss. TODO: Find a better fix for crbug.com/588434
+  static bool IsHibernationEnabled();
+#else
+  constexpr static bool IsHibernationEnabled() { return true; }
+#endif
+
  private:
   friend class Canvas2DLayerBridgeTest;
   friend class CanvasRenderingContext2DTest;
diff --git a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
index af4e2453..999fda85 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
@@ -391,12 +391,10 @@
   ~MockLogger() override = default;
 };
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -436,12 +434,10 @@
   EXPECT_TRUE(bridge->IsValid());
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -483,12 +479,10 @@
   EXPECT_TRUE(bridge->IsValid());
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -520,12 +514,10 @@
   testing::Mock::VerifyAndClearExpectations(mock_logger_ptr);
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, SnapshotWhileHibernating)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_SnapshotWhileHibernating)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, SnapshotWhileHibernating) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -567,12 +559,10 @@
   bridge->SetIsInHiddenPage(false);
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -599,13 +589,10 @@
   // is sound.
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange)
-#else
-TEST_F(Canvas2DLayerBridgeTest,
-       DISABLED_HibernationAbortedDueToVisibilityChange)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -635,12 +622,10 @@
   EXPECT_TRUE(bridge->IsValid());
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
@@ -669,12 +654,10 @@
   EXPECT_FALSE(bridge->IsHibernating());
 }
 
-#if CANVAS2D_HIBERNATION_ENABLED
-TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating)
-#else
-TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating)
-#endif
-{
+TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating) {
+  if (!Canvas2DLayerBridge::IsHibernationEnabled())
+    GTEST_SKIP();
+
   ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform;
   std::unique_ptr<Canvas2DLayerBridge> bridge =
       MakeBridge(gfx::Size(300, 300), RasterMode::kGPU, kNonOpaque);
diff --git a/third_party/blink/renderer/platform/mediastream/media_constraints.cc b/third_party/blink/renderer/platform/mediastream/media_constraints.cc
index 0345e5e..ea77c18 100644
--- a/third_party/blink/renderer/platform/mediastream/media_constraints.cc
+++ b/third_party/blink/renderer/platform/mediastream/media_constraints.cc
@@ -365,34 +365,41 @@
       goog_experimental_noise_suppression("googExperimentalNoiseSuppression"),
       goog_audio_mirroring("googAudioMirroring"),
       goog_da_echo_cancellation("googDAEchoCancellation"),
-      goog_noise_reduction("googNoiseReduction"),
-#if BUILDFLAG(IS_FUCHSIA)
-      // TODO(crbug.com/804275): Delete when Fuchsia no longer depends on it.
-      enable_dtls_srtp("enableDtlsSrtp"),
-#endif
-      enable_rtp_data_channels("enableRtpDataChannels"),
-      enable_i_pv6("enableIPv6") {
-}
+      goog_noise_reduction("googNoiseReduction") {}
 
 Vector<const BaseConstraint*> MediaTrackConstraintSetPlatform::AllConstraints()
     const {
-  return {
-    &width, &height, &aspect_ratio, &frame_rate, &facing_mode, &resize_mode,
-        &volume, &sample_rate, &sample_size, &echo_cancellation,
-        &echo_cancellation_type, &latency, &channel_count, &device_id,
-        &group_id, &media_stream_source, &disable_local_echo, &pan, &tilt,
-        &zoom, &render_to_associated_sink, &goog_echo_cancellation,
-        &goog_experimental_echo_cancellation, &goog_auto_gain_control,
-        &goog_experimental_auto_gain_control, &goog_noise_suppression,
-        &goog_highpass_filter, &goog_experimental_noise_suppression,
-        &goog_audio_mirroring, &goog_da_echo_cancellation,
-        &goog_noise_reduction,
-#if BUILDFLAG(IS_FUCHSIA)
-        // TODO(crbug.com/804275): Delete when Fuchsia no longer depends on it.
-        &enable_dtls_srtp,
-#endif
-        &enable_rtp_data_channels, &enable_i_pv6
-  };
+  return {&width,
+          &height,
+          &aspect_ratio,
+          &frame_rate,
+          &facing_mode,
+          &resize_mode,
+          &volume,
+          &sample_rate,
+          &sample_size,
+          &echo_cancellation,
+          &echo_cancellation_type,
+          &latency,
+          &channel_count,
+          &device_id,
+          &group_id,
+          &media_stream_source,
+          &disable_local_echo,
+          &pan,
+          &tilt,
+          &zoom,
+          &render_to_associated_sink,
+          &goog_echo_cancellation,
+          &goog_experimental_echo_cancellation,
+          &goog_auto_gain_control,
+          &goog_experimental_auto_gain_control,
+          &goog_noise_suppression,
+          &goog_highpass_filter,
+          &goog_experimental_noise_suppression,
+          &goog_audio_mirroring,
+          &goog_da_echo_cancellation,
+          &goog_noise_reduction};
 }
 
 bool MediaTrackConstraintSetPlatform::IsUnconstrained() const {
diff --git a/third_party/blink/renderer/platform/mediastream/media_constraints.h b/third_party/blink/renderer/platform/mediastream/media_constraints.h
index b650445..b06bb0a 100644
--- a/third_party/blink/renderer/platform/mediastream/media_constraints.h
+++ b/third_party/blink/renderer/platform/mediastream/media_constraints.h
@@ -262,12 +262,6 @@
   BooleanConstraint goog_audio_mirroring;
   BooleanConstraint goog_da_echo_cancellation;
   BooleanConstraint goog_noise_reduction;
-#if BUILDFLAG(IS_FUCHSIA)
-  // TODO(crbug.com/804275): Delete when Fuchsia no longer depends on it.
-  BooleanConstraint enable_dtls_srtp;
-#endif
-  BooleanConstraint enable_rtp_data_channels;
-  BooleanConstraint enable_i_pv6;
 
   PLATFORM_EXPORT bool IsUnconstrained() const;
   PLATFORM_EXPORT bool HasMandatory() const;
diff --git a/third_party/blink/renderer/platform/wtf/atomic_operations.cc b/third_party/blink/renderer/platform/wtf/atomic_operations.cc
index 1c4ad4b4..fbd7675 100644
--- a/third_party/blink/renderer/platform/wtf/atomic_operations.cc
+++ b/third_party/blink/renderer/platform/wtf/atomic_operations.cc
@@ -21,8 +21,18 @@
        bytes -= sizeof(AlignmentType), ++sizet_to, ++sizet_from) {
     *sizet_to = AsAtomicPtr(sizet_from)->load(std::memory_order_relaxed);
   }
-  uint8_t* uint8t_to = reinterpret_cast<uint8_t*>(sizet_to);
-  const uint8_t* uint8t_from = reinterpret_cast<const uint8_t*>(sizet_from);
+
+  uint32_t* uint32t_to = reinterpret_cast<uint32_t*>(sizet_to);
+  const uint32_t* uint32t_from = reinterpret_cast<const uint32_t*>(sizet_from);
+  if (sizeof(AlignmentType) == 8 && bytes >= 4) {
+    *uint32t_to = AsAtomicPtr(uint32t_from)->load(std::memory_order_relaxed);
+    bytes -= sizeof(uint32_t);
+    ++uint32t_to;
+    ++uint32t_from;
+  }
+
+  uint8_t* uint8t_to = reinterpret_cast<uint8_t*>(uint32t_to);
+  const uint8_t* uint8t_from = reinterpret_cast<const uint8_t*>(uint32t_from);
   for (; bytes > 0; bytes -= sizeof(uint8_t), ++uint8t_to, ++uint8t_from) {
     *uint8t_to = AsAtomicPtr(uint8t_from)->load(std::memory_order_relaxed);
   }
@@ -42,8 +52,18 @@
        bytes -= sizeof(AlignmentType), ++sizet_to, ++sizet_from) {
     AsAtomicPtr(sizet_to)->store(*sizet_from, std::memory_order_relaxed);
   }
-  uint8_t* uint8t_to = reinterpret_cast<uint8_t*>(sizet_to);
-  const uint8_t* uint8t_from = reinterpret_cast<const uint8_t*>(sizet_from);
+
+  uint32_t* uint32t_to = reinterpret_cast<uint32_t*>(sizet_to);
+  const uint32_t* uint32t_from = reinterpret_cast<const uint32_t*>(sizet_from);
+  if (sizeof(AlignmentType) == 8 && bytes >= 4) {
+    AsAtomicPtr(uint32t_to)->store(*uint32t_from, std::memory_order_relaxed);
+    bytes -= sizeof(uint32_t);
+    ++uint32t_to;
+    ++uint32t_from;
+  }
+
+  uint8_t* uint8t_to = reinterpret_cast<uint8_t*>(uint32t_to);
+  const uint8_t* uint8t_from = reinterpret_cast<const uint8_t*>(uint32t_from);
   for (; bytes > 0; bytes -= sizeof(uint8_t), ++uint8t_to, ++uint8t_from) {
     AsAtomicPtr(uint8t_to)->store(*uint8t_from, std::memory_order_relaxed);
   }
@@ -60,7 +80,15 @@
        bytes -= sizeof(AlignmentType), ++sizet_buf) {
     AsAtomicPtr(sizet_buf)->store(0, std::memory_order_relaxed);
   }
-  uint8_t* uint8t_buf = reinterpret_cast<uint8_t*>(sizet_buf);
+
+  uint32_t* uint32t_buf = reinterpret_cast<uint32_t*>(sizet_buf);
+  if (sizeof(AlignmentType) == 8 && bytes >= 4) {
+    AsAtomicPtr(uint32t_buf)->store(0, std::memory_order_relaxed);
+    bytes -= sizeof(uint32_t);
+    ++uint32t_buf;
+  }
+
+  uint8_t* uint8t_buf = reinterpret_cast<uint8_t*>(uint32t_buf);
   for (; bytes > 0; bytes -= sizeof(uint8_t), ++uint8t_buf) {
     AsAtomicPtr(uint8t_buf)->store(0, std::memory_order_relaxed);
   }
diff --git a/third_party/blink/renderer/platform/wtf/atomic_operations.h b/third_party/blink/renderer/platform/wtf/atomic_operations.h
index 9f395fe..d72853e1 100644
--- a/third_party/blink/renderer/platform/wtf/atomic_operations.h
+++ b/third_party/blink/renderer/platform/wtf/atomic_operations.h
@@ -191,9 +191,6 @@
 template <size_t bytes, size_t alignment>
 ALWAYS_INLINE void AtomicMemzero(void* buf) {
   static_assert(bytes > 0, "Number of copied bytes should be greater than 0");
-  AtomicMemzero(buf, bytes);
-
-  static_assert(bytes > 0, "Number of copied bytes should be greater than 0");
   if constexpr (alignment == sizeof(size_t)) {
     internal::AtomicMemzeroAligned<bytes, size_t>(buf);
   } else if constexpr (alignment == sizeof(uint32_t)) {
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 2017a2b..43a4832 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -4815,10 +4815,8 @@
 # but the test coverage is still good.
 crbug.com/919789 fast/dom/viewport/resize-event-fired-window-resized.html [ Pass Timeout ]
 crbug.com/919789 fast/dom/Window/window-resize-contents.html [ Pass Timeout ]
-crbug.com/919789 media/controls/overflow-menu-hide-on-resize.html [ Pass Timeout ]
 crbug.com/919789 [ Linux ] paint/invalidation/resize-iframe-text.html [ Pass Timeout ]
 crbug.com/919789 paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html [ Pass Timeout ]
-crbug.com/919789 paint/invalidation/window-resize/* [ Pass Timeout ]
 
 crbug.com/1021627 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Failure Pass Timeout ]
 crbug.com/1130876 fast/dynamic/window-resize-scrollbars-test.html [ Failure Pass ]
@@ -5455,9 +5453,6 @@
 # Sheriff 2020-09-22
 crbug.com/1130533 [ Mac ] external/wpt/xhr/xhr-timeout-longtask.any.worker.html [ Failure Pass ]
 
-# Sheriff 2020-09-23
-crbug.com/1131551 compositing/transitions/transform-on-large-layer.html [ Failure Pass Timeout ]
-
 crbug.com/1136163 [ Linux ] external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Failure ]
 
 # Mixed content autoupgrades make these tests not applicable, since they check for mixed content images, the tests can be removed when cleaning up pre autoupgrades mixed content code.
@@ -7015,6 +7010,7 @@
 # Sheriff 2022-04-28
 crbug.com/1289759 [ Linux ] http/tests/loading/slow-parsing-subframe.html [ Failure Pass ]
 crbug.com/1289759 [ Win ] http/tests/loading/slow-parsing-subframe.html [ Failure Pass ]
+
 crbug.com/1137003 fast/dom/timer-throttling-background-page-near-alignment-interval.html [ Failure Pass ]
 
 # Sheriff 2022-04-29
@@ -7032,8 +7028,6 @@
 # Sheriff 2022-05-04
 crbug.com/1309533 [ Win ] virtual/threaded-prefer-compositing/external/wpt/css/cssom-view/idlharness.html [ Failure ]
 
-crbug.com/1320290 http/tests/devtools/storage-panel-dom-storage-update.js [ Skip ]
-
 crbug.com/1322405 external/wpt/fetch/metadata/generated/window-history.https.sub.html [ Pass Timeout ]
 crbug.com/1322405 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/window-history.https.sub.html [ Pass Timeout ]
 
@@ -7162,3 +7156,7 @@
 # Sheriff 2022-07-04
 crbug.com/1340981 virtual/conversions-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html [ Timeout ]
 crbug.com/1341693 [ Linux ] external/wpt/dom/nodes/MutationObserver-document.html [ Skip ]
+
+# Sheriff 2022-07-05
+crbug.com/1321217 [ Mac11-arm64 ] http/tests/devtools/layers/layer-canvas-log.js [ Failure Pass ]
+crbug.com/1342050 [ Mac10.15 ] virtual/prerender/wpt_internal/prerender/activate-from-iframe.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer-expected.html b/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer-expected.html
index ce247a0..7aefd4c 100644
--- a/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer-expected.html
+++ b/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer-expected.html
@@ -10,18 +10,18 @@
         }
     </style>
     <script type="text/javascript">
-        function run()
+        async function run()
         {
             if (window.testRunner) {
-                testRunner.useUnfortunateSynchronousResizeMode();
                 testRunner.waitUntilDone();
-                window.setTimeout(notifyDone, 1200);
             }
+            var resizePromise = new Promise(resolve => window.onresize =
+                                            resolve);
             window.resizeTo(1600,1200);
-        }
-        function notifyDone()
-        {
-            testRunner.notifyDone();
+            await resizePromise;
+            if (window.testRunner) {
+                testRunner.notifyDone();
+            }
         }
     </script>
 </head>
diff --git a/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer.html b/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer.html
index 31ce383..9f0032f 100644
--- a/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer.html
+++ b/third_party/blink/web_tests/compositing/transitions/transform-on-large-layer.html
@@ -27,22 +27,26 @@
         }
     </style>
     <script type="text/javascript">
-        function run()
+        async function run()
         {
             if (window.testRunner) {
-                testRunner.useUnfortunateSynchronousResizeMode();
                 testRunner.waitUntilDone();
-                window.setTimeout(notifyDone, 1200);
             }
-            window.onresize = function() {
-                var box = document.getElementById("box");
-                box.className = "end";
-            }
+            var resizePromise = new Promise(resolve => window.onresize =
+                function() {
+                    var box = document.getElementById("box");
+                    box.className = "end";
+                    resolve();
+                    // We need to wait >1s for the animation to complete.
+                    window.setTimeout(notifyDone, 1200);
+            });
             window.resizeTo(1600,1200);
+            await resizePromise;
         }
-        function notifyDone()
-        {
-            testRunner.notifyDone();
+        function notifyDone() {
+            if (window.testRunner) {
+                testRunner.notifyDone();
+            }
         }
     </script>
 </head>
@@ -54,4 +58,4 @@
         <div id="box" class="start"><font style="opacity:0">ABC</font></div>
     </div>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html b/third_party/blink/web_tests/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html
index b8124c7..9b72aab 100644
--- a/third_party/blink/web_tests/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html
+++ b/third_party/blink/web_tests/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <style>
-#test {
+#testdiv {
     font-size: 5vh;
     width: 50vw;
 }
@@ -9,38 +9,40 @@
     content: '';
 }
 </style>
-<script src="../../resources/js-test.js"></script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
 
 This test of viewport units and resizing depends on window.resizeTo.
 
-<div id="test"></div>
+<div id="testdiv"></div>
 <div id="testpseudo"></div>
 <div id="host"></div>
 
 <script>
-if (window.testRunner) {
-    testRunner.useUnfortunateSynchronousResizeMode();
-    testRunner.dumpAsText();
-}
+promise_test(async () => {
+  var sizes = [[800, 600], [900, 600], [900, 640], [500, 640], [800, 600]]
+  var root = host.attachShadow({mode: 'open'});
+  testshadow = document.createElement("div");
+  testshadow.id = "testshadow";
+  root.innerHTML = "<style> #testshadow { border: 10vmax solid green; } </style>";
+  root.appendChild(testshadow);
 
-var sizes = [[800, 600], [900, 600], [900, 640], [500, 640], [800, 600]]
-var root = host.attachShadow({mode: 'open'});
-testshadow = document.createElement("div");
-testshadow.id = "testshadow";
-root.innerHTML = "<style> #testshadow { border: 10vmax solid green; } </style>";
-root.appendChild(testshadow);
-
-for (var i = 0; i < sizes.length; ++i) {
-    var width = sizes[i][0];
-    var height = sizes[i][1];
-    var min = Math.min(width, height);
-    var max = Math.max(width, height);
-    window.resizeTo(width, height);
-    shouldBe("window.innerWidth", "" + width);
-    shouldBe("window.innerHeight", "" + height);
-    shouldBe("getComputedStyle(test).fontSize", "'" + height/20 + "px'");
-    shouldBe("getComputedStyle(test).width", "'" + width/2 + "px'");
-    shouldBe("getComputedStyle(testpseudo, ':after').marginLeft", "'" + min/5 + "px'");
-    shouldBe("getComputedStyle(testshadow).borderRightWidth", "'" + max/10 + "px'");
-}
+  for (var i = 0; i < sizes.length; ++i) {
+      var width = sizes[i][0];
+      var height = sizes[i][1];
+      var min = Math.min(width, height);
+      var max = Math.max(width, height);
+      if (window.innerWidth != width || window.innerHeight != height) {
+          var resizePromise = new Promise(resolve => window.onresize = resolve);
+          window.resizeTo(width, height);
+          await resizePromise;
+      }
+      assert_equals(window.innerWidth, width);
+      assert_equals(window.innerHeight, height);
+      assert_equals(getComputedStyle(testdiv).fontSize, "" + height/20 + "px");
+      assert_equals(getComputedStyle(testdiv).width, "" + width/2 + "px");
+      assert_equals(getComputedStyle(testpseudo, ':after').marginLeft, "" + min/5 + "px");
+      assert_equals(getComputedStyle(testshadow).borderRightWidth, "" + max/10 + "px");
+  }
+});
 </script>
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version
index c4d36fc..f61d201 100644
--- a/third_party/blink/web_tests/external/Version
+++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@
-Version: ae12e0f25aeb1ec3bf6b96324e9a0898362ea2b5
+Version: 95d4bd97e123a54e8c7171b639d3e4fab89e68be
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 52f05dca..91ddd71 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -298152,6 +298152,22 @@
       "dd683f6f65f89f097ca70594e4a02c2027fdb66b",
       []
      ],
+     "non-cancelable-when-passive": {
+      "resources": {
+       "scrolling.js": [
+        "1e96a7f49715db0822867727a1fcb14a30fdad48",
+        []
+       ],
+       "touching.js": [
+        "620d26804bf8c74662d4299eccfbbb409949c212",
+        []
+       ],
+       "wait-for.js": [
+        "0bf3e558342fd60e1bbd2cf85b3bcf7c5db6f4e1",
+        []
+       ]
+      }
+     },
      "resources": {
       "empty-document.html": [
        "b9cd130a07f77ee1a54f4bf54df54dc126fec1ee",
@@ -326110,6 +326126,10 @@
       "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
       []
      ],
+     "empty_style.css": [
+      "eb90b432e8421f42db47942d906e95153b2ad333",
+      []
+     ],
      "entry-invariants.js": [
       "4bef9496103ca61475f8041a7d2c57b2b5d9fc4e",
       []
@@ -326123,7 +326143,7 @@
       []
      ],
      "fake_responses.py": [
-      "e33adbfe44efc734a2ee6f98c6b0115327ee2f58",
+      "66b17be154b8c71bca1378aba44635eaada46b21",
       []
      ],
      "fake_responses_https.sub.html": [
@@ -326194,6 +326214,26 @@
       "618c568d2a1d7be2365c7c2cd4078601d8aad25f",
       []
      ],
+     "importer.css": [
+      "771204cdd154023fae0adbc5642fb1cdec36b3a8",
+      []
+     ],
+     "importer.js": [
+      "e73d45da29fb29066ee93d65845a541991d5c7fc",
+      []
+     ],
+     "importer_async.js": [
+      "4b1cd4ddaef46d88ccb62b0b2ea104f82b024d26",
+      []
+     ],
+     "importer_dynamic.css": [
+      "f0ba069f0c98ab247357cdd99674dc67256cd905",
+      []
+     ],
+     "importer_print.css": [
+      "aac191635ed5203d401f5a0e91c850b3a8a0a5c4",
+      []
+     ],
      "inject_resource_test.html": [
       "44d09675d38e26a9c69de4ed9133667d8dc5c5ef",
       []
@@ -403751,24 +403791,6 @@
        {}
       ]
      ],
-     "document-level-touchmove-event-listener-passive-by-default.tentative.html": [
-      "f3f0d58209fd8edda4fa1cc092dbe8d19bc4f143",
-      [
-       null,
-       {
-        "testdriver": true
-       }
-      ]
-     ],
-     "document-level-wheel-event-listener-passive-by-default.tentative.html": [
-      "b7224835fa398b3a81415af4ff288899bf53c266",
-      [
-       null,
-       {
-        "testdriver": true
-       }
-      ]
-     ],
      "event-disabled-dynamic.html": [
       "3f995b02f1b421f376dc6037d42c442307503fb2",
       [
@@ -403827,6 +403849,375 @@
        {}
       ]
      ],
+     "non-cancelable-when-passive": {
+      "non-passive-mousewheel-event-listener-on-body.html": [
+       "4c40291aa0a7159f3f5569f8535730fa4b20f52f",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-mousewheel-event-listener-on-div.html": [
+       "a37276b4227bd0076ca6efb776a54aeac4ffc264",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-mousewheel-event-listener-on-document.html": [
+       "cdbfd2346fa276871f68e8e3b2ca3a0c5c413e19",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-mousewheel-event-listener-on-root.html": [
+       "c7e818e094b9b5e19f3c1fccf29662458276ba9e",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-mousewheel-event-listener-on-window.html": [
+       "6a394a2c544b793e49d392ceedbcf6e43dc89a39",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchmove-event-listener-on-body.html": [
+       "d2e84de6be51dcd5a162654461269d998bf1f8cb",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchmove-event-listener-on-div.html": [
+       "9f026ee22b60de25ca3f08b88354d33c254ee49f",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchmove-event-listener-on-document.html": [
+       "b5b27b4f006d4176c2ea892f30eb4e54d98df7b7",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchmove-event-listener-on-root.html": [
+       "c2f42cc19357f5064debc72fb17cc0be57fd8fc5",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchmove-event-listener-on-window.html": [
+       "dee076f9643a171113b195183d242a1ca751659e",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchstart-event-listener-on-body.html": [
+       "f4c22461017ff71ccef2ea14649bf66b305c8096",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchstart-event-listener-on-div.html": [
+       "ba050c0364c3993ae02e83971daff70232d702ef",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchstart-event-listener-on-document.html": [
+       "a1da298e6eaa34fc227a96ce134c3d1608ef96f2",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchstart-event-listener-on-root.html": [
+       "38bcf9b8a170aa03293f4399b561076f3d51cf15",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-touchstart-event-listener-on-window.html": [
+       "3642af2bf9174afe67eacae34f340c2eb01dabf2",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-wheel-event-listener-on-body.html": [
+       "3a573407856e0e4dce8d35bd11ecff7dd74fcbe8",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-wheel-event-listener-on-div.html": [
+       "05b655ff9bccbcc0c0cfa4203ddc8d8a4bcecc00",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-wheel-event-listener-on-document.html": [
+       "6e19c832dc437532aa7923b5caa16485aafa7594",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-wheel-event-listener-on-root.html": [
+       "26279cbc7e0527da888380df8f2168382dc9674e",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "non-passive-wheel-event-listener-on-window.html": [
+       "f428e4851c1f33196b61f3ef1a5445f4982e92ba",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-mousewheel-event-listener-on-body.html": [
+       "1c94592482653a81dc423d42350f7659c3b3f52d",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-mousewheel-event-listener-on-div.html": [
+       "2edf612b7e0fc777caa234b0d4cb50322a37ee1e",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-mousewheel-event-listener-on-document.html": [
+       "4027f3fccebe7e7be62753ff362b967721faf891",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-mousewheel-event-listener-on-root.html": [
+       "40ef488e6bf1d66edc138671edf25abf343957ea",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-mousewheel-event-listener-on-window.html": [
+       "6609c2a2d7470925b792f6e64158c1f0a8c8b251",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchmove-event-listener-on-body.html": [
+       "8077d1b033d3a9c6eba928885e8d864f93a7cd51",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchmove-event-listener-on-div.html": [
+       "057474f8135cfc06e891973cb7d378659ffb1d76",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchmove-event-listener-on-document.html": [
+       "60b17de63b285c6294424329be05b3fbafc4b57e",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchmove-event-listener-on-root.html": [
+       "853992048987a1c25977dcd60d2df0ae6e75d28b",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchmove-event-listener-on-window.html": [
+       "3e1d0d4e9eefb67ba1d351c5cee36ebb77d795cb",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchstart-event-listener-on-body.html": [
+       "63dd68d25605d4c4c886615575aea84abfc3784b",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchstart-event-listener-on-div.html": [
+       "f9aba60fd0b4781e9823243ca1472be370448b4b",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchstart-event-listener-on-document.html": [
+       "011b87f7b7fab5ade50f4c33521e2d9e44f2253e",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchstart-event-listener-on-root.html": [
+       "f2db44a360f2abeddee05c671f0abdeca3a07b13",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-touchstart-event-listener-on-window.html": [
+       "e8d83cdc5c4738507a44267f49e6bded03cd8f5a",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-wheel-event-listener-on-body.html": [
+       "82de4bd332641be3874341ea3e1e6364056635dd",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-wheel-event-listener-on-div.html": [
+       "906c5e2d8f96d9d2e05ed2bc522ff11703da5927",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-wheel-event-listener-on-document.html": [
+       "9512313259b62d22c0c5ed8069eac2fd8c10072b",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-wheel-event-listener-on-root.html": [
+       "fe5d6d7915808cf8f659ffd67e97a25a10c37798",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "passive-wheel-event-listener-on-window.html": [
+       "0107c1f01fef06bcde29e5631a0d294ae86076ef",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "synthetic-events-cancelable.html": [
+       "4287770b8d58281c09c8174b9d7757174e51ff29",
+       [
+        null,
+        {}
+       ]
+      ]
+     },
      "passive-by-default.html": [
       "02029f4dacf81180c846b27f0f2de4b0e8f5cc05",
       [
@@ -517499,6 +517890,20 @@
       {}
      ]
     ],
+    "render-blocking-status-link.html": [
+     "8c6544db48664e0b58dde49d73a8449715f6d20d",
+     [
+      null,
+      {}
+     ]
+    ],
+    "render-blocking-status-script.html": [
+     "bcd55b89944fc696bf1dedadb95378b6ad9943a9",
+     [
+      null,
+      {}
+     ]
+    ],
     "resource-ignore-data-url.html": [
      "a7056a80807967d9b94b1d4c54c0620dc2a4bad8",
      [
@@ -517797,7 +518202,7 @@
      ]
     ],
     "tojson.html": [
-     "2fe2a60e74a6a9bdcd5576c0a6d8e8d12d73a9a3",
+     "7a6187d3d55bcdf6b937602fbe3ce5b87a1f9f03",
      [
       null,
       {}
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.sub.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.sub.https.html
index a19cf6a4..eed87d0 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.sub.https.html
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.sub.https.html
@@ -23,8 +23,8 @@
 promise_test(async t => {
   await set_fedcm_cookie();
   const cred = await navigator.credentials.get(test_options);
-  assert_equals(cred.idToken, "token");
-}, "Successfully obtaining id_token should resolve the promise.");
+  assert_equals(cred.token, "token");
+}, "Successfully obtaining token should resolve the promise.");
 
 promise_test(async t => {
   await set_fedcm_cookie();
@@ -37,7 +37,7 @@
   const rej = promise_rejects_dom(t, 'AbortError', second);
 
   const first_cred = await first;
-  assert_equals(first_cred.idToken, "token");
+  assert_equals(first_cred.token, "token");
 
   return rej;
 },
@@ -88,7 +88,7 @@
       }]
     }
   });
-  assert_equals(cred.idToken, "token");
+  assert_equals(cred.token, "token");
 }, "nonce is not required in FederatedIdentityProvider.");
 
 promise_test(async t => {
@@ -122,7 +122,7 @@
   await promise_rejects_dom(t, 'AbortError', first_cred);
 
   const second_cred = await navigator.credentials.get(test_options);
-  assert_equals(second_cred.idToken, "token");
+  assert_equals(second_cred.token, "token");
 }, "Get after abort should work");
 
 promise_test(async t => {
@@ -140,7 +140,7 @@
 promise_test(async t => {
   await set_fedcm_cookie();
   const cred = await navigator.credentials.get(test_options);
-  assert_equals(cred.idToken, 'token');
+  assert_equals(cred.token, 'token');
 }, 'Test that COEP policy do not apply to FedCM requests');
 
 promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/README.md b/third_party/blink/web_tests/external/wpt/credential-management/support/README.md
index 886faa8..28250922 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/README.md
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/README.md
@@ -45,7 +45,7 @@
   import {fedcm_test} from './support/fedcm-helper.js';
 
   fedcm_test(async (t, mock) => {
-    mock.returnIdToken("a_token");
+    mock.returnToken("a_token");
     assert_equals("a_token", await navigator.credentials.get(options));
   }, "Successfully obtaining a token using mock.");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-iframe.html b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-iframe.html
index 546f66a..cc584bf 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-iframe.html
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-iframe.html
@@ -17,16 +17,16 @@
 //
 // message {
 //   string result: "Pass" | "Fail"
-//   string token: token.idToken
+//   string token: token.token
 //   string errorType: error.name
 // }
 
 window.onload = async () => {
   try {
     const mock = new MockFederatedAuthRequest();
-    mock.returnIdToken("a_token");
+    mock.returnToken("a_token");
     const cred = await navigator.credentials.get(test_options);
-    window.top.postMessage({result: "Pass", token: cred.idToken}, '*');
+    window.top.postMessage({result: "Pass", token: cred.token}, '*');
   } catch (error) {
     window.top.postMessage({result: "Fail", errorType: error.name}, '*');
   }
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-manifest-not-in-list/fedcm.json b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-manifest-not-in-list/fedcm.json
index c044a7f..c29126e 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-manifest-not-in-list/fedcm.json
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-manifest-not-in-list/fedcm.json
@@ -1,5 +1,5 @@
 {
   "accounts_endpoint": "../accounts.py",
   "client_metadata_endpoint": "../client_metadata.py",
-  "id_token_endpoint": "../id_token.py",
+  "id_token_endpoint": "../token.py"
 }
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
index 9923e898..53257099 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
@@ -1,7 +1,7 @@
-import { RequestIdTokenStatus, LogoutRpsStatus, FederatedAuthRequest, FederatedAuthRequestReceiver } from '/gen/third_party/blink/public/mojom/webid/federated_auth_request.mojom.m.js';
+import { RequestTokenStatus, LogoutRpsStatus, FederatedAuthRequest, FederatedAuthRequestReceiver } from '/gen/third_party/blink/public/mojom/webid/federated_auth_request.mojom.m.js';
 
-function toMojoIdTokenStatus(status) {
-  return RequestIdTokenStatus["k" + status];
+function toMojoTokenStatus(status) {
+  return RequestTokenStatus["k" + status];
 }
 
 // A mock service for responding to federated auth requests.
@@ -13,17 +13,17 @@
         this.receiver_.$.bindHandle(e.handle);
     }
     this.interceptor_.start();
-    this.idToken_ = null;
-    this.status_ = RequestIdTokenStatus.kError;
+    this.token_ = null;
+    this.status_ = RequestTokenStatus.kError;
     this.logoutRpsStatus_ = LogoutRpsStatus.kError;
     this.returnPending_ = false;
     this.pendingPromiseResolve_ = null;
   }
 
   // Causes the subsequent `navigator.credentials.get()` to resolve with the token.
-  returnIdToken(token) {
-    this.status_ = RequestIdTokenStatus.kSuccess;
-    this.idToken_ = token;
+  returnToken(token) {
+    this.status_ = RequestTokenStatus.kSuccess;
+    this.token_ = token;
     this.returnPending_ = false;
   }
 
@@ -31,8 +31,8 @@
   returnError(error) {
     if (error == "Success")
       throw new Error("Success is not a valid error");
-    this.status_ = toMojoIdTokenStatus(error);
-    this.idToken_ = null;
+    this.status_ = toMojoTokenStatus(error);
+    this.token_ = null;
     this.returnPending_ = false;
   }
 
@@ -50,8 +50,8 @@
   }
 
   // Implements
-  //   RequestIdToken(url.mojom.Url provider, string id_request) => (RequestIdTokenStatus status, string? id_token);
-  async requestIdToken(provider, idRequest) {
+  //   RequestToken(url.mojom.Url provider, string id_request) => (RequestTokenStatus status, string? token);
+  async requestToken(provider, idRequest) {
     if (this.returnPending_) {
       this.pendingPromise_ = new Promise((resolve, reject) => {
         this.pendingPromiseResolve_ = resolve;
@@ -60,14 +60,14 @@
     }
     return Promise.resolve({
       status: this.status_,
-      idToken: this.idToken_
+      token: this.token_
     });
   }
 
   async cancelTokenRequest() {
     this.pendingPromiseResolve_({
-      status: toMojoIdTokenStatus("ErrorCanceled"),
-      idToken: null
+      status: toMojoTokenStatus("ErrorCanceled"),
+      token: null
     });
     this.pendingPromiseResolve_ = null;
   }
@@ -79,8 +79,8 @@
   }
 
   async reset() {
-    this.idToken_ = null;
-    this.status_ = RequestIdTokenStatus.kError;
+    this.token_ = null;
+    this.status_ = RequestTokenStatus.kError;
     this.logoutRpsStatus_ = LogoutRpsStatus.kError;
     this.receiver_.$.close();
     this.interceptor_.stop();
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm.json b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm.json
index fc1c7394..b4901f5 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm.json
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm.json
@@ -1,6 +1,6 @@
 {
   "accounts_endpoint": "accounts.py",
   "client_metadata_endpoint": "client_metadata.py",
-  "id_token_endpoint": "id_token.py",
+  "id_token_endpoint": "token.py",
   "revocation_endpoint": "revoke.py"
 }
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/id_token.py b/third_party/blink/web_tests/external/wpt/credential-management/support/token.py
similarity index 80%
rename from third_party/blink/web_tests/external/wpt/credential-management/support/id_token.py
rename to third_party/blink/web_tests/external/wpt/credential-management/support/token.py
index f6faad4..e9b07767 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/id_token.py
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/token.py
@@ -1,4 +1,4 @@
 def main(request, response):
   if not b"cookie" in request.cookies or request.cookies[b"cookie"].value != b"1":
     return (500, [], "Missing cookie")
-  return "{\"id_token\": \"token\"}"
+  return "{\"token\": \"token\"}"
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.tentative.html b/third_party/blink/web_tests/external/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.tentative.html
deleted file mode 100644
index f3f0d58..0000000
--- a/third_party/blink/web_tests/external/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.tentative.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html>
-<title>Default passive document level touchmove event listener test</title>
-<link rel="help" href="https://github.com/WICG/interventions/issues/35">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/testdriver.js"></script>
-<script src="/resources/testdriver-actions.js"></script>
-<script src="/resources/testdriver-vendor.js"></script>
-<body onload=runTest()>
-<div id="touchDiv">
-</div>
-</body>
-<style>
-#touchDiv {
-  width: 100px;
-  height: 100px;
-}
-</style>
-<script>
-var touch_div = document.getElementById("touchDiv");
-var cancelable = true;
-var touch_move_arrived = false;
-document.addEventListener("touchmove", function (event) {
-    cancelable = event.cancelable;
-    touch_move_arrived = true;
-    event.preventDefault();
-});
-
-function waitFor(condition) {
-  const MAX_FRAME = 500;
-  return new Promise((resolve, reject) => {
-    function tick(frames) {
-      // We requestAnimationFrame either for 500 frames or until condition is
-      // met.
-      if (frames >= MAX_FRAME)
-        reject("Condition did not become true after 500 frames");
-      else if (condition())
-        resolve();
-      else
-        requestAnimationFrame(tick.bind(this, frames + 1));
-    }
-    tick(0);
-  });
-}
-
-function waitForCompositorCommit() {
-  return new Promise((resolve) => {
-    // rAF twice.
-    window.requestAnimationFrame(() => {
-      window.requestAnimationFrame(resolve);
-    });
-  });
-}
-
-function injectInput() {
-  new test_driver.Actions()
-    .addPointer("touch_pointer", "touch")
-    .pointerMove(0, 0, {origin: touch_div})
-    .pointerDown()
-    .pointerMove(30, 30)
-    .pointerUp()
-    .send();
-}
-
-function runTest() {
-  promise_test (async () => {
-    await waitForCompositorCommit();
-    injectInput();
-    await waitFor(()=> { return touch_move_arrived; });
-    assert_false(cancelable);
-  }, "Touchmove events are non-cancelable since the event listener is treated as passive.");
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/document-level-wheel-event-listener-passive-by-default.tentative.html b/third_party/blink/web_tests/external/wpt/dom/events/document-level-wheel-event-listener-passive-by-default.tentative.html
deleted file mode 100644
index b7224835..0000000
--- a/third_party/blink/web_tests/external/wpt/dom/events/document-level-wheel-event-listener-passive-by-default.tentative.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<title>Default passive document level wheel event listener manual test</title>
-<link rel="help" href="https://github.com/WICG/interventions/issues/64">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/testdriver.js"></script>
-<script src="/resources/testdriver-actions.js"></script>
-<script src="/resources/testdriver-vendor.js"></script>
-<body onload=runTest()>
-<div>This is a manual test since there is no way to synthesize wheel events.
-Scroll by wheel in the middle of the page to run the test.</div>
-</body>
-<script>
-var cancelable = true;
-var wheel_arrived = false;
-document.addEventListener("wheel", function (event) {
-    cancelable = event.cancelable;
-    wheel_arrived = true;
-    event.preventDefault();
-});
-
-function waitFor(condition) {
-  const MAX_FRAME = 200;
-  return new Promise((resolve, reject) => {
-    function tick(frames) {
-      // We requestAnimationFrame either for 200 frames or until condition is
-      // met.
-      if (frames >= MAX_FRAME)
-        reject("Condition did not become true after 200 frames");
-      else if (condition())
-        resolve();
-      else
-        requestAnimationFrame(tick.bind(this, frames + 1));
-    }
-    tick(0);
-  });
-}
-
-function runTest() {
-  promise_test (async () => {
-    const pos_x = Math.floor(window.innerWidth / 2);
-    const pos_y = Math.floor(window.innerHeight / 2);
-    const delta_x = 0;
-    const delta_y = 100;
-    await new test_driver.Actions()
-       .scroll(pos_x, pos_y, delta_x, delta_y).send();
-    await waitFor(()=> { return wheel_arrived; });
-    assert_false(cancelable);
-  }, "Wheel events are non-cancelable since the event listener is treated as passive.");
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body.html
new file mode 100644
index 0000000..4c40291
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>non-passive mousewheel event listener on body</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'mousewheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-div.html
new file mode 100644
index 0000000..a37276b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-div.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>non-passive mousewheel event listener on div</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<style>
+  html, body {
+    overflow: hidden;
+    margin: 0;
+  }
+  #div {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    overflow: scroll;
+  }
+</style>
+<div class=remove-on-cleanup id=div>
+  <div style="height: 200vh"></div>
+</div>
+<script>
+  runTest({
+    target: document.getElementById('div'),
+    eventName: 'mousewheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document.html
new file mode 100644
index 0000000..cdbfd23
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>non-passive mousewheel event listener on document</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'mousewheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-root.html
new file mode 100644
index 0000000..c7e818e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-root.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>non-passive mousewheel event listener on root</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'mousewheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window.html
new file mode 100644
index 0000000..6a394a2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>non-passive mousewheel event listener on window</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'mousewheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-body.html
new file mode 100644
index 0000000..d2e84de
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-body.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchmove event listener on body</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'touchmove',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-div.html
new file mode 100644
index 0000000..9f026ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-div.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchmove event listener on div</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.getElementById('touchDiv'),
+    eventName: 'touchmove',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-document.html
new file mode 100644
index 0000000..b5b27b4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-document.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchmove event listener on document</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'touchmove',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-root.html
new file mode 100644
index 0000000..c2f42cc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-root.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchmove event listener on root</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'touchmove',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-window.html
new file mode 100644
index 0000000..dee076f9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchmove-event-listener-on-window.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<link rel="help" href="https://github.com/WICG/interventions/issues/35">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'touchstart',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-body.html
new file mode 100644
index 0000000..f4c2246
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-body.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchstart event listener on body</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'touchstart',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-div.html
new file mode 100644
index 0000000..ba050c036
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-div.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchstart event listener on div</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.getElementById('touchDiv'),
+    eventName: 'touchstart',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-document.html
new file mode 100644
index 0000000..a1da298
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-document.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchstart event listener on document</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'touchstart',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-root.html
new file mode 100644
index 0000000..38bcf9b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-root.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchstart event listener on root</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'touchstart',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-window.html
new file mode 100644
index 0000000..3642af2b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-touchstart-event-listener-on-window.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>non-passive touchstart event listener on window</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'touchstart',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-body.html
new file mode 100644
index 0000000..3a573407
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-body.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>non-passive wheel event listener on body</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'wheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-div.html
new file mode 100644
index 0000000..05b655ff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-div.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>non-passive wheel event listener on div</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<style>
+  html, body {
+    overflow: hidden;
+    margin: 0;
+  }
+  #div {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    overflow: scroll;
+  }
+</style>
+<div class=remove-on-cleanup id=div>
+  <div style="height: 200vh"></div>
+</div>
+<script>
+  runTest({
+    target: document.getElementById('div'),
+    eventName: 'wheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-document.html
new file mode 100644
index 0000000..6e19c832
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-document.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>non-passive wheel event listener on document</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'wheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-root.html
new file mode 100644
index 0000000..26279cb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-root.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>non-passive wheel event listener on root</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'wheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-window.html
new file mode 100644
index 0000000..f428e485
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-window.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>non-passive wheel event listener on window</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'wheel',
+    passive: false,
+    expectCancelable: true,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-body.html
new file mode 100644
index 0000000..1c945924
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-body.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>passive mousewheel event listener on body</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'mousewheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-div.html
new file mode 100644
index 0000000..2edf612
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-div.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>passive mousewheel event listener on div</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<style>
+  html, body {
+    overflow: hidden;
+    margin: 0;
+  }
+  #div {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    overflow: scroll;
+  }
+</style>
+<div class=remove-on-cleanup id=div>
+  <div style="height: 200vh"></div>
+</div>
+<script>
+  runTest({
+    target: document.getElementById('div'),
+    eventName: 'mousewheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-document.html
new file mode 100644
index 0000000..4027f3fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-document.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>passive mousewheel event listener on document</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'mousewheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-root.html
new file mode 100644
index 0000000..40ef488
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-root.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>passive mousewheel event listener on root</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'mousewheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-window.html
new file mode 100644
index 0000000..6609c2a2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-mousewheel-event-listener-on-window.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>passive mousewheel event listener on window</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<link rel="help" href="https://github.com/w3c/uievents/issues/331">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'mousewheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-body.html
new file mode 100644
index 0000000..8077d1b03
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-body.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchmove event listener on body</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'touchmove',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-div.html
new file mode 100644
index 0000000..057474f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-div.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchmove event listener on div</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.getElementById('touchDiv'),
+    eventName: 'touchmove',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-document.html
new file mode 100644
index 0000000..60b17de6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-document.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchmove event listener on document</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'touchmove',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-root.html
new file mode 100644
index 0000000..8539920
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-root.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchmove event listener on root</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'touchmove',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-window.html
new file mode 100644
index 0000000..3e1d0d4e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchmove-event-listener-on-window.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchmove event listener on window</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'touchstart',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-body.html
new file mode 100644
index 0000000..63dd68d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-body.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchstart event listener on body</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'touchstart',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-div.html
new file mode 100644
index 0000000..f9aba60
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-div.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchstart event listener on div</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.getElementById('touchDiv'),
+    eventName: 'touchstart',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-document.html
new file mode 100644
index 0000000..011b87f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-document.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchstart event listener on document</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'touchstart',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-root.html
new file mode 100644
index 0000000..f2db44a360
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-root.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchstart event listener on root</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'touchstart',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-window.html
new file mode 100644
index 0000000..e8d83cdc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-touchstart-event-listener-on-window.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>passive touchstart event listener on window</title>
+<link rel="help" href="https://w3c.github.io/touch-events/#cancelability">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/touching.js"></script>
+<style>
+#touchDiv {
+  width: 100px;
+  height: 100px;
+}
+</style>
+<div id="touchDiv"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'touchstart',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-body.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-body.html
new file mode 100644
index 0000000..82de4bd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-body.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>passive wheel event listener on body</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.body,
+    eventName: 'wheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-div.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-div.html
new file mode 100644
index 0000000..906c5e2d8f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-div.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>passive wheel event listener on div</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<style>
+  html, body {
+    overflow: hidden;
+    margin: 0;
+  }
+  #div {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    overflow: scroll;
+  }
+</style>
+<div class=remove-on-cleanup id=div>
+  <div style="height: 200vh"></div>
+</div>
+<script>
+  runTest({
+    target: document.getElementById('div'),
+    eventName: 'wheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-document.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-document.html
new file mode 100644
index 0000000..9512313
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-document.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>passive wheel event listener on document</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document,
+    eventName: 'wheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-root.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-root.html
new file mode 100644
index 0000000..fe5d6d7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-root.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>passive wheel event listener on root</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: document.documentElement,
+    eventName: 'wheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-window.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-window.html
new file mode 100644
index 0000000..0107c1f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/passive-wheel-event-listener-on-window.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>passive wheel event listener on window</title>
+<link rel="help" href="https://w3c.github.io/uievents/#cancelability-of-wheel-events">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/wait-for.js"></script>
+<script src="resources/scrolling.js"></script>
+<div class=remove-on-cleanup style="height: 200vh"></div>
+<script>
+  runTest({
+    target: window,
+    eventName: 'wheel',
+    passive: true,
+    expectCancelable: false,
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/scrolling.js b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/scrolling.js
new file mode 100644
index 0000000..1e96a7f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/scrolling.js
@@ -0,0 +1,22 @@
+function runTest({target, eventName, passive, expectCancelable}) {
+  let cancelable = null;
+  let arrived = false;
+  target.addEventListener(eventName, function (event) {
+    cancelable = event.cancelable;
+    arrived = true;
+  }, {passive});
+
+  promise_test(async (t) => {
+    t.add_cleanup(() => {
+      document.querySelector('.remove-on-cleanup')?.remove();
+    });
+    const pos_x = Math.floor(window.innerWidth / 2);
+    const pos_y = Math.floor(window.innerHeight / 2);
+    const delta_x = 0;
+    const delta_y = 100;
+    await new test_driver.Actions()
+      .scroll(pos_x, pos_y, delta_x, delta_y).send();
+    await waitFor(() => arrived);
+    assert_equals(cancelable, expectCancelable);
+  });
+}
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/touching.js b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/touching.js
new file mode 100644
index 0000000..620d268
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/touching.js
@@ -0,0 +1,34 @@
+function waitForCompositorCommit() {
+  return new Promise((resolve) => {
+    // rAF twice.
+    window.requestAnimationFrame(() => {
+      window.requestAnimationFrame(resolve);
+    });
+  });
+}
+
+function injectInput(touchDiv) {
+  return new test_driver.Actions()
+    .addPointer("touch_pointer", "touch")
+    .pointerMove(0, 0, {origin: touchDiv})
+    .pointerDown()
+    .pointerMove(30, 30)
+    .pointerUp()
+    .send();
+}
+
+function runTest({target, eventName, passive, expectCancelable}) {
+  let touchDiv = document.getElementById("touchDiv");
+  let cancelable = null;
+  let arrived = false;
+  target.addEventListener(eventName, function (event) {
+    cancelable = event.cancelable;
+    arrived = true;
+  }, {passive});
+  promise_test(async () => {
+    await waitForCompositorCommit();
+    await injectInput(touchDiv);
+    await waitFor(() => arrived);
+    assert_equals(cancelable, expectCancelable);
+  });
+}
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/wait-for.js b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/wait-for.js
new file mode 100644
index 0000000..0bf3e558
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/resources/wait-for.js
@@ -0,0 +1,15 @@
+function waitFor(condition, MAX_FRAME = 500) {
+  return new Promise((resolve, reject) => {
+    function tick(frames) {
+      // We requestAnimationFrame either for MAX_FRAME frames or until condition is
+      // met.
+      if (frames >= MAX_FRAME)
+        reject(new Error(`Condition did not become true after ${MAX_FRAME} frames`));
+      else if (condition())
+        resolve();
+      else
+        requestAnimationFrame(() => tick(frames + 1));
+    }
+    tick(0);
+  });
+}
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/synthetic-events-cancelable.html b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/synthetic-events-cancelable.html
new file mode 100644
index 0000000..4287770
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/non-cancelable-when-passive/synthetic-events-cancelable.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Synthetic events are always cancelable by default</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dictdef-eventinit">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+const eventsMap = {
+  wheel: 'WheelEvent',
+  mousewheel: 'WheelEvent',
+  touchstart: 'TouchEvent',
+  touchmove: 'TouchEvent',
+  touchend: 'TouchEvent',
+  touchcancel: 'TouchEvent',
+}
+function isCancelable(eventName, interfaceName) {
+  test(() => {
+    assert_implements(interfaceName in self, `${interfaceName} should be supported`);
+    let defaultPrevented = null;
+    addEventListener(eventName, event => {
+      event.preventDefault();
+      defaultPrevented = event.defaultPrevented;
+    });
+    const event = new self[interfaceName](eventName);
+    assert_false(event.cancelable, 'cancelable');
+    const dispatchEventReturnValue = dispatchEvent(event);
+    assert_false(defaultPrevented, 'defaultPrevented');
+    assert_true(dispatchEventReturnValue, 'dispatchEvent() return value');
+  }, `Synthetic ${eventName} event with interface ${interfaceName} is not cancelable`);
+}
+for (const eventName in eventsMap) {
+  isCancelable(eventName, eventsMap[eventName]);
+  isCancelable(eventName, 'Event');
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/FedCM.idl b/third_party/blink/web_tests/external/wpt/interfaces/FedCM.idl
index af48621..832b54a 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/FedCM.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/FedCM.idl
@@ -16,7 +16,7 @@
 
 [Exposed=Window, SecureContext]
 dictionary FederatedTokens {
-  USVString idToken;
+  USVString token;
 };
 
 [Exposed=Window, SecureContext]
diff --git a/third_party/blink/web_tests/fast/autoresize/autoresize-with-iframe.html b/third_party/blink/web_tests/fast/autoresize/autoresize-with-iframe.html
index c5c4503d..9c2e68d 100644
--- a/third_party/blink/web_tests/fast/autoresize/autoresize-with-iframe.html
+++ b/third_party/blink/web_tests/fast/autoresize/autoresize-with-iframe.html
@@ -1,24 +1,43 @@
 <!doctype html>
 <html>
 <head>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
 <script>
-if (window.testRunner) {
-    testRunner.enableAutoResizeMode(10, 10, 1000, 1000);
-    testRunner.dumpAsText();
-    testRunner.dumpChildFrames();
-    testRunner.waitUntilDone();
+function responseMessage() {
+  return new Promise(resolve => {
+  window.addEventListener("message", (e) => {
+    resolve(e.data);
+  }, {once: true})});
 }
 
-function run()
-{
+function onLoad() {
+  promise_test(async () => {
+    testRunner.enableAutoResizeMode(10, 10, 1000, 1000);
+
+    // We cannot just wait for the resize event because that fires when
+    // the innerWidth changes (which happens first). We need to wait for the
+    // outerWidth to change.
+    while(window.outerWidth < 901) {
+      await new Promise(resolve => requestAnimationFrame(resolve));
+    }
+
     var frameWindow = window.frames['frame'];
-    frameWindow.postMessage("shouldBe('document.scrollingElement.scrollWidth', 400)", "*");
-    frameWindow.postMessage("shouldBe('document.scrollingElement.scrollHeight', 200)", "*");
-    frameWindow.postMessage("log('DONE'); if (window.testRunner) testRunner.notifyDone();", "*");
+
+    var width_promise = responseMessage();
+    frameWindow.postMessage('document.scrollingElement.scrollWidth', "*");
+    var width = await width_promise;
+    assert_equals(width, 901);
+
+    var height_promise = responseMessage();
+    frameWindow.postMessage('document.scrollingElement.scrollHeight', "*");
+    var height = await height_promise;
+    assert_equals(height, 201);
+  });
 }
 </script>
 </head>
-<body onload="run()" style="width:400px; height:200px; background-color:yellow;">
+<body onLoad="onLoad()" style="width:901px; height:201px; background-color:yellow;">
 <iframe name="frame" style="width:100%; height:100%;" src="resources/iframe.html">
 </iframe>
 </body>
diff --git a/third_party/blink/web_tests/fast/autoresize/basic.html b/third_party/blink/web_tests/fast/autoresize/basic.html
index d1ed64a9..ef500c8 100644
--- a/third_party/blink/web_tests/fast/autoresize/basic.html
+++ b/third_party/blink/web_tests/fast/autoresize/basic.html
@@ -1,24 +1,27 @@
 <!doctype html>
 <html>
-<script src='resources/autoresize-util.js'></script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
 <script>
-function runTest()
-{
-    if (window.testRunner) {
-        testRunner.useUnfortunateSynchronousResizeMode();
-        testRunner.enableAutoResizeMode(10, 10, 1000, 1000);
-        testRunner.dumpAsText();
-    }
-    shouldBe('document.body.clientWidth', 'window.innerWidth');
-    shouldBe('document.body.clientHeight', 'window.innerHeight');
-    shouldBe('document.scrollingElement.scrollWidth', 'window.innerWidth');
-    shouldBe('document.scrollingElement.scrollHeight', 'window.innerHeight');
-    shouldBe('window.innerWidth', 'window.outerWidth');
-    shouldBe('window.innerHeight', 'window.outerHeight');
-    log('DONE');
-}
+promise_test(async () => {
+  testRunner.enableAutoResizeMode(10, 10, 1000, 1000);
+
+  // We cannot just wait for the resize event because that fires when
+  // the innerWidth changes (which happens first). We need to wait for the
+  // outerWidth to change.
+  while(window.outerWidth != 900) {
+    await new Promise(resolve => requestAnimationFrame(resolve));
+  }
+
+  assert_equals(document.body.clientWidth, window.innerWidth);
+  assert_equals(document.body.clientHeight, window.innerHeight);
+  assert_equals(document.scrollingElement.scrollWidth, window.innerWidth);
+  assert_equals(document.scrollingElement.scrollHeight, window.innerHeight);
+  assert_equals(window.innerWidth, window.outerWidth);
+  assert_equals(window.innerHeight, window.outerHeight);
+});
 </script>
-<body onload="runTest()" style="margin:0; width:900px">
+<body style="margin:0; width:900px">
 This test only works in when run in dumprendertree as it relies on having auto-resize enabled its window.
 <br>
 <br>
diff --git a/third_party/blink/web_tests/fast/autoresize/resources/autoresize-util.js b/third_party/blink/web_tests/fast/autoresize/resources/autoresize-util.js
deleted file mode 100644
index 97d89d6..0000000
--- a/third_party/blink/web_tests/fast/autoresize/resources/autoresize-util.js
+++ /dev/null
@@ -1,14 +0,0 @@
-function log(message)
-{
-    document.getElementById("result").innerHTML += message + "<br>";
-}
-
-function shouldBe(a, b)
-{
-  aValue = eval(a);
-  bValue = eval(b);
-  if (aValue == bValue)
-     log('PASS: ' + a + ' equaled ' + b);
-  else
-     log('FAILED: ' + a + '(' + aValue + ') did not equal ' + b + '(' + bValue + ')');
-}
diff --git a/third_party/blink/web_tests/fast/autoresize/resources/iframe.html b/third_party/blink/web_tests/fast/autoresize/resources/iframe.html
index 9d0856a7..07357a4 100644
--- a/third_party/blink/web_tests/fast/autoresize/resources/iframe.html
+++ b/third_party/blink/web_tests/fast/autoresize/resources/iframe.html
@@ -1,14 +1,12 @@
 <!doctype html>
 <html>
 <body style="background-color:green;">
-This test only works in DumpRenderTree since it relies on setting up autoresize from javascript. It verifies that iframes are sized correctly when the main window is autoresized. On success, you should see a series of PASS messages followed by a DONE.
 <div id='result'>
 </div>
-<script src='autoresize-util.js'></script>
 <script>
 window.onmessage = function (evt)
 {
-    eval(evt.data);
+  window.parent.postMessage(eval(evt.data), "*");
 }
 </script>
 </body>
diff --git a/third_party/blink/web_tests/fast/autoresize/turn-off-autoresize.html b/third_party/blink/web_tests/fast/autoresize/turn-off-autoresize.html
index 0692ad0d..a3ca9a0 100644
--- a/third_party/blink/web_tests/fast/autoresize/turn-off-autoresize.html
+++ b/third_party/blink/web_tests/fast/autoresize/turn-off-autoresize.html
@@ -1,32 +1,38 @@
 <!doctype html>
 <html>
-<script src='resources/autoresize-util.js'></script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
 <script>
-function runTest()
-{
-    if (window.testRunner) {
-        testRunner.useUnfortunateSynchronousResizeMode();
-        testRunner.enableAutoResizeMode(10, 10, 1000, 1000);
-        testRunner.dumpAsText();
-    }
-    shouldBe('document.body.clientWidth', 'window.innerWidth');
-    shouldBe('document.body.clientHeight', 'window.innerHeight');
-    shouldBe('document.scrollingElement.scrollWidth', 'window.innerWidth');
-    shouldBe('document.scrollingElement.scrollHeight', 'window.innerHeight');
-    shouldBe('window.innerWidth', 'window.outerWidth');
-    shouldBe('window.innerHeight', 'window.outerHeight');
-    if (window.testRunner)
-        testRunner.disableAutoResizeMode(200, 200);
 
-    shouldBe('window.outerWidth', 200);
-    shouldBe('window.outerHeight', 200);
-    document.body.style.width = '100px';
-    shouldBe('window.outerWidth', 200);
+promise_test(async () => {
+  testRunner.enableAutoResizeMode(10, 10, 1000, 1000);
 
-    log('DONE');
-}
+  // We cannot just wait for the resize event because that fires when
+  // the innerWidth changes (which happens first). We need to wait for the
+  // outerWidth to change.
+  while(window.outerWidth != 900) {
+    await new Promise(resolve => requestAnimationFrame(resolve));
+  }
+  assert_equals(document.body.clientWidth, window.innerWidth);
+  assert_equals(document.body.clientHeight, window.innerHeight);
+  assert_equals(document.scrollingElement.scrollWidth, window.innerWidth);
+  assert_equals(document.scrollingElement.scrollHeight, window.innerHeight);
+  assert_equals(window.innerWidth, window.outerWidth);
+  assert_equals(window.innerHeight, window.outerHeight);
+  testRunner.disableAutoResizeMode(200, 200);
+
+  // Wait for the outer window to actually be resized.
+  while(window.outerWidth != 200) {
+    await new Promise(resolve => requestAnimationFrame(resolve));
+  }
+
+  assert_equals(window.outerWidth, 200);
+  assert_equals(window.outerHeight, 200);
+  document.body.style.width = '100px';
+  assert_equals(window.outerWidth, 200);
+});
 </script>
-<body onload="runTest()" style="margin:0; width:900px">
+<body style="margin:0; width:900px">
 This test verifies that turning off auto resize functions correctly. It only works when run in dumprendertree as it relies on having auto-resize function available.
 <br>
 <br>
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-resize-contents.html b/third_party/blink/web_tests/fast/dom/Window/window-resize-contents.html
index 4238dd4..3418e0e 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-resize-contents.html
+++ b/third_party/blink/web_tests/fast/dom/Window/window-resize-contents.html
@@ -6,23 +6,21 @@
 <div style="position: absolute; z-index: 2">
     <p>This test checks that the yellow reference DOM node (which should be as
     big as the window) gets resized when the window is resized.</p>
-    
-    <p>To avoid relayouts and repaints caused by DOM-based logging, it doesn't
-    output anything. Please check the console for confirmation that the node
-    dimensions increase by 10x10.</p>
 </div>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
 <script>
-    if (window.testRunner) {
-        testRunner.useUnfortunateSynchronousResizeMode();
-        testRunner.dumpAsText();
-    }
-    var referenceNode = document.getElementById('reference');
-    console.log('Initial reference node dimensions ' +
-        referenceNode.offsetWidth + ' x ' + referenceNode.offsetHeight);
-    console.log('Increasing window size by 10 x 10');
-    window.resizeBy(10, 10);
-    console.log('Post-resize reference node dimensions ' +
-        referenceNode.offsetWidth + ' x ' + referenceNode.offsetHeight);
+promise_test(async () => {
+  var referenceNode = document.getElementById('reference');
+  var originalWidth = referenceNode.offsetWidth;
+  var originalHeight = referenceNode.offsetHeight;
+  var resizePromise = new Promise(resolve => window.onresize = resolve);
+  window.resizeBy(10, 10);
+  await resizePromise;
+
+  assert_equals(originalWidth + 10, referenceNode.offsetWidth);
+  assert_equals(originalHeight + 10, referenceNode.offsetHeight);
+});
 </script>
 
 </body>
diff --git a/third_party/blink/web_tests/fast/dom/icon-url-list-viewport.html b/third_party/blink/web_tests/fast/dom/icon-url-list-viewport.html
index b88c85c..4765dc95 100644
--- a/third_party/blink/web_tests/fast/dom/icon-url-list-viewport.html
+++ b/third_party/blink/web_tests/fast/dom/icon-url-list-viewport.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
 <html>
 <head>
 <link rel="shortcut icon" type="image/x-icon" href="http://test.com/favicon.ico"/>
@@ -15,46 +16,43 @@
     docHead.appendChild(link);
 }
 
-var t = async_test('Favicons are updated when the window is resized.');
-window.onload = t.step_func(function () {
-  testRunner.useUnfortunateSynchronousResizeMode();
+window.onload = function() {
+  promise_test(async () => {
+    addFavIcon(
+      "http://test.com/mediafavicon1.ico",
+      `(max-width: ${window.outerWidth + 1}px)`
+    );
+    addFavIcon(
+      "http://test.com/mediafavicon2.ico",
+      `(max-width: ${window.outerWidth - 1}px)`
+    );
 
-  addFavIcon(
-    "http://test.com/mediafavicon1.ico",
-    `(max-width: ${window.outerWidth + 1}px)`
-  );
-  addFavIcon(
-    "http://test.com/mediafavicon2.ico",
-    `(max-width: ${window.outerWidth - 1}px)`
-  );
+    var expectedURLs = [
+      "http://test.com/mediafavicon1.ico",
+      "http://test.com/favicon.ico",
+    ];
+    assert_array_equals(
+      internals.shortcutIconURLs(document),
+      expectedURLs,
+      "URL list does not match expected"
+    );
 
-  var expectedURLs = [
-    "http://test.com/mediafavicon1.ico",
-    "http://test.com/favicon.ico",
-  ];
-  assert_array_equals(
-    internals.shortcutIconURLs(document),
-    expectedURLs,
-    "URL list does not match expected"
-  );
+    var resizePromise = new Promise(resolve => window.onresize = resolve);
+    window.resizeBy(-24, 0);
+    await resizePromise;
 
-  window.resizeBy(-24, 0);
-  requestAnimationFrame(function () {
-    t.step(function () {
-      var expectedURLs = [
-        "http://test.com/mediafavicon2.ico",
-        "http://test.com/mediafavicon1.ico",
-        "http://test.com/favicon.ico",
-      ];
-      assert_array_equals(
-        internals.shortcutIconURLs(document),
-        expectedURLs,
-        "URL list does not match expected"
-      );
-      t.done();
-    });
+    var expectedURLs = [
+      "http://test.com/mediafavicon2.ico",
+      "http://test.com/mediafavicon1.ico",
+      "http://test.com/favicon.ico",
+    ];
+    assert_array_equals(
+      internals.shortcutIconURLs(document),
+      expectedURLs,
+      "URL list does not match expected"
+    );
   });
-});
+};
 </script>
 </head>
 </html>
diff --git a/third_party/blink/web_tests/fast/dom/rtl-scroll-to-leftmost-and-resize.html b/third_party/blink/web_tests/fast/dom/rtl-scroll-to-leftmost-and-resize.html
index 35dffbc..161ca46 100644
--- a/third_party/blink/web_tests/fast/dom/rtl-scroll-to-leftmost-and-resize.html
+++ b/third_party/blink/web_tests/fast/dom/rtl-scroll-to-leftmost-and-resize.html
@@ -1,15 +1,21 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 <html>
 <head>
 <script type="text/javascript">
 if (window.testRunner)
-    testRunner.useUnfortunateSynchronousResizeMode();
+    testRunner.waitUntilDone();
 
-onload = function()
+onload = async function()
 {
+    var resizePromise = new Promise(resolve => window.onresize = resolve);
     window.resizeTo(250, window.innerHeight);
+    await resizePromise;
     window.scrollTo(-100000, 0);
+    resizePromise = new Promise(resolve => window.onresize = resolve);
     window.resizeTo(350, window.innerHeight);
+    await resizePromise;
+    if (testRunner)
+      testRunner.notifyDone();
 }
 </script>
 </head>
@@ -19,4 +25,3 @@
         </div>
     </body>
 </html>
-
diff --git a/third_party/blink/web_tests/fast/events/resize-events-count.html b/third_party/blink/web_tests/fast/events/resize-events-count.html
index c8afb8c2..7b4210b 100644
--- a/third_party/blink/web_tests/fast/events/resize-events-count.html
+++ b/third_party/blink/web_tests/fast/events/resize-events-count.html
@@ -21,7 +21,6 @@
         }
 
         if (window.testRunner) {
-            testRunner.useUnfortunateSynchronousResizeMode();
             testRunner.dumpAsText();
             testRunner.waitUntilDone();
         }
diff --git a/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection.html b/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection.html
index a33dc50..146fd30 100644
--- a/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection.html
+++ b/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection.html
@@ -1,4 +1,4 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!DOCTYPE html>
 <html>
 <head>
 <script src="../../resources/js-test.js"></script>
@@ -59,23 +59,17 @@
 shouldThrow("new RTCPeerConnection({iceCandidatePoolSize:256});");
 shouldThrow("new RTCPeerConnection({iceCandidatePoolSize:'foo'});");
 
-// Deprecated.
-shouldNotThrow("new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1}});");
-shouldNotThrow("new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1, valid_and_supported_2:1}});");
-shouldNotThrow("new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0}]});");
-shouldNotThrow("new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0},{valid_and_supported_2:0}]});");
-shouldNotThrow("new RTCPeerConnection(null, {optional:[{valid_but_unsupported_1:0},{valid_but_unsupported_2:0}]});");
-shouldThrow("new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:66}});");
-shouldNotThrow("new RTCPeerConnection(null, {mandatory:{invalid:1}});");
-shouldNotThrow("new RTCPeerConnection(null, {mandatory:{valid_but_unsupported_1:1}});");
-shouldNotThrow("new RTCPeerConnection(null, {mandatory:{valid_but_unsupported_1:1, valid_and_supported_1:1}});");
-shouldThrow("new RTCPeerConnection(null, {optional:{valid_and_supported_1:0}});");
-shouldThrow("new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0,valid_and_supported_2:0}]});");
-// Optional constraints are ignored even if they are invalid.
-shouldNotThrow("new RTCPeerConnection(null, {optional:[{invalid:0}]});");
-shouldThrow("new RTCPeerConnection(null, {valid_and_supported_1:1});");
-shouldThrow("new RTCPeerConnection(null, {valid_but_unsupported_1:1});");
-shouldThrow("new RTCPeerConnection(null, {valid_and_supported_2:1, mandatory:{valid_and_supported_1:1}});");
+// Neither valid or invalid constraints throw.
+shouldNotThrow("new RTCPeerConnection(null, {mandatory:{googIPv6:false}});");
+shouldNotThrow("new RTCPeerConnection(null, {mandatory:{googIPv6:{ideal:false}}});");
+shouldNotThrow("new RTCPeerConnection(null, {mandatory:{googIPv6:{exact:false}}});");
+shouldNotThrow("new RTCPeerConnection(null, {mandatory:{googIPv6:{}}});");
+shouldNotThrow("new RTCPeerConnection(null, {mandatory:{googInvalid:true}});");
+shouldNotThrow("new RTCPeerConnection(null, {optional:[{googIPv6:false}]});");
+shouldNotThrow("new RTCPeerConnection(null, {optional:[{googIPv6:{ideal:false}}]});");
+shouldNotThrow("new RTCPeerConnection(null, {optional:[{googIPv6:{exact:false}}]});");
+shouldNotThrow("new RTCPeerConnection(null, {optional:[{googIPv6:{}}]});");
+shouldNotThrow("new RTCPeerConnection(null, {optional:[{googInvalid:true}]});");
 
 // Construct with certificates.
 shouldThrow("new RTCPeerConnection({iceServers:[], certificates:null});");
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize-expected.txt b/third_party/blink/web_tests/flag-specific/highdpi/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize-expected.txt
deleted file mode 100644
index 5a2b5d7..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize-expected.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-FAIL window.innerWidth should be 800. Was 533.
-FAIL window.innerHeight should be 600. Was 400.
-FAIL getComputedStyle(test).fontSize should be 30px. Was 20px.
-FAIL getComputedStyle(test).width should be 400px. Was 266.667px.
-FAIL getComputedStyle(testpseudo, ':after').marginLeft should be 120px. Was 80px.
-FAIL getComputedStyle(testshadow).borderRightWidth should be 80px. Was 53.3333px.
-FAIL window.innerWidth should be 900. Was 600.
-FAIL window.innerHeight should be 600. Was 400.
-FAIL getComputedStyle(test).fontSize should be 30px. Was 20px.
-FAIL getComputedStyle(test).width should be 450px. Was 300px.
-FAIL getComputedStyle(testpseudo, ':after').marginLeft should be 120px. Was 80px.
-FAIL getComputedStyle(testshadow).borderRightWidth should be 90px. Was 60px.
-FAIL window.innerWidth should be 900. Was 600.
-FAIL window.innerHeight should be 640. Was 427.
-FAIL getComputedStyle(test).fontSize should be 32px. Was 21.3333px.
-FAIL getComputedStyle(test).width should be 450px. Was 300px.
-FAIL getComputedStyle(testpseudo, ':after').marginLeft should be 128px. Was 85.3333px.
-FAIL getComputedStyle(testshadow).borderRightWidth should be 90px. Was 60px.
-FAIL window.innerWidth should be 500. Was 333.
-FAIL window.innerHeight should be 640. Was 427.
-FAIL getComputedStyle(test).fontSize should be 32px. Was 21.3333px.
-FAIL getComputedStyle(test).width should be 250px. Was 166.667px.
-FAIL getComputedStyle(testpseudo, ':after').marginLeft should be 100px. Was 66.6667px.
-FAIL getComputedStyle(testshadow).borderRightWidth should be 64px. Was 42.6667px.
-FAIL window.innerWidth should be 800. Was 533.
-FAIL window.innerHeight should be 600. Was 400.
-FAIL getComputedStyle(test).fontSize should be 30px. Was 20px.
-FAIL getComputedStyle(test).width should be 400px. Was 266.667px.
-FAIL getComputedStyle(testpseudo, ':after').marginLeft should be 120px. Was 80px.
-FAIL getComputedStyle(testshadow).borderRightWidth should be 80px. Was 53.3333px.
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
-This test of viewport units and resizing depends on window.resizeTo.
diff --git a/third_party/blink/web_tests/http/tests/misc/client-hints-picture.html b/third_party/blink/web_tests/http/tests/misc/client-hints-picture.html
index d1f1b89..627d236 100644
--- a/third_party/blink/web_tests/http/tests/misc/client-hints-picture.html
+++ b/third_party/blink/web_tests/http/tests/misc/client-hints-picture.html
@@ -13,11 +13,6 @@
         if (counter == 1) {
             assert_equals(message.data, "resize");
             ++counter;
-            if (child.testRunner) {
-              // resizeTo() doesn't seem to trigger selection of different
-              // <source> otherwise.
-              child.testRunner.useUnfortunateSynchronousResizeMode();
-            }
             child.resizeTo(600, 600);
         } else {
             assert_equals(message.data, "success");
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-origin-trial-interfaces.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-origin-trial-interfaces.html
index 35e3c8f..616a0636 100644
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-origin-trial-interfaces.html
+++ b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-origin-trial-interfaces.html
@@ -13,7 +13,7 @@
     test(t => {
       OriginTrialsHelper.check_properties_exist(this,
         {
-          'FederatedCredential': ['idToken'],
+          'FederatedCredential': ['token'],
         });
   }, 'FedCM API interfaces and properties in Origin-Trial enabled document.');
 </script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-third-party-origin-trial-interfaces.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-third-party-origin-trial-interfaces.html
index 99ec045e..b0c620d 100644
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-third-party-origin-trial-interfaces.html
+++ b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/fedcm-third-party-origin-trial-interfaces.html
@@ -9,7 +9,7 @@
     test(t => {
       OriginTrialsHelper.check_properties_exist(this,
         {
-          'FederatedCredential': ['idToken'],
+          'FederatedCredential': ['token'],
         });
   }, 'FedCM API interfaces and properties in Origin-Trial enabled document.');
 </script>
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/overlay_popup_ad/overlay-popup-ad-viewport-resize.html b/third_party/blink/web_tests/http/tests/subresource_filter/overlay_popup_ad/overlay-popup-ad-viewport-resize.html
index 50dcbce..00ab854 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/overlay_popup_ad/overlay-popup-ad-viewport-resize.html
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/overlay_popup_ad/overlay-popup-ad-viewport-resize.html
@@ -62,7 +62,6 @@
 
   // Resize the window to to make the overlay iframe centered and large
   // relative to the viewport.
-  testRunner.useUnfortunateSynchronousResizeMode();
   testRunner.waitUntilDone();
   window.resizeTo(150, 150);
 
diff --git a/third_party/blink/web_tests/media/controls/overflow-menu-hide-on-resize.html b/third_party/blink/web_tests/media/controls/overflow-menu-hide-on-resize.html
index 19424149..b576074 100644
--- a/third_party/blink/web_tests/media/controls/overflow-menu-hide-on-resize.html
+++ b/third_party/blink/web_tests/media/controls/overflow-menu-hide-on-resize.html
@@ -6,9 +6,6 @@
 <video controls></video>
 <script>
 async_test(t => {
-  if (window.testRunner)
-    testRunner.useUnfortunateSynchronousResizeMode();
-
   // Set up video
   const video = document.querySelector('video');
   video.src = '../content/test.ogv';
diff --git a/third_party/blink/web_tests/paint/invalidation/resources/window-resize-repaint.js b/third_party/blink/web_tests/paint/invalidation/resources/window-resize-repaint.js
index 9462790..37647a8 100644
--- a/third_party/blink/web_tests/paint/invalidation/resources/window-resize-repaint.js
+++ b/third_party/blink/web_tests/paint/invalidation/resources/window-resize-repaint.js
@@ -12,7 +12,7 @@
 if (window.internals)
     internals.runtimeFlags.paintUnderInvalidationCheckingEnabled = true;
 
-function doTest() {
+async function doTest() {
     if (sizeIndex) {
         repaintRects += internals.layerTreeAsText(document, window.internals.LAYER_TREE_INCLUDES_INVALIDATIONS);
         internals.stopTrackingRepaints(document);
@@ -20,7 +20,9 @@
     ++sizeIndex;
     if (sizeIndex < testSizes.length) {
         internals.startTrackingRepaints(document);
+        var resizePromise = new Promise(resolve => window.onresize = resolve);
         window.resizeTo(testSizes[sizeIndex].width, testSizes[sizeIndex].height);
+        await resizePromise;
         runAfterLayoutAndPaint(doTest);
     } else if (window.testRunner) {
         testRunner.setCustomTextOutput(repaintRects);
@@ -29,10 +31,11 @@
 }
 
 if (window.testRunner) {
-    testRunner.useUnfortunateSynchronousResizeMode();
     testRunner.waitUntilDone();
-    onload = function() {
+    onload = async function() {
+        var resizePromise = new Promise(resolve => window.onresize = resolve);
         window.resizeTo(testSizes[0].width, testSizes[0].height);
+        await resizePromise;
         runAfterLayoutAndPaint(doTest);
     };
 }
diff --git a/third_party/blink/web_tests/platform/generic/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize-expected.txt b/third_party/blink/web_tests/platform/generic/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize-expected.txt
deleted file mode 100644
index c72bb5a..0000000
--- a/third_party/blink/web_tests/platform/generic/css3/viewport-percentage-lengths/viewport-percentage-lengths-resize-expected.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-PASS window.innerWidth is 800
-PASS window.innerHeight is 600
-PASS getComputedStyle(test).fontSize is '30px'
-PASS getComputedStyle(test).width is '400px'
-PASS getComputedStyle(testpseudo, ':after').marginLeft is '120px'
-PASS getComputedStyle(testshadow).borderRightWidth is '80px'
-PASS window.innerWidth is 900
-PASS window.innerHeight is 600
-PASS getComputedStyle(test).fontSize is '30px'
-PASS getComputedStyle(test).width is '450px'
-PASS getComputedStyle(testpseudo, ':after').marginLeft is '120px'
-PASS getComputedStyle(testshadow).borderRightWidth is '90px'
-PASS window.innerWidth is 900
-PASS window.innerHeight is 640
-PASS getComputedStyle(test).fontSize is '32px'
-PASS getComputedStyle(test).width is '450px'
-PASS getComputedStyle(testpseudo, ':after').marginLeft is '128px'
-PASS getComputedStyle(testshadow).borderRightWidth is '90px'
-PASS window.innerWidth is 500
-PASS window.innerHeight is 640
-PASS getComputedStyle(test).fontSize is '32px'
-PASS getComputedStyle(test).width is '250px'
-PASS getComputedStyle(testpseudo, ':after').marginLeft is '100px'
-PASS getComputedStyle(testshadow).borderRightWidth is '64px'
-PASS window.innerWidth is 800
-PASS window.innerHeight is 600
-PASS getComputedStyle(test).fontSize is '30px'
-PASS getComputedStyle(test).width is '400px'
-PASS getComputedStyle(testpseudo, ':after').marginLeft is '120px'
-PASS getComputedStyle(testshadow).borderRightWidth is '80px'
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
-This test of viewport units and resizing depends on window.resizeTo.
diff --git a/third_party/blink/web_tests/platform/generic/fast/autoresize/autoresize-with-iframe-expected.txt b/third_party/blink/web_tests/platform/generic/fast/autoresize/autoresize-with-iframe-expected.txt
deleted file mode 100644
index 834adc16..0000000
--- a/third_party/blink/web_tests/platform/generic/fast/autoresize/autoresize-with-iframe-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
---------
-Frame: 'frame'
---------
-This test only works in DumpRenderTree since it relies on setting up autoresize from javascript. It verifies that iframes are sized correctly when the main window is autoresized. On success, you should see a series of PASS messages followed by a DONE.
-PASS: document.scrollingElement.scrollWidth equaled 400
-PASS: document.scrollingElement.scrollHeight equaled 200
-DONE
-
diff --git a/third_party/blink/web_tests/platform/generic/fast/autoresize/basic-expected.txt b/third_party/blink/web_tests/platform/generic/fast/autoresize/basic-expected.txt
deleted file mode 100644
index 22cb566..0000000
--- a/third_party/blink/web_tests/platform/generic/fast/autoresize/basic-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-This test only works in when run in dumprendertree as it relies on having auto-resize enabled its window.
-
-When it succeeds, there should be a series of PASS messages followed by a DONE message.
-
-
-PASS: document.body.clientWidth equaled window.innerWidth
-PASS: document.body.clientHeight equaled window.innerHeight
-PASS: document.scrollingElement.scrollWidth equaled window.innerWidth
-PASS: document.scrollingElement.scrollHeight equaled window.innerHeight
-PASS: window.innerWidth equaled window.outerWidth
-PASS: window.innerHeight equaled window.outerHeight
-DONE
-
diff --git a/third_party/blink/web_tests/platform/generic/fast/autoresize/turn-off-autoresize-expected.txt b/third_party/blink/web_tests/platform/generic/fast/autoresize/turn-off-autoresize-expected.txt
deleted file mode 100644
index 1380d2f..0000000
--- a/third_party/blink/web_tests/platform/generic/fast/autoresize/turn-off-autoresize-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This test verifies that turning off auto resize functions correctly. It only works when run in dumprendertree as it relies on having auto-resize function available.
-
-When it succeeds, there should be a series of PASS messages followed by a DONE message.
-
-
-PASS: document.body.clientWidth equaled window.innerWidth
-PASS: document.body.clientHeight equaled window.innerHeight
-PASS: document.scrollingElement.scrollWidth equaled window.innerWidth
-PASS: document.scrollingElement.scrollHeight equaled window.innerHeight
-PASS: window.innerWidth equaled window.outerWidth
-PASS: window.innerHeight equaled window.outerHeight
-PASS: window.outerWidth equaled 200
-PASS: window.outerHeight equaled 200
-PASS: window.outerWidth equaled 200
-DONE
-
diff --git a/third_party/blink/web_tests/platform/generic/fast/dom/Window/window-resize-contents-expected.txt b/third_party/blink/web_tests/platform/generic/fast/dom/Window/window-resize-contents-expected.txt
deleted file mode 100644
index 8ef6227..0000000
--- a/third_party/blink/web_tests/platform/generic/fast/dom/Window/window-resize-contents-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CONSOLE MESSAGE: Initial reference node dimensions 800 x 600
-CONSOLE MESSAGE: Increasing window size by 10 x 10
-CONSOLE MESSAGE: Post-resize reference node dimensions 810 x 610
-This test checks that the yellow reference DOM node (which should be as big as the window) gets resized when the window is resized.
-
-To avoid relayouts and repaints caused by DOM-based logging, it doesn't output anything. Please check the console for confirmation that the node dimensions increase by 10x10.
diff --git a/third_party/blink/web_tests/platform/generic/fast/peerconnection/RTCPeerConnection-expected.txt b/third_party/blink/web_tests/platform/generic/fast/peerconnection/RTCPeerConnection-expected.txt
index d7488e6..6bfaf86 100644
--- a/third_party/blink/web_tests/platform/generic/fast/peerconnection/RTCPeerConnection-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/fast/peerconnection/RTCPeerConnection-expected.txt
@@ -44,21 +44,16 @@
 PASS new RTCPeerConnection({iceCandidatePoolSize:99999999}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Failed to read the 'iceCandidatePoolSize' property from 'RTCConfiguration': Value is outside the 'octet' value range..
 PASS new RTCPeerConnection({iceCandidatePoolSize:256}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Failed to read the 'iceCandidatePoolSize' property from 'RTCConfiguration': Value is outside the 'octet' value range..
 PASS new RTCPeerConnection({iceCandidatePoolSize:'foo'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Failed to read the 'iceCandidatePoolSize' property from 'RTCConfiguration': Value is not of type 'octet'..
-PASS new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1}}); did not throw exception.
-PASS new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1, valid_and_supported_2:1}}); did not throw exception.
-PASS new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0}]}); did not throw exception.
-PASS new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0},{valid_and_supported_2:0}]}); did not throw exception.
-PASS new RTCPeerConnection(null, {optional:[{valid_but_unsupported_1:0},{valid_but_unsupported_2:0}]}); did not throw exception.
-PASS new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:66}}); threw exception NotSupportedError: Failed to construct 'RTCPeerConnection': Unsatisfiable constraint valid_and_supported_1.
-PASS new RTCPeerConnection(null, {mandatory:{invalid:1}}); did not throw exception.
-PASS new RTCPeerConnection(null, {mandatory:{valid_but_unsupported_1:1}}); did not throw exception.
-PASS new RTCPeerConnection(null, {mandatory:{valid_but_unsupported_1:1, valid_and_supported_1:1}}); did not throw exception.
-PASS new RTCPeerConnection(null, {optional:{valid_and_supported_1:0}}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object..
-PASS new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0,valid_and_supported_2:0}]}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object..
-PASS new RTCPeerConnection(null, {optional:[{invalid:0}]}); did not throw exception.
-PASS new RTCPeerConnection(null, {valid_and_supported_1:1}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object..
-PASS new RTCPeerConnection(null, {valid_but_unsupported_1:1}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object..
-PASS new RTCPeerConnection(null, {valid_and_supported_2:1, mandatory:{valid_and_supported_1:1}}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object..
+PASS new RTCPeerConnection(null, {mandatory:{googIPv6:false}}); did not throw exception.
+PASS new RTCPeerConnection(null, {mandatory:{googIPv6:{ideal:false}}}); did not throw exception.
+PASS new RTCPeerConnection(null, {mandatory:{googIPv6:{exact:false}}}); did not throw exception.
+PASS new RTCPeerConnection(null, {mandatory:{googIPv6:{}}}); did not throw exception.
+PASS new RTCPeerConnection(null, {mandatory:{googInvalid:true}}); did not throw exception.
+PASS new RTCPeerConnection(null, {optional:[{googIPv6:false}]}); did not throw exception.
+PASS new RTCPeerConnection(null, {optional:[{googIPv6:{ideal:false}}]}); did not throw exception.
+PASS new RTCPeerConnection(null, {optional:[{googIPv6:{exact:false}}]}); did not throw exception.
+PASS new RTCPeerConnection(null, {optional:[{googIPv6:{}}]}); did not throw exception.
+PASS new RTCPeerConnection(null, {optional:[{googInvalid:true}]}); did not throw exception.
 PASS new RTCPeerConnection({iceServers:[], certificates:null}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Failed to read the 'certificates' property from 'RTCConfiguration': The provided value cannot be converted to a sequence..
 PASS new RTCPeerConnection({iceServers:[], certificates:undefined}); did not throw exception.
 PASS new RTCPeerConnection({iceServers:[], certificates:[]}); did not throw exception.
diff --git a/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
index 9988324..39965ec9 100644
--- a/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
@@ -2627,10 +2627,10 @@
     static method logoutRps
     attribute @@toStringTag
     getter iconURL
-    getter idToken
     getter name
     getter protocol
     getter provider
+    getter token
     method constructor
     method login
 interface File : Blob
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body-expected.txt
new file mode 100644
index 0000000..867b5e2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive mousewheel event listener on body assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-div-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-div-expected.txt
new file mode 100644
index 0000000..07cf21e2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-div-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive mousewheel event listener on div assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document-expected.txt
new file mode 100644
index 0000000..de8a413
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive mousewheel event listener on document assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-root-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-root-expected.txt
new file mode 100644
index 0000000..39aafa1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-root-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive mousewheel event listener on root assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window-expected.txt
new file mode 100644
index 0000000..0c62421
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive mousewheel event listener on window assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-body-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-body-expected.txt
new file mode 100644
index 0000000..25539dd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-body-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive wheel event listener on body assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-div-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-div-expected.txt
new file mode 100644
index 0000000..aa0e869
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-div-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive wheel event listener on div assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-document-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-document-expected.txt
new file mode 100644
index 0000000..33c1b82
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-document-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive wheel event listener on document assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-root-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-root-expected.txt
new file mode 100644
index 0000000..4dbaa29
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-root-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive wheel event listener on root assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-window-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-window-expected.txt
new file mode 100644
index 0000000..a90d20c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/dom/events/non-cancelable-when-passive/non-passive-wheel-event-listener-on-window-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL non-passive wheel event listener on window assert_equals: expected true but got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-with-inline-blocks.html b/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-with-inline-blocks.html
index 5233eb7..bbc9ecfe5 100644
--- a/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-with-inline-blocks.html
+++ b/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-with-inline-blocks.html
@@ -6,10 +6,9 @@
     if (window.testRunner) {
         testRunner.dumpAsText();
         testRunner.waitUntilDone();
-        testRunner.useUnfortunateSynchronousResizeMode();
     }
 
-    window.onload = function() {
+    window.onload = async function() {
         document.body.offsetTop;
         b.style.display = "inline-block";
 
@@ -17,7 +16,9 @@
         a.removeChild(c);
 
         document.body.offsetTop;
+        var resizePromise = new Promise(resolve => window.onresize = resolve);
         window.resizeTo(42, window.outerHeight);
+        await resizePromise;
 
         document.getElementById("results").innerText = "Test passes if no crash."
         if (window.testRunner) {
diff --git a/third_party/blink/web_tests/wpt_internal/task-tracking/track-settimeout.html b/third_party/blink/web_tests/wpt_internal/task-tracking/track-settimeout.html
index d02d982f..2e6861f 100644
--- a/third_party/blink/web_tests/wpt_internal/task-tracking/track-settimeout.html
+++ b/third_party/blink/web_tests/wpt_internal/task-tracking/track-settimeout.html
@@ -42,6 +42,21 @@
 }, "A microtask queued after a long setTimeout task with text input is a " +
    "descendant of the dispatching task");
 
+promise_test(async () => {
+  window.initialId = scheduler.taskId;
+  await new Promise((resolve, reject) => {
+    window.resolve = resolve;
+    window.reject = reject;
+    setTimeout(`
+     try {
+       assert_equals(scheduler.isAncestor(initialId), "ancestor");
+       resolve();
+     } catch {
+       reject("Not an ancestor");
+     }`, 100);
+  });
+}, "A long setTimeout task with text input is a descendant of the dispatching task");
+
 promise_test(() => {
   return new Promise(async (resolve, reject) => {
     const initialId = scheduler.taskId;
diff --git a/third_party/closure_compiler/externs/passwords_private.js b/third_party/closure_compiler/externs/passwords_private.js
index 32210d77..fb84329d 100644
--- a/third_party/closure_compiler/externs/passwords_private.js
+++ b/third_party/closure_compiler/externs/passwords_private.js
@@ -378,6 +378,16 @@
 chrome.passwordsPrivate.getPasswordCheckStatus = function(callback) {};
 
 /**
+ * Starts an automated password change for |credential|. Invokes |callback| on
+ * completion with a boolean parameter that signals whether the credential was
+ * changed successfully.
+ * @param {!chrome.passwordsPrivate.InsecureCredential} credential
+ * @param {function(boolean): void=} callback
+ */
+chrome.passwordsPrivate.startAutomatedPasswordChange = function(
+    credential, callback) {};
+
+/**
  * Requests whether the account store is a default location for saving
  * passwords. False means the device store is a default one. Must be called when
  * the current user has already opted-in for account storage.
diff --git a/third_party/webgpu-cts/ts_sources.txt b/third_party/webgpu-cts/ts_sources.txt
index 7042d31..432ca28 100644
--- a/third_party/webgpu-cts/ts_sources.txt
+++ b/third_party/webgpu-cts/ts_sources.txt
@@ -407,7 +407,7 @@
 src/webgpu/shader/validation/parse/var_and_let.spec.ts
 src/webgpu/shader/validation/shader_io/util.ts
 src/webgpu/shader/validation/shader_io/builtins.spec.ts
-src/webgpu/shader/validation/shader_io/entry_point.ts
+src/webgpu/shader/validation/shader_io/entry_point.spec.ts
 src/webgpu/shader/validation/shader_io/interpolate.spec.ts
 src/webgpu/shader/validation/shader_io/invariant.spec.ts
 src/webgpu/shader/validation/shader_io/locations.spec.ts
diff --git a/third_party/webrtc_overrides/BUILD.gn b/third_party/webrtc_overrides/BUILD.gn
index 438e948..f37aee7 100644
--- a/third_party/webrtc_overrides/BUILD.gn
+++ b/third_party/webrtc_overrides/BUILD.gn
@@ -89,7 +89,6 @@
   "//third_party/webrtc/pc:ice_server_parsing",
   "//third_party/webrtc/pc:libjingle_peerconnection",
   "//third_party/webrtc/pc:media_session",
-  "//third_party/webrtc/pc:peerconnection",
   "//third_party/webrtc/pc:rtc_pc",
   "//third_party/webrtc/pc:session_description",
   "//third_party/webrtc/pc:webrtc_sdp",
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f7642e2..afabee54 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -23960,6 +23960,8 @@
   <int value="12" label="Failed has copy requests"/>
   <int value="13" label="Failed video capture enabled"/>
   <int value="14" label="Failed output colorspace HDR"/>
+  <int value="15" label="Failed quad not damaged"/>
+  <int value="16" label="Failed YUV video quad moved"/>
 </enum>
 
 <enum name="DebugScenario">
@@ -34891,6 +34893,7 @@
   <int value="1677" label="AUTOTESTPRIVATE_ISINPUTMETHODREADYFORTESTING"/>
   <int value="1678" label="AUTOTESTPRIVATE_GETARCAPPKILLS"/>
   <int value="1679" label="FILEMANAGERPRIVATE_OPENMANAGESYNCSETTINGS"/>
+  <int value="1680" label="PASSWORDSPRIVATE_STARTAUTOMATEDPASSWORDCHANGE"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -57218,6 +57221,7 @@
   <int value="-787426248" label="ChromeHomeSurvey:disabled"/>
   <int value="-787238455" label="OmniboxZeroSuggestionsOnSERP:disabled"/>
   <int value="-785528415" label="FedCm:disabled"/>
+  <int value="-784584916" label="SyncEnableHistoryDataType:enabled"/>
   <int value="-784199026" label="EnableFilesAppCopyImage:enabled"/>
   <int value="-783890018" label="LacrosProfileMigrationForAnyUser:disabled"/>
   <int value="-783093620" label="WebViewHitTestInBlinkOnTouchStart:enabled"/>
@@ -60433,6 +60437,7 @@
   <int value="1311443340" label="DriveFsChromeNetworking:enabled"/>
   <int value="1311506187" label="ClipboardCustomFormats:disabled"/>
   <int value="1311579438" label="FencedFrames:enabled"/>
+  <int value="1311658248" label="SyncEnableHistoryDataType:disabled"/>
   <int value="1311860720" label="ChromeHomeNtpRedesign:disabled"/>
   <int value="1312025202" label="NTPOfflinePageSuggestions:disabled"/>
   <int value="1313476409" label="ReportFeedUserActions:disabled"/>
@@ -73850,6 +73855,12 @@
   <int value="4" label="Did nothing"/>
 </enum>
 
+<enum name="PasswordCheckScriptsCacheState">
+  <int value="0" label="Cache is fresh"/>
+  <int value="1" label="Cache is stale but no UI update is triggered"/>
+  <int value="2" label="Cache is stale and a UI update is triggered"/>
+</enum>
+
 <enum name="PasswordCheckUIUserActionAndroid">
   <int value="0" label="Start check automatically"/>
   <int value="1" label="Start check manually"/>
@@ -86336,9 +86347,14 @@
   <int value="5" label="PS disabled, block all cookies"/>
   <int value="6" label="PS disabled, policy block 3P cookies"/>
   <int value="7" label="PS disabled, policy block all cookies"/>
-  <int value="8" label="PS enabled, FLoC disabled, allow all cookies"/>
-  <int value="9" label="PS enabled, FLoC disabled, block 3P cookies"/>
-  <int value="10" label="PS enabled, FLoC disabled, block all cookies"/>
+  <int value="8"
+      label="PS enabled, FLoC disabled, allow all cookies (deprecated
+             07/2022)"/>
+  <int value="9"
+      label="PS enabled, FLoC disabled, block 3P cookies (deprecated 07/2022)"/>
+  <int value="10"
+      label="PS enabled, FLoC disabled, block all cookies (deprecated
+             07/2022)"/>
 </enum>
 
 <enum name="SettingsPrivacySandboxStartupStates">
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index c59626661..f031c73 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -866,7 +866,7 @@
   <owner>yigu@chromium.org</owner>
   <owner>fedcm-core@google.com</owner>
   <summary>
-    Records the status of a request id token call to the FedCM API.
+    Records the status of a request token call to the FedCM API.
   </summary>
 </histogram>
 
@@ -908,8 +908,8 @@
   <owner>fedcm-core@google.com</owner>
   <summary>
     Records the time from when the user presses the Continue button to when the
-    idtoken response is received. Only records a sample when the idtoken
-    response is received.
+    token response is received. Only records a sample when the token response is
+    received.
   </summary>
 </histogram>
 
@@ -928,8 +928,8 @@
   <owner>yigu@chromium.org</owner>
   <owner>fedcm-core@google.com</owner>
   <summary>
-    Records the overall time from when the API is called to when the idtoken
-    response is received. Only records a sample when the idtoken response is
+    Records the overall time from when the API is called to when the token
+    response is received. Only records a sample when the token response is
     received.
   </summary>
 </histogram>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
index 06b142d..2bafaa6 100644
--- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -1365,12 +1365,8 @@
   <suffix name="Same" label="Same priority for both trees."/>
   <suffix name="Smoothness" label="Smoothness takes priority."/>
   <affected-histogram
-      name="Scheduling.Browser.CommitToReadyToActivateDuration2"/>
-  <affected-histogram
       name="Scheduling.Browser.InvalidationToReadyToActivateDuration2"/>
   <affected-histogram
-      name="Scheduling.Renderer.CommitToReadyToActivateDuration2"/>
-  <affected-histogram
       name="Scheduling.Renderer.InvalidationToReadyToActivateDuration2"/>
 </histogram_suffixes>
 
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index 21f113a..15a1ba9 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -1062,6 +1062,17 @@
   </summary>
 </histogram>
 
+<histogram name="PasswordManager.BulkCheck.ScriptsCacheState"
+    enum="PasswordCheckScriptsCacheState" expires_after="2023-07-04">
+  <owner>brunobraga@google.com</owner>
+  <owner>jkeitel@google.com</owner>
+  <summary>
+    The state of the scripts cache for automatic password changed that is
+    encountered on opening the password check subpage on Desktop and the UI
+    reaction to it.
+  </summary>
+</histogram>
+
 <histogram name="PasswordManager.BulkCheck.Time" units="ms"
     expires_after="2023-01-01">
   <owner>vasilii@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml
index 9a37488..2b4f064 100644
--- a/tools/metrics/histograms/metadata/v8/histograms.xml
+++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -1467,9 +1467,9 @@
 </histogram>
 
 <histogram name="V8.TurboFan1KTicks" units="1000 ticks"
-    expires_after="2020-01-23">
+    expires_after="2023-06-30">
   <owner>tebbi@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Number of ticks (in 1000s of ticks) from starting optimizing to installing
     the code object. Recorded on each regular optimization of a function.
@@ -1481,8 +1481,8 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeConcurrentTotalTime" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>bmeurer@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
   <owner>mslekova@chromium.org</owner>
   <summary>
     Total time from starting optimizing to installing the code object. Recorded
@@ -1493,9 +1493,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeExecute" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Time spent in the execution phase of TurboFan optimization. Recorded on each
     regular optimization of a function.
@@ -1505,9 +1505,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeFinalize" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Time spent in the finalization phase of TurboFan optimization. Recorded on
     each regular optimization of a function.
@@ -1517,9 +1517,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeForOnStackReplacementExecute"
-    units="microseconds" expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    units="microseconds" expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Time spent in the execution phase of TurboFan optimization for On Stack
     Replacement (OSR). Recorded on each optimization for on-stack replacement of
@@ -1530,9 +1530,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeForOnStackReplacementFinalize"
-    units="microseconds" expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    units="microseconds" expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Time spent in the finalization phase of TurboFan optimization for On Stack
     Replacement (OSR). Recorded on each optimization for on-stack replacement of
@@ -1543,9 +1543,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeForOnStackReplacementPrepare"
-    units="microseconds" expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    units="microseconds" expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Time spent in the preparation phase of TurboFan optimization for On Stack
     Replacement (OSR). Recorded on each optimization for on-stack replacement of
@@ -1556,9 +1556,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeForOnStackReplacementTotalTime"
-    units="microseconds" expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    units="microseconds" expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Total time from starting optimizing for On Stack Replacement (OSR) to
     installing the code object. Recorded on each optimization for on-stack
@@ -1569,9 +1569,8 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeNonConcurrentTotalTime"
-    units="microseconds" expires_after="2022-08-07">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    units="microseconds" expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
   <owner>mslekova@chromium.org</owner>
   <summary>
     Total time from starting optimizing to installing the code object. Recorded
@@ -1582,9 +1581,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizePrepare" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Time spent in the preparation phase of TurboFan optimization. Recorded on
     each regular optimization of a function.
@@ -1594,9 +1593,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeTotalBackground" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Total time spent on a background thread during TurboFan optimization.
     Recorded on each regular optimization of a function.
@@ -1606,9 +1605,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeTotalForeground" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Total time spent on the main thread during TurboFan optimization. Recorded
     on each regular optimization of a function.
@@ -1618,9 +1617,9 @@
 </histogram>
 
 <histogram name="V8.TurboFanOptimizeTotalTime" units="microseconds"
-    expires_after="2022-12-11">
-  <owner>neis@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+    expires_after="2023-06-30">
+  <owner>tebbi@chromium.org</owner>
+  <owner>mslekova@chromium.org</owner>
   <summary>
     Total time from starting optimizing to installing the code object. Recorded
     on each regular optimization of a function.
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 78a33938..524dcca 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": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "8f54baebd8c6f45dad0af18f35449b6532b05bd7",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/80dd4d929a592772a530e67c30d9f76bb63f5219/trace_processor_shell.exe"
+            "hash": "b079db252b8dd239324cc0724c21b72d72fe7775",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/b6fc104b800da83157d1e45eb87f94efe82f0022/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893",
@@ -21,8 +21,8 @@
             "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "96a6d55536fe9e1c00ed537e551094fe03fd93ab",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/80dd4d929a592772a530e67c30d9f76bb63f5219/trace_processor_shell"
+            "hash": "922ada21ed15c13ca9d48eecf738da8d9f9812bb",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/d94e4dc359a4d002a2fbf4bd11d22b7ecd1b2466/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/typescript/definitions/passwords_private.d.ts b/tools/typescript/definitions/passwords_private.d.ts
index 9fc015cd..7baaeb4d 100644
--- a/tools/typescript/definitions/passwords_private.d.ts
+++ b/tools/typescript/definitions/passwords_private.d.ts
@@ -157,6 +157,9 @@
       export function stopPasswordCheck(callback?: () => void): void;
       export function getPasswordCheckStatus(
           callback: (status: PasswordCheckStatus) => void): void;
+      export function startAutomatedPasswordChange(
+          credential: InsecureCredential,
+          callback?: (success: boolean) => void): void;
       export function isAccountStoreDefault(
           callback: (isDefault: boolean) => void): void;
       export function getUrlCollection(
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
index 846fa76..db2ccbf 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">Engels (VSA) met Programmer Dvorak-sleutelbord</translation>
 <translation id="1134697384939541955">Engels (VSA) met uitgebreide sleutelbord</translation>
+<translation id="1138691154716715755">Vroeër vandeesmaand</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> gevind.
     <ph name="LINE_BREAK1" />
     Nie genoeg plek in plaaslike berging beskikbaar nie. Benodig nog <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Netwerk <ph name="NETWORK_INDEX" /> van <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, seinsterkte <ph name="SIGNAL_STRENGTH" />%, bestuur deur jou administrateur, besonderhede</translation>
 <translation id="4387004326333427325">Stawingsertifikaat oor 'n afstand verwerp</translation>
 <translation id="4394214039309501350">Eksterne skakel</translation>
+<translation id="4394980935660306080">Vroeër vandeesweek</translation>
 <translation id="4401287888955153199">Ekstraheer alles</translation>
 <translation id="4410695710508688828">Kon nie onttrek nie. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Skep 'n kortpad vir jou lêers</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Maak tans "<ph name="PATH" />" oop</translation>
 <translation id="4720185134442950733">Mobiele datanetwerk</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> foto's is gerugsteun</translation>
+<translation id="4725096204469550614">Vroeër vanjaar</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Besig om te land</translation>
 <translation id="4747271164117300400">Macedonies</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index 23be0ec6..e60cc91d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">হাঙ্গুল রোমাজা</translation>
 <translation id="112387589102719461">ইংরেজি (মার্কিন যুক্তরাষ্ট্র) ভাষায় প্রোগ্রামার Dvorak কীবোর্ড</translation>
 <translation id="1134697384939541955">ইংরেজি (মার্কিন যুক্তরাষ্ট্র) ভাষায় বর্ধিত কীবোর্ড</translation>
+<translation id="1138691154716715755">এই মাসের শুরুর দিকে</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" />টি পাওয়া গেছে।
     <ph name="LINE_BREAK1" />
     আপনার স্থানীয় স্টোরেজে পর্যাপ্ত জায়গা নেই। আরও <ph name="FILE_SIZE" /> প্রয়োজন।
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032"><ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" /> সিগন্যাল ক্ষমতা <ph name="SIGNAL_STRENGTH" />%, আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে, বিবরণ</translation>
 <translation id="4387004326333427325">দূরবর্তী লোকেশন থেকে প্রমাণীকরণ সার্টিফিকেট প্রত্যাখ্যান করা হয়েছে</translation>
 <translation id="4394214039309501350">এক্সটার্নাল লিঙ্ক</translation>
+<translation id="4394980935660306080">এই সপ্তাহের শুরুর দিকে</translation>
 <translation id="4401287888955153199">জিপ ফাইল থেকে সব কন্টেন্ট এক্সট্র্যাক্ট করুন</translation>
 <translation id="4410695710508688828">এক্সট্র্যাক্ট করা যায়নি। <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">আপনার ফাইলের একটি শর্টকাট তৈরি করুন</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">"<ph name="PATH" />" খোলা হচ্ছে</translation>
 <translation id="4720185134442950733">মোবাইল ডেটা নেটওয়ার্ক</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" />টি ফটোর ব্যাকআপ নেওয়া হয়েছে</translation>
+<translation id="4725096204469550614">এই বছরের শুরুর দিকে</translation>
 <translation id="4725511304875193254">কর্গি কুকুর</translation>
 <translation id="4737050008115666127">ল্যান্ডিং</translation>
 <translation id="4747271164117300400">ম্যাসিডোনীয়</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
index d9a84d2..4e53ee1b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">engleski (SAD) s Dvorak tastaturom za programere</translation>
 <translation id="1134697384939541955">engleski (SAD) s proširenom tastaturom</translation>
+<translation id="1138691154716715755">Ranije ovog mjeseca</translation>
 <translation id="1148097584170732637">Br. pronađenih fajlova: <ph name="FILE_COUNT" />
     <ph name="LINE_BREAK1" />
     U lokalnoj pohrani nema dovoljno slobodnog prostora. Potrebno je dodatnih <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Mreža <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja vaš administrator, detalji</translation>
 <translation id="4387004326333427325">Potvrda za autentifikaciju je daljinski odbijena</translation>
 <translation id="4394214039309501350">Vanjski link</translation>
+<translation id="4394980935660306080">Ranije ove sedmice</translation>
 <translation id="4401287888955153199">Izdvoji sve</translation>
 <translation id="4410695710508688828">Izdvajanje nije uspjelo. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Kreirajte prečicu za svoje fajlove</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Otvaranje putanje "<ph name="PATH" />"</translation>
 <translation id="4720185134442950733">Prijenos podataka na mobilnoj mreži</translation>
 <translation id="4724850507808590449">Napravljena je sigurnosna kopija za sljedeći broj fotografija: <ph name="FILE_COUNT" /></translation>
+<translation id="4725096204469550614">Ranije ove godine</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Slijetanje</translation>
 <translation id="4747271164117300400">Makedonska</translation>
@@ -470,6 +473,7 @@
 <translation id="508423945471810158">Premještanje stavki (njih <ph name="NUMBER_OF_ITEMS" />) u folder <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Došlo je do greške.</translation>
 <translation id="5098629044894065541">Hebrejska</translation>
+<translation id="5102922915594634436">Upravljanje sinkroniziranim mapama</translation>
 <translation id="5109254780565519649">Došlo je do greške. Neke stavke možda nisu vraćene.</translation>
 <translation id="5110329002213341433">engleski (Kanada)</translation>
 <translation id="5123433949759960244">Košarka</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
index 26b5fb55..edf65ed92 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">angličtina (USA) s klávesnicí Programmer Dvorak</translation>
 <translation id="1134697384939541955">angličtina (USA) s rozšířenou klávesnicí</translation>
+<translation id="1138691154716715755">Dříve tento měsíc</translation>
 <translation id="1148097584170732637">Nalezeno: <ph name="FILE_COUNT" />.
     <ph name="LINE_BREAK1" />
     V místním úložišti není dost místa, chybí <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Síť <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" /> síla signálu: <ph name="SIGNAL_STRENGTH" /> %, spravováno administrátorem, podrobnosti</translation>
 <translation id="4387004326333427325">Ověřovací certifikát byl vzdáleně odmítnut</translation>
 <translation id="4394214039309501350">Externí odkaz</translation>
+<translation id="4394980935660306080">Dříve tento týden</translation>
 <translation id="4401287888955153199">Extrahovat vše</translation>
 <translation id="4410695710508688828">Extrakce se nezdařila. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Vytvořte zástupce svých souborů</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Otevírání souboru „<ph name="PATH" />“</translation>
 <translation id="4720185134442950733">Mobilní datová síť</translation>
 <translation id="4724850507808590449">Počet zálohovaných fotek: <ph name="FILE_COUNT" /></translation>
+<translation id="4725096204469550614">Dříve tento rok</translation>
 <translation id="4725511304875193254">Pes corgi</translation>
 <translation id="4737050008115666127">Přistání</translation>
 <translation id="4747271164117300400">makedonština</translation>
@@ -470,6 +473,7 @@
 <translation id="508423945471810158">Přesouvání <ph name="NUMBER_OF_ITEMS" /> položek do složky <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Došlo k chybě.</translation>
 <translation id="5098629044894065541">hebrejština</translation>
+<translation id="5102922915594634436">Spravovat synchronizované složky</translation>
 <translation id="5109254780565519649">Došlo k chybě. Některé položky možná nebyly obnoveny.</translation>
 <translation id="5110329002213341433">angličtina (Kanada)</translation>
 <translation id="5123433949759960244">Basketbal</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index dfd141c5..1a308c1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">Engelsk (USA) med Dvorak-programmeringstastatur</translation>
 <translation id="1134697384939541955">Engelsk (USA) med udvidet tastatur</translation>
+<translation id="1138691154716715755">Tidligere i denne måned</translation>
 <translation id="1148097584170732637">Der blev fundet <ph name="FILE_COUNT" />.
     <ph name="LINE_BREAK1" />
     Der er ikke nok tilgængelig plads på det lokale lager. Der er brug for <ph name="FILE_SIZE" /> mere.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Netværk <ph name="NETWORK_INDEX" /> af <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, signalstyrke <ph name="SIGNAL_STRENGTH" /> %, administreret af din administrator, info</translation>
 <translation id="4387004326333427325">Godkendelsescertifikatet blev afvist eksternt</translation>
 <translation id="4394214039309501350">Eksternt link</translation>
+<translation id="4394980935660306080">Tidligere i denne uge</translation>
 <translation id="4401287888955153199">Pak alt ud</translation>
 <translation id="4410695710508688828">Udpakningshandling mislykkedes. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Opret en genvej til dine filer</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Åbner "<ph name="PATH" />"</translation>
 <translation id="4720185134442950733">Mobildatanetværk</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> billeder blev sikkerhedskopieret</translation>
+<translation id="4725096204469550614">Tidligere i år</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Landingsbane</translation>
 <translation id="4747271164117300400">Makedonisk</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
index 24f582f..0a92089a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Χανγκίλ Romaja</translation>
 <translation id="112387589102719461">Αγγλικά (ΗΠΑ) με πληκτρολόγιο Programmer Dvorak</translation>
 <translation id="1134697384939541955">Αγγλικά (ΗΠΑ) με εκτεταμένο πληκτρολόγιο</translation>
+<translation id="1138691154716715755">Νωρίτερα αυτόν το μήνα</translation>
 <translation id="1148097584170732637">Βρέθηκαν <ph name="FILE_COUNT" /> αρχεία.
     <ph name="LINE_BREAK1" />
     Δεν υπάρχει αρκετός διαθέσιμος χώρος στον τοπικό αποθηκευτικό χώρο. Απαιτούνται επιπλέον <ph name="FILE_SIZE" />.
@@ -386,6 +387,7 @@
 <translation id="4380245540200674032">Δίκτυο <ph name="NETWORK_INDEX" /> από <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, Ισχύς σήματος <ph name="SIGNAL_STRENGTH" />%, Διαχειριζόμενο από τον διαχειριστή σας, Λεπτομέρειες</translation>
 <translation id="4387004326333427325">Το πιστοποιητικό ελέγχου ταυτότητας απορρίφθηκε απομακρυσμένα</translation>
 <translation id="4394214039309501350">Εξωτερικός σύνδεσμος</translation>
+<translation id="4394980935660306080">Νωρίτερα αυτήν την εβδομάδα</translation>
 <translation id="4401287888955153199">Εξαγωγή όλων</translation>
 <translation id="4410695710508688828">Η λειτουργία εξαγωγής απέτυχε. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Δημιουργήστε μια συντόμευση για τα αρχεία σας</translation>
@@ -430,6 +432,7 @@
 <translation id="4712283082407695269">Άνοιγμα "<ph name="PATH" />"</translation>
 <translation id="4720185134442950733">Δίκτυο δεδομένων κινητής τηλεφωνίας</translation>
 <translation id="4724850507808590449">Δημιουργήθηκαν αντίγραφα ασφαλείας για <ph name="FILE_COUNT" /> φωτογραφίες</translation>
+<translation id="4725096204469550614">Νωρίτερα φέτος</translation>
 <translation id="4725511304875193254">Κόργκι</translation>
 <translation id="4737050008115666127">Προσγείωση</translation>
 <translation id="4747271164117300400">Σλαβομακεδονικά</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
index 6910888..58401f4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -473,6 +473,7 @@
 <translation id="508423945471810158">Moving <ph name="NUMBER_OF_ITEMS" /> items to <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">An error occurred.</translation>
 <translation id="5098629044894065541">Hebrew</translation>
+<translation id="5102922915594634436">Manage synced folders</translation>
 <translation id="5109254780565519649">An error occurred. Some items may not have been restored.</translation>
 <translation id="5110329002213341433">English (Canada)</translation>
 <translation id="5123433949759960244">Basketball</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
index 880b227..7def94a4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -470,6 +470,7 @@
 <translation id="508423945471810158">Moviendo <ph name="NUMBER_OF_ITEMS" /> elementos a <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Se ha producido un error.</translation>
 <translation id="5098629044894065541">Hebreo</translation>
+<translation id="5102922915594634436">Gestionar carpetas sincronizadas</translation>
 <translation id="5109254780565519649">Se ha producido un error. Es posible que no se hayan restaurado algunos elementos.</translation>
 <translation id="5110329002213341433">Inglés (Canadá)</translation>
 <translation id="5123433949759960244">Balón de baloncesto</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index 22ad7d1..88b0333 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">هانگول روماجا</translation>
 <translation id="112387589102719461">‏انگلیسی (آمریکایی) با صفحه‌کلید «برنامه‌نویس Dvorak»</translation>
 <translation id="1134697384939541955">انگلیسی (آمریکایی) با صفحه‌کلید گسترده</translation>
+<translation id="1138691154716715755">اوایل این ماه</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> مورد پیدا شد.
     <ph name="LINE_BREAK1" />
     در حافظه محلی فضای کافی در دسترس نیست. <ph name="FILE_SIZE" /> فضای اضافی لازم است.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">شبکه <ph name="NETWORK_INDEX" /> از <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="NETWORK_PROVIDER_NAME" />، <ph name="CONNECTION_STATUS" />، قدرت سیگنال <ph name="SIGNAL_STRENGTH" />٪، تحت‌مدیریت سرپرست، جزئیات</translation>
 <translation id="4387004326333427325">گواهینامه راستی‌آزمایی، ازراه‌دور، رد شد</translation>
 <translation id="4394214039309501350">پیوند خارجی</translation>
+<translation id="4394980935660306080">اوایل این هفته</translation>
 <translation id="4401287888955153199">استخراج همه</translation>
 <translation id="4410695710508688828">عملیات استخراج انجام نشد. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">ایجاد میان‌بر برای فایل‌ها</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">درحال باز کردن «<ph name="PATH" />»</translation>
 <translation id="4720185134442950733">شبکه داده تلفن همراه</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> عکس پشتیبان گرفته شدند</translation>
+<translation id="4725096204469550614">اوایل امسال</translation>
 <translation id="4725511304875193254">کورگی</translation>
 <translation id="4737050008115666127">فرود</translation>
 <translation id="4747271164117300400">مقدونی</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
index 3f46001..c8a362c9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">English (US) na may Programmer Dvorak keyboard</translation>
 <translation id="1134697384939541955">English (US) na may Extended keyboard</translation>
+<translation id="1138691154716715755">Sa unang bahagi ng buwang ito</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> ang nakita.
     <ph name="LINE_BREAK1" />
     Walang available na sapat na espasyo sa lokal na storage. Kailangan ng karagdagang <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Network <ph name="NETWORK_INDEX" /> sa <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, Lakas ng Signal <ph name="SIGNAL_STRENGTH" />%, Pinapamahalaan ng iyong Administrator, Mga Detalye</translation>
 <translation id="4387004326333427325">Remote na tinanggihan ang certificate sa pagpapatunay</translation>
 <translation id="4394214039309501350">External na link</translation>
+<translation id="4394980935660306080">Sa unang bahagi ng linggong ito</translation>
 <translation id="4401287888955153199">I-extract lahat</translation>
 <translation id="4410695710508688828">Hindi naisagawa ang operasyon sa pag-extract. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Gumawa ng shortcut para sa iyong mga file</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Binubuksan ang "<ph name="PATH" />"</translation>
 <translation id="4720185134442950733">Network ng mobile data</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> (na) larawan ang na-back up</translation>
+<translation id="4725096204469550614">Sa unang bahagi ng taong ito</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Landing</translation>
 <translation id="4747271164117300400">Macedonian</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index abc700f7..89a8c1d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -470,6 +470,7 @@
 <translation id="508423945471810158"><ph name="NUMBER_OF_ITEMS" /> आइटम <ph name="FOLDER_NAME" /> में ट्रांसफ़र हो रहे हैं</translation>
 <translation id="509429900233858213">कोई गड़बड़ी हुई.</translation>
 <translation id="5098629044894065541">हिब्रू</translation>
+<translation id="5102922915594634436">सिंक किए गए फ़ोल्डर मैनेज करें</translation>
 <translation id="5109254780565519649">कोई गड़बड़ी हुई. हो सकता है कि कुछ आइटम वापस न लाए जा सके हों.</translation>
 <translation id="5110329002213341433">अंग्रेज़ी (कनाडा)</translation>
 <translation id="5123433949759960244">बास्केटबॉल</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index 99aafa4..aca9b37 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -470,6 +470,7 @@
 <translation id="508423945471810158">Premještanje stavki (<ph name="NUMBER_OF_ITEMS" />) u mapu <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Došlo je do pogreške.</translation>
 <translation id="5098629044894065541">Hebrejski</translation>
+<translation id="5102922915594634436">Upravljanje sinkroniziranim mapama</translation>
 <translation id="5109254780565519649">Došlo je do pogreške. Neke stavke možda nisu vraćene.</translation>
 <translation id="5110329002213341433">engleski (Kanada)</translation>
 <translation id="5123433949759960244">Košarka</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
index a4d0d112..7c9c6311a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -473,6 +473,7 @@
 <translation id="508423945471810158">កំពុងផ្លាស់ទីធាតុ <ph name="NUMBER_OF_ITEMS" /> ទៅ <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">កំហុសឆ្គងបានកើតឡើង។</translation>
 <translation id="5098629044894065541">ភាសាហ៊ីប៊្រូ</translation>
+<translation id="5102922915594634436">គ្រប់គ្រង​ថត​ដែលបានធ្វើសមកាលកម្ម</translation>
 <translation id="5109254780565519649">មានបញ្ហា​បាន​កើត​ឡើង។ ធាតុមួយចំនួន​អាចនឹងមិនត្រូវបានស្ដារទេ។</translation>
 <translation id="5110329002213341433">ភាសា​អង់គ្លេស (កាណាដា)</translation>
 <translation id="5123433949759960244">​បាល់បោះ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
index f150c17..b2a1d7b2 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Хангул Ромажа</translation>
 <translation id="112387589102719461">Англисче (АКШ) жана программачылар үчүн Dvorak баскычтобу</translation>
 <translation id="1134697384939541955">Англисче (АКШ) жана кеңейтилген баскычтоп</translation>
+<translation id="1138691154716715755">Мурунураак, ушул айда</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> табылды.
     <ph name="LINE_BREAK1" />
     Түзмөктүн сактагычында жетиштүү орун жок. Кошумча <ph name="FILE_SIZE" /> керек.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032"><ph name="NETWORK_COUNT" /> ичинен <ph name="NETWORK_INDEX" />-тармак, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, сигналдын күчү <ph name="SIGNAL_STRENGTH" />%, администраторуңуз башкарат, чоо-жайы</translation>
 <translation id="4387004326333427325">Аныктыгын текшерүү тастыктамасы алыстан четке кагылды</translation>
 <translation id="4394214039309501350">Тышкы шилтеме</translation>
+<translation id="4394980935660306080">Мурунураак, ушул аптада</translation>
 <translation id="4401287888955153199">Баарын чыгаруу</translation>
 <translation id="4410695710508688828">Чыгаруу операциясы ишке ашкан жок. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Файлдарга өтүү үчүн ыкчам баскычты түзүү</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">"<ph name="PATH" />" ачылууда</translation>
 <translation id="4720185134442950733">Мобилдик Интернет тармагы</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> сүрөттүн камдык көчүрмөсү сакталды</translation>
+<translation id="4725096204469550614">Мурунураак, ушул жылы</translation>
 <translation id="4725511304875193254">Корги</translation>
 <translation id="4737050008115666127">Конуу</translation>
 <translation id="4747271164117300400">Македонияча</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
index 6d1a5dcc7..8ca8bdfa 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">хангул, ромаџа</translation>
 <translation id="112387589102719461">англиски (САД) со програмерска тастатура Dvorak</translation>
 <translation id="1134697384939541955">англиски (САД) со проширена тастатура</translation>
+<translation id="1138691154716715755">Претходно овој месец</translation>
 <translation id="1148097584170732637">Најдени се <ph name="FILE_COUNT" />.
     <ph name="LINE_BREAK1" />
     Нема доволно слободен простор во локалната меморија. Потребни се дополнителни <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Мрежа <ph name="NETWORK_INDEX" /> од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, јачина на сигналот: <ph name="SIGNAL_STRENGTH" /> %, управувана од администраторот, детали</translation>
 <translation id="4387004326333427325">Одбиена далечинска автентикација на сертификат</translation>
 <translation id="4394214039309501350">Надворешен линк</translation>
+<translation id="4394980935660306080">Претходно оваа седмица</translation>
 <translation id="4401287888955153199">Отпакувај сѐ</translation>
 <translation id="4410695710508688828">Не успеа отпакувањето. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Создајте кратенка за вашите датотеки</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Се отвора „<ph name="PATH" />“</translation>
 <translation id="4720185134442950733">Мобилна мрежа на податоци</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> фотографии се ископирани</translation>
+<translation id="4725096204469550614">Претходно оваа година</translation>
 <translation id="4725511304875193254">Корги</translation>
 <translation id="4737050008115666127">Слетување</translation>
 <translation id="4747271164117300400">македонски</translation>
@@ -470,6 +473,7 @@
 <translation id="508423945471810158">Се преместуваат <ph name="NUMBER_OF_ITEMS" /> ставки во <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Настана грешка.</translation>
 <translation id="5098629044894065541">хебрејски</translation>
+<translation id="5102922915594634436">Управувајте со синхронизирани папки</translation>
 <translation id="5109254780565519649">Грешка. Некои ставки можеби не се вратени.</translation>
 <translation id="5110329002213341433">англиски (Канада)</translation>
 <translation id="5123433949759960244">Баскет</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
index ab1810f4..d175e27 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Хангыль Ромажа</translation>
 <translation id="112387589102719461">Programmer Dvorak гартай англи (АНУ)</translation>
 <translation id="1134697384939541955">Өргөтгөсөн гартай англи (АНУ)</translation>
+<translation id="1138691154716715755">Энэ сарын эхээр</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> олдсон.
     <ph name="LINE_BREAK1" />
     Дотоод санд хангалтай багтаамж алга. Нэмэлт <ph name="FILE_SIZE" /> шаардлагатай.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Сүлжээ <ph name="NETWORK_COUNT" />-н <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, дохионы хүч <ph name="SIGNAL_STRENGTH" />%, таны администратор удирддаг, дэлгэрэнгүй мэдээлэл</translation>
 <translation id="4387004326333427325">Баталгаажуулах сертификатыг алсаас цуцалсан байна.</translation>
 <translation id="4394214039309501350">Гадаад холбоос</translation>
+<translation id="4394980935660306080">Энэ долоо хоногийн эхээр</translation>
 <translation id="4401287888955153199">Бүгдийг задлах</translation>
 <translation id="4410695710508688828">Задлах үйл ажиллагаа амжилтгүй боллоо. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Файлууддаа товчлол үүсгэх</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">"<ph name="PATH" />"-г нээж байна</translation>
 <translation id="4720185134442950733">Мобайл дата сүлжээ</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> зураг хадгалагдсан байна</translation>
+<translation id="4725096204469550614">Энэ жилийн эхээр</translation>
 <translation id="4725511304875193254">Корги нохой</translation>
 <translation id="4737050008115666127">Газардах</translation>
 <translation id="4747271164117300400">Македон</translation>
@@ -470,6 +473,7 @@
 <translation id="508423945471810158"><ph name="NUMBER_OF_ITEMS" /> зүйлийг <ph name="FOLDER_NAME" /> руу зөөж байна</translation>
 <translation id="509429900233858213">Алдаа гарлаа.</translation>
 <translation id="5098629044894065541">Кипр</translation>
+<translation id="5102922915594634436">Синк хийсэн фолдерийг удирдах</translation>
 <translation id="5109254780565519649">Алдаа гарлаа. Зарим зүйлийг сэргээгээгүй байж болзошгүй.</translation>
 <translation id="5110329002213341433">Англи (Канад)</translation>
 <translation id="5123433949759960244">Сагсан бөмбөг</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
index f8890df1..01146ad9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">ဟံဂူလ် Romaja</translation>
 <translation id="112387589102719461">ပရိုဂရမ်မာ Dvorak ကီးဘုတ်ဖြင့် အင်္ဂလိပ် (ယူအက်စ်)</translation>
 <translation id="1134697384939541955">နောက်ဆက်တွဲကီးဘုတ်ဖြင့် အင်္ဂလိပ် (ယူအက်စ်)</translation>
+<translation id="1138691154716715755">ဤလ အစောပိုင်း</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> တွေ့ပါသည်။
     <ph name="LINE_BREAK1" />
     စက်အတွင်း သိုလှောင်မှုတွင် နေရာမလုံလောက်ပါ။ နောက်ထပ် <ph name="FILE_SIZE" /> လိုအပ်ပါသည်။
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">ကွန်ရက် <ph name="NETWORK_COUNT" /> ခုအနက်မှ <ph name="NETWORK_INDEX" />၊ <ph name="NETWORK_NAME" />၊ <ph name="NETWORK_PROVIDER_NAME" />၊ <ph name="CONNECTION_STATUS" />၊ လိုင်းဆွဲအား <ph name="SIGNAL_STRENGTH" />%၊ သင့် 'ကြီးကြပ်သူ' က စီမံသည်၊ အသေးစိတ်</translation>
 <translation id="4387004326333427325">အထောက်အထား စိစစ်ရေး လက်မှတ်ကို အဝေးမှ ငြင်းပယ်ခဲ့သည်။</translation>
 <translation id="4394214039309501350">ပြင်ပလင့်ခ်</translation>
+<translation id="4394980935660306080">ဤရက်သတ္တပတ် အစောပိုင်း</translation>
 <translation id="4401287888955153199">အားလုံးထုတ်ယူရန်</translation>
 <translation id="4410695710508688828">ထုတ်ယူ၍ မရပါ။ <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">သင့်ဖိုင်များအတွက် ဖြတ်လမ်းလင့်ခ် ပြုလုပ်ပါ</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">"<ph name="PATH" />" ကို ဖွင့်နေသည်</translation>
 <translation id="4720185134442950733">မိုဘိုင်းဒေတာကွန်ရက်</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> ဓာတ်ပုံများ အရံသိမ်းဆည်းပြီးပါပြီ</translation>
+<translation id="4725096204469550614">ဤနှစ် အစောပိုင်း</translation>
 <translation id="4725511304875193254">ခွေးငယ်လေး</translation>
 <translation id="4737050008115666127">ဆင်းသက်ခြင်း</translation>
 <translation id="4747271164117300400">မက်ဆီဒိုးနီးယန်း</translation>
@@ -470,6 +473,7 @@
 <translation id="508423945471810158"><ph name="NUMBER_OF_ITEMS" /> ခုကို <ph name="FOLDER_NAME" /> သို့ ရွှေ့နေသည်</translation>
 <translation id="509429900233858213">အမှား တစ်ခု ကြုံခဲ့ရသည်။</translation>
 <translation id="5098629044894065541">ဟီဘရူး</translation>
+<translation id="5102922915594634436">စင့်ခ်လုပ်ထားသောဖိုင်တွဲများ စီမံရန်</translation>
 <translation id="5109254780565519649">အမှား ဖြစ်သွားသည်။ အချို့အရာများကို ပြန်ယူ၍မရနိုင်ပါ။</translation>
 <translation id="5110329002213341433">အင်္ဂလိပ် (ကနေဒါ)</translation>
 <translation id="5123433949759960244">ဘတ်စကက်ဘော</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index c2b72ec..f04782b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">Engelsk (USA) med Dvorak-programmeringstastatur</translation>
 <translation id="1134697384939541955">Engelsk (USA) med utvidet tastatur</translation>
+<translation id="1138691154716715755">Tidligere denne måneden</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> ble funnet.
     <ph name="LINE_BREAK1" />
     Utilstrekkelig plass i lokal lagring. Du trenger <ph name="FILE_SIZE" /> til.
@@ -341,6 +342,7 @@
 <translation id="3971140002794351170">Last ned mobilprofilen, nettverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" /></translation>
 <translation id="3973925058222872294">Engelsk (Storbritannia)</translation>
 <translation id="3975895378829046965">Bengali, fonetisk</translation>
+<translation id="3991446849494482687">Dette deaktiverer også SIM-låsinnstillingen på enheten.</translation>
 <translation id="4002066346123236978">Tittel</translation>
 <translation id="4017788180641807848">Engelsk (USA) med Workman-tastatur</translation>
 <translation id="4040753847560036377">Feil PUK-kode.</translation>
@@ -377,6 +379,7 @@
 <translation id="4380245540200674032">Nettverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" /> – <ph name="NETWORK_NAME" /> – <ph name="NETWORK_PROVIDER_NAME" /> – <ph name="CONNECTION_STATUS" /> – signalstyrke <ph name="SIGNAL_STRENGTH" /> % – administreres av administratoren din – detaljer</translation>
 <translation id="4387004326333427325">Autentiseringssertifikatet ble avvist eksternt</translation>
 <translation id="4394214039309501350">Ekstern link</translation>
+<translation id="4394980935660306080">Tidligere denne uken</translation>
 <translation id="4401287888955153199">Pakk ut alt</translation>
 <translation id="4410695710508688828">Utpakkingsoperasjonen mislyktes. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Opprett en snarvei til filene dine</translation>
@@ -420,6 +423,7 @@
 <translation id="4712283082407695269">Åpner «<ph name="PATH" />»</translation>
 <translation id="4720185134442950733">Mobildatanettverk</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> bilder ble sikkerhetskopiert</translation>
+<translation id="4725096204469550614">Tidligere i år</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Landing</translation>
 <translation id="4747271164117300400">Makedonsk</translation>
@@ -469,6 +473,7 @@
 <translation id="508423945471810158">Flytter <ph name="NUMBER_OF_ITEMS" /> elementer til <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Det oppsto en feil.</translation>
 <translation id="5098629044894065541">Hebraisk</translation>
+<translation id="5102922915594634436">Administrer synkroniserte mapper</translation>
 <translation id="5109254780565519649">Det oppsto en feil. Noen elementer er kanskje ikke gjenopprettet.</translation>
 <translation id="5110329002213341433">Engelsk (Canada)</translation>
 <translation id="5123433949759960244">Basketball</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index cfb1cd22..7338a59 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">Inglês (EUA) com teclado Dvorak de programador</translation>
 <translation id="1134697384939541955">Inglês (EUA) com teclado alargado</translation>
+<translation id="1138691154716715755">No início deste mês</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> encontrada(s).
     <ph name="LINE_BREAK1" />
     Sem espaço suficiente disponível no armazenamento local. São necessários <ph name="FILE_SIZE" /> adicionais.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Rede <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, intensidade do sinal: <ph name="SIGNAL_STRENGTH" />%, gerida pelo administrador, detalhes</translation>
 <translation id="4387004326333427325">Certificado de autenticação rejeitado remotamente</translation>
 <translation id="4394214039309501350">Link externo</translation>
+<translation id="4394980935660306080">No início desta semana</translation>
 <translation id="4401287888955153199">Extrair tudo</translation>
 <translation id="4410695710508688828">A operação de extração falhou. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Crie um atalho para os seus ficheiros</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">A abrir "<ph name="PATH" />"…</translation>
 <translation id="4720185134442950733">Rede de dados móveis</translation>
 <translation id="4724850507808590449">Foi feita uma cópia de segurança de <ph name="FILE_COUNT" /> fotos</translation>
+<translation id="4725096204469550614">No início deste ano</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Aterragem</translation>
 <translation id="4747271164117300400">Macedónio</translation>
@@ -470,6 +473,7 @@
 <translation id="508423945471810158">A mover <ph name="NUMBER_OF_ITEMS" /> itens para <ph name="FOLDER_NAME" />…</translation>
 <translation id="509429900233858213">Ocorreu um erro.</translation>
 <translation id="5098629044894065541">Hebraico</translation>
+<translation id="5102922915594634436">Gerir pastas sincronizadas</translation>
 <translation id="5109254780565519649">Ocorreu um erro. Alguns itens podem não ter sido restaurados.</translation>
 <translation id="5110329002213341433">Inglês (Canadá)</translation>
 <translation id="5123433949759960244">Bola de basquetebol</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
index 8d9c297..f5432e22 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul Romaja</translation>
 <translation id="112387589102719461">Anglická (US) programátorská klávesnica s rozložením Dvorak</translation>
 <translation id="1134697384939541955">Anglická (US) rozšírená klávesnica</translation>
+<translation id="1138691154716715755">Skôr v tomto mesiaci</translation>
 <translation id="1148097584170732637">Počet nájdených: <ph name="FILE_COUNT" />.
     <ph name="LINE_BREAK1" />
     V miestnom úložisku nie je dostatok miesta. Potrebujete ďalšie miesto – <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032"><ph name="NETWORK_INDEX" />. sieť z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, intenzita signálu <ph name="SIGNAL_STRENGTH" /> %, ovládaná správcom, podrobnosti</translation>
 <translation id="4387004326333427325">Certifikát na overenie totožnosti bol zamietnutý na diaľku</translation>
 <translation id="4394214039309501350">Externý odkaz</translation>
+<translation id="4394980935660306080">Skôr v tomto týždni</translation>
 <translation id="4401287888955153199">Extrahovať všetko</translation>
 <translation id="4410695710508688828">Nepodarilo sa extrahovať. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Vytvorenie skratky k súborom</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Otvára sa <ph name="PATH" /></translation>
 <translation id="4720185134442950733">Mobilná dátová sieť</translation>
 <translation id="4724850507808590449">Počet zálohovaných fotiek: <ph name="FILE_COUNT" /></translation>
+<translation id="4725096204469550614">Skôr v tomto roku</translation>
 <translation id="4725511304875193254">Corgi</translation>
 <translation id="4737050008115666127">Pristátie</translation>
 <translation id="4747271164117300400">Macedónčina</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index 5f9429d5..f237ba1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangulski način Romaja</translation>
 <translation id="112387589102719461">angleščina (ZDA) s tipkovnico Dvorak za programerje</translation>
 <translation id="1134697384939541955">angleščina (ZDA) z razširjeno tipkovnico</translation>
+<translation id="1138691154716715755">Prej v tem mesecu</translation>
 <translation id="1148097584170732637">Št. najdenih: <ph name="FILE_COUNT" />.
     <ph name="LINE_BREAK1" />
     V lokalni shrambi ni dovolj prostora. Potrebujete dodatnih <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">Omrežje <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, moč signala je <ph name="SIGNAL_STRENGTH" /> %, upravlja ga vaš skrbnik, podrobnosti</translation>
 <translation id="4387004326333427325">Potrdilo za preverjanje pristnosti je bilo zavrnjeno na oddaljeni lokaciji</translation>
 <translation id="4394214039309501350">Zunanja povezava</translation>
+<translation id="4394980935660306080">Prej v tem tednu</translation>
 <translation id="4401287888955153199">Razširi vse</translation>
 <translation id="4410695710508688828">Dejanje ekstrahiranja ni uspelo. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Ustvarite bližnjico za svoje datoteke</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Odpiranje arhiva »<ph name="PATH" />«</translation>
 <translation id="4720185134442950733">Mobilno podatkovno omrežje</translation>
 <translation id="4724850507808590449">Št. varnostno kopiranih fotografij: <ph name="FILE_COUNT" /></translation>
+<translation id="4725096204469550614">Prej v tem letu</translation>
 <translation id="4725511304875193254">Valižanski ovčar</translation>
 <translation id="4737050008115666127">Pristanek</translation>
 <translation id="4747271164117300400">makedonščina</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 91fb40bf..b216494 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Hangul romadža</translation>
 <translation id="112387589102719461">engleski (SAD) sa tastaturom Programmer Dvorak</translation>
 <translation id="1134697384939541955">engleski (SAD) sa proširenom tastaturom</translation>
+<translation id="1138691154716715755">Ranije ovog meseca</translation>
 <translation id="1148097584170732637">Pronađene su datoteke (<ph name="FILE_COUNT" />).
     <ph name="LINE_BREAK1" />
     Nemate dovoljno prostora u lokalnoj memoriji. Potrebno je još <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032"><ph name="NETWORK_INDEX" />. mreža od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja administrator, detalji</translation>
 <translation id="4387004326333427325">Sertifikat za potvrdu autentičnosti je odbijen daljinski</translation>
 <translation id="4394214039309501350">Spoljni link</translation>
+<translation id="4394980935660306080">Ranije ove nedelje</translation>
 <translation id="4401287888955153199">Izdvoji sve</translation>
 <translation id="4410695710508688828">Operacija izdvajanja nije uspela. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Napravite prečicu za fajlove</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Otvara se „<ph name="PATH" />“</translation>
 <translation id="4720185134442950733">Mobilna mreža za prenos podataka</translation>
 <translation id="4724850507808590449">Napravljena je rezervna kopija slika (<ph name="FILE_COUNT" />)</translation>
+<translation id="4725096204469550614">Ranije ove godine</translation>
 <translation id="4725511304875193254">Korgi</translation>
 <translation id="4737050008115666127">Sletanje</translation>
 <translation id="4747271164117300400">makedonski</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index 6e3b2da..f1cae6db 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">Хангул ромаџа</translation>
 <translation id="112387589102719461">енглески (САД) са тастатуром Programmer Dvorak</translation>
 <translation id="1134697384939541955">енглески (САД) са проширеном тастатуром</translation>
+<translation id="1138691154716715755">Раније овог месеца</translation>
 <translation id="1148097584170732637">Пронађене су датотеке (<ph name="FILE_COUNT" />).
     <ph name="LINE_BREAK1" />
     Немате довољно простора у локалној меморији. Потребно је још <ph name="FILE_SIZE" />.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032"><ph name="NETWORK_INDEX" />. мрежа од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, јачина сигнала <ph name="SIGNAL_STRENGTH" />%, управља администратор, детаљи</translation>
 <translation id="4387004326333427325">Сертификат за потврду аутентичности је одбијен даљински</translation>
 <translation id="4394214039309501350">Спољни линк</translation>
+<translation id="4394980935660306080">Раније ове недеље</translation>
 <translation id="4401287888955153199">Издвоји све</translation>
 <translation id="4410695710508688828">Операција издвајања није успела. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">Направите пречицу за фајлове</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">Отвара се „<ph name="PATH" />“</translation>
 <translation id="4720185134442950733">Мобилна мрежа за пренос података</translation>
 <translation id="4724850507808590449">Направљена је резервна копија слика (<ph name="FILE_COUNT" />)</translation>
+<translation id="4725096204469550614">Раније ове године</translation>
 <translation id="4725511304875193254">Корги</translation>
 <translation id="4737050008115666127">Слетање</translation>
 <translation id="4747271164117300400">македонски</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index 8b8591d..f097703c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">హాంగుల్ రొమాజా</translation>
 <translation id="112387589102719461">ప్రోగ్రామర్ డ్వోరక్ కీబోర్డ్‌తో ఇంగ్లీష్ (US)</translation>
 <translation id="1134697384939541955">పొడగించిన కీబోర్డ్‌తో ఇంగ్లీష్ (US)</translation>
+<translation id="1138691154716715755">ఈ నెల ప్రారంభంలో</translation>
 <translation id="1148097584170732637"><ph name="FILE_COUNT" /> కనుగొనబడ్డాయి.
     <ph name="LINE_BREAK1" />
     స్థానిక నిల్వలో తగినంత స్థలం అందుబాటులో లేదు. అదనంగా <ph name="FILE_SIZE" /> అవసరం.
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" /> నెట్‌వర్క్, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />%, మీ అడ్మినిస్ట్రేటర్ ద్వారా మేనేజ్ చేయబడుతుంది, వివరాలు</translation>
 <translation id="4387004326333427325">ప్రామాణీకరణ ప్రమాణపత్రం రిమోట్‌లో తిరస్కరించబడింది</translation>
 <translation id="4394214039309501350">బాహ్య లింక్</translation>
+<translation id="4394980935660306080">ఈ వారం ప్రారంభంలో</translation>
 <translation id="4401287888955153199">అన్నింటినీ ఎక్స్‌ట్రాక్ట్ చేయండి</translation>
 <translation id="4410695710508688828">ఎక్స్‌ట్రాక్ట్ చేయడం విఫలమైంది. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">మీ ఫైల్స్ కోసం షార్ట్‌కట్‌ను క్రియేట్ చేయండి</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">"<ph name="PATH" />"ను తెరుస్తోంది</translation>
 <translation id="4720185134442950733">మొబైల్ డేటా నెట్‌వర్క్</translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> ఫోటోలు బ్యాకప్ చేయబడ్డాయి</translation>
+<translation id="4725096204469550614">ఈ సంవత్సరం ప్రారంభంలో</translation>
 <translation id="4725511304875193254">కార్గి</translation>
 <translation id="4737050008115666127">ల్యాండింగ్</translation>
 <translation id="4747271164117300400">మాసిడోనియన్</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
index 4784aa6..b3175af 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -11,6 +11,7 @@
 <translation id="1120073797882051782">ฮังกูลแบบโรมัน</translation>
 <translation id="112387589102719461">อังกฤษ (สหรัฐฯ) ด้วยแป้นพิมพ์ดีโวรักโปรแกรมเมอร์</translation>
 <translation id="1134697384939541955">อังกฤษ (สหรัฐฯ) ด้วยแป้นพิมพ์แบบ Extended</translation>
+<translation id="1138691154716715755">ต้นเดือนนี้</translation>
 <translation id="1148097584170732637">พบ <ph name="FILE_COUNT" />
     <ph name="LINE_BREAK1" />
     มีพื้นที่เก็บข้อมูลในเครื่องไม่พอ ต้องการอีก <ph name="FILE_SIZE" />
@@ -378,6 +379,7 @@
 <translation id="4380245540200674032">เครือข่ายที่ <ph name="NETWORK_INDEX" /> จาก <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, ความแรงสัญญาณ <ph name="SIGNAL_STRENGTH" />%, จัดการโดยผู้ดูแลระบบ, รายละเอียด</translation>
 <translation id="4387004326333427325">ใบรับรองการตรวจสอบสิทธิ์ได้รับการปฏิเสธจากระยะไกล</translation>
 <translation id="4394214039309501350">ลิงก์ภายนอก</translation>
+<translation id="4394980935660306080">ต้นสัปดาห์นี้</translation>
 <translation id="4401287888955153199">แตกเนื้อหาทั้งหมด</translation>
 <translation id="4410695710508688828">แตกข้อมูลไม่สำเร็จ <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4418686080762064601">สร้างทางลัดสำหรับไฟล์ของคุณ</translation>
@@ -421,6 +423,7 @@
 <translation id="4712283082407695269">กำลังเปิด "<ph name="PATH" />"</translation>
 <translation id="4720185134442950733">เครือข่ายข้อมูลมือถือ</translation>
 <translation id="4724850507808590449">สำรองรูปภาพ <ph name="FILE_COUNT" /> รูปแล้ว</translation>
+<translation id="4725096204469550614">ต้นปีนี้</translation>
 <translation id="4725511304875193254">คอร์กี</translation>
 <translation id="4737050008115666127">ลงจอด</translation>
 <translation id="4747271164117300400">มาซิโดเนีย</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
index 0fff1d71..11767d4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -470,6 +470,7 @@
 <translation id="508423945471810158">Đang di chuyển <ph name="NUMBER_OF_ITEMS" /> mục vào <ph name="FOLDER_NAME" /></translation>
 <translation id="509429900233858213">Đã xảy ra lỗi.</translation>
 <translation id="5098629044894065541">Tiếng Do Thái</translation>
+<translation id="5102922915594634436">Quản lý các thư mục được đồng bộ hoá</translation>
 <translation id="5109254780565519649">Đã xảy ra lỗi. Một số mục có thể chưa được khôi phục.</translation>
 <translation id="5110329002213341433">Tiếng Anh (Canada)</translation>
 <translation id="5123433949759960244">Bóng rổ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
index 8c9e927..8b761e19 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -470,6 +470,7 @@
 <translation id="508423945471810158">正在将 <ph name="NUMBER_OF_ITEMS" /> 项内容移动到“<ph name="FOLDER_NAME" />”</translation>
 <translation id="509429900233858213">出现错误。</translation>
 <translation id="5098629044894065541">希伯来语</translation>
+<translation id="5102922915594634436">管理已同步的文件夹</translation>
 <translation id="5109254780565519649">出错了。某些内容可能未成功恢复。</translation>
 <translation id="5110329002213341433">英语(加拿大)</translation>
 <translation id="5123433949759960244">篮球</translation>