diff --git a/AUTHORS b/AUTHORS
index 4b62a980..eb54c85b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -71,6 +71,7 @@
 Alexey Kuts <kruntuid@gmail.com>
 Alexey Kuzmin <alex.s.kuzmin@gmail.com>
 Alexey Kuznetsov <saturas2000@gmail.com>
+Alexey Terentiev <alexeyter@gmail.com>
 Alexis Brenon <brenon.alexis@gmail.com>
 Alexis La Goutte <alexis.lagoutte@gmail.com>
 Alexis Menard <alexis.menard@intel.com>
diff --git a/DEPS b/DEPS
index 8720803..c7f95a9e4 100644
--- a/DEPS
+++ b/DEPS
@@ -297,7 +297,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '27ccebd5bef495f51a61160ade5366ed59755e35',
+  'skia_revision': '95321396c690624fc4c39a68e3348a1360597570',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -305,7 +305,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': '31ac3fefdefa4b0dc6709e95a23b84ce4d7182e0',
+  'angle_revision': '4b4c90efb9027eaaa06319b1ca69d35a1d3c92d8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -324,7 +324,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:9.20220821.3.1',
+  'fuchsia_version': 'version:9.20220822.1.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.
@@ -376,7 +376,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': '34b7dd793876ff02ee2dda54161a529a60ec5dfc',
+  'devtools_frontend_revision': 'f8693af1c0db5cf68d72ce0623c16450608bd4bf',
   # 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.
@@ -1573,7 +1573,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b67499fd17b1968b5db52e13b4d616d1ea2be4a2',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '09cadaf285bc7b68ff8c34f57a35c15174bcae4a',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1729,10 +1729,10 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '44e4c8770158c505b03ee7feafa4859d083b0912',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e204a3c377547e11d2be1edecb1593c3259acc8e',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'f102e6b2677d4819182154c6dd7390887ae9bb10',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '3d01e68e708b65241090b8d8f77369b7430d6694',
+    Var('webrtc_git') + '/src.git' + '@' + 'e9d58df24da9a8f70c00ec1c6d2c7c308bd919b0',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1805,7 +1805,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b8a058587e52aff5df3131f1bd1a6cc2ac5e9101',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@854f7a88bbb36f811a8f837e24e2cb012f9f9137',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 0ad40ab9..9d37ca8 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -672,6 +672,7 @@
 <translation id="479989351350248267">deursoek</translation>
 <translation id="4804818685124855865">Ontkoppel</translation>
 <translation id="4814539958450445987">Aanmeldskerm</translation>
+<translation id="481455355267255546">Volgende</translation>
 <translation id="4831034276697007977">Is jy seker jy wil outomatiese klikke afskakel?</translation>
 <translation id="4849058404725798627">Lig voorwerp met sleutelbordfokus uit</translation>
 <translation id="485592688953820832">Geen handeling nie (onderbreek)</translation>
@@ -1014,6 +1015,7 @@
 <translation id="6757237461819837179">Geen media speel tans nie</translation>
 <translation id="6777216307882431711">Gee tans krag aan gekoppelde USB-C-toestelle</translation>
 <translation id="6786750046913594791">Maak vouer toe</translation>
+<translation id="6787595647772650851">Stel laaste sessie terug</translation>
 <translation id="6790428901817661496">Speel</translation>
 <translation id="6801878137098616817">Dit is onlangs gewysig</translation>
 <translation id="6803622936009808957">Kon nie skerms weerspieël nie, omdat daar geen gesteunde resolusies gevind kon word nie. Het eerder by uitgebreide skerm ingegaan.</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 04c1512..68e908e 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">የካናሪ ሰርጥ</translation>
 <translation id="8219451629189078428">በዚህ ጊዜ የእርስዎ Chromebook እንደበራ መቆየት እና ከኃይል ጋር መገናኘት አለበት። የባትሪ መሙያ ወይም የአስማሚ ገመዶች ከሁለቱም በእርስዎ Chromebook እና በኃይል መሰኪያው ላይ ሙሉ ለሙሉ መሰካታቸውን ያረጋግጡ። የእርስዎን Chromebook አያጥፉት።</translation>
 <translation id="8236042855478648955">የዕረፍት ጊዜ</translation>
+<translation id="8246282815785366524">እንኳን በደህና ተመልሰው መጡ <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />፣ የሲግናል ጥንካሬ <ph name="SIGNAL_STRENGTH" />፣ የስልክ ባትሪ <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />፣ መተግበሪያ</translation>
 <translation id="8255234195843591763">ለማዘመን ዳግም ያስጀምሩ</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 30da0290..8ce13e34 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">Канал Canary</translation>
 <translation id="8219451629189078428">През това време вашият Chromebook трябва да остане включен и свързан със захранването. Уверете се, че зарядното устройство или кабелите на адаптера са включени добре във вашия Chromebook и в електрическия контакт. Не изключвайте Chromebook.</translation>
 <translation id="8236042855478648955">Време е за почивка</translation>
+<translation id="8246282815785366524">Добре дошли отново, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, сила на сигнала <ph name="SIGNAL_STRENGTH" />, батерия на телефона <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, приложение</translation>
 <translation id="8255234195843591763">Нулиране с цел актуализиране</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index e179b44..c5c1fb5 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">pretraži</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
 <translation id="4814539958450445987">Ekran za prijavu</translation>
+<translation id="481455355267255546">Slijedi</translation>
 <translation id="4831034276697007977">Jeste li sigurni da želite isključiti automatske klikove?</translation>
 <translation id="4849058404725798627">Istakni objekat fokusom tastature</translation>
 <translation id="485592688953820832">Nema radnje (pauza)</translation>
@@ -1013,6 +1014,7 @@
 <translation id="6757237461819837179">Medijski fajlovi se ne reproduciraju</translation>
 <translation id="6777216307882431711">Napajanje povezanih uređaja s priključkom USB-C</translation>
 <translation id="6786750046913594791">Zatvori folder</translation>
+<translation id="6787595647772650851">Vrati posljednju sesiju</translation>
 <translation id="6790428901817661496">Pokreni</translation>
 <translation id="6801878137098616817">Nedavno uređeno</translation>
 <translation id="6803622936009808957">Preslikavanje ekrana nije moguće jer nisu pronađene podržane rezolucije. Umjesto toga, prikazuje se proširena radna površina.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index c3e9e76..f9bf453 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -1261,6 +1261,7 @@
 <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="8246282815785366524">Velkommen tilbage, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, signalstyrke <ph name="SIGNAL_STRENGTH" />, telefonbatteri <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, app</translation>
 <translation id="8255234195843591763">Nulstil for at opdatere</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 829c03e..5c36a3198 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -1262,6 +1262,7 @@
 <translation id="8214996719228530800">Canal de Canary</translation>
 <translation id="8219451629189078428">Durante ese período, la Chromebook deberá estar encendida y enchufada a una fuente de alimentación. Asegúrate de que el cable del cargador o adaptador esté conectado correctamente tanto a la Chromebook como al enchufe. No apagues la Chromebook.</translation>
 <translation id="8236042855478648955">Es hora de descansar</translation>
+<translation id="8246282815785366524">Te damos la bienvenida nuevamente, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, intensidad de la señal: <ph name="SIGNAL_STRENGTH" />, nivel de batería del teléfono: <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, app</translation>
 <translation id="8255234195843591763">Restablecer para actualizar</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 59d5fba..3c8f5c23 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -854,6 +854,7 @@
 <translation id="5860033963881614850">Desaktibatuta</translation>
 <translation id="5860491529813859533">Aktibatu</translation>
 <translation id="5867217927013474703">Sareari buruzko informazioa biltzen</translation>
+<translation id="5867606971598166637">Sistemaren administratzailea pantailak kontrolatzen ari da</translation>
 <translation id="5876666360658629066">Idatzi gurasoen sarbide-kodea</translation>
 <translation id="5881540930187678962">Konfiguratu Phone Hub geroago</translation>
 <translation id="5887954372087850114"><ph name="DESK_TITLE" /> lan-eremuari esleitu zaio <ph name="WINDOW_TITLE" /> leihoa, eta beste lan-eremu guztien esleipenak kendu zaizkio</translation>
@@ -1263,6 +1264,7 @@
 <translation id="8214996719228530800">Canary kanala</translation>
 <translation id="8219451629189078428">Chromebook-ak piztuta eta korrontera konektatuta egon behar du aldi horretan. Ziurtatu kargagailuaren edo egokigailuaren kableak behar bezala entxufatuta daudela, bai Chromebook-era, bai entxufera. Ez itzali Chromebook-a.</translation>
 <translation id="8236042855478648955">Atseden hartzeko garaia da</translation>
+<translation id="8246282815785366524">Ongi etorri berriro, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />. Seinalearen indarra: <ph name="SIGNAL_STRENGTH" />. Telefonoaren bateria: <ph name="BATTERY_STATUS" />.</translation>
 <translation id="8247998213073982446">Aplikazioa (<ph name="APP_NAME" />)</translation>
 <translation id="8255234195843591763">Gailua eguneratzeko, berrezar ezazu</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 1bdb8d2..7a9c0de4 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">I-disconnect</translation>
 <translation id="4814539958450445987">Screen sa Pag-log In</translation>
+<translation id="481455355267255546">Susunod</translation>
 <translation id="4831034276697007977">Sigurado ka bang gusto mong i-off ang mga awtomatikong pag-click?</translation>
 <translation id="4849058404725798627">I-highlight ang bagay sa pamamagitan ng pag-focus ng keyboard</translation>
 <translation id="485592688953820832">Walang pagkilos (i-pause)</translation>
@@ -852,6 +853,7 @@
 <translation id="5860033963881614850">Naka-off</translation>
 <translation id="5860491529813859533">I-on</translation>
 <translation id="5867217927013474703">Kinokolekta ang impormasyon ng network</translation>
+<translation id="5867606971598166637">Sinusubaybayan ng iyong system administrator ang mga screen mo</translation>
 <translation id="5876666360658629066">Ilagay ang code ng magulang</translation>
 <translation id="5881540930187678962">I-set up ang Phone Hub sa ibang pagkakataon</translation>
 <translation id="5887954372087850114">Itinalaga sa <ph name="DESK_TITLE" /> ang window na<ph name="WINDOW_TITLE" /> at inalis ang pagkakatalaga nito sa lahat ng iba pang desk</translation>
@@ -1013,6 +1015,7 @@
 <translation id="6757237461819837179">Walang nagpe-play na media</translation>
 <translation id="6777216307882431711">Pinapagana ang mga nakakonektang USB-C device</translation>
 <translation id="6786750046913594791">Isara ang folder</translation>
+<translation id="6787595647772650851">I-restore ang huling session</translation>
 <translation id="6790428901817661496">I-play</translation>
 <translation id="6801878137098616817">Na-edit kamakailan</translation>
 <translation id="6803622936009808957">Hindi ma-mirror ang mga display dahil walang mga sinusuportahang resolusyon na nakita. Pumasok na lang sa pinalawak na desktop.</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 377bb1a..46881c62 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Désactivé</translation>
 <translation id="5860491529813859533">Activer</translation>
 <translation id="5867217927013474703">Collecte de renseignements relatifs au réseau en cours…</translation>
+<translation id="5867606971598166637">Votre administrateur système surveille vos écrans</translation>
 <translation id="5876666360658629066">Entrez le code d'accès parental</translation>
 <translation id="5881540930187678962">Configurer Phone Hub plus tard</translation>
 <translation id="5887954372087850114">La fenêtre <ph name="WINDOW_TITLE" /> est attribuée au bureau <ph name="DESK_TITLE" />, et son attribution est annulée de tous les autres bureaux</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index 08715f2..fdb7ac0 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -1262,6 +1262,7 @@
 <translation id="8214996719228530800">Canle Canary</translation>
 <translation id="8219451629189078428">Durante este tempo, o Chromebook ten que permanecer acendido e enchufado. Asegúrate de que os cables do adaptador ou do cargador estean ben inseridos tanto no Chromebook como no enchufe. Non apagues o Chromebook.</translation>
 <translation id="8236042855478648955">É hora de que fagas unha pausa</translation>
+<translation id="8246282815785366524">Dámosche a benvida de novo, <ph name="GIVEN_NAME" />!</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, intensidade do sinal do <ph name="SIGNAL_STRENGTH" />, batería do teléfono ao <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, aplicación</translation>
 <translation id="8255234195843591763">Restablece o dispositivo para actualizar o sistema</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 736fc606..295069e4 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">બંધ</translation>
 <translation id="5860491529813859533">ચાલુ કરો</translation>
 <translation id="5867217927013474703">નેટવર્કની માહિતી ભેગી કરવામાં આવી રહી છે</translation>
+<translation id="5867606971598166637">તમારા સિસ્ટમ ઍડમિનિસ્ટ્રેટર તમારી સ્ક્રીનનું નિરીક્ષણ કરી રહ્યાં છે</translation>
 <translation id="5876666360658629066">માતાપિતાનો કોડ દાખલ કરો</translation>
 <translation id="5881540930187678962">થોડા સમય પછી ફોન હબનું સેટઅપ કરો</translation>
 <translation id="5887954372087850114"><ph name="WINDOW_TITLE" /> વિન્ડો <ph name="DESK_TITLE" />ને સોંપાઈ અને અન્ય બધી ડેસ્કમાંથી તેની સોંપણી રદ કરાઈ</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index c7c7f029..2da7a39 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
 <translation id="4814539958450445987">Zaslon za prijavu</translation>
+<translation id="481455355267255546">Slijedi</translation>
 <translation id="4831034276697007977">Jeste li sigurni da želite isključiti automatske klikove?</translation>
 <translation id="4849058404725798627">Istakni objekt fokusom na tipkovnici</translation>
 <translation id="485592688953820832">Nema radnje (pauza)</translation>
@@ -1013,6 +1014,7 @@
 <translation id="6757237461819837179">Nema reprodukcije medija</translation>
 <translation id="6777216307882431711">Napaja povezane USB-C uređaje</translation>
 <translation id="6786750046913594791">Zatvori mapu</translation>
+<translation id="6787595647772650851">Vrati posljednju sesiju</translation>
 <translation id="6790428901817661496">Reproduciraj</translation>
 <translation id="6801878137098616817">Nedavno uređivano</translation>
 <translation id="6803622936009808957">Nije bilo moguće zrcaliti zaslone jer nije pronađena nijedna podržana razlučivost. Umjesto toga proširena je radna površina.</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index c3de26b..8bed0e5 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">Saluran Canary</translation>
 <translation id="8219451629189078428">Chromebook harus tetap aktif dan terhubung ke daya selama jangka waktu ini. Pastikan kabel pengisi daya atau adaptor dicolokkan dengan benar ke Chromebook dan stopkontak. Jangan nonaktifkan Chromebook Anda.</translation>
 <translation id="8236042855478648955">Waktunya beristirahat</translation>
+<translation id="8246282815785366524">Selamat datang kembali, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, Kekuatan Sinyal <ph name="SIGNAL_STRENGTH" />, Baterai Ponsel <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, Aplikasi</translation>
 <translation id="8255234195843591763">Reset untuk mengupdate</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 5e89f0d9..19b68b1 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">Canary チャンネル</translation>
 <translation id="8219451629189078428">この間は Chromebook の電源をオンにしておく必要があります。充電器またはアダプタのケーブルが、Chromebook とコンセントの両方にしっかりと接続されていることを確認してください。また、Chromebook の電源をオフにしないでください。</translation>
 <translation id="8236042855478648955">休憩の時間です</translation>
+<translation id="8246282815785366524">ようこそ、<ph name="GIVEN_NAME" /> さん</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />、信号強度 <ph name="SIGNAL_STRENGTH" />、電池残量 <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />、アプリ</translation>
 <translation id="8255234195843591763">リセットして更新してください</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index 2ff2dc7..23da0166 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">გამორთვა</translation>
 <translation id="5860491529813859533">ჩართვა</translation>
 <translation id="5867217927013474703">გროვდება ინფორმაცია ქსელის შესახებ</translation>
+<translation id="5867606971598166637">თქვენი სისტემის ადმინისტრატორი ახორციელებს თქვენი ეკრანების მონიტორინგს</translation>
 <translation id="5876666360658629066">შეიყვანეთ მშობლის კოდი</translation>
 <translation id="5881540930187678962">ტელეფონის ცენტრის მოგვიანების დაყენება</translation>
 <translation id="5887954372087850114">ფანჯარა <ph name="WINDOW_TITLE" /> მიმაგრებულია სამუშაო მაგიდაზე <ph name="DESK_TITLE" />, ხოლო დანარჩენი სამუშაო მაგიდებისთვის მიმაგრება გაუქმებულია</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index dfb121d..bc336d00 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -1263,6 +1263,7 @@
 <translation id="8214996719228530800">បណ្តាញ Canary</translation>
 <translation id="8219451629189078428">Chromebook របស់អ្នកត្រូវបន្តបើក និងភ្ជាប់ទៅថាមពលនៅអំឡុងពេលនេះ។ ត្រូវប្រាកដថា ខ្សែសាក ឬឆ្នាំងសាកត្រូវបានដោតត្រឹមត្រូវ ទាំងនៅលើ Chromebook របស់អ្នក និង​ព្រីភ្លើង។ សូមកុំបិទ Chromebook ​របស់អ្នក។</translation>
 <translation id="8236042855478648955">ដល់​ពេល​សម្រាក​ហើយ</translation>
+<translation id="8246282815785366524">សូមស្វាគមន៍​សម្រាប់ការវិលត្រឡប់មកវិញ <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, កម្លាំង​រលកសញ្ញា <ph name="SIGNAL_STRENGTH" />, ថ្មទូរសព្ទ <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, កម្មវិធី</translation>
 <translation id="8255234195843591763">កំណត់​ឡើងវិញ ដើម្បី​ដំឡើងកំណែ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index f898f23..e4d694e 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">Canary 채널</translation>
 <translation id="8219451629189078428">이 시간 동안 Chromebook이 켜진 상태로 전원에 연결되어 있어야 합니다. 충전기나 어댑터 케이블이 Chromebook과 전원 콘센트에 제대로 연결되어 있는지 확인하고, Chromebook을 끄지 마세요.</translation>
 <translation id="8236042855478648955">휴식 시간</translation>
+<translation id="8246282815785366524"><ph name="GIVEN_NAME" />님, 다시 방문해 주셔서 감사합니다.</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, 신호 강도 <ph name="SIGNAL_STRENGTH" />, 휴대전화 배터리 <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, 앱</translation>
 <translation id="8255234195843591763">재설정하여 업데이트</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index da2442432..20c539822 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">издөө</translation>
 <translation id="4804818685124855865">Ажыратуу</translation>
 <translation id="4814539958450445987">Аккаунтка кирүү экраны</translation>
+<translation id="481455355267255546">Кийинки</translation>
 <translation id="4831034276697007977">Автоматтык түрдө чыкылдатууларды чын эле өчүргүңүз келеби?</translation>
 <translation id="4849058404725798627">Баскычтоп менен тандалган элементтер баса белгиленсин</translation>
 <translation id="485592688953820832">Эч кандай аракет аткарылбасын (тындыруу)</translation>
@@ -1013,6 +1014,7 @@
 <translation id="6757237461819837179">Медиа ойнотулган жок</translation>
 <translation id="6777216307882431711">Байланышкан USB-C түзмөктөрү кубатталууда</translation>
 <translation id="6786750046913594791">Куржунду жабуу</translation>
+<translation id="6787595647772650851">Акыркы сеансты калыбына келтирүү</translation>
 <translation id="6790428901817661496">Ойнотуу</translation>
 <translation id="6801878137098616817">Жакында түзөтүлдү</translation>
 <translation id="6803622936009808957">Колдоого алынган бир дагы чечилиш табылбагандыктан, дисплейлер чагылыштырылбай калды. Анын ордуна кеңейтилген иштакта киргизилди.</translation>
@@ -1406,7 +1408,7 @@
 <translation id="9080132581049224423">Башкы бетке өтүү үчүн экранды сүрүп коюңуз</translation>
 <translation id="9080206825613744995">Микрофон колдонулууда.</translation>
 <translation id="9084606467167974638">Менюнун абалын өчүрүү/күйгүзүү</translation>
-<translation id="9085962983642906571">Батареянын кубатынын мөөнөтүн узартуу үчүн түзмөк сайылып турганда 80% чейин кубатталат.</translation>
+<translation id="9085962983642906571">Батарея жарабай калбашы үчүн түзмөктүн кубаты 80% кармалып турат.</translation>
 <translation id="9089416786594320554">Киргизүү ыкмалары</translation>
 <translation id="9091626656156419976"><ph name="DISPLAY_NAME" /> дисплейи өчүрүлдү</translation>
 <translation id="9098969848082897657">Телефондун үнүн өчүрүү</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 9d39f01..b71de05 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">ຊ່ອງ Canary</translation>
 <translation id="8219451629189078428">ທ່ານຈຳເປັນຕ້ອງເປີດ Chromebook ຂອງທ່ານ ແລະ ສຽບປລັກໄວ້ຕະຫຼອດເວລາໃນລະຫວ່າງນີ້. ກວດໃຫ້ແນ່ໃຈວ່າໄດ້ສຽບສາຍສາກ ຫຼື ສາຍອະແດັບເຕີຄົບຖ້ວນແລ້ວ, ໃສ່ທັງ Chromebook ແລະ ເຕົ້າສຽບໄຟ. ຢ່າປິດ Chromebook ຂອງທ່ານ.</translation>
 <translation id="8236042855478648955">ເວລາພັກ</translation>
+<translation id="8246282815785366524">ຍິນດີຕ້ອນຮັບກັບມາ, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, ຄວາມແຮງສັນຍານ <ph name="SIGNAL_STRENGTH" />, ແບັດເຕີຣີໂທລະສັບ <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, ແອັບ</translation>
 <translation id="8255234195843591763">ຣີເຊັດເພື່ອອັບເດດ</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index baf38a92..6ee78a6 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -1264,6 +1264,7 @@
 <translation id="8214996719228530800">Канар суваг</translation>
 <translation id="8219451629189078428">Энэ хугацаанд Chromebook тань асаалттай, мөн тэжээлд залгаатай байх шаардлагатай. Цэнэглэгчийн эсвэл адаптерын утас Chromebook, цахилгааны залгуур хоёрт хоёуланд нь бүрэн залгаатай байгаа эсэхийг шалгаарай. Chromebook-ээ унтрааж болохгүй.</translation>
 <translation id="8236042855478648955">Завсарлах цаг</translation>
+<translation id="8246282815785366524">Дахин тавтай морилно уу, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, дохионы хүч <ph name="SIGNAL_STRENGTH" />, утасны батарей <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, апп</translation>
 <translation id="8255234195843591763">Шинэчлэхийн тулд дахин эхлүүлнэ үү</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 84df966..c16aab2 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -91,7 +91,7 @@
 <translation id="1383597849754832576">တိုက်ရိုက်စာတန်းဖိုင်များကို ဒေါင်းလုဒ်လုပ်၍ မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="1383876407941801731">ရှာဖွေမှု</translation>
 <translation id="1391102559483454063">ဖွင့်ရန်</translation>
-<translation id="1407069428457324124">မှောင်သည့်အပြင်အဆင်</translation>
+<translation id="1407069428457324124">အမှောင်နောက်ခံ</translation>
 <translation id="1410568680128842168"><ph name="DATE_CELL_TOOL_TIP" />။ ရက်စွဲများအကြား ရွှေ့ပြောင်းရန် မြားကီးများ အသုံးပြုပါ။</translation>
 <translation id="1414271762428216854"><ph name="APP_NAME" />၊ ထည့်သွင်းထားသည့် အက်ပ်</translation>
 <translation id="1419738280318246476">အကြောင်းကြားခြင်း လုပ်ဆောင်ရန်အတွက် စက်ပစ္စည်းကို လော့ခ်ဖွင့်ပါ</translation>
@@ -413,7 +413,7 @@
 <translation id="3386978599540877378">မျက်နှာပြင်အပြည့် မှန်ဘီလူး</translation>
 <translation id="3387527074123400161">ChromiumOS</translation>
 <translation id="3400357268283240774">နောက်ထပ်ဆက်တင်များ</translation>
-<translation id="3410336247007142655">မှောင်သည့်အပြင်အဆင် ဆက်တင်များ ပြရန်</translation>
+<translation id="3410336247007142655">အမှောင်နောက်ခံ ဆက်တင်များ ပြရန်</translation>
 <translation id="3413817803639110246">ယခုကြည့်စရာ မရှိသေးပါ</translation>
 <translation id="3428447136709161042"><ph name="NETWORK_NAME" /> နှင့် ချိတ်ဆက်မှုဖြုတ်ရန်</translation>
 <translation id="3430396595145920809">နောက်သို့ပြန်သွားရန် ညာဘက်မှ ပွတ်ဆွဲပါ</translation>
@@ -634,7 +634,7 @@
 <translation id="4581047786858252841">မိုက်ခရိုဖုန်း ဖွင့်ထားသည်</translation>
 <translation id="4585337515783392668">အမည်မသိ လက်ခံစက်သို့ ကာ့စ်လုပ်ခြင်း ရပ်တန့်ရန်</translation>
 <translation id="4587299710837179226">မိုက်ခရိုဖုန်း ပိတ်ထားသည်</translation>
-<translation id="4596144739579517758">မှောင်သည့်အပြင်အဆင် ပိတ်ထားသည်</translation>
+<translation id="4596144739579517758">အမှောင်နောက်ခံ ပိတ်ထားသည်</translation>
 <translation id="4611292653554630842">အကောင့်ထဲဝင်ရန်</translation>
 <translation id="4623167406982293031">အကောင့်ကို အတည်ပြုရန်</translation>
 <translation id="4628757576491864469">စက်ပစ္စည်းများ</translation>
@@ -760,7 +760,7 @@
 <translation id="5329548388331921293">ချိတ်ဆက်နေသည်...</translation>
 <translation id="5331975486040154427">USB-C ကိရိယာ (ကျောဘက် ဘယ် ပို့တ်)</translation>
 <translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (ညာ)</translation>
-<translation id="5352250171825660495">မှောင်သည့်အပြင်အဆင် ဖွင့်ထားသည်</translation>
+<translation id="5352250171825660495">အမှောင်နောက်ခံ ဖွင့်ထားသည်</translation>
 <translation id="5356963482258194581">အမှောင်နောက်ခံနှင့် အလင်းနောက်ခံကို ပြောင်းသုံးနိုင်သည်။ ဒက်စ်တော့ပေါ်တွင် ညာဘက်ခလုတ်ကို နှိပ်၍ ‘နောက်ခံနှင့် စတိုင်’ ကို ရွေးပါ။</translation>
 <translation id="5363163447017455357"><ph name="DELIMITER" /> ဤတဘ်သို့သွားရန်</translation>
 <translation id="5379115545237091094">စမ်းသပ်သည့်အကြိမ်ရေ အလွန်များနေပါပြီ</translation>
@@ -1367,7 +1367,7 @@
 <translation id="8850991929411075241">ရှာဖွေမှု+Esc</translation>
 <translation id="8853703225951107899">သင့်ပင်နံပါတ် သို့မဟုတ် စကားဝှက်ကို စစ်ဆေး၍မရနိုင်သေးပါ။ မှတ်ချက် - လတ်တလောတွင် သင့်စကားဝှက်ကို ပြောင်းထားပါက စကားဝှက်အဟောင်းကို သုံးပါ။ ထွက်ပြီးသည့်အခါ စကားဝှက်အသစ်ကို အသုံးပြုပါမည်။</translation>
 <translation id="8870509716567206129">အက်ပ်သည် မျက်နှာပြင်ခွဲပြခြင်းကို ပံ့ပိုးမထားပါ။</translation>
-<translation id="8871580645200179206">မှောင်သည့်အပြင်အဆင် ပြောင်းပါ။ <ph name="STATE_TEXT" /></translation>
+<translation id="8871580645200179206">အမှောင်နောက်ခံ ပြောင်းပါ။ <ph name="STATE_TEXT" /></translation>
 <translation id="8874184842967597500">ချိတ်ဆက် မထား</translation>
 <translation id="8876661425082386199">သင့်ချိတ်ဆက်မှုကို စစ်ဆေးပါ</translation>
 <translation id="8877788021141246043">သတိပေးချက် သတ်မှတ်ပါ</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index 81a608c..0105593 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">खोज्नुहोस्</translation>
 <translation id="4804818685124855865">जडान विच्छेद</translation>
 <translation id="4814539958450445987">लग इन स्क्रिन</translation>
+<translation id="481455355267255546">यसपछि</translation>
 <translation id="4831034276697007977">तपाईंले स्वचालित क्लिक सुविधा निष्क्रिय पार्न चाहनुभएकै हो?</translation>
 <translation id="4849058404725798627">किबोर्डको फोकसमार्फत वस्तुलाई हाइलाइट</translation>
 <translation id="485592688953820832">कुनै कारबाही नगर्नुहोस् (पज गर्नुहोस्)</translation>
@@ -852,6 +853,7 @@
 <translation id="5860033963881614850">बन्द</translation>
 <translation id="5860491529813859533">अन गर्नुहोस्</translation>
 <translation id="5867217927013474703">नेटवर्कसम्बन्धी जानकारी सङ्कलन गरिँदै छ</translation>
+<translation id="5867606971598166637">तपाईंका सिस्टम एड्मिन तपाईंका स्क्रिनहरू अनुगमन गर्दै हुनुहुन्छ</translation>
 <translation id="5876666360658629066">अभिभावकको कोड प्रविष्टि गर्नुहोस्</translation>
 <translation id="5881540930187678962">फोन हब पछि सेटअप गर्नुहोस्</translation>
 <translation id="5887954372087850114">"<ph name="DESK_TITLE" />" मा "<ph name="WINDOW_TITLE" />" विन्डो असाइन गरिएको छ र यो विन्डो अन्य सबै डेस्कबाट अनअसाइन गरिएको छ</translation>
@@ -1013,6 +1015,7 @@
 <translation id="6757237461819837179">कुनै मिडिया प्ले भइरहेको छैन</translation>
 <translation id="6777216307882431711">जडान गरिएका USB-C यन्त्रहरू चार्ज गर्दै</translation>
 <translation id="6786750046913594791">फोल्डर बन्द गर्नुहोस्</translation>
+<translation id="6787595647772650851">पछिल्लो सत्र रिस्टोर गर्नुहोस्</translation>
 <translation id="6790428901817661496">प्ले गर्नुहोस्</translation>
 <translation id="6801878137098616817">हालसालै सम्पादन गरिएको</translation>
 <translation id="6803622936009808957">समर्थित रिजोलुशन फेला नपारेदेखि मिरर डिस्प्ले गर्न सकेन। सट्टामा विस्तारित डेस्कटप प्रविष्ट गरियो।</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 41ce7e2a..db720ed 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">zoeken</translation>
 <translation id="4804818685124855865">Verbinding verbreken</translation>
 <translation id="4814539958450445987">Inlogscherm</translation>
+<translation id="481455355267255546">Volgende</translation>
 <translation id="4831034276697007977">Weet je zeker dat je automatische klikken wilt uitzetten?</translation>
 <translation id="4849058404725798627">Object met toetsenbordfocus markeren</translation>
 <translation id="485592688953820832">Geen actie (onderbreken)</translation>
@@ -1013,6 +1014,7 @@
 <translation id="6757237461819837179">Er wordt geen media afgespeeld</translation>
 <translation id="6777216307882431711">De aangesloten USB-C-apparaten worden van stroom voorzien</translation>
 <translation id="6786750046913594791">Map sluiten</translation>
+<translation id="6787595647772650851">Laatste sessie herstellen</translation>
 <translation id="6790428901817661496">Spelen</translation>
 <translation id="6801878137098616817">Recent bewerkt</translation>
 <translation id="6803622936009808957">Kan schermen niet spiegelen, omdat er geen ondersteunde resoluties zijn gevonden. Het uitgebreide bureaublad is geactiveerd.</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 2bea758..935323e 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Desligar</translation>
 <translation id="4814539958450445987">Ecrã de início de sessão</translation>
+<translation id="481455355267255546">A seguir</translation>
 <translation id="4831034276697007977">Tem a certeza de que pretende desativar os cliques automáticos?</translation>
 <translation id="4849058404725798627">Realçar objeto com foco do teclado</translation>
 <translation id="485592688953820832">Nenhuma ação (pausar)</translation>
@@ -1013,6 +1014,7 @@
 <translation id="6757237461819837179">Sem multimédia em reprodução</translation>
 <translation id="6777216307882431711">Ligar os dispositivos USB-C ligados</translation>
 <translation id="6786750046913594791">Fechar pasta</translation>
+<translation id="6787595647772650851">Restaurar a última sessão</translation>
 <translation id="6790428901817661496">Reproduzir</translation>
 <translation id="6801878137098616817">Editado recentemente</translation>
 <translation id="6803622936009808957">Não foi possível espelhar os ecrãs, porque não foram encontradas resoluções suportadas. Em vez disso, entrou no ambiente de trabalho expandido.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index cc9dfd2..118a753 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -1261,6 +1261,7 @@
 <translation id="8214996719228530800">Версия Canary</translation>
 <translation id="8219451629189078428">В течение этого времени устройство Chromebook должно быть включено, а кабели зарядного устройства или адаптера – надежно подсоединены к нему и подключены к сети электропитания. Не выключайте устройство Chromebook.</translation>
 <translation id="8236042855478648955">Пора сделать перерыв</translation>
+<translation id="8246282815785366524">С возвращением, <ph name="GIVEN_NAME" />!</translation>
 <translation id="8247060538831475781">Статус подключения – "<ph name="CONNECTION_STATUS" />", уровень сигнала – <ph name="SIGNAL_STRENGTH" />, заряд батареи – <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, приложение</translation>
 <translation id="8255234195843591763">Сбросить настройки и обновить ОС</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 583fff3..41eb50d 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Odpojiť</translation>
 <translation id="4814539958450445987">Prihlasovacia obrazovka</translation>
+<translation id="481455355267255546">Ďalšie</translation>
 <translation id="4831034276697007977">Naozaj chcete vypnúť automatické kliknutia?</translation>
 <translation id="4849058404725798627">Zvýrazniť objekt so zameraním klávesnice</translation>
 <translation id="485592688953820832">Žiadna akcia (pozastaviť)</translation>
@@ -852,6 +853,7 @@
 <translation id="5860033963881614850">Vypnuté</translation>
 <translation id="5860491529813859533">Zapnúť</translation>
 <translation id="5867217927013474703">Zhromažďujú sa informácie o sieti</translation>
+<translation id="5867606971598166637">Správca systému monitoruje vaše obrazovky</translation>
 <translation id="5876666360658629066">Zadajte kód rodiča</translation>
 <translation id="5881540930187678962">Nastavte si Telefónne centrum neskôr</translation>
 <translation id="5887954372087850114">Okno <ph name="WINDOW_TITLE" /> bolo pridelené ploche <ph name="DESK_TITLE" /> a jeho pridelenie k všetkým ostatným plochám bolo zrušené</translation>
@@ -1013,6 +1015,7 @@
 <translation id="6757237461819837179">Neprehrávajú sa žiadne médiá</translation>
 <translation id="6777216307882431711">Napájajú sa pripojené zariadenia USB-C</translation>
 <translation id="6786750046913594791">Zatvoriť priečinok</translation>
+<translation id="6787595647772650851">Obnoviť poslednú reláciu</translation>
 <translation id="6790428901817661496">Prehrať</translation>
 <translation id="6801878137098616817">Nedávno upravené</translation>
 <translation id="6803622936009808957">Obraz na monitoroch sa nedá zrkadliť, pretože sa nenašli podporované rozlíšenia. Namiesto toho sa spustil režim rozšírenej pracovnej plochy.</translation>
@@ -1261,6 +1264,7 @@
 <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="8246282815785366524">Vitajte späť, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, sila signálu <ph name="SIGNAL_STRENGTH" />, batéria telefónu <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, aplikácia</translation>
 <translation id="8255234195843591763">Ak chcete aktualizovať, resetujte</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 7a93d194..0151ae3 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Prekini povezavo</translation>
 <translation id="4814539958450445987">Zaslon za prijavo</translation>
+<translation id="481455355267255546">Sledi</translation>
 <translation id="4831034276697007977">Ali ste prepričani, da želite izklopiti samodejne klike?</translation>
 <translation id="4849058404725798627">Označitev predmeta s fokusom na tipkovnici</translation>
 <translation id="485592688953820832">Brez dejanj (zaustavitev)</translation>
@@ -852,6 +853,7 @@
 <translation id="5860033963881614850">Izklopljeno</translation>
 <translation id="5860491529813859533">Vklopi</translation>
 <translation id="5867217927013474703">Zbiranje podatkov o omrežju</translation>
+<translation id="5867606971598166637">Skrbnik sistema nadzira vaše zaslone</translation>
 <translation id="5876666360658629066">Vnos kode starša</translation>
 <translation id="5881540930187678962">Nastavitve telefonsko središče pozneje</translation>
 <translation id="5887954372087850114">Okno <ph name="WINDOW_TITLE" /> je dodeljeno namizju <ph name="DESK_TITLE" /> in njegova dodelitev je preklicana za vsa druga namizja.</translation>
@@ -1013,6 +1015,7 @@
 <translation id="6757237461819837179">Predstavnost se ne predvaja</translation>
 <translation id="6777216307882431711">Napajanje povezanih naprav USB-C</translation>
 <translation id="6786750046913594791">Zapri mapo</translation>
+<translation id="6787595647772650851">Obnovi zadnjo sejo</translation>
 <translation id="6790428901817661496">Predvajanje</translation>
 <translation id="6801878137098616817">Nedavno urejeno</translation>
 <translation id="6803622936009808957">Zaslonov ni bilo mogoče zrcaliti, ker ni bilo najdene nobene podprte ločljivosti. Uporabljeno je razširjeno namizje.</translation>
@@ -1261,6 +1264,7 @@
 <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="8246282815785366524">Dobrodošli nazaj, <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, moč signala je <ph name="SIGNAL_STRENGTH" />, stanje baterije telefona je <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, aplikacija</translation>
 <translation id="8255234195843591763">Ponastavite, če želite posodobiti</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index f2610d9ce..283c456a 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -672,6 +672,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
 <translation id="4814539958450445987">Ekran za prijavljivanje</translation>
+<translation id="481455355267255546">Sledeće</translation>
 <translation id="4831034276697007977">Želite li stvarno da isključite automatske klikove?</translation>
 <translation id="4849058404725798627">Istakni objekat pomoću fokusa tastature</translation>
 <translation id="485592688953820832">Ništa se ne preduzima (pauziranje)</translation>
@@ -1014,6 +1015,7 @@
 <translation id="6757237461819837179">Mediji se ne reprodukuju</translation>
 <translation id="6777216307882431711">Napaja povezane uređaje sa USB priključkom tipa C</translation>
 <translation id="6786750046913594791">Zatvorite direktorijum</translation>
+<translation id="6787595647772650851">Vratite poslednju sesiju</translation>
 <translation id="6790428901817661496">Pusti</translation>
 <translation id="6801878137098616817">Nedavno izmenjeno</translation>
 <translation id="6803622936009808957">Nije moguće preslikati ekrane zato što nije pronađena nijedna podržana rezolucija. Umesto toga, prikazuje se proširena radna površina.</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 7f478d0..d5af5cb4 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -672,6 +672,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Прекини везу</translation>
 <translation id="4814539958450445987">Екран за пријављивање</translation>
+<translation id="481455355267255546">Следеће</translation>
 <translation id="4831034276697007977">Желите ли стварно да искључите аутоматске кликове?</translation>
 <translation id="4849058404725798627">Истакни објекат помоћу фокуса тастатуре</translation>
 <translation id="485592688953820832">Ништа се не предузима (паузирање)</translation>
@@ -1014,6 +1015,7 @@
 <translation id="6757237461819837179">Медији се не репродукују</translation>
 <translation id="6777216307882431711">Напаја повезане уређаје са USB прикључком типа C</translation>
 <translation id="6786750046913594791">Затворите директоријум</translation>
+<translation id="6787595647772650851">Вратите последњу сесију</translation>
 <translation id="6790428901817661496">Пусти</translation>
 <translation id="6801878137098616817">Недавно измењено</translation>
 <translation id="6803622936009808957">Није могуће пресликати екране зато што није пронађена ниједна подржана резолуција. Уместо тога, приказује се проширена радна површина.</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 92934a82..9652026 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -852,6 +852,7 @@
 <translation id="5860033963881614850">Av</translation>
 <translation id="5860491529813859533">Aktivera</translation>
 <translation id="5867217927013474703">Nätverksinformation samlas in</translation>
+<translation id="5867606971598166637">Systemadministratören övervakar dina skärmar</translation>
 <translation id="5876666360658629066">Ange föräldrakod</translation>
 <translation id="5881540930187678962">Konfigurera Phone Hub senare</translation>
 <translation id="5887954372087850114">Fönstret <ph name="WINDOW_TITLE" /> tilldelades <ph name="DESK_TITLE" /> och tilldelningen har tagits bort från alla andra skrivbord</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 48d1952..07fd07e2 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -1263,6 +1263,7 @@
 <translation id="8214996719228530800">Canary சேனல்</translation>
 <translation id="8219451629189078428">இந்தச் சமயத்தின்போது உங்கள் Chromebook ஆனில் இருப்பதுடன் பிளக் பாயிண்ட்டில் செருகப்பட்டிருக்கவும் வேண்டும். சார்ஜர், அடாப்டர் கேபிள்கள் போன்றவை உங்கள் Chromebook, பிளக் பாயிண்ட் ஆகிய இரண்டிலும் சரியாகச் செருகப்பட்டிருப்பதை உறுதிசெய்துகொள்ளவும். Chromebookகை ஆஃப் செய்ய வேண்டாம்.</translation>
 <translation id="8236042855478648955">இடைவேளைக்கான நேரம்</translation>
+<translation id="8246282815785366524">மீண்டும் வரவேற்கிறோம், <ph name="GIVEN_NAME" /></translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, சிக்னல் வலிமை: <ph name="SIGNAL_STRENGTH" />, மொபைல் பேட்டரி: <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />, ஆப்ஸ்</translation>
 <translation id="8255234195843591763">புதுப்பிக்க மீட்டமைக்கவும்</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index d6639c1..56591e1 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">ปิด</translation>
 <translation id="5860491529813859533">เปิด</translation>
 <translation id="5867217927013474703">กำลังรวบรวมข้อมูลเครือข่าย</translation>
+<translation id="5867606971598166637">ผู้ดูแลระบบกำลังตรวจสอบหน้าจอของคุณ</translation>
 <translation id="5876666360658629066">กรอกรหัสผู้ปกครอง</translation>
 <translation id="5881540930187678962">ตั้งค่าฮับโทรศัพท์ภายหลัง</translation>
 <translation id="5887954372087850114">กำหนดหน้าต่าง <ph name="WINDOW_TITLE" /> ให้กับ <ph name="DESK_TITLE" /> และยกเลิกการกำหนดจากเดสก์อื่นๆ ทั้งหมดแล้ว</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 8ea8b20..4ae5245 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -671,6 +671,7 @@
 <translation id="479989351350248267">ara</translation>
 <translation id="4804818685124855865">Bağlantıyı kes</translation>
 <translation id="4814539958450445987">Giriş Ekranı</translation>
+<translation id="481455355267255546">Sıradaki</translation>
 <translation id="4831034276697007977">Otomatik tıklamaları kapatmak istediğinizden emin misiniz?</translation>
 <translation id="4849058404725798627">Klavye odağının olduğu nesneyi vurgula</translation>
 <translation id="485592688953820832">İşlem yok (duraklat)</translation>
@@ -1013,6 +1014,7 @@
 <translation id="6757237461819837179">Medya oynatılmıyor</translation>
 <translation id="6777216307882431711">Bağlı USB-C cihazlarına güç sağlıyor</translation>
 <translation id="6786750046913594791">Klasörü kapat</translation>
+<translation id="6787595647772650851">Son oturumu geri yükle</translation>
 <translation id="6790428901817661496">Oynat</translation>
 <translation id="6801878137098616817">Yakın zamanda düzenlendi</translation>
 <translation id="6803622936009808957">Desteklenen bir çözünürlük bulunamadığı için ekranlar yansıtılamıyor. Bunun yerine genişletilmiş masaüstüne geçiliyor.</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index bcba909..54ef808 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -671,7 +671,7 @@
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">中斷連線</translation>
 <translation id="4814539958450445987">登入畫面</translation>
-<translation id="481455355267255546">即將到來的活動</translation>
+<translation id="481455355267255546">即將舉行的活動</translation>
 <translation id="4831034276697007977">確定要關閉自動點擊功能嗎?</translation>
 <translation id="4849058404725798627">突顯鍵盤焦點所在的物件</translation>
 <translation id="485592688953820832">不執行任何操作 (暫停)</translation>
@@ -1261,7 +1261,7 @@
 <translation id="8214996719228530800">Canary 版本</translation>
 <translation id="8219451629189078428">Chromebook 在這段期間需要保持開啟並接上電源。請確保充電器或適配器連接線完全插入 Chromebook 和電源插座。請勿關閉 Chromebook。</translation>
 <translation id="8236042855478648955">休息時間到了</translation>
-<translation id="8246282815785366524">歡迎回來,<ph name="GIVEN_NAME" /></translation>
+<translation id="8246282815785366524"><ph name="GIVEN_NAME" />,歡迎回來</translation>
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />,訊號強度係 <ph name="SIGNAL_STRENGTH" />,手機電量係 <ph name="BATTERY_STATUS" /></translation>
 <translation id="8247998213073982446"><ph name="APP_NAME" />,應用程式</translation>
 <translation id="8255234195843591763">重設以更新</translation>
diff --git a/base/allocator/partition_allocator/partition_alloc_base/component_export.h b/base/allocator/partition_allocator/partition_alloc_base/component_export.h
index f45840c..73fa5e3 100644
--- a/base/allocator/partition_allocator/partition_alloc_base/component_export.h
+++ b/base/allocator/partition_allocator/partition_alloc_base/component_export.h
@@ -56,6 +56,9 @@
   PA_COMPONENT_MACRO_SELECT_THIRD_ARGUMENT_(                              \
       PA_COMPONENT_MACRO_CONDITIONAL_COMMA_(condition), consequent, alternate)
 
+// MSVC workaround for __VA_ARGS__ expanding into one expression.
+#define PA_MSVC_EXPAND_ARG(arg) arg
+
 // Expands to a comma (,) iff its first argument expands to |1|. Used in
 // conjunction with |PA_COMPONENT_MACRO_SELECT_THIRD_ARGUMENT_()|, as the
 // presence or absense of an extra comma can be used to conditionally shift
@@ -70,7 +73,8 @@
 // |PA_COMPONENT_MACRO_CONDITIONAL_COMMA_()| above to implement conditional
 // macro expansion.
 #define PA_COMPONENT_MACRO_SELECT_THIRD_ARGUMENT_(...) \
-  PA_COMPONENT_MACRO_SELECT_THIRD_ARGUMENT_IMPL_(__VA_ARGS__)
+  PA_MSVC_EXPAND_ARG(                                  \
+      PA_COMPONENT_MACRO_SELECT_THIRD_ARGUMENT_IMPL_(__VA_ARGS__))
 #define PA_COMPONENT_MACRO_SELECT_THIRD_ARGUMENT_IMPL_(a, b, c, ...) c
 
 #endif  // BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_BASE_COMPONENT_EXPORT_H_
diff --git a/base/allocator/partition_allocator/reservation_offset_table.h b/base/allocator/partition_allocator/reservation_offset_table.h
index c835810..7a4476a 100644
--- a/base/allocator/partition_allocator/reservation_offset_table.h
+++ b/base/allocator/partition_allocator/reservation_offset_table.h
@@ -179,17 +179,21 @@
     return 0;
   uintptr_t reservation_start = ComputeReservationStart(address, offset_ptr);
 #if BUILDFLAG(PA_DCHECK_IS_ON)
-  // Make sure the reservation start is in the same pool as |address|.
-  // In the 32-bit mode, the beginning of a reservation may be excluded from the
-  // BRP pool, so shift the pointer. The other pools don't have this logic.
-  PA_DCHECK(is_in_brp_pool ==
-            IsManagedByPartitionAllocBRPPool(
-                reservation_start
+  // MSVC workaround: the preprocessor seems to choke on an `#if` embedded
+  // inside another macro (PA_DCHECK).
 #if !defined(PA_HAS_64_BITS_POINTERS)
-                + AddressPoolManagerBitmap::kBytesPer1BitOfBRPPoolBitmap *
-                      AddressPoolManagerBitmap::kGuardOffsetOfBRPPoolBitmap
+  constexpr size_t kBRPOffset =
+      AddressPoolManagerBitmap::kBytesPer1BitOfBRPPoolBitmap *
+      AddressPoolManagerBitmap::kGuardOffsetOfBRPPoolBitmap;
+#else
+  constexpr size_t kBRPOffset = 0ull;
 #endif  // !defined(PA_HAS_64_BITS_POINTERS)
-                ));
+  // Make sure the reservation start is in the same pool as |address|.
+  // In the 32-bit mode, the beginning of a reservation may be excluded
+  // from the BRP pool, so shift the pointer. The other pools don't have
+  // this logic.
+  PA_DCHECK(is_in_brp_pool ==
+            IsManagedByPartitionAllocBRPPool(reservation_start + kBRPOffset));
   PA_DCHECK(is_in_regular_pool ==
             IsManagedByPartitionAllocRegularPool(reservation_start));
   PA_DCHECK(*ReservationOffsetPointer(reservation_start) == 0);
diff --git a/chrome/VERSION b/chrome/VERSION
index 4cdcd7f..75388d0a 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=107
 MINOR=0
-BUILD=5255
+BUILD=5256
 PATCH=0
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantTabObscuringUtilChrome.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantTabObscuringUtilChrome.java
index 7cd4c06f..37148f0 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantTabObscuringUtilChrome.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantTabObscuringUtilChrome.java
@@ -6,7 +6,6 @@
 
 import org.chromium.chrome.browser.ui.TabObscuringHandler;
 import org.chromium.components.autofill_assistant.AssistantTabObscuringUtil;
-import org.chromium.ui.util.TokenHolder;
 /**
  * Implementation of {@link AssistantTabObscuringUtil} for Chrome.
  */
@@ -14,7 +13,7 @@
     private final TabObscuringHandler mTabObscuringHandler;
 
     /** A token held while the Autofill Assistant is obscuring all tabs. */
-    private int mObscuringToken = TokenHolder.INVALID_TOKEN;
+    private TabObscuringHandler.Token mObscuringToken;
 
     public AssistantTabObscuringUtilChrome(TabObscuringHandler tabObscuringHandler) {
         mTabObscuringHandler = tabObscuringHandler;
@@ -22,16 +21,17 @@
 
     @Override
     public void obscureAllTabs() {
-        if (mObscuringToken == TokenHolder.INVALID_TOKEN) {
-            mObscuringToken = mTabObscuringHandler.obscureAllTabs();
+        if (mObscuringToken == null) {
+            mObscuringToken =
+                    mTabObscuringHandler.obscure(TabObscuringHandler.Target.ALL_TABS_AND_TOOLBAR);
         }
     }
 
     @Override
     public void unobscureAllTabs() {
-        if (mObscuringToken != TokenHolder.INVALID_TOKEN) {
-            mTabObscuringHandler.unobscureAllTabs(mObscuringToken);
-            mObscuringToken = TokenHolder.INVALID_TOKEN;
+        if (mObscuringToken != null) {
+            mTabObscuringHandler.unobscure(mObscuringToken);
+            mObscuringToken = null;
         }
     }
 }
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb
index 6054e676..f95252f 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Искате ли да получавате сигнали за понижение на цените?</translation>
 <translation id="58326064309361797">Преместете с плъзгане разделите, за да ги групирате</translation>
 <translation id="5846292395804797011">Затваряне на групата с раздели „<ph name="TITLE_OF_GROUP" />“ с(ъс) <ph name="NUMBER_OF_TABS" /> раздела.</translation>
+<translation id="5972844218283131174">Премахване на избора от всички</translation>
 <translation id="6040143037577758943">Затваряне</translation>
 <translation id="6054741997831917303">Цената на този артикул наскоро бе намалена от <ph name="PREVIOUS_PRICE" /> на <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Избиране на раздели</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb
index 4669bebe..61fc5c58 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">¿Deseas recibir alertas de descuentos?</translation>
 <translation id="58326064309361797">Arrastra las pestañas para agruparlas</translation>
 <translation id="5846292395804797011">Cerrar el grupo <ph name="TITLE_OF_GROUP" />, el cual tiene <ph name="NUMBER_OF_TABS" /> pestañas</translation>
+<translation id="5972844218283131174">Anular la selección</translation>
 <translation id="6040143037577758943">Cerrar</translation>
 <translation id="6054741997831917303">El precio de este artículo recientemente bajó de <ph name="PREVIOUS_PRICE" /> a <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Seleccionar pestañas</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb
index d1f233cb..984dbc3 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Kas soovite hinnalanguste puhul märguandeid saada?</translation>
 <translation id="58326064309361797">Lohistage vahelehti, et neid grupeerida</translation>
 <translation id="5846292395804797011">Sule <ph name="NUMBER_OF_TABS" /> vahelehega grupp <ph name="TITLE_OF_GROUP" /></translation>
+<translation id="5972844218283131174">Tühista kõik valikud</translation>
 <translation id="6040143037577758943">Sulge</translation>
 <translation id="6054741997831917303">Selle üksuse hind <ph name="PREVIOUS_PRICE" /> langes hiljuti ja uus hind on <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Valige vahelehed</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
index cfd99a2..9ae11c86 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Makatanggap ng mga alerto para sa mga pagbaba sa presyo?</translation>
 <translation id="58326064309361797">I-drag ang mga tab para pagpangkatin ang mga ito</translation>
 <translation id="5846292395804797011">Isara ang grupong <ph name="TITLE_OF_GROUP" /> na may <ph name="NUMBER_OF_TABS" /> (na) tab</translation>
+<translation id="5972844218283131174">I-deselect lahat</translation>
 <translation id="6040143037577758943">Isara</translation>
 <translation id="6054741997831917303">Kamakailang bumaba ang presyo ng item na ito sa <ph name="NEW_PRICE" /> mula sa <ph name="PREVIOUS_PRICE" /></translation>
 <translation id="6193448654517602979">Pumili ng mga tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
index 58c0145..ba732855 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Szeretne értesítéseket kapni az árcsökkenésekről?</translation>
 <translation id="58326064309361797">A lapokat húzással csoportosíthatja</translation>
 <translation id="5846292395804797011">A következő, <ph name="NUMBER_OF_TABS" /> lapot tartalmazó csoport bezárása: <ph name="TITLE_OF_GROUP" /></translation>
+<translation id="5972844218283131174">Összes kijelölésének megszüntetése</translation>
 <translation id="6040143037577758943">Bezárás</translation>
 <translation id="6054741997831917303">A tétel ára nemrég csökkent. Régi ár: <ph name="PREVIOUS_PRICE" />, új ár: <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Lapok kiválasztása</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
index ce9f984..942ba69 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Dapatkan notifikasi untuk diskon?</translation>
 <translation id="58326064309361797">Tarik tab untuk mengelompokkannya</translation>
 <translation id="5846292395804797011">Tutup grup <ph name="TITLE_OF_GROUP" /> yang berisi <ph name="NUMBER_OF_TABS" /> tab</translation>
+<translation id="5972844218283131174">Batalkan semua pilihan</translation>
 <translation id="6040143037577758943">Tutup</translation>
 <translation id="6054741997831917303">Harga item ini baru-baru ini turun dari <ph name="PREVIOUS_PRICE" /> ke <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Pilih tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb
index 03288ff..1732fcc9 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">רוצה לקבל התראות על הנחות?</translation>
 <translation id="58326064309361797">ניתן לגרור כרטיסיות כדי לקבץ אותן</translation>
 <translation id="5846292395804797011">סגירה של הקבוצה <ph name="TITLE_OF_GROUP" /> עם <ph name="NUMBER_OF_TABS" /> כרטיסיות</translation>
+<translation id="5972844218283131174">ביטול הבחירה בכול הכרטיסיות</translation>
 <translation id="6040143037577758943">סגירה</translation>
 <translation id="6054741997831917303">המחיר של הפריט הזה ירד לאחרונה מ-<ph name="PREVIOUS_PRICE" /> ל-<ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">בחירת כרטיסיות</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
index b1cbe69..196ac485 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">ទទួលបានការជូនដំណឹងអំពីការធ្លាក់ថ្លៃឬ?</translation>
 <translation id="58326064309361797">អូសផ្ទាំង​នានា ដើម្បី​ដាក់ផ្ទាំង​ទាំងនោះ​ជាក្រុម</translation>
 <translation id="5846292395804797011">បិទក្រុម <ph name="TITLE_OF_GROUP" /> ដែលមាន <ph name="NUMBER_OF_TABS" />ផ្ទាំង</translation>
+<translation id="5972844218283131174">ដកការជ្រើសរើសទាំងអស់</translation>
 <translation id="6040143037577758943">បិទ</translation>
 <translation id="6054741997831917303">តម្លៃទំនិញនេះ​បានធ្លាក់ចុះ​ថ្មីៗនេះ​ពី <ph name="PREVIOUS_PRICE" /> ទៅ <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">ជ្រើសរើសផ្ទាំង</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
index 3f0b63f..c17f79a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">가격 인하 알림을 받으시겠습니까?</translation>
 <translation id="58326064309361797">탭을 드래그하여 그룹화하세요.</translation>
 <translation id="5846292395804797011">탭 <ph name="NUMBER_OF_TABS" />개가 포함된 <ph name="TITLE_OF_GROUP" /> 그룹 닫기</translation>
+<translation id="5972844218283131174">전체 선택 해제</translation>
 <translation id="6040143037577758943">닫기</translation>
 <translation id="6054741997831917303">상품 가격이 최근 인하됨, 기존 가격: <ph name="PREVIOUS_PRICE" />, 인하된 가격: <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">탭 선택</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
index 09f5ad72..9aaaaaa 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">ຮັບແຈ້ງເຕືອນການຫຼຸດລາຄາບໍ?</translation>
 <translation id="58326064309361797">ລາກແຖບເພື່ອຈັດກຸ່ມພວກມັນ</translation>
 <translation id="5846292395804797011">ປິດກຸ່ມ <ph name="TITLE_OF_GROUP" /> ທີ່ມີ <ph name="NUMBER_OF_TABS" /> ແຖບ</translation>
+<translation id="5972844218283131174">ເຊົາເລືອກທັງໝົດ</translation>
 <translation id="6040143037577758943">ປິດ</translation>
 <translation id="6054741997831917303">ລາຄາຂອງສິນຄ້ານນີ້ຫຼຸດລົງຈາກ <ph name="PREVIOUS_PRICE" /> ເປັນ <ph name="NEW_PRICE" /> ເມື່ອບໍ່ດົນມານີ້</translation>
 <translation id="6193448654517602979">ເລືອກແຖບ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
index 6e87e40..f72afa0a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Norite gauti įspėjimus apie sumažintas kainas?</translation>
 <translation id="58326064309361797">Vilkite skirtukus, kad juos sugrupuotumėte</translation>
 <translation id="5846292395804797011">Uždaryti grupę „<ph name="TITLE_OF_GROUP" />“, kurioje yra tiek skirtukų: <ph name="NUMBER_OF_TABS" /></translation>
+<translation id="5972844218283131174">Panaikinti visus pasirinkimus</translation>
 <translation id="6040143037577758943">Uždaryti</translation>
 <translation id="6054741997831917303">Šios prekės kaina neseniai sumažėjo nuo <ph name="PREVIOUS_PRICE" /> iki <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Pasirinkti skirtukus</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
index ff4d3a5..d7ffaa7 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">ମୂଲ୍ୟରେ ହ୍ରାସ ବିଷୟରେ ଆଲର୍ଟ ପାଇବେ?</translation>
 <translation id="58326064309361797">ସେଗୁଡ଼ିକର ଗୋଷ୍ଠୀ କରିବାକୁ ଟାବ୍‌ଗୁଡ଼ିକୁ ଟାଣନ୍ତୁ</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" />ଟି ଟାବ୍ ଥିବା <ph name="TITLE_OF_GROUP" /> ଗ୍ରୁପକୁ ବନ୍ଦ କରନ୍ତୁ</translation>
+<translation id="5972844218283131174">ସମସ୍ତ ଅଚୟନ କରନ୍ତୁ</translation>
 <translation id="6040143037577758943">ବନ୍ଦ</translation>
 <translation id="6054741997831917303">ଏହି ଆଇଟମର ମୂଲ୍ୟ ବର୍ତ୍ତମାନ <ph name="PREVIOUS_PRICE" />ରୁ <ph name="NEW_PRICE" />କୁ ହ୍ରାସ ପାଇଛି</translation>
 <translation id="6193448654517602979">ଟାବ୍‌ଗୁଡ଼ିକ ବାଛନ୍ତୁ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
index c1aa9d7..1ede534 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Chcesz otrzymywać alerty o obniżkach cen?</translation>
 <translation id="58326064309361797">Przeciągaj karty, by je grupować</translation>
 <translation id="5846292395804797011">Zamknij grupę <ph name="TITLE_OF_GROUP" /> z <ph name="NUMBER_OF_TABS" /> kartami</translation>
+<translation id="5972844218283131174">Odznacz wszystko</translation>
 <translation id="6040143037577758943">Zamknij</translation>
 <translation id="6054741997831917303">Ostatnio cena tego elementu spadła z <ph name="PREVIOUS_PRICE" /> do <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Wybierz karty</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
index d16430ea..9057ae2c 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">මිල පහත වැටීම් සඳහා ඇඟවීම් ලබා ගන්නද?</translation>
 <translation id="58326064309361797">පටිති කණ්ඩායම් කිරීමට ඒවා අදින්න</translation>
 <translation id="5846292395804797011"><ph name="TITLE_OF_GROUP" /> සමූහය ටැබ <ph name="NUMBER_OF_TABS" />ක් සමග දිග හරින්න</translation>
+<translation id="5972844218283131174">සියල්ල තේරීමෙන් ඉවත් කරන්න</translation>
 <translation id="6040143037577758943">වසන්න</translation>
 <translation id="6054741997831917303">මෙම අයිතමයෙහි මිල මෑතකදී <ph name="PREVIOUS_PRICE" /> සිට <ph name="NEW_PRICE" /> දක්වා පහත වැටී ඇත</translation>
 <translation id="6193448654517602979">පටිති තෝරන්න</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
index fce14413..f30c265 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Fiyat düşüşü uyarıları alınsın mı?</translation>
 <translation id="58326064309361797">Gruplandırmak için sekmeleri sürükleyin</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> sekmeli <ph name="TITLE_OF_GROUP" /> grubunu kapat</translation>
+<translation id="5972844218283131174">Tümünün seçimini kaldır</translation>
 <translation id="6040143037577758943">Kapat</translation>
 <translation id="6054741997831917303">Yakın zamanda bu ürünün <ph name="PREVIOUS_PRICE" /> olan fiyatı düştü ve <ph name="NEW_PRICE" /> oldu</translation>
 <translation id="6193448654517602979">Sekmeleri seçin</translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java
index e3a106f..4bfe2c8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java
@@ -244,10 +244,10 @@
     }
 
     @Override
-    public void updateObscured(boolean isObscured) {
+    public void updateObscured(boolean obscureTabContent, boolean obscureToolbar) {
         if (mTabModelWrapper == null) return;
 
-        int importantForAccessibility = !isObscured
+        int importantForAccessibility = !obscureTabContent
                 ? View.IMPORTANT_FOR_ACCESSIBILITY_AUTO
                 : View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS;
         if (mTabModelWrapper.getImportantForAccessibility() != importantForAccessibility) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
index a270f7d..d41248a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
@@ -1619,8 +1619,8 @@
     // TabObscuringHandler.Observer
 
     @Override
-    public void updateObscured(boolean isObscured) {
-        setFocusable(!isObscured);
+    public void updateObscured(boolean obscureTabContent, boolean obscureToolbar) {
+        setFocusable(!obscureTabContent);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
index 7cbcaa8..926d9a0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser.firstrun;
 
 import android.app.Activity;
+import android.content.res.Configuration;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.SystemClock;
@@ -621,7 +622,8 @@
 
     @Override
     public boolean canUseLandscapeLayout() {
-        return true;
+        return !getResources().getConfiguration().isLayoutSizeAtLeast(
+                Configuration.SCREENLAYOUT_SIZE_LARGE);
     }
 
     @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
index f40dc01..cf78ce8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
@@ -30,6 +30,8 @@
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.SigninManager;
 import org.chromium.chrome.browser.vr.VrModuleProvider;
+import org.chromium.components.crash.CrashKeyIndex;
+import org.chromium.components.crash.CrashKeys;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
@@ -282,6 +284,7 @@
         }
 
         Log.d(TAG, "Redirecting user through FRE.");
+        CrashKeys.getInstance().set(CrashKeyIndex.FIRST_RUN, "yes");
 
         // Launch the async restriction checking as soon as we know we'll be running FRE.
         FirstRunAppRestrictionInfo.startInitializationHint();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java
index ef6eadc..350224a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java
@@ -37,7 +37,6 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.UiUtils;
 import org.chromium.ui.modelutil.PropertyModel;
-import org.chromium.ui.util.TokenHolder;
 
 /**
  * This presenter creates tab modality by blocking interaction with select UI elements while a
@@ -81,7 +80,7 @@
     private boolean mShouldUpdateContainerLayoutParams;
 
     /** A token held while the dialog manager is obscuring all tabs. */
-    private int mTabObscuringToken;
+    private TabObscuringHandler.Token mTabObscuringToken;
 
     /**
      * Constructor for initializing dialog container.
@@ -108,7 +107,6 @@
         mBrowserControlsVisibilityManager = browserControlsVisibilityManager;
         mBrowserControlsVisibilityManager.addObserver(this);
         mVisibilityDelegate = new TabModalBrowserControlsVisibilityDelegate();
-        mTabObscuringToken = TokenHolder.INVALID_TOKEN;
         mContextualSearchManagerSupplier = contextualSearchManagerSupplier;
         mTabModelSelector = tabModelSelector;
     }
@@ -181,8 +179,9 @@
         } else {
             mRunEnterAnimationOnCallback = true;
         }
-        assert mTabObscuringToken == TokenHolder.INVALID_TOKEN;
-        mTabObscuringToken = mTabObscuringHandlerSupplier.get().obscureAllTabs();
+        assert mTabObscuringToken == null;
+        mTabObscuringToken =
+                mTabObscuringHandlerSupplier.get().obscure(TabObscuringHandler.Target.TAB_CONTENT);
     }
 
     @Override
@@ -231,8 +230,8 @@
     @Override
     protected void removeDialogView(PropertyModel model) {
         mRunEnterAnimationOnCallback = false;
-        mTabObscuringHandlerSupplier.get().unobscureAllTabs(mTabObscuringToken);
-        mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+        mTabObscuringHandlerSupplier.get().unobscure(mTabObscuringToken);
+        mTabObscuringToken = null;
         super.removeDialogView(model);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java
index 881d8c9..fdc197f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java
@@ -31,7 +31,6 @@
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.payments.mojom.PaymentEventResponseType;
 import org.chromium.ui.modelutil.PropertyModel;
-import org.chromium.ui.util.TokenHolder;
 import org.chromium.url.GURL;
 
 import java.lang.annotation.Retention;
@@ -64,7 +63,7 @@
     private final ActivityStateListener mActivityStateListener;
 
     /** A token held while the payment sheet is obscuring all visible tabs. */
-    private int mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+    private TabObscuringHandler.Token mTabObscuringToken;
 
     @IntDef({CloseReason.OTHERS, CloseReason.USER, CloseReason.ACTIVITY_DIED,
             CloseReason.INSECURE_NAVIGATION, CloseReason.FAIL_LOAD})
@@ -159,11 +158,12 @@
      * @param obscure Whether to obscure all tabs.
      */
     private void setObscureState(boolean obscure) {
-        if (obscure && mTabObscuringToken == TokenHolder.INVALID_TOKEN) {
-            mTabObscuringToken = mTabObscuringHandler.obscureAllTabs();
-        } else if (!obscure && mTabObscuringToken != TokenHolder.INVALID_TOKEN) {
-            mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken);
-            mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+        if (obscure && mTabObscuringToken == null) {
+            mTabObscuringToken =
+                    mTabObscuringHandler.obscure(TabObscuringHandler.Target.ALL_TABS_AND_TOOLBAR);
+        } else if (!obscure && mTabObscuringToken != null) {
+            mTabObscuringHandler.unobscure(mTabObscuringToken);
+            mTabObscuringToken = null;
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/OWNERS
index a9b30d3..349911c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/OWNERS
@@ -1,3 +1,5 @@
 dullweber@chromium.org
 twellington@chromium.org
 andzaytsev@google.com
+
+per-file *IncognitoLockSettings*=file://chrome/browser/incognito/OWNERS
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/AccessibilityVisibilityHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/AccessibilityVisibilityHandler.java
index 93b5539..5ee6d156 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/AccessibilityVisibilityHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/AccessibilityVisibilityHandler.java
@@ -31,7 +31,8 @@
 
             @Override
             public void onContentChanged(Tab tab) {
-                mTab.updateObscured(tabObscuringHandler.areAllTabsObscured());
+                mTab.updateObscured(tabObscuringHandler.isTabContentObscured(),
+                        tabObscuringHandler.isToolbarObscured());
             }
         };
         lifecycleDispatcher.register(this);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
index 31d7fde3..2e85a8a1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -819,13 +819,13 @@
     // TabObscuringHandler.Observer
 
     @Override
-    public void updateObscured(boolean isObscured) {
+    public void updateObscured(boolean obscureTabContent, boolean obscureToolbar) {
         // Update whether or not the current native tab and/or web contents are
         // currently visible (from an accessibility perspective), or whether
         // they're obscured by another view.
         View view = getView();
         if (view != null) {
-            int importantForAccessibility = isObscured
+            int importantForAccessibility = obscureTabContent
                     ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
                     : View.IMPORTANT_FOR_ACCESSIBILITY_YES;
             if (view.getImportantForAccessibility() != importantForAccessibility) {
@@ -836,7 +836,7 @@
 
         WebContentsAccessibility wcax = getWebContentsAccessibility(getWebContents());
         if (wcax != null) {
-            boolean isWebContentObscured = isObscured || isShowingCustomView();
+            boolean isWebContentObscured = obscureTabContent || isShowingCustomView();
             wcax.setObscuredByAnotherView(isWebContentObscured);
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index e46e7467..62f817b9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -184,7 +184,8 @@
  * with the rest of the application to ensure the toolbar is always visually up to date.
  */
 public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserver, TintObserver,
-                                       MenuButtonDelegate, ChromeAccessibilityUtil.Observer {
+                                       MenuButtonDelegate, ChromeAccessibilityUtil.Observer,
+                                       TabObscuringHandler.Observer {
     private final IncognitoStateProvider mIncognitoStateProvider;
     private final TabCountProvider mTabCountProvider;
     private final TopUiThemeColorProvider mTopUiThemeColorProvider;
@@ -258,6 +259,7 @@
     private final Supplier<Boolean> mIsWarmOnResumeSupplier;
     private final TabContentManager mTabContentManager;
     private final TabCreatorManager mTabCreatorManager;
+    private final TabObscuringHandler mTabObscuringHandler;
     private final SnackbarManager mSnackbarManager;
     private final OneshotSupplier<TabReparentingController> mTabReparentingControllerSupplier;
 
@@ -272,7 +274,6 @@
 
     private boolean mTabRestoreCompleted;
 
-
     private boolean mInitializedWithNative;
     private Runnable mOnInitializedRunnable;
     private Runnable mMenuStateObserver;
@@ -312,7 +313,7 @@
     private static class TabObscuringCallback implements Callback<Boolean> {
         private final TabObscuringHandler mTabObscuringHandler;
         /** A token held while the toolbar/omnibox is obscuring all visible tabs. */
-        private int mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+        private TabObscuringHandler.Token mTabObscuringToken;
         public TabObscuringCallback(TabObscuringHandler handler) {
             mTabObscuringHandler = handler;
         }
@@ -323,14 +324,15 @@
                 // It's possible for the scrim to unfocus and refocus without the
                 // visibility actually changing. In this case we have to make sure we
                 // unregister the previous token before acquiring a new one.
-                int oldToken = mTabObscuringToken;
-                mTabObscuringToken = mTabObscuringHandler.obscureAllTabs();
-                if (oldToken != TokenHolder.INVALID_TOKEN) {
-                    mTabObscuringHandler.unobscureAllTabs(oldToken);
+                TabObscuringHandler.Token oldToken = mTabObscuringToken;
+                mTabObscuringToken =
+                        mTabObscuringHandler.obscure(TabObscuringHandler.Target.TAB_CONTENT);
+                if (oldToken != null) {
+                    mTabObscuringHandler.unobscure(oldToken);
                 }
             } else {
-                mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken);
-                mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+                mTabObscuringHandler.unobscure(mTabObscuringToken);
+                mTabObscuringToken = null;
             }
         }
     };
@@ -442,6 +444,7 @@
         mIsWarmOnResumeSupplier = isWarmOnResumeSupplier;
         mTabContentManager = tabContentManager;
         mTabCreatorManager = tabCreatorManager;
+        mTabObscuringHandler = tabObscuringHandler;
         mSnackbarManager = snackbarManager;
         mTabReparentingControllerSupplier = tabReparentingControllerSupplier;
         mEphemeralTabCoordinatorSupplier = ephemeralTabCoordinatorSupplier;
@@ -602,6 +605,8 @@
 
         mActionModeController.setTabStripHeight(mToolbar.getTabStripHeight());
 
+        tabObscuringHandler.addObserver(this);
+
         if (isCustomTab) {
             CustomTabToolbar customTabToolbar = ((CustomTabToolbar) toolbarLayout);
             mLocationBar = customTabToolbar.createLocationBar(mLocationBarModel,
@@ -644,8 +649,7 @@
         if (mLocationBar.getOmniboxStub() != null) {
             mLocationBar.getOmniboxStub().addUrlFocusChangeListener(this);
         }
-        Runnable clickDelegate =
-                () -> setUrlBarFocus(false, OmniboxFocusReason.UNFOCUS);
+        Runnable clickDelegate = () -> setUrlBarFocus(false, OmniboxFocusReason.UNFOCUS);
         View scrimTarget = mCompositorViewHolder;
         mLocationBarFocusHandler = new LocationBarFocusScrimHandler(scrimCoordinator,
                 new TabObscuringCallback(tabObscuringHandler), /* context= */ activity,
@@ -992,6 +996,13 @@
         TraceEvent.end("ToolbarManager.ToolbarManager");
     }
 
+    @Override
+    public void updateObscured(boolean obscureTabContent, boolean obscureToolbar) {
+        mControlContainer.setImportantForAccessibility(obscureToolbar
+                        ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                        : View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+    }
+
     /**
      * Set container view on which GTS toolbar needs to inflate.
      * @param containerView view containing GTS fullscreen toolbar.
@@ -1562,6 +1573,8 @@
             mStartSurfaceHeaderOffsetChangeListener = null;
         }
 
+        mTabObscuringHandler.removeObserver(this);
+
         mActivity.unregisterComponentCallbacks(mComponentCallbacks);
         mComponentCallbacks = null;
         ChromeAccessibilityUtil.get().removeObserver(this);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomSheetManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomSheetManager.java
index a8e76b4a..9962e5ee 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomSheetManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomSheetManager.java
@@ -97,7 +97,7 @@
     private TabObscuringHandler mTabObscuringHandler;
 
     /** A token held while the bottom sheet is obscuring all visible tabs. */
-    private int mTabObscuringToken;
+    private TabObscuringHandler.Token mTabObscuringToken;
 
     /** The manager for overlay panels to attach listeners to. */
     private Supplier<OverlayPanelManager> mOverlayPanelManager;
@@ -135,7 +135,6 @@
         mDialogManager = dialogManager;
         mSnackbarManager = snackbarManagerSupplier;
         mTabObscuringHandler = obscuringDelegate;
-        mTabObscuringToken = TokenHolder.INVALID_TOKEN;
         mOmniboxFocusStateSupplier = omniboxFocusStateSupplier;
         mOverlayPanelManager = overlayManager;
         mCallbackController = new CallbackController();
@@ -418,11 +417,12 @@
      */
     private void setIsObscuringAllTabs(boolean isObscuring) {
         if (isObscuring) {
-            assert mTabObscuringToken == TokenHolder.INVALID_TOKEN;
-            mTabObscuringToken = mTabObscuringHandler.obscureAllTabs();
+            assert mTabObscuringToken == null;
+            mTabObscuringToken =
+                    mTabObscuringHandler.obscure(TabObscuringHandler.Target.ALL_TABS_AND_TOOLBAR);
         } else {
-            mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken);
-            mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+            mTabObscuringHandler.unobscure(mTabObscuringToken);
+            mTabObscuringToken = null;
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/TabObscuringHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/TabObscuringHandler.java
index 85dce8c..21d854a7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/TabObscuringHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/TabObscuringHandler.java
@@ -7,28 +7,58 @@
 import org.chromium.base.ObserverList;
 import org.chromium.ui.util.TokenHolder;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
- * Passes around the ability to set a view that is obscuring all tabs.
+ * Passes around the ability to set a view that is obscuring all tabs and optionally also the
+ * toolbar.
  */
 public class TabObscuringHandler {
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Target {
+        // Specifies that only the web content is covered or obscured.
+        int TAB_CONTENT = 1;
+        // Specifies that the whole screen including the top toolbar container is covered or
+        // obscured.
+        int ALL_TABS_AND_TOOLBAR = 2;
+    }
+
+    /**
+     * Represents a view that obscured a tab.
+     */
+    public static final class Token {
+        private final @Target int mTarget;
+        private final int mToken;
+
+        private Token(@Target int target, int token) {
+            assert token != TokenHolder.INVALID_TOKEN;
+            this.mTarget = target;
+            this.mToken = token;
+        }
+    }
+
     /**
      * Interface for the observers of the tab-obscuring state change.
      */
     public interface Observer {
         /**
-         * @param isObscured {@code true} if the observer is obscured by another view.
+         * @param obscureTabContent {@code true} if tabs are obscured by another view.
+         * @param obscureToolbar {@code true} if the top toolbar is obscured by another view.
          */
-        void updateObscured(boolean isObscured);
+        void updateObscured(boolean obscureTabContent, boolean obscureToolbar);
     }
 
     /** A mechanism for distributing unique tokens to users of this system. */
-    private final TokenHolder mTokenHolder;
+    private final TokenHolder mTabContentTokenHolder;
+    private final TokenHolder mAllTabsAndToolbarTokenHolder;
 
     private final ObserverList<Observer> mVisibilityObservers = new ObserverList<>();
 
     /** Default constructor */
     public TabObscuringHandler() {
-        mTokenHolder = new TokenHolder(this::notifyUpdate);
+        mTabContentTokenHolder = new TokenHolder(this::notifyUpdate);
+        mAllTabsAndToolbarTokenHolder = new TokenHolder(this::notifyUpdate);
     }
 
     /**
@@ -38,24 +68,45 @@
      * @return A token to hold while the feature is obscuring all tabs. This token is required to
      *         un-obscure the tabs.
      */
-    public int obscureAllTabs() {
-        return mTokenHolder.acquireToken();
+    public Token obscure(@Target int target) {
+        int token = TokenHolder.INVALID_TOKEN;
+        switch (target) {
+            case Target.TAB_CONTENT:
+                token = mTabContentTokenHolder.acquireToken();
+                break;
+            case Target.ALL_TABS_AND_TOOLBAR:
+                token = mAllTabsAndToolbarTokenHolder.acquireToken();
+                break;
+        }
+        return new Token(target, token);
     }
 
     /**
      * Remove a feature that previously obscured the content of all tabs.
      *
      * @param token The unique token that identified the feature (acquired in
-     *              {@link #obscureAllTabs()}.
+     *              {@link #obscure(int)} ()}.
      */
-    public void unobscureAllTabs(int token) {
-        assert token != TokenHolder.INVALID_TOKEN;
-        mTokenHolder.releaseToken(token);
+    public void unobscure(Token token) {
+        assert token != null;
+        switch (token.mTarget) {
+            case Target.TAB_CONTENT:
+                mTabContentTokenHolder.releaseToken(token.mToken);
+                break;
+            case Target.ALL_TABS_AND_TOOLBAR:
+                mAllTabsAndToolbarTokenHolder.releaseToken(token.mToken);
+                break;
+        }
     }
 
     /** @return Whether or not any features obscure all tabs. */
-    public boolean areAllTabsObscured() {
-        return mTokenHolder.hasTokens();
+    public boolean isTabContentObscured() {
+        return mTabContentTokenHolder.hasTokens() || mAllTabsAndToolbarTokenHolder.hasTokens();
+    }
+
+    /** @return Whether or not any features is obscuring the toolbar. */
+    public boolean isToolbarObscured() {
+        return mAllTabsAndToolbarTokenHolder.hasTokens();
     }
 
     /**
@@ -79,7 +130,7 @@
      */
     private void notifyUpdate() {
         for (Observer observer : mVisibilityObservers) {
-            observer.updateObscured(mTokenHolder.hasTokens());
+            observer.updateObscured(isTabContentObscured(), isToolbarObscured());
         }
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeModalDialogTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeModalDialogTestUtils.java
index 565a3f51..9971808 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeModalDialogTestUtils.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeModalDialogTestUtils.java
@@ -18,11 +18,13 @@
     /**
      * Checks whether the browser controls and tab obscured state is appropriately set.
      * @param activity The activity to use to query for appropriate state
-     * @param restricted If true, the menu should be enabled and the tabs should be obscred.
+     * @param restricted If true, the menu should be enabled and the tabs should be obscured.
      */
     public static void checkBrowserControls(ChromeActivity activity, boolean restricted) {
-        boolean isViewObscuringAllTabs = TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> activity.getTabObscuringHandler().areAllTabsObscured());
+        boolean isViewObscuringTabContent = TestThreadUtils.runOnUiThreadBlockingNoException(
+                () -> activity.getTabObscuringHandler().isTabContentObscured());
+        boolean isViewObscuringToolbar = TestThreadUtils.runOnUiThreadBlockingNoException(
+                () -> activity.getTabObscuringHandler().isToolbarObscured());
         boolean isMenuEnabled = TestThreadUtils.runOnUiThreadBlockingNoException(() -> {
             View menu = activity.getToolbarManager().getMenuButtonView();
             Assert.assertNotNull("Toolbar menu is incorrectly null.", menu);
@@ -30,11 +32,13 @@
         });
 
         if (restricted) {
-            Assert.assertTrue("All tabs should be obscured", isViewObscuringAllTabs);
+            Assert.assertTrue("All tabs should be obscured", isViewObscuringTabContent);
             Assert.assertFalse("Menu is incorrectly enabled.", isMenuEnabled);
         } else {
-            Assert.assertFalse("Tabs shouldn't be obscured", isViewObscuringAllTabs);
+            Assert.assertFalse("Tabs shouldn't be obscured", isViewObscuringTabContent);
             Assert.assertTrue("Menu is incorrectly disabled.", isMenuEnabled);
         }
+        Assert.assertFalse(
+                "Tab modal dialogs should never obscure the toolbar.", isViewObscuringToolbar);
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java
index fa910d9..de699bc 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java
@@ -27,9 +27,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.accounts.AccountManager;
 import android.app.Activity;
-import android.content.Intent;
 import android.content.res.Configuration;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -782,19 +780,13 @@
     @Test
     @MediumTest
     public void testFragmentWhenAddingAnotherAccount() {
+        mSigninTestRule.setResultForNextAddAccountFlow(Activity.RESULT_OK, TEST_EMAIL2);
         mSigninTestRule.addAccount(TEST_EMAIL1, FULL_NAME1, GIVEN_NAME1, null);
         launchActivityWithFragment();
+
         onView(withText(TEST_EMAIL1)).perform(click());
         onView(withText(R.string.signin_add_account_to_device)).perform(click());
 
-        Intent data = new Intent();
-        data.putExtra(AccountManager.KEY_ACCOUNT_NAME, TEST_EMAIL2);
-        TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> mFragment.onActivityResult(
-                                SigninFirstRunFragment.ADD_ACCOUNT_REQUEST_CODE, Activity.RESULT_OK,
-                                data));
-
         checkFragmentWithSelectedAccount(TEST_EMAIL2, /* fullName= */ null, /* givenName= */ null);
         verify(mFirstRunPageDelegateMock)
                 .recordFreProgressHistogram(MobileFreProgress.WELCOME_ADD_ACCOUNT);
@@ -803,16 +795,10 @@
     @Test
     @MediumTest
     public void testFragmentWhenAddingDefaultAccount() {
+        mSigninTestRule.setResultForNextAddAccountFlow(Activity.RESULT_OK, TEST_EMAIL1);
         launchActivityWithFragment();
-        onView(withText(R.string.signin_add_account_to_device)).perform(click());
 
-        Intent data = new Intent();
-        data.putExtra(AccountManager.KEY_ACCOUNT_NAME, TEST_EMAIL1);
-        TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> mFragment.onActivityResult(
-                                SigninFirstRunFragment.ADD_ACCOUNT_REQUEST_CODE, Activity.RESULT_OK,
-                                data));
+        onView(withText(R.string.signin_add_account_to_device)).perform(click());
 
         checkFragmentWithSelectedAccount(TEST_EMAIL1, /* fullName= */ null, /* givenName= */ null);
         verify(mFirstRunPageDelegateMock)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
index ac24487..78302f5 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
@@ -18,6 +18,7 @@
 import static org.mockito.Mockito.when;
 
 import android.accounts.Account;
+import android.app.Activity;
 import android.os.Bundle;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.runner.lifecycle.Stage;
@@ -234,6 +235,7 @@
     @Feature("RenderTest")
     @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
     public void testSyncConsentFragmentNewAccount() throws IOException {
+        mSigninTestRule.setResultForNextAddAccountFlow(Activity.RESULT_CANCELED, null);
         mSyncConsentActivity = ActivityTestUtils.waitForActivity(
                 InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
                     SyncConsentActivityLauncherImpl.get().launchActivityForPromoAddAccountFlow(
@@ -601,6 +603,7 @@
     public void testSyncConsentFragmentWithDefaultFlow() {
         HistogramDelta settingsHistogram =
                 new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.SETTINGS);
+        mSigninTestRule.setResultForNextAddAccountFlow(Activity.RESULT_CANCELED, null);
         mSyncConsentActivity = ActivityTestUtils.waitForActivity(
                 InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
                     SyncConsentActivityLauncherImpl.get().launchActivityForPromoAddAccountFlow(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java
index 31e8a428..c0c5f86 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java
@@ -100,19 +100,19 @@
 
         assertNull("The scrim should be null.", scrimCoordinator.getViewForTesting());
         assertFalse("All tabs should not currently be obscured.",
-                activity.getTabObscuringHandler().areAllTabsObscured());
+                activity.getTabObscuringHandler().isTabContentObscured());
 
         ThreadUtils.runOnUiThreadBlocking(() -> toolbarManager.setUrlBarFocus(true, 0));
 
         assertNotNull("The scrim should not be null.", scrimCoordinator.getViewForTesting());
         assertTrue("All tabs should currently be obscured.",
-                activity.getTabObscuringHandler().areAllTabsObscured());
+                activity.getTabObscuringHandler().isTabContentObscured());
 
         ThreadUtils.runOnUiThreadBlocking(() -> toolbarManager.setUrlBarFocus(false, 0));
 
         assertNull("The scrim should be null.", scrimCoordinator.getViewForTesting());
         assertFalse("All tabs should not currently be obscured.",
-                activity.getTabObscuringHandler().areAllTabsObscured());
+                activity.getTabObscuringHandler().isTabContentObscured());
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetTest.java
index 940a047f..c91c772 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetTest.java
@@ -153,22 +153,27 @@
         CallbackHelper obscuringStateChangedHelper = new CallbackHelper();
         TabObscuringHandler handler = mTestRule.getActivity().getTabObscuringHandler();
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            handler.addObserver((isObscured) -> obscuringStateChangedHelper.notifyCalled());
+            handler.addObserver(
+                    (isTabObscured,
+                            isToolbarObscured) -> obscuringStateChangedHelper.notifyCalled());
         });
         mHighPriorityContent.setHasCustomScrimLifecycle(false);
 
-        assertFalse("The tab should not yet be obscured.", handler.areAllTabsObscured());
+        assertFalse("The tab should not yet be obscured.", handler.isTabContentObscured());
+        assertFalse("The toolbar should not yet be obscured.", handler.isToolbarObscured());
 
         int callCount = obscuringStateChangedHelper.getCallCount();
         showContent(mHighPriorityContent, SheetState.HALF);
         obscuringStateChangedHelper.waitForCallback("The tab should be obscured.", callCount);
-        assertTrue("The tab should be obscured.", handler.areAllTabsObscured());
+        assertTrue("The tab should be obscured.", handler.isTabContentObscured());
+        assertTrue("The toolbar should be obscured.", handler.isToolbarObscured());
 
         callCount = obscuringStateChangedHelper.getCallCount();
         hideSheet();
         obscuringStateChangedHelper.waitForCallback("The tab should not be obscured.", callCount);
 
-        assertFalse("The tab should not be obscured.", handler.areAllTabsObscured());
+        assertFalse("The tab should not be obscured.", handler.isTabContentObscured());
+        assertFalse("The toolbar should not yet be obscured.", handler.isToolbarObscured());
     }
 
     @Test
@@ -177,14 +182,16 @@
         CallbackHelper obscuringStateChangedHelper = new CallbackHelper();
         TabObscuringHandler handler = mTestRule.getActivity().getTabObscuringHandler();
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            handler.addObserver((isObscured) -> obscuringStateChangedHelper.notifyCalled());
+            handler.addObserver(
+                    (isTabObscured,
+                            isToolbarObscured) -> obscuringStateChangedHelper.notifyCalled());
         });
         mHighPriorityContent.setHasCustomScrimLifecycle(true);
 
-        assertFalse("The tab should not be obscured.", handler.areAllTabsObscured());
+        assertFalse("The tab should not be obscured.", handler.isTabContentObscured());
 
         showContent(mHighPriorityContent, SheetState.HALF);
-        assertFalse("The tab should still not be obscured.", handler.areAllTabsObscured());
+        assertFalse("The tab should still not be obscured.", handler.isTabContentObscured());
 
         hideSheet();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/test/smoke/OWNERS b/chrome/android/javatests/src/org/chromium/chrome/test/smoke/OWNERS
index ca2de04..b18865e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/test/smoke/OWNERS
+++ b/chrome/android/javatests/src/org/chromium/chrome/test/smoke/OWNERS
@@ -1,3 +1,2 @@
 agrieve@chromium.org
-aluo@chromium.org
 tiborg@chromium.org
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
index 17362dd..afd9d038 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
@@ -23,6 +23,7 @@
 import org.json.JSONArray;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestRule;
@@ -1043,7 +1044,9 @@
     /**
      * Test that an upgrade is not requested when the Web Manifest did not change and the Web
      * Manifest scope is empty.
+     * TODO(crbug.com/1306225): Re-enable test.
      */
+    @Ignore
     @Test
     public void testManifestEmptyScopeShouldNotUpgrade() {
         ManifestData oldData = defaultManifestData();
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 5c8e464..ab92de13 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -4499,9 +4499,6 @@
         <message name="IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS" desc="Permission string for access to data on all websites.">
           Read and change all your data on all websites
         </message>
-        <message name="IDS_EXTENSION_PROMPT_WARNING_CURRENT_HOST" desc="Permission string for access to data on current website.">
-          Read and change all your data on the current website when invoked
-        </message>
         <message name="IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS_READ_ONLY" desc="Permission string for read-only access to data on all websites.">
           Read all your data on all websites
         </message>
diff --git a/chrome/app/profiles_strings.grdp b/chrome/app/profiles_strings.grdp
index a3d0d85..d3a7e4d 100644
--- a/chrome/app/profiles_strings.grdp
+++ b/chrome/app/profiles_strings.grdp
@@ -508,6 +508,9 @@
     <message name="IDS_PROFILE_CUSTOMIZATION_LOCAL_PROFILE_CREATION_TITLE" desc="Title of the profile customization dialog for local profile creation (user is not signed-in)">
       Welcome!
     </message>
+    <message name="IDS_PROFILE_CUSTOMIZATION_AVATAR_SELECTION_BACK_BUTTON_LABEL" desc="Accessibility label for the Back icon button on the avatar selection dialog in the profile customization when the back icon is focused and is not rendered.">
+      Back from avatar selection page
+    </message>
 
     <!-- Enterprise profile welcome screen -->
     <message name="IDS_ENTERPRISE_PROFILE_WELCOME_TITLE" desc="Title of the enteprise profile welcome screen. It is part of the profile creation flow, shown after sign-in to enterprise users.">
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_CUSTOMIZATION_AVATAR_SELECTION_BACK_BUTTON_LABEL.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_CUSTOMIZATION_AVATAR_SELECTION_BACK_BUTTON_LABEL.png.sha1
new file mode 100644
index 0000000..2d810f2
--- /dev/null
+++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_CUSTOMIZATION_AVATAR_SELECTION_BACK_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@
+bdd2c5cb169777df60fa4cefb4b17567f02f9906
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 15ef3f3..42fd983 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -726,6 +726,7 @@
 <translation id="1676902103953506022">Eiebewysbesonderhede vir <ph name="USERNAME" /> op <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Kan nie <ph name="EXTENSION_TYPE_PARAMETER" /> byvoeg nie</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> oor</translation>
+<translation id="1678794218766467608">Sluit in slaapmodus of wanneer deksel toe is</translation>
 <translation id="1679068421605151609">Ontwikkelaarsnutsgoed</translation>
 <translation id="1679810534535368772">Is jy seker jy wil uitgaan?</translation>
 <translation id="167983332380191032">Bestuurdiens het HTTP-fout gestuur.</translation>
@@ -3805,6 +3806,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> kon nie in 'n alternatiewe blaaier oopmaak nie. Kontak asseblief jou stelseladministrateur.</translation>
 <translation id="4589713469967853491">Loglêers is suksesvol in Aflaaie-gids geskryf.</translation>
 <translation id="4590324241397107707">Databasisberging</translation>
+<translation id="459204634473266369">Geen toestelle na <ph name="PRIMARY_EMAIL" /> gestoor nie</translation>
 <translation id="4592891116925567110">Stilussketsprogram</translation>
 <translation id="4593021220803146968">Gaan na <ph name="URL" /></translation>
 <translation id="4594577641390224176">Soek jy na die stelsel se Meer Oor Bladsy? Besoek</translation>
@@ -4363,6 +4365,7 @@
 <translation id="5155327081870541046">Voer die kortpad vir die werf wat jy wil deursoek, soos "@boekmerke", by die adresbalk in. Druk dan jou voorkeurkortpadsleutel en voer jou soekterm in.</translation>
 <translation id="5156638757840305347">Skermpyltjie word gemerk wanneer dit verskyn of beweeg</translation>
 <translation id="5157635116769074044">Speld hierdie bladsy aan die beginskerm vas …</translation>
+<translation id="5158206172605340248">Aksentmerkkieslys is toegemaak.</translation>
 <translation id="5159094275429367735">Stel Crostini op</translation>
 <translation id="5159419673777902220">Jou ouer het uitbreidingtoestemmings gedeaktiveer</translation>
 <translation id="5159643365935452998">Gaan outomatiese dataskoonmaak na</translation>
@@ -6492,6 +6495,7 @@
 <translation id="7235716375204803342">Gaan haal tans aktiwiteite …</translation>
 <translation id="7235737137505019098">Jou sekuriteitsleutel het nie genoeg berging vir nog rekeninge nie.</translation>
 <translation id="7235873936132740888">Werwe kan spesiale take hanteer wanneer jy op sekere soorte skakels klik, soos om 'n nuwe boodskap in jou e-poskliënt te skep of nuwe geleenthede op jou aanlyn kalender by te voeg</translation>
+<translation id="7238609589076576185">Aksentmerk is ingevoeg.</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> het die oordrag gekanselleer</translation>
 <translation id="7240339475467890413">Koppel aan nuwe warmkol?</translation>
 <translation id="7241389281993241388">Meld asseblief by <ph name="TOKEN_NAME" /> aan om die kliëntsertifikaat in te voer.</translation>
@@ -7333,6 +7337,7 @@
 <translation id="8030852056903932865">Keur goed</translation>
 <translation id="8032244173881942855">Kan nie oortjie uitsaai nie.</translation>
 <translation id="8032569120109842252">Volg tans</translation>
+<translation id="8033023935541439900">Aksentmerkkieslys is oop. Druk links of regs om te navigeer en Enter om in te voeg.</translation>
 <translation id="8033827949643255796">gekies</translation>
 <translation id="8033958968890501070">Uittelling</translation>
 <translation id="8035059678007243127">Incognito-terug-vorentoe-kasgegeue-bladsy: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index f6e1024..c576c64 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -5294,6 +5294,7 @@
 <translation id="6065289257230303064">Атрибути за директорията на субекта на сертификата</translation>
 <translation id="6066794465984119824">Хеш стойността на изображението не е зададена</translation>
 <translation id="6069464830445383022">Влизате в Chromebook с профила си в Google</translation>
+<translation id="6070311415473175157">Изберете област на изображението за търсене</translation>
 <translation id="6071181508177083058">потвърждаване на паролата</translation>
 <translation id="6071576563962215370">Системата не успя да заключи атрибутите за времето за инсталиране за устройството.</translation>
 <translation id="6072442788591997866">Използването на <ph name="APP_NAME" /> не е разрешено на това устройство. Обърнете се към администратора си. Код на грешката: <ph name="ERROR_CODE" />.</translation>
@@ -7124,6 +7125,7 @@
 <translation id="7842692330619197998">Посетете g.co/ChromeEnterpriseAccount, ако трябва да създадете нов профил.</translation>
 <translation id="78427265591841839">Търсене в част от страницата чрез <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">Деинсталиране на Linux</translation>
+<translation id="7842851769217535639">Изберете част от страницата за търсене</translation>
 <translation id="7843786652787044762">Вход в(ъв) <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">Файлът с разликите се актуализира</translation>
 <translation id="7846634333498149051">Клавиатура</translation>
@@ -7180,6 +7182,7 @@
 <translation id="7893008570150657497">Да осъществява достъп до снимки, музика и друга медия от компютъра ви.</translation>
 <translation id="7893153962594818789">Функцията за Bluetooth е изключена на този <ph name="DEVICE_TYPE" />. Въведете паролата си и включете Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (по подразбиране)</translation>
+<translation id="7896292361319775586">Да се запази ли <ph name="FILE" />?</translation>
 <translation id="789722939441020330">Да не се разрешава на сайтовете да изтеглят автоматично няколко файла</translation>
 <translation id="7897900149154324287">В бъдеще изваждайте премахващото се устройство от приложението Файлове, преди да го изключите. В противен случай може да загубите данни.</translation>
 <translation id="7898725031477653577">Винаги да се превежда</translation>
@@ -8317,6 +8320,7 @@
 <translation id="899403249577094719">Основен URL адрес на сертификат на Netscape</translation>
 <translation id="899657321862108550">Вашият браузър Chrome – навсякъде</translation>
 <translation id="899676909165543803">Сензорът за отпечатъци е клавишът в долния десен ъгъл на клавиатурата. Докоснете го леко с който и да е пръст.</translation>
+<translation id="8998078711690114234">Този тип файл може да е опасен. Запазете го само ако имате доверие на <ph name="ORIGIN" /></translation>
 <translation id="8999560016882908256">Синтактична грешка в секция: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">В(ъв) <ph name="FAILURE_TIME" /> установяването на връзка със сървъра за управление на устройства не бе успешно със състояние „<ph name="STATUS_TEXT" />“</translation>
 <translation id="9003647077635673607">Разрешаване за всички уебсайтове</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 6628e5a..f34caf4 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -728,6 +728,7 @@
 <translation id="1676902103953506022">Detalji o akreditivima za korisnika <ph name="USERNAME" /> na domeni <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nije moguće dodati stavku <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Još <ph name="TIME" /></translation>
+<translation id="1678794218766467608">Zaključavanje u načinu mirovanja ili kada je poklopac zatvoren</translation>
 <translation id="1679068421605151609">Programerski alati</translation>
 <translation id="1679810534535368772">Jeste li sigurni da želite izaći?</translation>
 <translation id="167983332380191032">Usluga upravljanja je poslala HTTP grešku.</translation>
@@ -3804,6 +3805,7 @@
 <translation id="4586275095964870617">Otvaranje web lokacije <ph name="URL" /> u alternativnom pregledniku nije uspjelo. Kontaktirajte administratora sistema.</translation>
 <translation id="4589713469967853491">Zapisnici su uspješno ispisani u direktorij Preuzimanja.</translation>
 <translation id="4590324241397107707">Pohrana baze podataka</translation>
+<translation id="459204634473266369">Nijedan uređaj nije spremljen na <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">Aplikacija za crtanje olovkom</translation>
 <translation id="4593021220803146968">&amp;Idi na <ph name="URL" /></translation>
 <translation id="4594577641390224176">Tražite stranicu s informacijama o sistemu? Posjetite</translation>
@@ -4362,6 +4364,7 @@
 <translation id="5155327081870541046">Na traci za adresu unesite prečicu za web lokaciju koju želite pretraživati, kao što je "@oznake". Zatim pritisnite željenu prečicu na tastaturi i unesite pojam za pretraživanje.</translation>
 <translation id="5156638757840305347">Kursor se istakne kada se prikaže ili pokrene</translation>
 <translation id="5157635116769074044">Zakači ovu stranicu za Početni ekran...</translation>
+<translation id="5158206172605340248">Odbačen je izbornik naglasnih oznaka.</translation>
 <translation id="5159094275429367735">Postavite Crostini</translation>
 <translation id="5159419673777902220">Tvoj roditelj je onemogućio odobrenja za ekstenzije</translation>
 <translation id="5159643365935452998">Pregledajte automatsko brisanje podataka</translation>
@@ -6494,6 +6497,7 @@
 <translation id="7235716375204803342">Dohvatanje aktivnosti...</translation>
 <translation id="7235737137505019098">Na sigurnosnom ključu nema dovoljno prostora za dodatne račune.</translation>
 <translation id="7235873936132740888">Web lokacije mogu obrađivati posebne zadatke kada kliknete na određene vrste linkova, kao što je kreiranje nove poruke u klijentu za e-poštu ili dodavanje novih događaja u online kalendar</translation>
+<translation id="7238609589076576185">Umetnuta je naglasna oznaka.</translation>
 <translation id="7239108166256782787">Uređaj <ph name="DEVICE_NAME" /> je otkazao prijenos</translation>
 <translation id="7240339475467890413">Povezati se na novu pristupnu tačku?</translation>
 <translation id="7241389281993241388">Prijavite se na <ph name="TOKEN_NAME" /> da uvezete potvrdu klijenta.</translation>
@@ -7336,6 +7340,7 @@
 <translation id="8030852056903932865">Odobri</translation>
 <translation id="8032244173881942855">Nije moguće emitirati karticu.</translation>
 <translation id="8032569120109842252">Pratite</translation>
+<translation id="8033023935541439900">Otvoren je izbornik naglasnih oznaka. Pritisnite lijevo ili desno za kretanje i tipku Enter za umetanje.</translation>
 <translation id="8033827949643255796">odabrano</translation>
 <translation id="8033958968890501070">Vrijeme je isteklo</translation>
 <translation id="8035059678007243127">Keširana verzija cijele stranice anonimnog načina rada: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 6420468..3696185 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -5277,6 +5277,7 @@
 <translation id="6065289257230303064">Atributos de directorio del sujeto del certificado</translation>
 <translation id="6066794465984119824">No se estableció un hash de imagen</translation>
 <translation id="6069464830445383022">Accede a la Chromebook con tu Cuenta de Google</translation>
+<translation id="6070311415473175157">Selecciona una parte de la imagen para realizar la búsqueda</translation>
 <translation id="6071181508177083058">confirmar contraseña</translation>
 <translation id="6071576563962215370">El sistema no pudo establecer el bloqueo de atributos del tiempo de instalación del dispositivo.</translation>
 <translation id="6072442788591997866">No se permite usar <ph name="APP_NAME" /> en este dispositivo. Comunícate con el administrador. Código de error: <ph name="ERROR_CODE" />.</translation>
@@ -7107,6 +7108,7 @@
 <translation id="7842692330619197998">Visita g.co/ChromeEnterpriseAccount si necesitas crear una cuenta nueva.</translation>
 <translation id="78427265591841839">Buscar en cualquier parte de la página con <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">Desinstalar Linux</translation>
+<translation id="7842851769217535639">Selecciona cualquier parte de la página para realizar la búsqueda</translation>
 <translation id="7843786652787044762">Acceder a <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">Actualizando diff</translation>
 <translation id="7846634333498149051">Teclado</translation>
@@ -7163,6 +7165,7 @@
 <translation id="7893008570150657497">Acceder a fotos, música y otros medios desde tu computadora</translation>
 <translation id="7893153962594818789">Bluetooth está desactivado en esta <ph name="DEVICE_TYPE" />. Ingresa tu contraseña y activa Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (predeterminado)</translation>
+<translation id="7896292361319775586">¿Quieres guardar <ph name="FILE" />?</translation>
 <translation id="789722939441020330">No permitir que los sitios descarguen varios archivos automáticamente</translation>
 <translation id="7897900149154324287">En el futuro, asegúrate de quitar el dispositivo extraíble desde la aplicación Archivos antes de desconectarlo. De lo contario, es posible que pierdas datos.</translation>
 <translation id="7898725031477653577">Traducir siempre</translation>
@@ -8300,6 +8303,7 @@
 <translation id="899403249577094719">URL base del certificado Netscape</translation>
 <translation id="899657321862108550">Tu navegador Chrome, en todos lados</translation>
 <translation id="899676909165543803">El sensor de huellas dactilares se encuentra en la esquina inferior derecha del teclado. Tócalo suavemente con un dedo.</translation>
+<translation id="8998078711690114234">Este tipo de archivo puede ser peligroso. Guarda este archivo únicamente si confías en <ph name="ORIGIN" />.</translation>
 <translation id="8999560016882908256">Error de sintaxis seccional: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">No se pudo establecer la conexión al servidor de Administrador de dispositivos con el estado "<ph name="STATUS_TEXT" />" a las <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">Permitir en todos los sitios web</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index aeb234c1..0ab354c 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -3908,7 +3908,7 @@
 <translation id="4697071790493980729">No se han encontrado resultados</translation>
 <translation id="4697551882387947560">Al finalizar la sesión de navegación</translation>
 <translation id="469838979880025581">Los sitios pueden solicitar permiso para utilizar el micrófono</translation>
-<translation id="4699172675775169585">Archivos e imágenes almacenados en caché</translation>
+<translation id="4699172675775169585">Archivos e imágenes en caché</translation>
 <translation id="4699357559218762027">(con inicio automático)</translation>
 <translation id="4701025263201366865">Inicio de sesión del padre o de la madre</translation>
 <translation id="4701335814944566468">Visto ayer</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 9d2eed5..c863a715 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -5286,6 +5286,7 @@
 <translation id="6065289257230303064">Sertifikaadi subjekti kataloogi atribuudid</translation>
 <translation id="6066794465984119824">Kujutise räsiväärtust pole määratud</translation>
 <translation id="6069464830445383022">Chromebooki saate sisse logida oma Google'i kontoga</translation>
+<translation id="6070311415473175157">Valige pildi ala, millelt otsida</translation>
 <translation id="6071181508177083058">parooli kinnitamine</translation>
 <translation id="6071576563962215370">Süsteemil ei õnnestunud määrata seadme installiaegsete atribuutide lukustust.</translation>
 <translation id="6072442788591997866">Rakendust <ph name="APP_NAME" /> ei lubata selles seadmes kasutada. Võtke ühendust administraatoriga. Veakood: <ph name="ERROR_CODE" />.</translation>
@@ -7116,6 +7117,7 @@
 <translation id="7842692330619197998">Kui soovite luua uue konto, minge aadressile g.co/ChromeEnterpriseAccount.</translation>
 <translation id="78427265591841839">Otsige lehe mis tahes osast rakendusega <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">Linuxi desinstallimine</translation>
+<translation id="7842851769217535639">Valige otsimiseks lehe mis tahes osa</translation>
 <translation id="7843786652787044762">Logi teenusesse <ph name="WEB_DRIVE" /> sisse</translation>
 <translation id="7844992432319478437">Erinevuste värskendamine</translation>
 <translation id="7846634333498149051">Klaviatuur</translation>
@@ -7172,6 +7174,7 @@
 <translation id="7893008570150657497">Pääseda juurde fotodele, muusikale ja muule meediale teie arvutist</translation>
 <translation id="7893153962594818789">Bluetooth on seadmes <ph name="DEVICE_TYPE" /> välja lülitatud. Sisestage parool ja lülitage Bluetooth sisse.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (vaikimisi)</translation>
+<translation id="7896292361319775586">Kas salvestada <ph name="FILE" />?</translation>
 <translation id="789722939441020330">Ära luba saitidel automaatselt mitut faili alla laadida</translation>
 <translation id="7897900149154324287">Edaspidi eraldage eemaldatav seade kõigepealt rakenduses Failid ja alles seejärel eemaldage seade ise. Muidu võivad andmed kaduma minna.</translation>
 <translation id="7898725031477653577">Tõlgi alati</translation>
@@ -8309,6 +8312,7 @@
 <translation id="899403249577094719">Netscape'i sertifikaadi baas-URL</translation>
 <translation id="899657321862108550">Teie Chrome, kõikjal</translation>
 <translation id="899676909165543803">Sõrmejäljeandur on teie klaviatuuri paremal all olev klahv. Puudutage seda õrnalt mis tahes sõrmega.</translation>
+<translation id="8998078711690114234">Seda tüüpi fail võib olla ohtlik. Salvestage see ainult juhul, kui saiti <ph name="ORIGIN" /> usaldate.</translation>
 <translation id="8999560016882908256">Jaotise süntaksi viga: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Ühendus seadmehalduse serveriga ebaõnnestus: olek „<ph name="STATUS_TEXT" />“ – <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">Luba kõikidel veebisaitidel</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 2083898..34658a5 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -2552,6 +2552,7 @@
 <translation id="3406290648907941085">Errealitate birtualeko gailuak eta datuak erabil ditzake</translation>
 <translation id="3406396172897554194">Bilatu hizkuntzaren edo idazketa-metodoaren izenaren arabera</translation>
 <translation id="3406605057700382950">&amp;Erakutsi laster-marken barra</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 pasahitz <ph name="USER_EMAIL" /> kontuaren Google-ren Pasahitz-kudeatzailea zerbitzura inportatu da}other{{NUM_PASSWORDS} pasahitz <ph name="USER_EMAIL" /> kontuaren Google-ren Pasahitz-kudeatzailea zerbitzura inportatu dira}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Egin salto hautapenera</translation>
 <translation id="3413122095806433232">Autoritate ziurtagiri-emaileen jaulkitzaileak: <ph name="LOCATION" /></translation>
@@ -3735,6 +3736,7 @@
 <translation id="4541123282641193691">Ezin izan da egiaztatu kontua. Saiatu berriro edo berrabiarazi Chromebook-a.</translation>
 <translation id="4541662893742891060">Ezin da konektatu profil honetara. Laguntza teknikoa eskuratzeko, jarri harremanetan operadorearekin.</translation>
 <translation id="4541706525461326392">Profila kentzen. Agian minutu batzuk beharko dira.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Gailuko pasahitz bat Google-ren Pasahitz-kudeatzailea zerbitzura inportatu da}other{Gailuko {NUM_PASSWORDS} pasahitz Google-ren Pasahitz-kudeatzailea zerbitzura inportatu dira}}</translation>
 <translation id="4542520061254486227">Irakurri <ph name="WEBSITE_1" /> eta <ph name="WEBSITE_2" /> webguneetan dituzun datuak</translation>
 <translation id="4543778593405494224">Ziurtagiri-kudeatzailea</translation>
 <translation id="4544174279960331769">Abatar urdin lehenetsia</translation>
@@ -6219,6 +6221,7 @@
 <translation id="6968288415730398122">Idatzi pasahitza pantailaren blokeoa konfiguratzeko</translation>
 <translation id="6969047215179982698">Desaktibatu Nearby Share</translation>
 <translation id="6970480684834282392">Abio mota</translation>
+<translation id="6970543303783413625">Ezin dira inportatu pasahitzak. Gehienez <ph name="COUNT" /> pasahitz inporta ditzakezu aldi berean.</translation>
 <translation id="6970856801391541997">Inprimatu orri zehatz batzuk</translation>
 <translation id="6970861306198150268">Ziurtatu webgune honen pasahitza gordetzen duzula</translation>
 <translation id="6972180789171089114">Audioa/Bideoa</translation>
@@ -6450,6 +6453,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Irten orritik}other{Irten orrietatik}}</translation>
 <translation id="7207457272187520234">Bidali erabilera- eta diagnostiko-datuak. Gailu honek automatikoki bidaltzen dizkio Google-ri diagnostikoak eta gailu zein aplikazioen erabilera-datuak. Horri esker, sistemaren eta aplikazioen egonkortasuna hobetuko da, besteak beste. Gainera, multzokatutako datu batzuk oso baliagarriak izango dira Google-ren aplikazioak hobetzeko eta bazkideei laguntzeko (adibidez, Android-en garatzaileei). Jabeak konfiguratu du ezarpen hori. Sareko eta aplikazioetako jarduera gehigarriak ezarpena aktibatuta badago, baliteke datu horiek Google-ko kontuan gordetzea.</translation>
 <translation id="7207631048330366454">Bilatu aplikazioak</translation>
+<translation id="7210471695184432500">Gailuko pasahitzak Google-ren Pasahitz-kudeatzailea zerbitzura inportatzeko, hautatu CSV fitxategi bat</translation>
 <translation id="7210499381659830293">Luzapen bidezko inprimagailuak</translation>
 <translation id="7211783048245131419">Oraindik ez da esleitu erabilerraztasun-etengailurik</translation>
 <translation id="7212097698621322584">PINa aldatzeko, idatzi unekoa lehendabizi. Ez badakizu PINa zein den, segurtasun-giltza berrezarri beharko duzu, eta beste PIN bat sortu.</translation>
@@ -7506,6 +7510,7 @@
 <translation id="8206859287963243715">Konexio mugikorra</translation>
 <translation id="8208216423136871611">Ez gorde</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Jakinarazpen berria}other{# jakinarazpen berri}}</translation>
+<translation id="821119981794423735">Pasahitzak <ph name="USER_EMAIL" /> kontuaren Google-ren Pasahitz-kudeatzailea zerbitzura inportatzeko, hautatu CSV fitxategi bat</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Deskarga abian da}other{Deskargak abian dira}}</translation>
 <translation id="8213449224684199188">Argazki moduan sartu zara</translation>
 <translation id="8214489666383623925">Ireki fitxategia…</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 4060ca7a..ac899b1 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1914,7 +1914,7 @@
 <translation id="2753677631968972007">Ylläpidä sivuston käyttöoikeuksia manuaalisesti.</translation>
 <translation id="2754825024506485820">Löydä tarvitsemasi sovellukset, esim. tuottavuus- ja viihdesovellukset, Google Play Kaupasta. Voit asentaa sovelluksia milloin tahansa.</translation>
 <translation id="2755349111255270002">Nollaa tämä <ph name="DEVICE_TYPE" /></translation>
-<translation id="2755367719610958252">Hallinnoi esteettömyysominaisuuksia</translation>
+<translation id="2755367719610958252">Hallinnoi saavutettavuusominaisuuksia</translation>
 <translation id="275662540872599901">näyttö sammutettu</translation>
 <translation id="2757161511365746634">Katso tulostin</translation>
 <translation id="2757338480560142065">Varmista, että tallennettava salasana vastaa palvelun (<ph name="WEBSITE" />) salasanaa.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 35ac40be..0887357 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -727,6 +727,7 @@
 <translation id="1676902103953506022">Mga detalye ng kredensyal para sa <ph name="USERNAME" /> sa <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Hindi maidagdag ang <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> na lang ang natitira</translation>
+<translation id="1678794218766467608">I-lock sa sleep mode o kapag nakasara ang cover</translation>
 <translation id="1679068421605151609">Mga Tool ng Developer</translation>
 <translation id="1679810534535368772">Sigurado ka bang gusto mong lumabas?</translation>
 <translation id="167983332380191032">Nagpadala ang serbisyo ng pamamahala ng HTTP error.</translation>
@@ -2567,6 +2568,7 @@
 <translation id="3406290648907941085">Pinapayagang gumamit ng mga virtual reality device at data</translation>
 <translation id="3406396172897554194">Maghanap ayon sa wika o pangalan ng input</translation>
 <translation id="3406605057700382950">&amp;Ipakita ang bookmarks bar</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 password ang na-import sa Google Password Manager para sa <ph name="USER_EMAIL" />}one{{NUM_PASSWORDS} password ang na-import sa Google Password Manager para sa <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} na password ang na-import sa Google Password Manager para sa <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Jump to Selection</translation>
 <translation id="3413122095806433232">Mga Nagbigay ng CA: <ph name="LOCATION" /></translation>
@@ -3751,6 +3753,7 @@
 <translation id="4541123282641193691">Hindi ma-verify ang iyong account. Pakisubukan ulit o i-restart ang Chromebook mo.</translation>
 <translation id="4541662893742891060">Hindi makakonekta sa profile na ito. Para sa technical support, makipag-ugnayan sa iyong carrier.</translation>
 <translation id="4541706525461326392">Inaalis ang profile. Puwede itong tumagal nang ilang minuto.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 password ang na-import sa Google Password Manager sa device na ito}one{{NUM_PASSWORDS} password ang na-import sa Google Password Manager sa device na ito}other{{NUM_PASSWORDS} na password ang na-import sa Google Password Manager sa device na ito}}</translation>
 <translation id="4542520061254486227">Basahin ang iyong data sa <ph name="WEBSITE_1" /> at <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Tagapamahala ng certificate</translation>
 <translation id="4544174279960331769">Default na asul na avatar</translation>
@@ -3806,6 +3809,7 @@
 <translation id="4586275095964870617">Hindi mabuksan ang <ph name="URL" /> sa isang alternatibong browser. Mangyaring makipag-ugnayan sa iyong system administrator.</translation>
 <translation id="4589713469967853491">Na-write na ang mga log sa directory na Mga Download.</translation>
 <translation id="4590324241397107707">Storage ng database</translation>
+<translation id="459204634473266369">Walang device na naka-save sa <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">App sa pagguhit gamit ang stylus</translation>
 <translation id="4593021220803146968">&amp;Pumunta sa <ph name="URL" /></translation>
 <translation id="4594577641390224176">Hinahanap ang page na tungkol sa system? Bisitahin ang</translation>
@@ -4364,6 +4368,7 @@
 <translation id="5155327081870541046">Sa address bar, ilagay ang shortcut para sa site kung saan mo gustong maghanap, gaya ng "@bookmarks." Pagkatapos ay pindutin ang iyong gustong keyboard shortcut, at ilagay ang termino para sa paghahanap mo.</translation>
 <translation id="5156638757840305347">Iha-highlight ang cursor kapag lumabas o gumalaw ito</translation>
 <translation id="5157635116769074044">I-pin ang Pahinang ito sa Screen ng Simula...</translation>
+<translation id="5158206172605340248">Na-dismiss ang menu ng mga accent mark.</translation>
 <translation id="5159094275429367735">I-set up ang Crostini</translation>
 <translation id="5159419673777902220">Na-disable ng iyong magulang ang mga pahintulot sa extension</translation>
 <translation id="5159643365935452998">Suriin ang awtomatikong pag-clear ng data</translation>
@@ -5297,6 +5302,7 @@
 <translation id="6065289257230303064">Mga Katangian ng Direktoryo ng Paksa ng Certificate</translation>
 <translation id="6066794465984119824">Hindi nakatakda ang hash ng larawan</translation>
 <translation id="6069464830445383022">Ang iyong Google Account ang gagamitin mo sa pag-sign in sa Chromebook</translation>
+<translation id="6070311415473175157">Piliin ang bahagi ng larawan na hahanapin</translation>
 <translation id="6071181508177083058">kumpirmahin ang password</translation>
 <translation id="6071576563962215370">Hindi naitakda ng system ang lock sa mga attribute sa oras ng pag-install ng device.</translation>
 <translation id="6072442788591997866">Hindi pinapayagan ang <ph name="APP_NAME" /> sa device na ito. Makipag-uganayan sa iyong administrator. Code ng error: <ph name="ERROR_CODE" />.</translation>
@@ -6238,6 +6244,7 @@
 <translation id="6968288415730398122">Ilagay ang iyong password upang i-configure ang lock ng screen</translation>
 <translation id="6969047215179982698">I-off ang Nearby Share</translation>
 <translation id="6970480684834282392">Uri ng pag-startup</translation>
+<translation id="6970543303783413625">Hindi ma-import ang mga password. Hanggang <ph name="COUNT" /> (na) password lang ang puwede mong i-import sa bawat pagkakataon.</translation>
 <translation id="6970856801391541997">I-print ang Mga Tiyak na Pahina</translation>
 <translation id="6970861306198150268">Tiyaking sine-save mo ang iyong kasalukuyang password para sa site na ito</translation>
 <translation id="6972180789171089114">Audio/Video</translation>
@@ -6469,6 +6476,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Umalis sa Page}one{Umalis sa Mga Page}other{Umalis sa Mga Page}}</translation>
 <translation id="7207457272187520234">Magpadala ng data ng paggamit at diagnostic. Sa kasalukuyan, ang device na ito ay awtomatikong nagpapadala ng diagnostic na data, data ng device, at data ng paggamit sa app sa Google. Makakatulong ito sa stability ng system at ng app, at sa iba pang pagpapahusay. Makakatulong din ang ilang pinagsama-samang data sa mga app at partner ng Google, gaya ng mga developer ng Android. Ipinapatupad ng may-ari ang setting na ito. Kung naka-on ang iyong karagdagang setting ng Aktibidad sa Web at App, posibleng ma-save ang data na ito sa Google Account mo.</translation>
 <translation id="7207631048330366454">Maghanap ng mga app</translation>
+<translation id="7210471695184432500">Para mag-import ng mga password sa Google Password Manager sa device na ito, pumili ng CSV file</translation>
 <translation id="7210499381659830293">Mga extension na printer</translation>
 <translation id="7211783048245131419">Wala pang switch na naitalaga</translation>
 <translation id="7212097698621322584">Ilagay ang kasalukuyan mong PIN para palitan ito. Kung hindi mo alam ang iyong PIN, kakailanganin mong i-reset ang security key, pagkatapos ay gumawa ng bagong PIN.</translation>
@@ -6493,6 +6501,7 @@
 <translation id="7235716375204803342">Kinukuha ang mga aktibidad...</translation>
 <translation id="7235737137505019098">Walang sapat na espasyo para sa higit pang account ang iyong security key.</translation>
 <translation id="7235873936132740888">Mapapangasiwaan ng mga site ang mga espesyal na gawain kapag nag-click ka sa ilang partikular na uri ng mga link, tulad ng paggawa ng bagong mensahe sa iyong email client o pagdaragdag ng mga bagong event sa online na kalendaryo mo</translation>
+<translation id="7238609589076576185">Inilagay ang accent mark.</translation>
 <translation id="7239108166256782787">Kinansela ng <ph name="DEVICE_NAME" /> ang paglilipat</translation>
 <translation id="7240339475467890413">Kumonekta sa bagong hotspot?</translation>
 <translation id="7241389281993241388">Mangyaring mag-sign in sa <ph name="TOKEN_NAME" /> upang i-import ang certificate ng client.</translation>
@@ -7129,6 +7138,7 @@
 <translation id="7842692330619197998">Bisitahin ang g.co/ChromeEnterpriseAccount kung kailangan mong gumawa ng bagong account.</translation>
 <translation id="78427265591841839">Hanapin ang anumang bahagi ng page gamit ang <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">I-uninstall ang Linux</translation>
+<translation id="7842851769217535639">Pumili ng anumang bahagi ng page para maghanap</translation>
 <translation id="7843786652787044762">Mag-sign in sa <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">Ina-update ang diff</translation>
 <translation id="7846634333498149051">Keyboard</translation>
@@ -7185,6 +7195,7 @@
 <translation id="7893008570150657497">Ma-access ang mga larawan, musika, at iba pang media mula sa iyong computer</translation>
 <translation id="7893153962594818789">Naka-off ang Bluetooth sa <ph name="DEVICE_TYPE" /> na ito. Ilagay ang iyong password, at i-on ang Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (Default)</translation>
+<translation id="7896292361319775586">I-save ang <ph name="FILE" />?</translation>
 <translation id="789722939441020330">Huwag payagan ang mga site na awtomatikong mag-download ng maraming file</translation>
 <translation id="7897900149154324287">Sa hinaharap, tiyaking i-eject ang iyong naaalis na device sa Files app bago ito i-unplug. Kung hindi, maaari kang mawalan ng data.</translation>
 <translation id="7898725031477653577">Palaging i-translate</translation>
@@ -7333,6 +7344,7 @@
 <translation id="8030852056903932865">Aprubahan</translation>
 <translation id="8032244173881942855">Hindi ma-cast ang tab.</translation>
 <translation id="8032569120109842252">Sinusubaybayan</translation>
+<translation id="8033023935541439900">Bukas ang menu ng mga accent mark. Pindutin ang kaliwa o kanan para mag-navigate at ang enter para maglagay.</translation>
 <translation id="8033827949643255796">pinili</translation>
 <translation id="8033958968890501070">Time out</translation>
 <translation id="8035059678007243127">Back/Forward Cached na Page ng Incognito: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -7525,6 +7537,7 @@
 <translation id="8206859287963243715">Cellular</translation>
 <translation id="8208216423136871611">Huwag mag-save</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Bagong notification}one{# bagong notification}other{# na bagong notification}}</translation>
+<translation id="821119981794423735">Para mag-import ng mga password sa Google Password Manager para sa <ph name="USER_EMAIL" />, pumili ng CSV file</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Kasalukuyang isinasagawa ang pag-download}one{Kasalukuyang isinasagawa ang mga pag-download}other{Kasalukuyang isinasagawa ang mga pag-download}}</translation>
 <translation id="8213449224684199188">Nailagay sa photo mode</translation>
 <translation id="8214489666383623925">Open File...</translation>
@@ -8325,6 +8338,7 @@
 <translation id="899403249577094719">URL ng Netscape Certificate Base</translation>
 <translation id="899657321862108550">Ang Iyong Chrome, Sa Lahat ng Lugar</translation>
 <translation id="899676909165543803">Ang sensor para sa fingerprint ay ang key sa kanang bahagi sa ibaba ng iyong keyboard. Pindutin ito nang magaan gamit ang alinmang daliri.</translation>
+<translation id="8998078711690114234">Posibleng mapanganib ang ganitong uri ng file. I-save lang ang file na ito kung pinagkakatiwalaan mo ang <ph name="ORIGIN" /></translation>
 <translation id="8999560016882908256">Error sa syntax sa seksyon: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Hindi nagtagumpay ang Pagkonekta sa Pamamahala sa Device na may status na '<ph name="STATUS_TEXT" />' nang <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">Payagan sa lahat ng website</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 359667e..e3961df 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -2554,6 +2554,7 @@
 <translation id="3406290648907941085">Autorisés à utiliser des appareils et des données de réalité virtuelle</translation>
 <translation id="3406396172897554194">Faites une recherche par langue ou méthode d'entrée</translation>
 <translation id="3406605057700382950">&amp;Afficher la barre des favoris</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 mot de passe importé dans le gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />}one{{NUM_PASSWORDS} mot de passe importé dans le gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} mots de passe importés dans le gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Google Maps</translation>
 <translation id="3412265149091626468">Aller à la sélection</translation>
 <translation id="3413122095806433232">Émetteurs de l'autorité de certification : <ph name="LOCATION" /></translation>
@@ -3737,6 +3738,7 @@
 <translation id="4541123282641193691">Impossible de vérifier votre compte. Veuillez réessayer ou redémarrer votre Chromebook.</translation>
 <translation id="4541662893742891060">Impossible de se connecter à ce profil. Pour obtenir de l'assistance technique, veuillez communiquer avec votre fournisseur de services.</translation>
 <translation id="4541706525461326392">Retrait du profil en cours… Cette opération peut prendre quelques minutes.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 mot de passe importé dans le gestionnaire de mots de passe de Google sur cet appareil}one{{NUM_PASSWORDS} mot de passe importé dans le gestionnaire de mots de passe de Google sur cet appareil}other{{NUM_PASSWORDS} mots de passe importés dans le gestionnaire de mots de passe de Google sur cet appareil}}</translation>
 <translation id="4542520061254486227">Lire vos données sur <ph name="WEBSITE_1" /> et <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Gestionnaire de certificats</translation>
 <translation id="4544174279960331769">Avatar bleu par défaut</translation>
@@ -6227,6 +6229,7 @@
 <translation id="6968288415730398122">Entrez votre mot de passe pour configurer le verrouillage de l'écran</translation>
 <translation id="6969047215179982698">Désactiver la fonctionnalité Partage à proximité</translation>
 <translation id="6970480684834282392">Type de démarrage</translation>
+<translation id="6970543303783413625">Impossible d'importer les mots de passe. Maximum de <ph name="COUNT" /> mots de passe à la fois.</translation>
 <translation id="6970856801391541997">Imprimer certaines pages</translation>
 <translation id="6970861306198150268">Assurez-vous que vous enregistrez votre mot de passe actuel pour ce site</translation>
 <translation id="6972180789171089114">Audio/Vidéo</translation>
@@ -6458,6 +6461,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Quitter la page}one{Quitter la page}other{Quitter les pages}}</translation>
 <translation id="7207457272187520234">Envoyer les données d'utilisation et de diagnostic. Actuellement, cet appareil envoie automatiquement à Google des données de diagnostic, de l'appareil et d'utilisation des applications. Cela nous permettra d'assurer la stabilité du système et des applications, et d'apporter d'autres améliorations. Certaines données collectées contribueront également à améliorer les applications Google et aideront nos partenaires, comme les développeurs Android. Ce paramètre est appliqué par le propriétaire du compte. Si le paramètre relatif aux autres activités sur le Web et dans les applications est activé, ces données peuvent être enregistrées dans votre compte Google.</translation>
 <translation id="7207631048330366454">Rechercher dans les applications</translation>
+<translation id="7210471695184432500">Pour importer des mots de passe dans le gestionnaire de mots de passe de Google sur cet appareil, sélectionnez un fichier CSV</translation>
 <translation id="7210499381659830293">Imprimantes d'extension</translation>
 <translation id="7211783048245131419">Aucun commutateur n'a été attribué</translation>
 <translation id="7212097698621322584">Entrez votre NIP actuel pour le modifier. Si vous ne connaissez pas votre NIP, vous devrez réinitialiser la clé de sécurité, puis créer un nouveau NIP.</translation>
@@ -7517,6 +7521,7 @@
 <translation id="8206859287963243715">Cellulaire</translation>
 <translation id="8208216423136871611">Ne pas enregistrer</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nouvelle notification}one{# nouvelle notification}other{# nouvelles notifications}}</translation>
+<translation id="821119981794423735">Pour importer des mots de passe dans le gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />, sélectionnez un fichier CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Téléchargement en cours…}one{Téléchargement en cours…}other{Téléchargements en cours…}}</translation>
 <translation id="8213449224684199188">Mode photo activé</translation>
 <translation id="8214489666383623925">Ouvrir...</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index d2400d59..fd34042 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -2550,6 +2550,7 @@
 <translation id="3406290648907941085">વર્ચ્યુઅલ રિયાલિટી ડિવાઇસ અને ડેટાનો ઉપયોગ કરવાની મંજૂરી છે</translation>
 <translation id="3406396172897554194">ભાષા કે ઇનપુટના નામ મુજબ શોધો</translation>
 <translation id="3406605057700382950">બુકમાર્ક બાર &amp;બતાવો</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{<ph name="USER_EMAIL" /> માટે Google Password Managerમાં 1 પાસવર્ડ આયાત કર્યો}one{<ph name="USER_EMAIL" /> માટે Google Password Managerમાં {NUM_PASSWORDS} પાસવર્ડ આયાત કર્યો}other{<ph name="USER_EMAIL" /> માટે Google Password Managerમાં {NUM_PASSWORDS} પાસવર્ડ આયાત કર્યા}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">પસંદગી પર જાઓ</translation>
 <translation id="3413122095806433232">CA રજૂકર્તાઓ: <ph name="LOCATION" /></translation>
@@ -3733,6 +3734,7 @@
 <translation id="4541123282641193691">તમારું એકાઉન્ટ ચકાસી ન શકાયું. કૃપા કરીને ફરી પ્રયાસ કરો અથવા તમારી Chromebook ફરી શરૂ કરો.</translation>
 <translation id="4541662893742891060">આ પ્રોફાઇલ સાથે કનેક્ટ કરી શકાયું નથી. ટેક્નિકલ સપોર્ટ માટે, કૃપા કરીને તમારા મોબાઇલ ઑપરેટરનો સંપર્ક કરો.</translation>
 <translation id="4541706525461326392">પ્રોફાઇલ કાઢી નાખી રહ્યાં છીએ. આમાં થોડો સમય લાગી શકે છે.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{આ ડિવાઇસ પર Google Password Managerમાં 1 પાસવર્ડ આયાત કર્યો}one{આ ડિવાઇસ પર Google Password Managerમાં {NUM_PASSWORDS} પાસવર્ડ આયાત કર્યો}other{આ ડિવાઇસ પર Google Password Managerમાં {NUM_PASSWORDS} પાસવર્ડ આયાત કર્યા}}</translation>
 <translation id="4542520061254486227"><ph name="WEBSITE_1" /> અને <ph name="WEBSITE_2" /> પર તમારો ડેટા વાંચી શકે છે</translation>
 <translation id="4543778593405494224">પ્રમાણપત્ર મેનેજર</translation>
 <translation id="4544174279960331769">ડિફોલ્ટ વાદળી અવતાર</translation>
@@ -6225,6 +6227,7 @@
 <translation id="6968288415730398122">સ્ક્રીન લૉક ગોઠવવા માટે તમારો પાસવર્ડ દાખલ કરો</translation>
 <translation id="6969047215179982698">'નજીકના શેર' સુવિધા બંધ કરો</translation>
 <translation id="6970480684834282392">સ્ટાર્ટઅપ પ્રકાર</translation>
+<translation id="6970543303783413625">પાસવર્ડ આયાત કરી શકતા નથી. તમે એકવારમાં વધુમાં વધુ <ph name="COUNT" /> પાસવર્ડ આયાત કરી શકો છો.</translation>
 <translation id="6970856801391541997">ખાસ પેજ પ્રિન્ટ કરો</translation>
 <translation id="6970861306198150268">તમે આ સાઇટ માટેનો તમારો વર્તમાન પાસવર્ડ સાચવો એ વાતની ખાતરી કરો</translation>
 <translation id="6972180789171089114">ઑડિયો/વીડિયો</translation>
@@ -6456,6 +6459,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{પેજમાંથી બહાર નીકળો}one{પેજમાંથી બહાર નીકળો}other{પેજમાંથી બહાર નીકળો}}</translation>
 <translation id="7207457272187520234">વપરાશ અને નિદાનનો ડેટા મોકલો. આ ડિવાઇસ હાલમાં Googleને નિદાન, ડિવાઇસ અને ઍપ વપરાશનો ડેટા ઑટોમૅટિક રીતે મોકલી રહ્યું છે. આ સિસ્ટમ અને ઍપની સ્થિરતા અને અન્ય સુધારણાઓમાં સહાય કરશે. એકત્ર કરેલો કેટલોક ડેટા Google ઍપ અને ભાગીદારો, જેમ કે Android ડેવલપરને પણ સહાય કરશે. આ સેટિંગ માલિક દ્વારા લાગુ કરવામાં આવ્યું છે. જો તમારી વધારાની વેબ અને ઍપ પ્રવૃત્તિનું સેટિંગ ચાલુ હોય, તો આ ડેટા તમારા Google એકાઉન્ટમાં સાચવવામાં આવી શકે છે.</translation>
 <translation id="7207631048330366454">ઍપ શોધો</translation>
+<translation id="7210471695184432500">આ ડિવાઇસ પર Google Password Managerમાં પાસવર્ડ આયાત કરવા માટે, કોઈ CSV ફાઇલ પસંદ કરો</translation>
 <translation id="7210499381659830293">એક્સ્ટેંશન પ્રિન્ટર</translation>
 <translation id="7211783048245131419">હજી સુધી કોઈ સ્વિચની સોંપણી કરવામાં આવી નથી</translation>
 <translation id="7212097698621322584">પિન બદલવા માટે તમારો વર્તમાન પિન દાખલ કરો. જો તમને તમારો પિન યાદ ન હોય, તો તમારે સુરક્ષા કોડ રીસેટ કરવો પડશે, અને પછી નવો પિન બનાવવો પડશે.</translation>
@@ -7510,6 +7514,7 @@
 <translation id="8206859287963243715">સેલ્યુલર</translation>
 <translation id="8208216423136871611">સાચવશો નહીં</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{નવું નોટિફિકેશન}one{# નવું નોટિફિકેશન}other{# નવા નોટિફિકેશન}}</translation>
+<translation id="821119981794423735"><ph name="USER_EMAIL" /> માટે Google Password Managerમાં પાસવર્ડ આયાત કરવા માટે, કોઈ CSV ફાઇલ પસંદ કરો</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ડાઉનલોડ ચાલુ છે}one{ડાઉનલોડ ચાલુ છે}other{ડાઉનલોડ ચાલુ છે}}</translation>
 <translation id="8213449224684199188">ફોટો મોડ પર સ્વિચ કર્યું</translation>
 <translation id="8214489666383623925">ફાઇલ ખોલો...</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index dfb495d..d1b261d 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -725,6 +725,7 @@
 <translation id="1676902103953506022">Pojedinosti o vjerodajnicama za korisnika <ph name="USERNAME" /> na <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nije moguće dodati <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Još <ph name="TIME" /></translation>
+<translation id="1678794218766467608">Zaključavanje u načinu mirovanja ili kada je poklopac zatvoren</translation>
 <translation id="1679068421605151609">Alati za razvojne programere</translation>
 <translation id="1679810534535368772">Jeste li sigurni da želite odustati?</translation>
 <translation id="167983332380191032">Usluga upravljanja poslala je HTTP pogrešku.</translation>
@@ -3792,6 +3793,7 @@
 <translation id="4586275095964870617">URL <ph name="URL" /> nije moguće otvoriti u zamjenskom pregledniku. Obratite se administratoru sustava.</translation>
 <translation id="4589713469967853491">Zapisnici su uspješno zabilježeni u direktorij Preuzimanja.</translation>
 <translation id="4590324241397107707">Pohrana baze podataka</translation>
+<translation id="459204634473266369">Nijedan uređaj nije spremljen na <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">Aplikacija za crtanje pisaljkom</translation>
 <translation id="4593021220803146968">&amp;Idi na <ph name="URL" /></translation>
 <translation id="4594577641390224176">Tražite li stranicu s informacijama o sustavu? Otvorite</translation>
@@ -4350,6 +4352,7 @@
 <translation id="5155327081870541046">U adresnu traku unesite prečac za web-lokaciju koju želite pretražiti, na primjer @bookmarks. Zatim pritisnite svoj preferirani tipkovni prečac i unesite pojam za pretraživanje.</translation>
 <translation id="5156638757840305347">Pokazivač je istaknut kada se prikaže ili pomakne</translation>
 <translation id="5157635116769074044">Prikvači ovu stranicu na početni zaslon...</translation>
+<translation id="5158206172605340248">Odbačen je izbornik naglasnih oznaka.</translation>
 <translation id="5159094275429367735">Postavljanje Crostinija</translation>
 <translation id="5159419673777902220">Tvoj je roditelj onemogućio dopuštenja za proširenja</translation>
 <translation id="5159643365935452998">Pregled automatskog brisanja podataka</translation>
@@ -6478,6 +6481,7 @@
 <translation id="7235716375204803342">Dohvaćanje aktivnosti...</translation>
 <translation id="7235737137505019098">Na sigurnosnom ključu nema dovoljno prostora za izradu novih računa.</translation>
 <translation id="7235873936132740888">Web-lokacije mogu izvršavati posebne zadatke kad kliknete određene vrste veza, na primjer mogu sastaviti novu poruku u vašem klijentu e-pošte ili dodati nove događaje vašem online kalendaru</translation>
+<translation id="7238609589076576185">Umetnuta je naglasna oznaka.</translation>
 <translation id="7239108166256782787">Uređaj <ph name="DEVICE_NAME" /> otkazao je prijenos</translation>
 <translation id="7240339475467890413">Želite li se povezati s novom žarišnom točkom?</translation>
 <translation id="7241389281993241388">Prijavite se na uređaj <ph name="TOKEN_NAME" /> kako biste uvezli certifikat klijenta.</translation>
@@ -7317,6 +7321,7 @@
 <translation id="8030852056903932865">Odobri</translation>
 <translation id="8032244173881942855">Emitiranje kartice nije moguće.</translation>
 <translation id="8032569120109842252">Praćeno</translation>
+<translation id="8033023935541439900">Otvoren je izbornik naglasnih oznaka. Pritisnite lijevo ili desno za kretanje i tipku Enter za umetanje.</translation>
 <translation id="8033827949643255796">odabrano</translation>
 <translation id="8033958968890501070">Vrijeme je isteklo</translation>
 <translation id="8035059678007243127">Anonimno predmemorirana posjećena stranica: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 5f74c55..01dd112 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -5296,6 +5296,7 @@
 <translation id="6065289257230303064">Tanúsítványtulajdonos könyvtárattribútumai</translation>
 <translation id="6066794465984119824">A kép kivonata nincs beállítva</translation>
 <translation id="6069464830445383022">A Google-fiókjával jelentkezhet be Chromebookján</translation>
+<translation id="6070311415473175157">A kereséshez válassza ki a kívánt képterületet</translation>
 <translation id="6071181508177083058">jelszó megerősítése</translation>
 <translation id="6071576563962215370">A rendszer nem tudta zárolni az eszköz telepítésiidő-attribútumait.</translation>
 <translation id="6072442788591997866">A(z) <ph name="APP_NAME" /> használata nem engedélyezett ezen az eszközön. Forduljon a rendszergazdához. Hibakód: <ph name="ERROR_CODE" />.</translation>
@@ -7126,6 +7127,7 @@
 <translation id="7842692330619197998">Ha új fiókot kell létrehoznia, keresse fel a következő webhelyet: g.co/ChromeEnterpriseAccount.</translation>
 <translation id="78427265591841839">Keresés az oldal bármely részén a következő segítségével: <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">A Linux eltávolítása</translation>
+<translation id="7842851769217535639">A kereséshez válassza ki az oldal kívánt részét</translation>
 <translation id="7843786652787044762">Bejelentkezés ide: <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">Diff frissítése</translation>
 <translation id="7846634333498149051">Billentyűzet</translation>
@@ -7181,6 +7183,7 @@
 <translation id="7893008570150657497">Fényképek, zene és egyéb multimédiás anyagok elérése a számítógépről</translation>
 <translation id="7893153962594818789">A Bluetooth ki van kapcsolva ezen a(z) <ph name="DEVICE_TYPE" /> eszközön. Adja meg jelszavát, és kapcsolja be a Bluetooth-t.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (Alapértelmezett)</translation>
+<translation id="7896292361319775586">Menti ezt: <ph name="FILE" />?</translation>
 <translation id="789722939441020330">A webhelyek nem kérhetnek engedélyt több fájl automatikus letöltésére</translation>
 <translation id="7897900149154324287">A jövőben mindenképpen adja ki az eltávolítható eszközt a Fájlok alkalmazásban, mielőtt kihúzná, máskülönben adatvesztés történhet.</translation>
 <translation id="7898725031477653577">Mindig legyen lefordítva</translation>
@@ -8318,6 +8321,7 @@
 <translation id="899403249577094719">Netscape tanúsítvány - alap URL</translation>
 <translation id="899657321862108550">Az Ön Chrome-ja, bárhol</translation>
 <translation id="899676909165543803">Az ujjlenyomat-érzékelő a billentyűzet jobb alsó sarkában található gomb. Érintse meg finoman valamelyik ujjával.</translation>
+<translation id="8998078711690114234">Az ilyen típusú fájlok veszélyesek lehetnek. Csak akkor mentse ezt a fájlt, ha megbízik a következőben: <ph name="ORIGIN" />.</translation>
 <translation id="8999560016882908256">Szakasszal kapcsolatos szintaktikai hiba: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Nem sikerült kapcsolódni az eszközkezelő szerverhez (állapot: „<ph name="STATUS_TEXT" />”, időpont: <ph name="FAILURE_TIME" />)</translation>
 <translation id="9003647077635673607">Engedélyezés valamennyi webhelyen</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 6e2ebabd..5b1c085a 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -5296,6 +5296,7 @@
 <translation id="6065289257230303064">Atribut Direktori Subjek Sertifikat</translation>
 <translation id="6066794465984119824">Hash gambar tidak disetel</translation>
 <translation id="6069464830445383022">Akun Google Anda adalah kunci akses Chromebook Anda</translation>
+<translation id="6070311415473175157">Pilih area gambar yang akan ditelusuri</translation>
 <translation id="6071181508177083058">konfirmasikan sandi</translation>
 <translation id="6071576563962215370">Sistem gagal membuat kunci atribut waktu penginstalan perangkat.</translation>
 <translation id="6072442788591997866"><ph name="APP_NAME" /> tidak diizinkan di perangkat ini. Hubungi administrator Anda. Kode error: <ph name="ERROR_CODE" />.</translation>
@@ -7126,6 +7127,7 @@
 <translation id="7842692330619197998">Kunjungi g.co/ChromeEnterpriseAccount jika Anda perlu membuat akun baru.</translation>
 <translation id="78427265591841839">Telusuri bagian mana pun dari halaman dengan <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">Uninstal Linux</translation>
+<translation id="7842851769217535639">Pilih bagian halaman yang akan ditelusuri</translation>
 <translation id="7843786652787044762">Login ke <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">Memperbarui diff</translation>
 <translation id="7846634333498149051">Keyboard</translation>
@@ -7182,6 +7184,7 @@
 <translation id="7893008570150657497">Mengakses foto, musik, dan media lain dari komputer Anda</translation>
 <translation id="7893153962594818789">Bluetooth di <ph name="DEVICE_TYPE" /> dinonaktifkan. Masukkan sandi dan aktifkan Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (Default)</translation>
+<translation id="7896292361319775586">Simpan <ph name="FILE" />?</translation>
 <translation id="789722939441020330">Jangan izinkan situs mendownload beberapa file secara otomatis</translation>
 <translation id="7897900149154324287">Di masa mendatang, pastikan untuk mengeluarkan perangkat yang dapat dilepas di aplikasi File sebelum mencabutnya. Jika tidak, Anda mungkin kehilangan data.</translation>
 <translation id="7898725031477653577">Selalu terjemahkan</translation>
@@ -8319,6 +8322,7 @@
 <translation id="899403249577094719">Netscape Certificate Base URL</translation>
 <translation id="899657321862108550">Chrome Anda, di Mana Saja</translation>
 <translation id="899676909165543803">Sensor sidik jari adalah tombol di kanan bawah keyboard Anda. Sentuh sensor menggunakan jari mana pun.</translation>
+<translation id="8998078711690114234">Jenis file ini mungkin berbahaya. Hanya simpan file ini jika Anda memercayai <ph name="ORIGIN" /></translation>
 <translation id="8999560016882908256">Sintaksis bagian error: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Koneksi ke Server Pengelolaan Perangkat gagal dengan status '<ph name="STATUS_TEXT" />' pada <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">Izinkan di semua situs web</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 23f32be..7fd62f587 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -5296,6 +5296,7 @@
 <translation id="6065289257230303064">תכונות ספרייה של נושא אישור</translation>
 <translation id="6066794465984119824">‏לא הוגדר גיבוב (hash) של תמונה</translation>
 <translation id="6069464830445383022">‏הכניסה ל-Chromebook תתבצע באמצעות חשבון Google</translation>
+<translation id="6070311415473175157">יש לבחור אזור בתמונה לחיפוש</translation>
 <translation id="6071181508177083058">אישור סיסמה</translation>
 <translation id="6071576563962215370">המערכת לא הצליחה ליצור את נעילת המאפיינים של המכשיר בזמן ההתקנה.</translation>
 <translation id="6072442788591997866">אסור להשתמש באפליקציה <ph name="APP_NAME" /> במכשיר הזה. יש לפנות אל מנהל המערכת. קוד שגיאה: <ph name="ERROR_CODE" />.</translation>
@@ -7129,6 +7130,7 @@
 <translation id="7842692330619197998">‏אם צריך ליצור חשבון חדש, ניתן לעשות זאת בכתובת g.co/ChromeEnterpriseAccount.</translation>
 <translation id="78427265591841839">חיפוש בחלק מהדף באמצעות <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">‏הסרה של Linux</translation>
+<translation id="7842851769217535639">יש לבחור חלק כלשהו בדף לחיפוש</translation>
 <translation id="7843786652787044762">כניסה אל <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">ההבדל מתעדכן</translation>
 <translation id="7846634333498149051">מקלדת</translation>
@@ -7185,6 +7187,7 @@
 <translation id="7893008570150657497">לגשת לתמונות, מוזיקה ומדיה נוספת מהמחשב שלך</translation>
 <translation id="7893153962594818789">‏Bluetooth מושבת ב-<ph name="DEVICE_TYPE" /> זה. עליך להזין את הסיסמה שלך כדי להפעיל את Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (ברירת מחדל)</translation>
+<translation id="7896292361319775586">לשמור את <ph name="FILE" />?</translation>
 <translation id="789722939441020330">לא לאפשר לאתרים להוריד באופן אוטומטי קבצים מרובים</translation>
 <translation id="7897900149154324287">בעתיד, יש להקפיד ללחוץ על סמל הניתוק עבור ההתקן הנשלף דרך אפליקציית 'קבצים' לפני שמנתקים אותו פיזית. אם לא עושים זאת, אפשר לאבד נתונים.</translation>
 <translation id="7898725031477653577">ברצוני לקבל תרגום תמיד</translation>
@@ -8326,6 +8329,7 @@
 <translation id="899403249577094719">‏כתובת אתר בסיסית של אישור Netscape</translation>
 <translation id="899657321862108550">‏ה-Chrome שלך, בכל מקום</translation>
 <translation id="899676909165543803">חיישן טביעות האצבע הוא המקש הימני בשורה התחתונה במקלדת. יש לגעת בו בעדינות באחת האצבעות.</translation>
+<translation id="8998078711690114234">סוג הקובץ הזה עלול להיות מסוכן. יש לשמור את הקובץ רק אם האתר <ph name="ORIGIN" /> מהימן</translation>
 <translation id="8999560016882908256">שגיאה בתחביר של קטע: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">החיבור לשרת ניהול המכשירים נכשל עם הסטטוס '<ph name="STATUS_TEXT" />', בשעה <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">התרה בכל האתרים</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 0a13163..b085c49 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -2552,6 +2552,7 @@
 <translation id="3406290648907941085">ვირტუალური რეალობის მოწყობილობებისა და მონაცემების გამოიყენება დაშვებულია</translation>
 <translation id="3406396172897554194">მოიძიეთ ენის ან შეყვანის მეთოდის სახელის მიხედვით</translation>
 <translation id="3406605057700382950">სანიშნეების ზოლის ჩ&amp;ვენება</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 პაროლი იმპორტირებულია Google პაროლების მმართველში <ph name="USER_EMAIL" />-ისთვის}other{{NUM_PASSWORDS} პაროლი იმპორტირებულია Google პაროლების მმართველში <ph name="USER_EMAIL" />-ისთვის}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">მონიშნულ ობიექტზე გადახტომა</translation>
 <translation id="3413122095806433232">CA გამცემები: <ph name="LOCATION" /></translation>
@@ -3735,6 +3736,7 @@
 <translation id="4541123282641193691">თქვენი ანგარიში ვერ დადასტურდა. ცადეთ ხელახლა ან გადატვირთეთ თქვენი Chromebook.</translation>
 <translation id="4541662893742891060">ამ პროფილთან დაკავშირება ვერ მოხერხდა. ტექნიკური მხარდაჭერისთვის მიმართეთ თქვენს ოპერატორს.</translation>
 <translation id="4541706525461326392">მიმდინარეობს პროფილის ამოშლა. ამას შეიძლება რამდენიმე წუთი დასჭირდეს.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 პაროლი იმპორტირებულია Google პაროლების მმართველში ამ მოწყობილობაზე}other{{NUM_PASSWORDS} პაროლი იმპორტირებულია Google პაროლების მმართველში ამ მოწყობილობაზე}}</translation>
 <translation id="4542520061254486227">წაიკითხეთ თქვენი მონაცემები ვებსაიტებზე <ph name="WEBSITE_1" /> და <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">სერტიფიკატების მმართველი</translation>
 <translation id="4544174279960331769">ნაგულისხმევი ლურჯი ავატარი</translation>
@@ -6223,6 +6225,7 @@
 <translation id="6968288415730398122">ეკრანის დაბლოკვის მეთოდის კონფიგურაციისთვის შეიყვანეთ თქვენი პაროლი</translation>
 <translation id="6969047215179982698">მახლობლად გაზიარების გამორთვა</translation>
 <translation id="6970480684834282392">გაშვების ტიპი</translation>
+<translation id="6970543303783413625">პაროლების იმპორტირება ვერ მოხერხდა. ერთდროულად <ph name="COUNT" /> პაროლის იმპორტირება შეგიძლიათ.</translation>
 <translation id="6970856801391541997">კონკრეტული გვერდების ბეჭდვა</translation>
 <translation id="6970861306198150268">დარწმუნდით, რომ ამ საიტისთვის თქვენს ამჟამინდელ პაროლს ინახავთ</translation>
 <translation id="6972180789171089114">აუდიო/ვიდეო</translation>
@@ -6454,6 +6457,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{გვერდიდან გასვლა}other{გვერდებიდან გასვლა}}</translation>
 <translation id="7207457272187520234">გამოყენებისა და დიაგნოსტიკის მონაცემების გაგზავნა. ეს მოწყობილობა ამჟამად ავტომატურად უგზავნის Google-ს დიაგნოსტიკისა და მოწყობილობის/აპების გამოყენების მონაცემებს. აღნიშნული მონაცემები დაგვეხმარება სისტემის/აპების სტაბილურობისა და სხვა ფუნქციების გაუმჯობესებაში. გარდა ამისა, გაერთიანებული მონაცემების ნაწილი ხელს შეუწყობს Google აპებსა და პარტნიორებს, მაგალითად, Android-ის დეველოპერებს. ეს პარამეტრი არის იძულებით გააქტიურებული მფლობელის მიერ. თუ ჩართული გაქვთ ვებსა და აპებში დამატებითი აქტივობის პარამეტრი, აღნიშნული მონაცემები შესაძლოა შეინახოს თქვენს Google ანგარიშში.</translation>
 <translation id="7207631048330366454">აპებში ძიება</translation>
+<translation id="7210471695184432500">Google პაროლების მმართველში, ამ მოწყობილობაზე, პაროლების იმპორტირებისთვის აირჩიეთ CSV ფაილი</translation>
 <translation id="7210499381659830293">გაფართოების პრინტერები</translation>
 <translation id="7211783048245131419">გადამრთველი ჯერ არ მინიჭებულა</translation>
 <translation id="7212097698621322584">შესაცვლელად შეიყვანეთ თქვენი ამჟამინდელი PIN-კოდი. თუ PIN-კოდი არ იცით, საჭირო იქნება უსაფრთხოების გასაღების გადაყენება და ახალი PIN-კოდის შექმნა.</translation>
@@ -7512,6 +7516,7 @@
 <translation id="8206859287963243715">ფიჭური</translation>
 <translation id="8208216423136871611">არ შეინახო</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ახალი შეტყობინება}other{# ახალი შეტყობინება}}</translation>
+<translation id="821119981794423735">Google პაროლების მმართველში, <ph name="USER_EMAIL" />-ისთვის, პაროლების იმპორტირებისთვის აირჩიეთ CSV ფაილი</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{მიმდინარეობს ჩამოტვირთვა}other{მიმდინარეობს ჩამოტვირთვები}}</translation>
 <translation id="8213449224684199188">გაშვებულია ფოტო რეჟიმი</translation>
 <translation id="8214489666383623925">ფაილის გახსნა…</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index ad71f8a..7593135 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -5300,6 +5300,7 @@
 <translation id="6065289257230303064">គុណលក្ខណៈថតឯកសារភាគីវិញ្ញាបនប័ត្រ</translation>
 <translation id="6066794465984119824">​មិនបានកំណត់កូដតំណាងរូបភាពទេ</translation>
 <translation id="6069464830445383022">គណនី Google របស់អ្នកគឺជាការចូល Chromebook របស់អ្នក</translation>
+<translation id="6070311415473175157">ជ្រើសរើសផ្ទៃ​លើ​រូបភាព ដើម្បី​ស្វែងរក</translation>
 <translation id="6071181508177083058">អះអាងពាក្យសម្ងាត់</translation>
 <translation id="6071576563962215370">ប្រព័ន្ធមិនអាច​បង្កើត​ការចាក់សោលក្ខណៈសម្រាប់រយៈពេលដំឡើងឧបករណ៍​បាន​ទេ។</translation>
 <translation id="6072442788591997866">មិនអនុញ្ញាត​ឱ្យប្រើ <ph name="APP_NAME" /> នៅលើ​ឧបករណ៍នេះទេ។ សូមទាក់ទង​អ្នកគ្រប់គ្រង​របស់អ្នក។ លេខ​កូដ​បញ្ហា៖ <ph name="ERROR_CODE" />។</translation>
@@ -7131,6 +7132,7 @@
 <translation id="7842692330619197998">ចូលទៅកាន់ g.co/ChromeEnterpriseAccount ប្រសិនបើអ្នក​ត្រូវការ​បង្កើត​គណនីថ្មី។</translation>
 <translation id="78427265591841839">ស្វែងរក​ផ្នែក​ណាមួយ​របស់ទំព័រ​ដោយប្រើ <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">លុប Linux</translation>
+<translation id="7842851769217535639">ជ្រើសរើសផ្នែកណាមួយនៃទំព័រនេះ ដើម្បីស្វែងរក</translation>
 <translation id="7843786652787044762">ចូល <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">កំពុងធ្វើបច្ចុប្បន្នភាព diff</translation>
 <translation id="7846634333498149051">ក្ដារចុច</translation>
@@ -7187,6 +7189,7 @@
 <translation id="7893008570150657497">ចូលប្រើរូបថត តន្ត្រី និងកំសាន្តផ្សេងទៀតពីកុំព្យូទ័ររបស់អ្នក</translation>
 <translation id="7893153962594818789">ប៊្លូធូស​ត្រូវបាន​បិទនៅលើ <ph name="DEVICE_TYPE" /> នេះ។ សូម​បញ្ចូលពាក្យ​សម្ងាត់​របស់អ្នក រួចបើក​ប៊្លូធូស។</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (លំនាំដើម)</translation>
+<translation id="7896292361319775586">រក្សាទុក <ph name="FILE" /> ឬ?</translation>
 <translation id="789722939441020330">មិនអនុញ្ញាតឱ្យ​គេហទំព័រ​ទាញយក​ឯកសារច្រើន​ដោយស្វ័យប្រវត្តិទេ</translation>
 <translation id="7897900149154324287">នាពេលអនាគត ត្រូវប្រាកដថាដកឧបករណ៍ដែលអាចដកចេញបាននៅក្នុងកម្មវិធីឯកសារ មុនពេលដកវាចេញ។ បើមិនដូច្នេះទេ អ្នកអាចបាត់បង់ទិន្នន័យ។</translation>
 <translation id="7898725031477653577">បកប្រែជានិច្ច</translation>
@@ -8325,6 +8328,7 @@
 <translation id="899403249577094719">URL វិញ្ញាបនប័ត្រគោល Netscape</translation>
 <translation id="899657321862108550">ចូលគណនី​នៅលើ Chrome របស់អ្នក​នៅគ្រប់ទីកន្លែង</translation>
 <translation id="899676909165543803">ឧបករណ៍​ចាប់ស្នាម​ម្រាមដៃគឺជាគ្រាប់ចុច​ខាងស្ដាំ​ដៃនៅផ្នែកខាងក្រោម​ក្ដារ​ចុចរបស់អ្នក។ សូមប៉ះឧបករណ៍​ចាប់ស្នាម​ម្រាមដៃនេះ​ថ្នមៗដោយប្រើម្រាមដៃណាមួយ។</translation>
+<translation id="8998078711690114234">ឯកសារប្រភេទនេះអាចមានគ្រោះថ្នាក់។ រក្សាទុកឯកសារនេះ តែក្នុងករណីអ្នក​ជឿទុកចិត្ត <ph name="ORIGIN" /> ប៉ុណ្ណោះ</translation>
 <translation id="8999560016882908256">វាក្យសម្ព័ន្ធនៃ​ផ្នែកមានបញ្ហា៖ <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">ការតភ្ជាប់​ទៅ​ម៉ាស៊ីន​មេ​គ្រប់គ្រង​ឧបករណ៍​មិន​បាន​សម្រេច​ដោយ​មានស្ថានភាព​ដាក់​ថា '<ph name="STATUS_TEXT" />' នៅ​ថ្ងៃ<ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">អនុញ្ញាតនៅលើគេហទំព័រទាំងអស់</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index be77051..50c8bef 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -5295,6 +5295,7 @@
 <translation id="6065289257230303064">인증서 대상 디렉터리 속성</translation>
 <translation id="6066794465984119824">이미지 해시가 설정되지 않았습니다.</translation>
 <translation id="6069464830445383022">Google 계정으로 Chromebook 로그인하기</translation>
+<translation id="6070311415473175157">검색할 이미지 영역을 선택하세요.</translation>
 <translation id="6071181508177083058">비밀번호 확인</translation>
 <translation id="6071576563962215370">시스템에서 기기 설치 시간 속성 잠금을 설정하지 못했습니다.</translation>
 <translation id="6072442788591997866">이 기기에서는 <ph name="APP_NAME" /> 앱이 허용되지 않습니다. 관리자에게 문의하세요. 오류 코드: <ph name="ERROR_CODE" /></translation>
@@ -7125,6 +7126,7 @@
 <translation id="7842692330619197998">새 계정을 만들려면 g.co/ChromeEnterpriseAccount를 방문하세요.</translation>
 <translation id="78427265591841839"><ph name="VISUAL_SEARCH_PROVIDER" />로 페이지 일부 임의 검색</translation>
 <translation id="784273751836026224">Linux 제거</translation>
+<translation id="7842851769217535639">페이지에서 검색할 부분을 선택하세요.</translation>
 <translation id="7843786652787044762"><ph name="WEB_DRIVE" />에 로그인</translation>
 <translation id="7844992432319478437">diff 업데이트 중</translation>
 <translation id="7846634333498149051">키보드</translation>
@@ -7182,6 +7184,7 @@
 <translation id="7893008570150657497">컴퓨터에서 사진, 음악, 기타 미디어에 액세스</translation>
 <translation id="7893153962594818789">이 <ph name="DEVICE_TYPE" />에서 블루투스가 사용 중지되어 있습니다. 비밀번호를 입력하고 블루투스를 사용 설정하세요.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" />(기본)</translation>
+<translation id="7896292361319775586"><ph name="FILE" /> 파일을 저장하시겠습니까?</translation>
 <translation id="789722939441020330">사이트에서 여러 개의 파일을 자동으로 다운로드하도록 허용하지 않음</translation>
 <translation id="7897900149154324287">이후에 이동식 기기를 분리하기 전에 파일 앱에서 이동식 기기를 꺼내야 합니다. 그렇지 않으면 데이터가 손실될 수 있습니다.</translation>
 <translation id="7898725031477653577">항상 번역</translation>
@@ -8319,6 +8322,7 @@
 <translation id="899403249577094719">Netscape Certificate Base URL</translation>
 <translation id="899657321862108550">어디에서나 나만의 Chrome을 사용하세요</translation>
 <translation id="899676909165543803">지문 센서는 키보드 오른쪽 하단의 키에 있습니다. 아무 손가락으로나 가볍게 터치하세요.</translation>
+<translation id="8998078711690114234">이러한 형식의 파일은 위험할 수 있습니다. <ph name="ORIGIN" />을(를) 신뢰하는 경우에만 파일을 저장하세요.</translation>
 <translation id="8999560016882908256">섹션 구문 오류: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">기기 관리 서버 연결 실패. 상태: '<ph name="STATUS_TEXT" />' 시간: <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">모든 웹사이트에서 허용</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index bb876c0b..d0ca487 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -726,6 +726,7 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> домениндеги колдонуучунун (<ph name="USERNAME" />) эсептик дайындары</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> кеңейтүүсүн кошуу мүмкүн болбой жатат</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> калды</translation>
+<translation id="1678794218766467608">Көшүү режиминде жана жапкычы жабылып турганда кулпулоо</translation>
 <translation id="1679068421605151609">Иштеп чыгуучунун куралдары</translation>
 <translation id="1679810534535368772">Чын эле чыгасызбы?</translation>
 <translation id="167983332380191032">Башкаруучу кызматтан туура эмес HTTP коду келди.</translation>
@@ -1687,7 +1688,7 @@
 <translation id="2530166226437958497">Бузулууларды аныктап оңдоо</translation>
 <translation id="2531530485656743109"><ph name="BEGIN_PARAGRAPH1" />Бир жерден ката кетип, <ph name="DEVICE_OS" /> орнотулган жок.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />Кеңири маалымат: g.co/flex/InstallErrors.<ph name="END_PARAGRAPH2" /></translation>
-<translation id="2532144599248877204">Батареянын кубатынын мөөнөтүн узартуу үчүн болжол менен 80% кубаттайт. Түзмөктү розеткадан сууруганга чейин батарея толук кубатталат.</translation>
+<translation id="2532144599248877204">Батарея жарабай калбашы үчүн түзмөктүн кубаты 80% кармалып турат. Түзмөк розеткадан суурулганга чейин батарея толук кубатталып бүтөт.</translation>
 <translation id="2532198298278778531">ChromeOS Flex жөндөөлөрүнөн Коопсуз DNS'ти башкаруу</translation>
 <translation id="2532589005999780174">Жогорку контраст режими</translation>
 <translation id="2533649878691950253">Адатта уруксат бербегениңизден улам, бул сайттын так жайгашкан жериңизди көрүү мүмкүнчүлүгү бөгөттөлдү</translation>
@@ -3805,6 +3806,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> шилтемеси кошумча серепчиде ачылган жок. Тутум администраторуңузга кайрылыңыз.</translation>
 <translation id="4589713469967853491">Таржымалдар "Жүктөлүп алынгандар" каталогуна ийгиликтүү жазылды.</translation>
 <translation id="4590324241397107707">Дайындар базасынын сактагычы</translation>
+<translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> аккаунтунда сакталган түзмөктөр жок</translation>
 <translation id="4592891116925567110">Стилус менен сүрөт тартуу колдонмосу</translation>
 <translation id="4593021220803146968"><ph name="URL" /> дарегине &amp;өтүңүз</translation>
 <translation id="4594577641390224176">Барак жөнүндө тутум маалыматын издеп жатасызбы? Төмөнкүгө өтүңүз:</translation>
@@ -4363,6 +4365,7 @@
 <translation id="5155327081870541046">Дарек тилкесинде керектүү сайттын ыкчам баскычын (мисалы, "@кыстармалар") киргизиңиз. Андан кийин артыкчылыктуу ыкчам баскычты басып, изделүүчү атоону киргизиңиз.</translation>
 <translation id="5156638757840305347">Курсор көрүнгөндө же жылганда бөлүнүп көрсөтүлөт</translation>
 <translation id="5157635116769074044">Бул бетти баштоо экранына кадап коюу…</translation>
+<translation id="5158206172605340248">Басым белгилеринин менюсу жабылды.</translation>
 <translation id="5159094275429367735">Crostini'ни жөндөө</translation>
 <translation id="5159419673777902220">Ата-энең кеңейтүүлөрдүн уруксаттарын өчүрүп койду</translation>
 <translation id="5159643365935452998">Маалыматты автоматтык түрдө тазалоону карап чыгуу</translation>
@@ -6491,6 +6494,7 @@
 <translation id="7235716375204803342">Аракеттер алынууда…</translation>
 <translation id="7235737137505019098">Кошумча аккаунттарды кошуу үчүн коопсуздук ачкычыңызда орун жетишсиз.</translation>
 <translation id="7235873936132740888">Жаңы электрондук катты жазуу же онлайн жылнаамага жаңы иш-чараларды кошуу сыяктуу белгилүү бир шилтемелердин түрлөрүн басканда, сайттар белгилүү бир тапшырмаларды аткарышат</translation>
+<translation id="7238609589076576185">Басым белгилери киргизилди.</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> башка түзмөккө багыттоону жокко чыгарды</translation>
 <translation id="7240339475467890413">Жаңы түйүнгө туташсынбы?</translation>
 <translation id="7241389281993241388">Кардар тастыктамасын импорттоо үчүн <ph name="TOKEN_NAME" /> ичине кириңиз.</translation>
@@ -7332,6 +7336,7 @@
 <translation id="8030852056903932865">Уруксат берүү</translation>
 <translation id="8032244173881942855">Өтмөк тышкы экранга чыгарылбай жатат.</translation>
 <translation id="8032569120109842252">Жазылгансыз</translation>
+<translation id="8033023935541439900">Басым белгилеринин менюсу ачылды. Өтүү үчүн солго же оңго жебени басыңыз, ал эми киргизүү үчүн Enter баскычын басыңыз.</translation>
 <translation id="8033827949643255796">тандалды</translation>
 <translation id="8033958968890501070">Убакыт аяктады</translation>
 <translation id="8035059678007243127">Кештелген жашыруун барак: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 9ea7be9..e4a89074 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -5294,6 +5294,7 @@
 <translation id="6065289257230303064">ຄຸນລັກສະນະໄດເຣັກຕໍຣີຫົວຂໍ້ໃບຢັ້ງຢືນ</translation>
 <translation id="6066794465984119824">ບໍ່ໄດ້ຕັ້ງແຮຊຮູບ</translation>
 <translation id="6069464830445383022">ໃຊ້ບັນຊີ Google ຂອງທ່ານເພື່ອເຂົ້າສູ່ລະບົບ Chromebook ຂອງທ່ານ</translation>
+<translation id="6070311415473175157">ເລືອກພື້ນທີ່ຮູບເພື່ອຊອກຫາ</translation>
 <translation id="6071181508177083058">ຢືນ​ຢັນ​ລະ​ຫັດ​ຜ່ານ​</translation>
 <translation id="6071576563962215370">ລະບົບກຳນົດການລັອກຄຸນລັກສະນະເວລາການຕິດຕັ້ງຂອງອຸປະກອນບໍ່ສຳເລັດ.</translation>
 <translation id="6072442788591997866">ບໍ່ອະນຸຍາດ <ph name="APP_NAME" /> ໃນເວັບໄຊນີ້. ຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ. ລະຫັດຂໍ້ຜິດພາດ: <ph name="ERROR_CODE" />.</translation>
@@ -7123,6 +7124,7 @@
 <translation id="7842692330619197998">ເຂົ້າຫາ g.co/ChromeEnterpriseAccount ຖ້າທ່ານຕ້ອງການສ້າງບັນຊີໃໝ່.</translation>
 <translation id="78427265591841839">ຊອກຫາສ່ວນໃດກໍໄດ້ຂອງໜ້າດ້ວຍ <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">ຖອນການຕິດຕັ້ງ Linux</translation>
+<translation id="7842851769217535639">ເລືອກສ່ວນໃດກໍໄດ້ຂອງໜ້າເພື່ອຊອກຫາ</translation>
 <translation id="7843786652787044762">ເຂົ້າສູ່ລະບົບ <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">ກໍາລັງອັບເດດຄວາມແຕກຕ່າງ</translation>
 <translation id="7846634333498149051">ແປ້ນພິມ</translation>
@@ -7179,6 +7181,7 @@
 <translation id="7893008570150657497">ເຂົ້າຫາຮູບ, ເພງ, ແລະມີເດຍອື່ນໆຈາກຄອມພິວເຕີຂອງທ່ານ</translation>
 <translation id="7893153962594818789">Bluetooth ຖືກປິດຢູ່ໃນ <ph name="DEVICE_TYPE" /> ນີ້. ກະລຸນາປ້ອນລະຫັດຜ່ານຂອງທ່ານ ແລະ ເປີດ Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (ມາດຕະຖານ)</translation>
+<translation id="7896292361319775586">ບັນທຶກ <ph name="FILE" /> ບໍ?</translation>
 <translation id="789722939441020330">ບໍ່ອະນຸຍາດໃຫ້ເວັບໄຊດາວໂຫຼດຫຼາຍໄຟລ໌ໂດຍອັດຕະໂນມັດ</translation>
 <translation id="7897900149154324287">ໃນ​ອະ​ນາ​ຄົດ​, ໃຫ້​ແນ່​ໃຈຕ້ອງຕັດອຸປະກອນທີ່ຖອດອອກໄດ້ຂອງທ່ານຢູ່ໃນແອັບໄຟລ໌ອອກ ກ່ອນທີ່​ຈະຖອດມັນອອກ. ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​, ທ່ານ​ອາດ​ຈະ​​ເສຍ​ຂໍ້​ມູນໄປ​.</translation>
 <translation id="7898725031477653577">ແປຢູ່ສະເໝີ</translation>
@@ -8315,6 +8318,7 @@
 <translation id="899403249577094719">URL ຖານໃບຢັ້ງຢືນ Netscape</translation>
 <translation id="899657321862108550">Chrome ຂອງທ່ານ, ຢູ່ທຸກບ່ອນ</translation>
 <translation id="899676909165543803">ເຊັນເຊີລາຍນິ້ວມືແມ່ນປຸ່ມຂວາມືລຸ່ມສຸດໃນແປ້ນພິມຂອງທ່ານ. ສຳຜັດມັນເບົາໆດ້ວຍນິ້ວມືໃດໆກໍໄດ້.</translation>
+<translation id="8998078711690114234">ໄຟລ໌ປະເພດນີ້ອາດຈະເປັນອັນຕະລາຍໄດ້. ບັນທຶກໄຟລ໌ນີ້ສະເພາະໃນກໍລະນີທີ່ທ່ານເຊື່ອຖື <ph name="ORIGIN" /> ເທົ່ານັ້ນ</translation>
 <translation id="8999560016882908256">ຂໍ້ຜິດພາດທາງໄວຍະກອນຂອງສ່ວນ: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">ການເຊື່ອມຕໍ່ຫາເຊີບເວີການຈັດການອຸປະກອນບໍ່ສຳເລັດໂດຍມີສະຖານະ '<ph name="STATUS_TEXT" />' ເວລາ <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">ອະ​ນຸ​ຍາດ​ໃຫ້​ຢູ່​ໃນ​ທຸກເວັບ​ໄຊ​ທ​໌​</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 4217ca5..8b7cce3 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -5303,6 +5303,7 @@
 <translation id="6065289257230303064">Sertifikato subjekto katalogo atributai</translation>
 <translation id="6066794465984119824">Vaizdo maiša nenustatyta</translation>
 <translation id="6069464830445383022">Prisijunkite prie „Chromebook“ naudodami „Google“ paskyrą</translation>
+<translation id="6070311415473175157">Pasirinkite norimą ieškoti vaizdo sritį</translation>
 <translation id="6071181508177083058">patvirtinkite slaptažodį</translation>
 <translation id="6071576563962215370">Sistemai vykdant įrenginio diegimo laiko atributų fiksavimą įvyko klaida.</translation>
 <translation id="6072442788591997866">Programa „<ph name="APP_NAME" />“ šiame įrenginyje neleidžiama. Susisiekite su administratoriumi. Klaidos kodas: <ph name="ERROR_CODE" />.</translation>
@@ -7140,6 +7141,7 @@
 <translation id="7842692330619197998">Jei reikia sukurti naują paskyrą, apsilankykite adresu g.co/ChromeEnterpriseAccount.</translation>
 <translation id="78427265591841839">Paieška bet kurioje puslapio dalyje naudojant „<ph name="VISUAL_SEARCH_PROVIDER" />“</translation>
 <translation id="784273751836026224">Pašalinti „Linux“</translation>
+<translation id="7842851769217535639">Pasirinkite bet kurią puslapio dalį, kurioje norite ieškoti</translation>
 <translation id="7843786652787044762">Prisijungti prie „<ph name="WEB_DRIVE" />“</translation>
 <translation id="7844992432319478437">Atnaujinamas skirt.</translation>
 <translation id="7846634333498149051">Klaviatūra</translation>
@@ -7196,6 +7198,7 @@
 <translation id="7893008570150657497">Pasiekti nuotraukas, muziką ir kitą mediją iš kompiuterio</translation>
 <translation id="7893153962594818789">Šiame „<ph name="DEVICE_TYPE" />“ išjungtas „Bluetooth“. Įveskite slaptažodį ir įjunkite „Bluetooth“.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (Numatytasis)</translation>
+<translation id="7896292361319775586">Išsaugoti <ph name="FILE" />?</translation>
 <translation id="789722939441020330">Neleisti svetainėms automatiškai atsisiųsti kelių failų</translation>
 <translation id="7897900149154324287">Ateityje būtinai prieš atjungdami keičiamąjį įrenginį išimkite jį naudodami Failų programą. Kitaip galite prarasti duomenis.</translation>
 <translation id="7898725031477653577">Visada versti</translation>
@@ -8337,6 +8340,7 @@
 <translation id="899403249577094719">„Netscape“ sertifikatų bazės URL</translation>
 <translation id="899657321862108550">Jūsų „Chrome“, visur</translation>
 <translation id="899676909165543803">Kontrolinio kodo jutiklis yra ant klaviatūros apatinio dešiniojo klavišo. Švelniai jį palieskite bet kuriuo pirštu.</translation>
+<translation id="8998078711690114234">Šio tipo failas gali būti pavojingas. Išsaugokite šį failą, tik jei pasitikite <ph name="ORIGIN" /></translation>
 <translation id="8999560016882908256">Skilties sintaksės klaida: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Nepavyko prisijungti prie įrenginio tvarkymo serverio; <ph name="FAILURE_TIME" /> pateikta būsena „<ph name="STATUS_TEXT" />“</translation>
 <translation id="9003647077635673607">Leisti visose svetainėse</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index b2908e7..c16d1932 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -416,7 +416,7 @@
 <translation id="1403222014593521787">ဤပရောက်စီသို့ ချိတ်ဆက်၍မရပါ</translation>
 <translation id="1405779994569073824">ရပ်တန့်သွားသည်။</translation>
 <translation id="1406500794671479665">စိစစ်နေ...</translation>
-<translation id="1407069428457324124">မှောင်သည့်အပြင်အဆင်</translation>
+<translation id="1407069428457324124">အမှောင်နောက်ခံ</translation>
 <translation id="1407135791313364759">အားလုံး ဖွင့်ရန်</translation>
 <translation id="140723521119632973">ဆယ်လူလာ စတင်ခြင်း</translation>
 <translation id="1408504635543854729">စက်ပစ္စည်း၏ အကြောင်းအရာများကို Files အက်ပ်ထဲတွင် ရှာပါ။ အကြောင်းအရာကို စီမံခန့်ခွဲသူက ပိတ်ပင်ထားသောကြောင့် မွမ်းမံပြင်ဆင်၍မရပါ။</translation>
@@ -6374,7 +6374,7 @@
 <translation id="7098389117866926363">USB-C ကိရိယာ (ကျောဘက် ဘယ် ပို့တ်)</translation>
 <translation id="7098447629416471489">သိမ်းဆည်းထားသော အခြားရှာဖွေရေးအင်ဂျင်များကို ဤနေရာတွင် တွေ့ရပါမည်</translation>
 <translation id="7098936390718461001">{NUM_APPS,plural, =1{အက်ပ်ကို ဖယ်ရှားရန်}other{အက်ပ်များကို ဖယ်ရှားရန်}}</translation>
-<translation id="7099337801055912064">ကြီးမားသည့် PPD ကို ဖွင့်၍မရပါ။ ခွင့်ပြုထားသည့် အကြီးဆုံးအရွယ်အစားသည် ၂၅၀ ကီလိုဘိုက် ဖြစ်သည်။</translation>
+<translation id="7099337801055912064">ကြီးမားသည့် PPD ကို ဖွင့်၍မရပါ။ အကြီးဆုံးအရွယ်သည် ၂၅၀ KB ဖြစ်သည်။</translation>
 <translation id="7102687220333134671">အလိုအလျောက် အပ်ဒိတ်လုပ်ခြင်းများကို ဖွင့်ထားသည်</translation>
 <translation id="7102832101143475489">တောင်းဆိုချက် အချိန်ကုန်သွားသည်</translation>
 <translation id="710640343305609397">ကွန်ရက်ဆက်တင်များကို ဖွင့်ရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index ed83dd7..94a830f 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -720,6 +720,7 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> मा रहेको <ph name="USERNAME" /> का युजरनेम तथा पासवर्डहरू</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> थप्न सकिएन</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> बाँकी छ</translation>
+<translation id="1678794218766467608">स्लिप मोड अन भएका बेला वा कभर बन्द भएका बेला लक गरियोस्</translation>
 <translation id="1679068421605151609">विकासकर्ता उपकरणहरू</translation>
 <translation id="1679810534535368772">तपाईं साँच्चिकै बाहिर निस्कन चाहनुहुन्छ?</translation>
 <translation id="167983332380191032">व्यवस्थापन सेवाले HTTP त्रुटि पठायो।</translation>
@@ -2549,6 +2550,7 @@
 <translation id="3406290648907941085">भर्चुअल रियालिटी चल्ने यन्त्र र तिनमा भएका डेटा प्रयोग गर्ने अनुमति दिइएका साइटहरू</translation>
 <translation id="3406396172897554194">भाषा वा इनपुट विधिको नामअनुसार खोज्नुहोस्</translation>
 <translation id="3406605057700382950">बुकमार्क पट्टी देखाउनुहोस्</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{<ph name="USER_EMAIL" /> का हकमा Google पासवर्ड म्यानेजरमा एउटा पासवर्ड इम्पोर्ट गरिएको छ}other{<ph name="USER_EMAIL" /> का हकमा Google पासवर्ड म्यानेजरमा {NUM_PASSWORDS} वटा पासवर्ड इम्पोर्ट गरिएका छन्}}</translation>
 <translation id="3409785640040772790">नक्सा</translation>
 <translation id="3412265149091626468">छनौटमा जानुहोस्</translation>
 <translation id="3413122095806433232">CA जारीकर्ता: <ph name="LOCATION" /></translation>
@@ -3731,6 +3733,7 @@
 <translation id="4541123282641193691">तपाईंको खाता पुष्टि गर्न सकिएन। कृपया फेरि प्रयास गर्नुहोस् वा आफ्नो Chromebook रिस्टार्ट गर्नुहोस्।</translation>
 <translation id="4541662893742891060">यो प्रोफाइलमा कनेक्ट गर्न सकिएन। प्राविधिक सहायता प्राप्त गर्न कृपया आफ्नो मोबाइल सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।</translation>
 <translation id="4541706525461326392">प्रोफाइल हटाइँदै छ। यो कार्य पूरा हुन केही बेर लाग्न सक्छ।</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{यो डिभाइसको Google पासवर्ड म्यानेजरमा एउटा पासवर्ड इम्पोर्ट गरिएको छ}other{यो डिभाइसको Google पासवर्ड म्यानेजरमा {NUM_PASSWORDS} वटा पासवर्ड इम्पोर्ट गरिएका छन्}}</translation>
 <translation id="4542520061254486227"><ph name="WEBSITE_1" /> र <ph name="WEBSITE_2" />मा तपाईंको डेटा पढ्नुहोस्</translation>
 <translation id="4543778593405494224">प्रमाणपत्र व्यवस्थापक</translation>
 <translation id="4544174279960331769">डिफल्ट निलो अवतार</translation>
@@ -3786,6 +3789,7 @@
 <translation id="4586275095964870617">वैकल्पिक ब्राउजरमा <ph name="URL" /> खोल्न सकिँदैन। कृपया आफ्नो प्रणालीका प्रशासकसँग सम्पर्क गर्नुहोस्।</translation>
 <translation id="4589713469967853491">लगहरू डाउनलोड नामक डिरेक्टरीमा सफलतापूर्वक राइट गरियो।</translation>
 <translation id="4590324241397107707">डेटाबेस भण्डारण</translation>
+<translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> मा कुनै पनि डिभाइस सेभ गरिएको छैन</translation>
 <translation id="4592891116925567110">रेखाचित्र बनाउन प्रयोग गरिने स्टाइलस एप</translation>
 <translation id="4593021220803146968"><ph name="URL" /> मा &amp;जानुहोस्</translation>
 <translation id="4594577641390224176">सिस्टमसम्बन्धी जानकारी भएको पेज खोज्दै हुनुहुन्छ? यहाँ जानुहोस्</translation>
@@ -4344,6 +4348,7 @@
 <translation id="5155327081870541046">एड्रेस बारमा आफूले जुन साइटमा खोज्न चाहेको हो सो साइटको सर्टकट (जस्तै "@bookmarks") टाइप गर्नुहोस्। अनि किबोर्डमा आफ्नो रोजाइको सर्टकट थिचेर खोज पद हाल्नुहोस्।</translation>
 <translation id="5156638757840305347">कर्सर देखा पर्दा वा यताउता सर्दा त्यसलाई हाइलाइट गरिन्छ</translation>
 <translation id="5157635116769074044">यस पृष्ठलाई सुरुवात स्क्रिनमा पिन गर्नुहोस्...</translation>
+<translation id="5158206172605340248">एक्सेन्ट चिन्हहरूको मेनु खारेज गरिएको छ।</translation>
 <translation id="5159094275429367735">Crostini सेटअप गर्नुहोस्</translation>
 <translation id="5159419673777902220">तपाईंका अभिभावकले तपाईंलाई एक्स्टेन्सन प्रयोग गर्ने अनुमति दिनुभएको छैन</translation>
 <translation id="5159643365935452998">डेटा स्वतः मेटाउने सुविधाको समीक्षा गर्नुहोस्</translation>
@@ -6216,6 +6221,7 @@
 <translation id="6968288415730398122">स्क्रिन लक कन्फिगर गर्न आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्</translation>
 <translation id="6969047215179982698">नजिकैका डिभाइससँग सेयर गर्ने सुविधा निष्क्रिय पार्नुहोस्</translation>
 <translation id="6970480684834282392">स्टार्टअप प्रकार</translation>
+<translation id="6970543303783413625">पासवर्डहरू इम्पोर्ट गर्न सकिएन। तपाईं एक पटकमा अधिकतम <ph name="COUNT" /> वटा पासवर्ड मात्र इम्पोर्ट गर्न सक्नुहुन्छ।</translation>
 <translation id="6970856801391541997">निर्दिष्ट पृष्ठहरू प्रिन्ट गर्नुहोस्</translation>
 <translation id="6970861306198150268">तपाईंले हाल यो साइटका लागि तोक्नुभएको पासवर्ड सेभ गर्न नभुल्नुहोस्</translation>
 <translation id="6972180789171089114">अडियो/भिडियो</translation>
@@ -6447,6 +6453,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{पृष्ठबाट बाहिरिनुहोस्}other{पृष्ठहरूबाट बाहिरिनुहोस्}}</translation>
 <translation id="7207457272187520234">प्रयोग तथा निदानसम्बन्धी डेटा पठाउनुहोस्। यो यन्त्रले हाल निदान, डिभाइस र एपको प्रयोगसम्बन्धी डेटा स्वतः Google लाई पठाइरहेको छ। यसले प्रणाली तथा एपको स्थिरता र अन्य कुराहरूमा सुधार ल्याउन मद्दत गर्ने छ। केही समग्र डेटाले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई पनि मद्दत गर्ने छन्। यो सेटिङ मालिकले लागू गर्छन्। तपाईंको खातामा अतिरिक्त वेब तथा एपसम्बन्धी गतिविधिको सेटिङ सक्रिय गरिएको छ भने यो डेटा तपाईंको Google खातामा सुरक्षित गरिन सक्छ।</translation>
 <translation id="7207631048330366454">एपहरू खोज्नुहोस्</translation>
+<translation id="7210471695184432500">तपाईं यो डिभाइसको Google पासवर्ड म्यानेजरमा पासवर्डहरू इम्पोर्ट गर्न चाहनुहुन्छ भने कुनै CSV फाइल छनौट गर्नुहोस्</translation>
 <translation id="7210499381659830293">विस्तारसम्बन्धी प्रिन्टरहरू</translation>
 <translation id="7211783048245131419">अहिलेसम्म कुनै पनि स्विच तोकिएको छैन</translation>
 <translation id="7212097698621322584">यसलाई बदल्न आफ्नो हालको PIN प्रविष्टि गर्नुहोस्। तपाईंलाई आफ्नो PIN थाहा छैन भने तपाईंले सुरक्षा साँचो रिसेट गर्नु पर्छ र त्यसपछि नयाँ PIN सिर्जना गर्नु पर्छ।</translation>
@@ -6471,6 +6478,7 @@
 <translation id="7235716375204803342">क्रियाकलापहरू प्राप्त गर्दै...</translation>
 <translation id="7235737137505019098">तपाईंको सुरक्षा साँचोमा थप खाताका लागि पर्याप्त ठाउँ छैन।</translation>
 <translation id="7235873936132740888">तपाईंले निश्चित प्रकारका लिंकमा क्लिक गर्दा साइटहरूले तपाईंको इमेल क्लाइन्टमा नयाँ म्यासेज लेख्ने वा तपाईंको अनलाइन पात्रोमा नयाँ कार्यक्रमहरू थप्नेलगायतका विशेष कार्यहरू गर्न सक्छन्</translation>
+<translation id="7238609589076576185">एक्सेन्ट चिन्ह हालिएको छ।</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> ले ट्रान्स्फर रद्द गर्‍यो</translation>
 <translation id="7240339475467890413">नयाँ हटस्पटमा जडान गर्ने हो?</translation>
 <translation id="7241389281993241388">ग्राहक प्रमाणपत्र आयात गर्न कृपया <ph name="TOKEN_NAME" /> मा साइन इन गर्नुहोस्।</translation>
@@ -7312,6 +7320,7 @@
 <translation id="8030852056903932865">अनुमोदन गर्नुहोस्</translation>
 <translation id="8032244173881942855">ट्याब लाई cast गर्न असमर्थ।</translation>
 <translation id="8032569120109842252">फलो गरिरहेको</translation>
+<translation id="8033023935541439900">एक्सेन्ट चिन्हहरूको मेनु खुला छ। नेभिगेट गर्न लेफ्ट वा राइट एरो थिच्नुहोस् अनि हाल्न इन्टर थिच्नुहोस्।</translation>
 <translation id="8033827949643255796">चयन गरिएको</translation>
 <translation id="8033958968890501070">समयावधि सकियो</translation>
 <translation id="8035059678007243127">इन्कोग्निटो मोडमा ब्याक/फर्वार्ड क्यास गरिएको पेज: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -7504,6 +7513,7 @@
 <translation id="8206859287963243715">सेल्युलर</translation>
 <translation id="8208216423136871611">बचत नगर्नुहोस्</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{नयाँ सूचना}other{# वटा नयाँ सूचना}}</translation>
+<translation id="821119981794423735">तपाईं <ph name="USER_EMAIL" /> का हकमा Google पासवर्ड म्यानेजरमा पासवर्डहरू इम्पोर्ट गर्न चाहनुहुन्छ भने CSV फाइल छनौट गर्नुहोस्</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{डाउनलोड हुँदैछ}other{डाउनलोड हुँदैछन्}}</translation>
 <translation id="8213449224684199188">तस्बिर मोडमा प्रवेश गरियो</translation>
 <translation id="8214489666383623925">फाइल खोल्नुहोस्...</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 93c23be..b4d8e3a 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -723,6 +723,7 @@
 <translation id="1676902103953506022">Inloggegevens voor <ph name="USERNAME" /> op <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Kan <ph name="EXTENSION_TYPE_PARAMETER" /> niet toevoegen</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> resterend</translation>
+<translation id="1678794218766467608">Vergrendelen in slaapmodus of als de klep is gesloten</translation>
 <translation id="1679068421605151609">Ontwikkelaarstools</translation>
 <translation id="1679810534535368772">Weet je zeker dat je het scherm wilt afsluiten?</translation>
 <translation id="167983332380191032">Beheerservice heeft HTTP-fout verzonden.</translation>
@@ -3788,6 +3789,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> kan niet in een alternatieve browser worden geopend. Neem contact op met je systeembeheerder.</translation>
 <translation id="4589713469967853491">Logboeken zijn naar de map Downloads geschreven.</translation>
 <translation id="4590324241397107707">Opslag in database</translation>
+<translation id="459204634473266369">Geen apparaten opgeslagen in <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">App voor tekenen met stylus</translation>
 <translation id="4593021220803146968">&amp;Ga naar <ph name="URL" /></translation>
 <translation id="4594577641390224176">Zoek je de informatiepagina van het systeem? Ga naar</translation>
@@ -4345,6 +4347,7 @@
 <translation id="5155327081870541046">Geef in de adresbalk de snelkoppeling op voor de website die je wilt doorzoeken, zoals '@bookmarks'. Druk op de gewenste sneltoets en geef de zoekterm op.</translation>
 <translation id="5156638757840305347">De cursor wordt gemarkeerd als deze verschijnt of beweegt.</translation>
 <translation id="5157635116769074044">Deze pagina vastzetten op het startscherm…</translation>
+<translation id="5158206172605340248">Menu met accenttekens is gesloten.</translation>
 <translation id="5159094275429367735">Crostini instellen</translation>
 <translation id="5159419673777902220">Je ouder heeft extensierechten uitgezet</translation>
 <translation id="5159643365935452998">Instellingen bekijken voor automatisch gegevens wissen</translation>
@@ -6468,6 +6471,7 @@
 <translation id="7235716375204803342">Activiteiten ophalen...</translation>
 <translation id="7235737137505019098">Je beveiligingssleutel heeft niet voldoende ruimte voor meer accounts.</translation>
 <translation id="7235873936132740888">Sites kunnen speciale taken uitvoeren als je op bepaalde typen links klikt, zoals een bericht maken in je e-mailclient of nieuwe afspraken toevoegen aan je online agenda</translation>
+<translation id="7238609589076576185">Accentteken geplaatst.</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> heeft de overdracht geannuleerd</translation>
 <translation id="7240339475467890413">Verbinding maken met nieuwe hotspot?</translation>
 <translation id="7241389281993241388">Log in bij <ph name="TOKEN_NAME" /> om het klantcertificaat te importeren.</translation>
@@ -7307,6 +7311,7 @@
 <translation id="8030852056903932865">Goedkeuren</translation>
 <translation id="8032244173881942855">Kan tabblad niet casten.</translation>
 <translation id="8032569120109842252">Je volgt</translation>
+<translation id="8033023935541439900">Menu met accenttekens is geopend. Druk op de pijl-links of de pijl-rechts om te navigeren en op Enter om in te voegen.</translation>
 <translation id="8033827949643255796">geselecteerd</translation>
 <translation id="8033958968890501070">Time-out</translation>
 <translation id="8035059678007243127">Incognitopagina in Back-Forward Cache: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index 4eebf33..01eeb5c 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -5275,6 +5275,7 @@
 <translation id="6065289257230303064">ସାର୍ଟିଫିକେଟ୍‌ ବିଷୟ ଡିରେକ୍ଟୋରୀ ବୈଶିଷ୍ଟ୍ୟ</translation>
 <translation id="6066794465984119824">ଛବି ହାସ୍ ସେଟ୍ କରାଯାଇନାହିଁ</translation>
 <translation id="6069464830445383022">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ହେଉଛି ଆପଣଙ୍କ Chromebookର ସାଇନ୍-ଇନ୍</translation>
+<translation id="6070311415473175157">ସନ୍ଧାନ କରିବା ପାଇଁ ଇମେଜର ଏରିଆ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="6071181508177083058">ପାସ୍‌ୱାର୍ଡ ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation>
 <translation id="6071576563962215370">ସିଷ୍ଟମ୍, ଡିଭାଇସ୍ ଇନ୍‌ଷ୍ଟଲେସନ୍-ସମୟ ବୈଶିଷ୍ଟ୍ୟ ଲକ୍ ସ୍ଥାପନା କରିବାରେ ବିଫଳ ହୋଇଛି।</translation>
 <translation id="6072442788591997866">ଏହି ଡିଭାଇସରେ <ph name="APP_NAME" />କୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ। ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁ। ତ୍ରୁଟି କୋଡ୍: <ph name="ERROR_CODE" />।</translation>
@@ -7107,6 +7108,7 @@
 <translation id="7842692330619197998">ଯଦି ଆପଣ ଏକ ନୂଆ ଆକାଉଣ୍ଟ ତିଆରି କରିବାକୁ ଚାହାଁନ୍ତି g.co/ChromeEnterpriseAccountକୁ ଯାଆନ୍ତୁ।</translation>
 <translation id="78427265591841839"><ph name="VISUAL_SEARCH_PROVIDER" /> ମାଧ୍ୟମରେ ପୃଷ୍ଠାର ଯେ କୌଣସି ଅଂଶ ସନ୍ଧାନ କରନ୍ତୁ</translation>
 <translation id="784273751836026224">Linux ଅନଇନଷ୍ଟଲ୍ କରନ୍ତୁ</translation>
+<translation id="7842851769217535639">ସନ୍ଧାନ କରିବା ପାଇଁ ପୃଷ୍ଠାର ଯେ କୌଣସି ଅଂଶକୁ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="7843786652787044762"><ph name="WEB_DRIVE" />ରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation>
 <translation id="7844992432319478437">ତଫାତକୁ ଅପ୍‌ଡେଟ୍ କରାଯାଉଛି</translation>
 <translation id="7846634333498149051">କୀ'ବୋର୍ଡ</translation>
@@ -7162,6 +7164,7 @@
 <translation id="7893008570150657497">ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟର୍‍ରୁ ଫଟୋ, ସଙ୍ଗୀତ ଓ ଅନ୍ୟ ମିଡିଆ ଆକ୍ସେସ୍‌ କରନ୍ତୁ</translation>
 <translation id="7893153962594818789">ଏହି <ph name="DEVICE_TYPE" />ରେ ବ୍ଲୁଟୁଥ୍‌ ବନ୍ଦ ଅଛି। ଆପଣଙ୍କର ପାସ୍‌ୱର୍ଡ ଲେଖନ୍ତୁ ଏବଂ ବ୍ଲୁଟୁଥ୍‌ ଚାଲୁ କରନ୍ତୁ।</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (ଡିଫଲ୍ଟ)</translation>
+<translation id="7896292361319775586"><ph name="FILE" /> ସେଭ କରିବେ?</translation>
 <translation id="789722939441020330">ଏକାଧିକ ଫାଇଲକୁ ସ୍ୱଚାଳିତ ଭାବେ ଡାଉନଲୋଡ୍ କରିବା ପାଇଁ ସାଇଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation>
 <translation id="7897900149154324287">ଭବିଷ୍ୟତରେ, ଆପଣଙ୍କର ଅପସାରଣଯୋଗ୍ୟ ଡିଭାଇସ୍‌ଟିକୁ ଅନ୍‌ପ୍ଲଗ୍ କରିବା ପୂର୍ବରୁ ଏହାକୁ ଫାଇଲ୍ସ ଆପ୍‌ରୁ ବାହାର କରିଦେଇଥିବା ସୁନିଶ୍ଚିତ କରିନିଅନ୍ତୁ। ଅନ୍ୟଥା, ଆପଣ ହୁଏତ ଡାଟା ହରାଇପାରନ୍ତି।</translation>
 <translation id="7898725031477653577">ସର୍ବଦା ଅନୁବାଦ କରନ୍ତୁ</translation>
@@ -7498,6 +7501,7 @@
 <translation id="820568752112382238">ଅଧିକ ଦେଖାଯାଇଥିବା ସାଇଟ୍‍ଗୁଡ଼ିକ</translation>
 <translation id="8206745257863499010">ବ୍ଲୁସୀ</translation>
 <translation id="8206859287963243715">ସେଲ୍ୟୁଲାର୍</translation>
+<translation id="8208216423136871611">ସେଭ କରନ୍ତୁ ନାହିଁ</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ନୂଆ ବିଜ୍ଞପ୍ତି}other{#ଟି ନୂଆ ବିଜ୍ଞପ୍ତି}}</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ଡାଉନ୍‌ଲୋଡ୍‌ ଚାଲିଛି}other{ଡାଉନ୍‌ଲୋଡ୍‌ ଚାଲିଛି}}</translation>
 <translation id="8213449224684199188">ଫଟୋ ମୋଡ୍‌ରେ ପ୍ରବେଶ ହୋଇଛି</translation>
@@ -8296,6 +8300,7 @@
 <translation id="899403249577094719">Netscape ସାର୍ଟିଫିକେଟ୍ ଉପରେ ଆଧାରିତ URL</translation>
 <translation id="899657321862108550">ଆପଣଙ୍କର Chrome, ସର୍ବତ୍ର ଅଛି</translation>
 <translation id="899676909165543803">ଆପଣଙ୍କ କୀ'ବୋର୍ଡର ତଳ ଡାହାଣ-ହାତ କୀ' ଟିପଚିହ୍ନ ସେନ୍ସର୍ ଅଟେ। ଏହାକୁ ଯେ କୌଣସି ଆଙ୍ଗୁଠିରେ ହାଲୁକା ଭାବେ ସ୍ପର୍ଶ କରନ୍ତୁ।</translation>
+<translation id="8998078711690114234">ଏହି ପ୍ରକାରର ଫାଇଲ ବିପଦଜନକ ହୋଇପାରେ। ଯଦି ଆପଣ <ph name="ORIGIN" />କୁ ବିଶ୍ୱାସ କରନ୍ତି ତେବେ ହିଁ କେବଳ ଏହି ଫାଇଲକୁ ସେଭ କରନ୍ତୁ</translation>
 <translation id="8999560016882908256">ବିଭାଗ ସିଣ୍ଟାକ୍ସର ତ୍ରୁଟି: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">'<ph name="STATUS_TEXT" />' ସ୍ଥିତି ସହ <ph name="FAILURE_TIME" />ରେ ଡିଭାଇସ ମ୍ୟାନେଜମେଣ୍ଟ ସର୍ଭର ସହ କନେକ୍ସନ ବିଫଳ ହୋଇଛି</translation>
 <translation id="9003647077635673607">ସମସ୍ତ ୱେବ୍‌ ସାଇଟ୍‌ଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 82a5094..3c453ab7 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -5269,6 +5269,7 @@
 <translation id="6065289257230303064">Atrybuty katalogu podmiotu certyfikatu</translation>
 <translation id="6066794465984119824">Hasz obrazu nie został skonfigurowany</translation>
 <translation id="6069464830445383022">Loguj się na Chromebooku, używając konta Google</translation>
+<translation id="6070311415473175157">Zaznacz obszar obrazu na potrzeby wyszukiwania</translation>
 <translation id="6071181508177083058">potwierdź hasło</translation>
 <translation id="6071576563962215370">System nie mógł ustanowić blokady atrybutów instalacyjnych urządzenia.</translation>
 <translation id="6072442788591997866">Aplikacja <ph name="APP_NAME" /> nie jest dozwolona na tym urządzeniu. Skontaktuj się z administratorem. Kod błędu: <ph name="ERROR_CODE" />.</translation>
@@ -7102,6 +7103,7 @@
 <translation id="7842692330619197998">Jeśli chcesz utworzyć nowe konto, wejdź na g.co/ChromeEnterpriseAccount</translation>
 <translation id="78427265591841839">Przeszukaj dowolną część strony narzędziem <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="784273751836026224">Odinstaluj Linuksa</translation>
+<translation id="7842851769217535639">Zaznacz dowolną części strony na potrzeby wyszukiwania</translation>
 <translation id="7843786652787044762">Zaloguj się w usłudze <ph name="WEB_DRIVE" /></translation>
 <translation id="7844992432319478437">Aktualizowanie zmian</translation>
 <translation id="7846634333498149051">Klawiatura</translation>
@@ -7158,6 +7160,7 @@
 <translation id="7893008570150657497">Dostęp do zdjęć, muzyki i innych multimediów na komputerze</translation>
 <translation id="7893153962594818789">Bluetooth jest wyłączony na urządzeniu <ph name="DEVICE_TYPE" />. Wpisz hasło i włącz Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (domyślna)</translation>
+<translation id="7896292361319775586">Zapisać <ph name="FILE" />?</translation>
 <translation id="789722939441020330">Nie zezwalaj witrynom na automatyczne pobieranie wielu plików</translation>
 <translation id="7897900149154324287">W przyszłości pamiętaj, by przed odłączeniem urządzenia wymiennego wysunąć je w aplikacji Pliki. W przeciwnym razie możesz stracić dane.</translation>
 <translation id="7898725031477653577">Zawsze tłumacz</translation>
@@ -8298,6 +8301,7 @@
 <translation id="899403249577094719">Podstawowy adres URL certyfikatu firmy Netscape</translation>
 <translation id="899657321862108550">Twój Chrome na dowolnym urządzeniu</translation>
 <translation id="899676909165543803">Czytnik linii papilarnych to klawisz w prawym dolnym rogu klawiatury. Dotknij go delikatnie dowolnym palcem.</translation>
+<translation id="8998078711690114234">Ten typ pliku może być niebezpieczny. Zapisz ten plik tylko wtedy, gdy ufasz stronie <ph name="ORIGIN" /></translation>
 <translation id="8999560016882908256">Błąd składni sekcji: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Nie udało się połączyć z serwerem zarządzania urządzeniami (stan „<ph name="STATUS_TEXT" />” o godzinie „<ph name="FAILURE_TIME" />”)</translation>
 <translation id="9003647077635673607">Zezwól we wszystkich witrynach</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index f964bab..424b9d7 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -723,6 +723,7 @@
 <translation id="1676902103953506022">Detalhes das credenciais de <ph name="USERNAME" /> em <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Não é possível adicionar <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
+<translation id="1678794218766467608">Bloquear no modo de suspensão ou quando a tampa é fechada</translation>
 <translation id="1679068421605151609">Ferramentas do Programador</translation>
 <translation id="1679810534535368772">Tem a certeza de que pretende sair?</translation>
 <translation id="167983332380191032">Ocorreu um erro com o HTTP enviado pelo serviço de gestão.</translation>
@@ -3464,7 +3465,7 @@
 <translation id="4275830172053184480">Reiniciar o dispositivo</translation>
 <translation id="4277434192562187284">Origem da configuração XML</translation>
 <translation id="4278390842282768270">Permitido</translation>
-<translation id="4278498748067682896">Irá usar uma atualização do modo quiosque e sinalização, que só permite que o dispositivo seja executado no modo quiosque ou sinalização. Se quiser que os utilizadores iniciem sessão no dispositivo, retroceda e inscreva-se através da Atualização do Chrome Enterprise.</translation>
+<translation id="4278498748067682896">Irá usar uma atualização do modo quiosque e sinalização, que só permite que o dispositivo seja executado no modo quiosque ou sinalização. Se quiser que os utilizadores iniciem sessão no dispositivo, retroceda e inscreva-se através da Chrome Enterprise Upgrade.</translation>
 <translation id="4279129444466079448">Pode instalar até <ph name="PROFILE_LIMIT" /> perfis do eSIM neste dispositivo. Para adicionar outro perfil, remova primeiro um perfil existente.</translation>
 <translation id="4280325816108262082">O dispositivo desassocia-se automaticamente quando é desligado ou não está a ser utilizado</translation>
 <translation id="4281844954008187215">Termos de Utilização</translation>
@@ -3790,6 +3791,7 @@
 <translation id="4586275095964870617">Não foi possível abrir <ph name="URL" /> num navegador alternativo. Contacte o administrador do sistema.</translation>
 <translation id="4589713469967853491">Os registos foram escritos com êxito no diretório Transferências.</translation>
 <translation id="4590324241397107707">Armazenamento de bases de dados</translation>
+<translation id="459204634473266369">Nenhum dispositivo guardado em <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">App de desenho com a caneta stylus</translation>
 <translation id="4593021220803146968">&amp;Ir para <ph name="URL" /></translation>
 <translation id="4594577641390224176">Está à procura da página Acerca do sistema? Visite</translation>
@@ -4348,6 +4350,7 @@
 <translation id="5155327081870541046">Na barra de endereço, introduza o atalho para o site que quer pesquisar, tal como "@bookmarks". Em seguida, prima o seu atalho de teclado favorito e introduza o termo de pesquisa.</translation>
 <translation id="5156638757840305347">O cursor é realçado quando é apresentado ou se move</translation>
 <translation id="5157635116769074044">Fixar esta página ao Ecrã inicial...</translation>
+<translation id="5158206172605340248">Menu de acentos ignorado.</translation>
 <translation id="5159094275429367735">Configurar Crostini</translation>
 <translation id="5159419673777902220">O teu pai ou mãe desativou as autorizações das extensões.</translation>
 <translation id="5159643365935452998">Analise a limpeza de dados automática</translation>
@@ -5423,7 +5426,7 @@
 <translation id="6208521041562685716">Os dados móveis estão a ser ativados</translation>
 <translation id="6208725777148613371">Falha ao guardar no <ph name="WEB_DRIVE" /> – <ph name="INTERRUPT_REASON" /></translation>
 <translation id="6209838773933913227">Atualização de componentes</translation>
-<translation id="6209908325007204267">O seu dispositivo inclui uma Atualização do Chrome Enterprise, mas o seu nome de utilizador não está associado a uma conta de empresa. Crie uma conta de empresa ao visitar g.co/ChromeEnterpriseAccount num dispositivo secundário.</translation>
+<translation id="6209908325007204267">O seu dispositivo inclui uma Chrome Enterprise Upgrade, mas o seu nome de utilizador não está associado a uma conta de empresa. Crie uma conta de empresa ao visitar g.co/ChromeEnterpriseAccount num dispositivo secundário.</translation>
 <translation id="6210282067670792090">Na barra de endereço, utilize este atalho de teclado com atalhos para motores de pesquisa e pesquisa no site</translation>
 <translation id="621172521139737651">{COUNT,plural, =0{Abrir todos num &amp;novo grupo de separadores}=1{Abrir num &amp;novo grupo de separadores}other{Abrir todos ({COUNT}) num &amp;novo grupo de separadores}}</translation>
 <translation id="6212039847102026977">Mostrar propriedades de rede avançadas</translation>
@@ -6477,6 +6480,7 @@
 <translation id="7235716375204803342">A obter atividades…</translation>
 <translation id="7235737137505019098">A sua chave de segurança não tem espaço suficiente para mais contas.</translation>
 <translation id="7235873936132740888">Os sites podem processar tarefas especiais quando clicar em determinados tipos de links, como criar uma nova mensagem no cliente de email ou adicionar novos eventos ao calendário online.</translation>
+<translation id="7238609589076576185">Marca de destaque inserida.</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> cancelou a transferência</translation>
 <translation id="7240339475467890413">Pretende ligar à nova zona Wi-Fi?</translation>
 <translation id="7241389281993241388">Inicie sessão no <ph name="TOKEN_NAME" /> para importar o certificado de cliente.</translation>
@@ -7319,6 +7323,7 @@
 <translation id="8030852056903932865">Aprovar</translation>
 <translation id="8032244173881942855">Não é possível transmitir o separador.</translation>
 <translation id="8032569120109842252">A seguir</translation>
+<translation id="8033023935541439900">Menu de acentos aberto. Prima para a esquerda ou direita para navegar e Enter para inserir.</translation>
 <translation id="8033827949643255796">selecionado</translation>
 <translation id="8033958968890501070">Limite de tempo</translation>
 <translation id="8035059678007243127">Página de Navegação anónima na cache para a frente/para trás: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -8160,7 +8165,7 @@
 <translation id="8850251000316748990">Veja mais…</translation>
 <translation id="885246833287407341">Argumentos de função da API</translation>
 <translation id="8853586775156634952">Este cartão será guardado apenas neste dispositivo.</translation>
-<translation id="8855977033756560989">Este dispositivo Chromebook Enterprise é fornecido juntamente com a Atualização do Chrome Enterprise. Para tirar partido das capacidades empresariais, inscreva este dispositivo com uma conta de administrador Google.</translation>
+<translation id="8855977033756560989">Este dispositivo Chromebook Enterprise é fornecido juntamente com a Chrome Enterprise Upgrade. Para tirar partido das capacidades empresariais, inscreva este dispositivo com uma conta de administrador Google.</translation>
 <translation id="8856028055086294840">Restaurar apps e páginas</translation>
 <translation id="885701979325669005">Armazenamento</translation>
 <translation id="885746075120788020">As suas preferências e atividade guardadas estarão prontas em qualquer dispositivo com ChromeOS quando iniciar sessão com a sua Conta Google. Pode escolher o que quer sincronizar nas Definições.</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 3dfe267..2d6eaf9 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -5286,6 +5286,7 @@
 <translation id="6065289257230303064">සහතික මාතෘකා නාමාවලි ලක්ෂණ</translation>
 <translation id="6066794465984119824">රූප හැෂ් සකසා නැත</translation>
 <translation id="6069464830445383022">ඔබගේ Google ගිණුම ඔබගේ Chromebook පිරීමයි</translation>
+<translation id="6070311415473175157">සෙවීමට රූප කලාපය තෝරන්න</translation>
 <translation id="6071181508177083058">මුරපදය තහවුරු කරන්න</translation>
 <translation id="6071576563962215370">පද්ධතියට උපාංගයේ ස්ථාපන-කාල උපලක්‍ෂණ අඟුල ස්ථාපිත කළ නොහැකි විය.</translation>
 <translation id="6072442788591997866"><ph name="APP_NAME" /> හට මෙම උපාංගය මත අවසර නැත. ඔබේ පරිපාලක සම්බන්ධ කර ගන්න. දෝෂ කේතය: <ph name="ERROR_CODE" />.</translation>
@@ -7115,6 +7116,7 @@
 <translation id="7842692330619197998">ඔබට නව ගිණුමක් සෑදීමට අවශ්‍ය නම් g.co/ChromeEnterpriseAccount වෙත පිවිසෙන්න.</translation>
 <translation id="78427265591841839"><ph name="VISUAL_SEARCH_PROVIDER" /> සමඟ පිටුවේ ඕනෑම කොටසක් සොයන්න</translation>
 <translation id="784273751836026224">ලිනක්ස් අස්ථාපන කරන්න</translation>
+<translation id="7842851769217535639">සෙවීමට පිටුවෙහි ඕනෑම කොටසක් තෝරන්න</translation>
 <translation id="7843786652787044762"><ph name="WEB_DRIVE" /> වෙත පුරන්න</translation>
 <translation id="7844992432319478437">diff යාවත්කාලීන කරමින්</translation>
 <translation id="7846634333498149051">යතුරු පුවරුව</translation>
@@ -7170,6 +7172,7 @@
 <translation id="7893008570150657497">ප්‍රවේශ ඡායාරූප, සංගීතය, සහ ඔබේ පරිගණකයේ අනෙකුත් මාධ්‍ය</translation>
 <translation id="7893153962594818789">මෙම <ph name="DEVICE_TYPE" /> මත බ්ලූටූත් ක්‍රියාවිරහිතයි. ඔබේ මුරපදය ඇතුළු කර, බ්ලූටූත් ක්‍රියාත්මක කරන්න.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (පෙරනිමිය)</translation>
+<translation id="7896292361319775586"><ph name="FILE" /> සුරකින්න ද?</translation>
 <translation id="789722939441020330">බහුවිධ ගොනු ස්වයංක්‍රියව බාගැනීමට අඩවිවලට ඉඩ නොදෙන්න</translation>
 <translation id="7897900149154324287">අනාගතයේදී, Files යෙදුමෙහි ප්ලග් එක ඉවත් කිරීමට පෙර ඔබේ ඉවත් කළ හැකි උපාංගය ඉවත් කිරීමට මතක තබා ගන්න. එසේ නැතහොත් ඔබට දත්ත අහිමි වනු ඇත.</translation>
 <translation id="7898725031477653577">සැමවිටම පරිවර්තනය කරන්න</translation>
@@ -8307,6 +8310,7 @@
 <translation id="899403249577094719">Netscape සහතික මත පදනම් වූ URL</translation>
 <translation id="899657321862108550">ඔබේ Chrome, සැම තැනම</translation>
 <translation id="899676909165543803">ඇඟිලි සලකුණු සංවේදකවය ඔබේ යතුරු පුවරුවේ පහළ දකුණු පැත්තේ යතුර වෙයි. ඕනෑම ඇඟිල්ලකින් එය සුළුවෙන් ස්පර්ශ කරන්න.</translation>
+<translation id="8998078711690114234">මෙම වර්ගයේ ගොනුවක් භයානක විය හැක. ඔබ <ph name="ORIGIN" /> විශ්වාස කරන්නේ නම් පමණක් මෙම ගොනුව සුරකින්න</translation>
 <translation id="8999560016882908256">කොටස් කාරක රීති දෝෂය: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">උපාංග කළමනාකරණ සේවාදායකය වෙත සම්බන්ධතාව '<ph name="STATUS_TEXT" />' තත්ත්වය සහිතව <ph name="FAILURE_TIME" />ට අසාර්ථක විය</translation>
 <translation id="9003647077635673607">සියලු වෙබ් අඩවි මත ඉඩ දෙන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 268c9553..db0b5db 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -725,6 +725,7 @@
 <translation id="1676902103953506022">Prihlasovacie údaje používateľa <ph name="USERNAME" /> v doméne <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Rozšírenie <ph name="EXTENSION_TYPE_PARAMETER" /> sa nedá pridať</translation>
 <translation id="1677472565718498478">Zostávajúci čas: <ph name="TIME" /></translation>
+<translation id="1678794218766467608">Zamykať v režime spánku alebo po zavretí krytu</translation>
 <translation id="1679068421605151609">Nástroje pre vývojárov</translation>
 <translation id="1679810534535368772">Naozaj chcete túto obrazovku ukončiť?</translation>
 <translation id="167983332380191032">Služba správy odoslala chybu protokolu HTTP.</translation>
@@ -2553,6 +2554,7 @@
 <translation id="3406290648907941085">Môže používať zariadenia virtuálnej reality a údaje</translation>
 <translation id="3406396172897554194">Vyhľadávanie podľa jazyka alebo názvu vstupu</translation>
 <translation id="3406605057700382950">&amp;Zobraziť panel so záložkami</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{Do Správcu hesiel Google v účte <ph name="USER_EMAIL" /> bolo importované 1 heslo}few{Do Správcu hesiel Google v účte <ph name="USER_EMAIL" /> boli importované {NUM_PASSWORDS} heslá}many{{NUM_PASSWORDS} passwords imported to Google Password Manager for <ph name="USER_EMAIL" />}other{Do Správcu hesiel Google v účte <ph name="USER_EMAIL" /> bolo importovaných {NUM_PASSWORDS} hesiel}}</translation>
 <translation id="3409785640040772790">Mapy</translation>
 <translation id="3412265149091626468">Prejsť na výber</translation>
 <translation id="3413122095806433232">Vydavatelia CA: <ph name="LOCATION" /></translation>
@@ -3736,6 +3738,7 @@
 <translation id="4541123282641193691">Účet sa nepodarilo overiť. Skúste to neskôr alebo reštartujte Chromebook.</translation>
 <translation id="4541662893742891060">K tomuto profilu sa nepodarilo pripojiť. Technickú podporu vám poskytne operátor.</translation>
 <translation id="4541706525461326392">Odstraňuje sa profil. Môže to trvať niekoľko minút.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Do Správcu hesiel Google v tomto zariadení bolo importované 1 heslo}few{Do Správcu hesiel Google v tomto zariadení boli importované {NUM_PASSWORDS} heslá}many{{NUM_PASSWORDS} passwords imported to Google Password Manager on this device}other{Do Správcu hesiel Google v tomto zariadení bolo importovaných {NUM_PASSWORDS} hesiel}}</translation>
 <translation id="4542520061254486227">Čítať vaše údaje na weboch <ph name="WEBSITE_1" /> a <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Správca certifikátov</translation>
 <translation id="4544174279960331769">Predvolený modrý avatar</translation>
@@ -3791,6 +3794,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> sa nepodarilo otvoriť v alternatívnom prehliadači. Obráťte sa na správcu systému.</translation>
 <translation id="4589713469967853491">Denníky boli úspešne zapísané do adresára Stiahnuté.</translation>
 <translation id="4590324241397107707">Ukladací priestor databázy</translation>
+<translation id="459204634473266369">V e‑maile <ph name="PRIMARY_EMAIL" /> nie sú uložené žiadne zariadenia</translation>
 <translation id="4592891116925567110">Aplikácia na kreslenie dotykovým perom</translation>
 <translation id="4593021220803146968">&amp;Prejsť na adresu <ph name="URL" /></translation>
 <translation id="4594577641390224176">Hľadáte stránku s informáciami o systéme? Prejdite na</translation>
@@ -4349,6 +4353,7 @@
 <translation id="5155327081870541046">V paneli s adresou zadajte odkaz zodpovedajúci webu, na ktorom chcete hľadať, napríklad @bookmarks. Potom stlačte preferovanú klávesovú skratku a zadajte hľadaný výraz.</translation>
 <translation id="5156638757840305347">Kurzor bude po zobrazení alebo posunutí zvýraznený</translation>
 <translation id="5157635116769074044">Pripnúť túto stránku na Úvodnú obrazovku...</translation>
+<translation id="5158206172605340248">Ponuka s diakritickými znamienkami bola zavretá.</translation>
 <translation id="5159094275429367735">Nastaviť Crostini</translation>
 <translation id="5159419673777902220">Tvoj rodič deaktivoval povolenia rozšírenia</translation>
 <translation id="5159643365935452998">Skontrolujte automatické vymazávanie údajov</translation>
@@ -6226,6 +6231,7 @@
 <translation id="6968288415730398122">Ak chcete konfigurovať zámku obrazovky, zadajte heslo</translation>
 <translation id="6969047215179982698">Vypnúť Zdieľanie nablízku</translation>
 <translation id="6970480684834282392">Typ spustenia</translation>
+<translation id="6970543303783413625">Heslá sa nedajú importovať. Naraz môžete importovať najviac tento počet hesiel: <ph name="COUNT" />.</translation>
 <translation id="6970856801391541997">Vytlačiť konkrétne stránky</translation>
 <translation id="6970861306198150268">Nezabudnite si aktuálne heslo tohto webu uložiť</translation>
 <translation id="6972180789171089114">Zvuk / video</translation>
@@ -6457,6 +6463,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Opustiť stránku}few{Opustiť stránky}many{Opustiť stránky}other{Opustiť stránky}}</translation>
 <translation id="7207457272187520234">Odosielanie údajov o využití a diagnostiky. Toto zariadenie momentálne automaticky odosiela Googlu diagnostiky a údaje o používaní zariadenia a aplikácií. Pomôžu zvýšiť stabilitu systému a aplikácií a poskytovať ďalšie zlepšenia. Niektoré súhrnné údaje tiež pomôžu aplikáciám Google a partnerom, ako napríklad vývojárom pre Android. Používanie tohto nastavenia je presadzované vlastníkom. Ak aktivujete ďalšiu aktivitu na internete a v aplikáciách, tieto údaje sa uložia vo vašom účte Google.</translation>
 <translation id="7207631048330366454">Vyhľadajte aplikácie</translation>
+<translation id="7210471695184432500">Ak chcete importovať heslá do Správcu hesiel Google v tomto zariadení, vyberte súbor CSV</translation>
 <translation id="7210499381659830293">Tlačiarne s rozšíreniami</translation>
 <translation id="7211783048245131419">Zatiaľ nebol pridelený žiadny prepínač</translation>
 <translation id="7212097698621322584">Zadajte svoj aktuálny kód PIN a zmeňte ho. Ak ho nepoznáte, musíte resetovať bezpečnostný kľúč a potom vytvoriť nový PIN.</translation>
@@ -6481,6 +6488,7 @@
 <translation id="7235716375204803342">Načítavajú sa aktivity…</translation>
 <translation id="7235737137505019098">Bezpečnostný kľúč nemá dostatok miesta na ďalšie účty.</translation>
 <translation id="7235873936132740888">Keď kliknete na určité typy odkazov, umožníte webom vykonávať špeciálne úlohy, napríklad vytvoriť novú správu v e‑mailovom klientovi alebo pridať novú udalosť do online kalendára</translation>
+<translation id="7238609589076576185">Bolo vložené diakritické znamienko.</translation>
 <translation id="7239108166256782787">Zariadenie <ph name="DEVICE_NAME" /> prenos zrušilo</translation>
 <translation id="7240339475467890413">Pripojiť k novému hotspotu?</translation>
 <translation id="7241389281993241388">Ak chcete importovať certifikát klienta, prihláste sa do <ph name="TOKEN_NAME" />.</translation>
@@ -7322,6 +7330,7 @@
 <translation id="8030852056903932865">Schváliť</translation>
 <translation id="8032244173881942855">Kartu nie je možné prenášať.</translation>
 <translation id="8032569120109842252">Sledované</translation>
+<translation id="8033023935541439900">Ponuka diakritických znamienok je otvorená. Pohybujte sa klávesami so šípkou doľava alebo doprava a stlačením klávesa Enter požadovanú možnosť vložte.</translation>
 <translation id="8033827949643255796">vybrané</translation>
 <translation id="8033958968890501070">Časový limit vypršal</translation>
 <translation id="8035059678007243127">Stránka v režime inkognito v spätnej vyrovnávacej pamäti: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -7514,6 +7523,7 @@
 <translation id="8206859287963243715">Mobilné</translation>
 <translation id="8208216423136871611">Neuložiť</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nové upozornenie}few{# nové upozornenia}many{# new notifications}other{# nových upozornení}}</translation>
+<translation id="821119981794423735">Ak chcete importovať heslá do Správcu hesiel Google pre účet <ph name="USER_EMAIL" />, vyberte súbor CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Sťahuje sa}few{Sťahujú sa}many{Sťahujú sa}other{Sťahujú sa}}</translation>
 <translation id="8213449224684199188">Bol aktivovaný fotografický režim</translation>
 <translation id="8214489666383623925">Otvoriť súbor...</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 74808bd61..2d8a319 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -729,6 +729,7 @@
 <translation id="1676902103953506022">Podrobnosti o poverilnicah za uporabniško ime <ph name="USERNAME" /> v domeni <ph name="DOMAIN" />.</translation>
 <translation id="1677306805708094828">Ni mogoče dodati tega: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Še <ph name="TIME" /></translation>
+<translation id="1678794218766467608">Zaklepanje v načinu spanja ali ko je pokrov zaprt</translation>
 <translation id="1679068421605151609">Razvijalska orodja</translation>
 <translation id="1679810534535368772">Ali ste prepričani, da želite zapreti?</translation>
 <translation id="167983332380191032">Storitev upravljanja je poslala napako HTTP.</translation>
@@ -2569,6 +2570,7 @@
 <translation id="3406290648907941085">Dovoljena je uporaba naprav in podatkov za navidezno resničnost</translation>
 <translation id="3406396172897554194">Iskanje glede na jezik ali ime načina vnosa</translation>
 <translation id="3406605057700382950">&amp;Pokaži vrstico z zaznamki</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 geslo je bilo uvoženo v Googlov upravitelj gesel za račun <ph name="USER_EMAIL" />.}one{{NUM_PASSWORDS} geslo je bilo uvoženo v Googlov upravitelj gesel za račun <ph name="USER_EMAIL" />.}two{{NUM_PASSWORDS} gesli sta bili uvoženi v Googlov upravitelj gesel za račun <ph name="USER_EMAIL" />.}few{{NUM_PASSWORDS} gesla so bila uvožena v Googlov upravitelj gesel za račun <ph name="USER_EMAIL" />.}other{{NUM_PASSWORDS} gesel je bilo uvoženih v Googlov upravitelj gesel za račun <ph name="USER_EMAIL" />.}}</translation>
 <translation id="3409785640040772790">Zemljevidi</translation>
 <translation id="3412265149091626468">Skoči na izbor</translation>
 <translation id="3413122095806433232">Izdajatelji overiteljev potrdil: <ph name="LOCATION" /></translation>
@@ -3753,6 +3755,7 @@
 <translation id="4541123282641193691">Računa ni bilo mogoče preveriti. Poskusite znova ali znova zaženite Chromebook.</translation>
 <translation id="4541662893742891060">Ni se mogoče povezati s tem profilom. Za tehnično podporo se obrnite na operaterja.</translation>
 <translation id="4541706525461326392">Odstranjevanje profila. To lahko traja nekaj minut.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 geslo je bilo uvoženo v Googlov upravitelj gesel v tej napravi.}one{{NUM_PASSWORDS} geslo je bilo uvoženo v Googlov upravitelj gesel v tej napravi.}two{{NUM_PASSWORDS} gesli sta bili uvoženi v Googlov upravitelj gesel v tej napravi.}few{{NUM_PASSWORDS} gesla so bila uvožena v Googlov upravitelj gesel v tej napravi.}other{{NUM_PASSWORDS} gesel je bilo uvoženih v Googlov upravitelj gesel v tej napravi.}}</translation>
 <translation id="4542520061254486227">Branje vaših podatkov na spletnih mestih <ph name="WEBSITE_1" /> in <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Upravitelj potrdil</translation>
 <translation id="4544174279960331769">Privzeti modri avatar</translation>
@@ -3808,6 +3811,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> ni bilo mogoče odpreti v nadomestnem brskalniku. Obrnite se na skrbnika sistema.</translation>
 <translation id="4589713469967853491">Dnevniki so bili uspešno zapisani v mapo Prenosi.</translation>
 <translation id="4590324241397107707">Shramba zbirke podatkov</translation>
+<translation id="459204634473266369">Nobena naprava ni shranjena v računu <ph name="PRIMARY_EMAIL" />.</translation>
 <translation id="4592891116925567110">Aplikacija za risanje s pisalom</translation>
 <translation id="4593021220803146968">&amp;Pojdi na <ph name="URL" /></translation>
 <translation id="4594577641390224176">Ali iščete stran z vizitko sistema? Obiščite</translation>
@@ -4366,6 +4370,7 @@
 <translation id="5155327081870541046">V naslovni vrstici vnesite bližnjico za spletno mesto, po katerem želite iskati, na primer »@bookmarks«. Nato pritisnite želene bližnjične tipke in vnesite iskalno poizvedbo.</translation>
 <translation id="5156638757840305347">Kazalec je označen, ko se pojavi ali premika.</translation>
 <translation id="5157635116769074044">Pripni to stran na začetni zaslon ...</translation>
+<translation id="5158206172605340248">Meni z naglasnimi znamenji je opuščen.</translation>
 <translation id="5159094275429367735">Nastavitev Crostinija</translation>
 <translation id="5159419673777902220">Tvoj starš je onemogočil dovoljenja za razširitve</translation>
 <translation id="5159643365935452998">Pregled samodejnega brisanja podatkov</translation>
@@ -6247,6 +6252,7 @@
 <translation id="6968288415730398122">Vnesite geslo, če želite konfigurirati zaklepanje zaslona</translation>
 <translation id="6969047215179982698">Izklop deljenja v bližini</translation>
 <translation id="6970480684834282392">Vrsta zagona</translation>
+<translation id="6970543303783413625">Gesel ni mogoče uvoziti. Naenkrat lahko uvozite največ toliko gesel: <ph name="COUNT" />.</translation>
 <translation id="6970856801391541997">Natisni določene strani</translation>
 <translation id="6970861306198150268">Poskrbite, da boste shranili trenutno geslo za to spletno mesto.</translation>
 <translation id="6972180789171089114">Zvok/video</translation>
@@ -6478,6 +6484,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Zapri stran}one{Zapri strani}two{Zapri strani}few{Zapri strani}other{Zapri strani}}</translation>
 <translation id="7207457272187520234">Pošiljanje podatkov o uporabi in diagnostičnih podatkov. Ta naprava trenutno Googlu samodejno pošilja diagnostične podatke ter podatke o uporabi naprave in aplikacij. Te podatke uporabljamo za izboljšanje stabilnosti sistema in izvajanja aplikacij ter drugega. Nekateri združeni podatki bodo pomagali tudi Googlovim aplikacijam in partnerjem, na primer razvijalcem za Android. To nastavitev je uveljavil lastnik naprave. Če ste vklopili dodatno beleženje dejavnosti v spletu in aplikacijah, bodo ti podatki morda shranjeni v vašem računu Google.</translation>
 <translation id="7207631048330366454">Iščite aplikacije</translation>
+<translation id="7210471695184432500">Če želite v Googlov upravitelj gesel uvoziti gesla v tej napravi, izberite datoteko CSV.</translation>
 <translation id="7210499381659830293">Tiskalniki razširitev</translation>
 <translation id="7211783048245131419">Dodeljeno ni bilo še nobeno stikalo.</translation>
 <translation id="7212097698621322584">Vnesite trenutno kodo PIN, da jo spremenite. Če kode PIN ne poznate, morate ponastaviti varnostni ključ, nato ustvarite novo kodo PIN.</translation>
@@ -6502,6 +6509,7 @@
 <translation id="7235716375204803342">Pridobivanje dejavnosti ...</translation>
 <translation id="7235737137505019098">Na varnostnem ključu ni dovolj prostora za dodatne račune.</translation>
 <translation id="7235873936132740888">Ko kliknete določene vrste povezav, lahko spletna mesta obravnavajo posebna opravila, kot je ustvarjanje novega sporočila v e-poštnem odjemalcu ali dodajanje novih dogodkov v spletni koledar.</translation>
+<translation id="7238609589076576185">Naglasno znamenje je vstavljeno.</translation>
 <translation id="7239108166256782787">Naprava <ph name="DEVICE_NAME" /> je preklicala prenos.</translation>
 <translation id="7240339475467890413">Se želite povezati z novo dostopno točko?</translation>
 <translation id="7241389281993241388">Prijavite se v <ph name="TOKEN_NAME" />, da uvozite potrdilo odjemalca.</translation>
@@ -7344,6 +7352,7 @@
 <translation id="8030852056903932865">Odobri</translation>
 <translation id="8032244173881942855">Zavihka ni mogoče predvajati.</translation>
 <translation id="8032569120109842252">Spremljate</translation>
+<translation id="8033023935541439900">Meni z naglasnimi znamenji je odprt. Za pomikanje pritiskajte tipko za levo ali desno, nato pa tipko Enter, da ga vstavite.</translation>
 <translation id="8033827949643255796">izbrani</translation>
 <translation id="8033958968890501070">Potek časovne omejitve</translation>
 <translation id="8035059678007243127">Anonimna stran v predpomnilniku za hitro obnovitev strani: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -7536,6 +7545,7 @@
 <translation id="8206859287963243715">Prenosni</translation>
 <translation id="8208216423136871611">Ne shrani</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Novo obvestilo}one{# novo obvestilo}two{# novi obvestili}few{# nova obvestila}other{# novih obvestil}}</translation>
+<translation id="821119981794423735">Če želite v Googlov upravitelj gesel uvoziti gesla za račun <ph name="USER_EMAIL" />, izberite datoteko CSV.</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Poteka prenos}one{Poteka prenos}two{Potekata prenosa}few{Potekajo prenosi}other{Potekajo prenosi}}</translation>
 <translation id="8213449224684199188">Izbran je način za fotografije</translation>
 <translation id="8214489666383623925">Odpri datoteko ...</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 54a9578..af5a14a 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -722,6 +722,7 @@
 <translation id="1676902103953506022">Detalji akreditiva za korisnika <ph name="USERNAME" /> na <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nismo uspeli da dodamo: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> je preostalo</translation>
+<translation id="1678794218766467608">Zaključaj u režimu spavanja ili kada je poklopac zatvoren</translation>
 <translation id="1679068421605151609">Alatke za programere</translation>
 <translation id="1679810534535368772">Želite li stvarno da izađete?</translation>
 <translation id="167983332380191032">Usluga upravljanja je poslala HTTP grešku.</translation>
@@ -3788,6 +3789,7 @@
 <translation id="4586275095964870617">Nismo uspeli da otvorimo <ph name="URL" /> u alternativnom pregledaču. Kontaktirajte administratora sistema.</translation>
 <translation id="4589713469967853491">Evidencije su upisane u direktorijum Podešavanja.</translation>
 <translation id="4590324241397107707">Skladištenje baze podataka</translation>
+<translation id="459204634473266369">Nema sačuvanih uređaja na <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">Aplikacija za crtanje pomoću pisaljke</translation>
 <translation id="4593021220803146968">&amp;Idi na <ph name="URL" /></translation>
 <translation id="4594577641390224176">Tražite stranicu sa osnovnim podacima o sistemu? Posetite</translation>
@@ -4346,6 +4348,7 @@
 <translation id="5155327081870541046">U traci za adresu unesite prečicu za sajt koji želite da pretražite, na primer, „@bookmarks“. Zatim pritisnite željenu tastersku prečicu i unesite termin za pretragu.</translation>
 <translation id="5156638757840305347">Kursor se ističe kad se pojavi ili pomeri</translation>
 <translation id="5157635116769074044">Zakači ovu stranicu na početni ekran...</translation>
+<translation id="5158206172605340248">Meni sa oznakama za akcenat je odbačen.</translation>
 <translation id="5159094275429367735">Podesite Crostini</translation>
 <translation id="5159419673777902220">Tvoj roditelj je onemogućio dozvole za dodatke</translation>
 <translation id="5159643365935452998">Pregledajte automatsko brisanje podataka</translation>
@@ -6478,6 +6481,7 @@
 <translation id="7235716375204803342">Preuzimaju se aktivnosti...</translation>
 <translation id="7235737137505019098">Na bezbednosnom ključu nema dovoljno prostora za još naloga.</translation>
 <translation id="7235873936132740888">Sajtovi mogu da obavljaju posebne zadatke kada kliknete na određeni tip linkova. Na primer, mogu da sastave novu poruku u imejl klijentu ili da dodaju nove događaje u onlajn kalendar</translation>
+<translation id="7238609589076576185">Umetnuta je oznaka za akcenat.</translation>
 <translation id="7239108166256782787">Uređaj <ph name="DEVICE_NAME" /> je otkazao prenos</translation>
 <translation id="7240339475467890413">Želite li da se povežete na novi hotspot?</translation>
 <translation id="7241389281993241388">Prijavite se na <ph name="TOKEN_NAME" /> da biste uvezli sertifikat klijenta.</translation>
@@ -7319,6 +7323,7 @@
 <translation id="8030852056903932865">Odobri</translation>
 <translation id="8032244173881942855">Nije uspelo prebacivanje kartice.</translation>
 <translation id="8032569120109842252">Pratite</translation>
+<translation id="8033023935541439900">Otvoren je meni sa oznakama za akcenat. Pritisnite strelicu ulevo ili udesno da biste se kretali i pritisnite Enter da biste umetnuli.</translation>
 <translation id="8033827949643255796">izabrano</translation>
 <translation id="8033958968890501070">Vreme je isteklo</translation>
 <translation id="8035059678007243127">Cela keširana stranice bez arhiviranja: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 6f2b0011..1db46fa 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -722,6 +722,7 @@
 <translation id="1676902103953506022">Детаљи акредитива за корисника <ph name="USERNAME" /> на <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Нисмо успели да додамо: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> је преостало</translation>
+<translation id="1678794218766467608">Закључај у режиму спавања или када је поклопац затворен</translation>
 <translation id="1679068421605151609">Алатке за програмере</translation>
 <translation id="1679810534535368772">Желите ли стварно да изађете?</translation>
 <translation id="167983332380191032">Услуга управљања је послала HTTP грешку.</translation>
@@ -3788,6 +3789,7 @@
 <translation id="4586275095964870617">Нисмо успели да отворимо <ph name="URL" /> у алтернативном прегледачу. Контактирајте администратора система.</translation>
 <translation id="4589713469967853491">Евиденције су уписане у директоријум Подешавања.</translation>
 <translation id="4590324241397107707">Складиштење базе података</translation>
+<translation id="459204634473266369">Нема сачуваних уређаја на <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="4592891116925567110">Апликација за цртање помоћу писаљке</translation>
 <translation id="4593021220803146968">&amp;Иди на <ph name="URL" /></translation>
 <translation id="4594577641390224176">Тражите страницу са основним подацима о систему? Посетите</translation>
@@ -4346,6 +4348,7 @@
 <translation id="5155327081870541046">У траци за адресу унесите пречицу за сајт који желите да претражите, на пример, „@bookmarks“. Затим притисните жељену тастерску пречицу и унесите термин за претрагу.</translation>
 <translation id="5156638757840305347">Курсор се истиче кад се појави или помери</translation>
 <translation id="5157635116769074044">Закачи ову страницу на почетни екран...</translation>
+<translation id="5158206172605340248">Мени са ознакама за акценат је одбачен.</translation>
 <translation id="5159094275429367735">Подесите Crostini</translation>
 <translation id="5159419673777902220">Твој родитељ је онемогућио дозволе за додатке</translation>
 <translation id="5159643365935452998">Прегледајте аутоматско брисање података</translation>
@@ -6478,6 +6481,7 @@
 <translation id="7235716375204803342">Преузимају се активности...</translation>
 <translation id="7235737137505019098">На безбедносном кључу нема довољно простора за још налога.</translation>
 <translation id="7235873936132740888">Сајтови могу да обављају посебне задатке када кликнете на одређени тип линкова. На пример, могу да саставе нову поруку у имејл клијенту или да додају нове догађаје у онлајн календар</translation>
+<translation id="7238609589076576185">Уметнута је ознака за акценат.</translation>
 <translation id="7239108166256782787">Уређај <ph name="DEVICE_NAME" /> је отказао пренос</translation>
 <translation id="7240339475467890413">Желите ли да се повежете на нови хотспот?</translation>
 <translation id="7241389281993241388">Пријавите се на <ph name="TOKEN_NAME" /> да бисте увезли сертификат клијента.</translation>
@@ -7319,6 +7323,7 @@
 <translation id="8030852056903932865">Одобри</translation>
 <translation id="8032244173881942855">Није успело пребацивање картице.</translation>
 <translation id="8032569120109842252">Пратите</translation>
+<translation id="8033023935541439900">Отворен је мени са ознакама за акценат. Притисните стрелицу улево или удесно да бисте се кретали и притисните Enter да бисте уметнули.</translation>
 <translation id="8033827949643255796">изабрано</translation>
 <translation id="8033958968890501070">Време је истекло</translation>
 <translation id="8035059678007243127">Цела кеширана странице без архивирања: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 5a4dc015..52e0ece 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -2566,6 +2566,7 @@
 <translation id="3406290648907941085">Får använda VR-enheter och VR-data</translation>
 <translation id="3406396172897554194">Sök efter språk eller inmatningsmetod</translation>
 <translation id="3406605057700382950">&amp;Visa bokmärkesfältet</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 lösenord har importerats till Google Lösenordshantering för <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} lösenord har importerats till Google Lösenordshantering för <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Hoppa till markering</translation>
 <translation id="3413122095806433232">CA-utfärdare: <ph name="LOCATION" /></translation>
@@ -3750,6 +3751,7 @@
 <translation id="4541123282641193691">Det gick inte att verifiera kontot. Försök igen eller starta om Chromebook.</translation>
 <translation id="4541662893742891060">Det gick inte att ansluta till profilen. Kontakta operatören för teknisk support.</translation>
 <translation id="4541706525461326392">Tar bort profilen. Det kan ta några minuter.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 lösenord har importerats till Google Lösenordshantering på den här enheten}other{{NUM_PASSWORDS} lösenord har importerats till Google Lösenordshantering på den här enheten}}</translation>
 <translation id="4542520061254486227">Läsa din data på <ph name="WEBSITE_1" /> och <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Certifikathanterare</translation>
 <translation id="4544174279960331769">Blå standardavatar</translation>
@@ -6235,6 +6237,7 @@
 <translation id="6968288415730398122">Ange lösenordet om du vill konfigurera skärmlås</translation>
 <translation id="6969047215179982698">Stäng av Närdelning</translation>
 <translation id="6970480684834282392">Starttyp</translation>
+<translation id="6970543303783413625">Det gick inte att importera lösenorden. Du kan bara importera högst <ph name="COUNT" /> lösenord åt gången.</translation>
 <translation id="6970856801391541997">Skriv ut vissa sidor</translation>
 <translation id="6970861306198150268">Se till att spara ditt nuvarande lösenord för den här webbplatsen</translation>
 <translation id="6972180789171089114">Ljud/video</translation>
@@ -6466,6 +6469,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Lämna sidan}other{Lämna sidorna}}</translation>
 <translation id="7207457272187520234">Skicka diagnostik- och användningsdata. Den här enheten skickar för närvarande diagnostikdata, enhetsdata och data om appanvändning till Google automatiskt. Denna data används till att förbättra systemets och apparnas stabilitet med mera. Viss samlad data används även till att förbättra appar från Google och Googles partner, till exempel Android-utvecklare. Ägaren har gjort denna inställning obligatorisk. Om ytterligare webb- och appaktivitet har aktiverats kan denna data sparas i Google-kontot.</translation>
 <translation id="7207631048330366454">Sök efter appar</translation>
+<translation id="7210471695184432500">Välj en CSV-fil för att importera lösenord till Google Lösenordshantering på den här enheten</translation>
 <translation id="7210499381659830293">Tilläggsskrivare</translation>
 <translation id="7211783048245131419">Ingen brytare har tilldelats ännu</translation>
 <translation id="7212097698621322584">Ange den nuvarande pinkoden om du vill ändra den. Om du inte kan pinkoden måste du återställa säkerhetsnyckeln och sedan ställa in en ny pinkod.</translation>
@@ -7522,6 +7526,7 @@
 <translation id="8206859287963243715">Mobil</translation>
 <translation id="8208216423136871611">Spara inte</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ny avisering}other{# nya aviseringar}}</translation>
+<translation id="821119981794423735">Välj en CSV-fil för att importera lösenord till Google Lösenordshantering för <ph name="USER_EMAIL" /></translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Nedladdning pågår}other{Nedladdningar pågår}}</translation>
 <translation id="8213449224684199188">Fotoläget har aktiverats</translation>
 <translation id="8214489666383623925">Öppna fil...</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 12315c73..4c14d4b 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -2552,6 +2552,7 @@
 <translation id="3406290648907941085">ได้รับอนุญาตให้ใช้อุปกรณ์และข้อมูล Virtual Reality</translation>
 <translation id="3406396172897554194">ค้นหาตามภาษาหรือชื่อการป้อนข้อมูล</translation>
 <translation id="3406605057700382950">&amp;แสดงแถบบุ๊กมาร์ก</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{นำเข้ารหัสผ่าน 1 รายการสำหรับ <ph name="USER_EMAIL" /> ไปยัง Google เครื่องมือจัดการรหัสผ่านแล้ว}other{นำเข้ารหัสผ่าน {NUM_PASSWORDS} รายการสำหรับ <ph name="USER_EMAIL" /> ไปยัง Google เครื่องมือจัดการรหัสผ่านแล้ว}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">ข้ามไปที่สิ่งที่เลือก</translation>
 <translation id="3413122095806433232">ผู้ออก CA: <ph name="LOCATION" /></translation>
@@ -3735,6 +3736,7 @@
 <translation id="4541123282641193691">ยืนยันบัญชีไม่ได้ โปรดลองอีกครั้งหรือรีสตาร์ท Chromebook</translation>
 <translation id="4541662893742891060">เชื่อมต่อโปรไฟล์นี้ไม่ได้ โปรดติดต่อผู้ให้บริการเพื่อรับการสนับสนุนด้านเทคนิค</translation>
 <translation id="4541706525461326392">กำลังนำโปรไฟล์ออก การดำเนินการนี้อาจใช้เวลาสักครู่</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{นำเข้ารหัสผ่าน 1 รายการบนอุปกรณ์นี้ไปยัง Google เครื่องมือจัดการรหัสผ่านแล้ว}other{นำเข้ารหัสผ่าน {NUM_PASSWORDS} รายการบนอุปกรณ์นี้ไปยัง Google เครื่องมือจัดการรหัสผ่านแล้ว}}</translation>
 <translation id="4542520061254486227">อ่านข้อมูลใน <ph name="WEBSITE_1" /> และ <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">ตัวจัดการใบรับรอง</translation>
 <translation id="4544174279960331769">รูปโปรไฟล์เริ่มต้นสีฟ้า</translation>
@@ -6220,6 +6222,7 @@
 <translation id="6968288415730398122">ป้อนรหัสผ่านเพื่อกำหนดค่าการล็อกหน้าจอ</translation>
 <translation id="6969047215179982698">ปิดการแชร์ใกล้เคียง</translation>
 <translation id="6970480684834282392">ประเภทการเริ่มต้น</translation>
+<translation id="6970543303783413625">นำเข้ารหัสผ่านไม่ได้ คุณนำเข้ารหัสผ่านได้ไม่เกิน <ph name="COUNT" /> รายการต่อครั้ง</translation>
 <translation id="6970856801391541997">พิมพ์หน้าเว็บที่ระบุ</translation>
 <translation id="6970861306198150268">ตรวจสอบว่าคุณกำลังบันทึกรหัสผ่านปัจจุบันสำหรับเว็บไซต์นี้</translation>
 <translation id="6972180789171089114">เสียง/วิดีโอ</translation>
@@ -6451,6 +6454,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{หน้าที่ออกไป}other{หน้าที่ออกไป}}</translation>
 <translation id="7207457272187520234">ส่งข้อมูลการใช้งานและการวินิจฉัย ปัจจุบันอุปกรณ์นี้ส่งข้อมูลการวินิจฉัย อุปกรณ์ และการใช้งานแอปไปยัง Google โดยอัตโนมัติ ซึ่งจะช่วยให้แอปและระบบมีความเสถียร พร้อมทั้งปรับปรุงด้านอื่นๆ ข้อมูลที่รวบรวมมาบางส่วนจะมีประโยชน์ต่อแอปและพาร์ทเนอร์ของ Google ด้วย เช่น นักพัฒนาแอป Android เจ้าของเป็นผู้บังคับใช้การตั้งค่านี้ หากเปิดการตั้งค่ากิจกรรมเพิ่มเติมบนเว็บและแอปไว้ ระบบอาจบันทึกข้อมูลนี้ไว้ในบัญชี Google ของคุณ</translation>
 <translation id="7207631048330366454">ค้นหาแอป</translation>
+<translation id="7210471695184432500">หากต้องการนำเข้ารหัสผ่านบนอุปกรณ์นี้ไปยัง Google เครื่องมือจัดการรหัสผ่าน ให้เลือกไฟล์ CSV</translation>
 <translation id="7210499381659830293">เครื่องพิมพ์ที่สั่งการผ่านส่วนขยาย</translation>
 <translation id="7211783048245131419">ยังไม่ได้กำหนดสวิตช์</translation>
 <translation id="7212097698621322584">ป้อน PIN ปัจจุบันเพื่อเปลี่ยน PIN หากไม่ทราบ PIN คุณจะต้องรีเซ็ตคีย์ความปลอดภัย แล้วสร้าง PIN ใหม่</translation>
@@ -7510,6 +7514,7 @@
 <translation id="8206859287963243715">โทรศัพท์มือถือ</translation>
 <translation id="8208216423136871611">ไม่บันทึก</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{การแจ้งเตือนใหม่}other{การแจ้งเตือนใหม่ # รายการ}}</translation>
+<translation id="821119981794423735">หากต้องการนำเข้ารหัสผ่านสำหรับ <ph name="USER_EMAIL" /> ไปยัง Google เครื่องมือจัดการรหัสผ่าน ให้เลือกไฟล์ CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{อยู่ระหว่างการดาวน์โหลด}other{อยู่ระหว่างการดาวน์โหลด}}</translation>
 <translation id="8213449224684199188">เข้าสู่โหมดรูปภาพแล้ว</translation>
 <translation id="8214489666383623925">เปิดไฟล์...</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index fbfd826..5f3565bd 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -723,6 +723,7 @@
 <translation id="1676902103953506022"><ph name="USERNAME" /> adlı kullanıcı için <ph name="DOMAIN" /> alanındaki kimlik bilgisi ayrıntıları</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> eklenemiyor</translation>
 <translation id="1677472565718498478">Kalan süre: <ph name="TIME" /></translation>
+<translation id="1678794218766467608">Uyku modundayken veya kapak kapalıyken kilitle</translation>
 <translation id="1679068421605151609">Geliştirici Araçları</translation>
 <translation id="1679810534535368772">Çıkmak istediğinizden emin misiniz?</translation>
 <translation id="167983332380191032">Yönetim hizmeti HTTP hatası gönderdi.</translation>
@@ -3787,6 +3788,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> alternatif tarayıcıda açılamadı. Lütfen sistem yöneticinizle iletişime geçin.</translation>
 <translation id="4589713469967853491">Günlükler, İndirilenler dizinine yazıldı.</translation>
 <translation id="4590324241397107707">Veritabanı depolama</translation>
+<translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> hesabına kayıtlı cihaz yok</translation>
 <translation id="4592891116925567110">Ekran kalemiyle çizim uygulaması</translation>
 <translation id="4593021220803146968"><ph name="URL" /> adresine &amp;git</translation>
 <translation id="4594577641390224176">Sistem bilgisi sayfasını mı arıyorsunuz? Şu adresi ziyaret edin:</translation>
@@ -4345,6 +4347,7 @@
 <translation id="5155327081870541046">Adres çubuğuna arama yapmak istediğiniz sitenin kısayolunu (ör. "@bookmarks") girin. Ardından, tercih ettiğiniz klavye kısayoluna basın ve arama teriminizi girin.</translation>
 <translation id="5156638757840305347">İmleç göründüğünde veya hareket ettiğinde vurgulanır</translation>
 <translation id="5157635116769074044">Bu sayfayı Başlangıç ekranına sabitle...</translation>
+<translation id="5158206172605340248">Aksan işaretleri menüsü kapatıldı.</translation>
 <translation id="5159094275429367735">Crostini'yi kur</translation>
 <translation id="5159419673777902220">Ebeveyniniz uzantı izinlerini devre dışı bıraktı</translation>
 <translation id="5159643365935452998">Otomatik veri temizlemeyi inceleyin</translation>
@@ -5279,6 +5282,7 @@
 <translation id="6065289257230303064">Sertifika Konusu Dizin Öznitelikleri</translation>
 <translation id="6066794465984119824">Görüntü karması ayarlanmamış</translation>
 <translation id="6069464830445383022">Google Hesabınızla Chromebook'unuzda oturum açarsınız</translation>
+<translation id="6070311415473175157">Resim alanı seçerek arama yapın</translation>
 <translation id="6071181508177083058">şifreyi onaylayın</translation>
 <translation id="6071576563962215370">Sistem, cihaz yükleme zamanı özellikleri kilidini oluşturamadı.</translation>
 <translation id="6072442788591997866"><ph name="APP_NAME" /> uygulamasına bu cihazda izin verilmiyor. Yöneticinizle iletişime geçin. Hata kodu: <ph name="ERROR_CODE" />.</translation>
@@ -6473,6 +6477,7 @@
 <translation id="7235716375204803342">Etkinlikler getiriliyor...</translation>
 <translation id="7235737137505019098">Güvenlik anahtarınızda başka hesaplar için yeterli alan yok.</translation>
 <translation id="7235873936132740888">Siteler, belirli türde bağlantıları tıkladığınızda e-posta istemcinizde yeni bir mesaj oluşturmak veya çevrimiçi takviminize yeni etkinlikler eklemek gibi özel görevler gerçekleştirebilir</translation>
+<translation id="7238609589076576185">Aksan işareti eklendi.</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> aktarımı iptal etti</translation>
 <translation id="7240339475467890413">Yeni hotspot'a bağlanılsın mı?</translation>
 <translation id="7241389281993241388">Lütfen istemci sertifikasını içe aktarmak için <ph name="TOKEN_NAME" /> cihazında oturum açın.</translation>
@@ -7109,6 +7114,7 @@
 <translation id="7842692330619197998">Yeni bir hesap oluşturmanız gerekiyorsa g.co/ChromeEnterpriseAccount adresini ziyaret edin.</translation>
 <translation id="78427265591841839"><ph name="VISUAL_SEARCH_PROVIDER" /> ile sayfanın bir kısmında arama yap</translation>
 <translation id="784273751836026224">Linux'u kaldır</translation>
+<translation id="7842851769217535639">Sayfanın herhangi bir bölümünü seçerek arama yapın</translation>
 <translation id="7843786652787044762"><ph name="WEB_DRIVE" /> cihazında oturum aç</translation>
 <translation id="7844992432319478437">Fark güncelleniyor</translation>
 <translation id="7846634333498149051">Klavye</translation>
@@ -7164,6 +7170,7 @@
 <translation id="7893008570150657497">Bilgisayarınızdan fotoğraf, müzik ve diğer medyalara erişme</translation>
 <translation id="7893153962594818789">Bu <ph name="DEVICE_TYPE" /> cihazında Bluetooth kapalı. Şifrenizi girip Bluetooth'u açın.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (Varsayılan)</translation>
+<translation id="7896292361319775586"><ph name="FILE" /> kaydedilsin mi?</translation>
 <translation id="789722939441020330">Sitelerin birden fazla dosyayı otomatik olarak indirmesine izin verme</translation>
 <translation id="7897900149154324287">Gelecekte, kaldırılabilir cihazınızı yerinden sökmeden önce cihazı Dosyalar uygulamasından çıkardığınızdan emin olun. Aksi halde veri kaybedebilirsiniz.</translation>
 <translation id="7898725031477653577">Her zaman çevir</translation>
@@ -7312,6 +7319,7 @@
 <translation id="8030852056903932865">Onayla</translation>
 <translation id="8032244173881942855">Sekme yayınlanamıyor.</translation>
 <translation id="8032569120109842252">Takip ediliyor</translation>
+<translation id="8033023935541439900">Aksan işaretleri menüsü açık. Aralarında gezinmek için sola veya sağa, eklemek için Enter'a basın.</translation>
 <translation id="8033827949643255796">seçildi</translation>
 <translation id="8033958968890501070">Zaman aşımı</translation>
 <translation id="8035059678007243127">Gizli Geri/İleri Önbelleğe Alınmış Sayfa: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -8301,6 +8309,7 @@
 <translation id="899403249577094719">Netscape Sertifikası Temel URL'si</translation>
 <translation id="899657321862108550">Kendi Chrome'unuz, Her Yerde</translation>
 <translation id="899676909165543803">Parmak izi sensörü, klavyenizin sağ altındaki tuştur. Herhangi bir parmağınızla bu tuşa hafifçe dokunun.</translation>
+<translation id="8998078711690114234">Bu tür dosyalar tehlikeli olabilir. Bu dosyayı yalnızca <ph name="ORIGIN" /> sitesine güveniyorsanız kaydedin</translation>
 <translation id="8999560016882908256">Bölüm söz dizimi hatası: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Cihaz Yönetim Paneli sunucu bağlantısı <ph name="FAILURE_TIME" /> tarihinde "<ph name="STATUS_TEXT" />" durumunu göstererek başarısız oldu</translation>
 <translation id="9003647077635673607">Tüm web sitelerinde izin ver</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 25cdb8cd..49c4c0d0 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -4365,7 +4365,7 @@
 <translation id="5155327081870541046">在網址列輸入您想搜尋網站的捷徑,例如「例如「@bookmarks」),然後按下您偏好的鍵盤快速鍵,並輸入搜尋字詞。</translation>
 <translation id="5156638757840305347">游標在顯示或移動時會突顯</translation>
 <translation id="5157635116769074044">將網頁固定到 [開始] 螢幕…</translation>
-<translation id="5158206172605340248">重音符號選單已關閉。</translation>
+<translation id="5158206172605340248">閂咗重音符號選單。</translation>
 <translation id="5159094275429367735">設定 Crostini</translation>
 <translation id="5159419673777902220">您的家長已停用擴充程式權限</translation>
 <translation id="5159643365935452998">檢查自動資料清除設定</translation>
@@ -6492,7 +6492,7 @@
 <translation id="7235716375204803342">正在擷取活動…</translation>
 <translation id="7235737137505019098">安全密鑰的空間不足,無法建立帳戶。</translation>
 <translation id="7235873936132740888">網站可在您點擊特定類型的連結時處理特殊工作,例如在電子郵件用戶端建立新郵件,或在線上日曆中新增活動</translation>
-<translation id="7238609589076576185">已插入重音符號。</translation>
+<translation id="7238609589076576185">插入咗重音符號。</translation>
 <translation id="7239108166256782787"><ph name="DEVICE_NAME" /> 已取消傳送</translation>
 <translation id="7240339475467890413">要連線至新熱點嗎?</translation>
 <translation id="7241389281993241388">請登入 <ph name="TOKEN_NAME" /> 以匯入用戶端憑證。</translation>
@@ -7335,7 +7335,7 @@
 <translation id="8030852056903932865">核准</translation>
 <translation id="8032244173881942855">無法投放分頁。</translation>
 <translation id="8032569120109842252">追蹤中</translation>
-<translation id="8033023935541439900">重音符號選單已開啟。按向左鍵或向右鍵即可移動位置,按下 Enter 鍵即可插入重音符號。</translation>
+<translation id="8033023935541439900">打開咗重音符號選單。按向左鍵或者向右鍵就可以導覽,㩒 Enter 鍵就可以插入重音符號。</translation>
 <translation id="8033827949643255796">已選取</translation>
 <translation id="8033958968890501070">逾時</translation>
 <translation id="8035059678007243127">向前/返回快取中的無痕頁面:<ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
@@ -8325,7 +8325,7 @@
 <translation id="899403249577094719">Netscape 憑證基底網址</translation>
 <translation id="899657321862108550">隨時隨地使用 Chrome</translation>
 <translation id="899676909165543803">指紋感應器位於鍵盤右下方。請用任何一隻手指輕觸指紋感應器。</translation>
-<translation id="8998078711690114234">這種類型的檔案可能不安全。除非你信任 <ph name="ORIGIN" />,否則請勿儲存這個檔案</translation>
+<translation id="8998078711690114234">此類檔案可能不安全。請只在您信任 <ph name="ORIGIN" /> 的情況下儲存此檔案</translation>
 <translation id="8999560016882908256">部分語法錯誤:<ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">連線至「裝置管理工具伺服器」失敗,系統在<ph name="FAILURE_TIME" />報告了以下狀態:「<ph name="STATUS_TEXT" />」</translation>
 <translation id="9003647077635673607">允許在所有網站上執行</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index c668424..c20978db 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -3289,6 +3289,12 @@
   <message name="IDS_SETTINGS_SITE_SETTINGS_CLEAR_DISPLAYED_STORAGE_LABEL" desc="Label for button to clear displayed site data">
     Clear displayed data
   </message>
+  <message name="IDS_SETTINGS_SITE_SETTINGS_FIRST_PARTY_SETS_SHOW_RELATED_SITES_BUTTON" translateable="false" desc="Placeholder string for first party sets show related sites button">
+    Show related sites
+  </message>
+  <message name="IDS_SETTINGS_SITE_SETTINGS_FIRST_PARTY_SETS_SITE_CLEAR_STORAGE_BUTTON" translateable="false" desc="Placeholder string for first party sets clear data and permissions for site button">
+    Clear data and permissions
+  </message>
   <message name="IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_CONFIRMATION" desc="Text for the dialog that warns about clearing storage used by all sites.">
     This will clear <ph name="TOTAL_USAGE">$1<ex>8 GB</ex></ph> of data stored by sites
   </message>
diff --git a/chrome/browser/accessibility/live_caption_controller_browsertest.cc b/chrome/browser/accessibility/live_caption_controller_browsertest.cc
index 56838e6c..da939d7 100644
--- a/chrome/browser/accessibility/live_caption_controller_browsertest.cc
+++ b/chrome/browser/accessibility/live_caption_controller_browsertest.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
@@ -48,23 +49,11 @@
 
 }  // namespace
 
-// Blocks until a new profile is created.
-void UnblockOnProfileCreation(base::RunLoop* run_loop,
-                              Profile* profile,
-                              Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-
 Profile* CreateProfile() {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath profile_path =
       profile_manager->GenerateNextProfileDirectoryPath();
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      profile_path, base::BindRepeating(&UnblockOnProfileCreation, &run_loop));
-  run_loop.Run();
-  return profile_manager->GetProfileByPath(profile_path);
+  return profiles::testing::CreateProfileSync(profile_manager, profile_path);
 }
 
 class LiveCaptionControllerTest : public LiveCaptionBrowserTest {
diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
index 47d82c6..33aa7f2 100644
--- a/chrome/browser/android/signin/signin_manager_android.cc
+++ b/chrome/browser/android/signin/signin_manager_android.cc
@@ -19,7 +19,6 @@
 #include "google_apis/gaia/gaia_auth_util.h"
 
 #include "base/android/callback_android.h"
-#include "base/android/jni_string.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h"
 #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h"
@@ -30,15 +29,12 @@
 #include "components/google/core/common/google_util.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
-#include "components/prefs/pref_service.h"
-#include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/identity_manager/accounts_cookie_mutator.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browsing_data_filter_builder.h"
 #include "content/public/browser/browsing_data_remover.h"
 #include "content/public/browser/storage_partition.h"
-#include "google_apis/gaia/gaia_auth_util.h"
 
 using base::android::JavaParamRef;
 
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 2584648..da0cd73 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -1965,12 +1965,12 @@
 
 namespace {
 
-void UpdateProfileInUse(Profile* profile, Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED) {
-    AppController* controller =
-        base::mac::ObjCCastStrict<AppController>([NSApp delegate]);
-    [controller setLastProfile:profile];
-  }
+void UpdateProfileInUse(Profile* profile) {
+  if (!profile)
+    return;
+  AppController* controller =
+      base::mac::ObjCCastStrict<AppController>([NSApp delegate]);
+  [controller setLastProfile:profile];
 }
 
 void OpenUrlsInBrowserWithProfile(const std::vector<GURL>& urls,
@@ -2014,16 +2014,9 @@
 }
 
 // Returns the profile to be used for new windows (or nullptr if it fails).
-Profile* GetSafeProfile(Profile* loaded_profile, Profile::CreateStatus status) {
-  switch (status) {
-    case Profile::CREATE_STATUS_INITIALIZED:
-      break;
-    case Profile::CREATE_STATUS_CREATED:
-      NOTREACHED() << "Should only be called when profile loading is complete";
-      [[fallthrough]];
-    case Profile::CREATE_STATUS_LOCAL_FAIL:
-      return nullptr;
-  }
+Profile* GetSafeProfile(Profile* loaded_profile) {
+  if (!loaded_profile)
+    return nullptr;
   AppController* controller =
       base::mac::ObjCCastStrict<AppController>([NSApp delegate]);
   if (!controller)
@@ -2034,13 +2027,10 @@
 
 // Called when the profile has been loaded for RunIn*ProfileSafely(). This
 // profile may not be safe to use for new windows (due to policies).
-void OnProfileLoaded(base::OnceCallback<void(Profile*)>& callback,
+void OnProfileLoaded(base::OnceCallback<void(Profile*)> callback,
                      app_controller_mac::ProfileLoadFailureBehavior on_failure,
-                     Profile* loaded_profile,
-                     Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_CREATED)
-    return;  // Profile loading is not complete, wait to be called again.
-  Profile* safe_profile = GetSafeProfile(loaded_profile, status);
+                     Profile* loaded_profile) {
+  Profile* safe_profile = GetSafeProfile(loaded_profile);
   if (!safe_profile) {
     switch (on_failure) {
       case app_controller_mac::kShowProfilePickerOnFailure:
@@ -2066,7 +2056,7 @@
 void CreateGuestProfileIfNeeded() {
   g_browser_process->profile_manager()->CreateProfileAsync(
       ProfileManager::GetGuestProfilePath(),
-      base::BindRepeating(&UpdateProfileInUse));
+      base::BindOnce(&UpdateProfileInUse));
 }
 
 void EnterpriseStartupDialogClosed() {
@@ -2086,21 +2076,17 @@
   AppController* controller =
       base::mac::ObjCCastStrict<AppController>([NSApp delegate]);
   if (!controller) {
-    OnProfileLoaded(callback, on_failure, nullptr,
-                    Profile::CREATE_STATUS_LOCAL_FAIL);
+    OnProfileLoaded(std::move(callback), on_failure, nullptr);
     return;
   }
   if (Profile* profile = [controller lastProfileIfLoaded]) {
-    OnProfileLoaded(callback, on_failure, profile,
-                    Profile::CREATE_STATUS_INITIALIZED);
+    OnProfileLoaded(std::move(callback), on_failure, profile);
     return;
   }
-  // Pass the OnceCallback by reference because CreateProfileAsync() needs a
-  // repeating callback. It will be called at most once.
+
   g_browser_process->profile_manager()->CreateProfileAsync(
       GetStartupProfilePathMac(),
-      base::BindRepeating(&OnProfileLoaded, base::OwnedRef(std::move(callback)),
-                          on_failure));
+      base::BindOnce(&OnProfileLoaded, std::move(callback), on_failure));
 }
 
 void RunInProfileSafely(const base::FilePath& profile_dir,
@@ -2110,21 +2096,18 @@
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   // `profile_manager` can be null in tests.
   if (!profile_manager) {
-    OnProfileLoaded(callback, on_failure, nullptr,
-                    Profile::CREATE_STATUS_LOCAL_FAIL);
+    OnProfileLoaded(std::move(callback), on_failure, nullptr);
     return;
   }
   if (Profile* profile = profile_manager->GetProfileByPath(profile_dir)) {
-    OnProfileLoaded(callback, on_failure, profile,
-                    Profile::CREATE_STATUS_INITIALIZED);
+    OnProfileLoaded(std::move(callback), on_failure, profile);
     return;
   }
   // Pass the OnceCallback by reference because CreateProfileAsync() needs a
   // repeating callback. It will be called at most once.
   g_browser_process->profile_manager()->CreateProfileAsync(
       profile_dir,
-      base::BindRepeating(&OnProfileLoaded, base::OwnedRef(std::move(callback)),
-                          on_failure));
+      base::BindOnce(&OnProfileLoaded, std::move(callback), on_failure));
 }
 
 // static
diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm
index 331cc1c1..7bed65e0 100644
--- a/chrome/browser/app_controller_mac_browsertest.mm
+++ b/chrome/browser/app_controller_mac_browsertest.mm
@@ -41,6 +41,7 @@
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_observer.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/signin/signin_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -97,38 +98,10 @@
   [NSApp.delegate application:NSApp openURLs:@[ net::NSURLWithGURL(url) ]];
 }
 
-void RunClosureWhenProfileInitialized(const base::RepeatingClosure& closure,
-                                      Profile* profile,
-                                      Profile::CreateStatus status) {
-  // This will be called multiple times. Wait until the profile is initialized
-  // fully to quit the loop.
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    closure.Run();
-}
-
-// Called when the ProfileManager has created a profile.
-void CreateProfileCallback(const base::RepeatingClosure& quit_closure,
-                           Profile** out_profile,
-                           Profile* profile,
-                           Profile::CreateStatus status) {
-  EXPECT_TRUE(profile);
-  ASSERT_TRUE(out_profile);
-  *out_profile = profile;
-  EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status);
-  // This will be called multiple times. Wait until the profile is initialized
-  // fully to quit the loop.
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    quit_closure.Run();
-}
-
 Profile* CreateAndWaitForProfile(const base::FilePath& profile_dir) {
-  Profile* profile;
-  ProfileManager::CreateCallback create_callback = base::BindRepeating(
-      &CreateProfileCallback,
-      base::RunLoop::QuitCurrentWhenIdleClosureDeprecated(), &profile);
-  g_browser_process->profile_manager()->CreateProfileAsync(profile_dir,
-                                                           create_callback);
-  base::RunLoop().Run();
+  Profile* profile = profiles::testing::CreateProfileSync(
+      g_browser_process->profile_manager(), profile_dir);
+  EXPECT_TRUE(profile);
   return profile;
 }
 
@@ -808,12 +781,8 @@
   // Create profile 2.
   base::FilePath profile2_path =
       profile_manager->GenerateNextProfileDirectoryPath();
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      profile2_path, base::BindRepeating(&RunClosureWhenProfileInitialized,
-                                         run_loop.QuitClosure()));
-  run_loop.Run();
-  Profile* profile2 = profile_manager->GetProfileByPath(profile2_path);
+  Profile* profile2 =
+      profiles::testing::CreateProfileSync(profile_manager, profile2_path);
   ASSERT_TRUE(profile2);
 
   // Load profile1's History Service backend so it will be assigned to the
diff --git a/chrome/browser/apps/app_service/launch_utils.cc b/chrome/browser/apps/app_service/launch_utils.cc
index 6dfb08d..e22c1cc 100644
--- a/chrome/browser/apps/app_service/launch_utils.cc
+++ b/chrome/browser/apps/app_service/launch_utils.cc
@@ -43,7 +43,6 @@
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 #include "chrome/browser/lacros/lacros_extensions_util.h"
-#include "extensions/browser/extension_registry.h"
 #endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
 
 #if BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index 6ca7365..491c82d 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -35,7 +35,6 @@
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/net/profile_network_context_service.h"
 #include "chrome/browser/net/profile_network_context_service_factory.h"
-#include "chrome/browser/pdf/pdf_extension_test_util.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_link_manager_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 318ef66..ee9afe7f 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -144,6 +144,8 @@
     "app_mode/web_app/web_kiosk_app_launcher.h",
     "app_mode/web_app/web_kiosk_app_manager.cc",
     "app_mode/web_app/web_kiosk_app_manager.h",
+    "app_mode/web_app/web_kiosk_app_service_launcher.cc",
+    "app_mode/web_app/web_kiosk_app_service_launcher.h",
     "app_restore/app_launch_handler.cc",
     "app_restore/app_launch_handler.h",
     "app_restore/app_restore_arc_task_handler.cc",
diff --git a/chrome/browser/ash/app_mode/app_launch_utils.cc b/chrome/browser/ash/app_mode/app_launch_utils.cc
index ecba29e..7f0be6ac 100644
--- a/chrome/browser/ash/app_mode/app_launch_utils.cc
+++ b/chrome/browser/ash/app_mode/app_launch_utils.cc
@@ -3,9 +3,11 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ash/app_mode/app_launch_utils.h"
+#include <memory>
 
 #include "ash/constants/ash_switches.h"
 #include "base/command_line.h"
+#include "base/feature_list.h"
 #include "chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_launch_error.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
@@ -13,9 +15,12 @@
 #include "chrome/browser/ash/app_mode/startup_app_launcher.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
+#include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h"
+#include "chrome/browser/ash/crosapi/browser_util.h"
 #include "chrome/browser/ash/login/startup_utils.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_manager/user_manager.h"
@@ -43,12 +48,17 @@
   AppLaunchManager(Profile* profile, const KioskAppId& kiosk_app_id) {
     CHECK(kiosk_app_id.type != KioskAppType::kArcApp);
 
-    if (kiosk_app_id.type == KioskAppType::kChromeApp)
+    if (kiosk_app_id.type == KioskAppType::kChromeApp) {
       app_launcher_ = std::make_unique<StartupAppLauncher>(
           profile, *kiosk_app_id.app_id, this);
-    else
+    } else if (base::FeatureList::IsEnabled(features::kKioskEnableAppService) &&
+               !crosapi::browser_util::IsLacrosEnabled()) {
+      app_launcher_ = std::make_unique<WebKioskAppServiceLauncher>(
+          profile, this, *kiosk_app_id.account_id);
+    } else {
       app_launcher_ = std::make_unique<WebKioskAppLauncher>(
           profile, this, *kiosk_app_id.account_id);
+    }
   }
   AppLaunchManager(const AppLaunchManager&) = delete;
   AppLaunchManager& operator=(const AppLaunchManager&) = delete;
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
new file mode 100644
index 0000000..c3ee54a
--- /dev/null
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
@@ -0,0 +1,133 @@
+// 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/ash/app_mode/web_app/web_kiosk_app_service_launcher.h"
+#include <memory>
+
+#include "base/bind.h"
+#include "base/check.h"
+#include "base/syslog_logging.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
+#include "chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.h"
+#include "chrome/browser/web_applications/web_app_provider.h"
+#include "components/services/app_service/public/cpp/app_types.h"
+#include "components/webapps/browser/install_result_code.h"
+
+namespace ash {
+
+WebKioskAppServiceLauncher::WebKioskAppServiceLauncher(
+    Profile* profile,
+    KioskAppLauncher::Delegate* delegate,
+    const AccountId& account_id)
+    : KioskAppLauncher(delegate), profile_(profile), account_id_(account_id) {}
+
+WebKioskAppServiceLauncher::~WebKioskAppServiceLauncher() = default;
+
+const WebKioskAppData* WebKioskAppServiceLauncher::GetCurrentApp() const {
+  const WebKioskAppData* app =
+      WebKioskAppManager::Get()->GetAppByAccountId(account_id_);
+  DCHECK(app);
+  return app;
+}
+
+void WebKioskAppServiceLauncher::Initialize() {
+  DCHECK(!app_service_launcher_);
+
+  app_service_launcher_ = std::make_unique<KioskAppServiceLauncher>(profile_);
+  app_service_launcher_->EnsureAppTypeInitialized(
+      apps::AppType::kWeb,
+      base::BindOnce(&WebKioskAppServiceLauncher::OnWebAppInitializled,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void WebKioskAppServiceLauncher::OnWebAppInitializled() {
+  web_app_provider_ = web_app::WebAppProvider::GetForWebApps(profile_);
+  DCHECK(web_app_provider_) << "WebAppProvider cannot be initialized.";
+
+  // If a web app |install_url| requires authentication, it will be assigned a
+  // temporary |app_id| which will be changed to the correct |app_id| once the
+  // authentication is done. The only key that is safe to be used as identifier
+  // for Kiosk web apps is |install_url|.
+  auto app_id = web_app_provider_->registrar().LookUpAppIdByInstallUrl(
+      GetCurrentApp()->install_url());
+  if (!app_id || app_id->empty()) {
+    delegate_->InitializeNetwork();
+    return;
+  }
+
+  app_id_ = app_id.value();
+
+  // Don't enforce network status in web Kiosk if the app is already installed.
+  delegate_->OnAppPrepared();
+}
+
+void WebKioskAppServiceLauncher::ContinueWithNetworkReady() {
+  InstallApp();
+}
+
+void WebKioskAppServiceLauncher::InstallApp() {
+  delegate_->OnAppInstalling();
+
+  web_app::ExternalInstallOptions options(
+      GetCurrentApp()->install_url(), web_app::UserDisplayMode::kStandalone,
+      web_app::ExternalInstallSource::kKiosk);
+  // When the install URL redirects to another URL a placeholder will be
+  // installed. This happens if a web app requires authentication.
+  options.install_placeholder = true;
+  // The placeholder app will be replaced after the install URL can be accessed
+  // directly (for example after authentication).
+  options.reinstall_placeholder = true;
+  web_app_provider_->externally_managed_app_manager().Install(
+      options,
+      base::BindOnce(&WebKioskAppServiceLauncher::OnExternalInstallCompleted,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void WebKioskAppServiceLauncher::OnExternalInstallCompleted(
+    const GURL& app_url,
+    web_app::ExternallyManagedAppManager::InstallResult result) {
+  if (!webapps::IsSuccess(result.code)) {
+    SYSLOG(ERROR) << "Failed to install Kiosk web app, code " << result.code;
+    delegate_->OnLaunchFailed(KioskAppLaunchError::Error::kUnableToInstall);
+    return;
+  }
+
+  DCHECK(result.app_id && !result.app_id->empty());
+  SYSLOG(INFO) << "Successfully installed Kiosk web app.";
+  app_id_ = result.app_id.value();
+
+  delegate_->OnAppPrepared();
+}
+
+void WebKioskAppServiceLauncher::LaunchApp() {
+  DCHECK(app_service_launcher_);
+  app_service_launcher_->CheckAndMaybeLaunchApp(
+      app_id_,
+      base::BindOnce(&WebKioskAppServiceLauncher::OnAppLaunched,
+                     weak_ptr_factory_.GetWeakPtr()),
+      base::BindOnce(&WebKioskAppServiceLauncher::OnAppBecomesVisible,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void WebKioskAppServiceLauncher::OnAppLaunched(bool success) {
+  if (!success) {
+    delegate_->OnLaunchFailed(KioskAppLaunchError::Error::kUnableToLaunch);
+    return;
+  }
+  delegate_->OnAppLaunched();
+}
+
+void WebKioskAppServiceLauncher::OnAppBecomesVisible() {
+  delegate_->OnAppWindowCreated();
+}
+
+void WebKioskAppServiceLauncher::RestartLauncher() {
+  weak_ptr_factory_.InvalidateWeakPtrs();
+  app_service_launcher_.reset();
+
+  Initialize();
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h
new file mode 100644
index 0000000..689da9f
--- /dev/null
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h
@@ -0,0 +1,78 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ASH_APP_MODE_WEB_APP_WEB_KIOSK_APP_SERVICE_LAUNCHER_H_
+#define CHROME_BROWSER_ASH_APP_MODE_WEB_APP_WEB_KIOSK_APP_SERVICE_LAUNCHER_H_
+
+#include <memory>
+
+#include "base/memory/raw_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/scoped_observation.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/ash/app_mode/kiosk_app_launcher.h"
+#include "chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.h"
+#include "chrome/browser/web_applications/externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/web_app_provider.h"
+#include "components/account_id/account_id.h"
+#include "components/services/app_service/public/cpp/app_registry_cache.h"
+#include "components/services/app_service/public/cpp/app_types.h"
+#include "components/services/app_service/public/cpp/app_update.h"
+#include "components/services/app_service/public/cpp/instance_registry.h"
+#include "url/gurl.h"
+
+class Profile;
+
+namespace ash {
+
+class WebKioskAppData;
+
+// Responsible of installing and launching web kiosk app using App Service. It's
+// destroyed upon successful app launch.
+class WebKioskAppServiceLauncher : public KioskAppLauncher {
+ public:
+  WebKioskAppServiceLauncher(Profile* profile,
+                             KioskAppLauncher::Delegate* delegate,
+                             const AccountId& account_id);
+  WebKioskAppServiceLauncher(const WebKioskAppServiceLauncher&) = delete;
+  WebKioskAppServiceLauncher& operator=(const WebKioskAppServiceLauncher&) =
+      delete;
+  ~WebKioskAppServiceLauncher() override;
+
+ private:
+  // KioskAppLauncher overrides:
+  void Initialize() override;
+  void ContinueWithNetworkReady() override;
+  void LaunchApp() override;
+  void RestartLauncher() override;
+
+  // |KioskAppServiceLauncher| callbacks.
+  void OnWebAppInitializled();
+  void OnAppLaunched(bool success);
+  void OnAppBecomesVisible();
+
+  void InstallApp();
+
+  void OnExternalInstallCompleted(
+      const GURL& app_url,
+      web_app::ExternallyManagedAppManager::InstallResult result);
+
+  // Get the current web application to be launched in the session.
+  const WebKioskAppData* GetCurrentApp() const;
+
+  Profile* profile_;
+  const AccountId account_id_;
+  std::string app_id_;
+
+  // Not owned. A keyed service bound to the profile.
+  raw_ptr<web_app::WebAppProvider> web_app_provider_;
+
+  std::unique_ptr<KioskAppServiceLauncher> app_service_launcher_;
+
+  base::WeakPtrFactory<WebKioskAppServiceLauncher> weak_ptr_factory_{this};
+};
+
+}  // namespace ash
+
+#endif  // CHROME_BROWSER_ASH_APP_MODE_WEB_APP_WEB_KIOSK_APP_SERVICE_LAUNCHER_H_
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
new file mode 100644
index 0000000..d02bf46
--- /dev/null
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
@@ -0,0 +1,328 @@
+// 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/ash/app_mode/web_app/web_kiosk_app_service_launcher.h"
+#include <sys/types.h>
+
+#include <memory>
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/bind.h"
+#include "base/test/gmock_callback_support.h"
+#include "base/unguessable_token.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
+#include "chrome/browser/apps/app_service/app_service_test.h"
+#include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h"
+#include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
+#include "chrome/browser/ash/system_web_apps/system_web_app_manager.h"
+#include "chrome/browser/ui/web_applications/web_app_launch_manager.h"
+#include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
+#include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/test/fake_web_app_provider.h"
+#include "chrome/browser/web_applications/test/fake_web_app_registry_controller.h"
+#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/test/web_app_test_utils.h"
+#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/web_app_constants.h"
+#include "chrome/browser/web_applications/web_app_helpers.h"
+#include "chrome/browser/web_applications/web_app_install_info.h"
+#include "chrome/browser/web_applications/web_app_registry_update.h"
+#include "chrome/browser/web_applications/web_app_ui_manager.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/services/app_service/public/cpp/instance.h"
+#include "components/webapps/browser/install_result_code.h"
+#include "content/public/browser/web_contents.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+using ::base::test::RunClosure;
+using ::testing::_;
+using ::testing::Return;
+
+namespace ash {
+
+namespace {
+
+class MockAppLauncherDelegate : public WebKioskAppServiceLauncher::Delegate {
+ public:
+  MockAppLauncherDelegate() = default;
+  ~MockAppLauncherDelegate() override = default;
+
+  MOCK_METHOD0(InitializeNetwork, void());
+  MOCK_METHOD0(OnAppInstalling, void());
+  MOCK_METHOD0(OnAppPrepared, void());
+  MOCK_METHOD0(OnAppLaunched, void());
+  MOCK_METHOD0(OnAppWindowCreated, void());
+  MOCK_METHOD1(OnLaunchFailed, void(KioskAppLaunchError::Error));
+
+  MOCK_CONST_METHOD0(IsNetworkReady, bool());
+  MOCK_CONST_METHOD0(IsShowingNetworkConfigScreen, bool());
+  MOCK_CONST_METHOD0(ShouldSkipAppInstallation, bool());
+};
+
+const char kAppEmail[] = "lala@example.com";
+const char kAppInstallUrl[] = "https://example.com";
+const char kAppLaunchUrl[] = "https://example.com/launch";
+const char16_t kAppTitle[] = u"app";
+
+}  // namespace
+
+class WebKioskAppServiceLauncherTest : public BrowserWithTestWindowTest {
+ public:
+  void SetUp() override {
+    BrowserWithTestWindowTest::SetUp();
+    app_service_test_.UninstallAllApps(profile());
+    app_service_test_.SetUp(profile());
+    app_service_test_.WaitForAppService();
+    app_service_ = apps::AppServiceProxyFactory::GetForProfile(profile());
+
+    fake_web_app_provider_ = web_app::FakeWebAppProvider::Get(profile());
+    fake_web_app_provider_->SetDefaultFakeSubsystems();
+    fake_web_app_provider_->SetRunSubsystemStartupTasks(true);
+
+    auto fake_externally_managed_app_manager =
+        std::make_unique<web_app::FakeExternallyManagedAppManager>(profile());
+    fake_web_app_provider_->SetExternallyManagedAppManager(
+        std::move(fake_externally_managed_app_manager));
+
+    web_app::test::AwaitStartWebAppProviderAndSubsystems(profile());
+
+    externally_managed_app_manager().SetSubsystems(
+        &app_registrar(), /*ui_manager=*/nullptr,
+        /*finalizer=*/nullptr, /*command_manager=*/nullptr,
+        /*sync_bridge=*/nullptr);
+    externally_managed_app_manager().SetHandleInstallRequestCallback(
+        base::BindLambdaForTesting(
+            [this](const web_app::ExternalInstallOptions& install_options)
+                -> web_app::ExternallyManagedAppManager::InstallResult {
+              if (!webapps::IsSuccess(install_result_code_)) {
+                return web_app::ExternallyManagedAppManager::InstallResult(
+                    install_result_code_);
+              }
+              const GURL start_url = GURL(kAppLaunchUrl);
+              const GURL& install_url = install_options.install_url;
+              const web_app::AppId app_id = web_app::GenerateAppId(
+                  /*manifest_id=*/absl::nullopt, start_url);
+              if (!app_registrar().GetAppById(app_id)) {
+                const auto install_source = install_options.install_source;
+                std::unique_ptr<web_app::WebApp> web_app =
+                    web_app::test::CreateWebApp(
+                        start_url,
+                        ConvertExternalInstallSourceToSource(install_source));
+                web_app->SetName(base::UTF16ToUTF8(kAppTitle));
+                RegisterApp(std::move(web_app));
+                web_app::test::AddInstallUrlData(profile()->GetPrefs(),
+                                                 &sync_bridge(), app_id,
+                                                 install_url, install_source);
+              }
+              return web_app::ExternallyManagedAppManager::InstallResult(
+                  install_result_code_, app_id);
+            }));
+
+    // Web app system checks for system web app info before launching.
+    system_web_app_manager()->SetSubsystems(
+        &externally_managed_app_manager(), &app_registrar(), &sync_bridge(),
+        &ui_manager(), /*web_app_policy_manager=*/nullptr);
+
+    web_app::WebAppLaunchManager::SetOpenApplicationCallbackForTesting(
+        base::BindLambdaForTesting(
+            [this](apps::AppLaunchParams&& params) -> content::WebContents* {
+              auto instance = std::make_unique<apps::Instance>(
+                  params.app_id, base::UnguessableToken(), /*window=*/nullptr);
+              app_service()->InstanceRegistry().OnInstance(std::move(instance));
+              return nullptr;
+            }));
+
+    app_manager_ = std::make_unique<WebKioskAppManager>();
+
+    delegate_ = std::make_unique<MockAppLauncherDelegate>();
+    launcher_ = std::make_unique<WebKioskAppServiceLauncher>(
+        profile(), delegate_.get(), AccountId::FromUserEmail(kAppEmail));
+  }
+
+  void TearDown() override {
+    launcher_.reset();
+    delegate_.reset();
+    app_manager_.reset();
+    fake_web_app_provider_->Shutdown();
+    BrowserWithTestWindowTest::TearDown();
+  }
+
+  void SetupAppData(bool installed) {
+    account_id_ = AccountId::FromUserEmail(kAppEmail);
+    app_manager_->AddAppForTesting(account_id_, GURL(kAppInstallUrl));
+
+    if (installed) {
+      {
+        base::RunLoop loop;
+        web_app::ExternalInstallOptions install_options(
+            GURL(kAppInstallUrl), web_app::UserDisplayMode::kStandalone,
+            web_app::ExternalInstallSource::kKiosk);
+        externally_managed_app_manager().Install(
+            install_options,
+            base::BindLambdaForTesting(
+                [&loop](const GURL& install_url,
+                        web_app::ExternallyManagedAppManager::InstallResult
+                            result) {
+                  ASSERT_TRUE(webapps::IsSuccess(result.code));
+                  loop.Quit();
+                }));
+        loop.Run();
+      }
+
+      WebAppInstallInfo info;
+      info.start_url = GURL(kAppLaunchUrl);
+      info.title = kAppTitle;
+      app_manager_->UpdateAppByAccountId(account_id_, info);
+    }
+  }
+
+  const WebKioskAppData* app_data() {
+    return app_manager_->GetAppByAccountId(account_id_);
+  }
+
+  MockAppLauncherDelegate* delegate() { return delegate_.get(); }
+  KioskAppLauncher* launcher() { return launcher_.get(); }
+
+ protected:
+  void RegisterApp(std::unique_ptr<web_app::WebApp> web_app) {
+    std::string app_id = web_app->app_id();
+    std::unique_ptr<web_app::WebAppRegistryUpdate> update =
+        sync_bridge().BeginUpdate();
+    update->CreateApp(std::move(web_app));
+    sync_bridge().CommitUpdate(
+        std::move(update),
+        base::BindOnce(&WebKioskAppServiceLauncherTest::OnAppRegistered,
+                       base::Unretained(this), std::move(app_id)));
+  }
+
+  apps::AppServiceProxy* app_service() { return app_service_; }
+
+  apps::AppServiceTest& app_service_test() { return app_service_test_; }
+
+  web_app::WebAppProvider* web_app_provider() {
+    return web_app::WebAppProvider::GetForTest(profile());
+  }
+
+  web_app::WebAppRegistrar& app_registrar() {
+    return web_app_provider()->registrar();
+  }
+
+  web_app::WebAppSyncBridge& sync_bridge() {
+    return web_app_provider()->sync_bridge();
+  }
+
+  web_app::WebAppUiManager& ui_manager() {
+    return web_app_provider()->ui_manager();
+  }
+
+  SystemWebAppManager* system_web_app_manager() {
+    return SystemWebAppManager::GetForTest(profile());
+  }
+
+  web_app::FakeExternallyManagedAppManager& externally_managed_app_manager() {
+    return static_cast<web_app::FakeExternallyManagedAppManager&>(
+        web_app_provider()->externally_managed_app_manager());
+  }
+
+  void set_install_result_code(webapps::InstallResultCode result_code) {
+    install_result_code_ = result_code;
+  }
+
+ private:
+  void OnAppRegistered(std::string app_id, bool success) {
+    ASSERT_TRUE(success);
+    web_app_provider()->install_manager().NotifyWebAppInstalled(app_id);
+  }
+
+  AccountId account_id_;
+
+  apps::AppServiceTest app_service_test_;
+  apps::AppServiceProxy* app_service_ = nullptr;
+
+  std::unique_ptr<WebKioskAppManager> app_manager_;
+
+  raw_ptr<web_app::FakeWebAppProvider> fake_web_app_provider_;
+
+  std::unique_ptr<MockAppLauncherDelegate> delegate_;
+  std::unique_ptr<WebKioskAppServiceLauncher> launcher_;
+
+  webapps::InstallResultCode install_result_code_ =
+      webapps::InstallResultCode::kSuccessNewInstall;
+};
+
+TEST_F(WebKioskAppServiceLauncherTest, NormalFlowNotInstalled) {
+  SetupAppData(/*installed*/ false);
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), InitializeNetwork())
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->Initialize();
+    loop.Run();
+  }
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), OnAppInstalling());
+    EXPECT_CALL(*delegate(), OnAppPrepared())
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->ContinueWithNetworkReady();
+    loop.Run();
+  }
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), OnAppLaunched())
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->LaunchApp();
+    loop.Run();
+  }
+}
+
+TEST_F(WebKioskAppServiceLauncherTest, NormalFlowAlreadyInstalled) {
+  SetupAppData(/*installed*/ true);
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), OnAppPrepared())
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->Initialize();
+    loop.Run();
+  }
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), OnAppLaunched())
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->LaunchApp();
+    loop.Run();
+  }
+}
+
+TEST_F(WebKioskAppServiceLauncherTest, FailedToInstall) {
+  SetupAppData(/*installed*/ false);
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), InitializeNetwork())
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->Initialize();
+    loop.Run();
+  }
+  set_install_result_code(webapps::InstallResultCode::kInstallURLLoadFailed);
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(*delegate(), OnAppInstalling());
+    EXPECT_CALL(*delegate(),
+                OnLaunchFailed(KioskAppLaunchError::Error::kUnableToInstall))
+        .WillOnce(RunClosure(loop.QuitClosure()));
+    launcher()->ContinueWithNetworkReady();
+    loop.Run();
+  }
+  EXPECT_NE(app_data()->status(), WebKioskAppData::Status::kInstalled);
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn
index ed62ebd..74bcae3 100644
--- a/chrome/browser/ash/crosapi/BUILD.gn
+++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -188,8 +188,6 @@
     "speech_recognition_ash.h",
     "structured_metrics_service_ash.cc",
     "structured_metrics_service_ash.h",
-    "system_display_ash.cc",
-    "system_display_ash.h",
     "task_manager_ash.cc",
     "task_manager_ash.h",
     "test_mojo_connection_manager.cc",
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc
index b6823b2..a14f2f6d 100644
--- a/chrome/browser/ash/crosapi/crosapi_ash.cc
+++ b/chrome/browser/ash/crosapi/crosapi_ash.cc
@@ -82,7 +82,6 @@
 #include "chrome/browser/ash/crosapi/sharesheet_ash.h"
 #include "chrome/browser/ash/crosapi/speech_recognition_ash.h"
 #include "chrome/browser/ash/crosapi/structured_metrics_service_ash.h"
-#include "chrome/browser/ash/crosapi/system_display_ash.h"
 #include "chrome/browser/ash/crosapi/task_manager_ash.h"
 #include "chrome/browser/ash/crosapi/time_zone_service_ash.h"
 #include "chrome/browser/ash/crosapi/url_handler_ash.h"
@@ -244,7 +243,6 @@
       speech_recognition_ash_(std::make_unique<SpeechRecognitionAsh>()),
       structured_metrics_service_ash_(
           std::make_unique<StructuredMetricsServiceAsh>()),
-      system_display_ash_(std::make_unique<SystemDisplayAsh>()),
       task_manager_ash_(std::make_unique<TaskManagerAsh>()),
       time_zone_service_ash_(std::make_unique<TimeZoneServiceAsh>()),
       tts_ash_(std::make_unique<TtsAsh>(g_browser_process->profile_manager())),
@@ -560,9 +558,9 @@
   sync_service_ash->BindReceiver(std::move(receiver));
 }
 
-void CrosapiAsh::BindSystemDisplay(
-    mojo::PendingReceiver<mojom::SystemDisplay> receiver) {
-  system_display_ash_->BindReceiver(std::move(receiver));
+void CrosapiAsh::REMOVED_29(
+    mojo::PendingReceiver<mojom::SystemDisplayDeprecated> receiver) {
+  NOTIMPLEMENTED();
 }
 
 void CrosapiAsh::BindTaskManager(
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.h b/chrome/browser/ash/crosapi/crosapi_ash.h
index 532d129..bae37a8 100644
--- a/chrome/browser/ash/crosapi/crosapi_ash.h
+++ b/chrome/browser/ash/crosapi/crosapi_ash.h
@@ -93,7 +93,6 @@
 class SharesheetAsh;
 class SpeechRecognitionAsh;
 class StructuredMetricsServiceAsh;
-class SystemDisplayAsh;
 class TaskManagerAsh;
 class TimeZoneServiceAsh;
 class TtsAsh;
@@ -284,8 +283,8 @@
           receiver) override;
   void BindSyncService(
       mojo::PendingReceiver<mojom::SyncService> receiver) override;
-  void BindSystemDisplay(
-      mojo::PendingReceiver<mojom::SystemDisplay> receiver) override;
+  void REMOVED_29(
+      mojo::PendingReceiver<mojom::SystemDisplayDeprecated> receiver) override;
   void BindVirtualKeyboard(
       mojo::PendingReceiver<mojom::VirtualKeyboard> receiver) override;
   void BindVpnService(
@@ -509,7 +508,6 @@
   std::unique_ptr<SharesheetAsh> sharesheet_ash_;
   std::unique_ptr<SpeechRecognitionAsh> speech_recognition_ash_;
   std::unique_ptr<StructuredMetricsServiceAsh> structured_metrics_service_ash_;
-  std::unique_ptr<SystemDisplayAsh> system_display_ash_;
   std::unique_ptr<TaskManagerAsh> task_manager_ash_;
   std::unique_ptr<TimeZoneServiceAsh> time_zone_service_ash_;
   std::unique_ptr<TtsAsh> tts_ash_;
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc
index ab98b8b..b924f4c 100644
--- a/chrome/browser/ash/crosapi/crosapi_util.cc
+++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -327,7 +327,7 @@
     MakeInterfaceVersionEntry<crosapi::mojom::StructuredMetricsService>(),
     MakeInterfaceVersionEntry<crosapi::mojom::SnapshotCapturer>(),
     MakeInterfaceVersionEntry<crosapi::mojom::SyncService>(),
-    MakeInterfaceVersionEntry<crosapi::mojom::SystemDisplay>(),
+    MakeInterfaceVersionEntry<crosapi::mojom::SystemDisplayDeprecated>(),
     MakeInterfaceVersionEntry<crosapi::mojom::TaskManager>(),
     MakeInterfaceVersionEntry<crosapi::mojom::TestController>(),
     MakeInterfaceVersionEntry<crosapi::mojom::TimeZoneService>(),
diff --git a/chrome/browser/ash/crosapi/system_display_ash.cc b/chrome/browser/ash/crosapi/system_display_ash.cc
deleted file mode 100644
index 193e4c3..0000000
--- a/chrome/browser/ash/crosapi/system_display_ash.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/crosapi/system_display_ash.h"
-
-#include <utility>
-
-#include "ash/public/ash_interfaces.h"
-#include "base/bind.h"
-#include "chrome/browser/extensions/system_display/system_display_serialization.h"
-#include "ui/gfx/geometry/insets.h"
-#include "ui/gfx/geometry/mojom/geometry.mojom.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace crosapi {
-
-SystemDisplayAsh::SystemDisplayAsh() {
-  observers_.set_disconnect_handler(
-      base::BindRepeating(&SystemDisplayAsh::OnDisplayChangeObserverDisconnect,
-                          weak_ptr_factory_.GetWeakPtr()));
-}
-
-SystemDisplayAsh::~SystemDisplayAsh() {
-  StopDisplayChangedEventSources();
-}
-
-void SystemDisplayAsh::BindReceiver(
-    mojo::PendingReceiver<mojom::SystemDisplay> receiver) {
-  receivers_.Add(this, std::move(receiver));
-}
-
-void SystemDisplayAsh::GetDisplayUnitInfoList(
-    bool single_unified,
-    GetDisplayUnitInfoListCallback callback) {
-  extensions::DisplayInfoProvider::Get()->GetAllDisplaysInfo(
-      single_unified,
-      base::BindOnce(&SystemDisplayAsh::OnDisplayInfoResult,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
-}
-
-void SystemDisplayAsh::AddDisplayChangeObserver(
-    mojo::PendingRemote<mojom::DisplayChangeObserver> observer) {
-  if (observers_.empty())
-    StartDisplayChangedEventSources();
-  mojo::Remote<mojom::DisplayChangeObserver> remote(std::move(observer));
-  observers_.Add(std::move(remote));
-}
-
-void SystemDisplayAsh::OnDisplayInfoResult(
-    GetDisplayUnitInfoListCallback callback,
-    std::vector<DisplayUnitInfo> src_info_list) {
-  std::vector<crosapi::mojom::SysDisplayUnitInfoPtr> dst_info_list;
-  dst_info_list.reserve(src_info_list.size());
-  for (const auto& src_info : src_info_list) {
-    dst_info_list.emplace_back(
-        extensions::api::system_display::SerializeDisplayUnitInfo(src_info));
-  }
-  std::move(callback).Run(std::move(std::move(dst_info_list)));
-}
-
-void SystemDisplayAsh::OnDisplayChangeObserverDisconnect(
-    mojo::RemoteSetElementId /*id*/) {
-  if (observers_.empty())
-    StopDisplayChangedEventSources();
-}
-
-void SystemDisplayAsh::DispatchCrosapiDisplayChangeObservers() {
-  for (auto& observer : observers_) {
-    observer->OnCrosapiDisplayChanged();
-  }
-}
-
-void SystemDisplayAsh::OnDisplayAdded(const display::Display& new_display) {
-  DispatchCrosapiDisplayChangeObservers();
-}
-
-void SystemDisplayAsh::OnDisplayRemoved(const display::Display& old_display) {
-  DispatchCrosapiDisplayChangeObservers();
-}
-
-void SystemDisplayAsh::OnDisplayMetricsChanged(const display::Display& display,
-                                               uint32_t /*metrics*/) {
-  DispatchCrosapiDisplayChangeObservers();
-}
-
-void SystemDisplayAsh::OnDisplayConfigChanged() {
-  DispatchCrosapiDisplayChangeObservers();
-}
-
-void SystemDisplayAsh::StartDisplayChangedEventSources() {
-  // Start Source 1.
-  display_observer_.emplace(this);
-
-  // Start Source 2.
-  if (!is_observing_cros_display_config_) {
-    mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController>
-        display_config;
-    ash::BindCrosDisplayConfigController(
-        display_config.InitWithNewPipeAndPassReceiver());
-    cros_display_config_ =
-        mojo::Remote<crosapi::mojom::CrosDisplayConfigController>(
-            std::move(display_config));
-    mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver>
-        observer;
-    cros_display_config_observer_receiver_.Bind(
-        observer.InitWithNewEndpointAndPassReceiver());
-    cros_display_config_->AddObserver(std::move(observer));
-    is_observing_cros_display_config_ = true;
-  }
-}
-
-void SystemDisplayAsh::StopDisplayChangedEventSources() {
-  // Stop Source 2.
-  if (is_observing_cros_display_config_) {
-    is_observing_cros_display_config_ = false;
-    cros_display_config_observer_receiver_.reset();
-  }
-
-  // Stop Source 1.
-  display_observer_.reset();
-}
-
-}  // namespace crosapi
diff --git a/chrome/browser/ash/crosapi/system_display_ash.h b/chrome/browser/ash/crosapi/system_display_ash.h
deleted file mode 100644
index 3545b2c..0000000
--- a/chrome/browser/ash/crosapi/system_display_ash.h
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_CROSAPI_SYSTEM_DISPLAY_ASH_H_
-#define CHROME_BROWSER_ASH_CROSAPI_SYSTEM_DISPLAY_ASH_H_
-
-#include <vector>
-
-#include "base/callback.h"
-#include "base/memory/weak_ptr.h"
-#include "chromeos/crosapi/mojom/cros_display_config.mojom.h"
-#include "chromeos/crosapi/mojom/system_display.mojom.h"
-#include "extensions/browser/api/system_display/display_info_provider.h"
-#include "extensions/common/api/system_display.h"
-#include "mojo/public/cpp/bindings/associated_receiver.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver_set.h"
-#include "mojo/public/cpp/bindings/remote_set.h"
-#include "ui/display/display_observer.h"
-
-namespace crosapi {
-
-// The ash-chrome implementation of the SystemDisplay crosapi interface.
-// This class must only be used from the main thread.
-// Display change is triggered by 2 sources:
-// * "Source 1": display::Screen using display::DisplayObserver.
-// * "Source 2": crosapi::mojom::CrosDisplayConfigController using
-//   crosapi::mojom::CrosDisplayConfigObserver.
-// To set up both sources, this class duplicates code from DisplayInfoProvider
-// and DisplayInfoProviderChromeOS. This is necessary because the activation of
-// these sources are managed differently: DisplayInfoProvider's sources are
-// controlled by SystemInfoEventRouter, whereas SystemDisplayAsh's sources are
-// controlled by |observers_| change.
-class SystemDisplayAsh : public mojom::SystemDisplay,
-                         public display::DisplayObserver,
-                         public crosapi::mojom::CrosDisplayConfigObserver {
- public:
-  // This type was generated from IDL.
-  using DisplayUnitInfo = extensions::api::system_display::DisplayUnitInfo;
-
-  SystemDisplayAsh();
-  SystemDisplayAsh(const SystemDisplayAsh&) = delete;
-  SystemDisplayAsh& operator=(const SystemDisplayAsh&) = delete;
-  ~SystemDisplayAsh() override;
-
-  void BindReceiver(mojo::PendingReceiver<mojom::SystemDisplay> receiver);
-
-  // crosapi::mojom::SystemDisplay:
-  void GetDisplayUnitInfoList(bool single_unified,
-                              GetDisplayUnitInfoListCallback callback) override;
-  void AddDisplayChangeObserver(
-      mojo::PendingRemote<mojom::DisplayChangeObserver> observer) override;
-
- private:
-  // Receiver for extensions::DisplayInfoProvider::GetAllDisplaysInfo().
-  void OnDisplayInfoResult(GetDisplayUnitInfoListCallback callback,
-                           std::vector<DisplayUnitInfo> src_info_list);
-
-  // Called when an observer added by AddDisplayChangeObserver() disconnects.
-  void OnDisplayChangeObserverDisconnect(mojo::RemoteSetElementId /*id*/);
-
-  // Dispatches display change events to observers (for all sources).
-  void DispatchCrosapiDisplayChangeObservers();
-
-  // display::DisplayObserver (for Source 1):
-  void OnDisplayAdded(const display::Display& new_display) override;
-  void OnDisplayRemoved(const display::Display& old_display) override;
-  void OnDisplayMetricsChanged(const display::Display& display,
-                               uint32_t /*metrics*/) override;
-
-  // crosapi::mojom::CrosDisplayConfigObserver (for Source 2):
-  void OnDisplayConfigChanged() override;
-
-  // Starts listening to display change event sources. No-op if already started.
-  void StartDisplayChangedEventSources();
-
-  // Stops listening to display change event sources. No-op if already stopped.
-  void StopDisplayChangedEventSources();
-
-  // Support any number of connections.
-  mojo::ReceiverSet<mojom::SystemDisplay> receivers_;
-
-  // Support any number of observers.
-  mojo::RemoteSet<mojom::DisplayChangeObserver> observers_;
-
-  // Source 1 status and objects.
-  absl::optional<display::ScopedOptionalDisplayObserver> display_observer_;
-
-  // Source 2 status and objects.
-  bool is_observing_cros_display_config_ = false;
-  mojo::Remote<crosapi::mojom::CrosDisplayConfigController>
-      cros_display_config_;
-  mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver>
-      cros_display_config_observer_receiver_{this};
-
-  base::WeakPtrFactory<SystemDisplayAsh> weak_ptr_factory_{this};
-};
-
-}  // namespace crosapi
-
-#endif  // CHROME_BROWSER_ASH_CROSAPI_SYSTEM_DISPLAY_ASH_H_
diff --git a/chrome/browser/ash/input_method/assistive_window_controller.cc b/chrome/browser/ash/input_method/assistive_window_controller.cc
index 1b02ad33..cc55276 100644
--- a/chrome/browser/ash/input_method/assistive_window_controller.cc
+++ b/chrome/browser/ash/input_method/assistive_window_controller.cc
@@ -283,7 +283,8 @@
         InitSuggestionWindow(WindowOrientationFor(window.type));
       if (window_.visible) {
         suggestion_window_view_->SetAnchorRect(bounds_.caret);
-        suggestion_window_view_->ShowMultipleCandidates(window);
+        suggestion_window_view_->ShowMultipleCandidates(
+            window, WindowOrientationFor(window.type));
       } else {
         HideSuggestion();
       }
diff --git a/chrome/browser/ash/input_method/assistive_window_controller_unittest.cc b/chrome/browser/ash/input_method/assistive_window_controller_unittest.cc
index 11c24f7a..560dd2c 100644
--- a/chrome/browser/ash/input_method/assistive_window_controller_unittest.cc
+++ b/chrome/browser/ash/input_method/assistive_window_controller_unittest.cc
@@ -366,6 +366,59 @@
 }
 
 TEST_F(AssistiveWindowControllerTest,
+       SetsWindowOrientationHorizontalWhenVerticalWindowAlreadyInitialised) {
+  AssistiveWindowProperties init_vertical_properties;
+  init_vertical_properties.type =
+      ui::ime::AssistiveWindowType::kMultiWordSuggestion;
+  init_vertical_properties.visible = true;
+  init_vertical_properties.candidates =
+      std::vector<std::u16string>({u"vertical"});
+  controller_->SetAssistiveWindowProperties(init_vertical_properties);
+
+  AssistiveWindowProperties horizontal_properties;
+  horizontal_properties.type =
+      ui::ime::AssistiveWindowType::kLongpressDiacriticsSuggestion;
+  horizontal_properties.visible = true;
+  horizontal_properties.candidates =
+      std::vector<std::u16string>({u"candidate"});
+  controller_->SetAssistiveWindowProperties(horizontal_properties);
+
+  ASSERT_TRUE(controller_->GetSuggestionWindowViewForTesting() != nullptr);
+  views::BoxLayout::Orientation layout_orientation =
+      static_cast<views::BoxLayout*>(
+          controller_->GetSuggestionWindowViewForTesting()
+              ->multiple_candidate_area_for_testing()
+              ->GetLayoutManager())
+          ->GetOrientation();
+  EXPECT_EQ(layout_orientation, views::BoxLayout::Orientation::kHorizontal);
+}
+
+TEST_F(AssistiveWindowControllerTest,
+       SetsWindowOrientationVerticalWhenHorizontalWindowAlreadyInitialised) {
+  AssistiveWindowProperties init_horizontal_properties;
+  init_horizontal_properties.type =
+      ui::ime::AssistiveWindowType::kLongpressDiacriticsSuggestion;
+  init_horizontal_properties.visible = true;
+  init_horizontal_properties.candidates =
+      std::vector<std::u16string>({u"horizontal"});
+  controller_->SetAssistiveWindowProperties(init_horizontal_properties);
+
+  AssistiveWindowProperties vertical_properties;
+  vertical_properties.type = ui::ime::AssistiveWindowType::kMultiWordSuggestion;
+  vertical_properties.visible = true;
+  vertical_properties.candidates = std::vector<std::u16string>({u"candidate"});
+  controller_->SetAssistiveWindowProperties(vertical_properties);
+
+  ASSERT_TRUE(controller_->GetSuggestionWindowViewForTesting() != nullptr);
+  views::BoxLayout::Orientation layout_orientation =
+      static_cast<views::BoxLayout*>(
+          controller_->GetSuggestionWindowViewForTesting()
+              ->multiple_candidate_area_for_testing()
+              ->GetLayoutManager())
+          ->GetOrientation();
+  EXPECT_EQ(layout_orientation, views::BoxLayout::Orientation::kVertical);
+}
+TEST_F(AssistiveWindowControllerTest,
        AnnouncesWhenSetButtonHighlightedInEmojiWindowHasAnnounceString) {
   profile_->GetPrefs()->SetBoolean(
       ash::prefs::kAccessibilitySpokenFeedbackEnabled, true);
diff --git a/chrome/browser/ash/input_method/ui/suggestion_window_view.cc b/chrome/browser/ash/input_method/ui/suggestion_window_view.cc
index b0a3922..938ab83 100644
--- a/chrome/browser/ash/input_method/ui/suggestion_window_view.cc
+++ b/chrome/browser/ash/input_method/ui/suggestion_window_view.cc
@@ -89,7 +89,7 @@
 
 void SuggestionWindowView::Show(const SuggestionDetails& details) {
   ResizeCandidateArea({});
-
+  Reorient(Orientation::kVertical);
   completion_view_->SetVisible(true);
   completion_view_->SetView(details);
   if (details.show_setting_link)
@@ -101,9 +101,11 @@
 }
 
 void SuggestionWindowView::ShowMultipleCandidates(
-    const ash::input_method::AssistiveWindowProperties& properties) {
+    const ash::input_method::AssistiveWindowProperties& properties,
+    Orientation orientation) {
   const std::vector<std::u16string>& candidates = properties.candidates;
   completion_view_->SetVisible(false);
+  Reorient(orientation);
   ResizeCandidateArea(
       candidates,
       properties.type == ui::ime::AssistiveWindowType::kEmojiSuggestion);
@@ -176,28 +178,6 @@
   set_parent_window(parent);
   set_margins(gfx::Insets());
 
-  views::BoxLayout::Orientation layout_orientation;
-  int multiple_candidate_area_padding = 0;
-  switch (orientation) {
-    case Orientation::kVertical: {
-      layout_orientation = views::BoxLayout::Orientation::kVertical;
-      // TODO(jhtin): remove this when emoji uses horizontal layout.
-      multiple_candidate_area_padding = 0;
-      break;
-    }
-    case Orientation::kHorizontal: {
-      layout_orientation = views::BoxLayout::Orientation::kHorizontal;
-      multiple_candidate_area_padding = 4;
-      break;
-    }
-    default: {
-      // Unimplemented orientation.
-      NOTREACHED();
-      break;
-    }
-  }
-
-  SetLayoutManager(std::make_unique<views::BoxLayout>(layout_orientation));
   completion_view_ = AddChildView(
       std::make_unique<CompletionSuggestionView>(base::BindRepeating(
           &AssistiveDelegate::AssistiveWindowButtonClicked,
@@ -206,11 +186,8 @@
                                 .index = 0})));
   completion_view_->SetVisible(false);
   multiple_candidate_area_ = AddChildView(std::make_unique<views::View>());
-
-  multiple_candidate_area_->SetLayoutManager(std::make_unique<views::BoxLayout>(
-      layout_orientation, gfx::Insets(multiple_candidate_area_padding),
-      /* between_child_spacing=*/multiple_candidate_area_padding));
   multiple_candidate_area_->SetVisible(false);
+  Reorient(orientation);
 
   setting_link_ = AddChildView(std::make_unique<views::Link>(
       l10n_util::GetStringUTF16(IDS_SUGGESTION_LEARN_MORE)));
@@ -286,6 +263,30 @@
   }
 }
 
+void SuggestionWindowView::Reorient(Orientation orientation) {
+  views::BoxLayout::Orientation layout_orientation =
+      views::BoxLayout::Orientation::kVertical;
+  int multiple_candidate_area_padding = 0;
+  switch (orientation) {
+    case Orientation::kVertical: {
+      layout_orientation = views::BoxLayout::Orientation::kVertical;
+      // TODO(jhtin): remove this when emoji uses horizontal layout.
+      multiple_candidate_area_padding = 0;
+      break;
+    }
+    case Orientation::kHorizontal: {
+      layout_orientation = views::BoxLayout::Orientation::kHorizontal;
+      multiple_candidate_area_padding = 4;
+      break;
+    }
+  }
+
+  SetLayoutManager(std::make_unique<views::BoxLayout>(layout_orientation));
+  multiple_candidate_area_->SetLayoutManager(std::make_unique<views::BoxLayout>(
+      layout_orientation, gfx::Insets(multiple_candidate_area_padding),
+      /* between_child_spacing=*/multiple_candidate_area_padding));
+}
+
 void SuggestionWindowView::MakeVisible() {
   multiple_candidate_area_->SetVisible(true);
   SizeToContents();
diff --git a/chrome/browser/ash/input_method/ui/suggestion_window_view.h b/chrome/browser/ash/input_method/ui/suggestion_window_view.h
index 53c76c4..2a1aa92 100644
--- a/chrome/browser/ash/input_method/ui/suggestion_window_view.h
+++ b/chrome/browser/ash/input_method/ui/suggestion_window_view.h
@@ -63,7 +63,8 @@
   void Show(const SuggestionDetails& details);
 
   void ShowMultipleCandidates(
-      const ash::input_method::AssistiveWindowProperties& properties);
+      const ash::input_method::AssistiveWindowProperties& properties,
+      Orientation orientation);
 
   // Sets |button|'s highlight state to |highlighted|. At most one button with
   // the same id will be highlighted at any given time.
@@ -96,6 +97,8 @@
   void ResizeCandidateArea(const std::vector<std::u16string>& new_candidates,
                            bool use_legacy_candidate = false);
 
+  void Reorient(Orientation orientation);
+
   void MakeVisible();
 
   // Sets |candidate|'s highlight state to |highlighted|. At most one candidate
diff --git a/chrome/browser/ash/input_method/ui/suggestion_window_view_unittest.cc b/chrome/browser/ash/input_method/ui/suggestion_window_view_unittest.cc
index 6b5dc87..afb6f38a 100644
--- a/chrome/browser/ash/input_method/ui/suggestion_window_view_unittest.cc
+++ b/chrome/browser/ash/input_method/ui/suggestion_window_view_unittest.cc
@@ -108,10 +108,10 @@
       std::string name;
       switch (info.param) {
         case SuggestionWindowView::Orientation::kHorizontal:
-          name = "Horizontal";
+          name = "InitInHorizontal";
           break;
         case SuggestionWindowView::Orientation::kVertical:
-          name = "Vertical";
+          name = "InitInVertical";
           break;
         default:
           name = "UNKNOWN";
@@ -121,7 +121,7 @@
     });
 
 TEST_P(SuggestionWindowViewTest, HighlightOneCandidateWhenIndexIsValid) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   for (int index = 0; index < static_cast<int>(candidates_.size()); index++) {
     candidate_button_.index = index;
     suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -132,7 +132,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, HighlightNoCandidateWhenIndexIsInvalid) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   for (int index : {-1, static_cast<int>(candidates_.size())}) {
     candidate_button_.index = index;
     suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -143,7 +143,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, HighlightTheSameCandidateWhenCalledTwice) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   int highlight_index = 0;
   candidate_button_.index = highlight_index;
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -155,7 +155,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        HighlightValidCandidateAfterGivingInvalidIndexThenValidIndex) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   int valid_index = 0;
   candidate_button_.index = candidates_.size();
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -168,7 +168,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        KeepHighlightingValidCandidateWhenGivingValidThenInvalidIndex) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   int valid_index = 0;
   candidate_button_.index = valid_index;
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -180,7 +180,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, UnhighlightCandidateIfCurrentlyHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   candidate_button_.index = 0;
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, false);
@@ -191,7 +191,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        DoesNotUnhighlightCandidateIfNotCurrentlyHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   int highlight_index = 0;
   candidate_button_.index = highlight_index;
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -203,7 +203,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, DoesNotUnhighlightCandidateIfOutOfRange) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   int highlight_index = 0;
   candidate_button_.index = highlight_index;
   suggestion_window_view_->SetButtonHighlighted(candidate_button_, true);
@@ -218,7 +218,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, HighlightsSettingLinkViewWhenNotHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(setting_link_view_, true);
 
   EXPECT_TRUE(
@@ -228,7 +228,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        HighlightsSettingLinkViewWhenAlreadyHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(setting_link_view_, true);
   suggestion_window_view_->SetButtonHighlighted(setting_link_view_, true);
 
@@ -238,7 +238,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, UnhighlightsSettingLinkViewWhenHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(setting_link_view_, false);
 
   EXPECT_TRUE(
@@ -248,7 +248,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        UnhighlightsKeepSettingLinkViewUnhighlightedWhenAlreadyNotHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(setting_link_view_, false);
   suggestion_window_view_->SetButtonHighlighted(setting_link_view_, false);
 
@@ -258,7 +258,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, HighlightsLearnMoreButtonWhenNotHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(learn_more_button_, true);
 
   EXPECT_TRUE(
@@ -268,7 +268,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        HighlightsLearnMoreButtonWhenAlreadyHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(learn_more_button_, true);
   suggestion_window_view_->SetButtonHighlighted(learn_more_button_, true);
 
@@ -278,7 +278,7 @@
 }
 
 TEST_P(SuggestionWindowViewTest, UnhighlightsLearnMoreButtonWhenHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(learn_more_button_, false);
 
   EXPECT_TRUE(
@@ -288,7 +288,7 @@
 
 TEST_P(SuggestionWindowViewTest,
        UnhighlightsKeepLearnMoreButtonUnhighlightedWhenAlreadyNotHighlighted) {
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+  suggestion_window_view_->ShowMultipleCandidates(window_, GetParam());
   suggestion_window_view_->SetButtonHighlighted(learn_more_button_, false);
   suggestion_window_view_->SetButtonHighlighted(learn_more_button_, false);
 
@@ -297,7 +297,7 @@
       nullptr);
 }
 
-TEST_P(SuggestionWindowViewTest, DisplaysCorrectOrientationLayout) {
+TEST_P(SuggestionWindowViewTest, SetUpInCorrectOrientationLayoutOnInit) {
   views::BoxLayout::Orientation expected_orientation;
   switch (GetParam()) {
     case SuggestionWindowView::Orientation::kHorizontal:
@@ -309,13 +309,63 @@
     default:
       abort();
   }
-  suggestion_window_view_->ShowMultipleCandidates(window_);
+
   views::BoxLayout::Orientation layout_orientation =
       static_cast<views::BoxLayout*>(
+          suggestion_window_view_->GetLayoutManager())
+          ->GetOrientation();
+  EXPECT_EQ(layout_orientation, expected_orientation);
+}
+
+TEST_P(SuggestionWindowViewTest, HasVerticalLayoutWhenShowSingleCandidate) {
+  suggestion_window_view_->Show({
+      .text = u"good",
+      .confirmed_length = 0,
+  });
+
+  views::BoxLayout::Orientation layout_orientation =
+      static_cast<views::BoxLayout*>(
+          suggestion_window_view_->GetLayoutManager())
+          ->GetOrientation();
+  EXPECT_EQ(layout_orientation, views::BoxLayout::Orientation::kVertical);
+}
+
+TEST_P(SuggestionWindowViewTest,
+       HasHorizontalLayoutWhenShowMultipleCandidateWithHorizontal) {
+  suggestion_window_view_->ShowMultipleCandidates(
+      window_, SuggestionWindowView::Orientation::kHorizontal);
+
+  views::BoxLayout::Orientation layout_orientation =
+      static_cast<views::BoxLayout*>(
+          suggestion_window_view_->GetLayoutManager())
+          ->GetOrientation();
+  views::BoxLayout::Orientation candidate_area_layout_orientation =
+      static_cast<views::BoxLayout*>(
           suggestion_window_view_->multiple_candidate_area_for_testing()
               ->GetLayoutManager())
           ->GetOrientation();
-  EXPECT_EQ(layout_orientation, expected_orientation);
+  EXPECT_EQ(layout_orientation, views::BoxLayout::Orientation::kHorizontal);
+  EXPECT_EQ(candidate_area_layout_orientation,
+            views::BoxLayout::Orientation::kHorizontal);
+}
+
+TEST_P(SuggestionWindowViewTest,
+       HasVerticalLayoutWhenShowMultipleCandidateWithVertical) {
+  suggestion_window_view_->ShowMultipleCandidates(
+      window_, SuggestionWindowView::Orientation::kVertical);
+
+  views::BoxLayout::Orientation layout_orientation =
+      static_cast<views::BoxLayout*>(
+          suggestion_window_view_->GetLayoutManager())
+          ->GetOrientation();
+  views::BoxLayout::Orientation candidate_area_layout_orientation =
+      static_cast<views::BoxLayout*>(
+          suggestion_window_view_->multiple_candidate_area_for_testing()
+              ->GetLayoutManager())
+          ->GetOrientation();
+  EXPECT_EQ(layout_orientation, views::BoxLayout::Orientation::kVertical);
+  EXPECT_EQ(candidate_area_layout_orientation,
+            views::BoxLayout::Orientation::kVertical);
 }
 
 TEST_P(SuggestionWindowViewTest,
diff --git a/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.cc b/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.cc
index aaefda96..f96efc4 100644
--- a/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.cc
+++ b/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.cc
@@ -57,9 +57,18 @@
 
   g_browser_process->profile_manager()->CreateProfileAsync(
       ash::ProfileHelper::GetLockScreenAppProfilePath(),
-      base::BindRepeating(&LockScreenProfileCreatorImpl::OnProfileReady,
-                          weak_ptr_factory_.GetWeakPtr(),
-                          tick_clock_->NowTicks()));
+      /*initialized_callback=*/
+      base::BindOnce(&LockScreenProfileCreatorImpl::OnProfileReady,
+                     weak_ptr_factory_.GetWeakPtr(), tick_clock_->NowTicks()),
+      /*created_callback=*/base::BindOnce([](Profile* profile) {
+        // Disable safe browsing for the profile to avoid activating
+        // SafeBrowsingService when the user has safe browsing disabled
+        // (reasoning similar to http://crbug.com/461493).
+        // TODO(tbarzic): Revisit this if webviews get enabled for lock screen
+        // apps.
+        profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, false);
+        profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnhanced, false);
+      }));
 }
 
 void LockScreenProfileCreatorImpl::InitializeImpl() {
@@ -82,26 +91,13 @@
 
 void LockScreenProfileCreatorImpl::OnProfileReady(
     const base::TimeTicks& start_time,
-    Profile* profile,
-    Profile::CreateStatus status) {
-  // Ignore CREATED status - wait for profile to be initialized before
-  // continuing.
-  if (status == Profile::CREATE_STATUS_CREATED) {
-    // Disable safe browsing for the profile to avoid activating
-    // SafeBrowsingService when the user has safe browsing disabled (reasoning
-    // similar to http://crbug.com/461493).
-    // TODO(tbarzic): Revisit this if webviews get enabled for lock screen apps.
-    profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, false);
-    profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnhanced, false);
-    return;
-  }
-
+    Profile* profile) {
   UMA_HISTOGRAM_BOOLEAN("Apps.LockScreen.AppsProfile.Creation.Success",
-                        status == Profile::CREATE_STATUS_INITIALIZED);
+                        profile != nullptr);
 
   // On error, bail out - this will cause the lock screen apps to remain
   // unavailable on the device.
-  if (status != Profile::CREATE_STATUS_INITIALIZED) {
+  if (!profile) {
     OnLockScreenProfileCreated(nullptr);
     return;
   }
diff --git a/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.h b/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.h
index 281e036..123aff9 100644
--- a/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.h
+++ b/chrome/browser/ash/lock_screen_apps/lock_screen_profile_creator_impl.h
@@ -55,10 +55,7 @@
   // is called more than once for a single profile).
   // |start_time| - time at which the profile creation started.
   // |profile| - the created profile - i.e. the lock screen profile.
-  // |status| - profile creation status.
-  void OnProfileReady(const base::TimeTicks& start_time,
-                      Profile* profile,
-                      Profile::CreateStatus status);
+  void OnProfileReady(const base::TimeTicks& start_time, Profile* profile);
 
   Profile* const primary_profile_;
   const base::TickClock* tick_clock_;
diff --git a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
index d1b4b71f..b95dca38 100644
--- a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
+++ b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
@@ -9,6 +9,8 @@
 #include "ash/public/cpp/login_accelerators.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/feature_list.h"
+#include "base/immediate_crash.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/syslog_logging.h"
@@ -18,6 +20,8 @@
 #include "chrome/browser/ash/app_mode/startup_app_launcher.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
+#include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h"
+#include "chrome/browser/ash/crosapi/browser_util.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
 #include "chrome/browser/ash/login/enterprise_user_session_metrics.h"
@@ -297,8 +301,16 @@
       case KioskAppType::kWebApp:
         // Make keyboard config sync with the `VirtualKeyboardFeatures` policy.
         ChromeKeyboardControllerClient::Get()->SetKeyboardConfigFromPref(true);
-        app_launcher_ = std::make_unique<WebKioskAppLauncher>(
-            profile, this, *kiosk_app_id_.account_id);
+        // TODO(b/242023891): |WebKioskAppServiceLauncher| does not support
+        // Lacros until App Service installation API is available.
+        if (base::FeatureList::IsEnabled(features::kKioskEnableAppService) &&
+            !crosapi::browser_util::IsLacrosEnabled()) {
+          app_launcher_ = std::make_unique<WebKioskAppServiceLauncher>(
+              profile, this, *kiosk_app_id_.account_id);
+        } else {
+          app_launcher_ = std::make_unique<WebKioskAppLauncher>(
+              profile, this, *kiosk_app_id_.account_id);
+        }
         break;
     }
   }
diff --git a/chrome/browser/ash/login/saml/saml_browsertest.cc b/chrome/browser/ash/login/saml/saml_browsertest.cc
index 60aafb0..c4ebc37a 100644
--- a/chrome/browser/ash/login/saml/saml_browsertest.cc
+++ b/chrome/browser/ash/login/saml/saml_browsertest.cc
@@ -310,7 +310,7 @@
         "      $('gaia-signin').authenticator_.removeEventListener("
         "          'authFlowChange', f);"
         "      window.domAutomationController.send("
-        "          $('gaia-signin').isSamlForTesting() ?"
+        "          $('gaia-signin').isSamlAuthFlowForTesting() ?"
         "              'SamlLoaded' : 'GaiaLoaded');"
         "    });");
   }
@@ -1385,7 +1385,8 @@
 void SAMLPolicyTest::MaybeWaitForSAMLToLoad() {
   // If SAML already loaded return and otherwise wait for the SamlLoaded
   // message.
-  if (test::OobeJS().GetAttributeBool("isSamlForTesting()", {"gaia-signin"}))
+  if (test::OobeJS().GetAttributeBool("isSamlAuthFlowForTesting()",
+                                      {"gaia-signin"}))
     return;
   content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents());
   SetupAuthFlowChangeListener();
@@ -1393,7 +1394,8 @@
   do {
     ASSERT_TRUE(message_queue.WaitForMessage(&message));
   } while (message != "\"SamlLoaded\"");
-  test::OobeJS().ExpectAttributeEQ("isSamlForTesting()", {"gaia-signin"}, true);
+  test::OobeJS().ExpectAttributeEQ("isSamlAuthFlowForTesting()",
+                                   {"gaia-signin"}, true);
 }
 
 void SAMLPolicyTest::ClickBackOnSAMLPage() {
@@ -1624,8 +1626,8 @@
   test::OobeJS().CreateVisibilityWaiter(true, kSigninFrameDialog)->Wait();
   test::OobeJS().CreateVisibilityWaiter(false, kGaiaLoading)->Wait();
   test::OobeJS().ExpectHasNoAttribute("transparent", kSigninFrameDialog);
-  test::OobeJS().ExpectAttributeEQ("isSamlForTesting()", {"gaia-signin"},
-                                   false);
+  test::OobeJS().ExpectAttributeEQ("isSamlAuthFlowForTesting()",
+                                   {"gaia-signin"}, false);
 
   if (!GetParam())
     test::OobeJS().ExpectHiddenPath(kSamlInterstitial);
diff --git a/chrome/browser/ash/login/screens/gaia_screen.cc b/chrome/browser/ash/login/screens/gaia_screen.cc
index fea7d02..8edb1a4 100644
--- a/chrome/browser/ash/login/screens/gaia_screen.cc
+++ b/chrome/browser/ash/login/screens/gaia_screen.cc
@@ -127,6 +127,7 @@
     exit_callback_.Run(Result::ENTERPRISE_ENROLL);
   } else if (action_id == kUserActionReloadDefault) {
     DCHECK(features::IsRedirectToDefaultIdPEnabled());
+    Reset();
     LoadOnline(EmptyAccountId());
   } else if (action_id == kUserActionRetry) {
     LoadOnline(EmptyAccountId());
diff --git a/chrome/browser/ash/login/session/user_session_manager.cc b/chrome/browser/ash/login/session/user_session_manager.cc
index be68bff..e6ea0ea4 100644
--- a/chrome/browser/ash/login/session/user_session_manager.cc
+++ b/chrome/browser/ash/login/session/user_session_manager.cc
@@ -1321,30 +1321,29 @@
                                     kEventPrepareProfile, TRACE_ID_LOCAL(this));
 
   g_browser_process->profile_manager()->CreateProfileAsync(
-      profile_path, base::BindRepeating(&UserSessionManager::OnProfileCreated,
-                                        AsWeakPtr(), user_context_));
-}
-
-void UserSessionManager::OnProfileCreated(const UserContext& user_context,
-                                          Profile* profile,
-                                          Profile::CreateStatus status) {
-  switch (status) {
-    case Profile::CREATE_STATUS_CREATED:
-      CHECK(profile);
-      // Profile created but before initializing extensions and promo resources.
-      InitProfilePreferences(profile, user_context);
-      break;
-    case Profile::CREATE_STATUS_INITIALIZED:
-      CHECK(profile);
-      // Profile is created, extensions and promo resources are initialized.
-      // At this point all other Chrome OS services will be notified that it is
-      // safe to use this profile.
-      UserProfileInitialized(profile, user_context.GetAccountId());
-      break;
-    case Profile::CREATE_STATUS_LOCAL_FAIL:
-      NOTREACHED();
-      break;
-  }
+      profile_path,
+      /*initialized_callback=*/
+      base::BindOnce(
+          [](base::WeakPtr<UserSessionManager> self,
+             const UserContext& user_context, Profile* profile) {
+            CHECK(profile);
+            // Profile is created, extensions and promo resources
+            // are initialized. At this point all other Chrome OS
+            // services will be notified that it is safe to use
+            // this profile.
+            self->UserProfileInitialized(profile, user_context.GetAccountId());
+          },
+          AsWeakPtr(), user_context_),
+      /*created_callback=*/
+      base::BindOnce(
+          [](base::WeakPtr<UserSessionManager> self,
+             const UserContext& user_context, Profile* profile) {
+            CHECK(profile);
+            // Profile created but before initializing extensions and
+            // promo resources.
+            self->InitProfilePreferences(profile, user_context);
+          },
+          AsWeakPtr(), user_context_));
 }
 
 void UserSessionManager::InitProfilePreferences(
@@ -1739,7 +1738,7 @@
     ProfileHelper::Get()->FlushProfile(profile);
 
   // TODO(nkostylev): This pointer should probably never be NULL, but it looks
-  // like OnProfileCreated() may be getting called before
+  // like CreateProfileAsync callback may be getting called before
   // UserSessionManager::PrepareProfile() has set `delegate_` when Chrome is
   // killed during shutdown in tests -- see http://crosbug.com/18269.  Replace
   // this 'if' statement with a CHECK(delegate_) once the underlying issue is
diff --git a/chrome/browser/ash/login/session/user_session_manager.h b/chrome/browser/ash/login/session/user_session_manager.h
index 8ff70191..7890aed 100644
--- a/chrome/browser/ash/login/session/user_session_manager.h
+++ b/chrome/browser/ash/login/session/user_session_manager.h
@@ -417,11 +417,6 @@
   void StartCrosSession();
   void PrepareProfile(const base::FilePath& profile_path);
 
-  // Callback for asynchronous profile creation.
-  void OnProfileCreated(const UserContext& user_context,
-                        Profile* profile,
-                        Profile::CreateStatus status);
-
   // Callback for Profile::CREATE_STATUS_CREATED profile state.
   // Initializes basic preferences for newly created profile. Any other
   // early profile initialization that needs to happen before
diff --git a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
index 4f7f0364..8478e04f 100644
--- a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
+++ b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
@@ -67,9 +67,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h"
 #include "chrome/browser/chromeos/extensions/extension_tab_util_delegate_chromeos.h"
-#include "chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.h"
 #include "chrome/browser/extensions/extension_tab_util.h"
 #include "chrome/browser/extensions/permissions_updater.h"
 #include "chrome/browser/policy/networking/policy_cert_service_factory.h"
@@ -177,15 +175,8 @@
 // during logout (the browser process is destroyed during logout), ie. they are
 // not freed and they leak but that is fine.
 void SetPublicAccountDelegates() {
-  extensions::PermissionsUpdater::SetPlatformDelegate(
-      std::make_unique<extensions::PermissionsUpdaterDelegateChromeOS>());
-
   extensions::ExtensionTabUtil::SetPlatformDelegate(
       std::make_unique<extensions::ExtensionTabUtilDelegateChromeOS>());
-
-  extensions::ActiveTabPermissionGranter::SetPlatformDelegate(
-      std::make_unique<
-          extensions::ActiveTabPermissionGranterDelegateChromeOS>());
 }
 
 policy::MinimumVersionPolicyHandler* GetMinimumVersionPolicyHandler() {
@@ -294,9 +285,7 @@
 
 // static
 void ChromeUserManagerImpl::ResetPublicAccountDelegatesForTesting() {
-  extensions::PermissionsUpdater::SetPlatformDelegate(nullptr);
   extensions::ExtensionTabUtil::SetPlatformDelegate(nullptr);
-  extensions::ActiveTabPermissionGranter::SetPlatformDelegate(nullptr);
 }
 
 ChromeUserManagerImpl::ChromeUserManagerImpl()
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc b/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc
index 71acee96..6820379 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc
+++ b/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc
@@ -83,6 +83,15 @@
   reboot_delay_for_testing_ = reboot_delay;
 }
 
+absl::optional<ScheduledTaskExecutor::ScheduledTaskData>
+DeviceScheduledRebootHandler::GetScheduledRebootDataForTest() const {
+  return scheduled_reboot_data_;
+}
+
+bool DeviceScheduledRebootHandler::IsRebootSkippedForTest() const {
+  return skip_reboot_;
+}
+
 void DeviceScheduledRebootHandler::OnRebootTimerExpired() {
   // If no policy exists, state should have been reset and this callback
   // shouldn't have fired.
@@ -166,7 +175,21 @@
       base::BindOnce(&DeviceScheduledRebootHandler::OnRebootTimerExpired,
                      base::Unretained(this)),
       GetExternalDelay());
+}
 
+void DeviceScheduledRebootHandler::OnRebootTimerStartResult(
+    ScopedWakeLock scoped_wake_lock,
+    bool result) {
+  // If reboot timer failed to start, reset notifications if scheduled and
+  // |scheduled_reboot_data_|. The reboot will be scheduled again when the new
+  // policy comes or Chrome is restarted.
+  if (!result) {
+    LOG(ERROR) << "Failed to start reboot timer";
+    notifications_scheduler_->ResetState();
+    skip_reboot_ = false;
+    scheduled_reboot_data_ = absl::nullopt;
+    return;
+  }
   // Set |skip_reboot_| flag if the grace time should be applied.
   skip_reboot_ = notifications_scheduler_->ShouldApplyGraceTime(
       scheduled_task_executor_->GetScheduledTaskTime());
@@ -183,17 +206,6 @@
   }
 }
 
-void DeviceScheduledRebootHandler::OnRebootTimerStartResult(
-    ScopedWakeLock scoped_wake_lock,
-    bool result) {
-  // If reboot timer failed to start, reset state. The reboot will be scheduled
-  // again when the new policy comes or Chrome is restarted.
-  if (!result) {
-    LOG(ERROR) << "Failed to start reboot timer";
-    ResetState();
-  }
-}
-
 void DeviceScheduledRebootHandler::ResetState() {
   notifications_scheduler_->ResetState();
   scheduled_task_executor_->Reset();
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.h b/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.h
index b9315ec2..e6fe52a 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.h
+++ b/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.h
@@ -44,6 +44,13 @@
   // Sets reboot delay for testing.
   void SetRebootDelayForTest(const base::TimeDelta& reboot_delay);
 
+  // Returns value of |scheduled_reboot_data_|.
+  absl::optional<ScheduledTaskExecutor::ScheduledTaskData>
+  GetScheduledRebootDataForTest() const;
+
+  // Returns value of |skip_reboot_|.
+  bool IsRebootSkippedForTest() const;
+
  protected:
   // Called when scheduled timer fires. Triggers a reboot and
   // schedules the next reboot based on |scheduled_reboot_data_|.
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/test/device_scheduled_reboot_handler_unittest.cc b/chrome/browser/ash/policy/scheduled_task_handler/test/device_scheduled_reboot_handler_unittest.cc
index 29d9b98..8a285982 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/test/device_scheduled_reboot_handler_unittest.cc
+++ b/chrome/browser/ash/policy/scheduled_task_handler/test/device_scheduled_reboot_handler_unittest.cc
@@ -10,12 +10,15 @@
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
 #include "base/feature_list.h"
+#include "base/logging.h"
+#include "base/test/mock_log.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/ash/login/users/mock_user_manager.h"
+#include "chrome/browser/ash/policy/scheduled_task_handler/scheduled_task_executor_impl.h"
 #include "chrome/browser/ash/policy/scheduled_task_handler/scheduled_task_util.h"
 #include "chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.h"
 #include "chrome/browser/ash/policy/scheduled_task_handler/test/fake_scheduled_task_executor.h"
@@ -35,7 +38,14 @@
 namespace {
 constexpr char kRebootTaskTimeFieldName[] = "reboot_time";
 constexpr base::TimeDelta kExternalRebootDelay = base::Seconds(100);
+constexpr char kESTTimeZoneID[] = "America/New_York";
 }
+using ::testing::_;
+#define EXPECT_ERROR_LOG(matcher)                                \
+  if (DLOG_IS_ON(ERROR)) {                                       \
+    EXPECT_CALL(log_, Log(logging::LOG_ERROR, _, _, _, matcher)) \
+        .WillOnce(testing::Return(true)); /* suppress logging */ \
+  }
 
 class DeviceScheduledRebootHandlerForTest
     : public DeviceScheduledRebootHandler {
@@ -623,4 +633,78 @@
   EXPECT_FALSE(prefs_->GetBoolean(ash::prefs::kShowPostRebootNotification));
 }
 
+class ScheduledRebootTimerFailureTest : public testing::Test {
+ public:
+  ScheduledRebootTimerFailureTest()
+      : task_environment_(base::test::TaskEnvironment::MainThreadType::IO,
+                          base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
+    ScopedWakeLock::OverrideWakeLockProviderBinderForTesting(
+        base::BindRepeating(&device::TestWakeLockProvider::BindReceiver,
+                            base::Unretained(&wake_lock_provider_)));
+    chromeos::PowerManagerClient::InitializeFake();
+    chromeos::FakePowerManagerClient::Get()->set_tick_clock(
+        task_environment_.GetMockTickClock());
+    auto task_executor =
+        std::make_unique<ScheduledTaskExecutorImpl>("test_tag");
+    scheduled_task_executor_ = task_executor.get();
+    auto notifications_scheduler =
+        std::make_unique<FakeRebootNotificationsScheduler>(
+            task_environment_.GetMockClock(),
+            task_environment_.GetMockTickClock(), nullptr);
+    notifications_scheduler_ = notifications_scheduler.get();
+    device_scheduled_reboot_handler_ =
+        std::make_unique<DeviceScheduledRebootHandlerForTest>(
+            ash::CrosSettings::Get(), std::move(task_executor),
+            std::move(notifications_scheduler));
+  }
+
+  ~ScheduledRebootTimerFailureTest() override {
+    device_scheduled_reboot_handler_.reset();
+    chromeos::PowerManagerClient::Shutdown();
+    ScopedWakeLock::OverrideWakeLockProviderBinderForTesting(
+        base::NullCallback());
+  }
+
+ protected:
+  base::test::TaskEnvironment task_environment_;
+  ScheduledTaskExecutorImpl* scheduled_task_executor_;
+  std::unique_ptr<DeviceScheduledRebootHandlerForTest>
+      device_scheduled_reboot_handler_;
+  ash::ScopedTestingCrosSettings cros_settings_;
+  device::TestWakeLockProvider wake_lock_provider_;
+  FakeRebootNotificationsScheduler* notifications_scheduler_;
+  base::test::MockLog log_;
+};
+
+TEST_F(ScheduledRebootTimerFailureTest, SimulateTimerStartFailure) {
+  // Schedule reboot in 30 minutes.
+  base::TimeDelta delay_from_now = base::Minutes(30);
+  auto time_zone_ = base::WrapUnique(icu::TimeZone::createTimeZone(
+      icu::UnicodeString::fromUTF8(kESTTimeZoneID)));
+  auto policy_and_next_reboot_time = scheduled_task_test_util::CreatePolicy(
+      *time_zone_.get(), task_environment_.GetMockClock()->Now(),
+      delay_from_now, ScheduledTaskExecutor::Frequency::kDaily,
+      kRebootTaskTimeFieldName);
+
+  // Simulate timer creation failure.
+  chromeos::NativeTimer::SimulateTimerCreationFailureForTesting();
+  int expected_close_notification_calls =
+      notifications_scheduler_->GetCloseNotificationCalls() + 1;
+
+  // Verify timer start failure once the policy is set. Notification scheduler
+  // should close all pending notifications and reset state.
+  EXPECT_ERROR_LOG(testing::HasSubstr("Failed to start reboot timer"));
+  log_.StartCapturingLogs();
+  cros_settings_.device_settings()->Set(
+      ash::kDeviceScheduledReboot,
+      std::move(policy_and_next_reboot_time.first));
+
+  // Verify that the notifications are closed.
+  EXPECT_EQ(notifications_scheduler_->GetCloseNotificationCalls(),
+            expected_close_notification_calls);
+  // Verify that the state is reset.
+  EXPECT_EQ(device_scheduled_reboot_handler_->GetScheduledRebootDataForTest(),
+            absl::nullopt);
+  EXPECT_EQ(device_scheduled_reboot_handler_->IsRebootSkippedForTest(), false);
+}
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.cc b/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.cc
index c7dce50c..f9673839 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.cc
+++ b/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.cc
@@ -27,6 +27,9 @@
 int FakeRebootNotificationsScheduler::GetShowNotificationCalls() const {
   return show_notification_calls_;
 }
+int FakeRebootNotificationsScheduler::GetCloseNotificationCalls() const {
+  return close_notification_calls_;
+}
 void FakeRebootNotificationsScheduler::SetUptime(base::TimeDelta uptime) {
   uptime_ = uptime;
 }
@@ -62,7 +65,9 @@
   return uptime_;
 }
 
-void FakeRebootNotificationsScheduler::CloseNotifications() {}
+void FakeRebootNotificationsScheduler::CloseNotifications() {
+  ++close_notification_calls_;
+}
 
 bool FakeRebootNotificationsScheduler::ShouldWaitFullRestoreInit() const {
   return wait_full_restore_init_;
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.h b/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.h
index b5de9544..a3986bf 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.h
+++ b/chrome/browser/ash/policy/scheduled_task_handler/test/fake_reboot_notifications_scheduler.h
@@ -26,6 +26,7 @@
 
   int GetShowDialogCalls() const;
   int GetShowNotificationCalls() const;
+  int GetCloseNotificationCalls() const;
   void SetUptime(base::TimeDelta uptime);
   void SimulateRebootButtonClick();
   void SetWaitFullRestoreInit(bool should_wait);
@@ -45,7 +46,8 @@
 
   bool ShouldWaitFullRestoreInit() const override;
 
-  int show_dialog_calls_ = 0, show_notification_calls_ = 0;
+  int show_dialog_calls_ = 0, show_notification_calls_ = 0,
+      close_notification_calls_ = 0;
   bool wait_full_restore_init_ = false;
   const base::Clock* clock_;
   // Default uptime for test is 10h.
diff --git a/chrome/browser/autofill/autofill_uitest_util.cc b/chrome/browser/autofill/autofill_uitest_util.cc
index b788a4c..0299cc7 100644
--- a/chrome/browser/autofill/autofill_uitest_util.cc
+++ b/chrome/browser/autofill/autofill_uitest_util.cc
@@ -144,7 +144,7 @@
       {&AutofillManager::Observer::OnAfterAskForValuesToFill});
   driver->AskForValuesToFill(form, form.fields.front(), bounds, query_id,
                              /*autoselect_first_suggestion=*/false,
-                             TouchToFillEligible(false));
+                             FormElementWasClicked(false));
   ASSERT_TRUE(waiter.Wait());
 
   std::vector<Suggestion> suggestions = {Suggestion(u"Test suggestion")};
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index a15b943..288310be 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -790,7 +790,10 @@
 #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || \
     BUILDFLAG(IS_WIN)
   if (base::FeatureList::IsEnabled(blink::features::kDesktopPWAsSubApps) &&
-      render_frame_host->IsInPrimaryMainFrame()) {
+      !render_frame_host->GetParentOrOuterDocument()) {
+    // The service binder will reject non-primary main frames, but we still need
+    // to register it for them because a non-primary main frame could become a
+    // primary main frame at a later time (eg. a prerendered page).
     map->Add<blink::mojom::SubAppsService>(
         base::BindRepeating(&web_app::SubAppsServiceImpl::CreateIfAllowed));
   }
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 280ee5cc..76d8dd6c 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -2094,8 +2094,6 @@
     "app_mode/startup_app_launcher_update_checker.h",
     "arc/icon_decode_request.cc",
     "arc/icon_decode_request.h",
-    "extensions/active_tab_permission_granter_delegate_chromeos.cc",
-    "extensions/active_tab_permission_granter_delegate_chromeos.h",
     "extensions/default_app_order.cc",
     "extensions/default_app_order.h",
     "extensions/device_local_account_external_policy_loader.cc",
@@ -2130,8 +2128,6 @@
     "extensions/install_limiter_factory.h",
     "extensions/media_player_event_router.cc",
     "extensions/media_player_event_router.h",
-    "extensions/permissions_updater_delegate_chromeos.cc",
-    "extensions/permissions_updater_delegate_chromeos.h",
     "extensions/public_session_permission_helper.cc",
     "extensions/public_session_permission_helper.h",
     "extensions/signin_screen_extensions_external_loader.cc",
@@ -2719,6 +2715,7 @@
     "../ash/app_mode/metrics/network_connectivity_metrics_service_unittest.cc",
     "../ash/app_mode/startup_app_launcher_unittest.cc",
     "../ash/app_mode/web_app/web_kiosk_app_launcher_unittest.cc",
+    "../ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc",
     "../ash/app_restore/arc_ghost_window_view_unittest.cc",
     "../ash/app_restore/arc_window_utils_unittest.cc",
     "../ash/app_restore/full_restore_prefs_unittest.cc",
@@ -3486,7 +3483,6 @@
     "app_mode/app_session_unittest.cc",
     "app_mode/chrome_kiosk_app_launcher_unittest.cc",
     "app_mode/kiosk_app_service_launcher_unittest.cc",
-    "extensions/active_tab_permission_granter_delegate_chromeos_unittest.cc",
     "extensions/default_app_order_unittest.cc",
     "extensions/device_local_account_external_policy_loader_unittest.cc",
     "extensions/device_local_account_management_policy_provider_unittest.cc",
@@ -3506,7 +3502,6 @@
     "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler_unittest.cc",
     "extensions/login_screen/login/login_api_ash_unittest.cc",
     "extensions/login_screen/login_screen_ui/ui_handler_unittest.cc",
-    "extensions/permissions_updater_delegate_chromeos_unittest.cc",
     "extensions/public_session_permission_helper_unittest.cc",
     "extensions/signin_screen_policy_provider_unittest.cc",
     "fileapi/external_file_url_loader_factory_unittest.cc",
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.cc b/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.cc
index acbfd26..44ff8f1 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/apps/app_service/launch_result_type.h"
 #include "components/services/app_service/public/cpp/app_types.h"
 #include "components/services/app_service/public/cpp/app_update.h"
+#include "components/services/app_service/public/cpp/instance.h"
 
 namespace ash {
 
@@ -65,6 +66,32 @@
   }
 }
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+
+void KioskAppServiceLauncher::EnsureAppTypeInitialized(
+    apps::AppType app_type,
+    base::OnceClosure app_type_initialized_callback) {
+  if (app_service_->AppRegistryCache().IsAppTypeInitialized(app_type)) {
+    std::move(app_type_initialized_callback).Run();
+    return;
+  }
+
+  app_type_ = app_type;
+  app_type_initialized_callback_ = std::move(app_type_initialized_callback);
+  app_registry_observation_.Observe(&app_service_->AppRegistryCache());
+}
+
+void KioskAppServiceLauncher::CheckAndMaybeLaunchApp(
+    const std::string& app_id,
+    AppLaunchedCallback app_launched_callback,
+    base::OnceClosure app_visible_callback) {
+  app_visible_callback_ = std::move(app_visible_callback);
+  instance_registry_observation_.Observe(&app_service_->InstanceRegistry());
+
+  CheckAndMaybeLaunchApp(app_id, std::move(app_launched_callback));
+}
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 void KioskAppServiceLauncher::OnAppUpdate(const apps::AppUpdate& update) {
   if (update.AppId() != app_id_ ||
       update.Readiness() != apps::Readiness::kReady) {
@@ -74,11 +101,39 @@
   LaunchAppInternal();
 }
 
+void KioskAppServiceLauncher::OnAppTypeInitialized(apps::AppType app_type) {
+  if (app_type == app_type_ && app_type_initialized_callback_.has_value()) {
+    app_registry_observation_.Reset();
+    std::move(app_type_initialized_callback_.value()).Run();
+  }
+}
+
 void KioskAppServiceLauncher::OnAppRegistryCacheWillBeDestroyed(
     apps::AppRegistryCache* cache) {
   app_registry_observation_.Reset();
 }
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+
+void KioskAppServiceLauncher::OnInstanceUpdate(
+    const apps::InstanceUpdate& update) {
+  if (update.AppId() != app_id_ ||
+      !(update.State() & apps::InstanceState::kVisible)) {
+    return;
+  }
+
+  instance_registry_observation_.Reset();
+  if (app_visible_callback_.has_value()) {
+    std::move(app_visible_callback_.value()).Run();
+  }
+}
+
+void KioskAppServiceLauncher::OnInstanceRegistryWillBeDestroyed(
+    apps::InstanceRegistry* cache) {
+  instance_registry_observation_.Reset();
+}
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 void KioskAppServiceLauncher::LaunchAppInternal() {
   SYSLOG(INFO) << "Kiosk app is ready to launch with App Service";
   app_service_->LaunchAppWithParams(
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.h b/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.h
index 53207f2..3cff9e1 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.h
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_service_launcher.h
@@ -14,8 +14,13 @@
 #include "chrome/browser/apps/app_service/launch_result_type.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/services/app_service/public/cpp/app_registry_cache.h"
+#include "components/services/app_service/public/cpp/app_types.h"
 #include "components/services/app_service/public/cpp/app_update.h"
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "components/services/app_service/public/cpp/instance_registry.h"
+#endif
+
 namespace ash {
 
 // This class launches a Kiosk app with the following steps:
@@ -23,9 +28,11 @@
 //    registry cache until the app is ready.
 // 2. Starts the app using |AppServiceProxy::LaunchAppWithParams()| interface
 //    and waits for the launch to complete.
-// It does not wait for app window to become active, which should be handled
-// in the caller of this class.
-class KioskAppServiceLauncher : public apps::AppRegistryCache::Observer {
+class KioskAppServiceLauncher :
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    public apps::InstanceRegistry::Observer,
+#endif
+    public apps::AppRegistryCache::Observer {
  public:
   // Callback when the app is launched by App Service. App window instance is
   // not active at this point. If called with false then the app launch has
@@ -40,9 +47,24 @@
   // Checks if the Kiosk app is ready to be launched by App Service. If it's
   // ready then launches the app immediately. Otherwise waits for it to be ready
   // and launches the app later. Should only be called once per Kiosk launch.
+  // This function does not wait for app window to become active, which should
+  // be handled in the caller of this class.
   void CheckAndMaybeLaunchApp(const std::string& app_id,
                               AppLaunchedCallback app_launched_callback);
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Ensures that |app_type| is initialized in App Service.
+  void EnsureAppTypeInitialized(
+      apps::AppType app_type,
+      base::OnceClosure app_type_initialized_callback);
+
+  // Same as the other |CheckAndMaybeLaunchApp|, but also waits for app window
+  // to be visible by observing |apps::InstanceRegistry|. Only works in Ash.
+  void CheckAndMaybeLaunchApp(const std::string& app_id,
+                              AppLaunchedCallback app_launched_callback,
+                              base::OnceClosure app_visible_callback);
+#endif
+
  private:
   void LaunchAppInternal();
 
@@ -50,20 +72,40 @@
 
   // apps::AppRegistryCache::Observer:
   void OnAppUpdate(const apps::AppUpdate& update) override;
+  void OnAppTypeInitialized(apps::AppType app_type) override;
   void OnAppRegistryCacheWillBeDestroyed(
       apps::AppRegistryCache* cache) override;
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // apps::InstanceRegistry::Observer:
+  void OnInstanceUpdate(const apps::InstanceUpdate& update) override;
+  void OnInstanceRegistryWillBeDestroyed(
+      apps::InstanceRegistry* cache) override;
+#endif
+
   std::string app_id_;
 
+  apps::AppType app_type_;
+
   // A keyed service. Not owned by this class.
   raw_ptr<apps::AppServiceProxy> app_service_;
 
+  absl::optional<base::OnceClosure> app_type_initialized_callback_;
+
   absl::optional<AppLaunchedCallback> app_launched_callback_;
 
   base::ScopedObservation<apps::AppRegistryCache,
                           apps::AppRegistryCache::Observer>
       app_registry_observation_{this};
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  absl::optional<base::OnceClosure> app_visible_callback_;
+
+  base::ScopedObservation<apps::InstanceRegistry,
+                          apps::InstanceRegistry::Observer>
+      instance_registry_observation_{this};
+#endif
+
   base::WeakPtrFactory<KioskAppServiceLauncher> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.cc b/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.cc
deleted file mode 100644
index 6ea82b2..0000000
--- a/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h"
-
-#include "chrome/browser/profiles/profiles_state.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/permissions/api_permission.h"
-
-namespace extensions {
-
-namespace {
-
-permission_helper::RequestResolvedCallback* g_resolved_callback;
-
-}
-
-ActiveTabPermissionGranterDelegateChromeOS::
-    ActiveTabPermissionGranterDelegateChromeOS() {}
-
-ActiveTabPermissionGranterDelegateChromeOS::
-    ~ActiveTabPermissionGranterDelegateChromeOS() {}
-
-// static
-void ActiveTabPermissionGranterDelegateChromeOS::
-    SetRequestResolvedCallbackForTesting(
-        permission_helper::RequestResolvedCallback* callback) {
-  g_resolved_callback = callback;
-}
-
-bool ActiveTabPermissionGranterDelegateChromeOS::ShouldGrantActiveTabOrPrompt(
-    const Extension* extension,
-    content::WebContents* web_contents) {
-  permission_helper::RequestResolvedCallback callback;
-  if (g_resolved_callback)
-    callback = std::move(*g_resolved_callback);
-
-  if (!profiles::ArePublicSessionRestrictionsEnabled()) {
-    if (callback)
-      std::move(callback).Run({mojom::APIPermissionID::kActiveTab});
-    return true;
-  }
-
-  bool already_handled = permission_helper::HandlePermissionRequest(
-      *extension, {mojom::APIPermissionID::kActiveTab}, web_contents,
-      std::move(callback), permission_helper::PromptFactory());
-
-  return already_handled && permission_helper::PermissionAllowed(
-                                extension, mojom::APIPermissionID::kActiveTab);
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h b/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h
deleted file mode 100644
index f869838..0000000
--- a/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_DELEGATE_CHROMEOS_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_DELEGATE_CHROMEOS_H_
-
-#include "chrome/browser/chromeos/extensions/public_session_permission_helper.h"
-#include "chrome/browser/extensions/active_tab_permission_granter.h"
-
-namespace content {
-class WebContents;
-}
-
-namespace extensions {
-class Extension;
-
-// In Public Sessions, apps and extensions are force-installed by admin policy
-// so the user does not get a chance to review the permissions for these apps.
-// This is not acceptable from a security standpoint, so we show a permission
-// prompt the first time an extension tries to use activeTab permission (unless
-// the extension is whitelisted).
-class ActiveTabPermissionGranterDelegateChromeOS
-    : public ActiveTabPermissionGranter::Delegate {
- public:
-  ActiveTabPermissionGranterDelegateChromeOS();
-
-  ActiveTabPermissionGranterDelegateChromeOS(
-      const ActiveTabPermissionGranterDelegateChromeOS&) = delete;
-  ActiveTabPermissionGranterDelegateChromeOS& operator=(
-      const ActiveTabPermissionGranterDelegateChromeOS&) = delete;
-
-  ~ActiveTabPermissionGranterDelegateChromeOS() override;
-
-  static void SetRequestResolvedCallbackForTesting(
-      permission_helper::RequestResolvedCallback* callback);
-
-  // ActiveTabPermissionGranter::Delegate
-  bool ShouldGrantActiveTabOrPrompt(
-      const Extension* extension,
-      content::WebContents* web_contents) override;
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_DELEGATE_CHROMEOS_H_
diff --git a/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos_unittest.cc b/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos_unittest.cc
deleted file mode 100644
index be545397..0000000
--- a/chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos_unittest.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h"
-
-#include <memory>
-#include <string>
-
-#include "base/run_loop.h"
-#include "chrome/browser/chromeos/extensions/public_session_permission_helper.h"
-#include "chrome/test/base/chrome_render_view_host_test_harness.h"
-#include "chromeos/login/login_state/scoped_test_public_session_login_state.h"
-#include "extensions/browser/extension_dialog_auto_confirm.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/extension_builder.h"
-#include "extensions/common/value_builder.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace extensions {
-
-namespace {
-
-const char kWhitelistedId[] = "cbkkbcmdlboombapidmoeolnmdacpkch";
-// Use an extension ID that will never be whitelisted.
-const char kNonWhitelistedId[] = "bogus";
-
-scoped_refptr<const Extension> CreateExtension(const std::string& id) {
-  return ExtensionBuilder("test").SetID(id).Build();
-}
-
-}  // namespace
-
-class ActiveTabPermissionGranterDelegateChromeOSTest
-    : public ChromeRenderViewHostTestHarness {
- protected:
-  void SetUp() override;
-  void TearDown() override;
-
-  ActiveTabPermissionGranterDelegateChromeOS delegate_;
-  std::unique_ptr<chromeos::ScopedTestPublicSessionLoginState> login_state_;
-};
-
-void ActiveTabPermissionGranterDelegateChromeOSTest::SetUp() {
-  ChromeRenderViewHostTestHarness::SetUp();
-  login_state_ =
-      std::make_unique<chromeos::ScopedTestPublicSessionLoginState>();
-}
-
-void ActiveTabPermissionGranterDelegateChromeOSTest::TearDown() {
-  login_state_.reset();
-  permission_helper::ResetPermissionsForTesting();
-  ChromeRenderViewHostTestHarness::TearDown();
-}
-
-TEST_F(ActiveTabPermissionGranterDelegateChromeOSTest, GrantedForWhitelisted) {
-  auto extension = CreateExtension(kWhitelistedId);
-  EXPECT_TRUE(delegate_.ShouldGrantActiveTabOrPrompt(extension.get(), nullptr));
-}
-
-TEST_F(ActiveTabPermissionGranterDelegateChromeOSTest,
-       RejectedForNonWhitelisted) {
-  auto extension = CreateExtension(kNonWhitelistedId);
-  // Deny the permission request.
-  ScopedTestDialogAutoConfirm auto_confirm(ScopedTestDialogAutoConfirm::CANCEL);
-  // First request is always rejected (by design).
-  EXPECT_FALSE(
-      delegate_.ShouldGrantActiveTabOrPrompt(extension.get(), nullptr));
-  // Spin the loop, allowing the dialog to be resolved.
-  base::RunLoop().RunUntilIdle();
-  // Dialog result is propagated here, permission request is rejected.
-  EXPECT_FALSE(
-      delegate_.ShouldGrantActiveTabOrPrompt(extension.get(), nullptr));
-}
-
-TEST_F(ActiveTabPermissionGranterDelegateChromeOSTest,
-       GrantedForNonWhitelisted) {
-  auto extension = CreateExtension(kNonWhitelistedId);
-  // Allow the permission request.
-  ScopedTestDialogAutoConfirm auto_confirm(ScopedTestDialogAutoConfirm::ACCEPT);
-  EXPECT_FALSE(
-      delegate_.ShouldGrantActiveTabOrPrompt(extension.get(), nullptr));
-  base::RunLoop().RunUntilIdle();
-  // The permission request is granted now.
-  EXPECT_TRUE(delegate_.ShouldGrantActiveTabOrPrompt(extension.get(), nullptr));
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider.cc b/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider.cc
index d95850b..359584c 100644
--- a/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider.cc
+++ b/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider.cc
@@ -35,775 +35,6 @@
 
 namespace chromeos {
 
-namespace {
-
-namespace emk = extensions::manifest_keys;
-namespace ext_api = extensions::api;
-
-// List of manifest entries from https://developer.chrome.com/apps/manifest.
-// Unsafe entries are commented out and special cases too.
-const char* const kSafeManifestEntries[] = {
-    emk::kAboutPage,
-
-    // Special-cased in IsSafeForPublicSession().
-    // emk::kApp,
-
-    // Not a real manifest entry (doesn't show up in code search). All legacy
-    // ARC apps have this dictionary (data is stuffed there to be consumed by
-    // the ARC runtime).
-    "arc_metadata",
-
-    // Documented in https://developer.chrome.com/extensions/manifest but not
-    // implemented anywhere.  Still, a lot of apps use it.
-    "author",
-
-    // Allows inspection of page contents, not enabled on stable anyways except
-    // for whitelist.
-    // emk::kAutomation,
-
-    "background",
-
-    emk::kBackgroundPersistent,
-
-    emk::kBluetooth,
-
-    emk::kBrowserAction,
-
-    // Allows to replace the search provider which is somewhat risky - need to
-    // double check how the search provider policy behaves in PS.
-    // emk::kSettingsOverride,
-
-    // Bookmark manager, history, new tab - should be safe.
-    ext_api::chrome_url_overrides::ManifestKeys::kChromeUrlOverrides,
-
-    // General risk of capturing user input, but key combos must include Ctrl or
-    // Alt, so I think this is safe.
-    emk::kCommands,
-
-    // General risk of capturing user input, but key combos must include Ctrl or
-    // Alt, so I think this is safe.
-    emk::kContentCapabilities,
-
-    // Access to web content.
-    // emk::kContentScripts,
-
-    emk::kContentSecurityPolicy,
-
-    // Access to web content.
-    // emk::kConvertedFromUserScript,
-
-    // An implementation detail (actually written by Chrome, not the app
-    // author).
-    emk::kCurrentLocale,
-
-    // Name of directory containg default strings.
-    emk::kDefaultLocale,
-
-    // Just a display string.
-    emk::kDescription,
-
-    // Access to web content.
-    // emk::kDevToolsPage,
-
-    // Restricted to whitelist already.
-    emk::kDisplayInLauncher,
-
-    emk::kDisplayInNewTabPage,
-
-    // This allows to declaratively filter web requests and content, matching on
-    // content data. Doesn't allow direct access to request/content data. Can be
-    // used to brute-force e.g. cookies (reload with filter rules adjusted to
-    // match all possible cookie values) - but that's equivalent to an
-    // off-device brute-force attack.
-    // Looks safe in general with one exception: There's an action that allows
-    // to insert content scripts on matching content. We can't allow this, need
-    // to check whether there's also a host permission required for this case.
-    // emk::kEventRules,
-
-    // Shared Modules configuration: Allow other extensions to access resources.
-    ext_api::shared_module::ManifestKeys::kExport,
-
-    emk::kExternallyConnectable,
-
-    emk::kFileBrowserHandlers,
-
-    // Extension file handlers are restricted to whitelist which only contains
-    // quickoffice.
-    emk::kFileHandlers,
-
-    emk::kFileSystemProviderCapabilities,
-
-    emk::kHomepageURL,
-
-    // Just UX.
-    emk::kIcons,
-
-    // Shared Modules configuration: Import resources from another extension.
-    ext_api::shared_module::ManifestKeys::kImport,
-
-    ext_api::incognito::ManifestKeys::kIncognito,
-
-    // Keylogging.
-    // emk::kInputComponents,
-
-    // Shared Modules configuration: Specify extension id for development.
-    emk::kKey,
-
-    emk::kKiosk,
-
-    emk::kKioskEnabled,
-
-    // Not useful since it will prevent app from running, but we don't care.
-    emk::kKioskOnly,
-
-    emk::kKioskRequiredPlatformVersion,
-
-    // Not useful since it will prevent app from running, but we don't care.
-    emk::kKioskSecondaryApps,
-
-    // Special-cased in IsSafeForPublicSession().
-    // emk::kManifestVersion,
-
-    emk::kMIMETypes,
-
-    // Whitelisted to only allow browser tests and PDF viewer.
-    emk::kMimeTypesHandler,
-
-    emk::kMinimumChromeVersion,
-
-    // NaCl modules are bound to app permissions just like the rest of the app
-    // and thus should not pose a risk.
-    emk::kNaClModules,
-
-    // Just a display string.
-    emk::kName,
-
-    // Used in conjunction with the identity API - not really used when there's
-    // no GAIA user signed in.
-    ext_api::oauth2::ManifestKeys::kOauth2,
-
-    // Generally safe (i.e. only whitelist apps), except for the policy to
-    // whitelist apps for auto-approved token minting (we should just ignore
-    // this in public sessions). Risk is that admin mints OAuth tokens to access
-    // services on behalf of the user silently.
-    // emk::kOAuth2AutoApprove,
-
-    emk::kOfflineEnabled,
-
-    // A bit risky as the extensions sees all keystrokes entered into the
-    // omnibox after the search key matches, but generally we deem URLs fair
-    // game.
-    ext_api::omnibox::ManifestKeys::kOmnibox,
-
-    // Special-cased in IsSafeForPublicSession(). Subject to permission
-    // restrictions.
-    // emk::kOptionalPermissions,
-
-    emk::kOptionsPage,
-
-    emk::kOptionsUI,
-
-    emk::kPageAction,
-
-    // Special-cased in IsSafeForPublicSession(). Subject to permission
-    // restrictions.
-    // emk::kPermissions,
-
-    // No constant in manifest_constants.cc. Declared as a feature, but unused.
-    // "platforms",
-
-    // Deprecated manifest entry, so we don't care.
-    "plugins",
-
-    // Stated 3D/WebGL requirements of an app.
-    ext_api::requirements::ManifestKeys::kRequirements,
-
-    // Execute some pages in a separate sandbox.  (Note: Using string literal
-    // since extensions::manifest_keys only has constants for sub-keys.)
-    "sandbox",
-
-    // Just a display string.
-    emk::kShortName,
-
-    // Deprecated manifest key.
-    // "signature",
-
-    // Network access.
-    emk::kSockets,
-
-    // Deprecated manifest key.
-    // "spellcheck",
-
-    // (Note: Using string literal since extensions::manifest_keys only has
-    // constants for sub-keys.)
-    "storage",
-
-    // Only Hangouts is whitelisted.
-    emk::kSystemIndicator,
-
-    emk::kTheme,
-
-    // Might need this for accessibility, but has content access. Manual
-    // whitelisting might be reasonable here?
-    // emk::kTtsEngine,
-
-    // TODO(tnagel): Ensure that extension updates query UserMayLoad().
-    // https://crbug.com/549720
-    emk::kUpdateURL,
-
-    // Apps may intercept navigations to URL patterns for domains for which the
-    // app author has proven ownership of to the Web Store.  (Chrome starts the
-    // app instead of fulfilling the navigation.)  This is only safe for apps
-    // that have been loaded from the Web Store and thus is special-cased in
-    // IsSafeForPublicSession().
-    // emk::kUrlHandlers,
-
-    emk::kUsbPrinters,
-
-    // Version string (for app updates).
-    emk::kVersion,
-
-    // Just a display string.
-    emk::kVersionName,
-
-    ext_api::web_accessible_resources::ManifestKeys::kWebAccessibleResources,
-
-    // Webview has no special privileges or capabilities.
-    emk::kWebview,
-};
-
-// List of permission strings based on [1] and [2].  See |kSafePermissionDicts|
-// for permission dicts.  Since Public Session users may be fully unaware of any
-// apps being installed, their consent to access any kind of sensitive
-// information cannot be assumed.  Therefore only APIs are whitelisted which
-// should not leak sensitive data to the caller.  Since the privacy boundary is
-// drawn at the API level, no safeguards are required to prevent exfiltration
-// and thus apps may communicate freely over any kind of network.
-// [1] https://developer.chrome.com/apps/declare_permissions
-// [2] https://developer.chrome.com/apps/api_other
-const char* const kSafePermissionStrings[] = {
-    // Modifying accessibility settings seems safe (at most a user could be
-    // confused by it).
-    "accessibilityFeatures.modify",
-
-    // Originally blocked due to concerns about leaking user health information,
-    // but it seems this does more harm than good as it would likely prevent the
-    // extension from enabling assistive features. If the concerns prevail, we
-    // should probably not block, but adjust the API to pretend accessibility is
-    // off, so we don't punish apps that try to be helpful.
-    "accessibilityFeatures.read",
-
-    // Allows access to web contents in response to user gesture. Note that this
-    // doesn't trigger a permission warning on install though, so blocking is
-    // somewhat at odds with the spirit of the API - however I presume the API
-    // design assumes user-installed extensions, which we don't have here.
-    // Whitelisted because it's restricted now (asks user for permission the
-    // first time an extension tries to use it).
-    "activeTab",
-
-    // Schedule code to run at future times.
-    "alarms",
-
-    // PS UX can always be seen, this one doesn't go over it so it's fine.
-    "app.window.alwaysOnTop",
-    "alwaysOnTopWindows",
-
-    // Fullscreen is crippled in Public Sessions, maximizes instead, so both
-    // fullscreen and overrideEsc are safe for use in PS. (The recommended
-    // permission names are "app.window.*" but their unprefixed counterparts are
-    // still supported.)
-    "app.window.fullscreen",
-    "app.window.fullscreen.overrideEsc",
-    "fullscreen",
-    "overrideEscFullscreen",
-
-    "app.window.shape",
-
-    // The embedded app is subject to the restrictions as well obviously.
-    "appview",
-
-    // Risk of listening attack.
-    // "audio",
-
-    // User is prompted (allow/deny) when an extension requests audioCapture.
-    // The request is done via the getUserMedia API.
-    "audioCapture",
-
-    // Just resource management, probably doesn't even apply to Chrome OS.
-    "background",
-
-    // Access to URLs only, no content.
-    "bookmarks",
-
-    // Open a new tab with a given URL.
-    "browser",
-
-    // This allows to read the current browsing data removal dialog settings,
-    // but I don't see why this would be problematic.
-    "browsingData",
-
-    "certificateProvider",
-
-    // clipboardRead is restricted to return an empty string (except for
-    // whitelisted extensions - ie. Chrome RDP client).
-    "clipboardRead",
-
-    // Writing to clipboard is safe.
-    "clipboardWrite",
-
-    "contentSettings",
-
-    // Privacy sensitive URL access.
-    // "contextMenus",
-
-    // This would provie access to auth cookies, so needs to be blocked.
-    // "cookies",
-
-    // Provides access to the DOM, so block.
-    // "debugger",
-
-    // This is mostly fine, but has a RequestContentScript action that'd allow
-    // access to page content, which we can't allow.
-    // "declarativeContent",
-
-    // User is prompted when an extension requests desktopCapture whether they
-    // want to allow it. The request is made through
-    // chrome.desktopCapture.chooseDesktopMedia call.
-    "desktopCapture",
-
-    // Haven't checked in detail what this does, but messing with devtools
-    // usually comes with the ability to access page content.
-    // "devtools",
-
-    // I think it's fine to allow this as it should be obvious to users that
-    // scanning a document on the scanner will make it available to the
-    // organization (placing a document in the scanner implies user consent).
-    "documentScan",
-
-    // Doesn't allow access to file contents AFAICT, so should be fine.
-    "downloads",
-
-    // Triggers a file open for the download.
-    "downloads.open",
-
-    // Controls shelf visibility.
-    "downloads.shelf",
-
-    "enterprise.deviceAttributes",
-
-    "enterprise.platformKeys",
-
-    // Possibly risky due to its experimental nature: not vetted for security,
-    // potentially buggy, subject to change without notice (shouldn't
-    // blanket-allow experimental stuff).
-    // "experimental",
-
-    "fileBrowserHandler",
-
-    // Allow: (1) session state is ephemeral anyways, so no leaks across users.
-    // (2) a user that stores data on an org-owned machine won't be surprised if
-    // the org can see it.
-    "fileSystem",
-
-    "fileSystem.directory",
-
-    "fileSystem.requestFileSystem",
-
-    "fileSystem.retainEntries",
-
-    "fileSystem.write",
-
-    "fileSystemProvider",
-
-    "fontSettings",
-
-    // Just another type of connectivity.  On the system side, no user data is
-    // involved, implicitly or explicity.
-    "gcm",
-
-    // It's fair game for a kiosk device owner to locate their device. Could
-    // just as well do this via IP-geolocation mechanism, so little difference.
-    "geolocation",
-
-    // Somewhat risky as this opens up the ability to intercept user input.
-    // However, keyboards and mice are apparently not surfaced via this API.
-    "hid",
-
-    // Privacy sensitive URL access.
-    // "history",
-
-    // Not really useful as there's no signed-in user, so OK to allow.
-    "identity",
-
-    "identity.email",
-
-    // Detection of idle state.
-    "idle",
-
-    // IME extensions see keystrokes. This might be useful though, might rely on
-    // manual whitelisting (assuming the number of useful IME extensions is
-    // relatively limited).
-    // "input",
-
-    // Fair game - admin can manipulate extensions via policy anyways.
-    "management",
-
-    // Just another type of connectivity.
-    "mdns",
-
-    // Storage is ephemeral, so user needs to get their content onto the Kiosk
-    // device (download or plug in media), both of which seem sufficient consent
-    // actions.
-    "mediaGalleries",
-
-    "mediaGalleries.allAutoDetected",
-
-    "mediaGalleries.copyTo",
-
-    "mediaGalleries.delete",
-
-    "mediaGalleries.read",
-
-    // Probably doesn't work on Chrome OS anyways.
-    "nativeMessaging",
-
-    // Status quo considers this risky due to the ability to fake system UI -
-    // low risk IMHO however since notifications are already badged with app
-    // icon and won't extract any data.
-    "notifications",
-
-    // User is prompted (allow/deny) when an extension requests pageCapture for
-    // the first time in a session. The request is made via
-    // chrome.pageCapture.saveAsMHTML call.
-    "pageCapture",
-
-    // Allows to use machine crypto keys - these would be provisioned by the
-    // admin anyways.
-    "platformKeys",
-
-    // No plugins on Chrome OS anyways.
-    "plugin",
-
-    // Status quo notes concern about UX spoofing - not an issue IMHO.
-    "pointerLock",
-
-    // Potentiall risky: chrome.power.requestKeepAwake can inhibit idle time
-    // detection and prevent idle time logout and that way reduce isolation
-    // between subsequent Public Session users.
-    // OK to allow as long as it doesn't affect PS idle time detection.
-    // "power",
-
-    // Printing initiated by user anyways, which provides consent gesture.
-    "printerProvider",
-
-    // The settings exposed via the API are under admin policy control anyways.
-    "privacy",
-
-    // Admin controls network anyways.
-    "proxy",
-
-    "runtime",
-
-    // Looking at the code, this feature is declared but used nowhere.
-    // "screensaver",
-
-    // Access serial port.  It's hard to conceive a case in which private data
-    // is stored on a serial device and being read without the user's consent.
-    // Minor risk of intercepting input events from serial input devices - given
-    // that serial input devices are exceedingly rare, OK to allow.
-    "serial",
-
-    // Privacy sensitive URL access.
-    // "sessions",
-
-    "socket",
-
-    // Per-app sandbox.  User cannot log into Public Session, thus storage
-    // cannot be sync'ed to the cloud.
-    "storage",
-
-    // Not very useful since no signed-in user.
-    "syncFileSystem",
-
-    // Returns CPU parameters.
-    "system.cpu",
-
-    // Display parameters query/manipulation.
-    "system.display",
-
-    // Memory parameters access.
-    "system.memory",
-
-    // Enumerates network interfaces.
-    "system.network",
-
-    // Enumerates removable storage.
-    "system.storage",
-
-    // User is prompted (allow/deny) when an extension requests tabCapture. The
-    // request is made via chrome.tabCapture.capture call.
-    "tabCapture",
-
-    // The URL returned by chrome.tabs API is scrubbed down to the origin.
-    "tabs",
-
-    // Privacy sensitive URL access.
-    // "topSites",
-
-    // Allows to generate TTS, but no content access. Just UX.
-    "tts",
-
-    // Might need this, but has content access. Manual whitelisting?
-    // "ttsEngine",
-
-    // Excessive resource usage is not a risk.
-    "unlimitedStorage",
-    "unlimited_storage",
-
-    // Plugging the USB device is sufficient as consent gesture.
-    "usb",
-
-    // Belongs to the USB API.
-    "usbDevices",
-
-    // User is prompted (allow/deny) when an extension requests videoCapture.
-    // The request is done via the getUserMedia API.
-    "videoCapture",
-
-    // Admin controls network config anyways.
-    "vpnProvider",
-
-    // Just UX.
-    "wallpaper",
-
-    // Privacy sensitive URL access.
-    // "webNavigation",
-
-    // Sensitive content is stripped away.
-    "webRequest",
-    "webRequestBlocking",
-
-    // This allows content scripts and capturing. However, the webview runs
-    // within a separate storage partition, i.e. doesn't share cookies and other
-    // storage with the browsing session. Furthermore, the embedding app could
-    // just as well proxy 3rd-party origin content through its own web origin
-    // server-side or via chrome.socket. Finally, web security doesn't make a
-    // lot of sense when there's no URL bar or HTTPS padlock providing trusted
-    // UI. Bottom line: Risks are mitigated, further restrictions don't make
-    // sense, so OK to allow.
-    "webview",
-};
-
-// Some permissions take the form of a dictionary.  See |kSafePermissionStrings|
-// for permission strings (and for more documentation).
-const char* const kSafePermissionDicts[] = {
-    // Dictionary forms of the above permission strings.
-    "fileSystem",
-    "mediaGalleries",
-    "socket",
-    "usbDevices",
-};
-
-// List of safe entries for the "app" dict in manifest.
-const char* const kSafeAppStrings[] = {
-    "background",
-    "content_security_policy",
-    "icon_color",
-    "isolation",
-    "launch",
-    "linked_icons",
-};
-
-// Return true iff |entry| is contained in |char_array|.
-bool ArrayContainsImpl(const char* const char_array[],
-                       size_t entry_count,
-                       const std::string& entry) {
-  for (size_t i = 0; i < entry_count; ++i) {
-    if (entry == char_array[i]) {
-      return true;
-    }
-  }
-  return false;
-}
-
-// See http://blogs.msdn.com/b/the1/archive/2004/05/07/128242.aspx for an
-// explanation of array size determination.
-template <size_t N>
-bool ArrayContains(const char* const (&char_array)[N],
-                   const std::string& entry) {
-  return ArrayContainsImpl(char_array, N, entry);
-}
-
-// Helper method used to log extension permissions UMA stats.
-void LogPermissionUmaStats(const std::string& permission_string) {
-  const auto* permission_info =
-      extensions::PermissionsInfo::GetInstance()->GetByName(permission_string);
-  // Not a permission.
-  if (!permission_info) return;
-
-  base::UmaHistogramSparse("Enterprise.PublicSession.ExtensionPermissions",
-                           static_cast<int>(permission_info->id()));
-}
-
-// Returns true for extensions that are considered safe for Public Sessions,
-// which among other things requires the manifest top-level entries to be
-// contained in the |kSafeManifestEntries| whitelist and all permissions to be
-// contained in |kSafePermissionStrings| or |kSafePermissionDicts|.  Otherwise
-// returns false and logs all reasons for failure.
-bool IsSafeForPublicSession(const extensions::Extension* extension) {
-  // If Public Session restrictions are not enabled, just return true.
-  if (!profiles::ArePublicSessionRestrictionsEnabled())
-    return true;
-
-  bool safe = true;
-  if (!extension->is_extension() &&
-      !extension->is_hosted_app() &&
-      !extension->is_platform_app() &&
-      !extension->is_shared_module() &&
-      !extension->is_theme()) {
-    LOG(ERROR) << extension->id()
-               << " is not of a supported type. Extension type: "
-               << extension->GetType();
-    safe = false;
-  }
-
-  for (base::DictionaryValue::Iterator it(*extension->manifest()->value());
-       !it.IsAtEnd(); it.Advance()) {
-    if (ArrayContains(kSafeManifestEntries, it.key())) {
-      continue;
-    }
-
-    // Permissions must be whitelisted in |kSafePermissionStrings| or
-    // |kSafePermissionDicts|.
-    if (it.key() == emk::kPermissions ||
-        it.key() == emk::kOptionalPermissions) {
-      if (!it.value().is_list()) {
-        LOG(ERROR) << extension->id() << ": " << it.key() << " is not a list.";
-        safe = false;
-        continue;
-      }
-      for (const auto& entry : it.value().GetListDeprecated()) {
-        // Try to read as dictionary.
-        const base::DictionaryValue *dict_value;
-        if (entry.GetAsDictionary(&dict_value)) {
-          if (dict_value->DictSize() != 1) {
-            LOG(ERROR) << extension->id()
-                       << " has dict in permission list with size "
-                       << dict_value->DictSize() << ".";
-            safe = false;
-            continue;
-          }
-          for (base::DictionaryValue::Iterator it3(*dict_value);
-               !it3.IsAtEnd(); it3.Advance()) {
-            // Log permission (dictionary form).
-            LogPermissionUmaStats(it3.key());
-            if (!ArrayContains(kSafePermissionDicts, it3.key())) {
-              LOG(ERROR) << extension->id()
-                         << " has non-whitelisted dict in permission list: "
-                         << it3.key();
-              safe = false;
-              continue;
-            }
-          }
-          continue;
-        }
-        // Try to read as string.
-        if (!entry.is_string()) {
-          LOG(ERROR) << extension->id() << ": " << it.key()
-                     << " contains a token that's neither a string nor a dict.";
-          safe = false;
-          continue;
-        }
-        const std::string permission_string = entry.GetString();
-        // Log permission (usual, string form).
-        LogPermissionUmaStats(permission_string);
-        // Accept whitelisted permissions.
-        if (ArrayContains(kSafePermissionStrings, permission_string)) {
-          continue;
-        }
-        // Web requests (origin permissions).  Don't include <all_urls> because
-        // that also matches file:// schemes.
-        if (base::StartsWith(permission_string, "https://",
-                             base::CompareCase::SENSITIVE) ||
-            base::StartsWith(permission_string, "http://",
-                             base::CompareCase::SENSITIVE) ||
-            base::StartsWith(permission_string, "ftp://",
-                             base::CompareCase::SENSITIVE)) {
-          // Allow origin permissions if the extension is isolated from the main
-          // browser session (so it can't access user cookies, etc.).
-          if (!extensions::AppIsolationInfo::HasIsolatedStorage(extension)) {
-            LOG(ERROR) << extension->id() << " does not have isolated storage "
-                       "and it requested origin permission: "
-                       << permission_string;
-            safe = false;
-          }
-          continue;
-        }
-        LOG(ERROR) << extension->id()
-                   << " requested non-whitelisted permission: "
-                   << permission_string;
-        safe = false;
-      }
-    } else if (it.key() == emk::kApp) {
-      if (!extension->is_hosted_app() &&
-          !extension->is_platform_app()) {
-        LOG(ERROR) << extension->id()
-                   << ": app manifest entry is allowed only for hosted_app or "
-                       "platform_app extension type. Current extension type: "
-                   << extension->GetType();
-        safe = false;
-      }
-      const base::DictionaryValue *dict_value;
-      if (!it.value().GetAsDictionary(&dict_value)) {
-        LOG(ERROR) << extension->id() << ": app is not a dictionary.";
-        safe = false;
-        continue;
-      }
-      for (base::DictionaryValue::Iterator it2(*dict_value);
-           !it2.IsAtEnd(); it2.Advance()) {
-        if (!ArrayContains(kSafeAppStrings, it2.key())) {
-          LOG(ERROR) << extension->id()
-                     << " has non-whitelisted manifest entry: "
-                     << it.key() << "." << it2.key();
-          safe = false;
-          continue;
-        }
-      }
-    // Require v2 because that's the only version we understand.
-    } else if (it.key() == emk::kManifestVersion) {
-      if (!it.value().is_int()) {
-        LOG(ERROR) << extension->id() << ": " << emk::kManifestVersion
-                   << " is not an integer.";
-        safe = false;
-        continue;
-      }
-      if (it.value().GetInt() != 2) {
-        LOG(ERROR) << extension->id()
-                   << " has non-whitelisted manifest version.";
-        safe = false;
-        continue;
-      }
-    // URL handlers depend on the web store to confirm ownership of the domain.
-    } else if (it.key() == emk::kUrlHandlers) {
-      if (!extension->from_webstore()) {
-        LOG(ERROR) << extension->id() << " uses emk::kUrlHandlers but was not "
-            "installed through the web store.";
-        safe = false;
-        continue;
-      }
-    // Everything else is an error.
-    } else {
-      LOG(ERROR) << extension->id()
-                 << " has non-whitelisted manifest entry: " << it.key();
-      safe = false;
-    }
-  }
-
-  return safe;
-}
-
-}  // namespace
-
 DeviceLocalAccountManagementPolicyProvider::
     DeviceLocalAccountManagementPolicyProvider(
         policy::DeviceLocalAccount::Type account_type)
@@ -846,16 +77,9 @@
       return true;
     }
 
-    // Allow extension if its specific ID is whitelisted for use in public
-    // sessions.
-    if (IsWhitelisted(extension->id())) {
-      return true;
-    }
-
-    // Allow force-installed extension if all manifest contents are whitelisted.
-    if ((extension->location() == ManifestLocation::kExternalPolicyDownload ||
-         extension->location() == ManifestLocation::kExternalPolicy) &&
-        IsSafeForPublicSession(extension)) {
+    // Allow force-installed extensions.
+    if (extension->location() == ManifestLocation::kExternalPolicyDownload ||
+        extension->location() == ManifestLocation::kExternalPolicy) {
       return true;
     }
   } else if (account_type_ == policy::DeviceLocalAccount::TYPE_KIOSK_APP ||
diff --git a/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider_unittest.cc b/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider_unittest.cc
index 32cdbfa7..f67e6349 100644
--- a/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider_unittest.cc
+++ b/chrome/browser/chromeos/extensions/device_local_account_management_policy_provider_unittest.cc
@@ -24,9 +24,6 @@
 
 namespace {
 
-const char kWhitelistedId[] = "cbkkbcmdlboombapidmoeolnmdacpkch";
-const char kBogusId[] = "bogus";
-
 scoped_refptr<const extensions::Extension> CreateExtensionFromValues(
     const std::string& id,
     ManifestLocation location,
@@ -120,14 +117,6 @@
   EXPECT_EQ(std::u16string(), error);
   error.clear();
 
-  // Verify that if an extension's ID has been explicitly whitelisted for use in
-  // device-local accounts, the extension can be installed.
-  extension = CreateRegularExtension(kWhitelistedId);
-  ASSERT_TRUE(extension.get());
-  EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
-  EXPECT_EQ(std::u16string(), error);
-  error.clear();
-
   // Verify that if neither the location, type nor the ID of an extension have
   // been whitelisted for use in public sessions, the extension cannot be
   // installed.
@@ -204,53 +193,6 @@
     error.clear();
   }
 
-  // Verify that a platform app with an unknown manifest entry cannot be
-  // installed.
-  {
-    base::DictionaryValue values;
-    values.SetStringKey("not_whitelisted", "something");
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with an unsafe manifest entry cannot be
-  // installed.  Since the program logic is based entirely on whitelists, there
-  // is no significant advantage in testing all unsafe manifest entries
-  // individually.
-  {
-    base::DictionaryValue values;
-    values.SetPath("chrome_settings_overrides", base::DictionaryValue());
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with an unknown manifest entry under "app"
-  // cannot be installed.
-  {
-    base::DictionaryValue values;
-    values.SetStringPath("app.not_whitelisted2", "something2");
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
   // Verify that a platform app with a safe manifest entry under "app" can be
   // installed.
   {
@@ -283,99 +225,6 @@
     error.clear();
   }
 
-  // Verify that a theme with a safe manifest entry under "app" cannot be
-  // installed.
-  {
-    base::DictionaryValue values;
-    values.SetKey("theme", base::DictionaryValue());
-    values.SetStringPath("app.content_security_policy", "something2");
-    extension = CreateExtensionFromValues(
-        std::string(), ManifestLocation::kExternalPolicy, &values,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with an unknown permission entry cannot be
-  // installed.
-  {
-    base::ListValue permissions;
-    permissions.Append("not_whitelisted_permission");
-    base::DictionaryValue values;
-    values.SetKey(extensions::manifest_keys::kPermissions,
-                  std::move(permissions));
-
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with an unsafe permission entry cannot be
-  // installed.  Since the program logic is based entirely on whitelists, there
-  // is no significant advantage in testing all unsafe permissions individually.
-  {
-    base::ListValue permissions;
-    permissions.Append("experimental");
-    base::DictionaryValue values;
-    values.SetKey(extensions::manifest_keys::kPermissions,
-                  std::move(permissions));
-
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with an unsafe optional permission entry cannot
-  // be installed.
-  {
-    base::ListValue permissions;
-    permissions.Append("experimental");
-    base::DictionaryValue values;
-    values.SetKey(extensions::manifest_keys::kOptionalPermissions,
-                  std::move(permissions));
-
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with an url_handlers manifest entry and which is
-  // not installed through the web store cannot be installed.
-  {
-    base::ListValue matches;
-    matches.Append("https://example.com/*");
-    base::DictionaryValue values;
-    values.SetPath("url_handlers.example_com.matches", std::move(matches));
-    values.SetStringPath("url_handlers.example_com.title", "example title");
-
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
   // Verify that a platform app with a url_handlers manifest entry and which is
   // installed through the web store can be installed.
   {
@@ -415,44 +264,6 @@
     error.clear();
   }
 
-  // Verify that an extension with remote URL permissions cannot be installed.
-  {
-    base::ListValue permissions;
-    permissions.Append("https://example.com/");
-    permissions.Append("http://example.com/");
-    permissions.Append("ftp://example.com/");
-    base::DictionaryValue values;
-    values.SetKey(extensions::manifest_keys::kPermissions,
-                  std::move(permissions));
-
-    extension = CreateExtensionFromValues(
-        std::string(), ManifestLocation::kExternalPolicy, &values,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
-  // Verify that a platform app with a local URL permission cannot be installed.
-  {
-    base::ListValue permissions;
-    permissions.Append("file:///some/where");
-    base::DictionaryValue values;
-    values.SetKey(extensions::manifest_keys::kPermissions,
-                  std::move(permissions));
-
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
   // Verify that a platform app with socket dictionary permission can be
   // installed.
   {
@@ -476,29 +287,6 @@
     error.clear();
   }
 
-  // Verify that a platform app with unknown dictionary permission cannot be
-  // installed.
-  {
-    base::Value::Dict socket;
-    base::Value::List tcp_list;
-    tcp_list.Append("unknown_value");
-    socket.Set("unknown_key", std::move(tcp_list));
-    base::Value::List permissions;
-    permissions.Append(std::move(socket));
-    base::DictionaryValue values;
-    values.SetKey(extensions::manifest_keys::kPermissions,
-                  base::Value(std::move(permissions)));
-
-    extension = CreatePlatformAppWithExtraValues(
-        &values, ManifestLocation::kExternalPolicy,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
-
   // Verify that an extension can be installed.
   {
     base::DictionaryValue values;
@@ -539,21 +327,6 @@
     EXPECT_EQ(std::u16string(), error);
     error.clear();
   }
-
-  // Verify that a legacy_packaged_app cannot be installed and that it cannot
-  // have an "app" manifest entry.
-  {
-    base::DictionaryValue values;
-    values.SetStringPath("app.launch.local_path", "something");
-    extension = CreateExtensionFromValues(
-        std::string(), ManifestLocation::kExternalPolicy, &values,
-        extensions::Extension::NO_FLAGS);
-    ASSERT_TRUE(extension);
-
-    EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_NE(std::u16string(), error);
-    error.clear();
-  }
 }
 
 TEST(DeviceLocalAccountManagementPolicyProviderTest, KioskAppSessions) {
@@ -596,26 +369,7 @@
     EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
     EXPECT_NE(std::u16string(), error);
     error.clear();
-
-    // Verify that an extension whose ID has been whitelisted for use in other
-    // types of device-local accounts cannot be installed in a single-app kiosk
-    // session.
-    extension = CreateRegularExtension(kWhitelistedId);
-    ASSERT_TRUE(extension.get());
-    EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
-    EXPECT_EQ(std::u16string(), error);
-    error.clear();
   }
 }
 
-TEST(DeviceLocalAccountManagementPolicyProviderTest, IsWhitelisted) {
-  // Whitelisted extension, Chrome Remote Desktop.
-  EXPECT_TRUE(DeviceLocalAccountManagementPolicyProvider::IsWhitelisted(
-      kWhitelistedId));
-
-  // Bogus extension ID (never true).
-  EXPECT_FALSE(DeviceLocalAccountManagementPolicyProvider::IsWhitelisted(
-      kBogusId));
-}
-
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc
deleted file mode 100644
index b927bad..0000000
--- a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.h"
-
-#include "chrome/browser/chromeos/extensions/device_local_account_management_policy_provider.h"
-#include "chrome/browser/profiles/profiles_state.h"
-#include "extensions/common/permissions/api_permission.h"
-#include "extensions/common/permissions/api_permission_set.h"
-#include "extensions/common/permissions/manifest_permission_set.h"
-#include "extensions/common/permissions/permission_set.h"
-#include "extensions/common/url_pattern_set.h"
-
-namespace extensions {
-
-PermissionsUpdaterDelegateChromeOS::PermissionsUpdaterDelegateChromeOS() {}
-
-PermissionsUpdaterDelegateChromeOS::~PermissionsUpdaterDelegateChromeOS() {}
-
-void PermissionsUpdaterDelegateChromeOS::InitializePermissions(
-    const Extension* extension,
-    std::unique_ptr<const PermissionSet>* granted_permissions) {
-  if (!profiles::ArePublicSessionRestrictionsEnabled() ||
-      chromeos::DeviceLocalAccountManagementPolicyProvider::IsWhitelisted(
-          extension->id()) ||
-      !(*granted_permissions)
-           ->HasAPIPermission(mojom::APIPermissionID::kClipboardRead)) {
-    return;
-  }
-  // Revoke kClipboardRead permission (used in Public Sessions to secure
-  // clipboard read functionality). This forceful removal of permission is safe
-  // since the clipboard pasting code checks for this permission before doing
-  // the paste (the end result is just an empty paste).
-  APIPermissionSet api_permission_set;
-  api_permission_set.insert(mojom::APIPermissionID::kClipboardRead);
-  *granted_permissions = PermissionSet::CreateDifference(
-      **granted_permissions,
-      PermissionSet(std::move(api_permission_set), ManifestPermissionSet(),
-                    URLPatternSet(), URLPatternSet()));
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.h b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.h
deleted file mode 100644
index 1c7ec45..0000000
--- a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_PERMISSIONS_UPDATER_DELEGATE_CHROMEOS_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_PERMISSIONS_UPDATER_DELEGATE_CHROMEOS_H_
-
-#include <memory>
-
-#include "chrome/browser/extensions/permissions_updater.h"
-
-namespace extensions {
-
-class Extension;
-class PermissionSet;
-
-// In Public Sessions, apps and extensions are force-installed by admin policy
-// so the user does not get a chance to review the permissions for these apps.
-// This is not acceptable from a security/privacy standpoint, therefore we
-// remove unsecure permissions (whitelisted apps and extensions are exempt from
-// this - eg. remote desktop clients).
-class PermissionsUpdaterDelegateChromeOS : public PermissionsUpdater::Delegate {
- public:
-  PermissionsUpdaterDelegateChromeOS();
-
-  PermissionsUpdaterDelegateChromeOS(
-      const PermissionsUpdaterDelegateChromeOS&) = delete;
-  PermissionsUpdaterDelegateChromeOS& operator=(
-      const PermissionsUpdaterDelegateChromeOS&) = delete;
-
-  ~PermissionsUpdaterDelegateChromeOS() override;
-
-  // PermissionsUpdater::Delegate
-  void InitializePermissions(
-      const Extension* extension,
-      std::unique_ptr<const PermissionSet>* granted_permissions) override;
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_PERMISSIONS_UPDATER_DELEGATE_CHROMEOS_H_
diff --git a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc
deleted file mode 100644
index d5cf3ca7..0000000
--- a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.h"
-
-#include <string>
-
-#include "base/files/file_path.h"
-#include "base/values.h"
-#include "chromeos/login/login_state/login_state.h"
-#include "chromeos/login/login_state/scoped_test_public_session_login_state.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/extension_builder.h"
-#include "extensions/common/manifest.h"
-#include "extensions/common/manifest_constants.h"
-#include "extensions/common/permissions/api_permission.h"
-#include "extensions/common/permissions/api_permission_set.h"
-#include "extensions/common/permissions/manifest_permission_set.h"
-#include "extensions/common/permissions/mock_manifest_permission.h"
-#include "extensions/common/permissions/permission_set.h"
-#include "extensions/common/url_pattern.h"
-#include "extensions/common/url_pattern_set.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace extensions {
-
-namespace {
-
-const char kWhitelistedId[] = "cbkkbcmdlboombapidmoeolnmdacpkch";
-const char kBogusId[] = "bogus";
-
-scoped_refptr<const Extension> CreateExtension(const std::string& id) {
-  return ExtensionBuilder("test")
-      .SetLocation(mojom::ManifestLocation::kInternal)
-      .SetID(id)
-      .Build();
-}
-
-std::unique_ptr<const PermissionSet> CreatePermissions(
-    bool include_clipboard = true) {
-  APIPermissionSet apis;
-  apis.insert(mojom::APIPermissionID::kAudio);
-  apis.insert(mojom::APIPermissionID::kFullscreen);
-  if (include_clipboard)
-    apis.insert(mojom::APIPermissionID::kClipboardRead);
-  ManifestPermissionSet manifest;
-  manifest.insert(std::make_unique<MockManifestPermission>("author"));
-  manifest.insert(std::make_unique<MockManifestPermission>("background"));
-  URLPatternSet explicit_hosts({
-      URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/*"),
-      URLPattern(URLPattern::SCHEME_ALL, "<all_urls>")});
-  URLPatternSet scriptable_hosts({
-    URLPattern(URLPattern::SCHEME_ALL, "http://www.wikipedia.com/*")});
-  auto permissions = std::make_unique<const PermissionSet>(
-      std::move(apis), std::move(manifest), std::move(explicit_hosts),
-      std::move(scriptable_hosts));
-  return permissions;
-}
-
-}  // namespace
-
-TEST(PermissionsUpdaterDelegateChromeOSTest, NoFilteringOutsidePublicSession) {
-  PermissionsUpdaterDelegateChromeOS delegate;
-  ASSERT_FALSE(chromeos::LoginState::IsInitialized());
-
-  // Whitelisted extension outside PS, nothing filtered.
-  auto extension = CreateExtension(kWhitelistedId);
-  auto granted_permissions = CreatePermissions();
-  delegate.InitializePermissions(extension.get(), &granted_permissions);
-  EXPECT_EQ(*CreatePermissions(), *granted_permissions);
-
-  // Bogus extension ID (never whitelisted) outside PS, nothing filtered.
-  extension = CreateExtension(kBogusId);
-  granted_permissions = CreatePermissions();
-  delegate.InitializePermissions(extension.get(), &granted_permissions);
-  EXPECT_EQ(*CreatePermissions(), *granted_permissions);
-}
-
-TEST(PermissionsUpdaterDelegateChromeOSTest,
-     FilterNonWhitelistedInsidePublicSession) {
-  chromeos::ScopedTestPublicSessionLoginState login_state;
-  PermissionsUpdaterDelegateChromeOS delegate;
-
-  // Whitelisted extension, nothing gets filtered.
-  auto extension = CreateExtension(kWhitelistedId);
-  auto granted_permissions = CreatePermissions();
-  delegate.InitializePermissions(extension.get(), &granted_permissions);
-  EXPECT_EQ(*CreatePermissions(), *granted_permissions);
-
-  // Bogus extension ID (never whitelisted), ClipboardRead filtered out,
-  // everything else stays.
-  extension = CreateExtension(kBogusId);
-  granted_permissions = CreatePermissions();
-  delegate.InitializePermissions(extension.get(), &granted_permissions);
-  EXPECT_EQ(*CreatePermissions(false), *granted_permissions);
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/public_session_permission_helper.cc b/chrome/browser/chromeos/extensions/public_session_permission_helper.cc
index fcd8da4..e652d974 100644
--- a/chrome/browser/chromeos/extensions/public_session_permission_helper.cc
+++ b/chrome/browser/chromeos/extensions/public_session_permission_helper.cc
@@ -152,14 +152,6 @@
 
   auto permissions_prompt = std::make_unique<ExtensionInstallPrompt::Prompt>(
       ExtensionInstallPrompt::PERMISSIONS_PROMPT);
-  // activeTab has no permission message by default, so one is added here.
-  if (unprompted_permissions.ContainsID(APIPermissionID::kActiveTab)) {
-    PermissionMessages messages;
-    messages.push_back(PermissionMessage(
-        l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_CURRENT_HOST),
-        extensions::PermissionIDSet()));
-    permissions_prompt->AddPermissionMessages(messages);
-  }
 
   // This Unretained is safe because the lifetime of this object is until
   // process exit.
diff --git a/chrome/browser/client_hints/client_hints_browsertest.cc b/chrome/browser/client_hints/client_hints_browsertest.cc
index 3bb1d55c..16cdfeb 100644
--- a/chrome/browser/client_hints/client_hints_browsertest.cc
+++ b/chrome/browser/client_hints/client_hints_browsertest.cc
@@ -32,6 +32,7 @@
 #include "chrome/browser/policy/policy_test_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/test/base/chrome_test_utils.h"
@@ -228,13 +229,6 @@
   return true;
 }
 
-void OnUnblockOnProfileCreation(base::RunLoop* run_loop,
-                                Profile* profile,
-                                Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-
 // Return |true| in the following conditions: If we expect reduced user agent,
 // user agent minor version matches "0.0.0" if reduced UA through UAReduction
 // origin trial. or user agent minor version matches "0.X.0" if reduced UA
@@ -793,12 +787,8 @@
     // Create an additional profile.
     base::FilePath new_path =
         profile_manager->GenerateNextProfileDirectoryPath();
-    base::RunLoop run_loop;
-    profile_manager->CreateProfileAsync(
-        new_path, base::BindRepeating(&OnUnblockOnProfileCreation, &run_loop));
-    run_loop.Run();
 
-    return profile_manager->GetProfile(new_path);
+    return profiles::testing::CreateProfileSync(profile_manager, new_path);
   }
 
  private:
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index 0f83ef0..eb8b808 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -1014,8 +1014,6 @@
       "system_display/display_info_provider_chromeos.h",
       "system_display/display_info_provider_utils.cc",
       "system_display/display_info_provider_utils.h",
-      "system_display/system_display_serialization.cc",
-      "system_display/system_display_serialization.h",
     ]
     if (use_cups) {
       sources += [
diff --git a/chrome/browser/extensions/active_tab_permission_granter.cc b/chrome/browser/extensions/active_tab_permission_granter.cc
index 6f13be4..2b3ef6b 100644
--- a/chrome/browser/extensions/active_tab_permission_granter.cc
+++ b/chrome/browser/extensions/active_tab_permission_granter.cc
@@ -5,14 +5,12 @@
 #include "chrome/browser/extensions/active_tab_permission_granter.h"
 
 #include <set>
-#include <utility>
 #include <vector>
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/containers/contains.h"
 #include "base/feature_list.h"
-#include "base/no_destructor.h"
 #include "chrome/browser/extensions/extension_action_runner.h"
 #include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/profiles/profile.h"
@@ -32,6 +30,7 @@
 #include "extensions/common/mojom/renderer.mojom.h"
 #include "extensions/common/permissions/permission_set.h"
 #include "extensions/common/permissions/permissions_data.h"
+#include "extensions/common/url_pattern_set.h"
 #include "extensions/common/user_script.h"
 #include "url/gurl.h"
 
@@ -93,27 +92,6 @@
     renderer_message.Run(false, tab_process);
 }
 
-std::unique_ptr<ActiveTabPermissionGranter::Delegate>&
-GetActiveTabPermissionGranterDelegateWrapper() {
-  static base::NoDestructor<
-      std::unique_ptr<ActiveTabPermissionGranter::Delegate>>
-      delegate_wrapper;
-  return *delegate_wrapper;
-}
-
-ActiveTabPermissionGranter::Delegate* GetActiveTabPermissionGranterDelegate() {
-  return GetActiveTabPermissionGranterDelegateWrapper().get();
-}
-
-// Returns true if activeTab is allowed to be granted to the extension. This can
-// return false for platform-specific implementations.
-bool ShouldGrantActiveTabOrPrompt(const Extension* extension,
-                                  content::WebContents* web_contents) {
-  return !GetActiveTabPermissionGranterDelegate() ||
-         GetActiveTabPermissionGranterDelegate()->ShouldGrantActiveTabOrPrompt(
-             extension, web_contents);
-}
-
 void SetCorsOriginAccessList(content::BrowserContext* browser_context,
                              const Extension& extension,
                              base::OnceClosure closure) {
@@ -143,12 +121,6 @@
 
 ActiveTabPermissionGranter::~ActiveTabPermissionGranter() {}
 
-// static
-void ActiveTabPermissionGranter::SetPlatformDelegate(
-    std::unique_ptr<Delegate> delegate) {
-  GetActiveTabPermissionGranterDelegateWrapper() = std::move(delegate);
-}
-
 void ActiveTabPermissionGranter::GrantIfRequested(const Extension* extension) {
   if (granted_extensions_.Contains(extension->id()))
     return;
@@ -165,16 +137,11 @@
   // withheld, we grant it active tab-style permissions, even if it doesn't have
   // the activeTab permission in the manifest. This is necessary for the
   // runtime host permissions feature to work.
-  // Note: It's important that we check if the extension has activeTab before
-  // checking ShouldGrantActiveTabOrPrompt() in order to prevent
-  // ShouldGrantActiveTabOrPrompt() from prompting for extensions that don't
-  // request the activeTab permission.
   content::BrowserContext* browser_context =
       web_contents()->GetBrowserContext();
-  if ((permissions_data->HasAPIPermission(mojom::APIPermissionID::kActiveTab) ||
-       permissions_data->withheld_permissions().effective_hosts().MatchesURL(
-           url)) &&
-      ShouldGrantActiveTabOrPrompt(extension, web_contents())) {
+  if (permissions_data->HasAPIPermission(mojom::APIPermissionID::kActiveTab) ||
+      permissions_data->withheld_permissions().effective_hosts().MatchesURL(
+          url)) {
     // Gate activeTab for file urls on extensions having explicit access to file
     // urls.
     int valid_schemes = UserScript::ValidUserScriptSchemes();
diff --git a/chrome/browser/extensions/active_tab_permission_granter.h b/chrome/browser/extensions/active_tab_permission_granter.h
index a9b9e0c..9e556cc 100644
--- a/chrome/browser/extensions/active_tab_permission_granter.h
+++ b/chrome/browser/extensions/active_tab_permission_granter.h
@@ -5,15 +5,11 @@
 #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_
 #define CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_
 
-#include <memory>
-#include <set>
-
 #include "base/scoped_observation.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_registry_observer.h"
 #include "extensions/common/extension_set.h"
-#include "extensions/common/url_pattern_set.h"
 
 class Profile;
 
@@ -31,16 +27,6 @@
     : public content::WebContentsObserver,
       public extensions::ExtensionRegistryObserver {
  public:
-  // Platform specific delegate.
-  class Delegate {
-   public:
-    virtual ~Delegate() {}
-    // Platform specific check whether the activeTab permission is allowed.
-    virtual bool ShouldGrantActiveTabOrPrompt(
-        const Extension* extension,
-        content::WebContents* web_contents) = 0;
-  };
-
   ActiveTabPermissionGranter(content::WebContents* web_contents,
                              int tab_id,
                              Profile* profile);
@@ -51,9 +37,6 @@
 
   ~ActiveTabPermissionGranter() override;
 
-  // Platform specific delegate should be set during startup.
-  static void SetPlatformDelegate(std::unique_ptr<Delegate> delegate);
-
   // If |extension| has the activeTab or tabCapture permission, grants
   // tab-specific permissions to it until the next page navigation or refresh.
   void GrantIfRequested(const Extension* extension);
diff --git a/chrome/browser/extensions/active_tab_unittest.cc b/chrome/browser/extensions/active_tab_unittest.cc
index b16653f..10d14d1 100644
--- a/chrome/browser/extensions/active_tab_unittest.cc
+++ b/chrome/browser/extensions/active_tab_unittest.cc
@@ -6,7 +6,6 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/memory/raw_ptr.h"
@@ -48,28 +47,9 @@
 #include "extensions/test/test_extension_dir.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "ash/constants/ash_switches.h"
-#include "base/run_loop.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
-#include "chrome/browser/ash/login/users/chrome_user_manager_impl.h"
-#include "chrome/browser/ash/profiles/profile_helper.h"
-#include "chrome/browser/chromeos/extensions/active_tab_permission_granter_delegate_chromeos.h"
-#include "chrome/browser/ui/ash/test_wallpaper_controller.h"
-#include "chrome/browser/ui/ash/wallpaper_controller_client_impl.h"
-#include "chrome/test/base/scoped_testing_local_state.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chromeos/login/login_state/scoped_test_public_session_login_state.h"
-#include "components/account_id/account_id.h"
-#include "components/sync/base/command_line_switches.h"
-#include "components/user_manager/scoped_user_manager.h"
-#include "content/public/common/content_switches.h"
-#include "extensions/browser/extension_dialog_auto_confirm.h"
 #endif
 
-using base::DictionaryValue;
-using base::ListValue;
-using content::BrowserThread;
-using content::NavigationController;
 using extensions::mojom::APIPermissionID;
 
 namespace extensions {
@@ -95,36 +75,6 @@
   PERMITTED_BOTH
 };
 
-class ActiveTabPermissionGranterTestDelegate
-    : public ActiveTabPermissionGranter::Delegate {
- public:
-  ActiveTabPermissionGranterTestDelegate() {}
-
-  ActiveTabPermissionGranterTestDelegate(
-      const ActiveTabPermissionGranterTestDelegate&) = delete;
-  ActiveTabPermissionGranterTestDelegate& operator=(
-      const ActiveTabPermissionGranterTestDelegate&) = delete;
-
-  ~ActiveTabPermissionGranterTestDelegate() override {}
-
-  // ActiveTabPermissionGranterTestDelegate::Delegate
-  bool ShouldGrantActiveTabOrPrompt(const Extension* extension,
-                                    content::WebContents* contents) override {
-    should_grant_call_count_++;
-    return should_grant_;
-  }
-
-  void SetShouldGrant(bool should_grant) {
-    should_grant_ = should_grant;
-  }
-
-  int should_grant_call_count() { return should_grant_call_count_; }
-
- private:
-  bool should_grant_ = false;
-  int should_grant_call_count_ = 0;
-};
-
 class ActiveTabTest : public ChromeRenderViewHostTestHarness {
  protected:
   ActiveTabTest()
@@ -487,180 +437,6 @@
       tab_id() + 1, APIPermissionID::kTabCaptureForTab));
 }
 
-class ActiveTabDelegateTest : public ActiveTabTest {
- protected:
-  ActiveTabDelegateTest() {
-    auto delegate = std::make_unique<ActiveTabPermissionGranterTestDelegate>();
-    test_delegate_ = delegate.get();
-    ActiveTabPermissionGranter::SetPlatformDelegate(std::move(delegate));
-  }
-
-  ~ActiveTabDelegateTest() override {
-    ActiveTabPermissionGranter::SetPlatformDelegate(nullptr);
-  }
-
-  raw_ptr<ActiveTabPermissionGranterTestDelegate> test_delegate_;
-};
-
-// Test that the custom platform delegate works as expected.
-TEST_F(ActiveTabDelegateTest, Delegate) {
-  GURL google("http://www.google.com");
-  NavigateAndCommit(google);
-
-  // Not granted because the delegate denies grant.
-  active_tab_permission_granter()->GrantIfRequested(extension.get());
-  EXPECT_TRUE(IsBlocked(extension, google));
-
-  // This time it's granted because the delegate allows it.
-  test_delegate_->SetShouldGrant(true);
-  active_tab_permission_granter()->GrantIfRequested(extension.get());
-  EXPECT_TRUE(IsAllowed(extension, google));
-}
-
-// Regression test for crbug.com/833188.
-TEST_F(ActiveTabDelegateTest, DelegateUsedOnlyWhenNeeded) {
-  active_tab_permission_granter()->GrantIfRequested(
-      extension_without_active_tab.get());
-
-  EXPECT_EQ(0, test_delegate_->should_grant_call_count());
-}
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-class ActiveTabManagedSessionTest : public ActiveTabTest {
- protected:
-  ActiveTabManagedSessionTest() {}
-
-  void SetUp() override {
-    ActiveTabTest::SetUp();
-
-    // These tests need a real user manager.
-    scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
-        ash::ChromeUserManagerImpl::CreateChromeUserManager());
-
-    // Necessary to prevent instantiation of SyncService, which messes
-    // with our signin state below.
-    base::CommandLine::ForCurrentProcess()->AppendSwitch(syncer::kDisableSync);
-    // Necessary because no ProfileManager instance exists in this test.
-    base::CommandLine::ForCurrentProcess()->AppendSwitch(
-        ash::switches::kIgnoreUserProfileMappingForTests);
-    // Necessary to skip cryptohome/profile sanity check in
-    // ChromeUserManagerImpl for fake user login.
-    base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kTestType);
-
-    // Setup, login a public account user.
-    const std::string user_id = "public@account.user";
-    const std::string user_email = user_id;
-    const AccountId account_id =
-        AccountId::FromUserEmailGaiaId(user_email, user_id);
-    const std::string user_id_hash =
-        ash::ProfileHelper::Get()->GetUserIdHashByUserIdForTesting(user_id);
-
-    local_state_ = std::make_unique<ScopedTestingLocalState>(
-        TestingBrowserProcess::GetGlobal());
-    wallpaper_controller_client_ =
-        std::make_unique<WallpaperControllerClientImpl>();
-    wallpaper_controller_client_->InitForTesting(&test_wallpaper_controller_);
-    g_browser_process->local_state()->SetString(
-        "PublicAccountPendingDataRemoval", user_email);
-    user_manager::UserManager::Get()->UserLoggedIn(account_id, user_id_hash,
-                                                   true /* browser_restart */,
-                                                   false /* is_child */);
-    // Finish initialization - some things are run as separate tasks.
-    base::RunLoop().RunUntilIdle();
-
-    google_ = GURL("http://www.google.com");
-    NavigateAndCommit(google_);
-  }
-
-  void TearDown() override {
-    // This one needs to be destructed here so it deregisters itself from
-    // CrosSettings before that is destructed down the line inside
-    // ChromeRenderViewHostTestHarness::TearDown.
-    wallpaper_controller_client_.reset();
-
-    ash::ChromeUserManagerImpl::ResetPublicAccountDelegatesForTesting();
-    ash::ChromeUserManager::Get()->Shutdown();
-
-    scoped_user_manager_.reset();
-
-    ActiveTabTest::TearDown();
-  }
-
-  std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
-  std::unique_ptr<ScopedTestingLocalState> local_state_;
-  TestWallpaperController test_wallpaper_controller_;
-  std::unique_ptr<WallpaperControllerClientImpl> wallpaper_controller_client_;
-  GURL google_;
-};
-
-// Test that there's no permission prompt in Managed Sessions (Public Sessions
-// v2) for activeTab.
-TEST_F(ActiveTabManagedSessionTest, NoPromptInManagedSession) {
-  chromeos::ScopedTestPublicSessionLoginState login_state(
-      chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED);
-
-  active_tab_permission_granter()->GrantIfRequested(
-      extension_with_tab_capture.get());
-  EXPECT_TRUE(IsAllowed(extension_with_tab_capture, google_));
-}
-
-// Keep the unique_ptr around until callback has been run and don't forget to
-// unset the ActiveTabPermissionGranterDelegateChromeOS.
-std::unique_ptr<permission_helper::RequestResolvedCallback>
-QuitRunLoopOnRequestResolved(base::RunLoop* run_loop) {
-  auto callback = std::make_unique<permission_helper::RequestResolvedCallback>(
-      base::BindOnce([](base::RunLoop* run_loop,
-                        const PermissionIDSet&) { run_loop->Quit(); },
-                     run_loop));
-  ActiveTabPermissionGranterDelegateChromeOS::
-      SetRequestResolvedCallbackForTesting(callback.get());
-  return callback;
-}
-
-// Test that the platform delegate is being set and the activeTab permission is
-// prompted for in Public Sessions.
-TEST_F(ActiveTabManagedSessionTest,
-       DelegateIsSetAndPromptIsShownInPublicSession) {
-  chromeos::ScopedTestPublicSessionLoginState login_state(
-      chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT);
-  // Grant and verify.
-  {
-    ScopedTestDialogAutoConfirm auto_confirm(
-        ScopedTestDialogAutoConfirm::ACCEPT);
-
-    // RunLoop needed to resolve the permission dialog.
-    base::RunLoop run_loop;
-    auto cb = QuitRunLoopOnRequestResolved(&run_loop);
-    active_tab_permission_granter()->GrantIfRequested(extension.get());
-    run_loop.Run();
-    EXPECT_TRUE(IsBlocked(extension, google_));
-
-    active_tab_permission_granter()->GrantIfRequested(extension.get());
-    EXPECT_TRUE(IsAllowed(extension, google_));
-  }
-
-  // Deny and verify. Use a different extension so it doesn't trigger the
-  // cache.
-  {
-    ScopedTestDialogAutoConfirm auto_confirm(
-        ScopedTestDialogAutoConfirm::CANCEL);
-
-    base::RunLoop run_loop;
-    auto cb = QuitRunLoopOnRequestResolved(&run_loop);
-    active_tab_permission_granter()->GrantIfRequested(another_extension.get());
-    run_loop.Run();
-    EXPECT_TRUE(IsBlocked(another_extension, google_));
-
-    active_tab_permission_granter()->GrantIfRequested(another_extension.get());
-    EXPECT_TRUE(IsBlocked(another_extension, google_));
-  }
-
-  // Cleanup.
-  ActiveTabPermissionGranterDelegateChromeOS::
-      SetRequestResolvedCallbackForTesting(nullptr);
-}
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
 // An active tab test that includes an ExtensionService.
 class ActiveTabWithServiceTest : public ExtensionServiceTestBase {
  public:
diff --git a/chrome/browser/extensions/api/debugger/debugger_apitest.cc b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
index 6e3e8538..e850e804 100644
--- a/chrome/browser/extensions/api/debugger/debugger_apitest.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/extensions/extension_management_test_util.h"
 #include "chrome/browser/profiles/profile_destroyer.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
@@ -489,19 +490,8 @@
     DebuggerApiTest::SetUpOnMainThread();
     profile_manager_ = g_browser_process->profile_manager();
 
-    base::RunLoop run_loop;
-    profile_manager_->CreateProfileAsync(
-        profile_manager_->GenerateNextProfileDirectoryPath(),
-        base::BindRepeating(
-            [](CrossProfileDebuggerApiTest* self, base::RunLoop* run_loop,
-               Profile* profile, Profile::CreateStatus status) {
-              if (status == Profile::CREATE_STATUS_INITIALIZED) {
-                self->other_profile_ = profile;
-                run_loop->Quit();
-              }
-            },
-            this, &run_loop));
-    run_loop.Run();
+    other_profile_ = profiles::testing::CreateProfileSync(
+        profile_manager_, profile_manager_->GenerateNextProfileDirectoryPath());
     otr_profile_ = profile()->GetPrimaryOTRProfile(true);
   }
 
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.cc
index 17f527b..0b03249 100644
--- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.cc
+++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.cc
@@ -7,9 +7,7 @@
 #include "chrome/browser/enterprise/connectors/connectors_service.h"
 #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h"
 #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
@@ -31,9 +29,12 @@
 }
 
 SafeBrowsingPrivateEventRouterFactory::SafeBrowsingPrivateEventRouterFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "SafeBrowsingPrivateEventRouter",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::Builder()
+              .WithRegular(ProfileSelection::kOwnInstance)
+              .WithSystem(ProfileSelection::kNone)
+              .Build()) {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
   DependsOn(IdentityManagerFactory::GetInstance());
   DependsOn(enterprise_connectors::ConnectorsServiceFactory::GetInstance());
@@ -49,16 +50,6 @@
   return new SafeBrowsingPrivateEventRouter(context);
 }
 
-content::BrowserContext*
-SafeBrowsingPrivateEventRouterFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  Profile* profile = Profile::FromBrowserContext(context);
-  if (!profile || profile->IsSystemProfile()) {
-    return nullptr;
-  }
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 bool SafeBrowsingPrivateEventRouterFactory::ServiceIsCreatedWithBrowserContext()
     const {
   return true;
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h
index 7ed8ae38..546c2f46 100644
--- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h
+++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_EXTENSIONS_API_SAFE_BROWSING_PRIVATE_SAFE_BROWSING_PRIVATE_EVENT_ROUTER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
@@ -16,7 +16,7 @@
 // to instantiate the safeBrowsingPrivate event router per profile (since the
 // extension event router is per profile).
 class SafeBrowsingPrivateEventRouterFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   SafeBrowsingPrivateEventRouterFactory(
       const SafeBrowsingPrivateEventRouterFactory&) = delete;
@@ -33,8 +33,6 @@
 
  protected:
   // BrowserContextKeyedServiceFactory overrides:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   bool ServiceIsNULLWhileTesting() const override;
 
diff --git a/chrome/browser/extensions/api/settings_private/generated_prefs_factory.cc b/chrome/browser/extensions/api/settings_private/generated_prefs_factory.cc
index 5f4483b..54e628d 100644
--- a/chrome/browser/extensions/api/settings_private/generated_prefs_factory.cc
+++ b/chrome/browser/extensions/api/settings_private/generated_prefs_factory.cc
@@ -5,10 +5,8 @@
 #include "chrome/browser/extensions/api/settings_private/generated_prefs_factory.h"
 
 #include "chrome/browser/extensions/api/settings_private/generated_prefs.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace extensions {
 namespace settings_private {
@@ -26,18 +24,13 @@
 }
 
 GeneratedPrefsFactory::GeneratedPrefsFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "GeneratedPrefs",
-          BrowserContextDependencyManager::GetInstance()) {}
+          // Use |context| even if it is off-the-record/incognito.
+          ProfileSelections::BuildForRegularAndIncognito()) {}
 
 GeneratedPrefsFactory::~GeneratedPrefsFactory() {}
 
-content::BrowserContext* GeneratedPrefsFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  // Use |context| even if it is off-the-record/incognito.
-  return context;
-}
-
 bool GeneratedPrefsFactory::ServiceIsNULLWhileTesting() const {
   return true;
 }
diff --git a/chrome/browser/extensions/api/settings_private/generated_prefs_factory.h b/chrome/browser/extensions/api/settings_private/generated_prefs_factory.h
index a657171..3f3abaf 100644
--- a/chrome/browser/extensions/api/settings_private/generated_prefs_factory.h
+++ b/chrome/browser/extensions/api/settings_private/generated_prefs_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_EXTENSIONS_API_SETTINGS_PRIVATE_GENERATED_PREFS_FACTORY_H__
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 namespace settings_private {
@@ -14,7 +14,7 @@
 class GeneratedPrefs;
 
 // BrowserContextKeyedServiceFactory for GeneratedPrefs.
-class GeneratedPrefsFactory : public BrowserContextKeyedServiceFactory {
+class GeneratedPrefsFactory : public ProfileKeyedServiceFactory {
  public:
   GeneratedPrefsFactory(const GeneratedPrefsFactory&) = delete;
   GeneratedPrefsFactory& operator=(const GeneratedPrefsFactory&) = delete;
@@ -31,8 +31,6 @@
   ~GeneratedPrefsFactory() override;
 
   // BrowserContextKeyedServiceFactory implementation.
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsNULLWhileTesting() const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.cc b/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.cc
index fd8ed79..c7300a3 100644
--- a/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.cc
+++ b/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/api/settings_private/settings_private_delegate.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_system_provider.h"
 
 namespace extensions {
@@ -27,20 +26,13 @@
 }
 
 SettingsPrivateDelegateFactory::SettingsPrivateDelegateFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "SettingsPrivateDelegate",
-          BrowserContextDependencyManager::GetInstance()) {
-}
+          ProfileSelections::BuildForRegularAndIncognito()) {}
 
 SettingsPrivateDelegateFactory::~SettingsPrivateDelegateFactory() {
 }
 
-content::BrowserContext* SettingsPrivateDelegateFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  // Use the incognito profile when in Guest mode.
-  return context;
-}
-
 KeyedService* SettingsPrivateDelegateFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
   return new SettingsPrivateDelegate(static_cast<Profile*>(profile));
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h b/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h
index 0aab060..ee60e67 100644
--- a/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h
+++ b/chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_EXTENSIONS_API_SETTINGS_PRIVATE_SETTINGS_PRIVATE_DELEGATE_FACTORY_H__
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace context {
 class BrowserContext;
@@ -16,8 +16,7 @@
 class SettingsPrivateDelegate;
 
 // BrowserContextKeyedServiceFactory for each SettingsPrivateDelegate.
-class SettingsPrivateDelegateFactory
-    : public BrowserContextKeyedServiceFactory {
+class SettingsPrivateDelegateFactory : public ProfileKeyedServiceFactory {
  public:
   SettingsPrivateDelegateFactory(const SettingsPrivateDelegateFactory&) =
       delete;
@@ -38,8 +37,6 @@
   // BrowserContextKeyedServiceFactory implementation.
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-    content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc b/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc
index 03cfc3c8..3676a60 100644
--- a/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc
+++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/extensions/api/settings_private/generated_prefs_factory.h"
 #include "chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h"
 #include "chrome/browser/extensions/api/settings_private/settings_private_event_router.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/event_router_factory.h"
 #include "extensions/browser/extension_system_provider.h"
@@ -29,9 +28,9 @@
 }
 
 SettingsPrivateEventRouterFactory::SettingsPrivateEventRouterFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "SettingsPrivateEventRouter",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildForRegularAndIncognito()) {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
   DependsOn(EventRouterFactory::GetInstance());
   DependsOn(settings_private::GeneratedPrefsFactory::GetInstance());
@@ -46,13 +45,6 @@
   return SettingsPrivateEventRouter::Create(context);
 }
 
-content::BrowserContext*
-SettingsPrivateEventRouterFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  // Use the incognito profile in guest mode.
-  return context;
-}
-
 bool SettingsPrivateEventRouterFactory::ServiceIsCreatedWithBrowserContext()
     const {
   return true;
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.h b/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.h
index 9e4e8ce..934f4c8 100644
--- a/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.h
+++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_EXTENSIONS_API_SETTINGS_PRIVATE_SETTINGS_PRIVATE_EVENT_ROUTER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
@@ -15,8 +15,7 @@
 // This is a factory class used by the BrowserContextDependencyManager
 // to instantiate the settingsPrivate event router per profile (since the
 // extension event router is per profile).
-class SettingsPrivateEventRouterFactory
-    : public BrowserContextKeyedServiceFactory {
+class SettingsPrivateEventRouterFactory : public ProfileKeyedServiceFactory {
  public:
   SettingsPrivateEventRouterFactory(const SettingsPrivateEventRouterFactory&) =
       delete;
@@ -33,8 +32,6 @@
 
  protected:
   // BrowserContextKeyedServiceFactory overrides:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   bool ServiceIsNULLWhileTesting() const override;
 
diff --git a/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.cc b/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.cc
index f28a58d..c8a6211 100644
--- a/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.cc
+++ b/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/api/system_indicator/system_indicator_manager.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 
@@ -26,9 +25,7 @@
 }
 
 SystemIndicatorManagerFactory::SystemIndicatorManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-        "SystemIndicatorManager",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("SystemIndicatorManager") {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
 }
 
diff --git a/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h b/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h
index a2038318..d83a063 100644
--- a/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h
+++ b/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INDICATOR_SYSTEM_INDICATOR_MANAGER_FACTORY_H__
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -16,7 +16,7 @@
 class SystemIndicatorManager;
 
 // BrowserContextKeyedServiceFactory for each SystemIndicatorManager.
-class SystemIndicatorManagerFactory : public BrowserContextKeyedServiceFactory {
+class SystemIndicatorManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static SystemIndicatorManager* GetForContext(
       content::BrowserContext* context);
diff --git a/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.cc b/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.cc
index 7d652f1..dd3021f 100644
--- a/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.cc
+++ b/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.cc
@@ -6,8 +6,6 @@
 
 #include "base/no_destructor.h"
 #include "chrome/browser/extensions/api/tab_groups/tab_groups_event_router.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/event_router_factory.h"
 
@@ -27,9 +25,9 @@
 }
 
 TabGroupsEventRouterFactory::TabGroupsEventRouterFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "TabGroupsEventRouter",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildForRegularAndIncognito()) {
   DependsOn(EventRouterFactory::GetInstance());
 }
 
@@ -38,11 +36,6 @@
   return new TabGroupsEventRouter(context);
 }
 
-content::BrowserContext* TabGroupsEventRouterFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 bool TabGroupsEventRouterFactory::ServiceIsCreatedWithBrowserContext() const {
   return true;
 }
diff --git a/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.h b/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.h
index a89fbf2..afe46099 100644
--- a/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.h
+++ b/chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.h
@@ -6,14 +6,14 @@
 #define CHROME_BROWSER_EXTENSIONS_API_TAB_GROUPS_TAB_GROUPS_EVENT_ROUTER_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class TabGroupsEventRouter;
 
 // The factory responsible for creating the event router for the tabGroups API.
-class TabGroupsEventRouterFactory : public BrowserContextKeyedServiceFactory {
+class TabGroupsEventRouterFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the TabGroupsEventRouter for |profile|, creating it if
   // it is not yet created.
@@ -34,8 +34,6 @@
   ~TabGroupsEventRouterFactory() override = default;
 
   // BrowserContextKeyedServiceFactory:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc
index 50f212b..6e0f8d6a 100644
--- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc
+++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc
@@ -12,8 +12,6 @@
 #include "base/sequence_checker.h"
 #include "chrome/browser/extensions/api/web_authentication_proxy/value_conversions.h"
 #include "chrome/common/extensions/api/web_authentication_proxy.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "device/fido/public_key_credential_rp_entity.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/event_router_factory.h"
@@ -365,9 +363,9 @@
 }
 
 WebAuthenticationProxyServiceFactory::WebAuthenticationProxyServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "WebAuthentcationProxyService",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildForRegularAndIncognito()) {
   DependsOn(EventRouterFactory::GetInstance());
   DependsOn(ExtensionRegistryFactory::GetInstance());
 }
@@ -388,10 +386,4 @@
   return new WebAuthenticationProxyService(context);
 }
 
-content::BrowserContext*
-WebAuthenticationProxyServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return context;
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h
index 0c5d8bb..c21e931 100644
--- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h
+++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h
@@ -10,8 +10,8 @@
 #include "base/no_destructor.h"
 #include "base/scoped_observation.h"
 #include "base/sequence_checker.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "chrome/common/extensions/api/web_authentication_proxy.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/web_authentication_request_proxy.h"
 #include "extensions/browser/extension_registry.h"
@@ -132,8 +132,7 @@
 
 // WebAuthenticationProxyServiceFactory creates instances of
 // WebAuthenticationProxyService for a given BrowserContext.
-class WebAuthenticationProxyServiceFactory
-    : public BrowserContextKeyedServiceFactory {
+class WebAuthenticationProxyServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static WebAuthenticationProxyServiceFactory* GetInstance();
 
@@ -149,8 +148,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/blocklist_factory.cc b/chrome/browser/extensions/blocklist_factory.cc
index 266c519..5af1e90 100644
--- a/chrome/browser/extensions/blocklist_factory.cc
+++ b/chrome/browser/extensions/blocklist_factory.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/extensions/blocklist_factory.h"
 #include "chrome/browser/extensions/blocklist.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_prefs_factory.h"
 #include "extensions/browser/extensions_browser_client.h"
@@ -25,9 +24,10 @@
 }
 
 BlocklistFactory::BlocklistFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "Blocklist",
-          BrowserContextDependencyManager::GetInstance()) {
+          // Redirected in incognito.
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(extensions::ExtensionPrefsFactory::GetInstance());
 }
 
@@ -38,10 +38,4 @@
   return new Blocklist(ExtensionPrefs::Get(context));
 }
 
-BrowserContext* BlocklistFactory::GetBrowserContextToUse(
-    BrowserContext* context) const {
-  // Redirected in incognito.
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/blocklist_factory.h b/chrome/browser/extensions/blocklist_factory.h
index 51e624e..4cc2e92f 100644
--- a/chrome/browser/extensions/blocklist_factory.h
+++ b/chrome/browser/extensions/blocklist_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_BLOCKLIST_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class Blocklist;
 
-class BlocklistFactory : public BrowserContextKeyedServiceFactory {
+class BlocklistFactory : public ProfileKeyedServiceFactory {
  public:
   static Blocklist* GetForBrowserContext(content::BrowserContext* context);
 
@@ -30,8 +30,6 @@
   // BrowserContextKeyedServiceFactory
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/chrome_app_icon_service_factory.cc b/chrome/browser/extensions/chrome_app_icon_service_factory.cc
index 7eea54f..10e4427ec 100644
--- a/chrome/browser/extensions/chrome_app_icon_service_factory.cc
+++ b/chrome/browser/extensions/chrome_app_icon_service_factory.cc
@@ -5,8 +5,6 @@
 #include "chrome/browser/extensions/chrome_app_icon_service_factory.h"
 
 #include "chrome/browser/extensions/chrome_app_icon_service.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_registry_factory.h"
 
 namespace extensions {
@@ -24,9 +22,9 @@
 }
 
 ChromeAppIconServiceFactory::ChromeAppIconServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "ChromeAppIconService",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(ExtensionRegistryFactory::GetInstance());
 }
 
@@ -37,9 +35,4 @@
   return new ChromeAppIconService(context);
 }
 
-content::BrowserContext* ChromeAppIconServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/chrome_app_icon_service_factory.h b/chrome/browser/extensions/chrome_app_icon_service_factory.h
index 1c0b8a9..677127e5 100644
--- a/chrome/browser/extensions/chrome_app_icon_service_factory.h
+++ b/chrome/browser/extensions/chrome_app_icon_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_EXTENSIONS_CHROME_APP_ICON_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
@@ -14,7 +14,7 @@
 
 // Factory to create ChromeAppIconService. Use helper
 // ChromeAppIconService::Get(context) to access the service.
-class ChromeAppIconServiceFactory : public BrowserContextKeyedServiceFactory {
+class ChromeAppIconServiceFactory : public ProfileKeyedServiceFactory {
  public:
   ChromeAppIconServiceFactory(const ChromeAppIconServiceFactory&) = delete;
   ChromeAppIconServiceFactory& operator=(const ChromeAppIconServiceFactory&) =
@@ -33,8 +33,6 @@
 
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/chrome_extension_cookies_factory.cc b/chrome/browser/extensions/chrome_extension_cookies_factory.cc
index 2c6e8c3..1d832268 100644
--- a/chrome/browser/extensions/chrome_extension_cookies_factory.cc
+++ b/chrome/browser/extensions/chrome_extension_cookies_factory.cc
@@ -5,9 +5,7 @@
 #include "chrome/browser/extensions/chrome_extension_cookies_factory.h"
 
 #include "chrome/browser/extensions/chrome_extension_cookies.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 using content::BrowserContext;
 
@@ -26,9 +24,10 @@
 }
 
 ChromeExtensionCookiesFactory::ChromeExtensionCookiesFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "ChromeExtensionCookies",
-          BrowserContextDependencyManager::GetInstance()) {}
+          // Incognito gets separate extension cookies, too.
+          ProfileSelections::BuildForRegularAndIncognito()) {}
 
 ChromeExtensionCookiesFactory::~ChromeExtensionCookiesFactory() {}
 
@@ -37,10 +36,4 @@
   return new ChromeExtensionCookies(static_cast<Profile*>(context));
 }
 
-BrowserContext* ChromeExtensionCookiesFactory::GetBrowserContextToUse(
-    BrowserContext* context) const {
-  // Incognito gets separate extension cookies, too.
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/chrome_extension_cookies_factory.h b/chrome/browser/extensions/chrome_extension_cookies_factory.h
index 92feddf4..2b7fa75 100644
--- a/chrome/browser/extensions/chrome_extension_cookies_factory.h
+++ b/chrome/browser/extensions/chrome_extension_cookies_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSION_COOKIES_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class ChromeExtensionCookies;
 
-class ChromeExtensionCookiesFactory : public BrowserContextKeyedServiceFactory {
+class ChromeExtensionCookiesFactory : public ProfileKeyedServiceFactory {
  public:
   ChromeExtensionCookiesFactory(const ChromeExtensionCookiesFactory&) = delete;
   ChromeExtensionCookiesFactory& operator=(
@@ -31,8 +31,6 @@
   // BrowserContextKeyedServiceFactory implementation
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/error_console/error_console_factory.cc b/chrome/browser/extensions/error_console/error_console_factory.cc
index 0cc132f..596bc2c7 100644
--- a/chrome/browser/extensions/error_console/error_console_factory.cc
+++ b/chrome/browser/extensions/error_console/error_console_factory.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/browser/extensions/error_console/error_console.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_registry_factory.h"
 #include "extensions/browser/extensions_browser_client.h"
 
@@ -27,9 +26,9 @@
 }
 
 ErrorConsoleFactory::ErrorConsoleFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "ErrorConsole",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(ExtensionRegistryFactory::GetInstance());
 }
 
@@ -41,10 +40,4 @@
   return new ErrorConsole(Profile::FromBrowserContext(context));
 }
 
-BrowserContext* ErrorConsoleFactory::GetBrowserContextToUse(
-    BrowserContext* context) const {
-  // Redirected in incognito.
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/error_console/error_console_factory.h b/chrome/browser/extensions/error_console/error_console_factory.h
index 0b2cce76..3e70dc15 100644
--- a/chrome/browser/extensions/error_console/error_console_factory.h
+++ b/chrome/browser/extensions/error_console/error_console_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_ERROR_CONSOLE_ERROR_CONSOLE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class ErrorConsole;
 
-class ErrorConsoleFactory : public BrowserContextKeyedServiceFactory {
+class ErrorConsoleFactory : public ProfileKeyedServiceFactory {
  public:
   ErrorConsoleFactory(const ErrorConsoleFactory&) = delete;
   ErrorConsoleFactory& operator=(const ErrorConsoleFactory&) = delete;
@@ -29,8 +29,6 @@
   // BrowserContextKeyedServiceFactory implementation
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/extension_garbage_collector_factory.cc b/chrome/browser/extensions/extension_garbage_collector_factory.cc
index 71c7a6c..4c1cbb5b 100644
--- a/chrome/browser/extensions/extension_garbage_collector_factory.cc
+++ b/chrome/browser/extensions/extension_garbage_collector_factory.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/extensions/extension_garbage_collector.h"
 #include "chrome/browser/extensions/extension_system_factory.h"
 #include "chrome/browser/extensions/install_tracker_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extensions_browser_client.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -36,9 +35,7 @@
 }
 
 ExtensionGarbageCollectorFactory::ExtensionGarbageCollectorFactory()
-    : BrowserContextKeyedServiceFactory(
-          "ExtensionGarbageCollector",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("ExtensionGarbageCollector") {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
   DependsOn(InstallTrackerFactory::GetInstance());
 }
diff --git a/chrome/browser/extensions/extension_garbage_collector_factory.h b/chrome/browser/extensions/extension_garbage_collector_factory.h
index 4c62234..db76d1c 100644
--- a/chrome/browser/extensions/extension_garbage_collector_factory.h
+++ b/chrome/browser/extensions/extension_garbage_collector_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_FACTORY_H_
 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -16,8 +16,7 @@
 
 class ExtensionGarbageCollector;
 
-class ExtensionGarbageCollectorFactory
-    : public BrowserContextKeyedServiceFactory {
+class ExtensionGarbageCollectorFactory : public ProfileKeyedServiceFactory {
  public:
   ExtensionGarbageCollectorFactory(const ExtensionGarbageCollectorFactory&) =
       delete;
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc
index d0e41a29..4f831bb 100644
--- a/chrome/browser/extensions/extension_management.cc
+++ b/chrome/browser/extensions/extension_management.cc
@@ -36,7 +36,6 @@
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
 #include "components/crx_file/id_util.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 #include "extensions/browser/extension_prefs.h"
@@ -824,9 +823,9 @@
 }
 
 ExtensionManagementFactory::ExtensionManagementFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "ExtensionManagement",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(InstallStageTrackerFactory::GetInstance());
 }
 
@@ -839,11 +838,6 @@
   return new ExtensionManagement(Profile::FromBrowserContext(context));
 }
 
-content::BrowserContext* ExtensionManagementFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 void ExtensionManagementFactory::RegisterProfilePrefs(
     user_prefs::PrefRegistrySyncable* user_prefs) {
   user_prefs->RegisterDictionaryPref(pref_names::kExtensionManagement);
diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h
index 1c4a6836..10e230d 100644
--- a/chrome/browser/extensions/extension_management.h
+++ b/chrome/browser/extensions/extension_management.h
@@ -17,7 +17,7 @@
 #include "base/observer_list.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/forced_extensions/install_stage_tracker.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "extensions/browser/management_policy.h"
@@ -329,7 +329,7 @@
   std::vector<std::unique_ptr<ManagementPolicy::Provider>> providers_;
 };
 
-class ExtensionManagementFactory : public BrowserContextKeyedServiceFactory {
+class ExtensionManagementFactory : public ProfileKeyedServiceFactory {
  public:
   ExtensionManagementFactory(const ExtensionManagementFactory&) = delete;
   ExtensionManagementFactory& operator=(const ExtensionManagementFactory&) =
@@ -348,8 +348,6 @@
   // BrowserContextKeyedServiceExtensionManagementFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   void RegisterProfilePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
 };
diff --git a/chrome/browser/extensions/extension_sync_service_factory.cc b/chrome/browser/extensions/extension_sync_service_factory.cc
index 96175e1f..c6176dc 100644
--- a/chrome/browser/extensions/extension_sync_service_factory.cc
+++ b/chrome/browser/extensions/extension_sync_service_factory.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/extensions/extension_sync_service.h"
 #include "chrome/browser/extensions/extension_system_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/prefs/pref_service.h"
 #include "extensions/browser/extension_prefs_factory.h"
 #include "extensions/browser/extension_registry_factory.h"
@@ -27,9 +26,9 @@
 }
 
 ExtensionSyncServiceFactory::ExtensionSyncServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-        "ExtensionSyncService",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "ExtensionSyncService",
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(extensions::ExtensionPrefsFactory::GetInstance());
   DependsOn(extensions::ExtensionRegistryFactory::GetInstance());
   DependsOn(extensions::ExtensionSystemFactory::GetInstance());
@@ -41,9 +40,3 @@
     content::BrowserContext* context) const {
   return new ExtensionSyncService(Profile::FromBrowserContext(context));
 }
-
-content::BrowserContext* ExtensionSyncServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return extensions::ExtensionsBrowserClient::Get()->
-      GetOriginalContext(context);
-}
diff --git a/chrome/browser/extensions/extension_sync_service_factory.h b/chrome/browser/extensions/extension_sync_service_factory.h
index 8ac8825..72eeb39 100644
--- a/chrome/browser/extensions/extension_sync_service_factory.h
+++ b/chrome/browser/extensions/extension_sync_service_factory.h
@@ -6,11 +6,11 @@
 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class ExtensionSyncService;
 
-class ExtensionSyncServiceFactory : public BrowserContextKeyedServiceFactory {
+class ExtensionSyncServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static ExtensionSyncService* GetForBrowserContext(
       content::BrowserContext* context);
@@ -25,8 +25,6 @@
 
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_SERVICE_FACTORY_H_
diff --git a/chrome/browser/extensions/extension_system_factory.cc b/chrome/browser/extensions/extension_system_factory.cc
index 7d88a6f..89595e8 100644
--- a/chrome/browser/extensions/extension_system_factory.cc
+++ b/chrome/browser/extensions/extension_system_factory.cc
@@ -39,9 +39,9 @@
 }
 
 ExtensionSystemSharedFactory::ExtensionSystemSharedFactory()
-    : BrowserContextKeyedServiceFactory(
-        "ExtensionSystemShared",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "ExtensionSystemShared",
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(ExtensionPrefsFactory::GetInstance());
   DependsOn(ExtensionManagementFactory::GetInstance());
   // This depends on ExtensionService, which depends on ExtensionRegistry.
@@ -69,12 +69,6 @@
   return new ExtensionSystemImpl::Shared(static_cast<Profile*>(context));
 }
 
-content::BrowserContext* ExtensionSystemSharedFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  // Redirected in incognito.
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 // ExtensionSystemFactory
 
 // static
diff --git a/chrome/browser/extensions/extension_system_factory.h b/chrome/browser/extensions/extension_system_factory.h
index 51768f8..51c60e26 100644
--- a/chrome/browser/extensions/extension_system_factory.h
+++ b/chrome/browser/extensions/extension_system_factory.h
@@ -7,7 +7,7 @@
 
 #include "base/memory/singleton.h"
 #include "chrome/browser/extensions/extension_system_impl.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "extensions/browser/extension_system_provider.h"
 
 namespace extensions {
@@ -15,7 +15,7 @@
 
 // BrowserContextKeyedServiceFactory for ExtensionSystemImpl::Shared.
 // Should not be used except by ExtensionSystem(Factory).
-class ExtensionSystemSharedFactory : public BrowserContextKeyedServiceFactory {
+class ExtensionSystemSharedFactory : public ProfileKeyedServiceFactory {
  public:
   ExtensionSystemSharedFactory(const ExtensionSystemSharedFactory&) = delete;
   ExtensionSystemSharedFactory& operator=(const ExtensionSystemSharedFactory&) =
@@ -35,8 +35,6 @@
   // BrowserContextKeyedServiceFactory implementation:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 // BrowserContextKeyedServiceFactory for ExtensionSystemImpl.
diff --git a/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.cc b/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.cc
index a8afb45..8e47a36 100644
--- a/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.cc
+++ b/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.cc
@@ -6,7 +6,6 @@
 
 #include "base/no_destructor.h"
 #include "chrome/browser/extensions/forced_extensions/install_stage_tracker.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace extensions {
 
@@ -24,9 +23,7 @@
 }
 
 InstallStageTrackerFactory::InstallStageTrackerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "InstallStageTracker",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("InstallStageTracker") {}
 
 InstallStageTrackerFactory::~InstallStageTrackerFactory() = default;
 
diff --git a/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.h b/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.h
index 24d22c6..6ab2860d 100644
--- a/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.h
+++ b/chrome/browser/extensions/forced_extensions/install_stage_tracker_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_FORCED_EXTENSIONS_INSTALL_STAGE_TRACKER_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class InstallStageTracker;
 
-class InstallStageTrackerFactory : public BrowserContextKeyedServiceFactory {
+class InstallStageTrackerFactory : public ProfileKeyedServiceFactory {
  public:
   static InstallStageTracker* GetForBrowserContext(
       content::BrowserContext* context);
diff --git a/chrome/browser/extensions/install_tracker_factory.cc b/chrome/browser/extensions/install_tracker_factory.cc
index 1e95a6d8..961bc1b 100644
--- a/chrome/browser/extensions/install_tracker_factory.cc
+++ b/chrome/browser/extensions/install_tracker_factory.cc
@@ -6,7 +6,6 @@
 
 #include "base/memory/singleton.h"
 #include "chrome/browser/extensions/install_tracker.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_prefs_factory.h"
 #include "extensions/browser/extension_system_provider.h"
@@ -26,9 +25,11 @@
 }
 
 InstallTrackerFactory::InstallTrackerFactory()
-    : BrowserContextKeyedServiceFactory(
-        "InstallTracker",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "InstallTracker",
+          // The installs themselves are routed to the non-incognito profile and
+          // so should the install progress.
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
   DependsOn(ExtensionPrefsFactory::GetInstance());
 }
@@ -41,11 +42,4 @@
   return new InstallTracker(context, ExtensionPrefs::Get(context));
 }
 
-content::BrowserContext* InstallTrackerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  // The installs themselves are routed to the non-incognito profile and so
-  // should the install progress.
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/install_tracker_factory.h b/chrome/browser/extensions/install_tracker_factory.h
index 16cceca5..0a6c71f03 100644
--- a/chrome/browser/extensions/install_tracker_factory.h
+++ b/chrome/browser/extensions/install_tracker_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_EXTENSIONS_INSTALL_TRACKER_FACTORY_H_
 #define CHROME_BROWSER_EXTENSIONS_INSTALL_TRACKER_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T> struct DefaultSingletonTraits;
@@ -15,7 +15,7 @@
 
 class InstallTracker;
 
-class InstallTrackerFactory : public BrowserContextKeyedServiceFactory {
+class InstallTrackerFactory : public ProfileKeyedServiceFactory {
  public:
   InstallTrackerFactory(const InstallTrackerFactory&) = delete;
   InstallTrackerFactory& operator=(const InstallTrackerFactory&) = delete;
@@ -32,8 +32,6 @@
   // BrowserContextKeyedServiceFactory overrides:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/install_verifier_factory.cc b/chrome/browser/extensions/install_verifier_factory.cc
index d267445..a61e6af 100644
--- a/chrome/browser/extensions/install_verifier_factory.cc
+++ b/chrome/browser/extensions/install_verifier_factory.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/browser/extensions/install_verifier.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_prefs_factory.h"
 #include "extensions/browser/extension_registry_factory.h"
@@ -29,9 +28,9 @@
 }
 
 InstallVerifierFactory::InstallVerifierFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "InstallVerifier",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(ExtensionPrefsFactory::GetInstance());
   DependsOn(ExtensionRegistryFactory::GetInstance());
 }
@@ -44,10 +43,4 @@
   return new InstallVerifier(ExtensionPrefs::Get(context), context);
 }
 
-BrowserContext* InstallVerifierFactory::GetBrowserContextToUse(
-    BrowserContext* context) const {
-  // Redirected in incognito.
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/install_verifier_factory.h b/chrome/browser/extensions/install_verifier_factory.h
index 28ca596..eb2270cb 100644
--- a/chrome/browser/extensions/install_verifier_factory.h
+++ b/chrome/browser/extensions/install_verifier_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_INSTALL_VERIFIER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class InstallVerifier;
 
-class InstallVerifierFactory : public BrowserContextKeyedServiceFactory {
+class InstallVerifierFactory : public ProfileKeyedServiceFactory {
  public:
   InstallVerifierFactory(const InstallVerifierFactory&) = delete;
   InstallVerifierFactory& operator=(const InstallVerifierFactory&) = delete;
@@ -30,8 +30,6 @@
   // BrowserContextKeyedServiceFactory implementation
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/menu_manager_factory.cc b/chrome/browser/extensions/menu_manager_factory.cc
index 8a6d8ae..df2a76a 100644
--- a/chrome/browser/extensions/menu_manager_factory.cc
+++ b/chrome/browser/extensions/menu_manager_factory.cc
@@ -7,7 +7,6 @@
 #include "base/memory/ptr_util.h"
 #include "chrome/browser/extensions/menu_manager.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
@@ -34,9 +33,9 @@
 }
 
 MenuManagerFactory::MenuManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-        "MenuManager",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "MenuManager",
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
 }
 
@@ -48,11 +47,6 @@
   return new MenuManager(profile, ExtensionSystem::Get(profile)->state_store());
 }
 
-content::BrowserContext* MenuManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 bool MenuManagerFactory::ServiceIsCreatedWithBrowserContext() const {
   return true;
 }
diff --git a/chrome/browser/extensions/menu_manager_factory.h b/chrome/browser/extensions/menu_manager_factory.h
index 526296f3..8b6c6ea 100644
--- a/chrome/browser/extensions/menu_manager_factory.h
+++ b/chrome/browser/extensions/menu_manager_factory.h
@@ -8,7 +8,7 @@
 #include <memory>
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -17,7 +17,7 @@
 namespace extensions {
 class MenuManager;
 
-class MenuManagerFactory : public BrowserContextKeyedServiceFactory {
+class MenuManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static MenuManager* GetForBrowserContext(content::BrowserContext* context);
 
@@ -34,8 +34,6 @@
 
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   bool ServiceIsNULLWhileTesting() const override;
 };
diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc
index 1b00d6de..207c4500 100644
--- a/chrome/browser/extensions/permissions_updater.cc
+++ b/chrome/browser/extensions/permissions_updater.cc
@@ -17,7 +17,6 @@
 #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h"
 #include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/extensions/extension_system_factory.h"
-#include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/extensions/scripting_permissions_modifier.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/permissions.h"
@@ -54,16 +53,6 @@
 
 namespace {
 
-std::unique_ptr<PermissionsUpdater::Delegate>& GetDelegateWrapper() {
-  static base::NoDestructor<std::unique_ptr<PermissionsUpdater::Delegate>>
-      delegate_wrapper;
-  return *delegate_wrapper;
-}
-
-PermissionsUpdater::Delegate* GetDelegate() {
-  return GetDelegateWrapper().get();
-}
-
 // A helper class to watch profile lifetime.
 class PermissionsUpdaterShutdownNotifierFactory
     : public BrowserContextKeyedServiceShutdownNotifierFactory {
@@ -241,12 +230,6 @@
 
 PermissionsUpdater::~PermissionsUpdater() {}
 
-// static
-void PermissionsUpdater::SetPlatformDelegate(
-    std::unique_ptr<Delegate> delegate) {
-  GetDelegateWrapper() = std::move(delegate);
-}
-
 void PermissionsUpdater::GrantOptionalPermissions(
     const Extension& extension,
     const PermissionSet& permissions,
@@ -576,9 +559,6 @@
       permissions_manager->GetEffectivePermissionsToGrant(*extension,
                                                           *desired_permissions);
 
-  if (GetDelegate())
-    GetDelegate()->InitializePermissions(extension, &granted_permissions);
-
   if ((init_flag_ & INIT_FLAG_TRANSIENT) == 0) {
     // Set the desired permissions in prefs.
     // - For new installs, this initializes the desired active permissions.
diff --git a/chrome/browser/extensions/permissions_updater.h b/chrome/browser/extensions/permissions_updater.h
index f47b0aa..e06eef0 100644
--- a/chrome/browser/extensions/permissions_updater.h
+++ b/chrome/browser/extensions/permissions_updater.h
@@ -26,17 +26,6 @@
 // and notifies interested parties of the changes.
 class PermissionsUpdater {
  public:
-  // Platform specific delegate.
-  class Delegate {
-   public:
-    virtual ~Delegate() {}
-    // Platform specific initialization of |extension|'s permissions (does any
-    // necessary filtering of permissions or similar).
-    virtual void InitializePermissions(
-        const Extension* extension,
-        std::unique_ptr<const PermissionSet>* granted_permissions) = 0;
-  };
-
   // If INIT_FLAG_TRANSIENT is specified, this updater is being used for an
   // extension that is not actually installed (and instead is just being
   // initialized e.g. to display the permission warnings in an install prompt).
@@ -73,11 +62,6 @@
 
   ~PermissionsUpdater();
 
-  // Sets a delegate to provide platform-specific logic. This should be set
-  // during startup (to ensure all extensions are initialized through the
-  // delegate).
-  static void SetPlatformDelegate(std::unique_ptr<Delegate> delegate);
-
   // Grants |permissions| that were defined as optional in the manifest to
   // |extension|, updating the active permission set and notifying any
   // observers. This method assumes the user has already been prompted, if
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc
index bfea5bc..1d86800 100644
--- a/chrome/browser/extensions/permissions_updater_unittest.cc
+++ b/chrome/browser/extensions/permissions_updater_unittest.cc
@@ -19,7 +19,6 @@
 #include "chrome/browser/extensions/chrome_test_extension_loader.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_service_test_base.h"
-#include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/extensions/permissions_test_util.h"
 #include "chrome/browser/extensions/scripting_permissions_modifier.h"
 #include "chrome/common/chrome_paths.h"
@@ -72,31 +71,6 @@
   extent->AddPattern(URLPattern(schemes, pattern));
 }
 
-class PermissionsUpdaterTestDelegate : public PermissionsUpdater::Delegate {
- public:
-  PermissionsUpdaterTestDelegate() {}
-
-  PermissionsUpdaterTestDelegate(const PermissionsUpdaterTestDelegate&) =
-      delete;
-  PermissionsUpdaterTestDelegate& operator=(
-      const PermissionsUpdaterTestDelegate&) = delete;
-
-  ~PermissionsUpdaterTestDelegate() override {}
-
-  // PermissionsUpdater::Delegate
-  void InitializePermissions(
-      const Extension* extension,
-      std::unique_ptr<const PermissionSet>* granted_permissions) override {
-    // Remove the cookie permission.
-    APIPermissionSet api_permission_set =
-        (*granted_permissions)->apis().Clone();
-    api_permission_set.erase(APIPermissionID::kCookie);
-    *granted_permissions = std::make_unique<PermissionSet>(
-        std::move(api_permission_set), ManifestPermissionSet(), URLPatternSet(),
-        URLPatternSet());
-  }
-};
-
 }  // namespace
 
 // Test that the PermissionUpdater can correctly add and remove active
@@ -398,34 +372,6 @@
   }
 }
 
-// Test that the permissions updater delegate works - in this test it removes
-// the cookies permission.
-TEST_F(PermissionsUpdaterTest, Delegate) {
-  InitializeEmptyExtensionService();
-
-  ListBuilder required_permissions;
-  required_permissions.Append("tabs").Append("management").Append("cookies");
-  scoped_refptr<const Extension> extension =
-      CreateExtensionWithOptionalPermissions(
-          std::make_unique<base::ListValue>(), required_permissions.Build(),
-          "My Extension");
-
-  PermissionsUpdater::SetPlatformDelegate(
-      std::make_unique<PermissionsUpdaterTestDelegate>());
-  PermissionsUpdater updater(profile());
-  updater.InitializePermissions(extension.get());
-
-  EXPECT_TRUE(
-      extension->permissions_data()->HasAPIPermission(APIPermissionID::kTab));
-  EXPECT_TRUE(extension->permissions_data()->HasAPIPermission(
-      APIPermissionID::kManagement));
-  EXPECT_FALSE(extension->permissions_data()->HasAPIPermission(
-      APIPermissionID::kCookie));
-
-  // Unset the delegate.
-  PermissionsUpdater::SetPlatformDelegate(nullptr);
-}
-
 TEST_F(PermissionsUpdaterTest,
        UpdatingRuntimeGrantedPermissionsWithOptionalPermissions) {
   InitializeEmptyExtensionService();
diff --git a/chrome/browser/extensions/system_display/system_display_serialization.cc b/chrome/browser/extensions/system_display/system_display_serialization.cc
deleted file mode 100644
index 5b1871c..0000000
--- a/chrome/browser/extensions/system_display/system_display_serialization.cc
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/system_display/system_display_serialization.h"
-
-#include "extensions/common/api/system_display.h"
-#include "ui/gfx/geometry/insets.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace extensions {
-namespace api {
-namespace system_display {
-
-namespace {
-
-// Mojo does not support optional primitive types. Serializing these require
-// an ancillary |has_*| bool.
-template <class T>
-void SerializeOptionalPrimitive(const std::unique_ptr<T>& src_val,
-                                bool* dst_has_val,
-                                T* dst_val) {
-  if (src_val.get()) {
-    *dst_has_val = true;
-    *dst_val = *src_val;
-  } else {
-    *dst_has_val = false;
-    *dst_val = {};
-  }
-}
-
-template <class T>
-void DeserializeOptionalPrimitive(bool src_has_val,
-                                  T src_val,
-                                  std::unique_ptr<T>* dst_val) {
-  DCHECK(!dst_val->get());
-  if (src_has_val)
-    *dst_val = std::make_unique<T>(src_val);
-}
-
-// (int, int) <==> gfx::Size
-
-gfx::Size SerializeSize(int src_width, int src_height) {
-  return gfx::Size(src_width, src_height);
-}
-
-void DeserializeSize(const gfx::Size& src, int* dst_width, int* dst_height) {
-  *dst_width = src.width();
-  *dst_height = src.height();
-}
-
-// extensions::api::system_display::Bounds <==> gfx::Rect.
-
-gfx::Rect SerializeBoundsAsRect(
-    const extensions::api::system_display::Bounds& src) {
-  gfx::Rect dst;
-  dst.set_x(src.left);
-  dst.set_y(src.top);
-  dst.set_width(src.width);
-  dst.set_height(src.height);
-  return dst;
-}
-
-void DeserializeRectToBounds(const gfx::Rect& src,
-                             extensions::api::system_display::Bounds* dst) {
-  dst->left = src.x();
-  dst->top = src.y();
-  dst->width = src.width();
-  dst->height = src.height();
-}
-
-// extensions::api::system_display::Insets <==> gfx::Insets.
-
-gfx::Insets SerializeInsets(
-    const extensions::api::system_display::Insets& src) {
-  gfx::Insets dst;
-  // Follow element order in gfx::Insets.
-  dst.set_top(src.top);
-  dst.set_left(src.left);
-  dst.set_bottom(src.bottom);
-  dst.set_right(src.right);
-  return dst;
-}
-
-void DeserializeInsets(const gfx::Insets& src,
-                       extensions::api::system_display::Insets* dst) {
-  // Follow element order in extensions::api::system_display::Insets.
-  dst->left = src.left();
-  dst->top = src.top();
-  dst->right = src.right();
-  dst->bottom = src.bottom();
-}
-
-}  // namespace
-
-// extensions::api::system_display::DisplayMode <==>
-//     crosapi::mojom::SysDisplayMode.
-
-crosapi::mojom::SysDisplayModePtr SerializeDisplayMode(
-    const extensions::api::system_display::DisplayMode& src) {
-  auto dst = crosapi::mojom::SysDisplayMode::New();
-  dst->size = SerializeSize(src.width, src.height);
-  dst->size_in_native_pixels =
-      SerializeSize(src.width_in_native_pixels, src.height_in_native_pixels);
-  dst->device_scale_factor = src.device_scale_factor;
-  dst->refresh_rate = src.refresh_rate;
-  dst->is_native = src.is_native;
-  dst->is_selected = src.is_selected;
-  SerializeOptionalPrimitive<bool>(src.is_interlaced, &dst->has_is_interlaced,
-                                   &dst->is_interlaced);
-  return dst;
-}
-
-void DeserializeDisplayMode(const crosapi::mojom::SysDisplayMode& src,
-                            extensions::api::system_display::DisplayMode* dst) {
-  DeserializeSize(src.size, &dst->width, &dst->height);
-  DeserializeSize(src.size_in_native_pixels, &dst->width_in_native_pixels,
-                  &dst->height_in_native_pixels);
-  dst->device_scale_factor = src.device_scale_factor;
-  dst->refresh_rate = src.refresh_rate;
-  dst->is_native = src.is_native;
-  dst->is_selected = src.is_selected;
-  DeserializeOptionalPrimitive<bool>(src.has_is_interlaced, src.is_interlaced,
-                                     &dst->is_interlaced);
-}
-
-// extensions::api::system_display::Edid <==> crosapi::mojom::SysDisplayEdid.
-
-crosapi::mojom::SysDisplayEdidPtr SerializeEdid(
-    const extensions::api::system_display::Edid& src) {
-  auto dst = crosapi::mojom::SysDisplayEdid::New();
-  dst->manufacturer_id = src.manufacturer_id;
-  dst->product_id = src.product_id;
-  dst->year_of_manufacture = src.year_of_manufacture;
-  return dst;
-}
-
-void DeserializeEdid(const crosapi::mojom::SysDisplayEdid& src,
-                     extensions::api::system_display::Edid* dst) {
-  dst->manufacturer_id = src.manufacturer_id;
-  dst->product_id = src.product_id;
-  dst->year_of_manufacture = src.year_of_manufacture;
-}
-
-// extensions::api::system_display::DisplayUnitInfo <==>
-//     crosapi::mojom::SysDisplayUnitInfo.
-
-crosapi::mojom::SysDisplayUnitInfoPtr SerializeDisplayUnitInfo(
-    const extensions::api::system_display::DisplayUnitInfo& src) {
-  auto dst = crosapi::mojom::SysDisplayUnitInfo::New();
-  dst->id = src.id;
-  dst->name = src.name;
-  if (src.edid)
-    dst->edid = SerializeEdid(*src.edid);
-  dst->mirroring_source_id = src.mirroring_source_id;
-  dst->mirroring_destination_ids = src.mirroring_destination_ids;
-  dst->is_primary = src.is_primary;
-  dst->is_internal = src.is_internal;
-  dst->is_enabled = src.is_enabled;
-  dst->is_unified = src.is_unified;
-  SerializeOptionalPrimitive<bool>(src.is_auto_rotation_allowed,
-                                   &dst->has_is_auto_rotation_allowed,
-                                   &dst->is_auto_rotation_allowed);
-  dst->dpi_x = src.dpi_x;
-  dst->dpi_y = src.dpi_y;
-  dst->rotation = src.rotation;
-  dst->bounds_as_rect = SerializeBoundsAsRect(src.bounds);
-  dst->overscan = SerializeInsets(src.overscan);
-  dst->work_area_as_rect = SerializeBoundsAsRect(src.work_area);
-  dst->display_zoom_factor = src.display_zoom_factor;
-  for (const auto& src_mode : src.modes) {
-    dst->modes.emplace_back(SerializeDisplayMode(src_mode));
-  }
-  dst->has_touch_support = src.has_touch_support;
-  dst->has_accelerometer_support = src.has_accelerometer_support;
-  dst->available_display_zoom_factors = src.available_display_zoom_factors;
-  dst->display_zoom_factor = src.display_zoom_factor;
-  return dst;
-}
-
-void DeserializeDisplayUnitInfo(
-    const crosapi::mojom::SysDisplayUnitInfo& src,
-    extensions::api::system_display::DisplayUnitInfo* dst) {
-  dst->id = src.id;
-  dst->name = src.name;
-  if (src.edid) {
-    dst->edid = std::make_unique<extensions::api::system_display::Edid>();
-    DeserializeEdid(*src.edid, dst->edid.get());
-  }
-  dst->mirroring_source_id = src.mirroring_source_id;
-  dst->mirroring_destination_ids = src.mirroring_destination_ids;
-  dst->is_primary = src.is_primary;
-  dst->is_internal = src.is_internal;
-  dst->is_enabled = src.is_enabled;
-  dst->is_unified = src.is_unified;
-  DeserializeOptionalPrimitive<bool>(src.has_is_auto_rotation_allowed,
-                                     src.is_auto_rotation_allowed,
-                                     &dst->is_auto_rotation_allowed);
-  dst->dpi_x = src.dpi_x;
-  dst->dpi_y = src.dpi_y;
-  dst->rotation = src.rotation;
-  DeserializeRectToBounds(src.bounds_as_rect, &dst->bounds);
-  DeserializeInsets(src.overscan, &dst->overscan);
-  DeserializeRectToBounds(src.work_area_as_rect, &dst->work_area);
-  dst->display_zoom_factor = src.display_zoom_factor;
-  dst->modes.resize(src.modes.size());
-  for (size_t i = 0; i < src.modes.size(); ++i) {
-    DeserializeDisplayMode(*src.modes[i], &dst->modes[i]);
-  }
-  dst->has_touch_support = src.has_touch_support;
-  dst->has_accelerometer_support = src.has_accelerometer_support;
-  dst->available_display_zoom_factors = src.available_display_zoom_factors;
-  dst->display_zoom_factor = src.display_zoom_factor;
-}
-
-}  // namespace system_display
-}  // namespace api
-}  // namespace extensions
diff --git a/chrome/browser/extensions/system_display/system_display_serialization.h b/chrome/browser/extensions/system_display/system_display_serialization.h
deleted file mode 100644
index f12ce45b..0000000
--- a/chrome/browser/extensions/system_display/system_display_serialization.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_SYSTEM_DISPLAY_SERIALIZATION_H_
-#define CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_SYSTEM_DISPLAY_SERIALIZATION_H_
-
-#include "base/component_export.h"
-#include "chromeos/crosapi/mojom/system_display.mojom.h"
-
-// This file declares utilities to serialize / deserialize system_display.idl
-// structs under
-//   extensions::api::system_display::
-// to / from Stable crosapi Mojo system_display structs under
-//   crosapi::mojom::
-// which needs to be Stable and need to handle version skew.
-
-// Approach: Use serialize / deserialize function pairs:
-// * Serialize: Converts extensions::api::system_display objects to
-//   crosapi::mojom (include possible StructTrait mapped) objects. The results
-//   are returned by value, or are allocated and returned as Mojo Ptr.
-// * Deserialize: Reads crosapi::mojom (include possible StructTraits mapped)
-//   objects and writes to extensions::api::system_display objects or fields.
-//   The deserialized objects are written via |dst| pointer(s), to accommodate a
-//   wider variety of deserialized values. Also, it's the caller's
-//   responsibility to check the presence of serialized |src| data, and allocate
-//   |dst| data as needed.
-
-// Rejected alternatives:
-// * Use extensions::api::system_display objects' generated ToValue() and
-//   FromValue() functions: Unfortunately, FromValue() is unforgiving, so it
-//   won't handle version skews. If a less stringent API becomes available
-//   (e.g., FromValueAllowMissing()) then we can revisit this alternative.
-// * Use ash/public/mojom/cros_display_config.mojom: These are not meant to be
-//   Stable, and deviate from system_display.idl.
-// * Use StructTraits to map crosapi Mojo to extensions::api::system_display::
-//   objects: This is viable, but the resulting code can be bulky. The function
-//   pair approach is more direct (i.e., less prone to leakage of abstraction),
-//   and allows matching serialization / deserialization code to be in
-//   close proximity, so future modifications and version skew handling code
-//   can be better juxtaposed.
-
-namespace extensions {
-namespace api {
-namespace system_display {
-
-struct DisplayMode;
-struct DisplayUnitInfo;
-struct Edid;
-
-// extensions::api::system_display::DisplayMode <==>
-//     crosapi::mojom::DisplayMode.
-
-COMPONENT_EXPORT(CROSAPI)
-crosapi::mojom::SysDisplayModePtr SerializeDisplayMode(
-    const extensions::api::system_display::DisplayMode& src);
-
-COMPONENT_EXPORT(CROSAPI)
-void DeserializeDisplayMode(const crosapi::mojom::SysDisplayMode& src,
-                            extensions::api::system_display::DisplayMode* dst);
-
-// extensions::api::system_display::Edid <==> crosapi::mojom::Edid.
-
-COMPONENT_EXPORT(CROSAPI)
-crosapi::mojom::SysDisplayEdidPtr SerializeEdid(
-    const extensions::api::system_display::Edid& src);
-
-COMPONENT_EXPORT(CROSAPI)
-void DeserializeEdid(const crosapi::mojom::SysDisplayEdid& src,
-                     extensions::api::system_display::Edid* dst);
-
-// extensions::api::system_display::DisplayUnitInfo <==>
-//     crosapi::mojom::DisplayUnitInfo.
-
-COMPONENT_EXPORT(CROSAPI)
-crosapi::mojom::SysDisplayUnitInfoPtr SerializeDisplayUnitInfo(
-    const extensions::api::system_display::DisplayUnitInfo& src);
-
-COMPONENT_EXPORT(CROSAPI)
-void DeserializeDisplayUnitInfo(
-    const crosapi::mojom::SysDisplayUnitInfo& src,
-    extensions::api::system_display::DisplayUnitInfo* dst);
-
-}  // namespace system_display
-}  // namespace api
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_SYSTEM_DISPLAY_SERIALIZATION_H_
diff --git a/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc b/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc
deleted file mode 100644
index 20093f5..0000000
--- a/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/json/json_parser.h"
-#include "base/json/json_string_value_serializer.h"
-#include "base/strings/strcat.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/system_display/system_display_serialization.h"
-#include "chromeos/crosapi/mojom/system_display.mojom.h"
-#include "extensions/common/api/system_display.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-// Converts |obj| to a JSON string, assuming T::ToValue() is defined.
-template <class T>
-std::string ObjectToString(const T& obj) {
-  std::unique_ptr<base::Value> value = obj.ToValue();
-  std::string json_string;
-  JSONStringValueSerializer serializer(&json_string);
-  EXPECT_TRUE(serializer.Serialize(*value));
-  return json_string;
-}
-
-// Converts JSON string to |obj|, assuming static T::FromValue() is defined.
-template <class T>
-std::unique_ptr<T> StringToObject(const std::string& json_string) {
-  JSONStringValueDeserializer deserializer(json_string);
-  int err_code = 0;
-  std::string err_message;
-  std::unique_ptr<base::Value> value =
-      deserializer.Deserialize(&err_code, &err_message);
-  EXPECT_EQ(base::ValueDeserializer::kErrorCodeNoError, err_code)
-      << "Unexpected error: " << err_message;
-  EXPECT_NE(nullptr, value.get());
-  std::unique_ptr<T> obj = T::FromValue(*value);
-  EXPECT_NE(nullptr, obj.get());
-  return obj;
-}
-
-// Returns a valid JSON string by concatenating a list of strings while making
-// the following transforms:
-// * Remove all prettifying double spaces.
-// * Replace all prettifying "'" with "\"",
-// * If |include_optional == false| the ignore all lines starting with "??".
-//   Otherwise just strip "??".
-std::string MakeJsonString(const std::vector<std::string>& lines,
-                           bool include_optional) {
-  std::vector<std::string> used_lines;
-  for (const std::string& line : lines) {
-    if (include_optional || line.substr(0, 2) != "??")
-      used_lines.push_back(line);
-  }
-  std::string ret = base::StrCat(used_lines);
-  base::ReplaceSubstringsAfterOffset(&ret, 0, "??", "");
-  base::ReplaceSubstringsAfterOffset(&ret, 0, "'", "\"");
-  base::ReplaceSubstringsAfterOffset(&ret, 0, "  ", "");
-  return ret;
-}
-
-}  // namespace
-
-namespace extensions {
-namespace api {
-namespace system_display {
-
-// This test fails if extensions::api::system_display::DisplayMode changes.
-// To fix, update |original_json_string|, and fix SerializeDisplayMode() and
-// DeserializeDisplayMode().
-TEST(SystemDisplaySerialization, DisplayMode) {
-  std::vector<std::string> test_lines = {
-      "{",
-      "  'deviceScaleFactor':3.14159,",
-      "  'height':487,",
-      "  'heightInNativePixels':512,",
-      "??'isInterlaced':true,",
-      "  'isNative':true,",
-      "  'isSelected':true,",
-      "  'refreshRate':59.5,",
-      "  'width':640,",
-      "  'widthInNativePixels':671",
-      "}",
-  };
-
-  for (int iter = 0; iter < 2; ++iter) {
-    std::string original_json_string =
-        MakeJsonString(test_lines, /*include_optional=*/iter > 0);
-    auto original_obj = StringToObject<DisplayMode>(original_json_string);
-    crosapi::mojom::SysDisplayModePtr serialized_obj =
-        SerializeDisplayMode(*original_obj);
-    DisplayMode copied_obj;
-    DeserializeDisplayMode(*serialized_obj, &copied_obj);
-    std::string copied_json_string = ObjectToString(copied_obj);
-
-    EXPECT_EQ(original_json_string, copied_json_string);
-  }
-}
-
-// This test fails if extensions::api::system_display::Edid changes. To fix,
-// update |original_json_string|, and fix SerializeEdid() and DeserializeEdid().
-TEST(SystemDisplaySerialization, Edid) {
-  std::vector<std::string> test_lines = {
-      "{",
-      "  'manufacturerId':'ACME Display 3000',",
-      "  'productId':'ABC-123-XYZ',",
-      "  'yearOfManufacture':2038",
-      "}",
-  };
-
-  std::string original_json_string = MakeJsonString(test_lines, true);
-  auto original_obj = StringToObject<Edid>(original_json_string);
-  crosapi::mojom::SysDisplayEdidPtr serialized_obj =
-      SerializeEdid(*original_obj);
-  Edid copied_obj;
-  DeserializeEdid(*serialized_obj, &copied_obj);
-  std::string copied_json_string = ObjectToString(copied_obj);
-
-  EXPECT_EQ(original_json_string, copied_json_string);
-}
-
-// This test fails if extensions::api::system_display::DisplayUnitInfo changes.
-// To fix, update |original_json_string|, and fix  SerializeDisplayUnitInfo()
-// and DeserializeDisplayUnitInfo().
-TEST(SystemDisplaySerialization, DisplayUnitInfo) {
-  // Prettified lines used to create test cases. This was created by first
-  // taking the output form running the following:
-  //
-  //   LOG(ERROR) << ObjectToString(DisplayUnitInfo());
-  //
-  // followed by populating lists and adding optional fields, obtained by
-  // inspecting system_display.idl.
-  std::vector<std::string> test_lines = {
-      "{",
-      "  'availableDisplayZoomFactors':[",
-      "??  0.8,",
-      "??  1.2,",
-      "??  1.0",
-      "  ],",
-      "  'bounds':{",
-      "    'height':749,",
-      "    'left':7,",
-      "    'top':11,",
-      "    'width':1024",
-      "  },",
-      "  'displayZoomFactor':1.0,",
-      "  'dpiX':90.0,",
-      "  'dpiY':88.25,",
-      "??'edid':{",
-      "??  'manufacturerId':'ACME Display 3000',",
-      "??  'productId':'ABC-123-XYZ',",
-      "??  'yearOfManufacture':2038",
-      "??},",
-      "  'hasAccelerometerSupport':true,",
-      "  'hasTouchSupport':true,",
-      "  'id':'AWESOME-display-ID',",
-      "??'isAutoRotationAllowed':true,",
-      "  'isEnabled':true,",
-      "  'isInternal':true,",
-      "  'isPrimary':true,",
-      "  'isUnified':true,",
-      "  'mirroringDestinationIds':[",
-      "    'DEST-ID-2',",
-      "    'DEST-ID-1',",
-      "    'DEST-ID-3'",
-      "  ],",
-      "  'mirroringSourceId':'SOURCE-ID-0',",
-      "  'modes':[",
-      "??  {",
-      "??    'deviceScaleFactor':3.14159,",
-      "??    'height':487,",
-      "??    'heightInNativePixels':512,",
-      "??    'isNative':true,",
-      "??    'isSelected':true,",
-      "??    'refreshRate':59.5,",
-      "??    'width':640,",
-      "??    'widthInNativePixels':671",
-      "??  },",
-      "??  {",
-      "??    'deviceScaleFactor':2.71828,",
-      "??    'height':30,",
-      "??    'heightInNativePixels':30,",
-      "??    'isInterlaced':true,",
-      "??    'isNative':false,",
-      "??    'isSelected':false,",
-      "??    'refreshRate':122.0,",
-      "??    'width':50,",
-      "??    'widthInNativePixels':50",
-      "??  }",
-      "  ],",
-      "  'name':'Display--123456789',",
-      "  'overscan':{",
-      "    'bottom':6,",
-      "    'left':7,",
-      "    'right':8,",
-      "    'top':9",
-      "  },",
-      "  'rotation':90,",
-      "  'workArea':{",
-      "    'height':300,",
-      "    'left':11,",
-      "    'top':23,",
-      "    'width':400",
-      "  }",
-      "}",
-  };
-
-  for (int iter = 0; iter < 2; ++iter) {
-    std::string original_json_string =
-        MakeJsonString(test_lines, /*include_optional=*/iter > 0);
-    auto original_obj = StringToObject<DisplayUnitInfo>(original_json_string);
-    crosapi::mojom::SysDisplayUnitInfoPtr serialized_obj =
-        SerializeDisplayUnitInfo(*original_obj);
-    DisplayUnitInfo copied_obj;
-    DeserializeDisplayUnitInfo(*serialized_obj, &copied_obj);
-    std::string copied_json_string = ObjectToString(copied_obj);
-
-    EXPECT_EQ(original_json_string, copied_json_string);
-  }
-}
-
-}  // namespace system_display
-}  // namespace api
-}  // namespace extensions
diff --git a/chrome/browser/extensions/warning_badge_service_factory.cc b/chrome/browser/extensions/warning_badge_service_factory.cc
index eaac902..b17ce3b 100644
--- a/chrome/browser/extensions/warning_badge_service_factory.cc
+++ b/chrome/browser/extensions/warning_badge_service_factory.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/browser/extensions/warning_badge_service.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/browser/warning_service_factory.h"
 
@@ -27,9 +26,9 @@
 }
 
 WarningBadgeServiceFactory::WarningBadgeServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "WarningBadgeService",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(WarningServiceFactory::GetInstance());
 }
 
@@ -41,12 +40,6 @@
   return new WarningBadgeService(static_cast<Profile*>(context));
 }
 
-BrowserContext* WarningBadgeServiceFactory::GetBrowserContextToUse(
-    BrowserContext* context) const {
-  // Redirected in incognito.
-  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
-}
-
 bool WarningBadgeServiceFactory::ServiceIsCreatedWithBrowserContext() const {
   return true;
 }
diff --git a/chrome/browser/extensions/warning_badge_service_factory.h b/chrome/browser/extensions/warning_badge_service_factory.h
index 38985770..e0f31362 100644
--- a/chrome/browser/extensions/warning_badge_service_factory.h
+++ b/chrome/browser/extensions/warning_badge_service_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_WARNING_BADGE_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace extensions {
 
 class WarningBadgeService;
 
-class WarningBadgeServiceFactory : public BrowserContextKeyedServiceFactory {
+class WarningBadgeServiceFactory : public ProfileKeyedServiceFactory {
  public:
   WarningBadgeServiceFactory(const WarningBadgeServiceFactory&) = delete;
   WarningBadgeServiceFactory& operator=(const WarningBadgeServiceFactory&) =
@@ -31,8 +31,6 @@
   // BrowserContextKeyedServiceFactory implementation
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
 };
 
diff --git a/chrome/browser/favicon/favicon_service_factory.cc b/chrome/browser/favicon/favicon_service_factory.cc
index fb4250a..4913ac3 100644
--- a/chrome/browser/favicon/favicon_service_factory.cc
+++ b/chrome/browser/favicon/favicon_service_factory.cc
@@ -15,7 +15,6 @@
 #include "components/favicon/content/large_favicon_provider_getter.h"
 #include "components/favicon/core/favicon_service_impl.h"
 #include "components/history/core/browser/history_service.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/prefs/pref_service.h"
 
 namespace {
@@ -75,9 +74,7 @@
 }
 
 FaviconServiceFactory::FaviconServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-        "FaviconService",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("FaviconService") {
   DependsOn(HistoryServiceFactory::GetInstance());
   favicon::SetLargeFaviconProviderGetter(
       base::BindRepeating(&GetLargeFaviconProvider));
diff --git a/chrome/browser/favicon/favicon_service_factory.h b/chrome/browser/favicon/favicon_service_factory.h
index 2ceb346c..cc7c1459 100644
--- a/chrome/browser/favicon/favicon_service_factory.h
+++ b/chrome/browser/favicon/favicon_service_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
 #define CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/service_access_type.h"
 
 namespace base {
@@ -20,7 +20,7 @@
 
 // Singleton that owns all FaviconService and associates them with
 // Profiles.
-class FaviconServiceFactory : public BrowserContextKeyedServiceFactory {
+class FaviconServiceFactory : public ProfileKeyedServiceFactory {
  public:
   // |sat| defines what the caller plans to do with the service. See
   // the ServiceAccessType definition in profile.h.
diff --git a/chrome/browser/favicon/history_ui_favicon_request_handler_factory.cc b/chrome/browser/favicon/history_ui_favicon_request_handler_factory.cc
index 1d27fcb..14061510 100644
--- a/chrome/browser/favicon/history_ui_favicon_request_handler_factory.cc
+++ b/chrome/browser/favicon/history_ui_favicon_request_handler_factory.cc
@@ -7,11 +7,9 @@
 #include "base/memory/singleton.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/favicon/large_icon_service_factory.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "components/favicon/core/history_ui_favicon_request_handler_impl.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/sync/driver/sync_service.h"
 #include "components/sync/driver/sync_service_utils.h"
 #include "content/public/browser/browser_context.h"
@@ -41,9 +39,9 @@
 }
 
 HistoryUiFaviconRequestHandlerFactory::HistoryUiFaviconRequestHandlerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "HistoryUiFaviconRequestHandler",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(FaviconServiceFactory::GetInstance());
   DependsOn(LargeIconServiceFactory::GetInstance());
   DependsOn(SyncServiceFactory::GetInstance());
@@ -52,12 +50,6 @@
 HistoryUiFaviconRequestHandlerFactory::
     ~HistoryUiFaviconRequestHandlerFactory() {}
 
-content::BrowserContext*
-HistoryUiFaviconRequestHandlerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 KeyedService* HistoryUiFaviconRequestHandlerFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
   Profile* profile = Profile::FromBrowserContext(context);
diff --git a/chrome/browser/favicon/history_ui_favicon_request_handler_factory.h b/chrome/browser/favicon/history_ui_favicon_request_handler_factory.h
index 7d14168..aa0d99a 100644
--- a/chrome/browser/favicon/history_ui_favicon_request_handler_factory.h
+++ b/chrome/browser/favicon/history_ui_favicon_request_handler_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_FAVICON_HISTORY_UI_FAVICON_REQUEST_HANDLER_FACTORY_H_
 #define CHROME_BROWSER_FAVICON_HISTORY_UI_FAVICON_REQUEST_HANDLER_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -21,7 +21,7 @@
 }
 
 class HistoryUiFaviconRequestHandlerFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   static favicon::HistoryUiFaviconRequestHandler* GetForBrowserContext(
       content::BrowserContext* context);
@@ -41,8 +41,6 @@
   ~HistoryUiFaviconRequestHandlerFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   bool ServiceIsNULLWhileTesting() const override;
diff --git a/chrome/browser/favicon/large_icon_service_factory.cc b/chrome/browser/favicon/large_icon_service_factory.cc
index 16a8d4fac..1baec887 100644
--- a/chrome/browser/favicon/large_icon_service_factory.cc
+++ b/chrome/browser/favicon/large_icon_service_factory.cc
@@ -9,13 +9,11 @@
 #include "chrome/browser/browser_features.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/image_fetcher/image_decoder_impl.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/favicon/core/favicon_service.h"
 #include "components/favicon/core/large_icon_service_impl.h"
 #include "components/image_fetcher/core/image_decoder.h"
 #include "components/image_fetcher/core/image_fetcher_impl.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 #include "ui/gfx/favicon_size.h"
@@ -51,19 +49,14 @@
 }
 
 LargeIconServiceFactory::LargeIconServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-        "LargeIconService",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "LargeIconService",
+          ProfileSelections::BuildRedirectedInIncognito()) {
   DependsOn(FaviconServiceFactory::GetInstance());
 }
 
 LargeIconServiceFactory::~LargeIconServiceFactory() {}
 
-content::BrowserContext* LargeIconServiceFactory::GetBrowserContextToUse(
-      content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 KeyedService* LargeIconServiceFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
   Profile* profile = Profile::FromBrowserContext(context);
diff --git a/chrome/browser/favicon/large_icon_service_factory.h b/chrome/browser/favicon/large_icon_service_factory.h
index 5a3c0f2..c09342ae 100644
--- a/chrome/browser/favicon/large_icon_service_factory.h
+++ b/chrome/browser/favicon/large_icon_service_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_FAVICON_LARGE_ICON_SERVICE_FACTORY_H_
 #define CHROME_BROWSER_FAVICON_LARGE_ICON_SERVICE_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T> struct DefaultSingletonTraits;
@@ -21,7 +21,7 @@
 
 // Singleton that owns all LargeIconService and associates them with
 // BrowserContext instances.
-class LargeIconServiceFactory : public BrowserContextKeyedServiceFactory {
+class LargeIconServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static favicon::LargeIconService* GetForBrowserContext(
       content::BrowserContext* context);
@@ -42,8 +42,6 @@
   ~LargeIconServiceFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   bool ServiceIsNULLWhileTesting() const override;
diff --git a/chrome/browser/feature_engagement/tracker_factory.cc b/chrome/browser/feature_engagement/tracker_factory.cc
index 9936a96a..0156d05 100644
--- a/chrome/browser/feature_engagement/tracker_factory.cc
+++ b/chrome/browser/feature_engagement/tracker_factory.cc
@@ -9,11 +9,9 @@
 #include "base/memory/singleton.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_constants.h"
 #include "components/feature_engagement/public/tracker.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 
@@ -32,10 +30,9 @@
 }
 
 TrackerFactory::TrackerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "feature_engagement::Tracker",
-          BrowserContextDependencyManager::GetInstance()) {
-}
+          ProfileSelections::BuildRedirectedInIncognito()) {}
 
 TrackerFactory::~TrackerFactory() = default;
 
@@ -56,9 +53,4 @@
       storage_dir, background_task_runner, db_provider);
 }
 
-content::BrowserContext* TrackerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 }  // namespace feature_engagement
diff --git a/chrome/browser/feature_engagement/tracker_factory.h b/chrome/browser/feature_engagement/tracker_factory.h
index 831ee637..c34cb83 100644
--- a/chrome/browser/feature_engagement/tracker_factory.h
+++ b/chrome/browser/feature_engagement/tracker_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_FEATURE_ENGAGEMENT_TRACKER_FACTORY_H_
 #define CHROME_BROWSER_FEATURE_ENGAGEMENT_TRACKER_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -21,7 +21,7 @@
 
 // TrackerFactory is the main client class for interaction with
 // the feature_engagement component.
-class TrackerFactory : public BrowserContextKeyedServiceFactory {
+class TrackerFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns singleton instance of TrackerFactory.
   static TrackerFactory* GetInstance();
@@ -42,8 +42,6 @@
   // BrowserContextKeyedServiceFactory overrides:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace feature_engagement
diff --git a/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc b/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc
index 8dd4062e..d8c4b80 100644
--- a/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc
+++ b/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/segmentation_platform/segmentation_platform_service_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/segmentation_platform/public/segmentation_platform_service.h"
 #include "content/public/browser/browser_context.h"
 
@@ -88,9 +87,7 @@
 }
 
 FeatureNotificationGuideServiceFactory::FeatureNotificationGuideServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "FeatureNotificationGuideService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("FeatureNotificationGuideService") {
   DependsOn(NotificationScheduleServiceFactory::GetInstance());
   DependsOn(
       segmentation_platform::SegmentationPlatformServiceFactory::GetInstance());
diff --git a/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.h b/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.h
index 2063091..ae78871d 100644
--- a/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.h
+++ b/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_FEATURE_GUIDE_NOTIFICATIONS_FEATURE_NOTIFICATION_GUIDE_SERVICE_FACTORY_H_
 #define CHROME_BROWSER_FEATURE_GUIDE_NOTIFICATIONS_FEATURE_NOTIFICATION_GUIDE_SERVICE_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -23,7 +23,7 @@
 
 // A factory to create one unique FeatureNotificationGuideService.
 class FeatureNotificationGuideServiceFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   static FeatureNotificationGuideServiceFactory* GetInstance();
   static FeatureNotificationGuideService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/feed/feed_service_factory.cc b/chrome/browser/feed/feed_service_factory.cc
index 6931b18..6fd182b 100644
--- a/chrome/browser/feed/feed_service_factory.cc
+++ b/chrome/browser/feed/feed_service_factory.cc
@@ -26,7 +26,6 @@
 #include "components/feed/core/proto/v2/store.pb.h"
 #include "components/feed/core/v2/public/feed_service.h"
 #include "components/feed/feed_feature_list.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/offline_pages/core/offline_page_feature.h"
 #include "components/version_info/version_info.h"
 #include "content/public/browser/browser_context.h"
@@ -164,9 +163,7 @@
 }
 
 FeedServiceFactory::FeedServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "FeedService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("FeedService") {
   DependsOn(IdentityManagerFactory::GetInstance());
   DependsOn(HistoryServiceFactory::GetInstance());
   DependsOn(background_task::BackgroundTaskSchedulerFactory::GetInstance());
@@ -237,11 +234,6 @@
       background_task_runner, api_key, chrome_info);
 }
 
-content::BrowserContext* FeedServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return context->IsOffTheRecord() ? nullptr : context;
-}
-
 bool FeedServiceFactory::ServiceIsNULLWhileTesting() const {
   return true;
 }
diff --git a/chrome/browser/feed/feed_service_factory.h b/chrome/browser/feed/feed_service_factory.h
index a1378d9..ceb8e65 100644
--- a/chrome/browser/feed/feed_service_factory.h
+++ b/chrome/browser/feed/feed_service_factory.h
@@ -7,7 +7,7 @@
 
 #include "base/memory/singleton.h"
 #include "base/strings/string_piece_forward.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -23,7 +23,7 @@
 
 // Factory to create one FeedService per browser context. Callers need to
 // watch out for nullptr when incognito, as the feed should not be used then.
-class FeedServiceFactory : public BrowserContextKeyedServiceFactory {
+class FeedServiceFactory : public ProfileKeyedServiceFactory {
  public:
   FeedServiceFactory(const FeedServiceFactory&) = delete;
   FeedServiceFactory& operator=(const FeedServiceFactory&) = delete;
@@ -40,8 +40,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsNULLWhileTesting() const override;
 };
 
diff --git a/chrome/browser/file_system_access/file_system_access_permission_context_factory.cc b/chrome/browser/file_system_access/file_system_access_permission_context_factory.cc
index b0359f6..f47618f 100644
--- a/chrome/browser/file_system_access/file_system_access_permission_context_factory.cc
+++ b/chrome/browser/file_system_access/file_system_access_permission_context_factory.cc
@@ -7,9 +7,7 @@
 #include "base/no_destructor.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/file_system_access/chrome_file_system_access_permission_context.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 // static
 ChromeFileSystemAccessPermissionContext*
@@ -36,21 +34,15 @@
 
 FileSystemAccessPermissionContextFactory::
     FileSystemAccessPermissionContextFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "FileSystemAccessPermissionContext",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildForRegularAndIncognito()) {
   DependsOn(HostContentSettingsMapFactory::GetInstance());
 }
 
 FileSystemAccessPermissionContextFactory::
     ~FileSystemAccessPermissionContextFactory() = default;
 
-content::BrowserContext*
-FileSystemAccessPermissionContextFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 KeyedService* FileSystemAccessPermissionContextFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
   return new ChromeFileSystemAccessPermissionContext(profile);
diff --git a/chrome/browser/file_system_access/file_system_access_permission_context_factory.h b/chrome/browser/file_system_access/file_system_access_permission_context_factory.h
index 7fcb022..e12cd42b 100644
--- a/chrome/browser/file_system_access/file_system_access_permission_context_factory.h
+++ b/chrome/browser/file_system_access/file_system_access_permission_context_factory.h
@@ -6,14 +6,14 @@
 #define CHROME_BROWSER_FILE_SYSTEM_ACCESS_FILE_SYSTEM_ACCESS_PERMISSION_CONTEXT_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class ChromeFileSystemAccessPermissionContext;
 
 // Factory to get or create an instance of
 // ChromeFileSystemAccessPermissionContext from a Profile.
 class FileSystemAccessPermissionContextFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   static ChromeFileSystemAccessPermissionContext* GetForProfile(
       content::BrowserContext* profile);
@@ -33,8 +33,6 @@
   ~FileSystemAccessPermissionContextFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
   void BrowserContextShutdown(content::BrowserContext* context) override;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 386ec67..22b93fb8 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -5066,7 +5066,7 @@
       "zsalata@google.com",
       "olesiamarukhno@google.com"
     ],
-    "expiry_milestone": 106
+    "expiry_milestone": 109
   },
   {
     "name": "page-info-history",
@@ -5080,12 +5080,12 @@
       "dullweber",
       "olesiamarukhno@google.com"
     ],
-    "expiry_milestone": 106
+    "expiry_milestone": 109
   },
   {
     "name": "page-info-more-about-this-page",
     "owners": [ "dullweber", "olesiamarukhno@google.com" ],
-    "expiry_milestone": 106
+    "expiry_milestone": 109
   },
   {
     "name": "page-info-store-info",
diff --git a/chrome/browser/font_pref_change_notifier_factory.cc b/chrome/browser/font_pref_change_notifier_factory.cc
index 70b0ef0..5ab09821b 100644
--- a/chrome/browser/font_pref_change_notifier_factory.cc
+++ b/chrome/browser/font_pref_change_notifier_factory.cc
@@ -5,14 +5,12 @@
 #include "chrome/browser/font_pref_change_notifier_factory.h"
 
 #include "chrome/browser/font_pref_change_notifier.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 FontPrefChangeNotifierFactory::FontPrefChangeNotifierFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "FontPrefChangeNotifier",
-          BrowserContextDependencyManager::GetInstance()) {}
+          ProfileSelections::BuildRedirectedInIncognito()) {}
 
 FontPrefChangeNotifierFactory::~FontPrefChangeNotifierFactory() = default;
 
@@ -33,8 +31,3 @@
   return new FontPrefChangeNotifier(
       Profile::FromBrowserContext(context)->GetPrefs());
 }
-
-content::BrowserContext* FontPrefChangeNotifierFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
diff --git a/chrome/browser/font_pref_change_notifier_factory.h b/chrome/browser/font_pref_change_notifier_factory.h
index be6d4b82..566cddd 100644
--- a/chrome/browser/font_pref_change_notifier_factory.h
+++ b/chrome/browser/font_pref_change_notifier_factory.h
@@ -6,13 +6,13 @@
 #define CHROME_BROWSER_FONT_PREF_CHANGE_NOTIFIER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class FontPrefChangeNotifier;
 class Profile;
 
 // Keyed service factory for a FontPrefChangeNotifier.
-class FontPrefChangeNotifierFactory : public BrowserContextKeyedServiceFactory {
+class FontPrefChangeNotifierFactory : public ProfileKeyedServiceFactory {
  public:
   static FontPrefChangeNotifier* GetForProfile(Profile* profile);
 
@@ -27,8 +27,6 @@
   // BrowserContextKeyedServiceFactory overrides:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 #endif  // CHROME_BROWSER_FONT_PREF_CHANGE_NOTIFIER_FACTORY_H_
diff --git a/chrome/browser/gcm/gcm_profile_service_factory.cc b/chrome/browser/gcm/gcm_profile_service_factory.cc
index 064e2df8..9e8474a8 100644
--- a/chrome/browser/gcm/gcm_profile_service_factory.cc
+++ b/chrome/browser/gcm/gcm_profile_service_factory.cc
@@ -10,12 +10,10 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "components/gcm_driver/gcm_profile_service.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/offline_pages/buildflags/buildflags.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -110,9 +108,9 @@
 }
 
 GCMProfileServiceFactory::GCMProfileServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-        "GCMProfileService",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "GCMProfileService",
+          ProfileSelections::BuildForRegularAndIncognito()) {
   DependsOn(IdentityManagerFactory::GetInstance());
 #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
   DependsOn(offline_pages::PrefetchServiceFactory::GetInstance());
@@ -166,9 +164,4 @@
   return service.release();
 }
 
-content::BrowserContext* GCMProfileServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 }  // namespace gcm
diff --git a/chrome/browser/gcm/gcm_profile_service_factory.h b/chrome/browser/gcm/gcm_profile_service_factory.h
index 13511e84..9a588cc 100644
--- a/chrome/browser/gcm/gcm_profile_service_factory.h
+++ b/chrome/browser/gcm/gcm_profile_service_factory.h
@@ -6,8 +6,8 @@
 #define CHROME_BROWSER_GCM_GCM_PROFILE_SERVICE_FACTORY_H_
 
 #include "base/no_destructor.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/gcm_driver/system_encryptor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
 namespace gcm {
 
@@ -15,7 +15,7 @@
 
 // Singleton that owns all GCMProfileService and associates them with
 // Profiles.
-class GCMProfileServiceFactory : public BrowserContextKeyedServiceFactory {
+class GCMProfileServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static GCMProfileService* GetForProfile(content::BrowserContext* profile);
   static GCMProfileServiceFactory* GetInstance();
@@ -48,8 +48,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace gcm
diff --git a/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.cc b/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.cc
index 8123d8f..52c57e0 100644
--- a/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.cc
+++ b/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.cc
@@ -7,11 +7,9 @@
 #include <memory>
 
 #include "chrome/browser/gcm/gcm_profile_service_factory.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/gcm_driver/gcm_profile_service.h"
 #include "components/gcm_driver/instance_id/instance_id_profile_service.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace instance_id {
 
@@ -33,9 +31,9 @@
 }
 
 InstanceIDProfileServiceFactory::InstanceIDProfileServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-        "InstanceIDProfileService",
-        BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "InstanceIDProfileService",
+          ProfileSelections::BuildForRegularAndIncognito()) {
   // GCM is needed for device ID.
   DependsOn(gcm::GCMProfileServiceFactory::GetInstance());
 }
@@ -51,10 +49,4 @@
       profile->IsOffTheRecord());
 }
 
-content::BrowserContext*
-InstanceIDProfileServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 }  // namespace instance_id
diff --git a/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.h b/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.h
index c450576..c09214e 100644
--- a/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.h
+++ b/chrome/browser/gcm/instance_id/instance_id_profile_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_GCM_INSTANCE_ID_INSTANCE_ID_PROFILE_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace instance_id {
 
@@ -14,8 +14,7 @@
 
 // Singleton that owns all InstanceIDProfileService and associates them with
 // profiles.
-class InstanceIDProfileServiceFactory :
-    public BrowserContextKeyedServiceFactory {
+class InstanceIDProfileServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static InstanceIDProfileService* GetForProfile(
       content::BrowserContext* profile);
@@ -35,8 +34,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace instance_id
diff --git a/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.cc b/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.cc
index a53f698..15f384e 100644
--- a/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.cc
+++ b/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.cc
@@ -8,7 +8,6 @@
 
 #include "base/memory/singleton.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 const base::Feature GoogleSearchDomainMixingMetricsEmitterFactory::kFeature{
     "EmitGoogleSearchDomainMixingMetrics", base::FEATURE_DISABLED_BY_DEFAULT};
@@ -28,9 +27,7 @@
 
 GoogleSearchDomainMixingMetricsEmitterFactory::
     GoogleSearchDomainMixingMetricsEmitterFactory()
-    : BrowserContextKeyedServiceFactory(
-          "GoogleSearchDomainMixingMetricsEmitter",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("GoogleSearchDomainMixingMetricsEmitter") {
   DependsOn(HistoryServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.h b/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.h
index d4a404f..02e7ca82a 100644
--- a/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.h
+++ b/chrome/browser/google/google_search_domain_mixing_metrics_emitter_factory.h
@@ -9,14 +9,14 @@
 #include "base/memory/singleton.h"
 #include "chrome/browser/google/google_search_domain_mixing_metrics_emitter.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 
 // Singleton that owns all GoogleSearchDomainMixingMetricsEmitters and
 // associates them with Profiles.
 class GoogleSearchDomainMixingMetricsEmitterFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   // Flag to enable computing domain mixing metrics based on the Google search
   // activity of the user.
diff --git a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc
index f918aea..75ca5da 100644
--- a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc
+++ b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc
@@ -4,10 +4,8 @@
 
 #include "chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h"
 
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/heavy_ad_intervention/heavy_ad_service.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 
 namespace {
@@ -30,9 +28,9 @@
 }
 
 HeavyAdServiceFactory::HeavyAdServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "HeavyAdService",
-          BrowserContextDependencyManager::GetInstance()) {}
+          ProfileSelections::BuildForRegularAndIncognito()) {}
 
 HeavyAdServiceFactory::~HeavyAdServiceFactory() {}
 
@@ -40,8 +38,3 @@
     content::BrowserContext* context) const {
   return new heavy_ad_intervention::HeavyAdService();
 }
-
-content::BrowserContext* HeavyAdServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
diff --git a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h
index f9fcf43..1d666b34 100644
--- a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h
+++ b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_HEAVY_AD_INTERVENTION_HEAVY_AD_SERVICE_FACTORY_H_
 
 #include "base/lazy_instance.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -18,7 +18,7 @@
 
 // LazyInstance that owns all HeavyAdServices and associates them with
 // Profiles.
-class HeavyAdServiceFactory : public BrowserContextKeyedServiceFactory {
+class HeavyAdServiceFactory : public ProfileKeyedServiceFactory {
  public:
   // Gets the HeavyAdService instance for |context|.
   static heavy_ad_intervention::HeavyAdService* GetForBrowserContext(
@@ -39,8 +39,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 #endif  // CHROME_BROWSER_HEAVY_AD_INTERVENTION_HEAVY_AD_SERVICE_FACTORY_H_
diff --git a/chrome/browser/hid/chrome_hid_delegate.cc b/chrome/browser/hid/chrome_hid_delegate.cc
index ae414251..3d4d105 100644
--- a/chrome/browser/hid/chrome_hid_delegate.cc
+++ b/chrome/browser/hid/chrome_hid_delegate.cc
@@ -29,7 +29,7 @@
 
 HidChooserContext* GetChooserContext(content::BrowserContext* browser_context) {
   auto* profile = Profile::FromBrowserContext(browser_context);
-  return HidChooserContextFactory::GetForProfile(profile);
+  return profile ? HidChooserContextFactory::GetForProfile(profile) : nullptr;
 }
 
 }  // namespace
diff --git a/chrome/browser/hid/hid_chooser_context_factory.cc b/chrome/browser/hid/hid_chooser_context_factory.cc
index 35019f85..64961508 100644
--- a/chrome/browser/hid/hid_chooser_context_factory.cc
+++ b/chrome/browser/hid/hid_chooser_context_factory.cc
@@ -7,9 +7,7 @@
 #include "base/no_destructor.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/hid/hid_chooser_context.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 // static
 HidChooserContextFactory* HidChooserContextFactory::GetInstance() {
@@ -31,9 +29,9 @@
 }
 
 HidChooserContextFactory::HidChooserContextFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "HidChooserContext",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildForRegularAndIncognito()) {
   DependsOn(HostContentSettingsMapFactory::GetInstance());
 }
 
@@ -44,11 +42,6 @@
   return new HidChooserContext(Profile::FromBrowserContext(context));
 }
 
-content::BrowserContext* HidChooserContextFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 void HidChooserContextFactory::BrowserContextShutdown(
     content::BrowserContext* context) {
   auto* hid_chooser_context =
diff --git a/chrome/browser/hid/hid_chooser_context_factory.h b/chrome/browser/hid/hid_chooser_context_factory.h
index 76be72f..7e5429c 100644
--- a/chrome/browser/hid/hid_chooser_context_factory.h
+++ b/chrome/browser/hid/hid_chooser_context_factory.h
@@ -6,12 +6,12 @@
 #define CHROME_BROWSER_HID_HID_CHOOSER_CONTEXT_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class HidChooserContext;
 class Profile;
 
-class HidChooserContextFactory : public BrowserContextKeyedServiceFactory {
+class HidChooserContextFactory : public ProfileKeyedServiceFactory {
  public:
   static HidChooserContext* GetForProfile(Profile* profile);
   static HidChooserContext* GetForProfileIfExists(Profile* profile);
@@ -29,8 +29,6 @@
   // BrowserContextKeyedBaseFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   void BrowserContextShutdown(content::BrowserContext* context) override;
 };
 
diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/history/history_tab_helper.cc
index 3d1c51105..0f99a6f 100644
--- a/chrome/browser/history/history_tab_helper.cc
+++ b/chrome/browser/history/history_tab_helper.cc
@@ -13,10 +13,12 @@
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/renderer_host/chrome_navigation_ui_data.h"
+#include "chrome/browser/translate/chrome_translate_client.h"
 #include "components/history/content/browser/history_context_helper.h"
 #include "components/history/core/browser/history_constants.h"
 #include "components/history/core/browser/history_service.h"
 #include "components/history/core/browser/history_types.h"
+#include "components/history/core/browser/url_row.h"
 #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h"
 #include "components/sessions/content/navigation_task_id.h"
 #include "components/sessions/content/session_tab_helper.h"
@@ -143,11 +145,30 @@
 #endif  // BUILDFLAG(IS_ANDROID)
 }
 
+history::VisitContentAnnotations::PasswordState
+ConvertSessionsPasswordStateToHistory(
+    sessions::SerializedNavigationEntry::PasswordState password_state) {
+  switch (password_state) {
+    case sessions::SerializedNavigationEntry::PASSWORD_STATE_UNKNOWN:
+      return history::VisitContentAnnotations::PasswordState::kUnknown;
+    case sessions::SerializedNavigationEntry::NO_PASSWORD_FIELD:
+      return history::VisitContentAnnotations::PasswordState::kNoPasswordField;
+    case sessions::SerializedNavigationEntry::HAS_PASSWORD_FIELD:
+      return history::VisitContentAnnotations::PasswordState::kHasPasswordField;
+  }
+}
+
 }  // namespace
 
 HistoryTabHelper::HistoryTabHelper(WebContents* web_contents)
     : content::WebContentsObserver(web_contents),
-      content::WebContentsUserData<HistoryTabHelper>(*web_contents) {}
+      content::WebContentsUserData<HistoryTabHelper>(*web_contents) {
+  // A translate client is not always attached to web contents (e.g. tests).
+  if (ChromeTranslateClient* translate_client =
+          ChromeTranslateClient::FromWebContents(web_contents)) {
+    translate_observation_.Observe(translate_client->GetTranslateDriver());
+  }
+}
 
 HistoryTabHelper::~HistoryTabHelper() = default;
 
@@ -266,6 +287,20 @@
   return add_page_args;
 }
 
+void HistoryTabHelper::OnPasswordStateUpdated(
+    sessions::SerializedNavigationEntry::PasswordState password_state) {
+  if (history::HistoryService* hs = GetHistoryService()) {
+    NavigationEntry* entry =
+        web_contents()->GetController().GetLastCommittedEntry();
+    if (entry) {
+      hs->SetPasswordStateForVisit(
+          history::ContextIDForWebContents(web_contents()),
+          entry->GetUniqueID(), web_contents()->GetLastCommittedURL(),
+          ConvertSessionsPasswordStateToHistory(password_state));
+    }
+  }
+}
+
 void HistoryTabHelper::DidFinishNavigation(
     content::NavigationHandle* navigation_handle) {
   if (!navigation_handle->HasCommitted())
@@ -385,6 +420,20 @@
   new_history_tab_helper->opener_web_contents_ = web_contents()->GetWeakPtr();
 }
 
+void HistoryTabHelper::OnLanguageDetermined(
+    const translate::LanguageDetectionDetails& details) {
+  if (history::HistoryService* hs = GetHistoryService()) {
+    NavigationEntry* entry =
+        web_contents()->GetController().GetLastCommittedEntry();
+    if (entry) {
+      hs->SetPageLanguageForVisit(
+          history::ContextIDForWebContents(web_contents()),
+          entry->GetUniqueID(), web_contents()->GetLastCommittedURL(),
+          details.adopted_language);
+    }
+  }
+}
+
 void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) {
   if (!entry)
     return;
@@ -418,6 +467,8 @@
 }
 
 void HistoryTabHelper::WebContentsDestroyed() {
+  translate_observation_.Reset();
+
   // We update the history for this URL.
   WebContents* tab = web_contents();
   Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext());
diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/history/history_tab_helper.h
index 717fe4f..f0102a9 100644
--- a/chrome/browser/history/history_tab_helper.h
+++ b/chrome/browser/history/history_tab_helper.h
@@ -5,8 +5,11 @@
 #ifndef CHROME_BROWSER_HISTORY_HISTORY_TAB_HELPER_H_
 #define CHROME_BROWSER_HISTORY_HISTORY_TAB_HELPER_H_
 
+#include "base/scoped_observation.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "components/sessions/core/serialized_navigation_entry.h"
+#include "components/translate/core/browser/translate_driver.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
@@ -15,8 +18,10 @@
 class HistoryService;
 }
 
-class HistoryTabHelper : public content::WebContentsObserver,
-                         public content::WebContentsUserData<HistoryTabHelper> {
+class HistoryTabHelper
+    : public content::WebContentsObserver,
+      public translate::TranslateDriver::LanguageDetectionObserver,
+      public content::WebContentsUserData<HistoryTabHelper> {
  public:
   HistoryTabHelper(const HistoryTabHelper&) = delete;
   HistoryTabHelper& operator=(const HistoryTabHelper&) = delete;
@@ -36,6 +41,11 @@
       int nav_entry_id,
       content::NavigationHandle* navigation_handle);
 
+  // Called by password manager code when the PasswordState in this tab was
+  // updated.
+  void OnPasswordStateUpdated(
+      sessions::SerializedNavigationEntry::PasswordState password_state);
+
   // Fakes that the WebContents is a tab for testing purposes.
   void SetForceEligibleTabForTesting(bool force) {
     force_eligible_tab_for_testing_ = force;
@@ -69,12 +79,25 @@
                            bool started_from_context_menu,
                            bool renderer_initiated) override;
 
+  // TranslateDriver::LanguageDetectionObserver implementation.
+  void OnLanguageDetermined(
+      const translate::LanguageDetectionDetails& details) override;
+
   // Helper function to return the history service.  May return null.
   history::HistoryService* GetHistoryService();
 
   // Returns true if our observed web contents is an eligible tab.
   bool IsEligibleTab(const history::HistoryAddPageArgs& add_page_args) const;
 
+  // Observes LanguageDetectionObserver, which notifies us when the language of
+  // the contents of the current page has been determined.
+  base::ScopedObservation<
+      translate::TranslateDriver,
+      translate::TranslateDriver::LanguageDetectionObserver,
+      &translate::TranslateDriver::AddLanguageDetectionObserver,
+      &translate::TranslateDriver::RemoveLanguageDetectionObserver>
+      translate_observation_{this};
+
   // True after navigation to a page is complete and the page is currently
   // loading. Only applies to the main frame of the page.
   bool is_loading_ = false;
diff --git a/chrome/browser/interstitials/OWNERS b/chrome/browser/interstitials/OWNERS
index 5d5aa262..fed3951 100644
--- a/chrome/browser/interstitials/OWNERS
+++ b/chrome/browser/interstitials/OWNERS
@@ -1,5 +1,4 @@
 carlosil@chromium.org
 estark@chromium.org
-felt@chromium.org
 mattm@chromium.org
 meacer@chromium.org
diff --git a/chrome/browser/lacros/account_manager/add_account_helper.cc b/chrome/browser/lacros/account_manager/add_account_helper.cc
index 808bf3b..8f20aab 100644
--- a/chrome/browser/lacros/account_manager/add_account_helper.cc
+++ b/chrome/browser/lacros/account_manager/add_account_helper.cc
@@ -111,30 +111,24 @@
         profile_attributes_storage_->ChooseNameForNewProfile(icon_index),
         icon_index,
         /*is_hidden=*/true,
-        base::BindRepeating(&AddAccountHelper::OnNewProfileCreated,
-                            weak_factory_.GetWeakPtr()));
+        base::BindOnce(&AddAccountHelper::OnNewProfileInitialized,
+                       weak_factory_.GetWeakPtr()));
   } else {
     OnShowAddAccountDialogCompletedWithProfilePath(profile_path);
   }
 }
 
-void AddAccountHelper::OnNewProfileCreated(Profile* new_profile,
-                                           Profile::CreateStatus status) {
+void AddAccountHelper::OnNewProfileInitialized(Profile* new_profile) {
   DCHECK(account_);
-  switch (status) {
-    case Profile::CREATE_STATUS_CREATED:
-      // Ignore this, wait for profile to be initialized.
-      return;
-    case Profile::CREATE_STATUS_INITIALIZED:
-      OnShowAddAccountDialogCompletedWithProfilePath(new_profile->GetPath());
-      return;
-    case Profile::CREATE_STATUS_LOCAL_FAIL:
-      NOTREACHED() << "Error creating new profile";
-      profile_path_ = base::FilePath();
-      MaybeCompleteAddAccount();
-      // `this` may be deleted.
-      return;
+  if (!new_profile) {
+    NOTREACHED() << "Error creating new profile";
+    profile_path_ = base::FilePath();
+    MaybeCompleteAddAccount();
+    // `this` may be deleted.
+    return;
   }
+
+  OnShowAddAccountDialogCompletedWithProfilePath(new_profile->GetPath());
 }
 
 void AddAccountHelper::OnShowAddAccountDialogCompletedWithProfilePath(
diff --git a/chrome/browser/lacros/account_manager/add_account_helper.h b/chrome/browser/lacros/account_manager/add_account_helper.h
index a62903c2..f4cc4f6 100644
--- a/chrome/browser/lacros/account_manager/add_account_helper.h
+++ b/chrome/browser/lacros/account_manager/add_account_helper.h
@@ -75,7 +75,7 @@
 
   // Called as part of the account addition flow, if the profile does not
   // already exist.
-  void OnNewProfileCreated(Profile* new_profile, Profile::CreateStatus status);
+  void OnNewProfileInitialized(Profile* new_profile);
 
   // Called after the user added and account and the profile exists.
   // `profile_path` must not be empty.
diff --git a/chrome/browser/lacros/browser_service_lacros.cc b/chrome/browser/lacros/browser_service_lacros.cc
index a8570adf..cb49d370 100644
--- a/chrome/browser/lacros/browser_service_lacros.cc
+++ b/chrome/browser/lacros/browser_service_lacros.cc
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/statistics_recorder.h"
 #include "base/ranges/algorithm.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/browser_process.h"
@@ -46,6 +47,7 @@
 #include "chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.h"
 #include "chrome/common/channel_info.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/tabs.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chromeos/crosapi/mojom/crosapi.mojom.h"
 #include "chromeos/lacros/lacros_service.h"
@@ -56,6 +58,7 @@
 #include "components/feedback/system_logs/system_logs_fetcher.h"
 #include "components/keep_alive_registry/keep_alive_types.h"
 #include "components/keep_alive_registry/scoped_keep_alive.h"
+#include "components/sessions/content/session_tab_helper.h"
 #include "content/public/browser/browser_thread.h"
 #include "google_apis/gaia/gaia_auth_util.h"
 #include "ui/platform_window/platform_window.h"
@@ -86,39 +89,31 @@
   std::move(callback).Run(proceed ? profile : nullptr);
 }
 
-// Helper function to handle profile loading errors.
-void OnMainProfileLoaded(base::OnceCallback<void(Profile*)>& callback,
-                         bool can_trigger_fre,
-                         Profile* profile,
-                         Profile::CreateStatus status) {
+// Helper function to handle profile initialization.
+void OnMainProfileInitialized(base::OnceCallback<void(Profile*)> callback,
+                              bool can_trigger_fre,
+                              Profile* profile) {
   DCHECK(callback);
-  switch (status) {
-    case Profile::CREATE_STATUS_LOCAL_FAIL:
-      LOG(ERROR) << "Profile creation failed.";
-      // Profile creation failed, show the profile picker instead.
-      ProfilePicker::Show(ProfilePicker::Params::FromEntryPoint(
-          ProfilePicker::EntryPoint::kNewSessionOnExistingProcess));
-      std::move(callback).Run(nullptr);
-      return;
-    case Profile::CREATE_STATUS_CREATED:
-      // Do nothing, wait for the profile to be fully initialized.
-      return;
-    case Profile::CREATE_STATUS_INITIALIZED:
-      DCHECK(profile);
+  if (!profile) {
+    LOG(ERROR) << "Profile creation failed.";
+    // Profile creation failed, show the profile picker instead.
+    ProfilePicker::Show(ProfilePicker::Params::FromEntryPoint(
+        ProfilePicker::EntryPoint::kNewSessionOnExistingProcess));
+    std::move(callback).Run(nullptr);
+    return;
+  }
 
-      auto* fre_service =
-          LacrosFirstRunServiceFactory::GetForBrowserContext(profile);
-      if (fre_service && can_trigger_fre && fre_service->ShouldOpenFirstRun()) {
-        // TODO(https://crbug.com/1313848): Consider taking a
-        // `ScopedProfileKeepAlive`.
-        fre_service->OpenFirstRunIfNeeded(
-            LacrosFirstRunService::EntryPoint::kOther,
-            base::BindOnce(&MaybeProceedWithProfile, std::move(callback),
-                           base::Unretained(profile)));
-      } else {
-        std::move(callback).Run(profile);
-      }
-      return;
+  auto* fre_service =
+      LacrosFirstRunServiceFactory::GetForBrowserContext(profile);
+  if (fre_service && can_trigger_fre && fre_service->ShouldOpenFirstRun()) {
+    // TODO(https://crbug.com/1313848): Consider taking a
+    // `ScopedProfileKeepAlive`.
+    fre_service->OpenFirstRunIfNeeded(
+        LacrosFirstRunService::EntryPoint::kOther,
+        base::BindOnce(&MaybeProceedWithProfile, std::move(callback),
+                       base::Unretained(profile)));
+  } else {
+    std::move(callback).Run(profile);
   }
 }
 
@@ -127,11 +122,8 @@
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   profile_manager->CreateProfileAsync(
       ProfileManager::GetPrimaryUserProfilePath(),
-      // Use base::OwnedRef as `OnMainProfileLoaded()` is called multiple
-      // times, but `callback` is only called once.
-      base::BindRepeating(&OnMainProfileLoaded,
-                          base::OwnedRef(std::move(callback)),
-                          can_trigger_fre));
+      base::BindOnce(&OnMainProfileInitialized, std::move(callback),
+                     can_trigger_fre));
 }
 
 NavigateParams::PathBehavior ConvertPathBehavior(
@@ -144,6 +136,34 @@
   }
 }
 
+// Find the browser containing the tab with ID |tab_id_str| or nullptr if none
+// is found within the given |profile|.
+Browser* FindBrowserWithTabId(const std::string& tab_id_str) {
+  if (tab_id_str.empty())
+    return nullptr;
+
+  int tab_id = -1;
+  if (!base::StringToInt(tab_id_str, &tab_id))
+    return nullptr;
+
+  if (tab_id == extensions::api::tabs::TAB_ID_NONE)
+    return nullptr;
+
+  for (auto* target_browser : *BrowserList::GetInstance()) {
+    TabStripModel* target_tab_strip = target_browser->tab_strip_model();
+    for (int i = 0; i < target_tab_strip->count(); ++i) {
+      content::WebContents* target_contents =
+          target_tab_strip->GetWebContentsAt(i);
+      if (sessions::SessionTabHelper::IdForTab(target_contents).id() ==
+          tab_id) {
+        return target_browser;
+      }
+    }
+  }
+
+  return nullptr;
+}
+
 }  // namespace
 
 // A struct to keep the pending OpenUrl task.
@@ -254,11 +274,20 @@
     const std::u16string& tab_id,
     const std::u16string& group_id,
     NewWindowForDetachingTabCallback callback) {
-  LoadMainProfile(
-      base::BindOnce(&BrowserServiceLacros::NewWindowForDetachingTabWithProfile,
-                     weak_ptr_factory_.GetWeakPtr(), tab_id, group_id,
-                     std::move(callback)),
-      /*can_trigger_fre=*/false);
+  auto* browser = FindBrowserWithTabId(base::UTF16ToUTF8(tab_id));
+  if (!browser) {
+    browser = tab_strip_ui::GetBrowserWithGroupId(/*profile=*/nullptr,
+                                                  base::UTF16ToUTF8(group_id));
+  }
+
+  if (!browser) {
+    std::move(callback).Run(crosapi::mojom::CreationResult::kUnknown,
+                            std::string());
+    return;
+  }
+
+  NewWindowForDetachingTabWithProfile(tab_id, group_id, std::move(callback),
+                                      browser->profile());
 }
 
 void BrowserServiceLacros::NewTab(bool should_trigger_session_restore,
diff --git a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/OWNERS b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/OWNERS
index 5d72310b..57c3d54 100644
--- a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/OWNERS
+++ b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/OWNERS
@@ -1,2 +1 @@
-twellington@google.com
 sinansahin@google.com
diff --git a/chrome/browser/mac/OWNERS b/chrome/browser/mac/OWNERS
index c271629d..163563f9 100644
--- a/chrome/browser/mac/OWNERS
+++ b/chrome/browser/mac/OWNERS
@@ -1,3 +1,2 @@
-borisv@chromium.org
 mark@chromium.org
 rsesek@chromium.org
diff --git a/chrome/browser/metrics/ukm_browsertest.cc b/chrome/browser/metrics/ukm_browsertest.cc
index b85a6806..f7105bbe 100644
--- a/chrome/browser/metrics/ukm_browsertest.cc
+++ b/chrome/browser/metrics/ukm_browsertest.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/metrics/testing/metrics_reporting_pref_helper.h"
 #include "chrome/browser/metrics/testing/sync_metrics_test_utils.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/sync/test/integration/secondary_account_helper.h"
@@ -200,17 +201,6 @@
 
 }  // namespace
 
-// An observer that returns back to test code after a new profile is
-// initialized.
-#if !BUILDFLAG(IS_ANDROID)
-void UnblockOnProfileCreation(base::RunLoop* run_loop,
-                              Profile* profile,
-                              Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-#endif  // !BUILDFLAG(IS_ANDROID)
-
 // A helper object for overriding metrics enabled state.
 class MetricsConsentOverride {
  public:
@@ -322,11 +312,8 @@
     ProfileManager* profile_manager = g_browser_process->profile_manager();
     base::FilePath new_path =
         profile_manager->GenerateNextProfileDirectoryPath();
-    base::RunLoop run_loop;
-    profile_manager->CreateProfileAsync(
-        new_path, base::BindRepeating(&UnblockOnProfileCreation, &run_loop));
-    run_loop.Run();
-    Profile* profile = profile_manager->GetProfileByPath(new_path);
+    Profile* profile =
+        profiles::testing::CreateProfileSync(profile_manager, new_path);
     SetupMockGaiaResponsesForProfile(profile);
     return profile;
   }
diff --git a/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc b/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc
index 1ce9dad..8198879 100644
--- a/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc
+++ b/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc
@@ -444,6 +444,23 @@
     return got_content_annotations;
   }
 
+  bool ModelAnnotationsFieldsAreSetForURL(const GURL& url) {
+    absl::optional<history::VisitContentAnnotations> got_content_annotations =
+        GetContentAnnotationsForURL(url);
+    // No content annotations -> no model annotations fields.
+    if (!got_content_annotations)
+      return false;
+
+    const history::VisitContentModelAnnotations& model_annotations =
+        got_content_annotations->model_annotations;
+
+    // Return true if any of the fields have non-empty/non-default values.
+    return (model_annotations.visibility_score !=
+            history::VisitContentModelAnnotations::kDefaultVisibilityScore) ||
+           !model_annotations.categories.empty() ||
+           !model_annotations.entities.empty();
+  }
+
   void Annotate(const HistoryVisit& visit) {
     PageContentAnnotationsService* service =
         PageContentAnnotationsServiceFactory::GetForProfile(
@@ -762,7 +779,10 @@
       "ContentAnnotationsStorageStatus",
       0);
 
-  EXPECT_FALSE(GetContentAnnotationsForURL(url).has_value());
+  // The ContentAnnotations should either not exist at all, or if they do
+  // (because some other code added some annotations), the model-related fields
+  // should be empty/unset.
+  EXPECT_FALSE(ModelAnnotationsFieldsAreSetForURL(url));
 }
 
 // Flaky on Linux Tests (dbg): crbug.com/1338408
@@ -897,7 +917,10 @@
       "ContentAnnotationsStorageStatus",
       0);
 
-  EXPECT_FALSE(GetContentAnnotationsForURL(url).has_value());
+  // The ContentAnnotations should either not exist at all, or if they do
+  // (because some other code added some annotations), the model-related fields
+  // should be empty/unset.
+  EXPECT_FALSE(ModelAnnotationsFieldsAreSetForURL(url));
 }
 
 class PageContentAnnotationsServiceBatchVisitNoAnnotateTest
@@ -980,7 +1003,10 @@
       "ContentAnnotationsStorageStatus",
       0);
 
-  EXPECT_FALSE(GetContentAnnotationsForURL(url).has_value());
+  // The ContentAnnotations should either not exist at all, or if they do
+  // (because some other code added some annotations), the model-related fields
+  // should be empty/unset.
+  EXPECT_FALSE(ModelAnnotationsFieldsAreSetForURL(url));
 }
 
 class PageContentAnnotationsServiceModelNotLoadedOnStartupTest
diff --git a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
index 5cc116c..72b35d4 100644
--- a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
+++ b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
@@ -10,7 +10,6 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
-#include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_run_loop_timeout.h"
@@ -24,6 +23,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -758,21 +758,9 @@
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath other_path =
       profile_manager->GenerateNextProfileDirectoryPath();
-
-  base::RunLoop run_loop;
-
   // Create an additional profile.
-  profile_manager->CreateProfileAsync(
-      other_path,
-      base::BindLambdaForTesting(
-          [&run_loop](Profile* profile, Profile::CreateStatus status) {
-            if (status == Profile::CREATE_STATUS_INITIALIZED)
-              run_loop.Quit();
-          }));
-
-  run_loop.Run();
-
-  Profile* profile = profile_manager->GetProfileByPath(other_path);
+  Profile* profile =
+      profiles::testing::CreateProfileSync(profile_manager, other_path);
   ASSERT_TRUE(profile);
   CreateBrowser(profile);
 }
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
index a8ddafd3..d820c42 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
@@ -245,6 +245,7 @@
   UpdateMainFrameRequestHadCookie(
       navigation_handle->GetWebContents()->GetBrowserContext(),
       navigation_handle->GetURL());
+  was_discarded_ = navigation_handle->ExistingDocumentWasDiscarded();
 
   return CONTINUE_OBSERVING;
 }
@@ -863,6 +864,9 @@
   if (GetDelegate().DidCommit() && was_cached_) {
     builder.SetWasCached(1);
   }
+  if (GetDelegate().DidCommit() && was_discarded_) {
+    builder.SetWasDiscarded(true);
+  }
   if (GetDelegate().DidCommit() && navigation_is_cross_process_) {
     builder.SetIsCrossProcessNavigation(navigation_is_cross_process_);
   }
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h
index 351da4c6..f22e832 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h
@@ -254,6 +254,9 @@
   // True if the page main resource was served from disk cache.
   bool was_cached_ = false;
 
+  // True if the navigation is a reload after the page has been discarded.
+  bool was_discarded_ = false;
+
   // Whether the first URL in the redirect chain matches the default search
   // engine template.
   bool start_url_is_default_search_ = false;
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
index 3dab9bc..3f653a36 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
@@ -345,6 +345,8 @@
             kExperimental_PaintTiming_NavigationToFirstMeaningfulPaintName));
     EXPECT_TRUE(tester()->test_ukm_recorder().EntryHasMetric(
         kv.second.get(), PageLoad::kPageTiming_ForegroundDurationName));
+    EXPECT_FALSE(tester()->test_ukm_recorder().EntryHasMetric(
+        kv.second.get(), PageLoad::kWasDiscardedName));
   }
   std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> pagevisit_entries =
       tester()->test_ukm_recorder().GetMergedEntriesByName(
@@ -2917,3 +2919,19 @@
             result_metrics[0].begin()->first);
   EXPECT_FALSE(result_metrics[0].begin()->second);
 }
+
+TEST_F(UkmPageLoadMetricsObserverTest, TestWasDiscarded) {
+  web_contents()->SetWasDiscarded(true);
+  NavigateAndCommit(GURL(kTestUrl1));
+
+  // Simulate closing the tab.
+  DeleteContents();
+
+  const auto& ukm_recorder = tester()->test_ukm_recorder();
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      ukm_recorder.GetMergedEntriesByName(PageLoad::kEntryName);
+  EXPECT_EQ(1ul, merged_entries.size());
+  const ukm::mojom::UkmEntry* entry = merged_entries.begin()->second.get();
+  tester()->test_ukm_recorder().ExpectEntryMetric(
+      entry, PageLoad::kWasDiscardedName, 1);
+}
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index 817210a..3549bf4 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -26,6 +26,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/device_reauth/chrome_biometric_authenticator_factory.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
+#include "chrome/browser/history/history_tab_helper.h"
 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
 #include "chrome/browser/password_manager/account_password_store_factory.h"
 #include "chrome/browser/password_manager/field_info_manager_factory.h"
@@ -873,6 +874,10 @@
 
   if (new_state > old_state) {
     SetPasswordStateInNavigation(new_state, entry);
+    if (HistoryTabHelper* history_tab_helper =
+            HistoryTabHelper::FromWebContents(web_contents())) {
+      history_tab_helper->OnPasswordStateUpdated(new_state);
+    }
   }
 }
 
diff --git a/chrome/browser/policy/extension_policy_browsertest.cc b/chrome/browser/policy/extension_policy_browsertest.cc
index 3cd83f8..bab873a0 100644
--- a/chrome/browser/policy/extension_policy_browsertest.cc
+++ b/chrome/browser/policy/extension_policy_browsertest.cc
@@ -37,6 +37,7 @@
 #include "chrome/browser/policy/policy_test_utils.h"
 #include "chrome/browser/policy/profile_policy_connector_builder.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
@@ -98,18 +99,6 @@
 using testing::Sequence;
 
 namespace policy {
-
-// Called when an additional profile has been created.
-// The created profile is stored in *|out_created_profile|.
-void OnProfileInitialized(Profile** out_created_profile,
-                          base::RunLoop* run_loop,
-                          Profile* profile,
-                          Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED) {
-    *out_created_profile = profile;
-    run_loop->Quit();
-  }
-}
 namespace {
 
 const base::FilePath::CharType kGoodCrxName[] = FILE_PATH_LITERAL("good.crx");
@@ -2513,24 +2502,13 @@
         .WillByDefault(testing::Return(true));
     ON_CALL(*policy_for_profile, IsFirstPolicyLoadComplete(testing::_))
         .WillByDefault(testing::Return(true));
-    Profile* profile = nullptr;
     policy::PushProfilePolicyConnectorProviderForTesting(policy_for_profile);
 
     ProfileManager* profile_manager = g_browser_process->profile_manager();
-
-    // Create an additional profile.
     base::FilePath path_profile =
         profile_manager->GenerateNextProfileDirectoryPath();
-    base::RunLoop run_loop;
-    profile_manager->CreateProfileAsync(
-        path_profile, base::BindRepeating(&policy::OnProfileInitialized,
-                                          &profile, &run_loop));
-
-    // Run the message loop to allow profile creation to take place; the loop is
-    // terminated by OnProfileInitialized calling the loop's QuitClosure when
-    // the profile is created.
-    run_loop.Run();
-    return profile;
+    // Create an additional profile.
+    return profiles::testing::CreateProfileSync(profile_manager, path_profile);
   }
 
   extensions::ExtensionService* CreateExtensionService(
diff --git a/chrome/browser/policy/policy_network_browsertest.cc b/chrome/browser/policy/policy_network_browsertest.cc
index bf831822..895035d6 100644
--- a/chrome/browser/policy/policy_network_browsertest.cc
+++ b/chrome/browser/policy/policy_network_browsertest.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/policy/profile_policy_connector_builder.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
 #include "chrome/browser/ui/browser.h"
@@ -91,18 +92,6 @@
       g_browser_process->safe_browsing_service()->GetNetworkContext(profile));
 }
 
-// Called when an additional profile has been created.
-// The created profile is stored in *|out_created_profile|.
-void OnProfileInitialized(Profile** out_created_profile,
-                          base::RunLoop* run_loop,
-                          Profile* profile,
-                          Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED) {
-    *out_created_profile = profile;
-    run_loop->Quit();
-  }
-}
-
 }  // namespace
 
 namespace policy {
@@ -382,19 +371,11 @@
         &policy_for_profile_2_);
 
     ProfileManager* profile_manager = g_browser_process->profile_manager();
-
-    // Create an additional profile.
     base::FilePath path_profile =
         profile_manager->GenerateNextProfileDirectoryPath();
-    base::RunLoop run_loop;
-    profile_manager->CreateProfileAsync(
-        path_profile,
-        base::BindRepeating(&OnProfileInitialized, &profile_2_, &run_loop));
-
-    // Run the message loop to allow profile creation to take place; the loop is
-    // terminated by OnProfileInitialized calling the loop's QuitClosure when
-    // the profile is created.
-    run_loop.Run();
+    // Create an additional profile.
+    profile_2_ =
+        profiles::testing::CreateProfileSync(profile_manager, path_profile);
 
     // Make sure second profile creation does what we think it does.
     EXPECT_TRUE(profile_1() != profile_2());
diff --git a/chrome/browser/policy/test/policy_certs_browsertest.cc b/chrome/browser/policy/test/policy_certs_browsertest.cc
index c3f88f1d..640e5096 100644
--- a/chrome/browser/policy/test/policy_certs_browsertest.cc
+++ b/chrome/browser/policy/test/policy_certs_browsertest.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/policy/profile_policy_connector_builder.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/common/chrome_paths.h"
@@ -331,19 +332,11 @@
         &policy_for_profile_2_);
 
     ProfileManager* profile_manager = g_browser_process->profile_manager();
-
-    // Create an additional profile.
     base::FilePath path_profile =
         profile_manager->GenerateNextProfileDirectoryPath();
-    base::RunLoop run_loop;
-    profile_manager->CreateProfileAsync(
-        path_profile, base::BindRepeating(&OnProfileInitialized, &profile_2_,
-                                          run_loop.QuitClosure()));
-
-    // Run the message loop to allow profile creation to take place; the loop is
-    // terminated by OnProfileInitialized calling the loop's QuitClosure when
-    // the profile is created.
-    run_loop.Run();
+    // Create an additional profile.
+    profile_2_ =
+        profiles::testing::CreateProfileSync(profile_manager, path_profile);
 
     // Make sure second profile creation does what we think it does.
     ASSERT_TRUE(profile_1() != profile_2());
@@ -363,17 +356,6 @@
   }
 
  private:
-  // Called when an additional profile has been created.
-  // The created profile is stored in *|out_created_profile|.
-  static void OnProfileInitialized(Profile** out_created_profile,
-                                   base::OnceClosure closure,
-                                   Profile* profile,
-                                   Profile::CreateStatus status) {
-    if (status == Profile::CREATE_STATUS_INITIALIZED) {
-      *out_created_profile = profile;
-      std::move(closure).Run();
-    }
-  }
   raw_ptr<Profile> profile_1_ = nullptr;
   Profile* profile_2_ = nullptr;
 
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.cc b/chrome/browser/profiles/profile_avatar_icon_util.cc
index 9ec396bb..fe2dc7a 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util.cc
+++ b/chrome/browser/profiles/profile_avatar_icon_util.cc
@@ -26,10 +26,15 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/avatar_menu.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/signin/profile_colors_util.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/common/chrome_paths.h"
+#include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
+#include "components/prefs/pref_service.h"
 #include "skia/ext/image_operations.h"
 #include "third_party/skia/include/core/SkPaint.h"
 #include "third_party/skia/include/core/SkPath.h"
@@ -640,6 +645,62 @@
   return interval_begin + random_offset;
 }
 
+#if !BUILDFLAG(IS_ANDROID)
+base::Value::List GetIconsAndLabelsForProfileAvatarSelector(
+    const base::FilePath& profile_path) {
+  ProfileAttributesEntry* entry =
+      g_browser_process->profile_manager()
+          ->GetProfileAttributesStorage()
+          .GetProfileAttributesWithPath(profile_path);
+  DCHECK(entry);
+
+  bool using_gaia = entry->IsUsingGAIAPicture();
+  size_t selected_avatar_idx =
+      using_gaia ? SIZE_MAX : entry->GetAvatarIconIndex();
+
+  // Obtain a list of the modern avatar icons.
+  base::Value::List avatars(
+      GetCustomProfileAvatarIconsAndLabels(selected_avatar_idx));
+
+  if (entry->GetSigninState() == SigninState::kNotSignedIn) {
+    ProfileThemeColors colors = entry->GetProfileThemeColors();
+    auto generic_avatar_info = GetDefaultProfileAvatarIconAndLabel(
+        colors.default_avatar_fill_color, colors.default_avatar_stroke_color,
+        selected_avatar_idx == GetPlaceholderAvatarIndex());
+    avatars.Insert(avatars.begin(),
+                   base::Value(std::move(generic_avatar_info)));
+    return avatars;
+  }
+
+  // Add the GAIA picture to the beginning of the list if it is available.
+  const gfx::Image* icon = entry->GetGAIAPicture();
+  if (icon) {
+    gfx::Image avatar_icon = GetAvatarIconForWebUI(*icon);
+    auto gaia_picture_info = GetAvatarIconAndLabelDict(
+        /*url=*/webui::GetBitmapDataUrl(avatar_icon.AsBitmap()),
+        /*label=*/
+        l10n_util::GetStringUTF16(IDS_SETTINGS_CHANGE_PICTURE_PROFILE_PHOTO),
+        /*index=*/0, using_gaia, /*is_gaia_avatar=*/true);
+    avatars.Insert(avatars.begin(), base::Value(std::move(gaia_picture_info)));
+  }
+
+  return avatars;
+}
+#endif  // !BUILDFLAG(IS_ANDROID)
+
+void SetDefaultProfileAvatarIndex(Profile* profile, size_t avatar_icon_index) {
+  CHECK(IsDefaultAvatarIconIndex(avatar_icon_index));
+
+  PrefService* pref_service = profile->GetPrefs();
+  pref_service->SetInteger(prefs::kProfileAvatarIndex, avatar_icon_index);
+  pref_service->SetBoolean(prefs::kProfileUsingDefaultAvatar,
+                           avatar_icon_index == GetPlaceholderAvatarIndex());
+  pref_service->SetBoolean(prefs::kProfileUsingGAIAAvatar, false);
+
+  ProfileMetrics::LogProfileAvatarSelection(avatar_icon_index);
+  ProfileMetrics::LogProfileUpdate(profile->GetPath());
+}
+
 #if BUILDFLAG(IS_WIN)
 SkBitmap GetWin2xAvatarImage(ProfileAttributesEntry* entry) {
   // Request just one size large enough for all uses.
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.h b/chrome/browser/profiles/profile_avatar_icon_util.h
index 42dd006..ab70fd6 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util.h
+++ b/chrome/browser/profiles/profile_avatar_icon_util.h
@@ -27,6 +27,7 @@
 class Image;
 }
 
+class Profile;
 class ProfileAttributesEntry;
 class SkBitmap;
 
@@ -171,6 +172,17 @@
 size_t GetRandomAvatarIconIndex(
     const std::unordered_set<size_t>& used_icon_indices);
 
+#if !BUILDFLAG(IS_ANDROID)
+// Get all the available profile icons to choose from for a specific profile
+// with |profile_path|.
+base::Value::List GetIconsAndLabelsForProfileAvatarSelector(
+    const base::FilePath& profile_path);
+#endif  // !BUILDFLAG(IS_ANDROID)
+
+// Set the default profile avatar icon index to |avatar_icon_index| for a
+// specific |profile|.
+void SetDefaultProfileAvatarIndex(Profile* profile, size_t avatar_icon_index);
+
 #if BUILDFLAG(IS_WIN)
 // Get the 2x avatar image for a ProfileAttributesEntry.
 SkBitmap GetWin2xAvatarImage(ProfileAttributesEntry* entry);
diff --git a/chrome/browser/profiles/profile_list_desktop_browsertest.cc b/chrome/browser/profiles/profile_list_desktop_browsertest.cc
index 4f13ab8..03f997d1 100644
--- a/chrome/browser/profiles/profile_list_desktop_browsertest.cc
+++ b/chrome/browser/profiles/profile_list_desktop_browsertest.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/ui/browser.h"
@@ -26,18 +27,6 @@
 #include "content/public/test/browser_test.h"
 #include "content/public/test/test_utils.h"
 
-namespace {
-
-// An observer that returns back to test code after a new profile is
-// initialized.
-void OnUnblockOnProfileCreation(Profile* profile,
-                                Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    base::RunLoop::QuitCurrentWhenIdleDeprecated();
-}
-
-}  // namespace
-
 class ProfileListDesktopBrowserTest : public InProcessBrowserTest {
  public:
   ProfileListDesktopBrowserTest() {}
@@ -72,15 +61,11 @@
       profile_manager->GetProfileAttributesStorage();
   base::FilePath path_profile1 = browser()->profile()->GetPath();
 
-  // Create an additional profile.
   base::FilePath path_profile2 = profile_manager->user_data_dir().Append(
       FILE_PATH_LITERAL("New Profile 2"));
-  profile_manager->CreateProfileAsync(
-      path_profile2, base::BindRepeating(&OnUnblockOnProfileCreation));
+  // Create an additional profile.
+  profiles::testing::CreateProfileSync(profile_manager, path_profile2);
 
-  // Spin to allow profile creation to take place, loop is terminated
-  // by OnUnblockOnProfileCreation when the profile is created.
-  content::RunMessageLoop();
   ASSERT_EQ(2u, storage.GetNumberOfProfiles());
 
   std::unique_ptr<AvatarMenu> menu = CreateAvatarMenu(&storage);
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index eb08e8d..505919b7 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -393,27 +393,17 @@
 
 #endif  // ENABLE_EXTENSIONS
 
-// Once a profile is loaded through LoadProfile this method is executed.
-// It will then run |client_callback| with the right profile or null if it was
-// unable to load it.
-// It might get called more than once with different values of
-// |status| but only once the profile is fully initialized will
-// |client_callback| be run.
-void OnProfileLoaded(ProfileManager::ProfileLoadedCallback& client_callback,
-                     bool incognito,
-                     Profile* profile,
-                     Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_CREATED) {
-    // This is an intermediate state where the profile has been created, but is
-    // not yet initialized. Ignore this and wait for the next state change.
-    return;
-  }
-  if (status != Profile::CREATE_STATUS_INITIALIZED) {
+// Once a profile is initialized through LoadProfile this method is executed.
+// It will then run |client_callback| with the right profile.
+void OnProfileInitialized(ProfileManager::ProfileLoadedCallback client_callback,
+                          bool incognito,
+                          Profile* profile) {
+  if (!profile) {
     LOG(WARNING) << "Profile not loaded correctly";
     std::move(client_callback).Run(nullptr);
     return;
   }
-  DCHECK(profile);
+
   std::move(client_callback)
       .Run(incognito ? profile->GetPrimaryOTRProfile(/*create_if_needed=*/true)
                      : profile);
@@ -518,6 +508,12 @@
 }
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
+void RunCallbacks(std::vector<base::OnceCallback<void(Profile*)>>& callbacks,
+                  Profile* profile) {
+  for (base::OnceCallback<void(Profile*)>& callback : callbacks)
+    std::move(callback).Run(profile);
+}
+
 }  // namespace
 
 ProfileManager::ProfileManager(const base::FilePath& user_data_dir)
@@ -649,24 +645,6 @@
   return MaybeForceOffTheRecordMode(GetLastUsedProfile());
 }
 
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
-// static
-void ProfileManager::LoadLastUsedProfileAllowedByPolicy(
-    ProfileLoadedCallback callback) {
-  ProfileManager* profile_manager = g_browser_process->profile_manager();
-  ProfileLoadedCallback callback_with_incognito =
-      base::BindOnce(&ProfileManager::MaybeForceOffTheRecordMode)
-          .Then(std::move(callback));
-  profile_manager->CreateProfileAsync(
-      profile_manager->GetLastUsedProfileDir(),
-      base::BindRepeating(&OnProfileLoaded,
-                          // OnProfileLoaded may be called multiple times, but
-                          // |callback_with_incognito| will be called only once.
-                          base::OwnedRef(std::move(callback_with_incognito)),
-                          /*incognito=*/false));
-}
-#endif
-
 // static
 Profile* ProfileManager::MaybeForceOffTheRecordMode(Profile* profile) {
   if (!profile)
@@ -837,22 +815,21 @@
   }
   CreateProfileAsync(
       profile_path,
-      base::BindRepeating(&OnProfileLoaded,
-                          // OnProfileLoaded may be called multiple times, but
-                          // |callback| will be called only once.
-                          base::OwnedRef(std::move(callback)), incognito));
+      base::BindOnce(&OnProfileInitialized, std::move(callback), incognito));
   return true;
 }
 
-void ProfileManager::CreateProfileAsync(const base::FilePath& profile_path,
-                                        const CreateCallback& callback) {
+void ProfileManager::CreateProfileAsync(
+    const base::FilePath& profile_path,
+    base::OnceCallback<void(Profile*)> initialized_callback,
+    base::OnceCallback<void(Profile*)> created_callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   TRACE_EVENT1("browser,startup", "ProfileManager::CreateProfileAsync",
                "profile_path", profile_path.AsUTF8Unsafe());
 
   if (!CanCreateProfileAtPath(profile_path)) {
-    if (!callback.is_null())
-      callback.Run(nullptr, Profile::CREATE_STATUS_LOCAL_FAIL);
+    if (!initialized_callback.is_null())
+      std::move(initialized_callback).Run(nullptr);
     return;
   }
 
@@ -868,7 +845,7 @@
   }
 
   // Call or enqueue the callback.
-  if (!callback.is_null()) {
+  if (!initialized_callback.is_null() || !created_callback.is_null()) {
     if (iter != profiles_info_.end() && info->GetCreatedProfile()) {
       Profile* profile = info->GetCreatedProfile();
       // If this was the Guest profile, apply settings and go OffTheRecord.
@@ -880,11 +857,15 @@
       }
 
       // Profile has already been created. Run callback immediately.
-      callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED);
+      if (!initialized_callback.is_null())
+        std::move(initialized_callback).Run(profile);
     } else {
       // Profile is either already in the process of being created, or new.
       // Add callback to the list.
-      info->callbacks.push_back(callback);
+      if (!initialized_callback.is_null())
+        info->init_callbacks.push_back(std::move(initialized_callback));
+      if (!created_callback.is_null())
+        info->created_callbacks.push_back(std::move(created_callback));
     }
   }
 }
@@ -996,10 +977,12 @@
 }
 
 // static
-void ProfileManager::CreateMultiProfileAsync(const std::u16string& name,
-                                             size_t icon_index,
-                                             bool is_hidden,
-                                             const CreateCallback& callback) {
+void ProfileManager::CreateMultiProfileAsync(
+    const std::u16string& name,
+    size_t icon_index,
+    bool is_hidden,
+    base::OnceCallback<void(Profile*)> initialized_callback,
+    base::OnceCallback<void(Profile*)> created_callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   DCHECK(!name.empty());
   DCHECK(profiles::IsDefaultAvatarIconIndex(icon_index));
@@ -1039,7 +1022,8 @@
 
   if (!base::FeatureList::IsEnabled(
           features::kNukeProfileBeforeCreateMultiAsync)) {
-    profile_manager->CreateProfileAsync(new_path, callback);
+    profile_manager->CreateProfileAsync(
+        new_path, std::move(initialized_callback), std::move(created_callback));
     return;
   }
 
@@ -1057,7 +1041,8 @@
       base::BindOnce(&NukeProfileFromDisk, new_path,
                      base::BindOnce(&ProfileManager::CreateProfileAsync,
                                     profile_manager->weak_factory_.GetWeakPtr(),
-                                    new_path, callback)));
+                                    new_path, std::move(initialized_callback),
+                                    std::move(created_callback))));
 }
 
 // static
@@ -1964,13 +1949,16 @@
     return;
   }
 
-  std::vector<CreateCallback> callbacks;
-  info->callbacks.swap(callbacks);
+  std::vector<base::OnceCallback<void(Profile*)>> created_callbacks;
+  info->created_callbacks.swap(created_callbacks);
+
+  std::vector<base::OnceCallback<void(Profile*)>> init_callbacks;
+  info->init_callbacks.swap(init_callbacks);
 
   // Invoke CREATED callback for normal profiles.
   bool go_off_the_record = ShouldGoOffTheRecord(profile);
   if (success && !go_off_the_record)
-    RunCallbacks(callbacks, profile, Profile::CREATE_STATUS_CREATED);
+    RunCallbacks(created_callbacks, profile);
 
   // Perform initialization.
   if (success) {
@@ -1990,13 +1978,12 @@
 
     // Invoke CREATED callback for incognito profiles.
     if (go_off_the_record)
-      RunCallbacks(callbacks, profile, Profile::CREATE_STATUS_CREATED);
+      RunCallbacks(created_callbacks, profile);
   }
 
-  // Invoke INITIALIZED or FAIL for all profiles.
-  RunCallbacks(callbacks, profile,
-               profile ? Profile::CREATE_STATUS_INITIALIZED
-                       : Profile::CREATE_STATUS_LOCAL_FAIL);
+  // Invoke INITIALIZED for all profiles.
+  // Profile might be null, meaning that the creation failed.
+  RunCallbacks(init_callbacks, profile);
 }
 
 void ProfileManager::OnProfileCreationStarted(Profile* profile,
@@ -2034,8 +2021,8 @@
     base::FilePath cur_path = profile->GetPath();
     if (cur_path != profile_dir && cur_path != guest_profile_path &&
         !IsProfileDirectoryMarkedForDeletion(cur_path)) {
-      OnNewActiveProfileLoaded(profile_dir, cur_path, &callback, nullptr,
-                               profile, Profile::CREATE_STATUS_INITIALIZED);
+      OnNewActiveProfileInitialized(profile_dir, cur_path, std::move(callback),
+                                    nullptr, profile);
       return;
     }
   }
@@ -2073,14 +2060,9 @@
   // Create and/or load fallback profile.
   CreateProfileAsync(
       fallback_profile_path,
-      base::BindRepeating(
-          &ProfileManager::OnNewActiveProfileLoaded, base::Unretained(this),
-          profile_dir, fallback_profile_path,
-          // OnNewActiveProfileLoaded may be called several times, but
-          // only once with CREATE_STATUS_INITIALIZED.
-          base::Owned(
-              std::make_unique<ProfileLoadedCallback>(std::move(callback))),
-          base::Owned(std::move(keep_alive))));
+      base::BindOnce(&ProfileManager::OnNewActiveProfileInitialized,
+                     base::Unretained(this), profile_dir, fallback_profile_path,
+                     std::move(callback), std::move(keep_alive)));
 }
 
 void ProfileManager::OnLoadProfileForProfileDeletion(
@@ -2353,13 +2335,6 @@
   return profile->IsGuestSession() || profile->IsSystemProfile();
 }
 
-void ProfileManager::RunCallbacks(const std::vector<CreateCallback>& callbacks,
-                                  Profile* profile,
-                                  Profile::CreateStatus status) {
-  for (size_t i = 0; i < callbacks.size(); ++i)
-    callbacks[i].Run(profile, status);
-}
-
 void ProfileManager::SaveActiveProfiles() {
   PrefService* local_state = g_browser_process->local_state();
   DCHECK(local_state);
@@ -2534,30 +2509,24 @@
   profile_manager_->UpdateLastUser(last_active);
 }
 
-void ProfileManager::OnNewActiveProfileLoaded(
+void ProfileManager::OnNewActiveProfileInitialized(
     const base::FilePath& profile_to_delete_path,
     const base::FilePath& new_active_profile_path,
-    ProfileLoadedCallback* callback,
-    ScopedKeepAlive* keep_alive,
-    Profile* loaded_profile,
-    Profile::CreateStatus status) {
-  DCHECK_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL);
-
-  // Only run the code if the profile initialization has finished completely.
-  if (status != Profile::CREATE_STATUS_INITIALIZED)
-    return;
-
+    ProfileLoadedCallback callback,
+    std::unique_ptr<ScopedKeepAlive> keep_alive,
+    Profile* loaded_profile) {
+  DCHECK(loaded_profile);
   if (IsProfileDirectoryMarkedForDeletion(new_active_profile_path)) {
     // If the profile we tried to load as the next active profile has been
     // deleted, then retry deleting this profile to redo the logic to load
     // the next available profile.
-    EnsureActiveProfileExistsBeforeDeletion(std::move(*callback),
+    EnsureActiveProfileExistsBeforeDeletion(std::move(callback),
                                             profile_to_delete_path);
     return;
   }
 
   FinishDeletingProfile(profile_to_delete_path, new_active_profile_path);
-  std::move(*callback).Run(loaded_profile);
+  std::move(callback).Run(loaded_profile);
 }
 
 void ProfileManager::OnClosingAllBrowsersChanged(bool closing) {
diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles/profile_manager.h
index 0f3e28ba..f2efd10 100644
--- a/chrome/browser/profiles/profile_manager.h
+++ b/chrome/browser/profiles/profile_manager.h
@@ -50,8 +50,6 @@
 // is closed. The DestroyProfileOnBrowserClose flag controls this behavior.
 class ProfileManager : public Profile::Delegate {
  public:
-  using CreateCallback =
-      base::RepeatingCallback<void(Profile*, Profile::CreateStatus)>;
   using ProfileLoadedCallback = base::OnceCallback<void(Profile*)>;
 
   explicit ProfileManager(const base::FilePath& user_data_dir);
@@ -87,20 +85,9 @@
   // incognito mode is forced. This should be used if the last used `Profile`
   // will be used to open new browser windows.
   // WARNING: if the `Profile` does not exist, this function creates it
-  // synchronously, causing blocking file I/O. Use
-  // `LoadLastUsedProfileAllowedByPolicy()` instead.
+  // synchronously, causing blocking file I/O.
   static Profile* GetLastUsedProfileAllowedByPolicy();
 
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
-  // Same as `GetLastUsedProfileAllowedByPolicy()`, but asynchronously loads the
-  // `Profile` if it's not already loaded.
-  // TODO(https://crbug.com/1176734): Implement on Ash. Requires handling the
-  // cases where the user is not logged in, and implementing an asynchronous
-  // version of `GetActiveUserOrOffTheRecordProfile()`.
-  static void LoadLastUsedProfileAllowedByPolicy(
-      ProfileLoadedCallback callback);
-#endif
-
   // Helper function that returns the OffTheRecord profile if it is forced for
   // `profile` (normal mode is not available for browsing).
   // Returns nullptr if `profile` is nullptr.
@@ -178,10 +165,19 @@
                          ProfileLoadedCallback callback);
 
   // Explicit asynchronous creation of a profile located at |profile_path|.
-  // If the profile has already been created then callback is called
-  // immediately. Should be called on the UI thread.
-  void CreateProfileAsync(const base::FilePath& profile_path,
-                          const CreateCallback& callback);
+  // Should be called on the UI thread.
+  // Params:
+  // - `initialized_callback`: called when profile initialization is done, will
+  // return nullptr if failed. If the profile has already been fully loaded then
+  // this callback is called immediately.
+  // - `created_callback`: called when profile creation is done (default
+  // implementation to do nothing).
+  // Note: Refer to `Profile::CreateStatus` for the definition of CREATED and
+  // INITIALIZED profile creation status.
+  void CreateProfileAsync(
+      const base::FilePath& profile_path,
+      base::OnceCallback<void(Profile*)> initialized_callback,
+      base::OnceCallback<void(Profile*)> created_callback = {});
 
   // Returns true if the profile pointer is known to point to an existing
   // profile.
@@ -217,15 +213,23 @@
   // directory. Directories are named "profile_1", "profile_2", etc., in
   // sequence of creation. (Because directories can be removed, however, it may
   // be the case that at some point the list of numbered profiles is not
-  // continuous.) |callback| may be invoked multiple times (for
-  // CREATE_STATUS_INITIALIZED and CREATE_STATUS_CREATED) so binding parameters
-  // with bind::Passed() is prohibited. If |is_hidden| is true, the new profile
+  // continuous.) If |is_hidden| is true, the new profile
   // will be created as ephemeral (removed on the next startup) and omitted (not
   // visible in the list of profiles).
-  static void CreateMultiProfileAsync(const std::u16string& name,
-                                      size_t icon_index,
-                                      bool is_hidden,
-                                      const CreateCallback& callback);
+  // Params:
+  // - `initialized_callback`: called when profile initialization is done, will
+  // return nullptr if failed. If the profile has already been fully loaded then
+  // this callback is called immediately.
+  // - `created_callback`: called when profile creation is done (default
+  // implementation to do nothing).
+  // Note: Refer to `Profile::CreateStatus` for the definition of CREATED and
+  // INITIALIZED profile creation status.
+  static void CreateMultiProfileAsync(
+      const std::u16string& name,
+      size_t icon_index,
+      bool is_hidden,
+      base::OnceCallback<void(Profile*)> initialized_callback,
+      base::OnceCallback<void(Profile*)> created_callback = {});
 
   // Returns the full path to be used for guest profiles.
   static base::FilePath GetGuestProfilePath();
@@ -410,9 +414,12 @@
     // Initially contains a kWaitingForFirstBrowserWindow entry, which gets
     // removed when a kBrowserWindow keepalive is added.
     std::map<ProfileKeepAliveOrigin, int> keep_alives;
-    // List of callbacks to run when profile initialization is done. Note, when
+    // List of callbacks to run when profile initialization (success or fail) is
+    // done. Note, when profile is fully loaded this vector will be empty.
+    std::vector<base::OnceCallback<void(Profile*)>> init_callbacks;
+    // List of callbacks to run when profile is created. Note, when
     // profile is fully loaded this vector will be empty.
-    std::vector<CreateCallback> callbacks;
+    std::vector<base::OnceCallback<void(Profile*)>> created_callbacks;
 
    private:
     // Callers should use FromOwned/UnownedProfile() instead.
@@ -530,10 +537,6 @@
   // Determines if profile should be OTR.
   bool ShouldGoOffTheRecord(Profile* profile);
 
-  void RunCallbacks(const std::vector<CreateCallback>& callbacks,
-                    Profile* profile,
-                    Profile::CreateStatus status);
-
   void SaveActiveProfiles();
 
 #if !BUILDFLAG(IS_ANDROID)
@@ -562,19 +565,17 @@
     raw_ptr<ProfileManager> profile_manager_;
   };
 
-  // If the `loaded_profile` has been loaded successfully (according to
-  // `status`) and isn't already scheduled for deletion, then finishes adding
-  // `profile_to_delete_dir` to the queue of profiles to be deleted, and updates
-  // the kProfileLastUsed preference based on
-  // `last_non_supervised_profile_path`. `keep_alive` may be null and is used
-  // to ensure shutdown does not start.
-  void OnNewActiveProfileLoaded(
+  // If the `loaded_profile` has been loaded successfully and isn't already
+  // scheduled for deletion, then finishes adding `profile_to_delete_dir` to the
+  // queue of profiles to be deleted, and updates the kProfileLastUsed
+  // preference based on `last_non_supervised_profile_path`. `keep_alive` may be
+  // null and is used to ensure shutdown does not start.
+  void OnNewActiveProfileInitialized(
       const base::FilePath& profile_to_delete_path,
       const base::FilePath& last_non_supervised_profile_path,
-      ProfileLoadedCallback* callback,
-      ScopedKeepAlive* keep_alive,
-      Profile* loaded_profile,
-      Profile::CreateStatus status);
+      ProfileLoadedCallback callback,
+      std::unique_ptr<ScopedKeepAlive> keep_alive,
+      Profile* loaded_profile);
 
   void OnClosingAllBrowsersChanged(bool closing);
 #endif  // !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/profiles/profile_manager_browsertest.cc b/chrome/browser/profiles/profile_manager_browsertest.cc
index b127f0ee..2025e4e 100644
--- a/chrome/browser/profiles/profile_manager_browsertest.cc
+++ b/chrome/browser/profiles/profile_manager_browsertest.cc
@@ -72,24 +72,13 @@
 
 namespace {
 
-// An observer that returns back to test code after a new profile is
-// initialized.
-void OnUnblockOnProfileCreation(base::RunLoop* run_loop,
-                                Profile* profile,
-                                Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-
 void ProfileCreationComplete(base::OnceClosure completion_callback,
-                             Profile* profile,
-                             Profile::CreateStatus status) {
-  ASSERT_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL);
+                             Profile* profile) {
+  ASSERT_TRUE(profile);
   // No browser should have been created for this profile yet.
   EXPECT_EQ(chrome::GetBrowserCount(profile), 0U);
   EXPECT_EQ(chrome::GetTotalBrowserCount(), 1U);
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    std::move(completion_callback).Run();
+  std::move(completion_callback).Run();
 }
 
 // An observer that returns back to test code after one or more profiles was
@@ -169,11 +158,10 @@
 };
 
 void EphemeralProfileCreationComplete(base::OnceClosure completion_callback,
-                                      Profile* profile,
-                                      Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
+                                      Profile* profile) {
+  if (profile)
     profile->GetPrefs()->SetBoolean(prefs::kForceEphemeralProfiles, true);
-  ProfileCreationComplete(std::move(completion_callback), profile, status);
+  ProfileCreationComplete(std::move(completion_callback), profile);
 }
 
 class ProfileRemovalObserver : public ProfileAttributesStorage::Observer {
@@ -564,8 +552,7 @@
   ProfileManager::CreateMultiProfileAsync(
       u"New Profile",
       /*icon_index=*/0, /*is_hidden=*/false,
-      base::BindRepeating(&ProfileCreationComplete,
-                          run_loop.QuitWhenIdleClosure()));
+      base::BindOnce(&ProfileCreationComplete, run_loop.QuitWhenIdleClosure()));
   run_loop.Run();
   EXPECT_EQ(profile_manager->GetNumberOfProfiles(), 2U);
 }
@@ -630,16 +617,11 @@
       GetFirstNonSigninNonLockScreenAppProfile(&storage);
   ASSERT_NE(0U, initial_profile_count);
   EXPECT_EQ(1U, chrome::GetTotalBrowserCount());
-  // Create an additional profile.
   base::FilePath path_profile2 =
       profile_manager->GenerateNextProfileDirectoryPath();
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      path_profile2,
-      base::BindRepeating(&OnUnblockOnProfileCreation, &run_loop));
-  // Run the message loop to allow profile creation to take place; the loop is
-  // terminated by OnUnblockOnProfileCreation when the profile is created.
-  run_loop.Run();
+  // Create an additional profile.
+  profiles::testing::CreateProfileSync(profile_manager, path_profile2);
+
   BrowserList* browser_list = BrowserList::GetInstance();
   ASSERT_EQ(initial_profile_count + 1U, storage.GetNumberOfProfiles());
   EXPECT_EQ(1U, browser_list->size());
@@ -686,8 +668,9 @@
       profile_manager->GenerateNextProfileDirectoryPath();
   base::RunLoop run_loop;
   profile_manager->CreateProfileAsync(
-      path_profile2, base::BindRepeating(&EphemeralProfileCreationComplete,
-                                         run_loop.QuitWhenIdleClosure()));
+      path_profile2, base::BindOnce(&EphemeralProfileCreationComplete,
+                                    run_loop.QuitWhenIdleClosure()));
+
   run_loop.Run();
 
   BrowserList* browser_list = BrowserList::GetInstance();
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc
index 0087bfe0..c5d51e1 100644
--- a/chrome/browser/profiles/profile_manager_unittest.cc
+++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -125,8 +125,8 @@
  public:
   class MockObserver {
    public:
-    MOCK_METHOD2(OnProfileCreated,
-        void(Profile* profile, Profile::CreateStatus status));
+    MOCK_METHOD1(OnProfileInitialized, void(Profile* profile));
+    MOCK_METHOD1(OnProfileCreated, void(Profile* profile));
   };
 
   ProfileManagerTest()
@@ -189,8 +189,11 @@
                           const base::FilePath& profile_path,
                           MockObserver* mock_observer) {
     manager->CreateProfileAsync(
-        profile_path, base::BindRepeating(&MockObserver::OnProfileCreated,
-                                          base::Unretained(mock_observer)));
+        profile_path,
+        base::BindOnce(&MockObserver::OnProfileInitialized,
+                       base::Unretained(mock_observer)),
+        base::BindOnce(&MockObserver::OnProfileCreated,
+                       base::Unretained(mock_observer)));
   }
 
   // Helper function to create a profile with |name| for a profile |manager|.
@@ -199,8 +202,10 @@
                                MockObserver* mock_observer) {
     ProfileManager::CreateMultiProfileAsync(
         base::UTF8ToUTF16(name), /*icon_index=*/0, /*is_hidden=*/false,
-        base::BindRepeating(&MockObserver::OnProfileCreated,
-                            base::Unretained(mock_observer)));
+        base::BindOnce(&MockObserver::OnProfileInitialized,
+                       base::Unretained(mock_observer)),
+        base::BindOnce(&MockObserver::OnProfileCreated,
+                       base::Unretained(mock_observer)));
   }
 
   // Helper function to add a profile with |profile_name| to |profile_manager|'s
@@ -350,21 +355,8 @@
       g_browser_process->profile_manager()->GetInitialProfileDir().value());
 }
 
-MATCHER(NotFail, "Profile creation failure status is not reported.") {
-  return arg == Profile::CREATE_STATUS_CREATED ||
-         arg == Profile::CREATE_STATUS_INITIALIZED;
-}
-
-MATCHER(Created, "Profile creation status is created.") {
-  return arg == Profile::CREATE_STATUS_CREATED;
-}
-
-MATCHER(Initialized, "Profile creation status is initialized.") {
-  return arg == Profile::CREATE_STATUS_INITIALIZED;
-}
-
 MATCHER(SameNotNull, "The same non-NULL value for all calls.") {
-  if (!g_created_profile)
+  if (!g_created_profile && arg)
     g_created_profile = arg;
   return arg && arg == g_created_profile;
 }
@@ -507,7 +499,7 @@
   base::FilePath profile_path = temp_dir_.GetPath().Append(profile_basename);
   const base::FilePath other_basename(FILE_PATH_LITERAL("SomeOtherProfile"));
   MockObserver mock_observer1;
-  EXPECT_CALL(mock_observer1, OnProfileCreated(SameNotNull(), NotFail()))
+  EXPECT_CALL(mock_observer1, OnProfileInitialized(SameNotNull()))
       .Times(testing::AtLeast(1));
 
   ProfileManager* profile_manager = g_browser_process->profile_manager();
@@ -544,14 +536,14 @@
   g_created_profile = nullptr;
 
   MockObserver mock_observer1;
-  EXPECT_CALL(mock_observer1, OnProfileCreated(
-      SameNotNull(), NotFail())).Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer1, OnProfileInitialized(SameNotNull()))
+      .Times(testing::AtLeast(1));
   MockObserver mock_observer2;
-  EXPECT_CALL(mock_observer2, OnProfileCreated(
-      SameNotNull(), NotFail())).Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer2, OnProfileInitialized(SameNotNull()))
+      .Times(testing::AtLeast(1));
   MockObserver mock_observer3;
-  EXPECT_CALL(mock_observer3, OnProfileCreated(
-      SameNotNull(), NotFail())).Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer3, OnProfileInitialized(SameNotNull()))
+      .Times(testing::AtLeast(1));
 
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath profile_path = temp_dir_.GetPath().AppendASCII("New Profile");
@@ -571,8 +563,10 @@
       temp_dir_.GetPath().AppendASCII("New Profile 2");
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), NotFail()))
-      .Times(testing::AtLeast(3));
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
+      .Times(testing::AtLeast(2));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(testing::AtLeast(2));
 
   CreateProfileAsync(profile_manager, profile_path1, &mock_observer);
   CreateProfileAsync(profile_manager, profile_path2, &mock_observer);
@@ -591,10 +585,9 @@
   base::RunLoop run_loop;
   MockObserver mock_observer;
   Profile* profile = nullptr;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
       .WillOnce(testing::SaveArg<0>(&profile));
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce([&run_loop] { run_loop.Quit(); });
 
   CreateMultiProfileAsync(profile_manager, profile_name, &mock_observer);
@@ -617,10 +610,8 @@
 
   base::RunLoop run_loop;
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
-      .Times(2);
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull())).Times(2);
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce(testing::Return())
       .WillOnce([&run_loop] { run_loop.Quit(); });
 
@@ -635,10 +626,8 @@
   base::RunLoop run_loop;
   MockObserver mock_observer;
   Profile *profile1 = nullptr, *profile2 = nullptr, *profile3 = nullptr;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
-      .Times(3);
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull())).Times(3);
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce(testing::SaveArg<0>(&profile1))
       .WillOnce(testing::SaveArg<0>(&profile2))
       .WillOnce(testing::DoAll(testing::SaveArg<0>(&profile3),
@@ -676,10 +665,9 @@
   base::RunLoop run_loop;
   MockObserver mock_observer;
   Profile* profile2 = nullptr;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
       .WillOnce(testing::SaveArg<0>(&profile2));
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce([&run_loop] { run_loop.Quit(); });
 
   CreateMultiProfileAsync(profile_manager, "Profile B", &mock_observer);
@@ -702,10 +690,9 @@
   base::RunLoop run_loop;
   MockObserver mock_observer;
   Profile* profile1 = nullptr;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
       .WillOnce(testing::SaveArg<0>(&profile1));
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce([&run_loop] { run_loop.Quit(); });
   CreateMultiProfileAsync(profile_manager, "Profile A", &mock_observer);
   run_loop.Run();
@@ -739,10 +726,9 @@
   base::RunLoop run_loop;
   MockObserver mock_observer;
   Profile* profile2 = nullptr;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
       .WillOnce(testing::SaveArg<0>(&profile2));
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce([&run_loop] { run_loop.Quit(); });
   CreateMultiProfileAsync(profile_manager, "Profile B", &mock_observer);
   run_loop.Run();
@@ -762,18 +748,19 @@
   base::RunLoop run_loop;
   Profile* profile = nullptr;
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), Created()))
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
       .WillOnce(testing::SaveArg<0>(&profile));
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(testing::NotNull(), Initialized()))
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
       .WillOnce([&run_loop] { run_loop.Quit(); });
 
   ProfileManager* profile_manager = g_browser_process->profile_manager();
 
   profile_manager->CreateMultiProfileAsync(
       u"New Profile", 0, /*is_hidden=*/true,
-      base::BindRepeating(&MockObserver::OnProfileCreated,
-                          base::Unretained(&mock_observer)));
+      base::BindOnce(&MockObserver::OnProfileInitialized,
+                     base::Unretained(&mock_observer)),
+      base::BindOnce(&MockObserver::OnProfileCreated,
+                     base::Unretained(&mock_observer)));
 
   run_loop.Run();
   ASSERT_NE(profile, nullptr);
@@ -1764,16 +1751,18 @@
       temp_dir_.GetPath().AppendASCII(profile_basename2);
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(
-      testing::NotNull(), NotFail())).Times(testing::AtLeast(3));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(testing::AtLeast(2));
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
+      .Times(testing::AtLeast(2));
 
   CreateProfileAsync(profile_manager, profile_path1, &mock_observer);
   CreateProfileAsync(profile_manager, profile_path2, &mock_observer);
   content::RunAllTasksUntilIdle();
 
   EXPECT_EQ(2u, profile_manager->GetLoadedProfiles().size());
-  EXPECT_EQ(2u, profile_manager->GetProfileAttributesStorage().
-                    GetNumberOfProfiles());
+  EXPECT_EQ(
+      2u, profile_manager->GetProfileAttributesStorage().GetNumberOfProfiles());
 
   // Set the active profile.
   PrefService* local_state = g_browser_process->local_state();
@@ -1799,8 +1788,8 @@
       temp_dir_.GetPath().AppendASCII(profile_basename1);
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(
-      testing::NotNull(), NotFail())).Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(testing::AtLeast(1));
 
   CreateProfileAsync(profile_manager, profile_path1, &mock_observer);
   content::RunAllTasksUntilIdle();
@@ -1842,8 +1831,10 @@
       temp_dir_.GetPath().AppendASCII(profile_basename1);
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), NotFail()))
-      .Times(testing::AtLeast(2));
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
+      .Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(testing::AtLeast(1));
 
   CreateProfileAsync(profile_manager, profile_path1, &mock_observer);
   content::RunAllTasksUntilIdle();
@@ -2108,8 +2099,10 @@
       temp_dir_.GetPath().AppendASCII(profile_basename2);
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(
-      testing::NotNull(), NotFail())).Times(testing::AtLeast(2));
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
+      .Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(testing::AtLeast(1));
   CreateProfileAsync(profile_manager, profile_path1, &mock_observer);
   content::RunAllTasksUntilIdle();
 
@@ -2161,8 +2154,10 @@
       temp_dir_.GetPath().AppendASCII(profile_basename3);
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer, OnProfileCreated(
-      testing::NotNull(), NotFail())).Times(testing::AtLeast(2));
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
+      .Times(testing::AtLeast(1));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(testing::AtLeast(1));
   CreateProfileAsync(profile_manager, profile_path1, &mock_observer);
   content::RunAllTasksUntilIdle();
 
@@ -2239,8 +2234,7 @@
   ProfileManager* profile_manager = g_browser_process->profile_manager();
 
   MockObserver mock_observer;
-  EXPECT_CALL(mock_observer,
-              OnProfileCreated(nullptr, Profile::CREATE_STATUS_LOCAL_FAIL));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(nullptr));
 
   CreateProfileAsync(profile_manager, profile_path, &mock_observer);
   content::RunAllTasksUntilIdle();
diff --git a/chrome/browser/profiles/profile_selections.cc b/chrome/browser/profiles/profile_selections.cc
index 40b7d03..bc63e58 100644
--- a/chrome/browser/profiles/profile_selections.cc
+++ b/chrome/browser/profiles/profile_selections.cc
@@ -66,6 +66,15 @@
 }
 
 ProfileSelections
+ProfileSelections::BuildForRegularAndIncognitoNonExperimental() {
+  return ProfileSelections::Builder()
+      .WithRegular(ProfileSelection::kOwnInstance)
+      .WithGuest(ProfileSelection::kNone)
+      .WithSystem(ProfileSelection::kNone)
+      .Build();
+}
+
+ProfileSelections
 ProfileSelections::BuildRedirectedInIncognitoNonExperimental() {
   return ProfileSelections::Builder()
       .WithRegular(ProfileSelection::kRedirectedToOriginal)
diff --git a/chrome/browser/profiles/profile_selections.h b/chrome/browser/profiles/profile_selections.h
index 35d5d2ce..73d86ae5 100644
--- a/chrome/browser/profiles/profile_selections.h
+++ b/chrome/browser/profiles/profile_selections.h
@@ -71,6 +71,19 @@
   // +---------+------------+------------+
   static ProfileSelections BuildForRegularProfile();
 
+  // Only select the regular profile and incognito for regular profiles. No
+  // profiles for Guest and System profiles. "NonExperimental" is added to
+  // differentiate with the experimental behavior during the experiment, once
+  // done it will be the equivalent builder.
+  // +---------+------------+------------+
+  // |         |  Original  |    OTR     |
+  // +---------+------------+------------+
+  // | Regular | self       | self       |
+  // | Guest   | no profile | no profile |
+  // | System  | no profile | no profile |
+  // +---------+------------+------------+
+  static ProfileSelections BuildForRegularAndIncognitoNonExperimental();
+
   // Redirects incognito profiles to their original regular profile. No
   // profiles for Guest and System profiles. "NonExperimental" is added to
   // differentiate with the experimental behavior during the experiment, once
diff --git a/chrome/browser/profiles/profile_selections_unittest.cc b/chrome/browser/profiles/profile_selections_unittest.cc
index e7c126a..743057b0 100644
--- a/chrome/browser/profiles/profile_selections_unittest.cc
+++ b/chrome/browser/profiles/profile_selections_unittest.cc
@@ -84,6 +84,22 @@
 #endif  // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID)
 }
 
+TEST_F(ProfileSelectionsTest, RegularAndIncognito) {
+  ProfileSelections selections =
+      ProfileSelections::BuildForRegularAndIncognitoNonExperimental();
+
+  TestProfileSelection(selections, regular_profile(), regular_profile());
+  TestProfileSelection(selections, incognito_profile(), incognito_profile());
+
+  TestProfileSelection(selections, guest_profile(), nullptr);
+  TestProfileSelection(selections, guest_profile_otr(), nullptr);
+
+#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID)
+  TestProfileSelection(selections, system_profile(), nullptr);
+  TestProfileSelection(selections, system_profile_otr(), nullptr);
+#endif  // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID)
+}
+
 TEST_F(ProfileSelectionsTest, RedirectedInIncognito) {
   ProfileSelections selections =
       ProfileSelections::BuildRedirectedInIncognitoNonExperimental();
diff --git a/chrome/browser/profiles/profile_shortcut_manager_browsertest_win.cc b/chrome/browser/profiles/profile_shortcut_manager_browsertest_win.cc
index a317fe5..fac3bda 100644
--- a/chrome/browser/profiles/profile_shortcut_manager_browsertest_win.cc
+++ b/chrome/browser/profiles/profile_shortcut_manager_browsertest_win.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_shortcut_manager_win.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_switches.h"
@@ -77,10 +78,8 @@
   // number of profiles is one.
   base::FilePath path_profile2 =
       g_browser_process->profile_manager()->GenerateNextProfileDirectoryPath();
-  g_browser_process->profile_manager()->CreateProfileAsync(
-      path_profile2, ProfileManager::CreateCallback());
-
-  content::RunAllTasksUntilIdle();
+  profiles::testing::CreateProfileSync(g_browser_process->profile_manager(),
+                                       path_profile2);
 
   // This is for triggering a profile icon update on the next run. 1 is just a
   // small enough number for kCurrentProfileIconVersion.
diff --git a/chrome/browser/profiles/profile_test_util.cc b/chrome/browser/profiles/profile_test_util.cc
index a2c62ae..49420df 100644
--- a/chrome/browser/profiles/profile_test_util.cc
+++ b/chrome/browser/profiles/profile_test_util.cc
@@ -22,27 +22,11 @@
 
 Profile* CreateProfileSync(ProfileManager* profile_manager,
                            const base::FilePath& path) {
-  Profile* created_profile = nullptr;
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      path, base::BindLambdaForTesting(
-                [&run_loop, &created_profile](Profile* profile,
-                                              Profile::CreateStatus status) {
-                  switch (status) {
-                    case Profile::CREATE_STATUS_LOCAL_FAIL:
-                      NOTREACHED();
-                      return;
-                    case Profile::CREATE_STATUS_CREATED:
-                      // Do nothing, wait for the profile to be initialized.
-                      return;
-                    case Profile::CREATE_STATUS_INITIALIZED:
-                      created_profile = profile;
-                      run_loop.Quit();
-                      return;
-                  }
-                }));
-  run_loop.Run();
-  return created_profile;
+  base::test::TestFuture<Profile*> profile_future;
+  profile_manager->CreateProfileAsync(path, profile_future.GetCallback());
+  Profile* profile = profile_future.Get();
+  CHECK(profile);
+  return profile;
 }
 
 #if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc
index f6a90bd0..1a15d71b 100644
--- a/chrome/browser/profiles/profile_window.cc
+++ b/chrome/browser/profiles/profile_window.cc
@@ -86,16 +86,11 @@
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
 // Helper function to run a callback on a profile once it's initialized.
-void ProfileLoadedCallback(base::OnceCallback<void(Profile*)>& callback,
-                           Profile* profile,
-                           Profile::CreateStatus status) {
+void ProfileLoadedCallback(base::OnceCallback<void(Profile*)> callback,
+                           Profile* profile) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-  if (status != Profile::CREATE_STATUS_INITIALIZED)
+  if (!profile)
     return;
-
-  // This function is called with `CREATE_STATUS_INITIALIZED` at most once, so
-  // it is fine to move the callback.
   if (callback)
     std::move(callback).Run(profile);
 }
@@ -227,8 +222,7 @@
 void LoadProfileAsync(const base::FilePath& path,
                       base::OnceCallback<void(Profile*)> callback) {
   g_browser_process->profile_manager()->CreateProfileAsync(
-      path, base::BindRepeating(&ProfileLoadedCallback,
-                                base::OwnedRef(std::move(callback))));
+      path, base::BindOnce(&ProfileLoadedCallback, std::move(callback)));
 }
 
 void SwitchToProfile(const base::FilePath& path,
@@ -241,8 +235,7 @@
                      /*unblock_extensions=*/false);
   g_browser_process->profile_manager()->CreateProfileAsync(
       path,
-      base::BindRepeating(&ProfileLoadedCallback,
-                          base::OwnedRef(std::move(open_browser_callback))));
+      base::BindOnce(&ProfileLoadedCallback, std::move(open_browser_callback)));
 }
 
 void SwitchToGuestProfile(base::OnceCallback<void(Profile*)> callback) {
diff --git a/chrome/browser/resources/chromeos/login/screens/common/gaia_signin.js b/chrome/browser/resources/chromeos/login/screens/common/gaia_signin.js
index 3759124..ef4f9db 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/gaia_signin.js
+++ b/chrome/browser/resources/chromeos/login/screens/common/gaia_signin.js
@@ -121,7 +121,11 @@
       },
 
       /**
-       * Whether the authenticator is currently in the |SAML| AuthFlow.
+       * Whether the authenticator is currently redirected to |SAML| flow. It is
+       * set to true early during a default redirection to address situations
+       * when an error during loading the 3P IdP occurs and no change in
+       * `authFlow` happens, but the UI for 3P IdP still should be shown.
+       * Updated on `authFlow` change.
        * @private
        */
       isSaml_: {
@@ -440,7 +444,15 @@
     this.isDefaultSsoProvider_ = doSamlRedirect;
     this.startLoadingTimer_();
 
+    // Don't enable GAIA action buttons when doing SAML redirect.
+    this.authenticatorParams_.enableGaiaActionButtons = !doSamlRedirect;
     this.authenticatorParams_.doSamlRedirect = doSamlRedirect;
+    // Set `isSaml_` flag here to make sure we show the correct UI. If we do a
+    // redirect, but it fails due to an error, there won't be any `authFlow`
+    // change triggered by `authenticator_`, however we should still show a
+    // button to let user go to GAIA page and keep original GAIA buttons
+    // hidden.
+    this.isSaml_ = doSamlRedirect;
     this.authenticator_.load(
         cr.login.Authenticator.AuthMode.DEFAULT, this.authenticatorParams_);
   }
@@ -628,7 +640,6 @@
         !(data.enterpriseManagedDevice || data.hasDeviceOwner);
     params.isFirstUser = !(data.enterpriseManagedDevice || data.hasDeviceOwner);
     params.obfuscatedOwnerId = data.obfuscatedOwnerId;
-    params.enableGaiaActionButtons = true;
 
     this.authenticatorParams_ = params;
 
@@ -652,8 +663,9 @@
    * Whether the current auth flow is SAML.
    * @return {boolean}
    */
-  isSamlForTesting() {
-    return this.isSaml_;
+  isSamlAuthFlowForTesting() {
+    return this.isSaml_ &&
+        this.authFlow == cr.login.Authenticator.AuthFlow.SAML;
   }
 
   /**
@@ -686,6 +698,7 @@
     this.authCompleted_ = false;
     // Reset webview to prevent calls from authenticator.
     this.authenticator_.resetWebview();
+    this.authenticator_.resetStates();
     // Explicitly disable video here to let `onVideoEnabledChange_()` handle
     // timer start next time when `videoEnabled_` will be set to true on SAML
     // page.
diff --git a/chrome/browser/resources/settings/site_settings/all_sites.html b/chrome/browser/resources/settings/site_settings/all_sites.html
index f468303..983bd136 100644
--- a/chrome/browser/resources/settings/site_settings/all_sites.html
+++ b/chrome/browser/resources/settings/site_settings/all_sites.html
@@ -83,15 +83,27 @@
     <cr-lazy-render id="menu">
       <template>
         <cr-action-menu role-description="$i18n{menu}">
-          <button hidden$="[[actionMenuModel_.isPartitioned]]"
-              class="dropdown-item" role="menuitem"
-              on-click="onConfirmResetSettings_">
-            $i18n{siteSettingsSiteGroupReset}
-          </button>
-          <button class="dropdown-item" role="menuitem"
-              on-click="onConfirmClearData_">
-            $i18n{siteSettingsSiteGroupDelete}
-          </button>
+          <template is="dom-if" if="[[enableFirstPartySetsUI_]]">
+            <button class="dropdown-item" role="menuitem"
+                on-click="onShowRelatedSites_">
+                $i18n{firstPartySetsShowRelatedSitesButton}
+            </button>
+            <button class="dropdown-item" role="menuitem"
+                on-click="onRemove_">
+                $i18n{firstPartySetsSiteClearStorageButton}
+            </button>
+          </template>
+          <template is="dom-if" if="[[!enableFirstPartySetsUI_]]">
+            <button hidden$="[[actionMenuModel_.isPartitioned]]"
+                class="dropdown-item" role="menuitem"
+                on-click="onConfirmResetSettings_">
+              $i18n{siteSettingsSiteGroupReset}
+            </button>
+            <button class="dropdown-item" role="menuitem"
+                on-click="onConfirmClearData_">
+              $i18n{siteSettingsSiteGroupDelete}
+            </button>
+          </template>
         </cr-action-menu>
       </template>
     </cr-lazy-render>
diff --git a/chrome/browser/resources/settings/site_settings/all_sites.ts b/chrome/browser/resources/settings/site_settings/all_sites.ts
index f1c086a..6511294 100644
--- a/chrome/browser/resources/settings/site_settings/all_sites.ts
+++ b/chrome/browser/resources/settings/site_settings/all_sites.ts
@@ -149,6 +149,14 @@
       },
 
       /**
+       * Whether First Party Sets are enabled.
+       */
+      enableFirstPartySetsUI_: {
+        type: Boolean,
+        value: () => loadTimeData.getBoolean('firstPartySetsUIEnabled'),
+      },
+
+      /**
        * All possible sort methods.
        */
       sortMethods_: {
@@ -201,6 +209,7 @@
   private filteredList_: SiteGroup[];
   subpageRoute: Route;
   filter: string;
+  private enableFirstPartySetsUI_: boolean;
   private selectedItem_: SelectedItem|null;
   private listBlurred_: boolean;
   private actionMenuModel_: ActionMenuModel|null;
@@ -454,11 +463,20 @@
     this.$.menu.get().showAt(target);
   }
 
+  private onShowRelatedSites_() {
+    // TODO(crbug.com/1349370): implement filtering by fps owner.
+    this.forceListUpdate_();
+  }
+
   private onRemoveSite_(e: RemoveSiteEvent) {
     this.actionMenuModel_ = e.detail;
     this.$.confirmRemoveSite.get().showModal();
   }
 
+  private onRemove_() {
+    this.$.confirmRemoveSite.get().showModal();
+  }
+
   private onConfirmRemoveSite_(e: Event) {
     const {index, actionScope, origin, isPartitioned} = this.actionMenuModel_!;
     const siteGroupToUpdate = this.filteredList_[index];
@@ -467,6 +485,7 @@
       etldPlus1: siteGroupToUpdate.etldPlus1,
       hasInstalledPWA: siteGroupToUpdate.hasInstalledPWA,
       numCookies: siteGroupToUpdate.numCookies,
+      fpsOwner: siteGroupToUpdate.fpsOwner,
       origins: [],
     };
 
@@ -830,6 +849,7 @@
       etldPlus1: siteGroupToUpdate.etldPlus1,
       hasInstalledPWA: false,
       numCookies: siteGroupToUpdate.numCookies,
+      fpsOwner: siteGroupToUpdate.fpsOwner,
       origins: [],
     };
 
@@ -903,6 +923,7 @@
       etldPlus1: siteGroupToUpdate.etldPlus1,
       hasInstalledPWA: siteGroupToUpdate.hasInstalledPWA,
       numCookies: 0,
+      fpsOwner: siteGroupToUpdate.fpsOwner,
       origins: [],
     };
 
@@ -934,6 +955,7 @@
       etldPlus1: siteGroupToUpdate.etldPlus1,
       hasInstalledPWA: false,
       numCookies: 0,
+      fpsOwner: siteGroupToUpdate.fpsOwner,
       origins: [],
     };
 
diff --git a/chrome/browser/resources/settings/site_settings/site_entry.html b/chrome/browser/resources/settings/site_settings/site_entry.html
index 43fea4e..2de6f34 100644
--- a/chrome/browser/resources/settings/site_settings/site_entry.html
+++ b/chrome/browser/resources/settings/site_settings/site_entry.html
@@ -86,11 +86,23 @@
                 focus-row-control focus-type="more-actions"></cr-icon-button>
           </template>
           <template is="dom-if" if="[[enableConsolidatedSiteStorageControls_]]">
-            <div class="separator"></div>
-            <cr-icon-button class="icon-delete-gray" id="removeSiteButton"
-                title$="[[i18n('siteSettingsCookieRemoveSite', displayName_)]]"
-                on-click="onRemove_" focus-row-control focus-type="remove">
-            </cr-icon-button>
+            <template is="dom-if" if="[[isFpsMember_(siteGroup.fpsOwner)]]">
+              <div class="separator"></div>
+              <cr-icon-button class="icon-more-vert"
+                  id="fpsOverflowMenuButton"
+                  title="$i18n{moreActions}"
+                  on-click="showOverflowMenu_"
+                  focus-row-control focus-type="more-actions">
+              </cr-icon-button>
+            </template>
+            <template is="dom-if" if="[[!isFpsMember_(siteGroup.fpsOwner)]]">
+              <div class="separator"></div>
+              <cr-icon-button class="icon-delete-gray" id="removeSiteButton"
+                  title$=
+                    "[[i18n('siteSettingsCookieRemoveSite', displayName_)]]"
+                  on-click="onRemove_" focus-row-control focus-type="remove">
+              </cr-icon-button>
+            </template>
           </template>
         </div>
       </div>
diff --git a/chrome/browser/resources/settings/site_settings/site_entry.ts b/chrome/browser/resources/settings/site_settings/site_entry.ts
index bd6378d..b721369 100644
--- a/chrome/browser/resources/settings/site_settings/site_entry.ts
+++ b/chrome/browser/resources/settings/site_settings/site_entry.ts
@@ -85,6 +85,14 @@
       cookieString_: String,
 
       /**
+       * Whether First Party Sets are enabled.
+       */
+      enableFirstPartySetsUI_: {
+        type: Boolean,
+        value: () => loadTimeData.getBoolean('firstPartySetsUIEnabled'),
+      },
+
+      /**
        * The position of this site-entry in its parent list.
        */
       listIndex: {
@@ -135,6 +143,7 @@
   siteGroup: SiteGroup;
   private displayName_: string;
   private cookieString_: string;
+  private enableFirstPartySetsUI_: boolean;
   listIndex: number;
   private overallUsageString_: string;
   private originUsages_: string[];
@@ -308,6 +317,12 @@
     });
   }
 
+
+  private isFpsMember_(): boolean {
+    return this.enableFirstPartySetsUI_ &&
+        this.siteGroup.fpsOwner !== undefined;
+  }
+
   /**
    * Get display string for number of cookies.
    */
diff --git a/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.ts b/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.ts
index 4b1fdd5..d7e2fba 100644
--- a/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.ts
+++ b/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.ts
@@ -64,6 +64,7 @@
   etldPlus1: string;
   numCookies: number;
   origins: OriginInfo[];
+  fpsOwner?: string;
   hasInstalledPWA: boolean;
 }
 
diff --git a/chrome/browser/resources/signin/profile_customization/profile_customization_app.html b/chrome/browser/resources/signin/profile_customization/profile_customization_app.html
index 0e55911b..d070079 100644
--- a/chrome/browser/resources/signin/profile_customization/profile_customization_app.html
+++ b/chrome/browser/resources/signin/profile_customization/profile_customization_app.html
@@ -1,5 +1,11 @@
 <style include="signin-shared">
-  #customizeDialog {
+  #viewManager,
+  #customizeDialog,
+  #selectAvatarDialog {
+    height: 100%;
+  }
+
+  .profile-customization-wrapper {
     display: flex;
     flex-direction: column;
     height: 100%;
@@ -132,7 +138,7 @@
 
   cr-button {
     font-size: 12px;
-    width: 111px;
+    min-width: 111px;
   }
 
   .in-dialog-design #title {
@@ -145,12 +151,58 @@
   }
 
   .in-dialog-design #doneButton {
-    width: 119px;
+    min-width: 119px;
   }
 
   .in-dialog-design #skipButton {
     margin-inline-end: 12px;
-    width: 76px;
+    min-width: 76px;
+  }
+
+  cr-profile-avatar-selector {
+    --avatar-size: 72px;
+    --avatar-spacing: 18px;
+    --avatar-grid-columns: 5;
+    height: 398px;
+    margin: 0 14px;
+    overflow-x: hidden;
+    overflow-y: auto;
+    padding-bottom: 15px;
+    padding-inline-start: 15px;
+    padding-top: 15px;
+    width: fit-content;
+  }
+
+  .select-avatar-header {
+    display: flex;
+    height: 22px;
+    justify-content: flex-start;
+    padding: 13px 16px 17px;
+  }
+
+  .select-avatar-title {
+    font-size: 15px;
+    line-height: 22px;
+    margin: auto 0;
+  }
+
+  #selectAvatarCloseButton {
+    --cr-icon-button-icon-size: 16px;
+    --cr-icon-button-size: 22px;
+    margin-inline-end: 20px;
+    margin-inline-start: 2px;
+  }
+
+  #selectAvatarDialog .action-container {
+    padding: 24px;
+  }
+
+  #selectAvatarConfirmButton {
+    min-width: 119px;
+  }
+
+  #selectAvatarCancelButton {
+    margin-inline-end: 12px;
   }
 
   @media (prefers-color-scheme: dark) {
@@ -165,58 +217,92 @@
   }
 </style>
 
-<div role="dialog" id="customizeDialog" aria-labelledby="title"
+<cr-view-manager role="dialog" id="viewManager" aria-labelledby="title"
     aria-describedby="content"
     class$="[[getDialogDesignClass_(profileCustomizationInDialogDesign_)]]">
-  <div id="header">
-    <div id="avatarContainer">
-      <img id="avatar" alt="" src="[[pictureUrl_]]">
-      <template is="dom-if" if="[[!isLocalProfileCreation_]]">
-        <div class="avatar-badge" id="workBadge" hidden="[[!isManaged_]]">
-          <iron-icon class="icon" icon="cr:domain"></iron-icon>
+  <div id="customizeDialog" slot="view" class="active">
+    <!-- An extra wrapper is needed because cr-view-manager incorrectly
+         displays views with display: flex -->
+    <div class="profile-customization-wrapper">
+      <div id="header">
+        <div id="avatarContainer">
+          <img id="avatar" alt="" src="[[pictureUrl_]]">
+          <template is="dom-if" if="[[!isLocalProfileCreation_]]">
+            <div class="avatar-badge" id="workBadge" hidden="[[!isManaged_]]">
+              <iron-icon class="icon" icon="cr:domain"></iron-icon>
+            </div>
+          </template>
+          <template is="dom-if" if="[[isLocalProfileCreation_]]">
+            <div class="avatar-badge">
+              <cr-icon-button id="customizeAvatarIcon" iron-icon="cr:create"
+                  on-click="onCustomizeAvatarClick_"
+                  aria-label="$i18n{profileCustomizationCustomizeAvatarLabel}">
+              </cr-icon-button>
+            </div>
+          </template>
         </div>
-      </template>
-      <template is="dom-if" if="[[isLocalProfileCreation_]]">
-        <div class="avatar-badge">
-          <cr-icon-button id="customizeAvatarIcon" iron-icon="cr:create"
-              on-click="onCustomizeAvatarClick_">
-          </cr-icon-button>
+      </div>
+
+      <div id="body">
+        <div id="title">
+          [[welcomeTitle_]]
         </div>
-      </template>
+        <template is="dom-if" if="[[!profileCustomizationInDialogDesign_]]">
+          <div id="content">$i18n{profileCustomizationText}</div>
+        </template>
+      </div>
+
+      <cr-input id="nameInput" pattern=".*\\S.*" value="{{profileName_}}"
+        aria-label="$i18n{profileCustomizationInputLabel}" auto-validate
+        required spellcheck="false">
+      </cr-input>
+
+      <div id="pickThemeContainer">
+        <cr-customize-themes id="themeSelector">
+        </cr-customize-themes>
+      </div>
+
+      <div class="action-container">
+        <cr-button id="doneButton" class="action-button"
+            disabled="[[isDoneButtonDisabled_(profileName_)]]"
+            on-click="onDoneCustomizationClicked_" autofocus>
+          $i18n{profileCustomizationDoneLabel}
+        </cr-button>
+        <template is="dom-if" if="[[shouldShowCancelButton_()]]">
+          <cr-button id="skipButton" class="cancel-button"
+              on-click="onSkipCustomizationClicked_">
+            $i18n{profileCustomizationSkipLabel}
+          </cr-button>
+        </template>
+      </div>
     </div>
   </div>
 
-  <div id="body">
-    <div id="title">
-      [[welcomeTitle_]]
+  <template is="dom-if" if="[[isLocalProfileCreation_]]">
+    <div id="selectAvatarDialog" slot="view">
+      <div class="select-avatar-header">
+        <cr-icon-button iron-icon="cr:arrow-back" id="selectAvatarCloseButton"
+            aria-label="$i18n{profileCustomizationAvatarSelectionBackButtonLabel}"
+            on-click="onSelectAvatarCancelClicked_">
+        </cr-icon-button>
+        <div class="select-avatar-title">
+          $i18n{profileCustomizationAvatarSelectionTitle}
+        </div>
+      </div>
+      <cr-profile-avatar-selector avatars="[[availableIcons_]]"
+          selected-avatar="{{selectedAvatar_}}">
+      </cr-profile-avatar-selector>
+      <div class="action-container">
+        <cr-button id="selectAvatarConfirmButton" class="action-button"
+            on-click="onSelectAvatarConfirmClicked_">
+          $i18n{profileCustomizationAvatarSelectionConfirmButtonLabel}
+        </cr-button>
+        <cr-button id="selectAvatarCancelButton" class="cancel-button"
+            on-click="onSelectAvatarCancelClicked_">
+          $i18n{profileCustomizationAvatarSelectionCancelButtonLabel}
+        </cr-button>
+      </div>
     </div>
-    <template is="dom-if" if="[[!profileCustomizationInDialogDesign_]]">
-      <div id="content">$i18n{profileCustomizationText}</div>
-    </template>
-  </div>
+  </template>
 
-  <cr-input id="nameInput" pattern=".*\\S.*" value="{{profileName_}}"
-    aria-label="$i18n{profileCustomizationInputLabel}" auto-validate
-    required spellcheck="false">
-  </cr-input>
-
-  <div id="pickThemeContainer">
-    <cr-customize-themes id="themeSelector">
-    </cr-customize-themes>
-  </div>
-
-  <div class="action-container">
-    <cr-button id="doneButton" class="action-button"
-        disabled="[[isDoneButtonDisabled_(profileName_)]]"
-        on-click="onDoneCustomizationClicked_" autofocus>
-      $i18n{profileCustomizationDoneLabel}
-    </cr-button>
-    <template is="dom-if" if="[[shouldShowCancelButton_()]]">
-      <cr-button id="skipButton" class="cancel-button"
-          on-click="onSkipCustomizationClicked_">
-        $i18n{profileCustomizationSkipLabel}
-      </cr-button>
-    </template>
-  <div>
-
-</div>
+</cr-view-manager>
diff --git a/chrome/browser/resources/signin/profile_customization/profile_customization_app.ts b/chrome/browser/resources/signin/profile_customization/profile_customization_app.ts
index ff670c1c..0f916c65 100644
--- a/chrome/browser/resources/signin/profile_customization/profile_customization_app.ts
+++ b/chrome/browser/resources/signin/profile_customization/profile_customization_app.ts
@@ -5,6 +5,8 @@
 import 'chrome://resources/cr_components/customize_themes/customize_themes.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_input/cr_input.js';
+import 'chrome://resources/cr_elements/cr_profile_avatar_selector/cr_profile_avatar_selector.js';
+import 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
 import 'chrome://resources/cr_elements/icons.m.js';
@@ -15,6 +17,9 @@
 import {CustomizeThemesElement} from 'chrome://resources/cr_components/customize_themes/customize_themes.js';
 import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import {CrInputElement} from 'chrome://resources/cr_elements/cr_input/cr_input.js';
+import {AvatarIcon} from 'chrome://resources/cr_elements/cr_profile_avatar_selector/cr_profile_avatar_selector.js';
+import {CrViewManagerElement} from 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js';
+import {assert} from 'chrome://resources/js/assert_ts.js';
 import {I18nMixin} from 'chrome://resources/js/i18n_mixin.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {WebUIListenerMixin} from 'chrome://resources/js/web_ui_listener_mixin.js';
@@ -30,6 +35,7 @@
     nameInput: CrInputElement,
     title: HTMLElement,
     themeSelector: CustomizeThemesElement,
+    viewManager: CrViewManagerElement,
   };
 }
 
@@ -48,24 +54,35 @@
 
   static get properties() {
     return {
-      /** Whether the account is managed (Enterprise) */
+      /** Whether the account is managed (Enterprise). */
       isManaged_: {
         type: Boolean,
         value: false,
       },
 
-      /** Local profile name, editable by user input */
+      /** Local profile name, editable by user input. */
       profileName_: {
         type: String,
         value: '',
       },
 
-      /** URL for the profile picture */
+      /** URL for the profile picture. */
       pictureUrl_: String,
 
-      /** Welcome title for the bubble */
+      /** Welcome title for the bubble. */
       welcomeTitle_: String,
 
+      /** List of available profile icon URLs and labels. */
+      availableIcons_: {
+        type: Array,
+        value() {
+          return [];
+        },
+      },
+
+      /** The currently selected profile avatar, if any. */
+      selectedAvatar_: Object,
+
       profileCustomizationInDialogDesign_: {
         type: Boolean,
         value: () =>
@@ -83,6 +100,9 @@
   private profileName_: string;
   private pictureUrl_: string;
   private welcomeTitle_: string;
+  private availableIcons_: AvatarIcon[];
+  private selectedAvatar_: AvatarIcon;
+  private confirmedAvatar_: AvatarIcon;
   private profileCustomizationInDialogDesign_: boolean;
   private isLocalProfileCreation_: boolean;
   private profileCustomizationBrowserProxy_: ProfileCustomizationBrowserProxy =
@@ -97,8 +117,15 @@
     this.addWebUIListener(
         'on-profile-info-changed',
         (info: ProfileInfo) => this.setProfileInfo_(info));
+    this.addWebUIListener(
+        'on-available-icons-changed',
+        (icons: AvatarIcon[]) => this.setAvailableIcons_(icons));
     this.profileCustomizationBrowserProxy_.initialized().then(
         info => this.setProfileInfo_(info));
+    if (this.isLocalProfileCreation_) {
+      this.profileCustomizationBrowserProxy_.getAvailableIcons().then(
+          icons => this.setAvailableIcons_(icons));
+    }
   }
 
   /**
@@ -142,7 +169,43 @@
   }
 
   private onCustomizeAvatarClick_() {
-    // TODO(https://crbug.com/1282157): Add action for onCustomizeAvatarClick_
+    assert(this.isLocalProfileCreation_);
+    this.$.viewManager.switchView('selectAvatarDialog', 'fade-in', 'fade-out');
+  }
+
+  private setAvailableIcons_(icons: AvatarIcon[]) {
+    // If there is no selectedAvatar_ yet, get it from the icons list.
+    // Setting all the icons in availableIcons_ as not selected so the only
+    // source of truth for the currently selected icon is selectedAvatar_ and
+    // there is only one icon marked as selected.
+    icons.forEach((icon, index) => {
+      if (icon.selected) {
+        icons[index].selected = false;
+        this.confirmedAvatar_ = icons[index];
+        if (!this.selectedAvatar_) {
+          this.selectedAvatar_ = icons[index];
+        }
+      }
+    });
+    this.availableIcons_ = icons;
+  }
+
+  private onSelectAvatarConfirmClicked_() {
+    assert(this.isLocalProfileCreation_);
+    this.profileCustomizationBrowserProxy_.setAvatarIcon(
+        this.selectedAvatar_.index);
+    this.confirmedAvatar_ = this.selectedAvatar_;
+    this.closeSelectAvatar_();
+  }
+
+  private onSelectAvatarCancelClicked_() {
+    assert(this.isLocalProfileCreation_);
+    this.closeSelectAvatar_();
+    this.selectedAvatar_ = this.confirmedAvatar_;
+  }
+
+  private closeSelectAvatar_() {
+    this.$.viewManager.switchView('customizeDialog', 'fade-in', 'fade-out');
   }
 }
 
diff --git a/chrome/browser/resources/signin/profile_customization/profile_customization_browser_proxy.ts b/chrome/browser/resources/signin/profile_customization/profile_customization_browser_proxy.ts
index 1b0c908..d75c09e2 100644
--- a/chrome/browser/resources/signin/profile_customization/profile_customization_browser_proxy.ts
+++ b/chrome/browser/resources/signin/profile_customization/profile_customization_browser_proxy.ts
@@ -7,6 +7,7 @@
  * interact with the browser.
  */
 
+import {AvatarIcon} from 'chrome://resources/cr_elements/cr_profile_avatar_selector/cr_profile_avatar_selector.js';
 import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
 
 // Profile info (colors and avatar) sent from C++.
@@ -21,11 +22,16 @@
   // Called when the page is ready.
   initialized(): Promise<ProfileInfo>;
 
+  // Retrieves custom avatar list for the select avatar dialog.
+  getAvailableIcons(): Promise<AvatarIcon[]>;
+
   // Called when the user clicks the done button.
   done(profileName: string): void;
 
   // Called when the user clicks the skip button.
   skip(): void;
+
+  setAvatarIcon(avatarIndex: number): void;
 }
 
 export class ProfileCustomizationBrowserProxyImpl implements
@@ -34,6 +40,10 @@
     return sendWithPromise('initialized');
   }
 
+  getAvailableIcons() {
+    return sendWithPromise('getAvailableIcons');
+  }
+
   done(profileName: string) {
     chrome.send('done', [profileName]);
   }
@@ -42,6 +52,10 @@
     chrome.send('skip');
   }
 
+  setAvatarIcon(avatarIndex: number) {
+    chrome.send('setAvatarIcon', [avatarIndex]);
+  }
+
   static getInstance(): ProfileCustomizationBrowserProxy {
     return instance || (instance = new ProfileCustomizationBrowserProxyImpl());
   }
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_browsertest_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_browsertest_win.cc
index 84ff129..e615cbd 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_browsertest_win.cc
+++ b/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_browsertest_win.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/profile_resetter/profile_resetter.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/safe_browsing/chrome_cleaner/srt_field_trial_win.h"
 #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_test_utils.h"
 #include "chrome/browser/ui/browser.h"
@@ -34,29 +35,11 @@
 using ::testing::_;
 using ::testing::StrictMock;
 
-// Callback for CreateProfile() that assigns |profile| to |*out_profile|
-// if the profile creation is successful.
-void CreateProfileCallback(Profile** out_profile,
-                           base::OnceClosure closure,
-                           Profile* profile,
-                           Profile::CreateStatus status) {
-  DCHECK(out_profile);
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    *out_profile = profile;
-  std::move(closure).Run();
-}
-
 // Creates a new profile from the UI thread.
 Profile* CreateProfile() {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
-  Profile* profile = nullptr;
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      profile_manager->GenerateNextProfileDirectoryPath(),
-      base::BindRepeating(&CreateProfileCallback, &profile,
-                          run_loop.QuitClosure()));
-  run_loop.Run();
-  return profile;
+  return profiles::testing::CreateProfileSync(
+      profile_manager, profile_manager->GenerateNextProfileDirectoryPath());
 }
 
 // Returns true if |profile| is tagged for settings reset.
diff --git a/chrome/browser/search_resumption/java/src/org/chromium/chrome/browser/search_resumption/SearchResumptionModuleView.java b/chrome/browser/search_resumption/java/src/org/chromium/chrome/browser/search_resumption/SearchResumptionModuleView.java
index 078fb25b..caaaba0 100644
--- a/chrome/browser/search_resumption/java/src/org/chromium/chrome/browser/search_resumption/SearchResumptionModuleView.java
+++ b/chrome/browser/search_resumption/java/src/org/chromium/chrome/browser/search_resumption/SearchResumptionModuleView.java
@@ -69,7 +69,7 @@
                             : R.string.accessibility_collapsed);
             String description = getContext().getResources().getString(
                     R.string.search_resumption_module_subtitle);
-            mHeaderView.setContentDescription(description + collapseOrExpandedText);
+            mHeaderView.setContentDescription(description + " " + collapseOrExpandedText);
         }
 
         if (mTileContainerView.isExpanded() == shouldExpand) return;
diff --git a/chrome/browser/signin/dice_signed_in_profile_creator.cc b/chrome/browser/signin/dice_signed_in_profile_creator.cc
index 494a17b..f3e094c 100644
--- a/chrome/browser/signin/dice_signed_in_profile_creator.cc
+++ b/chrome/browser/signin/dice_signed_in_profile_creator.cc
@@ -97,6 +97,10 @@
     : source_profile_(source_profile),
       account_id_(account_id),
       callback_(std::move(callback)) {
+  auto initialized_callback =
+      base::BindOnce(&DiceSignedInProfileCreator::OnNewProfileInitialized,
+                     weak_pointer_factory_.GetWeakPtr());
+
   // Passing the sign-in token to an ephemeral Guest profile is part of the
   // experiment to surface a Guest mode link in the DiceWebSigninIntercept
   // and is only used to sign in to the web through account consistency and
@@ -114,9 +118,7 @@
         base::BindOnce(&ProfileManager::CreateProfileAsync,
                        base::Unretained(g_browser_process->profile_manager()),
                        ProfileManager::GetGuestProfilePath(),
-                       base::BindRepeating(
-                           &DiceSignedInProfileCreator::OnNewProfileCreated,
-                           weak_pointer_factory_.GetWeakPtr())));
+                       std::move(initialized_callback), base::DoNothing()));
   } else {
     ProfileAttributesStorage& storage =
         g_browser_process->profile_manager()->GetProfileAttributesStorage();
@@ -125,10 +127,9 @@
     std::u16string name = local_profile_name.empty()
                               ? storage.ChooseNameForNewProfile(*icon_index)
                               : local_profile_name;
-    ProfileManager::CreateMultiProfileAsync(
-        name, *icon_index, /*is_hidden=*/false,
-        base::BindRepeating(&DiceSignedInProfileCreator::OnNewProfileCreated,
-                            weak_pointer_factory_.GetWeakPtr()));
+    ProfileManager::CreateMultiProfileAsync(name, *icon_index,
+                                            /*is_hidden=*/false,
+                                            std::move(initialized_callback));
   }
 }
 
@@ -153,26 +154,9 @@
 
 DiceSignedInProfileCreator::~DiceSignedInProfileCreator() = default;
 
-void DiceSignedInProfileCreator::OnNewProfileCreated(
-    Profile* new_profile,
-    Profile::CreateStatus status) {
-  switch (status) {
-    case Profile::CREATE_STATUS_CREATED:
-      // Ignore this, wait for profile to be initialized.
-      return;
-    case Profile::CREATE_STATUS_INITIALIZED:
-      OnNewProfileInitialized(new_profile);
-      return;
-    case Profile::CREATE_STATUS_LOCAL_FAIL:
-      NOTREACHED() << "Error creating new profile";
-      if (callback_)
-        std::move(callback_).Run(nullptr);
-      return;
-  }
-}
-
 void DiceSignedInProfileCreator::OnNewProfileInitialized(Profile* new_profile) {
   if (!new_profile) {
+    NOTREACHED() << "Error creating new profile";
     if (callback_)
       std::move(callback_).Run(nullptr);
     return;
diff --git a/chrome/browser/signin/dice_signed_in_profile_creator.h b/chrome/browser/signin/dice_signed_in_profile_creator.h
index 97bb462..23f86b1b 100644
--- a/chrome/browser/signin/dice_signed_in_profile_creator.h
+++ b/chrome/browser/signin/dice_signed_in_profile_creator.h
@@ -48,12 +48,8 @@
       delete;
 
  private:
-  // Callback invoked once a profile is created, so we can transfer the
-  // credentials.
-  void OnNewProfileCreated(Profile* new_profile, Profile::CreateStatus status);
-
   // Called when the profile is initialized.
-  void OnNewProfileInitialized(Profile* new_profile);
+  void OnNewProfileInitialized(Profile* profile);
 
   // Callback invoked once the token service is ready for the new profile.
   void OnNewProfileTokensLoaded(Profile* new_profile);
diff --git a/chrome/browser/signin/signin_ui_util_browsertest.cc b/chrome/browser/signin/signin_ui_util_browsertest.cc
index 299e455..51466cb 100644
--- a/chrome/browser/signin/signin_ui_util_browsertest.cc
+++ b/chrome/browser/signin/signin_ui_util_browsertest.cc
@@ -36,15 +36,11 @@
     base::RunLoop run_loop;
     ProfileManager::CreateMultiProfileAsync(
         u"test_profile", /*icon_index=*/0, /*is_hidden=*/false,
-        base::BindLambdaForTesting(
-            [&new_profile, &run_loop](Profile* profile,
-                                      Profile::CreateStatus status) {
-              ASSERT_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL);
-              if (status == Profile::CREATE_STATUS_INITIALIZED) {
-                new_profile = profile;
-                run_loop.Quit();
-              }
-            }));
+        base::BindLambdaForTesting([&new_profile, &run_loop](Profile* profile) {
+          ASSERT_TRUE(profile);
+          new_profile = profile;
+          run_loop.Quit();
+        }));
     run_loop.Run();
     return new_profile;
   }
diff --git a/chrome/browser/signin/signin_util_win_browsertest.cc b/chrome/browser/signin/signin_util_win_browsertest.cc
index 04a141c..858c90f 100644
--- a/chrome/browser/signin/signin_util_win_browsertest.cc
+++ b/chrome/browser/signin/signin_util_win_browsertest.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/signin_util_win.h"
@@ -486,30 +487,12 @@
                              /*existing_email=*/L"foo@gmail.com",
                              /*expect_is_started=*/true)));
 
-void UnblockOnProfileInitialized(base::OnceClosure quit_closure,
-                                 Profile* profile,
-                                 Profile::CreateStatus status) {
-  // If the status is CREATE_STATUS_CREATED, then the function will be called
-  // again with CREATE_STATUS_INITIALIZED.
-  if (status == Profile::CREATE_STATUS_CREATED)
-    return;
-
-  EXPECT_EQ(Profile::CREATE_STATUS_INITIALIZED, status);
-  std::move(quit_closure).Run();
-}
-
 void CreateAndSwitchToProfile(const std::string& basepath) {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   ASSERT_TRUE(profile_manager);
 
   base::FilePath path = profile_manager->user_data_dir().AppendASCII(basepath);
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      path, base::BindRepeating(&UnblockOnProfileInitialized,
-                                run_loop.QuitClosure()));
-  // Run the message loop to allow profile initialization to take place; the
-  // loop is terminated by UnblockOnProfileInitialized.
-  run_loop.Run();
+  profiles::testing::CreateProfileSync(profile_manager, path);
 
   profiles::SwitchToProfile(path, false);
 }
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc
index 68c0229..6931647 100644
--- a/chrome/browser/sync/test/integration/sync_test.cc
+++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -35,6 +35,7 @@
 #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
 #include "chrome/browser/net/system_network_context_manager.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/signin/chrome_signin_client_factory.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
@@ -443,20 +444,6 @@
   return true;
 }
 
-// Called when the ProfileManager has created a profile.
-// static
-void SyncTest::CreateProfileCallback(const base::RepeatingClosure& quit_closure,
-                                     Profile* profile,
-                                     Profile::CreateStatus status) {
-  EXPECT_TRUE(profile);
-  EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status);
-  // This will be called multiple times. Wait until the profile is initialized
-  // fully to quit the loop.
-  if (status == Profile::CREATE_STATUS_INITIALIZED) {
-    quit_closure.Run();
-  }
-}
-
 // TODO(shadi): Ideally creating a new profile should not depend on signin
 // process. We should try to consolidate MakeProfileForUISignin() and
 // MakeProfile(). Major differences are profile paths and creation methods. For
@@ -465,12 +452,7 @@
 // static
 Profile* SyncTest::MakeProfileForUISignin(base::FilePath profile_path) {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
-  base::RunLoop run_loop;
-  ProfileManager::CreateCallback create_callback =
-      base::BindRepeating(&CreateProfileCallback, run_loop.QuitClosure());
-  profile_manager->CreateProfileAsync(profile_path, create_callback);
-  run_loop.Run();
-  return profile_manager->GetProfileByPath(profile_path);
+  return profiles::testing::CreateProfileSync(profile_manager, profile_path);
 }
 
 Profile* SyncTest::GetProfile(int index) const {
diff --git a/chrome/browser/sync/test/integration/sync_test.h b/chrome/browser/sync/test/integration/sync_test.h
index 25caaa4..8efa109 100644
--- a/chrome/browser/sync/test/integration/sync_test.h
+++ b/chrome/browser/sync/test/integration/sync_test.h
@@ -341,12 +341,6 @@
   // determined at runtime based on server type.
   bool CreateProfile(int index);
 
-  // Callback for MakeProfileForUISignin() method. It runs the quit_closure once
-  // profile is created successfully.
-  static void CreateProfileCallback(const base::RepeatingClosure& quit_closure,
-                                    Profile* profile,
-                                    Profile::CreateStatus status);
-
   static std::unique_ptr<KeyedService> CreateProfileInvalidationProvider(
       std::map<const Profile*, invalidation::FCMNetworkHandler*>*
           profile_to_fcm_network_handler_map,
diff --git a/chrome/browser/task_manager/providers/worker_task_provider_browsertest.cc b/chrome/browser/task_manager/providers/worker_task_provider_browsertest.cc
index 75339f57..f0119c9 100644
--- a/chrome/browser/task_manager/providers/worker_task_provider_browsertest.cc
+++ b/chrome/browser/task_manager/providers/worker_task_provider_browsertest.cc
@@ -12,6 +12,7 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/task_manager/providers/task_provider_observer.h"
 #include "chrome/browser/task_manager/providers/worker_task_provider.h"
@@ -43,13 +44,6 @@
 
 namespace {
 
-void OnUnblockOnProfileCreation(base::RunLoop* run_loop,
-                                Profile* profile,
-                                Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-
 std::u16string ExpectedTaskTitle(const std::string& title) {
   return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_SERVICE_WORKER_PREFIX,
                                     base::UTF8ToUTF16(title));
@@ -90,14 +84,10 @@
 
   Browser* CreateNewProfileAndSwitch() {
     ProfileManager* profile_manager = g_browser_process->profile_manager();
-
-    // Create an additional profile.
     base::FilePath new_path =
         profile_manager->GenerateNextProfileDirectoryPath();
-    base::RunLoop run_loop;
-    profile_manager->CreateProfileAsync(
-        new_path, base::BindRepeating(&OnUnblockOnProfileCreation, &run_loop));
-    run_loop.Run();
+    // Create an additional profile.
+    profiles::testing::CreateProfileSync(profile_manager, new_path);
 
     profiles::SwitchToProfile(new_path, /* always_create = */ false,
                               base::DoNothing());
diff --git a/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn b/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn
index 5adb8ee..0e83dd62 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn
+++ b/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn
@@ -14,6 +14,8 @@
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutMediator.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutModel.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutSheetContent.java",
+    "java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenCoordinator.java",
+    "java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenViewBinder.java",
   ]
   deps = [
     ":java_resources",
@@ -26,6 +28,7 @@
     "//components/browser_ui/bottomsheet/android:java",
     "//components/browser_ui/strings/android:browser_ui_strings_grd",
     "//third_party/androidx:androidx_annotation_annotation_java",
+    "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
     "//ui/android:ui_no_recycler_view_java",
   ]
   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_home_screen_sheet.xml b/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_home_screen_sheet.xml
index 2eeaf73..095ad269 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_home_screen_sheet.xml
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_home_screen_sheet.xml
@@ -43,6 +43,7 @@
       android:orientation="vertical">
       <!-- Selected Address  -->
       <LinearLayout
+          android:id="@+id/selected_address_profile_view"
           android:layout_height="wrap_content"
           android:layout_width="match_parent"
           android:paddingTop="@dimen/fast_checkout_home_sheet_address_card_padding"
@@ -102,6 +103,7 @@
 
       <!-- Selected Credit Card -->
       <LinearLayout
+          android:id="@+id/selected_credit_card_view"
           android:layout_height="wrap_content"
           android:layout_width="match_parent"
           android:gravity="center_vertical"
@@ -146,7 +148,7 @@
         android:text="@string/fast_checkout_home_sheet_accept" />
 
     <org.chromium.ui.widget.ButtonCompat
-        android:id="@+id/fast_checkout_button_reject"
+        android:id="@+id/fast_checkout_button_decline"
         style="@style/TextButton"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutCoordinator.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutCoordinator.java
index 7138d2c3..29001aa 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutCoordinator.java
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutCoordinator.java
@@ -6,10 +6,12 @@
 
 import android.content.Context;
 import android.view.LayoutInflater;
+import android.view.View;
 import android.widget.ViewFlipper;
 
 import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutAutofillProfile;
 import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutCreditCard;
+import org.chromium.chrome.browser.ui.fast_checkout.home_screen.HomeScreenCoordinator;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
 import org.chromium.ui.modelutil.PropertyModel;
 
@@ -27,6 +29,11 @@
                 R.layout.fast_checkout_bottom_sheet, null);
         mContent = new FastCheckoutSheetContent(rootView);
 
+        View homeScreenView = rootView.findViewById(R.id.fast_checkout_home_screen_sheet);
+        HomeScreenCoordinator homeScreenCoordinator =
+                new HomeScreenCoordinator(context, homeScreenView, mModel, delegate);
+        // TODO(crbug.com/1334642): Create remaining 2 screens.
+
         mModel.addObserver((source, propertyKey) -> {
             if (FastCheckoutModel.CURRENT_SCREEN == propertyKey) {
                 rootView.setDisplayedChild(mModel.get(FastCheckoutModel.CURRENT_SCREEN));
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutMediator.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutMediator.java
index 93929e4..2aa032e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutMediator.java
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutMediator.java
@@ -11,6 +11,7 @@
 
 import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutAutofillProfile;
 import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutCreditCard;
+import org.chromium.chrome.browser.ui.fast_checkout.home_screen.HomeScreenCoordinator;
 import org.chromium.components.autofill_assistant.AutofillAssistantPublicTags;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
@@ -54,11 +55,47 @@
                 mBottomSheetController.removeObserver(mBottomSheetDismissedObserver);
             }
         };
+
+        mModel.set(FastCheckoutModel.HOME_SCREEN_DELEGATE, new HomeScreenCoordinator.Delegate() {
+            @Override
+            public void onOptionsAccepted() {
+                if (!mModel.get(FastCheckoutModel.VISIBLE)) {
+                    return; // Dismiss only if not dismissed yet.
+                }
+                FastCheckoutAutofillProfile profile =
+                        mModel.get(FastCheckoutModel.SELECTED_PROFILE);
+                FastCheckoutCreditCard creditCard =
+                        mModel.get(FastCheckoutModel.SELECTED_CREDIT_CARD);
+                assert profile != null && creditCard != null;
+                mModel.set(FastCheckoutModel.VISIBLE, false);
+                mDelegate.onOptionsSelected(profile, creditCard);
+            };
+
+            @Override
+            public void onDismiss() {
+                if (!mModel.get(FastCheckoutModel.VISIBLE)) {
+                    return; // Dismiss only if not dismissed yet.
+                }
+                mModel.set(FastCheckoutModel.VISIBLE, false);
+                mDelegate.onDismissed();
+            }
+
+            @Override
+            public void onShowAddressesList() {
+                // TODO(crbug.com/1334642): Show addresses list screen.
+            }
+
+            @Override
+            public void onShowCreditCardList() {
+                // TODO(crbug.com/1334642): Show credit cards list screen.
+            }
+        });
     }
 
     public void showOptions(
             FastCheckoutAutofillProfile[] profiles, FastCheckoutCreditCard[] creditCards) {
-        // TODO(crbug.com/1334642): Add |profiles| and |creditCards| to the model.
+        setAutofillProfileItems(profiles);
+        setCreditCardItems(creditCards);
 
         // It is possible that FC onboarding has been just accepted but the bottom sheet is still
         // showing. If that's the case we try hiding it and then show FC bottom sheet.
@@ -113,6 +150,20 @@
                         AutofillAssistantPublicTags.AUTOFILL_ASSISTANT_BOTTOM_SHEET_CONTENT_TAG);
     }
 
+    public void setAutofillProfileItems(FastCheckoutAutofillProfile[] profiles) {
+        // TODO(crbug.com/1334642): Keep proper track of selected profile and list of available
+        // profile items. For now setting the first element of the list as default.
+        assert profiles.length != 0;
+        mModel.set(FastCheckoutModel.SELECTED_PROFILE, profiles[0]);
+    }
+
+    public void setCreditCardItems(FastCheckoutCreditCard[] creditCards) {
+        // TODO(crbug.com/1334642): Keep proper track of the selected credit card and list of
+        // available credit card items. For now setting the first element of the list as default.
+        assert creditCards.length != 0;
+        mModel.set(FastCheckoutModel.SELECTED_CREDIT_CARD, creditCards[0]);
+    }
+
     /**
      * Releases the resources used by FastCheckoutMediator.
      */
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutModel.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutModel.java
index b1aca1bc3..b43a2d3f 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutModel.java
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutModel.java
@@ -6,8 +6,14 @@
 
 import androidx.annotation.IntDef;
 
+import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutAutofillProfile;
+import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutCreditCard;
+import org.chromium.chrome.browser.ui.fast_checkout.home_screen.HomeScreenCoordinator;
 import org.chromium.ui.modelutil.PropertyKey;
 import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey;
+import org.chromium.ui.modelutil.PropertyModel.WritableIntPropertyKey;
+import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -29,15 +35,24 @@
     }
 
     /** Property that indicates the bottom sheet visibility. */
-    public static final PropertyModel.WritableBooleanPropertyKey VISIBLE =
-            new PropertyModel.WritableBooleanPropertyKey();
+    public static final WritableBooleanPropertyKey VISIBLE = new WritableBooleanPropertyKey();
+
+    /** The chosen address option. */
+    public static final WritableObjectPropertyKey<FastCheckoutAutofillProfile> SELECTED_PROFILE =
+            new WritableObjectPropertyKey<>();
+
+    /** The chosen credit card option. */
+    public static final WritableObjectPropertyKey<FastCheckoutCreditCard> SELECTED_CREDIT_CARD =
+            new WritableObjectPropertyKey<>();
+
+    public static final WritableObjectPropertyKey<HomeScreenCoordinator.Delegate>
+            HOME_SCREEN_DELEGATE = new WritableObjectPropertyKey<>();
 
     /**
      * Property that indicates which screen (i.e ScreenType) is currently displayed on the bottom
      * sheet.
      */
-    public static final PropertyModel.WritableIntPropertyKey CURRENT_SCREEN =
-            new PropertyModel.WritableIntPropertyKey();
+    public static final WritableIntPropertyKey CURRENT_SCREEN = new WritableIntPropertyKey();
 
     static PropertyModel createDefaultModel() {
         return new PropertyModel.Builder(ALL_KEYS)
@@ -47,5 +62,6 @@
     }
 
     /** All keys used for the fast checkout bottom sheet. */
-    static final PropertyKey[] ALL_KEYS = new PropertyKey[] {CURRENT_SCREEN, VISIBLE};
+    static final PropertyKey[] ALL_KEYS = new PropertyKey[] {
+            CURRENT_SCREEN, VISIBLE, SELECTED_PROFILE, SELECTED_CREDIT_CARD, HOME_SCREEN_DELEGATE};
 }
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenCoordinator.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenCoordinator.java
new file mode 100644
index 0000000..9fbe021
--- /dev/null
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenCoordinator.java
@@ -0,0 +1,38 @@
+// 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.chrome.browser.ui.fast_checkout.home_screen;
+
+import android.content.Context;
+import android.view.View;
+
+import org.chromium.chrome.browser.ui.fast_checkout.FastCheckoutComponent;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
+
+/**
+ * Coordinator for the home screen of the Fast Checkout bottom sheet.
+ */
+public class HomeScreenCoordinator {
+    /** The delegate of the class. */
+    public interface Delegate {
+        /** The current selected options were accepted. */
+        void onOptionsAccepted();
+        /** The current selected options were declined by the user. */
+        void onDismiss();
+        /** The user clicked on the selected address item. */
+        void onShowAddressesList();
+        /** The user clicked on the selected credit card item. */
+        void onShowCreditCardList();
+    }
+
+    public HomeScreenCoordinator(Context context, View view, PropertyModel model,
+            FastCheckoutComponent.Delegate delegate) {
+        // Bind view and mediator through the model.
+        HomeScreenViewBinder.ViewHolder viewHolder =
+                new HomeScreenViewBinder.ViewHolder(context, view);
+
+        PropertyModelChangeProcessor.create(model, viewHolder, HomeScreenViewBinder::bind);
+    }
+}
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenViewBinder.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenViewBinder.java
new file mode 100644
index 0000000..982f7ec6
--- /dev/null
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenViewBinder.java
@@ -0,0 +1,107 @@
+// 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.chrome.browser.ui.fast_checkout.home_screen;
+
+import static org.chromium.chrome.browser.ui.fast_checkout.FastCheckoutModel.HOME_SCREEN_DELEGATE;
+import static org.chromium.chrome.browser.ui.fast_checkout.FastCheckoutModel.SELECTED_CREDIT_CARD;
+import static org.chromium.chrome.browser.ui.fast_checkout.FastCheckoutModel.SELECTED_PROFILE;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.appcompat.content.res.AppCompatResources;
+
+import org.chromium.chrome.browser.ui.fast_checkout.R;
+import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutAutofillProfile;
+import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutCreditCard;
+import org.chromium.chrome.browser.ui.fast_checkout.home_screen.HomeScreenCoordinator.Delegate;
+import org.chromium.ui.modelutil.PropertyKey;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.widget.ButtonCompat;
+
+/**
+ * This class is responsible for pushing updates to the Fast Checkout home screen view. These
+ * updates are pulled from the {@link FastCheckoutModel} when a notification of an update is
+ * received.
+ */
+public class HomeScreenViewBinder {
+    static class ViewHolder {
+        final Context mContext;
+        final TextView mFullNameTextView;
+        final TextView mStreetAddressTextView;
+        final TextView mEmailAddressTextView;
+        final TextView mPhoneNumberTextView;
+        final TextView mCreditCardHeaderTextView;
+        final ImageView mCreditCardImageView;
+        final LinearLayout mSelectedAddressView;
+        final LinearLayout mSelectedCreditCardView;
+        final ButtonCompat mAcceptButton;
+        final ButtonCompat mDeclineButton;
+
+        ViewHolder(Context context, View contentView) {
+            mContext = context;
+            mFullNameTextView =
+                    contentView.findViewById(R.id.fast_checkout_home_sheet_profile_name);
+            mStreetAddressTextView =
+                    contentView.findViewById(R.id.fast_checkout_home_sheet_profile_street);
+            mEmailAddressTextView =
+                    contentView.findViewById(R.id.fast_checkout_home_sheet_profile_email);
+            mPhoneNumberTextView =
+                    contentView.findViewById(R.id.fast_checkout_home_sheet_profile_phone_number);
+            mCreditCardHeaderTextView =
+                    contentView.findViewById(R.id.fast_checkout_sheet_selected_credit_card_header);
+            mCreditCardImageView = contentView.findViewById(R.id.fast_checkout_credit_card_icon);
+            mSelectedAddressView = contentView.findViewById(R.id.selected_address_profile_view);
+            mSelectedCreditCardView = contentView.findViewById(R.id.selected_credit_card_view);
+            mAcceptButton = contentView.findViewById(R.id.fast_checkout_button_accept);
+            mDeclineButton = contentView.findViewById(R.id.fast_checkout_button_decline);
+        }
+    }
+
+    public static void bind(PropertyModel model, ViewHolder view, PropertyKey propertyKey) {
+        if (propertyKey == HOME_SCREEN_DELEGATE) {
+            Delegate delegate = model.get(HOME_SCREEN_DELEGATE);
+
+            view.mSelectedAddressView.setOnClickListener((v) -> delegate.onShowAddressesList());
+
+            view.mSelectedCreditCardView.setOnClickListener((v) -> delegate.onShowCreditCardList());
+
+            view.mDeclineButton.setOnClickListener((v) -> delegate.onDismiss());
+
+            view.mAcceptButton.setOnClickListener((v) -> delegate.onOptionsAccepted());
+        } else if (propertyKey == SELECTED_PROFILE) {
+            updateProfile(model, view);
+        } else if (propertyKey == SELECTED_CREDIT_CARD) {
+            updateCreditCard(model, view);
+        }
+    }
+
+    private static String getFullStreetAddress(FastCheckoutAutofillProfile profile) {
+        return profile.getStreetAddress() + ", " + profile.getPostalCode();
+    }
+
+    private static void updateProfile(PropertyModel model, ViewHolder view) {
+        FastCheckoutAutofillProfile profile = model.get(SELECTED_PROFILE);
+        view.mFullNameTextView.setText(profile.getFullName());
+        view.mStreetAddressTextView.setText(getFullStreetAddress(profile));
+        view.mEmailAddressTextView.setText(profile.getEmailAddress());
+        view.mPhoneNumberTextView.setText(profile.getPhoneNumber());
+    }
+
+    private static void updateCreditCard(PropertyModel model, ViewHolder view) {
+        FastCheckoutCreditCard creditCard = model.get(SELECTED_CREDIT_CARD);
+        view.mCreditCardHeaderTextView.setText(creditCard.getObfuscatedNumber());
+        try {
+            view.mCreditCardImageView.setImageDrawable(AppCompatResources.getDrawable(
+                    view.mContext, creditCard.getIssuerIconDrawableId()));
+        } catch (Resources.NotFoundException e) {
+            view.mCreditCardImageView.setImageDrawable(null);
+        }
+    }
+}
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb
index 38bb7a6f..c961bcb 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="af">
 <translation id="1068168522143272502">Blad met lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word, is halfpad oop.</translation>
 <translation id="567079066552447069">Blad met lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word, is toe.</translation>
+<translation id="780301667611848630">Nee, dankie</translation>
 <translation id="8264703973415044493">Blad met lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word, is heeltemal oop.</translation>
 <translation id="8315600272591552085">Lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_am.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_am.xtb
index 27f282d0..88fa21f 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_am.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_am.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="am">
 <translation id="1068168522143272502">በክፍያ ማጠናቀቂያ ፍሰቶች ጊዜ የሚሞላው የአድራሻዎች እና የክፍያ አማራጮች ዝርዝር በግማሽ ቁመቱ ተከፍቷል።</translation>
 <translation id="567079066552447069">በክፍያ ማጠናቀቂያ ፍሰቶች ጊዜ የሚሞላው የአድራሻዎች እና የክፍያ አማራጮች ዝርዝር ተዘግቷል።</translation>
+<translation id="780301667611848630">አይ፣ አመሰግናለሁ</translation>
 <translation id="8264703973415044493">በክፍያ ማጠናቀቂያ ፍሰቶች ጊዜ የሚሞላው የአድራሻዎች እና የክፍያ አማራጮች ዝርዝር በሙሉ ቁመቱ ተከፍቷል።</translation>
 <translation id="8315600272591552085">በክፍያ ማጠናቀቂያ ፍሰቶች ጊዜ የሚሞላው የአድራሻዎች እና የክፍያ አማራጮች ዝርዝር።</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb
index d3e89aa7..73134ce 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ar">
 <translation id="1068168522143272502">قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع تم فتحها في نصف الشاشة.</translation>
 <translation id="567079066552447069">تم إغلاق قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع.</translation>
+<translation id="780301667611848630">لا، شكرًا</translation>
 <translation id="8264703973415044493">قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع تم فتحها بطول الشاشة.</translation>
 <translation id="8315600272591552085">قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb
index f2a056a..47e7f4a 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="as">
 <translation id="1068168522143272502">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী অৰ্ধাংশত খোলা হৈছে।</translation>
 <translation id="567079066552447069">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী বন্ধ কৰা হৈছে।</translation>
+<translation id="780301667611848630">নালাগে, ধন্যবাদ</translation>
 <translation id="8264703973415044493">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী সম্পূৰ্ণ অংশত খোলা হৈছে।</translation>
 <translation id="8315600272591552085">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী।</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_az.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_az.xtb
index 85e76195..57a4efb 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_az.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_az.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="az">
 <translation id="1068168522143272502">Ödəniş prosesi zamanı doldurulacaq ünvanların siyahısı və ödəniş seçimləri yarım hündürlükdə açılıb.</translation>
 <translation id="567079066552447069">Ödəniş prosesi zamanı doldurulacaq ünvanların siyahısı və ödəniş seçimləri bağlıdır.</translation>
+<translation id="780301667611848630">Yox, çox sağ olun</translation>
 <translation id="8264703973415044493">Ödəniş prosesi zamanı doldurulacaq ünvanların siyahısı və ödəniş seçimləri tam hündürlükdə açılıb.</translation>
 <translation id="8315600272591552085">Ödəniş prosesi zamanı doldurulacaq ünvanların siyahısı və ödəniş seçimləri.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb
index d5662f4..035af91a 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="be">
 <translation id="1068168522143272502">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў, разгорнуты на палову экрана.</translation>
 <translation id="567079066552447069">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў, закрыты.</translation>
+<translation id="780301667611848630">Не, дзякуй</translation>
 <translation id="8264703973415044493">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў, разгорнуты на ўвесь экран.</translation>
 <translation id="8315600272591552085">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb
index 8bb24783..dcfdfb8 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="bg">
 <translation id="1068168522143272502">Списъкът с адреси и опции за плащане, които да се попълват при плащане, е отворен на половината височина.</translation>
 <translation id="567079066552447069">Списъкът с адреси и опции за плащане, които да се попълват при плащане, е затворен.</translation>
+<translation id="780301667611848630">Не, благодаря</translation>
 <translation id="8264703973415044493">Списъкът с адреси и опции за плащане, които да се попълват при плащане, е отворен на пълната височина.</translation>
 <translation id="8315600272591552085">Списък с адреси и опции за плащане, които да се попълват при плащане.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bn.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bn.xtb
index 1ee40de..502aba7 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bn.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bn.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="bn">
 <translation id="1068168522143272502">চেক-আউট ফ্লো চলাকালীন পূরণ করার জন্য ঠিকানা ও পেমেন্ট বিকল্পের তালিকা অর্ধেক স্ক্রিন জুড়ে খোলা হয়েছে।</translation>
 <translation id="567079066552447069">চেক-আউট ফ্লো চলাকালীন পূরণ করার জন্য ঠিকানা ও পেমেন্ট বিকল্পের তালিকা বন্ধ করা হয়েছে।</translation>
+<translation id="780301667611848630">না থাক</translation>
 <translation id="8264703973415044493">চেক-আউট ফ্লো চলাকালীন পূরণ করার জন্য ঠিকানা ও পেমেন্ট বিকল্পের তালিকা সম্পূর্ণ স্ক্রিন জুড়ে খোলা হয়েছে।</translation>
 <translation id="8315600272591552085">চেক-আউট ফ্লো চলাকালীন পূরণ করার জন্য ঠিকানা ও পেমেন্ট বিকল্পের তালিকা।</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb
index bfe6d2e..1a1ec44c 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="bs">
 <translation id="1068168522143272502">Lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje je otvorena na pola visine.</translation>
 <translation id="567079066552447069">Zatvorena je lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje.</translation>
+<translation id="780301667611848630">Ne, hvala</translation>
 <translation id="8264703973415044493">Lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje je otvorena u punoj visini.</translation>
 <translation id="8315600272591552085">Lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb
index caedae0..1c362b3 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ca">
 <translation id="1068168522143272502">La llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra s'ha obert a mitja alçada.</translation>
 <translation id="567079066552447069">La llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra està tancada.</translation>
+<translation id="780301667611848630">No, gràcies</translation>
 <translation id="8264703973415044493">La llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra s'ha obert a alçada completa.</translation>
 <translation id="8315600272591552085">Llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb
index a86979e..b20b2c3 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="cs">
 <translation id="1068168522143272502">Seznam adres a platebních možností, které se mají vyplnit při placení, je otevřený na poloviční výšku.</translation>
 <translation id="567079066552447069">Seznam adres a platebních možností, které se mají vyplnit při placení, je zavřený.</translation>
+<translation id="780301667611848630">Ne, děkuji</translation>
 <translation id="8264703973415044493">Seznam adres a platebních možností, které se mají vyplnit při placení, je otevřený na celou výšku.</translation>
 <translation id="8315600272591552085">Seznam adres a platebních možností, které se mají vyplnit při placení.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
index f29b4a7..ac19664 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="cy">
 <translation id="1068168522143272502">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu wedi agor ar hanner uchder.</translation>
 <translation id="567079066552447069">Mae'r rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu ar gau.</translation>
+<translation id="780301667611848630">Dim diolch</translation>
 <translation id="8264703973415044493">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu wedi agor ar uchder llawn.</translation>
 <translation id="8315600272591552085">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb
index 7ef4c929..fc980010 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="da">
 <translation id="1068168522143272502">Listen over adresser og betalingsmuligheder, der skal udfyldes under betalingsprocessen, er åbnet i halv højde.</translation>
 <translation id="567079066552447069">Listen over adresser og betalingsmuligheder, der skal udfyldes i forbindelse med betalingsprocessen, er lukket.</translation>
+<translation id="780301667611848630">Nej tak</translation>
 <translation id="8264703973415044493">Listen over adresser og betalingsmuligheder, der skal udfyldes i forbindelse med betalingsprocessen, er åbnet i fuld højde.</translation>
 <translation id="8315600272591552085">Listen over adresser og betalingsmuligheder, der skal udfyldes i forbindelse med betalingsprocessen.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb
index 2f022abc..bca2e67 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="de">
 <translation id="1068168522143272502">Die Liste der Adressen und Zahlungsoptionen, die beim Zahlungsvorgang ausgefüllt werden sollen, ist halb geöffnet.</translation>
 <translation id="567079066552447069">Die Liste der Adressen und Zahlungsoptionen, die während des Bezahlvorgangs ausgefüllt werden sollen, ist geschlossen.</translation>
+<translation id="780301667611848630">Kein Interesse</translation>
 <translation id="8264703973415044493">Die Liste der Adressen und Zahlungsoptionen, die während des Bezahlvorgangs ausgefüllt werden sollen, ist vollständig geöffnet.</translation>
 <translation id="8315600272591552085">Die Liste der Adressen und Zahlungsoptionen, die beim Zahlungsvorgang ausgefüllt werden sollen.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_el.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_el.xtb
index aeb1f38..10917dce 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_el.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_el.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="el">
 <translation id="1068168522143272502">Η λίστα διευθύνσεων και επιλογών πληρωμής που πρέπει να συμπληρωθούν κατά τη διάρκεια των ροών ολοκλήρωσης αγοράς έχει ανοίξει σε μισό ύψος.</translation>
 <translation id="567079066552447069">Η λίστα διευθύνσεων και επιλογών πληρωμής που πρέπει να συμπληρωθούν κατά τη διάρκεια των ροών ολοκλήρωσης αγοράς είναι κλειστή.</translation>
+<translation id="780301667611848630">Όχι, ευχαριστώ</translation>
 <translation id="8264703973415044493">Η λίστα διευθύνσεων και επιλογών πληρωμής που πρέπει να συμπληρωθούν κατά τη διάρκεια των ροών ολοκλήρωσης αγοράς έχει ανοίξει σε πλήρες ύψος.</translation>
 <translation id="8315600272591552085">Η λίστα διευθύνσεων και επιλογών πληρωμής που πρέπει να συμπληρωθούν κατά τη διάρκεια των ροών ολοκλήρωσης αγοράς.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_en-GB.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_en-GB.xtb
index ebe68ee2..780177a 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_en-GB.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="en-GB">
 <translation id="1068168522143272502">List of addresses and payment options to be filled in during checkout flows opened at half height.</translation>
 <translation id="567079066552447069">List of addresses and payment options to be filled in during checkout flows is closed.</translation>
+<translation id="780301667611848630">No, thanks</translation>
 <translation id="8264703973415044493">List of addresses and payment options to be filled in during checkout flows opened at full height.</translation>
 <translation id="8315600272591552085">List of addresses and payment options to be filled in during checkout flows.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb
index a2ec00b7..f295a24 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="es-419">
 <translation id="1068168522143272502">La lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra está abierta a media altura.</translation>
 <translation id="567079066552447069">La lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra está cerrada.</translation>
+<translation id="780301667611848630">No, gracias</translation>
 <translation id="8264703973415044493">La lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra se abrió en su totalidad.</translation>
 <translation id="8315600272591552085">Lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es.xtb
index 53500e8..339177c 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="es">
 <translation id="1068168522143272502">La lista de direcciones y opciones de pago que puedes rellenar durante el flujo de tramitación de la compra está abierta a media altura.</translation>
 <translation id="567079066552447069">La lista de direcciones y opciones de pago que puedes rellenar durante el flujo de tramitación de la compra está cerrada.</translation>
+<translation id="780301667611848630">No, gracias</translation>
 <translation id="8264703973415044493">La lista de direcciones y opciones de pago que puedes rellenar durante el flujo de tramitación de la compra está abierta a altura completa.</translation>
 <translation id="8315600272591552085">La lista de direcciones y opciones de pago que puedes rellenar durante el flujo de tramitación de la compra.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
index 48981c6..0572934 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="et">
 <translation id="1068168522143272502">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on avatud poolel kõrgusel.</translation>
 <translation id="567079066552447069">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on suletud.</translation>
+<translation id="780301667611848630">Ei, aitäh</translation>
 <translation id="8264703973415044493">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on avatud täiskõrgusel.</translation>
 <translation id="8315600272591552085">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
index 34ef136a..10bfc01 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="eu">
 <translation id="1068168522143272502">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda altuera erdian irekita dago.</translation>
 <translation id="567079066552447069">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda itxita dago.</translation>
+<translation id="780301667611848630">Ez, eskerrik asko</translation>
 <translation id="8264703973415044493">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda altuera osoan irekita dago.</translation>
 <translation id="8315600272591552085">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb
index a9d26bc..7ff6c06 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="fa">
 <translation id="1068168522143272502">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود به‌صورت نیمه باز شده است.</translation>
 <translation id="567079066552447069">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود بسته شده است.</translation>
+<translation id="780301667611848630">نه متشکرم</translation>
 <translation id="8264703973415044493">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود به‌صورت کامل باز شده است.</translation>
 <translation id="8315600272591552085">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb
index 1e48595..d16456d 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="fi">
 <translation id="1068168522143272502">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat on avattu puoliksi.</translation>
 <translation id="567079066552447069">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat on suljettu.</translation>
+<translation id="780301667611848630">Ei kiitos</translation>
 <translation id="8264703973415044493">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat on avattu täysin.</translation>
 <translation id="8315600272591552085">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fil.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fil.xtb
index 524717c0..771eb0b 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fil.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fil.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="fil">
 <translation id="1068168522143272502">Binuksan ang listahan ng mga address at opsyon sa pagbabayad na sasagutan sa mga daloy ng pag-checkout nang kalahati ang taas.</translation>
 <translation id="567079066552447069">Sarado na ang listahan ng mga address at opsyon sa pagbabayad na sasagutan sa mga daloy ng pag-checkout.</translation>
+<translation id="780301667611848630">Hindi salamat</translation>
 <translation id="8264703973415044493">Binuksan ang listahan ng mga address at opsyon sa pagbabayad na sasagutan sa mga daloy ng pag-checkout nang buo ang taas.</translation>
 <translation id="8315600272591552085">Listahan ng mga address at opsyon sa pagbabayad na sasagutan sa mga daloy ng pag-checkout.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr-CA.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr-CA.xtb
index 398b76e..d56949b 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr-CA.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="fr-CA">
 <translation id="1068168522143272502">La liste des adresses et options de paiement à renseigner dans les flux de paiement est ouverte à mi-hauteur.</translation>
 <translation id="567079066552447069">La liste des adresses et options de paiement à renseigner dans les flux de paiement est fermée.</translation>
+<translation id="780301667611848630">Non merci</translation>
 <translation id="8264703973415044493">La liste des adresses et options de paiement à renseigner dans les flux de paiement est ouverte à pleine hauteur.</translation>
 <translation id="8315600272591552085">Liste des adresses et options de paiement à renseigner dans les flux de paiement.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr.xtb
index 8679d910..2083b6b 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fr.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="fr">
 <translation id="1068168522143272502">Liste des adresses et des options de paiement à remplir pendant le processus de règlement, ouverte à mi-hauteur.</translation>
 <translation id="567079066552447069">La liste des adresses et des options de paiement à saisir lors du règlement est fermée.</translation>
+<translation id="780301667611848630">Non merci</translation>
 <translation id="8264703973415044493">Liste des adresses et des options de paiement à remplir lors du processus de règlement, ouverte à pleine hauteur.</translation>
 <translation id="8315600272591552085">Liste des adresses et des options de paiement à remplir lors du processus de règlement.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gl.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gl.xtb
index 00531fd9..7e6ee42 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gl.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gl.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="gl">
 <translation id="1068168522143272502">A lista de enderezos e opcións de pago que se deben completar nos fluxos de tramitación de compras está aberta a media pantalla.</translation>
 <translation id="567079066552447069">A lista de enderezos e opcións de pago que se deben completar nos fluxos de tramitación de compras está pechada.</translation>
+<translation id="780301667611848630">Non, grazas</translation>
 <translation id="8264703973415044493">A lista de enderezos e opcións de pago que se deben completar nos fluxos de tramitación de compras está aberta a pantalla completa.</translation>
 <translation id="8315600272591552085">Lista de enderezos e opcións de pago que se deben completar nos fluxos de tramitación de compras.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb
index af124a75..ed9687d 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="gu">
 <translation id="1068168522143272502">ચેકઆઉટ ફ્લો દરમિયાન સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ ભરવાની સુવિધા અડધી ખુલ્લી છે.</translation>
 <translation id="567079066552447069">ચેકઆઉટ ફ્લો દરમિયાન સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ ભરવાની સુવિધા બંધ છે.</translation>
+<translation id="780301667611848630">નહીં, આભાર</translation>
 <translation id="8264703973415044493">ચેકઆઉટ ફ્લો દરમિયાન સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ ભરવાની સુવિધા સંપૂર્ણ રીતે ખુલ્લી છે.</translation>
 <translation id="8315600272591552085">ચેકઆઉટ ફ્લો દરમિયાન ભરવાની સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hi.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hi.xtb
index 67db875..ffc8fe6 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hi.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hi.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="hi">
 <translation id="1068168522143272502">चेकआउट फ़्लो के दौरान भरे जाने वाले पतों और पेमेंट के विकल्पों की सूची, आधी स्क्रीन पर खुलेगी.</translation>
 <translation id="567079066552447069">चेकआउट फ़्लो के दौरान भरे जाने वाले पतों और पेमेंट के विकल्पों की सूची बंद है.</translation>
+<translation id="780301667611848630">नहीं, रहने दें</translation>
 <translation id="8264703973415044493">चेकआउट फ़्लो के दौरान भरे जाने वाले पतों और पेमेंट के विकल्पों की सूची, पूरी स्क्रीन पर खुलेगी.</translation>
 <translation id="8315600272591552085">चेकआउट फ़्लो के दौरान भरे जाने वाले पतों और पेमेंट के विकल्पों की सूची.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hr.xtb
index d43b7070..c4feef2 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hr.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="hr">
 <translation id="1068168522143272502">Popis adresa i opcija plaćanja koje treba popuniti tijekom procesa naplate polovično je otvoren.</translation>
 <translation id="567079066552447069">Zatvoren je popis adresa i opcija plaćanja koje treba popuniti tijekom procesa naplate.</translation>
+<translation id="780301667611848630">Ne, hvala</translation>
 <translation id="8264703973415044493">Popis adresa i opcija plaćanja koje treba popuniti tijekom procesa naplate otvoren je u punoj visini.</translation>
 <translation id="8315600272591552085">Popis adresa i opcija plaćanja koje treba popuniti tijekom procesa naplate.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb
index 09e3efe..e525bfc 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="hu">
 <translation id="1068168522143272502">A fizetési folyamat során használandó címek és fizetési lehetőségek listája meg van nyitva félmagasságban.</translation>
 <translation id="567079066552447069">A fizetési folyamat során használandó címek és fizetési lehetőségek listája be van zárva.</translation>
+<translation id="780301667611848630">Köszönöm, nem</translation>
 <translation id="8264703973415044493">A fizetési folyamat során használandó címek és fizetési lehetőségek listája meg van nyitva teljes magasságban.</translation>
 <translation id="8315600272591552085">A fizetési folyamat során használandó címek és fizetési lehetőségek listája.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb
index 1e8530e5..20c4da1 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="hy">
 <translation id="1068168522143272502">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ, բացված է կիսով չափ։</translation>
 <translation id="567079066552447069">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ, փակ է։</translation>
+<translation id="780301667611848630">Ոչ</translation>
 <translation id="8264703973415044493">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ, բացված է ամբողջությամբ։</translation>
 <translation id="8315600272591552085">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ։</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb
index d49483a..4c7fc3e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="id">
 <translation id="1068168522143272502">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout terbuka setengah.</translation>
 <translation id="567079066552447069">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout ditutup.</translation>
+<translation id="780301667611848630">Lain kali</translation>
 <translation id="8264703973415044493">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout terbuka sepenuhnya.</translation>
 <translation id="8315600272591552085">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_is.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_is.xtb
index 310a2d2c..47954b8 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_is.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_is.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="is">
 <translation id="1068168522143272502">Listi yfir heimilisföng og greiðsluvalmöguleika sem á að fylla út í greiðsluferli opinn í hálfri hæð.</translation>
 <translation id="567079066552447069">Listi yfir heimilisföng og greiðsluvalmöguleika sem á að fylla út í greiðsluferli er lokaður.</translation>
+<translation id="780301667611848630">Nei, takk</translation>
 <translation id="8264703973415044493">Listi yfir heimilisföng og greiðsluvalmöguleika sem á að fylla út í greiðsluferli opinn í fullri hæð.</translation>
 <translation id="8315600272591552085">Listi yfir heimilisföng og greiðsluvalmöguleika sem á að fylla út í greiðsluferli.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_it.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_it.xtb
index 91ab235..6b69b041 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_it.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_it.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="it">
 <translation id="1068168522143272502">Elenco di indirizzi e opzioni di pagamento da compilare durante i flussi di pagamento aperti nella parte inferiore dello schermo.</translation>
 <translation id="567079066552447069">L'elenco di indirizzi e opzioni di pagamento da compilare durante i flussi di pagamento è chiuso.</translation>
+<translation id="780301667611848630">No grazie</translation>
 <translation id="8264703973415044493">Elenco di indirizzi e opzioni di pagamento da compilare durante i flussi di pagamento aperti a schermo intero.</translation>
 <translation id="8315600272591552085">Elenco di indirizzi e opzioni di pagamento da compilare durante i flussi di pagamento.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_iw.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_iw.xtb
index 62a6ea49..555662d 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_iw.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_iw.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="iw">
 <translation id="1068168522143272502">רשימת הכתובות ואמצעי התשלום שימולאו בתהליך התשלום נפתחה בחצי הגובה.</translation>
 <translation id="567079066552447069">רשימת הכתובות ואמצעי התשלום שימולאו בתהליך התשלום נסגרה.</translation>
+<translation id="780301667611848630">לא תודה</translation>
 <translation id="8264703973415044493">רשימת הכתובות ואמצעי התשלום שימולאו בתהליך התשלום נפתחה בגובה מלא.</translation>
 <translation id="8315600272591552085">רשימת הכתובות ואמצעי התשלום שימולאו בתהליך התשלום.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ja.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ja.xtb
index b419fe4..ce199173 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ja.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ja.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ja">
 <translation id="1068168522143272502">購入手続きの際に指定する必要がある住所とお支払い方法のリストが画面の下半分に表示されています。</translation>
 <translation id="567079066552447069">購入手続きの際に指定する必要がある住所とお支払い方法のリストが閉じています。</translation>
+<translation id="780301667611848630">いいえ</translation>
 <translation id="8264703973415044493">購入手続きの際に指定する必要がある住所とお支払い方法のリストが画面全体に表示されています。</translation>
 <translation id="8315600272591552085">購入手続きの際に指定する必要がある住所とお支払い方法のリスト。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ka.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ka.xtb
index 340c9e9..9c866547 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ka.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ka.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ka">
 <translation id="1068168522143272502">იმ მისამართებისა და გადახდის ვარიანტების სია, რომელიც უნდა შეივსოს შეკვეთის გაფორმებისას, გახსნილია ნახევარ სიმაღლეზე.</translation>
 <translation id="567079066552447069">იმ მისამართებისა და გადახდის ვარიანტების სია, რომელიც უნდა შეივსოს შეკვეთის გაფორმებისას, დახურულია.</translation>
+<translation id="780301667611848630">არა, მადლობთ</translation>
 <translation id="8264703973415044493">იმ მისამართებისა და გადახდის ვარიანტების სია, რომელიც უნდა შეივსოს შეკვეთის გაფორმებისას, გახსნილია სრულ სიმაღლეზე.</translation>
 <translation id="8315600272591552085">იმ მისამართებისა და გადახდის ვარიანტების სია, რომელიც უნდა შეივსოს შეკვეთის გაფორმებისას.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kk.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kk.xtb
index aa56554..71782a28 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kk.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kk.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="kk">
 <translation id="1068168522143272502">Төлеу кезінде толтырылатын мекенжай тізімдері мен төлем опциялары жартылай ашық.</translation>
 <translation id="567079066552447069">Төлеу кезінде толтырылатын мекенжай тізімдері мен төлем опциялары жабық.</translation>
+<translation id="780301667611848630">Жоқ, рақмет</translation>
 <translation id="8264703973415044493">Төлеу кезінде толтырылатын мекенжай тізімдері мен төлем опциялары толығымен ашық.</translation>
 <translation id="8315600272591552085">Төлеу кезінде толтырылатын мекенжай тізімдері мен төлем опциялары ашық.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_km.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_km.xtb
index 17bf72f..6cff1cc 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_km.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_km.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="km">
 <translation id="1068168522143272502">បញ្ជី​អាសយដ្ឋាន និង​ជម្រើស​បង់ប្រាក់​ដែល​ត្រូវ​បំពេញ​ក្នុង​អំឡុង​លំហូរ​នៃ​ការបង់ប្រាក់ចេញ ត្រូវ​បានបើក​ពាក់កណ្ដាល​អេក្រង់។</translation>
 <translation id="567079066552447069">បញ្ជី​អាសយដ្ឋាន និង​ជម្រើស​បង់​ប្រាក់​​​ដែល​ត្រូវ​បំពេញ​ក្នុង​អំឡុង​​លំហូរ​នៃ​ការបង់ប្រាក់ចេញ ត្រូវ​បានបិទ។</translation>
+<translation id="780301667611848630">ទេ អរគុណ</translation>
 <translation id="8264703973415044493">បញ្ជី​អាសយដ្ឋាន និង​ជម្រើស​បង់ប្រាក់​ដែល​ត្រូវ​បំពេញ​ក្នុ​ងអំឡុង​លំហូរ​នៃ​ការបង់ប្រាក់ចេញ​ ត្រូវ​បាន​បើក​ពេញអេក្រង់។</translation>
 <translation id="8315600272591552085">បញ្ជី​អាសយដ្ឋាន និង​ជម្រើស​បង់ប្រាក់​ដែល​ត្រូវ​បំពេញ​ក្នុង​អំឡុង​លំហូរ​នៃ​ការបង់ប្រាក់ចេញ។</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kn.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kn.xtb
index c365277..a468924 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kn.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_kn.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="kn">
 <translation id="1068168522143272502">ಚೆಕ್ ಔಟ್ ಪ್ರಕ್ರಿಯೆಗಳ ಸಮಯದಲ್ಲಿ ಭರ್ತಿ ಮಾಡಬೇಕಾದ ವಿಳಾಸಗಳು ಮತ್ತು ಪಾವತಿ ಆಯ್ಕೆಗಳ ಪಟ್ಟಿಯನ್ನು ಕೆಳಭಾಗದ ಅರ್ಧ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಆವರಿಸಿಕೊಳ್ಳುವ ರೀತಿಯಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation>
 <translation id="567079066552447069">ಚೆಕ್ ಔಟ್ ಪ್ರಕ್ರಿಯೆಗಳ ಸಮಯದಲ್ಲಿ ಭರ್ತಿ ಮಾಡಬೇಕಾದ ವಿಳಾಸಗಳು ಮತ್ತು ಪಾವತಿ ಆಯ್ಕೆಗಳ ಪಟ್ಟಿಯನ್ನು ಮುಚ್ಚಲಾಗಿದೆ.</translation>
+<translation id="780301667611848630">ಬೇಡ, ಧನ್ಯವಾದಗಳು</translation>
 <translation id="8264703973415044493">ಚೆಕ್ ಔಟ್ ಪ್ರಕ್ರಿಯೆಗಳ ಸಮಯದಲ್ಲಿ ಭರ್ತಿ ಮಾಡಬೇಕಾದ ವಿಳಾಸಗಳು ಮತ್ತು ಪಾವತಿ ಆಯ್ಕೆಗಳ ಪಟ್ಟಿಯನ್ನು ಸಂಪೂರ್ಣ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಆವರಿಸಿಕೊಳ್ಳುವ ರೀತಿಯಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation>
 <translation id="8315600272591552085">ಚೆಕ್ ಔಟ್ ಪ್ರಕ್ರಿಯೆಗಳ ಸಮಯದಲ್ಲಿ ಭರ್ತಿ ಮಾಡಬೇಕಾದ ವಿಳಾಸಗಳು ಮತ್ತು ಪಾವತಿ ಆಯ್ಕೆಗಳ ಪಟ್ಟಿ.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb
index 016bae5..dde3e20e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ko">
 <translation id="1068168522143272502">결제 시 자동 입력될 주소 및 결제 옵션 목록이 절반 높이로 열렸습니다.</translation>
 <translation id="567079066552447069">결제 시 자동 입력될 주소 및 결제 옵션 목록이 닫혔습니다.</translation>
+<translation id="780301667611848630">취소</translation>
 <translation id="8264703973415044493">결제 시 자동 입력될 주소 및 결제 옵션 목록이 전체 화면으로 열렸습니다.</translation>
 <translation id="8315600272591552085">결제 시 자동 입력될 주소 및 결제 옵션 목록입니다.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb
index 5558694..081828e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ky">
 <translation id="1068168522143272502">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси жарым экранда ачылды.</translation>
 <translation id="567079066552447069">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси жабылды.</translation>
+<translation id="780301667611848630">Жок, рахмат</translation>
 <translation id="8264703973415044493">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси толук экранда ачылды.</translation>
 <translation id="8315600272591552085">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb
index f3221a1..ad5e015 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="lo">
 <translation id="1068168522143272502">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນໄດ້ເປີດແບບເຄິ່ງໜ້າ.</translation>
 <translation id="567079066552447069">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນແມ່ນຖືກປິດແລ້ວ.</translation>
+<translation id="780301667611848630">ບໍ່​, ​ຂອບ​ໃຈ</translation>
 <translation id="8264703973415044493">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນໄດ້ເປີດແບບເຕັມໜ້າ.</translation>
 <translation id="8315600272591552085">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນ.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb
index 4d920b34..4b52237e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="lt">
 <translation id="1068168522143272502">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas atidarytas iki pusės ekrano aukščio.</translation>
 <translation id="567079066552447069">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas uždarytas.</translation>
+<translation id="780301667611848630">Ačiū, ne</translation>
 <translation id="8264703973415044493">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas atidarytas per visą ekrano aukštį.</translation>
 <translation id="8315600272591552085">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lv.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lv.xtb
index a7584564..1937d2f 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lv.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lv.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="lv">
 <translation id="1068168522143272502">Saraksts ar adresēm un norēķinu iespējām, kas jāaizpilda norēķinu plūsmās, ir atvērts pusekrāna augstumā.</translation>
 <translation id="567079066552447069">Saraksts ar adresēm un norēķinu iespējām, kas jāaizpilda norēķinu plūsmās, ir aizvērts.</translation>
+<translation id="780301667611848630">Nē, paldies</translation>
 <translation id="8264703973415044493">Saraksts ar adresēm un norēķinu iespējām, kas jāaizpilda norēķinu plūsmās, ir atvērts pilna ekrāna augstumā.</translation>
 <translation id="8315600272591552085">Saraksts ar adresēm un norēķinu iespējām, kas jāaizpilda norēķinu plūsmās.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mk.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mk.xtb
index 538f7b3..7a7c677d 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mk.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mk.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="mk">
 <translation id="1068168522143272502">Списокот со адреси и опции за плаќање што треба да се пополнат при тековите за плаќање е отворен на половина екран.</translation>
 <translation id="567079066552447069">Списокот со адреси и опции за плаќање што треба да се пополнат при тековите за плаќање е затворен.</translation>
+<translation id="780301667611848630">Не, фала</translation>
 <translation id="8264703973415044493">Списокот со адреси и опции за плаќање што треба да се пополнат при тековите за плаќање е отворен на цел екран.</translation>
 <translation id="8315600272591552085">Список со адреси и опции за плаќање што треба да се пополнат при тековите за плаќање.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ml.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ml.xtb
index 29a8662..057ba98 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ml.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ml.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ml">
 <translation id="1068168522143272502">ചെക്ക്ഔട്ട് പ്രകിയയ്ക്കിടെ നൽകേണ്ട വിലാസങ്ങളുടെയും പേയ്മെന്റ് ഓപ്ഷനുകളുടെയും ലിസ്റ്റ്, സ്ക്രീനിൽ ഭാഗികമായി തുറന്നിരിക്കുന്നു.</translation>
 <translation id="567079066552447069">ചെക്ക്ഔട്ട് ചെയ്യൽ പ്രകിയയ്ക്കിടെ നൽകേണ്ട വിലാസങ്ങളുടെയും പേയ്മെന്റ് ഓപ്ഷനുകളുടെയും ലിസ്റ്റ് അടച്ചിരിക്കുന്നു.</translation>
+<translation id="780301667611848630">വേണ്ട നന്ദി</translation>
 <translation id="8264703973415044493">ചെക്ക്ഔട്ട് പ്രകിയയ്ക്കിടെ നൽകേണ്ട വിലാസങ്ങളുടെയും പേയ്മെന്റ് ഓപ്ഷനുകളുടെയും ലിസ്റ്റ്, സ്ക്രീനിൽ പൂർണ്ണമായി തുറന്നിരിക്കുന്നു.</translation>
 <translation id="8315600272591552085">ചെക്ക്ഔട്ട് പ്രകിയയ്ക്കിടെ നൽകേണ്ട വിലാസങ്ങളുടെയും പേയ്മെന്റ് ഓപ്ഷനുകളുടെയും ലിസ്റ്റ്.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb
index 09fde17..2b2bfbf 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="mn">
 <translation id="1068168522143272502">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалтыг хагас өндөртэйгээр нээсэн.</translation>
 <translation id="567079066552447069">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалтыг хаасан.</translation>
+<translation id="780301667611848630">Үгүй, баярлалаа</translation>
 <translation id="8264703973415044493">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалтыг бүтэн өндөртэйгээр нээсэн.</translation>
 <translation id="8315600272591552085">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалт.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb
index c6b2f5c..97de2ca 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="mr">
 <translation id="1068168522143272502">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय अर्ध्या उंचीवर उघडले.</translation>
 <translation id="567079066552447069">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय बंद आहेत.</translation>
+<translation id="780301667611848630">नाही, नको</translation>
 <translation id="8264703973415044493">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय पूर्ण उंचीवर उघडले.</translation>
 <translation id="8315600272591552085">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb
index 8f711088..602eacc 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ms">
 <translation id="1068168522143272502">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar dibuka pada ketinggian separuh.</translation>
 <translation id="567079066552447069">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar ditutup.</translation>
+<translation id="780301667611848630">Tidak, terima kasih</translation>
 <translation id="8264703973415044493">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar dibuka pada ketinggian penuh.</translation>
 <translation id="8315600272591552085">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb
index d5ed0ab..62eef77 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="my">
 <translation id="1068168522143272502">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်းကို မြင်ကွင်းတစ်ဝက် ဖွင့်ထားသည်။</translation>
 <translation id="567079066552447069">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်းကို ပိတ်ထားသည်။</translation>
+<translation id="780301667611848630">မလိုပါ</translation>
 <translation id="8264703973415044493">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်းကို မြင်ကွင်းအပြည့် ဖွင့်ထားသည်။</translation>
 <translation id="8315600272591552085">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်း။</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb
index f482d37..60b804c 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ne">
 <translation id="1068168522143272502">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची आधा स्क्रिनमा खोलिएको छ।</translation>
 <translation id="567079066552447069">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची बन्द छ।</translation>
+<translation id="780301667611848630">भयो, धन्यवाद</translation>
 <translation id="8264703973415044493">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची पूरै स्क्रिनमा खोलिएको छ।</translation>
 <translation id="8315600272591552085">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची।</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_nl.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_nl.xtb
index a7cb0fd..c8155bf 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_nl.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_nl.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="nl">
 <translation id="1068168522143272502">De lijst met adressen en betalingsopties die kunnen worden ingevuld tijdens het betalingsproces is geopend op halve hoogte.</translation>
 <translation id="567079066552447069">De lijst met adressen en betalingsopties die kunnen worden ingevuld tijdens het betalingsproces is gesloten.</translation>
+<translation id="780301667611848630">Nee, bedankt</translation>
 <translation id="8264703973415044493">De lijst met adressen en betalingsopties die kunnen worden ingevuld tijdens het betalingsproces is geopend op volledige hoogte.</translation>
 <translation id="8315600272591552085">Lijst met adressen en betalingsopties die kunnen worden ingevuld tijdens het betalingsproces.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb
index 14a613d..1170e68 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="no">
 <translation id="1068168522143272502">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten, er åpnet i halv høyde.</translation>
 <translation id="567079066552447069">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten, er lukket.</translation>
+<translation id="780301667611848630">Nei takk</translation>
 <translation id="8264703973415044493">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten, er åpnet i full høyde.</translation>
 <translation id="8315600272591552085">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_or.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_or.xtb
index b25c41e..8413280 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_or.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_or.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="or">
 <translation id="1068168522143272502">ଚେକଆଉଟ ଫ୍ଲୋ ସମୟରେ ପୂରଣ ହେବାକୁ ଥିବା ଠିକଣା ଏବଂ ପେମେଣ୍ଟ ବିକଳ୍ପର ତାଲିକା ଅଧା ଖୋଲାଯାଇଛି।</translation>
 <translation id="567079066552447069">ଚେକଆଉଟ ଫ୍ଲୋ ସମୟରେ ପୂରଣ ହେବାକୁ ଥିବା ଠିକଣା ଏବଂ ପେମେଣ୍ଟ ବିକଳ୍ପର ତାଲିକା ବନ୍ଦ ଅଛି।</translation>
+<translation id="780301667611848630">ନାଁ, ଥାଉ</translation>
 <translation id="8264703973415044493">ଚେକଆଉଟ ଫ୍ଲୋ ସମୟରେ ପୂରଣ ହେବାକୁ ଥିବା ଠିକଣା ଏବଂ ପେମେଣ୍ଟ ବିକଳ୍ପର ତାଲିକା ସମ୍ପୂର୍ଣ୍ଣ ଭାବେ ଖୋଲାଯାଇଛି।</translation>
 <translation id="8315600272591552085">ଚେକଆଉଟ ଫ୍ଲୋ ସମୟରେ ପୂରଣ ହେବାକୁ ଥିବା ଠିକଣା ଏବଂ ପେମେଣ୍ଟ ବିକଳ୍ପର ତାଲିକା।</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb
index ba332cc6..e5f8a2b 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="pa">
 <translation id="1068168522143272502">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਅੱਧੀ ਉਚਾਈ ਤੱਕ ਖੋਲ੍ਹਿਆ ਗਿਆ।</translation>
 <translation id="567079066552447069">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਬੰਦ ਹੈ।</translation>
+<translation id="780301667611848630">ਨਹੀਂ ਧੰਨਵਾਦ</translation>
 <translation id="8264703973415044493">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਪੂਰੀ ਉਚਾਈ ਤੱਕ ਖੋਲ੍ਹਿਆ ਗਿਆ।</translation>
 <translation id="8315600272591552085">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ।</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb
index 5b122950..209e3bc 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="pl">
 <translation id="1068168522143272502">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności, otwarta do połowy wysokości.</translation>
 <translation id="567079066552447069">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności, jest zamknięta.</translation>
+<translation id="780301667611848630">Nie, dziękuję</translation>
 <translation id="8264703973415044493">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności, otwarta na całą wysokość.</translation>
 <translation id="8315600272591552085">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb
index 0665198..9d545c3 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="pt-BR">
 <translation id="1068168522143272502">A lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra está aberta na metade da altura.</translation>
 <translation id="567079066552447069">A lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra está fechada.</translation>
+<translation id="780301667611848630">Não</translation>
 <translation id="8264703973415044493">A lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra está aberta no tamanho máximo.</translation>
 <translation id="8315600272591552085">Lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-PT.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-PT.xtb
index bc2c125..32cb465 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-PT.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="pt-PT">
 <translation id="1068168522143272502">A lista de moradas e opções de pagamento a preencher durante os fluxos de pagamento está aberta a meia altura.</translation>
 <translation id="567079066552447069">A lista de moradas e opções de pagamento a preencher durante os fluxos de pagamento está fechada.</translation>
+<translation id="780301667611848630">Não, obrigado</translation>
 <translation id="8264703973415044493">A lista de moradas e opções de pagamento a preencher durante os fluxos de pagamento está aberta à altura total.</translation>
 <translation id="8315600272591552085">Lista de moradas e opções de pagamento a preencher durante os fluxos de pagamento.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ro.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ro.xtb
index cd8f2c5f..afbcc56 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ro.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ro.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ro">
 <translation id="1068168522143272502">Lista de adrese și opțiuni de plată de completat în timpul fluxurilor de finalizare a achiziției, deschisă la jumătate din înălțime.</translation>
 <translation id="567079066552447069">Lista de adrese și opțiuni de plată de completat în timpul fluxurilor de finalizare a achiziției este închisă.</translation>
+<translation id="780301667611848630">Nu, mulțumesc</translation>
 <translation id="8264703973415044493">Lista cu adrese și opțiuni de plată de completat în timpul fluxurilor de finalizare a achiziției, deschisă la înălțimea completă.</translation>
 <translation id="8315600272591552085">Lista cu adrese și opțiuni de plată de completat în timpul fluxurilor de finalizare a achiziției.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
index 3b75c35..ad90714e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ru">
 <translation id="1068168522143272502">Список адресов и способов оплаты для заполнения во время оформления покупок открыт на половину экрана.</translation>
 <translation id="567079066552447069">Список адресов и способов оплаты для автозаполнения во время оформления покупок закрыт.</translation>
+<translation id="780301667611848630">Спасибо, не надо</translation>
 <translation id="8264703973415044493">Список адресов и способов оплаты для автозаполнения во время оформления покупок открыт на весь экран.</translation>
 <translation id="8315600272591552085">Список адресов и способов оплаты для заполнения во время оформления покупок.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
index 0e04484..54796fda 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="si">
 <translation id="1068168522143272502">අර්ධ උසින් විවෘත කරන ලද ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation>
 <translation id="567079066552447069">ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව වසා ඇත.</translation>
+<translation id="780301667611848630">එපා, ස්තූතියි</translation>
 <translation id="8264703973415044493">සම්පූර්ණ උසින් විවෘත කරන ලද ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation>
 <translation id="8315600272591552085">ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sk.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sk.xtb
index 37a8fcd..c2cce88 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sk.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sk.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sk">
 <translation id="1068168522143272502">Zoznam adries a možností platby na vyplnenie počas procesu platby je otvorený na polovičnú výšku.</translation>
 <translation id="567079066552447069">Zoznam adries a možností platby na vyplnenie počas procesu platby je zatvorený.</translation>
+<translation id="780301667611848630">Nie, ďakujem</translation>
 <translation id="8264703973415044493">Zoznam adries a možností platby na vyplnenie počas procesu platby je otvorený na celú výšku.</translation>
 <translation id="8315600272591552085">Zoznam adries a možností platby na vyplnenie počas procesu platby.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sl.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sl.xtb
index 5034642..fb42cc8 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sl.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sl.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sl">
 <translation id="1068168522143272502">Seznam naslovov in možnosti plačila, ki jih je treba izpolniti med postopki nakupa, so odprti pri polovični višini.</translation>
 <translation id="567079066552447069">Seznam naslovov in možnosti plačila, ki jih je treba izpolniti med postopki dokončanja nakupa, so zaprti.</translation>
+<translation id="780301667611848630">Ne, hvala</translation>
 <translation id="8264703973415044493">Seznam naslovov in možnosti plačila, ki jih je treba izpolniti med postopki nakupa, so odprti pri polni višini.</translation>
 <translation id="8315600272591552085">Seznam naslovov in možnosti plačila, ki jih je treba izpolniti med postopki dokončanja nakupa.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb
index 5f5649a..fe9b927 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sq">
 <translation id="1068168522143272502">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes është hapur në gjysmë gjatësi.</translation>
 <translation id="567079066552447069">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes është mbyllur.</translation>
+<translation id="780301667611848630">Jo, faleminderit</translation>
 <translation id="8264703973415044493">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes është hapur në gjatësinë e plotë.</translation>
 <translation id="8315600272591552085">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb
index 2fdae4ba3..4d666a9 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sr-Latn">
 <translation id="1068168522143272502">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju je otvorena do polovine ekrana.</translation>
 <translation id="567079066552447069">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju je zatvorena.</translation>
+<translation id="780301667611848630">Ne, hvala</translation>
 <translation id="8264703973415044493">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju je otvorena na celom ekranu.</translation>
 <translation id="8315600272591552085">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb
index bd6c112..83bb90f 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sr">
 <translation id="1068168522143272502">Листа адреса и опција плаћања за попуњавање при плаћању је отворена до половине екрана.</translation>
 <translation id="567079066552447069">Листа адреса и опција плаћања за попуњавање при плаћању је затворена.</translation>
+<translation id="780301667611848630">Не, хвала</translation>
 <translation id="8264703973415044493">Листа адреса и опција плаћања за попуњавање при плаћању је отворена на целом екрану.</translation>
 <translation id="8315600272591552085">Листа адреса и опција плаћања за попуњавање при плаћању.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
index c5fbf61f..0ddfbd7 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sv">
 <translation id="1068168522143272502">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har öppnats över halva skärmen.</translation>
 <translation id="567079066552447069">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har stängts.</translation>
+<translation id="780301667611848630">Nej tack</translation>
 <translation id="8264703973415044493">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har öppnats över hela skärmen.</translation>
 <translation id="8315600272591552085">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
index 258d31b..53fef74d 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="sw">
 <translation id="1068168522143272502">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefunguliwa katika nusu skrini.</translation>
 <translation id="567079066552447069">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefungwa.</translation>
+<translation id="780301667611848630">Hapana</translation>
 <translation id="8264703973415044493">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefunguliwa katika skrini nzima.</translation>
 <translation id="8315600272591552085">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb
index 3cae722..7e7d107 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ta">
 <translation id="1068168522143272502">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல் பாதித் திரையில் தெரியும்படி திறக்கப்பட்டுள்ளது.</translation>
 <translation id="567079066552447069">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல் மூடப்பட்டுள்ளது.</translation>
+<translation id="780301667611848630">வேண்டாம்</translation>
 <translation id="8264703973415044493">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல் முழுத் திரையில் தெரியும்படி திறக்கப்பட்டுள்ளது.</translation>
 <translation id="8315600272591552085">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல்.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_te.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_te.xtb
index 4b47234..51310e3 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_te.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_te.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="te">
 <translation id="1068168522143272502">చెక్ అవుట్ ఫ్లోల సమయంలో పూరించాల్సిన అడ్రస్‌లు, పేమెంట్ ఆప్షన్‌ల లిస్ట్ సగం మేరకు తెరవబడింది.</translation>
 <translation id="567079066552447069">చెక్ అవుట్ ఫ్లోల సమయంలో పూరించాల్సిన అడ్రస్‌లు, పేమెంట్ ఆప్షన్‌ల లిస్ట్ మూసివేయబడింది.</translation>
+<translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation>
 <translation id="8264703973415044493">చెక్ అవుట్ ఫ్లోల సమయంలో పూరించాల్సిన అడ్రస్‌లు, పేమెంట్ ఆప్షన్‌ల లిస్ట్ పూర్తి స్థాయిలో తెరవబడింది.</translation>
 <translation id="8315600272591552085">చెక్ అవుట్ ఫ్లోల సమయంలో పూరించాల్సిన అడ్రస్‌లు, పేమెంట్ ఆప్షన్‌ల లిస్ట్ మూసివేయబడింది.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_th.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_th.xtb
index 83d441c..a3563b8 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_th.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_th.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="th">
 <translation id="1068168522143272502">รายการที่อยู่และตัวเลือกการชำระเงินที่จะกรอกในระหว่างขั้นตอนการชำระเงินซึ่งเปิดแบบครึ่งหน้า</translation>
 <translation id="567079066552447069">ระบบจะปิดรายการที่อยู่และตัวเลือกการชำระเงินที่จะกรอกในระหว่างขั้นตอนการชำระเงิน</translation>
+<translation id="780301667611848630">ไม่ ขอบคุณ</translation>
 <translation id="8264703973415044493">รายการที่อยู่และตัวเลือกการชำระเงินที่จะกรอกในระหว่างขั้นตอนการชำระเงินซึ่งเปิดแบบเต็มหน้า</translation>
 <translation id="8315600272591552085">รายการที่อยู่และตัวเลือกการชำระเงินที่จะกรอกในระหว่างขั้นตอนการชำระเงิน</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_tr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_tr.xtb
index f866ad00..96b8416ae 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_tr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_tr.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="tr">
 <translation id="1068168522143272502">Ödeme akışları sırasında doldurulacak adreslerin ve ödeme seçeneklerinin listesi ekranın yarısına kadar açıldı.</translation>
 <translation id="567079066552447069">Ödeme akışları sırasında doldurulacak adreslerin ve ödeme seçeneklerinin listesi kapatıldı.</translation>
+<translation id="780301667611848630">Hayır, teşekkürler</translation>
 <translation id="8264703973415044493">Ödeme akışları sırasında doldurulacak adreslerin ve ödeme seçeneklerinin listesi tam ekranda açıldı.</translation>
 <translation id="8315600272591552085">Ödeme akışları sırasında doldurulacak adreslerin ve ödeme seçeneklerinin listesi.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uk.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uk.xtb
index c3cbb92a9..dc53fa31 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uk.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uk.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="uk">
 <translation id="1068168522143272502">Список адрес і способів оплати, які відображаються під час оформлення покупки, відкрито на половину висоти.</translation>
 <translation id="567079066552447069">Список адрес і способів оплати, які відображаються під час оформлення покупки, закрито.</translation>
+<translation id="780301667611848630">Ні, дякую</translation>
 <translation id="8264703973415044493">Список адрес і способів оплати, які відображаються під час оформлення покупки, відкрито на всю висоту.</translation>
 <translation id="8315600272591552085">Список адрес і способів оплати, які відображаються під час оформлення покупки.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ur.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ur.xtb
index 1cba07b..1cd6d32b 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ur.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ur.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="ur">
 <translation id="1068168522143272502">آدھی اونچائی پر کھولے گئے چیک آؤٹ فلوز کے دوران پُر کیے جانے والے پتوں اور ادائیگی کے اختیارات کی فہرست۔</translation>
 <translation id="567079066552447069">چیک آؤٹ فلوز کے دوران پُر کیے جانے والے پتوں اور ادائیگی کے اختیارات کی فہرست بند ہے۔</translation>
+<translation id="780301667611848630">نہیں شکریہ</translation>
 <translation id="8264703973415044493">مکمل اونچائی پر کھولے گئے چیک آؤٹ فلوز کے دوران پُر کیے جانے والے پتوں اور ادائیگی کے اختیارات کی فہرست۔</translation>
 <translation id="8315600272591552085">چیک آؤٹ فلوز کے دوران پُر کیے جانے والے پتوں اور ادائیگی کے اختیارات کی فہرست۔</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uz.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uz.xtb
index dde31e2..e1af677 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uz.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_uz.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="uz">
 <translation id="1068168522143272502">Hisob-kitob vaqtida kiritiladigan manzillar va toʻlov usullari roʻyxati yarim hajmda ochildi.</translation>
 <translation id="567079066552447069">Hisob-kitob vaqtida kiritiladigan manzillar va toʻlov usullari roʻyxati yopildi.</translation>
+<translation id="780301667611848630">Kerak emas</translation>
 <translation id="8264703973415044493">Hisob-kitob vaqtida kiritiladigan manzillar va toʻlov usullari roʻyxati toʻliq hajmda ochildi.</translation>
 <translation id="8315600272591552085">Hisob-kitob vaqtida kiritiladigan manzillar va toʻlov usullari roʻyxati.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_vi.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_vi.xtb
index ef5e4b5a66..03d87514 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_vi.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_vi.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="vi">
 <translation id="1068168522143272502">Danh sách địa chỉ và tuỳ chọn thanh toán sẽ được điền trong quy trình thanh toán mở ở nửa dưới của màn hình.</translation>
 <translation id="567079066552447069">Danh sách địa chỉ và tuỳ chọn thanh toán sẽ được điền trong quy trình thanh toán đã bị đóng.</translation>
+<translation id="780301667611848630">Không, cảm ơn</translation>
 <translation id="8264703973415044493">Danh sách địa chỉ và tuỳ chọn thanh toán sẽ được điền trong quy trình thanh toán mở trên toàn màn hình.</translation>
 <translation id="8315600272591552085">Danh sách địa chỉ và tuỳ chọn thanh toán sẽ được điền trong quy trình thanh toán.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb
index ce8532e..27b219ac 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="zh-CN">
 <translation id="1068168522143272502">要在结账流程中填写的地址和付款方式列表已半屏打开。</translation>
 <translation id="567079066552447069">要在结账流程中填充的地址和付款方式的列表已关闭。</translation>
+<translation id="780301667611848630">不用了,谢谢</translation>
 <translation id="8264703973415044493">要在结账流程中填充的地址和付款方式的列表已全屏打开。</translation>
 <translation id="8315600272591552085">要在结账流程中填充的地址和付款方式的列表。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-HK.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-HK.xtb
index 84be0ea..2fb9afc 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-HK.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="zh-HK">
 <translation id="1068168522143272502">當結帳流程顯示喺畫面下半部嘅時候,系統要填嘅地址同付款選項清單。</translation>
 <translation id="567079066552447069">當結帳流程閂咗嘅時候,系統要填嘅地址同付款選項清單。</translation>
+<translation id="780301667611848630">不用了,謝謝</translation>
 <translation id="8264703973415044493">當結帳流程顯示喺成個畫面嘅時候,系統要填嘅地址同付款選項清單。</translation>
 <translation id="8315600272591552085">系統要喺結帳流程填嘅地址同付款選項清單。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb
index 1654ffe4..b2862606 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="zh-TW">
 <translation id="1068168522143272502">當結帳流程顯示在半個螢幕上時,系統要填入的地址和付款方式清單。</translation>
 <translation id="567079066552447069">當結帳流程關閉時,系統要填入的地址和付款方式清單。</translation>
+<translation id="780301667611848630">不用了,謝謝</translation>
 <translation id="8264703973415044493">當結帳流程顯示在整個螢幕上時,系統要填入的地址和付款方式清單。</translation>
 <translation id="8315600272591552085">系統要在結帳流程填入的地址和付款方式清單。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zu.xtb
index 50e1d39..64e716f 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zu.xtb
@@ -3,6 +3,7 @@
 <translationbundle lang="zu">
 <translation id="1068168522143272502">Uhlu lwezinketho zamakheli nenkokhelo okufanele lugcwaliswe phakathi nokugeleza kokuphuma kuvulwe ngobude obuyisigamu.</translation>
 <translation id="567079066552447069">Uhlu lwezinketho zamakheli nenkokhelo okufanele lugcwalise phakathi nokugeleza kokuphuma luvaliwe.</translation>
+<translation id="780301667611848630">Cha ngiyabonga</translation>
 <translation id="8264703973415044493">Uhlu lwezinketho zamakheli nenkokhelo okufanele lugcwaliswe phakathi nokugeleza kokuphuma kuvulwe ngobude obugcwele.</translation>
 <translation id="8315600272591552085">Uhlu lwezinketho zamakheli nenkokhelo okufanele lugcwaliswe phakathi nokugeleza kokuphuma.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
index 2709c35..ea710e7 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -1047,7 +1047,6 @@
     }
 
     private boolean shouldShowMicButton() {
-        if (shouldShowDeleteButton()) return false;
         if (!mNativeInitialized || mVoiceRecognitionHandler == null
                 || !mVoiceRecognitionHandler.isVoiceSearchEnabled()) {
             return false;
@@ -1056,8 +1055,9 @@
         if (mIsTablet && mShouldShowButtonsWhenUnfocused) {
             return !isToolbarMicEnabled && (mUrlHasFocus || mIsUrlFocusChangeInProgress);
         } else {
+            boolean deleteButtonVisible = shouldShowDeleteButton();
             boolean canShowMicButton = !mIsTablet || !isToolbarMicEnabled;
-            return canShowMicButton
+            return canShowMicButton && !deleteButtonVisible
                     && (mUrlHasFocus || mIsUrlFocusChangeInProgress
                             || mIsLocationBarFocusedFromNtpScroll
                             || mShouldShowMicButtonWhenUnfocused);
@@ -1065,8 +1065,6 @@
     }
 
     private boolean shouldShowLensButton() {
-        if (shouldShowDeleteButton()) return false;
-
         // When this method is called on UI inflation, return false as the native is not ready.
         if (!mNativeInitialized) {
             return false;
@@ -1087,8 +1085,9 @@
             return (mUrlHasFocus || mIsUrlFocusChangeInProgress) && isLensOnOmniboxEnabled();
         }
 
-        return (mUrlHasFocus || mIsUrlFocusChangeInProgress || mIsLocationBarFocusedFromNtpScroll
-                       || mShouldShowLensButtonWhenUnfocused)
+        return !shouldShowDeleteButton()
+                && (mUrlHasFocus || mIsUrlFocusChangeInProgress
+                        || mIsLocationBarFocusedFromNtpScroll || mShouldShowLensButtonWhenUnfocused)
                 && isLensOnOmniboxEnabled();
     }
 
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediatorTest.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediatorTest.java
index e060539..32fffd5 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediatorTest.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediatorTest.java
@@ -1052,9 +1052,8 @@
 
     @Test
     public void testLensButtonVisibility_lensEnabledWithInputText_tablet() {
-        // Do not show lens when the omnibox already has input.
         doReturn(true).when(mLensController).isLensEnabled(any());
-        verifyLensButtonVisibilityWhenFocusChanges(false, "text");
+        verifyLensButtonVisibilityWhenFocusChanges(true, "text");
     }
 
     private void verifyLensButtonVisibilityWhenFocusChanges(
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/account_picker/AccountPickerBottomSheetTest.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/account_picker/AccountPickerBottomSheetTest.java
index 57b818a..b3a28e2d 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/account_picker/AccountPickerBottomSheetTest.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/account_picker/AccountPickerBottomSheetTest.java
@@ -20,14 +20,13 @@
 import static org.hamcrest.core.AllOf.allOf;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.notNull;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.content.Intent;
+import android.app.Activity;
 import android.view.View;
 
 import androidx.test.espresso.ViewInteraction;
@@ -90,6 +89,7 @@
     private static final String FULL_NAME1 = "Test Account1";
     private static final String GIVEN_NAME1 = "Account1";
     private static final String TEST_EMAIL2 = "test.account2@gmail.com";
+    private static final String NEW_ACCOUNT_EMAIL = "new.account@gmail.com";
 
     @ClassRule
     public static final ChromeTabbedActivityTestRule sActivityTestRule =
@@ -118,9 +118,6 @@
     private AccountPickerDelegate mAccountPickerDelegateMock;
 
     @Captor
-    private ArgumentCaptor<Callback<Intent>> mAddAccountIntentCreationCallbackCaptor;
-
-    @Captor
     private ArgumentCaptor<Callback<Boolean>> mUpdateCredentialsSuccessCallbackCaptor;
 
     private AccountPickerBottomSheetCoordinator mCoordinator;
@@ -521,11 +518,13 @@
         HistogramDelta signedInWithNonDefaultAccountHistogram =
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT);
+        mAccountManagerTestRule.setResultForNextAddAccountFlow(
+                Activity.RESULT_OK, NEW_ACCOUNT_EMAIL);
         buildAndShowExpandedBottomSheet();
 
         onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click());
 
-        ViewUtils.onViewWaiting(withText(FakeAccountManagerFacade.NEW_ACCOUNT_EMAIL));
+        ViewUtils.waitForView(withText(NEW_ACCOUNT_EMAIL));
         clickContinueButtonAndCheckSignInInProgressSheet();
         Assert.assertEquals(1, addAccountHistogram.getDelta());
         Assert.assertEquals(1, signedInWithAddedAccountHistogram.getDelta());
@@ -646,13 +645,14 @@
         HistogramDelta addAccountCompletedHistogram =
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.ADD_ACCOUNT_COMPLETED);
+        mAccountManagerTestRule.setResultForNextAddAccountFlow(
+                Activity.RESULT_OK, NEW_ACCOUNT_EMAIL);
         buildAndShowExpandedBottomSheet();
 
         onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click());
 
-        ViewUtils.onViewWaiting(withText(FakeAccountManagerFacade.NEW_ACCOUNT_EMAIL));
-        checkCollapsedAccountListForWebSignin(
-                FakeAccountManagerFacade.NEW_ACCOUNT_EMAIL, null, null);
+        ViewUtils.waitForView(withText(NEW_ACCOUNT_EMAIL));
+        checkCollapsedAccountListForWebSignin(NEW_ACCOUNT_EMAIL, null, null);
         Assert.assertEquals(1, addAccountStartedHistogram.getDelta());
         Assert.assertEquals(1, addAccountCompletedHistogram.getDelta());
     }
@@ -718,8 +718,8 @@
         onVisibleView(withText(TEST_EMAIL2)).check(doesNotExist());
         onView(withId(R.id.account_picker_account_list)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
-        onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click());
-        verify(AccountManagerFacadeProvider.getInstance()).createAddAccountIntent(notNull());
+        onVisibleView(withText(R.string.signin_add_account_to_device))
+                .check(matches(isDisplayed()));
     }
 
     private void checkCollapsedAccountListForWebSignin(
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
index 30e543f..eff210a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -983,6 +983,7 @@
 <translation id="6397616442223433927">ወደ መስመር ላይ ይመለሱ</translation>
 <translation id="6401458660421980302">ይህን ትር ወደ ሌላ መሣሪያ ለመላክ እዚያ ላይ ወደ Chrome ይግቡ</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> በ<ph name="VIOLATED_URL" /> ላይ</translation>
+<translation id="6403371459378431832">ሁሉም መሣሪያዎች ላይ ውሂብዎን ያስምሩ</translation>
 <translation id="6404511346730675251">ዕልባት አርትዕ</translation>
 <translation id="6406506848690869874">አመሳስል</translation>
 <translation id="6407224748847589805">ከእርስዎ ኮምፒውተር ጋር ማገናኘት አልተቻለም። ሌላ የማረጋገጫ አማራጭ ይሞክሩ።</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index 9495a0c..12bbfe8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Правна информация</translation>
 <translation id="4084682180776658562">Отметка</translation>
 <translation id="4084712963632273211">От <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />показва се от Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Можете да използвате този таблет, за да влезете в профила си на устройството, на което се показва QR кодът.</translation>
 <translation id="4095146165863963773">Да се изтрият ли данните на приложенията?</translation>
 <translation id="4096227151372679484">Потокът за запазване на отметка е отворен на половината височина</translation>
 <translation id="4099578267706723511">Помогнете за подобряването на Chrome, като изпращате до Google статистически данни за употребата и сигнали за сривове.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Какви данни се използват<ph name="END_BOLD" />: Вашата история на сърфиране – списък на сайтовете, които сте посетили чрез Chrome на това устройство.</translation>
 <translation id="4263656433980196874">Потребителският интерфейс за даване на съгласие за ползване на Асистент при гласови търсения е отворен на пълната височина</translation>
 <translation id="4269820728363426813">Копиране на адреса на връзката</translation>
+<translation id="4283102315569707115">Да се заявяват ли по подразбиране настолните сайтове?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Включете заключването на екрана от настройките на Android<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">С използването на Chrome приемате <ph name="BEGIN_TOS_LINK" />Общите условия на Google<ph name="END_TOS_LINK" /> и <ph name="BEGIN_ATOS_LINK" />Допълнителните общи условия на Chrome и Chrome OS<ph name="END_ATOS_LINK" />. В сила е и <ph name="BEGIN_PRIVACY_LINK" />Декларацията за поверителност<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Нов раздел „инкогнито“</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Току-що</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
 <translation id="6345878117466430440">Означаване като прочетено</translation>
+<translation id="6357653805084533597">Можете да използвате този телефон, за да влезете в профила си на устройството, на което се показва QR кодът.</translation>
 <translation id="6363990818884053551">За да стартирате синхронизирането, потвърдете, че сте вие</translation>
 <translation id="6364438453358674297">Предложението да се премахне ли от историята?</translation>
 <translation id="6380100320871303656">По-често предварително зареждане на страниците, които Chrome смята, че е вероятно да посетите. Тази настройка може да повиши количеството използвани данни.</translation>
@@ -983,6 +986,7 @@
 <translation id="6397616442223433927">Отново онлайн</translation>
 <translation id="6401458660421980302">За да изпратите този раздел до друго устройство, влезте в профила си в Chrome там</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> на адрес <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">Синхронизиране на данните ви на всички устройства</translation>
 <translation id="6404511346730675251">Редактиране на отметката</translation>
 <translation id="6406506848690869874">Синхронизиранe</translation>
 <translation id="6407224748847589805">Не може да се установи връзка с компютъра ви. Опитайте с друга опция за потвърждаване.</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 504423ff..1cc1fb5 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
@@ -986,6 +986,7 @@
 <translation id="6397616442223433927">Online igen</translation>
 <translation id="6401458660421980302">Hvis du vil sende denne fane til en anden enhed, skal du logge ind på Chrome på den pågældende enhed</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> på <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">Synkroniser dine data på alle enheder</translation>
 <translation id="6404511346730675251">Rediger bogmærke</translation>
 <translation id="6406506848690869874">Synkronisering</translation>
 <translation id="6407224748847589805">Der kan ikke oprettes forbindelse til din computer. Prøv en anden bekræftelsesmetode.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index 993becd4..3fde42a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Información legal</translation>
 <translation id="4084682180776658562">Marcador</translation>
 <translation id="4084712963632273211">De <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />publicado por Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Puedes usar esta tablet para acceder en el dispositivo que muestra este código QR.</translation>
 <translation id="4095146165863963773">¿Borrar datos de app?</translation>
 <translation id="4096227151372679484">El flujo para guardar favoritos está abierto a media altura</translation>
 <translation id="4099578267706723511">Envía las estadísticas de uso y los informes de fallos a Google para ayudarnos a mejorar Chrome.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Qué información se usa:<ph name="END_BOLD" /> Tu historial de navegación, un registro de los sitios que visitaste con Chrome en este dispositivo.</translation>
 <translation id="4263656433980196874">La IU de consentimiento de la búsqueda por voz de Asistente está totalmente abierta</translation>
 <translation id="4269820728363426813">Copiar dirección del vínculo</translation>
+<translation id="4283102315569707115">¿Deseas solicitar sitios de escritorio de forma predeterminada?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Activa el bloqueo de pantalla en la configuración de Android<ph name="END_LINK" />.</translation>
 <translation id="4293476595220860475">Si usas Chrome, aceptas las <ph name="BEGIN_TOS_LINK" />Condiciones del Servicio de Google<ph name="END_TOS_LINK" /> y las <ph name="BEGIN_ATOS_LINK" />Condiciones del Servicio Adicionales de Google Chrome y Chrome OS<ph name="END_ATOS_LINK" />. También se aplica la <ph name="BEGIN_PRIVACY_LINK" />Política de Privacidad<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Nueva pestaña de incógnito</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Recién</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> más}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> más}}</translation>
 <translation id="6345878117466430440">Marcar como leído</translation>
+<translation id="6357653805084533597">Puedes usar este teléfono para acceder en el dispositivo que muestra este código QR.</translation>
 <translation id="6363990818884053551">Para iniciar la sincronización, verifica tu identidad.</translation>
 <translation id="6364438453358674297">¿Borrar la sugerencia del historial?</translation>
 <translation id="6380100320871303656">Precarga con más frecuencia las páginas que Chrome considera que posiblemente visites. Esta configuración puede generar un mayor uso de datos.</translation>
@@ -983,6 +986,7 @@
 <translation id="6397616442223433927">De nuevo en línea</translation>
 <translation id="6401458660421980302">Para enviar esta pestaña a otro dispositivo, accede a Chrome allí.</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> de <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">Sincroniza tus datos en todos los dispositivos</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
 <translation id="6406506848690869874">Sincronización</translation>
 <translation id="6407224748847589805">No se puede establecer la conexión con tu computadora. Prueba otra opción de verificación.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index 2bf6c7cd..6b5d20d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -659,7 +659,7 @@
 <translation id="4678082183394354975">El tema oscuro para sitios está activado en Chrome</translation>
 <translation id="4684427112815847243">Sincronizar todo</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}}</translation>
-<translation id="4699172675775169585">Archivos e imágenes almacenados en caché</translation>
+<translation id="4699172675775169585">Archivos e imágenes en caché</translation>
 <translation id="4719927025381752090">Ofrecer la traducción</translation>
 <translation id="4720023427747327413">Abrir en <ph name="PRODUCT_NAME" /></translation>
 <translation id="4720982865791209136"><ph name="BEGIN_LINK" />Realiza la encuesta<ph name="END_LINK" /> para ayudar a mejorar Chrome</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index 4812253..b5a78df 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Juriidiline teave</translation>
 <translation id="4084682180776658562">Järjehoidja</translation>
 <translation id="4084712963632273211">Avaldajalt <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />sisu pakub Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Võite kasutada tahvelarvutit selles seadmes sisselogimiseks, milles QR-koodi kuvatakse.</translation>
 <translation id="4095146165863963773">Kas kustutada rakenduse andmed?</translation>
 <translation id="4096227151372679484">Järjehoidja salvestamise voog on avatud poolel kõrgusel</translation>
 <translation id="4099578267706723511">Aidake muuta Chrome'i paremaks, saates Google'ile kasutusstatistikat ja krahhiaruandeid.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Milliseid andmeid kasutatakse?<ph name="END_BOLD" /> Teie sirvimisajalugu, selles seadmes Chrome'iga külastatud saitide andmed.</translation>
 <translation id="4263656433980196874">Assistendi häälotsingu sisu kasutajaliides on avatud täiskõrgusel</translation>
 <translation id="4269820728363426813">Kopeeri lingi aadress</translation>
+<translation id="4283102315569707115">Kas taotleda vaikimisi arvutisaite?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Androidi seadetes ekraaniluku sisselülitamine<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Chrome'i kasutades nõustute <ph name="BEGIN_TOS_LINK" />Google'i teenusetingimustega<ph name="END_TOS_LINK" /> ning <ph name="BEGIN_ATOS_LINK" />Google Chrome'i ja Chrome OS-i lisateenusetingimustega<ph name="END_ATOS_LINK" />. Kehtivad ka <ph name="BEGIN_PRIVACY_LINK" />privaatsuseeskirjad<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Uus inkognito vaheleht</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Äsja</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ja veel <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ja veel <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
 <translation id="6345878117466430440">Märgi loetuks</translation>
+<translation id="6357653805084533597">Võite kasutada telefoni selles seadmes sisselogimiseks, milles QR-koodi kuvatakse.</translation>
 <translation id="6363990818884053551">Sünkroonimise alustamiseks kinnitage oma isik</translation>
 <translation id="6364438453358674297">Kas eemaldada soovitus ajaloost?</translation>
 <translation id="6380100320871303656">Lehed, mida Chrome'i arvates tõenäoliselt külastate, eellaaditakse sagedamini. See seade võib suurendada andmemahu kasutust.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
index cd9a2150..d1a5dd2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Gainera, orrien, deskargen, luzapenen jardueren eta sistemaren informazioaren lagin txikiak bidaltzen ditu mehatxu berriak aurkitu ahal izateko.</translation>
 <translation id="3297344142967351106">Ahozko laguntza</translation>
 <translation id="3303414029551471755">Aurrera egin eta edukia deskargatu nahi duzu?</translation>
+<translation id="3305795716056605962">Itzuli orriak Aukera gehiago botoiaren bidez</translation>
 <translation id="3334729583274622784">Fitxategi-luzapena aldatu nahi duzu?</translation>
 <translation id="3341262203274374114">Ezin zaio jarraitzeari utzi. Arazo bat izan da.</translation>
 <translation id="3359667936385849800">Erabili oraingo zerbitzu-hornitzailea</translation>
@@ -983,6 +984,7 @@
 <translation id="6397616442223433927">Konektatu zara berriro</translation>
 <translation id="6401458660421980302">Fitxa beste gailu batera bidaltzeko, hasi saioa Chrome-n bertan</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> (<ph name="VIOLATED_URL" />)</translation>
+<translation id="6403371459378431832">Sinkronizatu datuak gailu guztietan</translation>
 <translation id="6404511346730675251">Editatu laster-marka</translation>
 <translation id="6406506848690869874">Sinkronizazioa</translation>
 <translation id="6407224748847589805">Ezin da konektatu ordenagailura. Probatu beste egiaztapen-aukera bat.</translation>
@@ -1264,6 +1266,7 @@
 <translation id="7853202427316060426">Jarduerak</translation>
 <translation id="7857691613771368249">Galdetu noiz gorde behar diren fitxategiak</translation>
 <translation id="7859988229622350291">Ez itzuli edukirik hizkuntza hauetako batean badago:</translation>
+<translation id="7866213166286285359">Itzuli orriak hemen bertan</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> arakatzaileak inguruko gailuak atzitzeko baimena behar du, gailura konektatzearren</translation>
 <translation id="7875915731392087153">Sortu mezu elektronikoa</translation>
 <translation id="7876243839304621966">Kendu guztiak</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 4f6c3557..eadf2031 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
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Nagpapadala rin ng maliit na sample ng mga page, download, aktibidad ng extension, at impormasyon ng system para makatulong na tumuklas ng mga bagong banta</translation>
 <translation id="3297344142967351106">Tulong sa pamamagitan ng boses</translation>
 <translation id="3303414029551471755">Magpatuloy na i-download ang content?</translation>
+<translation id="3305795716056605962">Magsalin ng mga page mula sa button na Higit pang Opsyon</translation>
 <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>
@@ -557,6 +558,7 @@
 <translation id="4062305924942672200">Impormasyong legal</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084712963632273211">Mula sa <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />ihinatid ng Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Puwede mong gamitin ang tablet na ito para mag-sign in sa device na nagpapakita ng QR code na ito.</translation>
 <translation id="4095146165863963773">I-delete ang data ng app?</translation>
 <translation id="4096227151372679484">Nakabukas nang kalahati ang proseso ng pag-save ng bookmark</translation>
 <translation id="4099578267706723511">Tulungang mapahusay ang Chrome sa pamamagitan ng pagpapadala sa Google ng mga istatistika ng paggamit at ulat ng pag-crash.</translation>
@@ -591,6 +593,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Anong data ang ginagamit:<ph name="END_BOLD" /> Iyong history ng pag-browse, record ng mga site na binisita mo gamit ang Chrome sa device na ito.</translation>
 <translation id="4263656433980196874">Nakabukas ang ui ng pahintulot ng paghahanap gamit ang boses ng Assistant nang buo ang taas</translation>
 <translation id="4269820728363426813">Kopyahin ang address ng link</translation>
+<translation id="4283102315569707115">Humiling ng mga pang-desktop na site bilang default?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />I-on ang lock ng screen sa mga setting ng Android<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Sa pamamagitan ng paggamit sa Chrome, sumasang-ayon ka sa <ph name="BEGIN_TOS_LINK" />Mga Tuntunin ng Serbisyo ng Google<ph name="END_TOS_LINK" />, at sa <ph name="BEGIN_ATOS_LINK" />Mga Karagdagang Tuntunin ng Serbisyo ng Google Chrome at ChromeOS<ph name="END_ATOS_LINK" />. Nalalapat din ang <ph name="BEGIN_PRIVACY_LINK" />Patakaran sa Privacy<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Bagong tab na Incognito</translation>
@@ -970,6 +973,7 @@
 <translation id="6342069812937806050">Ngayon lang</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 at <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> iba pa}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 at <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> iba pa}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 at <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> na iba pa}}</translation>
 <translation id="6345878117466430440">Markahang nabasa na</translation>
+<translation id="6357653805084533597">Puwede mong gamitin ang teleponong ito para mag-sign in sa device na nagpapakita ng QR code na ito.</translation>
 <translation id="6363990818884053551">Para simulan ang pag-sync, i-verify na ikaw ito</translation>
 <translation id="6364438453358674297">Alisin ang suhestyon mula sa history?</translation>
 <translation id="6380100320871303656">Mas madalas na nagpi-preload ng mga page na sa palagay ng Chrome ay malamang mong bisitahin. Posibleng magresulta sa mas malakas na paggamit ng data ang setting na ito.</translation>
@@ -1265,6 +1269,7 @@
 <translation id="7853202427316060426">Aktibidad</translation>
 <translation id="7857691613771368249">Magtanong kung kailan magse-save ng mga file</translation>
 <translation id="7859988229622350291">Huwag isalin kailanman</translation>
+<translation id="7866213166286285359">Magsalin ng mga page dito</translation>
 <translation id="78707286264420418">Nangangailangan ang <ph name="PRODUCT_NAME" /> ng Pahintulot sa mga kalapit na device para makakonekta sa iyong device</translation>
 <translation id="7875915731392087153">Gumawa ng email</translation>
 <translation id="7876243839304621966">Alisin lahat</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index 2f29c34a..80ee4967 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Il transmet également un petit échantillon de pages, de téléchargements, de l'activité des extensions et de données système afin de cerner les nouvelles menaces</translation>
 <translation id="3297344142967351106">Assistance vocale</translation>
 <translation id="3303414029551471755">Lancer le téléchargement du contenu?</translation>
+<translation id="3305795716056605962">Traduisez des pages à l'aide du bouton Plus d'options</translation>
 <translation id="3334729583274622784">Modifier l'extension du fichier?</translation>
 <translation id="3341262203274374114">Le désabonnement a échoué. Un problème est survenu.</translation>
 <translation id="3359667936385849800">Utiliser votre fournisseur de services actuel</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Activité</translation>
 <translation id="7857691613771368249">Demander quand enregistrer les fichiers</translation>
 <translation id="7859988229622350291">Ne jamais traduire les pages rédigées en</translation>
+<translation id="7866213166286285359">Traduisez les pages ici</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> a besoin de l'autorisation Appareils à proximité pour se connecter à votre appareil</translation>
 <translation id="7875915731392087153">Créer un courriel</translation>
 <translation id="7876243839304621966">Tout supprimer</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index c7e0959d..95d4c302 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -983,6 +983,7 @@
 <translation id="6397616442223433927">De novo en liña</translation>
 <translation id="6401458660421980302">Para enviar esta pestana a outro dispositivo, inicia sesión en Chrome nel</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> o <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">Sincroniza os teus datos en todos os dispositivos</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
 <translation id="6406506848690869874">Sincronización</translation>
 <translation id="6407224748847589805">Non se puido establecer conexión co teu ordenador. Proba con outra opción de verificación.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
index 11dbd0dc..e6f5ad8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">નવા જોખમો શોધવામાં સહાય કરવા માટે પેજનો નાનો નમૂનો, ડાઉનલોડ, એક્સ્ટેન્શનની પ્રવૃત્તિ અને સિસ્ટમની માહિતી પણ મોકલે છે</translation>
 <translation id="3297344142967351106">વૉઇસ સહાયતા</translation>
 <translation id="3303414029551471755">કન્ટેન્ટ ડાઉનલોડ કરવા માટે આગળ વધીએ?</translation>
+<translation id="3305795716056605962">'વધુ વિકલ્પો' બટન વડે પેજનો અનુવાદ કરો</translation>
 <translation id="3334729583274622784">ફાઇલનું એક્સ્ટેંશન બદલવું છે?</translation>
 <translation id="3341262203274374114">અનફૉલો કરી શકતા નથી. કંઈક ખોટું થયું.</translation>
 <translation id="3359667936385849800">તમારા વર્તમાન સેવા પ્રદાતાનો ઉપયોગ કરો</translation>
@@ -1267,6 +1268,7 @@
 <translation id="7853202427316060426">પ્રવૃત્તિ</translation>
 <translation id="7857691613771368249">ફાઇલો ક્યારે સાચવવી તે પૂછવામાં આવે</translation>
 <translation id="7859988229622350291">ક્યારેય અનુવાદ કરશો નહીં</translation>
+<translation id="7866213166286285359">અહીં પેજનો અનુવાદ કરો</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" />ને તમારા ડિવાઇસ સાથે કનેક્ટ કરવા માટે નજીકના ડિવાઇસની પરવાનગીની જરૂર છે</translation>
 <translation id="7875915731392087153">ઇમેઇલ બનાવો</translation>
 <translation id="7876243839304621966">બધું દૂર કરો</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index ed4c47a..47f60585 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Jogi információk</translation>
 <translation id="4084682180776658562">Könyvjelző</translation>
 <translation id="4084712963632273211">A következőtől: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />megjelenítette a Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Ezzel a táblagéppel bejelentkezhet a QR-kódot megjelenítő eszközön.</translation>
 <translation id="4095146165863963773">Törli az alkalmazásadatokat?</translation>
 <translation id="4096227151372679484">A könyvjelzőmentési folyamat félmagasságban van megnyitva</translation>
 <translation id="4099578267706723511">Használati statisztikák és hibajelentések küldésével segíthet a Google-nak a Chrome fejlesztésében.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />A felhasznált adatok:<ph name="END_BOLD" /> Böngészési előzményei, az Ön által az ezen az eszközön használt Chrome-ban felkeresett webhelyek jegyzéke.</translation>
 <translation id="4263656433980196874">A Segéd hangalapú kereséssel kapcsolatos hozzájárulási kezelőfelülete teljes magasságban megnyitva</translation>
 <translation id="4269820728363426813">Link másolása</translation>
+<translation id="4283102315569707115">Alapértelmezés szerint asztali webhelyeket kérjen a böngésző?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Állítsa be a képernyőzárat az Android beállításai között<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">A Chrome használatával Ön elfogadja a <ph name="BEGIN_TOS_LINK" />Google Általános Szerződési Feltételeket<ph name="END_TOS_LINK" />, valamint <ph name="BEGIN_ATOS_LINK" />A Google Chrome és a ChromeOS Kiegészítő Általános Szerződési Feltételeit<ph name="END_ATOS_LINK" />. Az <ph name="BEGIN_PRIVACY_LINK" />adatvédelmi irányelvek<ph name="END_PRIVACY_LINK" /> is érvényben vannak.</translation>
 <translation id="4296252229500326964">Új inkognitó lap</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Éppen most</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 és további <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 és további <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
 <translation id="6345878117466430440">Megjelölés olvasottként</translation>
+<translation id="6357653805084533597">Ezzel a telefonnal bejelentkezhet a QR-kódot megjelenítő eszközön.</translation>
 <translation id="6363990818884053551">A kezdéshez igazolja személyazonosságát</translation>
 <translation id="6364438453358674297">Eltávolítja a javaslatot az előzményekből?</translation>
 <translation id="6380100320871303656">Gyakrabban tölti be előre azokat az oldalakat, amelyeket a böngésző szerint Ön valószínűleg felkeres. Ez a beállítás megnövekedett adathasználattal járhat.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index 679b66c..6e22211 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Informasi hukum</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084712963632273211">Dari <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />dikirim oleh Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Anda dapat menggunakan tablet ini untuk login di perangkat yang menampilkan kode QR ini.</translation>
 <translation id="4095146165863963773">Hapus data aplikasi?</translation>
 <translation id="4096227151372679484">Alur penyimpanan bookmark terbuka setengah</translation>
 <translation id="4099578267706723511">Bantu penyempurnaan Chrome dengan mengirimkan statistik penggunaan dan laporan error ke Google.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Data yang digunakan:<ph name="END_BOLD" /> Histori penjelajahan Anda, catatan situs yang telah Anda buka menggunakan Chrome di perangkat ini.</translation>
 <translation id="4263656433980196874">UI izin penelusuran suara Asisten terbuka penuh</translation>
 <translation id="4269820728363426813">Salin URL</translation>
+<translation id="4283102315569707115">Minta situs desktop secara default?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Aktifkan kunci layar di setelan Android<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Dengan menggunakan Chrome, Anda menyetujui <ph name="BEGIN_TOS_LINK" />Persyaratan Layanan Google<ph name="END_TOS_LINK" /> serta <ph name="BEGIN_ATOS_LINK" />Persyaratan Layanan Tambahan Google Chrome dan ChromeOS<ph name="END_ATOS_LINK" />. <ph name="BEGIN_PRIVACY_LINK" />Kebijakan Privasi<ph name="END_PRIVACY_LINK" /> juga akan berlaku.</translation>
 <translation id="4296252229500326964">Tab Samaran baru</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Baru saja</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> lainnya}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> lainnya}}</translation>
 <translation id="6345878117466430440">Tandai telah dibaca</translation>
+<translation id="6357653805084533597">Anda dapat menggunakan ponsel ini untuk login di perangkat yang menampilkan kode QR ini.</translation>
 <translation id="6363990818884053551">Untuk memulai sinkronisasi, verifikasi diri Anda</translation>
 <translation id="6364438453358674297">Hapus saran dari histori?</translation>
 <translation id="6380100320871303656">Lebih sering melakukan pramuat halaman yang menurut Chrome mungkin akan Anda buka. Setelan ini dapat mengakibatkan peningkatan penggunaan data.</translation>
@@ -983,6 +986,7 @@
 <translation id="6397616442223433927">Kembali online</translation>
 <translation id="6401458660421980302">Untuk mengirim tab ini ke perangkat lain, login ke Chrome di sana</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> di <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">Sinkronkan data Anda di semua perangkat</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
 <translation id="6406506848690869874">Sinkronisasi</translation>
 <translation id="6407224748847589805">Tidak dapat terhubung ke komputer. Coba opsi verifikasi lain.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index e23a902..b85258d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">מידע משפטי</translation>
 <translation id="4084682180776658562">סימנייה</translation>
 <translation id="4084712963632273211">‏מאת <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />מוגש על-ידי Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">‏יש לך אפשרות להשתמש בטאבלט הזה כדי להיכנס לחשבון במכשיר שמוצג בו קוד ה-QR הזה.</translation>
 <translation id="4095146165863963773">למחוק נתוני יישומים?</translation>
 <translation id="4096227151372679484">תהליך שמירת הסימניות שפתוחות בחצי הגובה</translation>
 <translation id="4099578267706723511">‏אם שולחים אלינו נתוני שימוש ודוחות קריסה, עוזרים לשפר את Chrome.</translation>
@@ -591,9 +592,10 @@
 <translation id="4262915912852657291">‏<ph name="BEGIN_BOLD" />באילו נתונים נעשה שימוש:<ph name="END_BOLD" /> היסטוריית הגלישה – תיעוד האתרים שביקרת בהם באמצעות Chrome במכשיר הזה.</translation>
 <translation id="4263656433980196874">‏ההסכמה לחיפוש קולי של Assistant בממשק משתמש נפתחה בגובה מלא</translation>
 <translation id="4269820728363426813">העתקת כתובת של קישור</translation>
+<translation id="4283102315569707115">לבקש אתרים שמותאמים למחשב כברירת מחדל?</translation>
 <translation id="4291407919474070700">‏<ph name="BEGIN_LINK" />להפעלת נעילת המסך בהגדרות Android<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">‏השימוש ב-Chrome מבטא הסכמה <ph name="BEGIN_TOS_LINK" />לתנאים ולהגבלות של Google<ph name="END_TOS_LINK" /> ו<ph name="BEGIN_ATOS_LINK" />לתנאים ולהגבלות הנוספים של Google Chrome ו-ChromeOS<ph name="END_ATOS_LINK" />. גם <ph name="BEGIN_PRIVACY_LINK" />מדיניות הפרטיות<ph name="END_PRIVACY_LINK" /> חלה.</translation>
-<translation id="4296252229500326964">כרטיסיית מצב אנונימי חדשה</translation>
+<translation id="4296252229500326964">כרטיסייה פרטית חדשה</translation>
 <translation id="4298388696830689168">אתרים מקושרים</translation>
 <translation id="4303044213806199882">‎chrome_screenshot_<ph name="CURRENT_TIMESTAMP_MS" />‎</translation>
 <translation id="4307992518367153382">היסודות</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">זה עתה</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{‏<ph name="SHIPPING_ADDRESS_PREVIEW" />‎\u2026‎ ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספת}two{‏<ph name="SHIPPING_ADDRESS_PREVIEW" />‎\u2026‎ ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספות}many{‏<ph name="SHIPPING_ADDRESS_PREVIEW" />‎\u2026‎ ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספות}other{‏<ph name="SHIPPING_ADDRESS_PREVIEW" />‎\u2026‎ ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספות}}</translation>
 <translation id="6345878117466430440">סימון כפריט שנקרא</translation>
+<translation id="6357653805084533597">‏יש לך אפשרות להשתמש בטלפון הזה כדי להיכנס לחשבון במכשיר שמוצג בו קוד ה-QR הזה.</translation>
 <translation id="6363990818884053551">כדי להתחיל בסנכרון עליך לאמת את זהותך</translation>
 <translation id="6364438453358674297">האם להסיר את ההצעה מההיסטוריה?</translation>
 <translation id="6380100320871303656">‏מערכת Chrome טוענת מראש בתדירות גבוהה יותר דפים שסביר שהמשתמש יעבור אליהם. ההגדרה הזו יכולה לגרום לשימוש מוגבר בנתונים.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
index b3f8856..35da96c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -983,6 +983,7 @@
 <translation id="6397616442223433927">オンラインに復帰</translation>
 <translation id="6401458660421980302">このタブを別のデバイスに送信するには、送信先のデバイスで Chrome にログインしてください</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" />(<ph name="VIOLATED_URL" />)</translation>
+<translation id="6403371459378431832">すべてのデバイスでデータを同期する</translation>
 <translation id="6404511346730675251">ブックマークを編集</translation>
 <translation id="6406506848690869874">同期</translation>
 <translation id="6407224748847589805">パソコンに接続できません。別の確認オプションをお試しください。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
index b9a878a..8f9172cb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">ახალი საფრთხეების აღმოჩენის ხელშეწყობის მიზნით, გაიგზავნება გვერდების, ჩამოტვირთვების, გაფართოებათა აქტივობისა და სისტემის ინფორმაციის მცირე ნიმუშებიც</translation>
 <translation id="3297344142967351106">ხმოვანი დახმარება</translation>
 <translation id="3303414029551471755">გაგრძელდეს შინაარსის ჩამოტვირთვა?</translation>
+<translation id="3305795716056605962">თარგმნეთ გვერდები „სხვა ვარიანტების“ ღილაკის მეშვეობით</translation>
 <translation id="3334729583274622784">გსურთ ფაილის გაფართოების შეცვლა?</translation>
 <translation id="3341262203274374114">თვალის მიდევნების გაუქმება ვერ მოხერხდა. წარმოიქმნა შეფერხება.</translation>
 <translation id="3359667936385849800">სერვისის ამჟამინდელი პროვაიდერის გამოყენება</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">აქტივობა</translation>
 <translation id="7857691613771368249">შეკითხვა ფაილების შენახვის დროის შესახებ</translation>
 <translation id="7859988229622350291">არასოდეს ითარგმნოს</translation>
+<translation id="7866213166286285359">თარგმნეთ გვერდები აქ</translation>
 <translation id="78707286264420418">თქვენს მოწყობილობასთან დასაკავშირებლად <ph name="PRODUCT_NAME" /> საჭიროებს ახლომახლო მოწყობილობების ნებართვას</translation>
 <translation id="7875915731392087153">ელფოსტის შექმნა</translation>
 <translation id="7876243839304621966">ყველაფრის წაშლა</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
index 42c3feb..efd32a6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">ព័ត៌មានផ្លូវច្បាប់</translation>
 <translation id="4084682180776658562">ចំណាំ</translation>
 <translation id="4084712963632273211">ពី <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />បានបញ្ជូន​ដោយ Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">អ្នកអាចប្រើថេប្លេតនេះ ដើម្បីចូលគណនីនៅលើឧបករណ៍ដែលកំពុងបង្ហាញកូដ QR នេះ។</translation>
 <translation id="4095146165863963773">លុបទិន្នន័យកម្មវិធីឬ?</translation>
 <translation id="4096227151372679484">លំហូរនៃការរក្សាទុកចំណាំបានបើកពាក់កណ្ដាលអេក្រង់</translation>
 <translation id="4099578267706723511">ជួយធ្វើឲ្យ Chrome ប្រសើរជាងមុនដោយផ្ញើស្ថិតិប្រើប្រាស់ និងរបាយការណ៍ការគាំងទៅ Google។</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />ប្រភេទទិន្នន័យ​ដែលត្រូវបានប្រើប្រាស់៖<ph name="END_BOLD" /> ប្រវត្តិ​រុករក​តាមអ៊ីនធឺណិត​របស់អ្នក កំណត់ត្រាអំពី​គេហទំព័រ​ដែលអ្នកបានចូលមើល​ដោយប្រើ Chrome នៅលើ​ឧបករណ៍នេះ។</translation>
 <translation id="4263656433980196874">បានបើក​ពេញអេក្រង់នូវ ui នៃ​ការយល់ព្រម​ឱ្យប្រើជំនួយការ​សម្រាប់​ការស្វែងរក​តាមសំឡេង</translation>
 <translation id="4269820728363426813">ចម្លងអាសយដ្ឋានតំណ</translation>
+<translation id="4283102315569707115">ស្នើសុំគេហទំព័រកុំព្យូទ័រតាម​លំនាំដើមឬ?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />បើក​ការចាក់សោអេក្រង់​នៅក្នុង​ការកំណត់ Android<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">ប្រសិនបើប្រើ Chrome មានន័យថា​អ្នកយល់ព្រមតាម<ph name="BEGIN_TOS_LINK" />លក្ខខណ្ឌ​ប្រើប្រាស់ Google<ph name="END_TOS_LINK" /> និង<ph name="BEGIN_ATOS_LINK" />លក្ខខណ្ឌ​ប្រើប្រាស់​បន្ថែមរបស់ Google Chrome និង ChromeOS<ph name="END_ATOS_LINK" />។ <ph name="BEGIN_PRIVACY_LINK" />គោលការណ៍​ឯកជនភាព<ph name="END_PRIVACY_LINK" />ក៏អនុវត្តផងដែរ។</translation>
 <translation id="4296252229500326964">ផ្ទាំងឯកជន​ថ្មី</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">អំបាញ់មិញនេះ</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 និង <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ទៀត}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 និង <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ទៀត}}</translation>
 <translation id="6345878117466430440">សម្គាល់​ថា​បានអាន​ហើយ</translation>
+<translation id="6357653805084533597">អ្នកអាចប្រើទូរសព្ទនេះ ដើម្បីចូលគណនីនៅលើឧបករណ៍ដែលកំពុងបង្ហាញកូដ QR នេះ។</translation>
 <translation id="6363990818884053551">ដើម្បី​ចាប់ផ្ដើម​សមកាលកម្ម សូមផ្ទៀងផ្ទាត់ថា​ជាអ្នក</translation>
 <translation id="6364438453358674297">យកការផ្តល់យោបល់ចេញពីប្រវត្តិ?</translation>
 <translation id="6380100320871303656">ផ្ទុកទំព័រជាមុន​កាន់តែញឹកញាប់​ដែល Chrome គិតថា​អ្នកទំនង​ជាចូលមើល។ ការកំណត់នេះ​អាចបណ្ដាលឱ្យ​ការប្រើប្រាស់ទិន្នន័យ​មានការកើនឡើង។</translation>
@@ -983,6 +986,7 @@
 <translation id="6397616442223433927">មានអ៊ីនធឺណិត​វិញ</translation>
 <translation id="6401458660421980302">ដើម្បីបញ្ជូន​ផ្ទាំងនេះ​ទៅ​ឧបករណ៍​ផ្សេង សូម​ចូល Chrome នៅ​លើ​នោះ</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> នៅលើ <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">ធ្វើ​សម​កាល​កម្មទិន្នន័យរបស់អ្នកនៅលើឧបករណ៍ទាំងអស់</translation>
 <translation id="6404511346730675251">កែប្រែចំណាំ</translation>
 <translation id="6406506848690869874">សមកាលកម្ម</translation>
 <translation id="6407224748847589805">មិនអាចភ្ជាប់ជាមួយកុំព្យូទ័ររបស់អ្នកបានទេ។ សូមសាកល្បងប្រើជម្រើសផ្ទៀងផ្ទាត់ផ្សេងទៀត។</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index d2ef6498..66177432 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">법적 정보</translation>
 <translation id="4084682180776658562">북마크</translation>
 <translation id="4084712963632273211">발신자: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />Google 제공<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">이 태블릿을 사용하여 이 QR 코드가 표시된 기기에 로그인할 수 있습니다.</translation>
 <translation id="4095146165863963773">앱 데이터를 삭제하시겠습니까?</translation>
 <translation id="4096227151372679484">북마크 저장 흐름이 절반 높이로 열림</translation>
 <translation id="4099578267706723511">사용 통계와 비정상 종료 보고서를 Google로 전송하여 Chrome을 개선하는 데 동참하세요.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />사용되는 데이터:<ph name="END_BOLD" /> 이 기기에서 Chrome으로 방문한 사이트 기록인 방문 기록이 사용됩니다.</translation>
 <translation id="4263656433980196874">어시스턴트 음성 검색 동의 UI가 전체 높이로 열림</translation>
 <translation id="4269820728363426813">링크 주소 복사</translation>
+<translation id="4283102315569707115">기본적으로 데스크톱 사이트를 요청하시겠습니까?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Android 설정에서 화면 잠금 사용 설정하기<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Chrome을 사용하면 <ph name="BEGIN_TOS_LINK" />Google 서비스 약관<ph name="END_TOS_LINK" />과 <ph name="BEGIN_ATOS_LINK" />Chrome 및 ChromeOS 추가 서비스 약관<ph name="END_ATOS_LINK" />에 동의하는 것으로 간주됩니다. <ph name="BEGIN_PRIVACY_LINK" />개인정보처리방침<ph name="END_PRIVACY_LINK" />도 적용됩니다.</translation>
 <translation id="4296252229500326964">새 시크릿 탭</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">방금</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />개}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />개}}</translation>
 <translation id="6345878117466430440">읽음으로 표시</translation>
+<translation id="6357653805084533597">이 휴대전화를 사용하여 이 QR 코드가 표시된 기기에 로그인할 수 있습니다.</translation>
 <translation id="6363990818884053551">동기화를 시작하려면 본인 여부를 확인하세요.</translation>
 <translation id="6364438453358674297">기록에서 제안을 삭제하시겠습니까?</translation>
 <translation id="6380100320871303656">Chrome에서 사용자가 방문할 가능성이 높다고 생각되는 페이지를 더 자주 미리 로드합니다. 이 설정을 사용하면 데이터 사용량이 늘어날 수 있습니다.</translation>
@@ -983,6 +986,7 @@
 <translation id="6397616442223433927">인터넷에 다시 연결됨</translation>
 <translation id="6401458660421980302">이 탭을 다른 기기로 보내려면 해당 기기에서 Chrome에 로그인하세요.</translation>
 <translation id="6402652558933147609"><ph name="VIOLATED_URL" />에 <ph name="ERROR_CODE" /> 오류 발생</translation>
+<translation id="6403371459378431832">모든 기기에서 데이터를 동기화해 보세요</translation>
 <translation id="6404511346730675251">북마크 수정</translation>
 <translation id="6406506848690869874">동기화</translation>
 <translation id="6407224748847589805">컴퓨터에 연결할 수 없습니다. 다른 인증 수단을 사용해 보세요.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
index 4b92417..3df1bde 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">ຂໍ້​ມູນ​ທາງດ້ານ​ກົດ​ຫມາຍ</translation>
 <translation id="4084682180776658562">ບຸກມາກຄ໌</translation>
 <translation id="4084712963632273211">ຈາກ <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />ສົ່ງໃຫ້ໂດຍ Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">ທ່ານສາມາດໃຊ້ແທັບເລັດເຄື່ອງນີ້ເພື່ອເຂົ້າສູ່ລະບົບຢູ່ອຸປະກອນທີ່ສະແດງລະຫັດ QR ນີ້ໄດ້.</translation>
 <translation id="4095146165863963773">ລຶບຂໍ້ມູນແອັບບໍ?</translation>
 <translation id="4096227151372679484">ເປີດຂັ້ນຕອນການບັນທຶກບຸກມາກແບບເຄິ່ງຄວາມສູງແລ້ວ</translation>
 <translation id="4099578267706723511">ຊ່ວຍເຮັດໃຫ້ Chrome ດີກ່ວາໂດຍການສົ່ງສະຖິຕິການໃຊ້ ແລະລາຍງານການຂັດຂ້ອງຫາ Google.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />ມີການໃຊ້ຂໍ້ມູນໃດ:<ph name="END_BOLD" /> ປະຫວັດການທ່ອງເວັບຂອງທ່ານ, ບັນທຶກຂອງເວັບໄຊທີ່ທ່ານເຂົ້າເບິ່ງໂດຍໃຊ້ Chrome ຢູ່ອຸປະກອນນີ້.</translation>
 <translation id="4263656433980196874">ສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ສຳລັບຄຳຍິນຍອມການຊອກຫາດ້ວຍສຽງຂອງຜູ້ຊ່ວຍທີ່ເປີດຢູ່ທີ່ຄວາມສູງເຕັມຈໍ</translation>
 <translation id="4269820728363426813">ກັອບປີ້ທີ່ຢູ່ລິ້ງ</translation>
+<translation id="4283102315569707115">ຮ້ອງຂໍເວັບໄຊເດັສທັອບຕາມຄ່າເລີ່ມຕົ້ນບໍ?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />ເປີດໃຊ້ການລັອກໜ້າຈໍໃນການຕັ້ງຄ່າ Android<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">ໂດຍການໃຊ້ Chrome, ແມ່ນຖືວ່າທ່ານຍອມຮັບ <ph name="BEGIN_TOS_LINK" />ຂໍ້ກຳນົດບໍລິການ Google<ph name="END_TOS_LINK" /> ແລະ <ph name="BEGIN_ATOS_LINK" />ຂໍ້ກຳນົດບໍລິການເພີ່ມເຕີມ Google Chrome ແລະ ChromeOS<ph name="END_ATOS_LINK" />. ຈະນຳໃຊ້ <ph name="BEGIN_PRIVACY_LINK" />ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ<ph name="END_PRIVACY_LINK" /> ນຳ.</translation>
 <translation id="4296252229500326964">ແຖບ​ບໍ່ເປີດເຜີຍຕົວຕົນໃໝ່</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">ເມື່ອກີ້ນີ້</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ແລະ ອີກ <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ທີ່ຢູ່ການຈັດສົ່ງ}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ແລະ ອີກ <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ທີ່ຢູ່ການຈັດສົ່ງ}}</translation>
 <translation id="6345878117466430440">ໝາຍວ່າອ່ານແລ້ວ</translation>
+<translation id="6357653805084533597">ທ່ານສາມາດໃຊ້ໂທລະສັບເຄື່ອງນີ້ເພື່ອເຂົ້າສູ່ລະບົບຢູ່ອຸປະກອນທີ່ສະແດງລະຫັດ QR ນີ້ໄດ້.</translation>
 <translation id="6363990818884053551">ເພື່ອເລີ່ມການຊິ້ງຂໍ້ມູນ, ໃຫ້ຢັ້ງຢືນວ່າແມ່ນທ່ານແທ້</translation>
 <translation id="6364438453358674297">ເອົາ​ການ​ແນະ​ນໍາ​ອອກຈາກ​ປະ​ຫວັດບໍ​?</translation>
 <translation id="6380100320871303656">ໂຫຼດໜ້າທີ່ Chrome ຄິດວ່າທ່ານໜ້າຈະເຂົ້າເບິ່ງໄວ້ກ່ອນລ່ວງໜ້າໃຫ້ຖີ່ຂຶ້ນ. ການຕັ້ງຄ່ານີ້ອາດສົ່ງຜົນໃຫ້ມີການໃຊ້ອິນເຕີເນັດຫຼາຍຂຶ້ນ.</translation>
@@ -983,6 +986,7 @@
 <translation id="6397616442223433927">ກັບມາອອນລາຍ</translation>
 <translation id="6401458660421980302">ເພື່ອສົ່ງແຖບນີ້ໄປຫາອຸປະກອນອື່ນ, ໃຫ້ເຂົ້າສູ່ລະບົບຫາ Chrome ຢູ່ບ່ອນນັ້ນ</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> ໃນ <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">ຊິ້ງຂໍ້ມູນຂອງທ່ານຢູ່ອຸປະກອນທັງໝົດແລ້ວ</translation>
 <translation id="6404511346730675251">ແກ້​ໄຂບຸກມາກສ໌</translation>
 <translation id="6406506848690869874">ຊິງຄ໌</translation>
 <translation id="6407224748847589805">ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາຄອມພິວເຕີຂອງທ່ານໄດ້. ກະລຸນາລອງໃຊ້ຕົວເລືອກການຢັ້ງຢືນອື່ນ.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
index ed5f303a..1ee5a0a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Teisinė informacija</translation>
 <translation id="4084682180776658562">Žymė</translation>
 <translation id="4084712963632273211">Nuo <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />pateikė „Google“<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Naudodami šį planšetinį kompiuterį galite prisijungti prie įrenginio, kuriame rodomas šis QR kodas.</translation>
 <translation id="4095146165863963773">Ištrinti programos duomenis?</translation>
 <translation id="4096227151372679484">Žymių išsaugojimo srautas atidarytas iki pusės ekrano aukščio</translation>
 <translation id="4099578267706723511">Padėkite tobulinti „Chrome“ siųsdami „Google“ naudojimo statistiką ir strigčių ataskaitas.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Kokie duomenys naudojami:<ph name="END_BOLD" /> jūsų naršymo istorija, svetainių, kuriose lankėtės naudodami „Chrome“ šiame įrenginyje, įrašas.</translation>
 <translation id="4263656433980196874">Sutikimo atlikti paiešką balsu naudojant Padėjėją NS atidaryta visu aukščiu</translation>
 <translation id="4269820728363426813">Kopijuoti nuorodos adresą</translation>
+<translation id="4283102315569707115">Pateikti svetainių kompiuteriams užklausą pagal numatytuosius nustatymus?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Įjungti ekrano užraktą „Android“ nustatymuose<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Naudodami „Chrome“ sutinkate su <ph name="BEGIN_TOS_LINK" />„Google“ paslaugų teikimo sąlygomis<ph name="END_TOS_LINK" /> ir <ph name="BEGIN_ATOS_LINK" />„Google Chrome“ bei „Chrome“ OS papildomomis paslaugų teikimo sąlygomis<ph name="END_ATOS_LINK" />. Taip pat taikoma <ph name="BEGIN_PRIVACY_LINK" />privatumo politika<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Naujas inkognito skirtukas</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Ką tik</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
 <translation id="6345878117466430440">Žymėti kaip skaitytą</translation>
+<translation id="6357653805084533597">Naudodami šį telefoną galite prisijungti prie įrenginio, kuriame rodomas šis QR kodas.</translation>
 <translation id="6363990818884053551">Jei norite pradėti sinchronizuoti, patvirtinkite savo tapatybę</translation>
 <translation id="6364438453358674297">Pašalinti pasiūlymą iš istorijos?</translation>
 <translation id="6380100320871303656">Dažniau iš anksto įkeliami puslapiai, kuriuose, „Chrome“ manymu, galėtumėte apsilankyti. Dėl šio nustatymo gali būti naudojama daugiau duomenų.</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 f4965ec..cadb4fc6b 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
@@ -985,6 +985,7 @@
 <translation id="6397616442223433927">Буцаад онлайн боллоо</translation>
 <translation id="6401458660421980302">Энэ табыг өөр төхөөрөмж рүү илгээхийн тулд тэндээс Chrome-д нэвтэрнэ үү</translation>
 <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> дээрх <ph name="ERROR_CODE" /></translation>
+<translation id="6403371459378431832">Өгөгдлөө бүх төхөөрөмж дээр синк хийгээрэй</translation>
 <translation id="6404511346730675251">Хадгалагдсан хуудсыг засах</translation>
 <translation id="6406506848690869874">Sync</translation>
 <translation id="6407224748847589805">Таны компьютертой холбогдож чадсангүй. Баталгаажуулалтын өөр сонголтыг туршиж үзнэ үү.</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 902e9678..65224cc 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
@@ -89,7 +89,7 @@
 <translation id="1397811292916898096"><ph name="PRODUCT_NAME" /> ဖြင့် ရှာပါ</translation>
 <translation id="139993653570221430">Chrome ဆက်တင်များတွင် အချိန်မရွေး စိတ်အလိုကျ ပြောင်းလဲနိုင်သည်။ လက်ရှိကြော်ငြာ ပြသသည့်နည်းလမ်းနှင့်တွဲ၍ စမ်းသပ်မှုများကို ပြုလုပ်သဖြင့် ပြောင်းလဲမှုများကို ချက်ချင်းမြင်နိုင်မည်မဟုတ်ပါ။</translation>
 <translation id="1406000523432664303">'ခြေရာမခံပါနှင့်'</translation>
-<translation id="1407069428457324124">မှောင်သည့်အပြင်အဆင်</translation>
+<translation id="1407069428457324124">အမှောင်နောက်ခံ</translation>
 <translation id="1407135791313364759">အားလုံး ဖွင့်ရန်</translation>
 <translation id="1409879593029778104">ဖိုင် ရှိနှင့်နေသောကြောင့် <ph name="FILE_NAME" /> ဒေါင်းလုဒ်လုပ်မှု တားဆီးခံခဲ့ရပါသည်။</translation>
 <translation id="1414981605391750300">Google ကို ဆက်သွယ်နေပါသည်။ အချိန်တစ်မိနစ်ခန့် ကြာနိုင်သည်...</translation>
@@ -141,7 +141,7 @@
 <translation id="1672586136351118594">နောက်ထပ်မပြပါနှင့်</translation>
 <translation id="1680919990519905526">Google Lens ဖြင့်ဝယ်ရန် <ph name="BEGIN_NEW" />အသစ်<ph name="END_NEW" /></translation>
 <translation id="1682195225331129001">ယခုစမ်းကြည့်ရန်</translation>
-<translation id="1702543251015153180">သင့်မှောင်သည့် အပြင်အဆင် ဆက်တင်များကို ပြောင်းမလား။</translation>
+<translation id="1702543251015153180">အမှောင်နောက်ခံ ဆက်တင်များကို ပြောင်းမလား။</translation>
 <translation id="1702907158640575240">စီမံထားသော ဘရောင်ဇာ</translation>
 <translation id="1710099199314114079">တဘ်များကို ပြောင်းပါ သို့မဟုတ် ပိတ်ပါ</translation>
 <translation id="1718835860248848330">နောက်ဆုံးတစ်နာရီ</translation>
@@ -292,7 +292,7 @@
 <translation id="2581165646603367611">၎င်းသည် Chrome က အရေးကြီးသည်ဟု မယူဆသည့် ကွတ်ကီးများ၊ ယာယီမှတ်ဉာဏ်များနှင့် ဆိုက်များ၏ အခြားဒေတာများကို ရှင်းလင်းလိုက်ပါမည်။</translation>
 <translation id="2587052924345400782">ပိုသစ်သော ဗားရှင်း ရှိပါသည်</translation>
 <translation id="2593272815202181319">Monospace</translation>
-<translation id="2604446170045642109">ဆက်တင်တွင် ဝဘ်ဆိုက်များအတွက် မှောင်သည့် အပြင်အဆင်ကို ပိတ်နိုင်သည်။</translation>
+<translation id="2604446170045642109">ဆက်တင်တွင် ဝဘ်ဆိုက်များအတွက် အမှောင်နောက်ခံကို ပိတ်နိုင်သည်။</translation>
 <translation id="2612676031748830579">ကဒ်နံပါတ်</translation>
 <translation id="2625189173221582860">စကားဝှက်ကို ကူးပြီးပါပြီ</translation>
 <translation id="2642087927315268160">လက်မှတ်ထိုးဝင်သည့် အောက်ခြေအပိုဆောင်း စာမျက်နှာ ပိတ်ထားသည်။</translation>
@@ -315,7 +315,7 @@
 <translation id="2722945394406572875">Privacy Sandbox အတည်ပြုစနစ် ပိတ်ထားသည်</translation>
 <translation id="2723001399770238859">အသံ</translation>
 <translation id="2732063072010454421">ပိုမိုကောင်းမွန်သော အသံစမ်းသပ်မှုကို ရယူပါ</translation>
-<translation id="2760989362628427051">သင့်စက်၏ မှောင်သည့်အပြင်အဆင် သို့မဟုတ် ဘက်ထရီအားထိန်းကို ဖွင့်ထားသည့်အခါ မှောင်သည့် အပြင်အဆင်ကို ဖွင့်ပါ</translation>
+<translation id="2760989362628427051">သင့်စက်၏ အမှောင်နောက်ခံ သို့မဟုတ် ဘက်ထရီအားထိန်းကို ဖွင့်ထားသည့်အခါ အမှောင်နောက်ခံကို ဖွင့်ပါ</translation>
 <translation id="2762000892062317888">ယခုလေးတင်</translation>
 <translation id="276969039800130567"><ph name="USER_EMAIL_ADDRESS" /> သုံး၍ ၐင်ပါ။</translation>
 <translation id="2776236159752647997">ပုဂ္ဂိုလ်ရေးဆိုင်ရာ၊ လုံခြုံရေး၊ ဒေတာစုဆောင်းမှုတို့နှင့် ဆက်စပ်နေသည့် နောက်ထပ် ဆက်တင်များအတွက် <ph name="BEGIN_LINK" />Google ဝန်ဆောင်မှုများ<ph name="END_LINK" /> ကို ကြည့်ပါ</translation>
@@ -452,7 +452,7 @@
 <translation id="3429160811076349561">အစမ်းသုံးလုပ်ဆောင်ချက်များကို ပိတ်ထားသည်</translation>
 <translation id="3435465986463792564">ဝင်းဒိုးများ ရပြီလား။ ၎င်းတို့ကို ဤနေရာမှ စီမံနိုင်ပါသည်</translation>
 <translation id="3443221991560634068">လက်ရှိစာမျက်နှာကို ပြန်ဖွင့်ရန်</translation>
-<translation id="3444179773590444986">ဝဘ်ဆိုက်များအတွက် မှောင်သည့် အပြင်အဆင်အပေါ် အကြံပြုချက်မျှဝေမလား။</translation>
+<translation id="3444179773590444986">ဝဘ်ဆိုက်များအတွက် အမှောင်နောက်ခံအကြောင်း အကြံပြုချက်မျှဝေမလား။</translation>
 <translation id="3469665409713263828">{FILE_COUNT,plural, =1{ဒေါင်းလုဒ် 1 ခု စီစဉ်ထားသည်}other{ဒေါင်းလုဒ် # ခု စီစဉ်ထားသည်}}</translation>
 <translation id="3474624961160222204"><ph name="NAME" /> အဖြစ်​ ရှေ့ဆက်ရန်</translation>
 <translation id="3478363558367712427">သင်၏ ရှာဖွေရေးအင်ဂျင်ကို ရွေးနိုင်သည်</translation>
@@ -468,7 +468,7 @@
 <translation id="3524138585025253783">ဆော့ဖ်ဝဲအင်ဂျင်နီယာ UI</translation>
 <translation id="3524334353996115845">သင်ဖြစ်ကြောင်းအတည်ပြုရန် <ph name="ORIGIN" /> ကို ခွင့်ပြုပါ</translation>
 <translation id="3527085408025491307">ဖိုင်တွဲ</translation>
-<translation id="3542235761944717775"><ph name="KILOBYTES" /> ကီလိုဘိုက် (KB) သိမ်းနိုင်သည်</translation>
+<translation id="3542235761944717775"><ph name="KILOBYTES" /> KB ရနိုင်သည်</translation>
 <translation id="3549657413697417275">သင့်မှတ်တမ်းကို ရှာရန်</translation>
 <translation id="3557336313807607643">အဆက်အသွယ်များသို့ ထည့်သွင်းပါ</translation>
 <translation id="3560491354538957576">ဝဘ်ဆိုက်က စိတ်ဝင်စားမှုကို ခွဲခြားသတ်မှတ်နိုင်သည်</translation>
@@ -658,7 +658,7 @@
 <translation id="4663499661119906179">သင့်အတွက် ထိပ်တန်းဝဘ်ဆိုက်များနှင့် သတင်းဆောင်းပါးများ ကြည့်ရှုရန်</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> စာညှပ် တွေ့ရှိပါသည်</translation>
 <translation id="4668347365065281350">ကွတ်ကီးများနှင့် စက်အတွင်း သိမ်းထားသော အခြားဒေတာအပါအဝင် ဝဘ်ဆိုက်များက သိမ်းထားသည့်ဒေတာအားလုံး</translation>
-<translation id="4678082183394354975">ဝဘ်ဆိုက်များအတွက် မှောင်သည့် အပြင်အဆင်ကို Chrome တွင် ဖွင့်ထားသည်</translation>
+<translation id="4678082183394354975">ဝဘ်ဆိုက်များအတွက် အမှောင်နောက်ခံကို Chrome တွင် ဖွင့်ထားသည်</translation>
 <translation id="4684427112815847243">အားလုံး စင့်ခ်ရန်</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ခု}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ခု}}</translation>
 <translation id="4699172675775169585">ကက်ရှ်လုပ်ထားသည့် ပုံများနှင့် ဖိုင်များ</translation>
@@ -1213,7 +1213,7 @@
 <translation id="757855969265046257">{FILES,plural, =1{<ph name="FILES_DOWNLOADED_ONE" /> ဖိုင် ဒေါင်းလုဒ်လုပ်ပြီးပြီ}other{<ph name="FILES_DOWNLOADED_MANY" /> ဖိုင် ဒေါင်းလုဒ်လုပ်ပြီးပြီ}}</translation>
 <translation id="7581273696622423628">စစ်တမ်းကောက်ယူမှုကို ဖြေဆိုရန်</translation>
 <translation id="7583262514280211622">သင့်ဖတ်ရန်စာရင်းကို ဤနေရာတွင် ပြပါမည်</translation>
-<translation id="7588219262685291874">သင့်စက်ပစ္စည်း၏ 'ဘက်ထရီ အားထိန်း' ဖွင့်ထားလျှင် မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည်</translation>
+<translation id="7588219262685291874">သင့်စက်ပစ္စည်း၏ 'ဘက်ထရီ အားထိန်း' ဖွင့်ထားလျှင် အမှောင်နောက်ခံကို ဖွင့်သည်</translation>
 <translation id="7594687499944811403"><ph name="TOP_ORIGIN" /> တွင် သင်ဖြစ်ကြောင်းအတည်ပြုရန် <ph name="EMBEDDED_ORIGIN" /> ကို ခွင့်ပြုပါ</translation>
 <translation id="7596558890252710462">လည်ပတ်မှု စနစ်</translation>
 <translation id="7605594153474022051">စင့်ခ်လုပ်၍မရပါ</translation>
@@ -1356,7 +1356,7 @@
 <translation id="8266862848225348053">တည်နေရာ ဒေါင်းလုဒ်လုပ်ခြင်း</translation>
 <translation id="8274165955039650276">ဒေါင်းလုဒ်များကို ကြည့်ရန်</translation>
 <translation id="8281886186245836920">ကျော်ရန်</translation>
-<translation id="8282297628636750033">ဝဘ်ဆိုက်ကိုဖြစ်နိုင်ပါက မှောင်သည့် အပြင်အဆင်ပြောင်းခြင်း</translation>
+<translation id="8282297628636750033">ဝဘ်ဆိုက်ကိုဖြစ်နိုင်ပါက အမှောင်နောက်ခံပြောင်းခြင်း</translation>
 <translation id="829672787777123339">သင့်စက်ပစ္စည်းသို့ ချိတ်ဆက်နေသည်…</translation>
 <translation id="8310344678080805313">ပုံမှန် တဲဘ်များ</translation>
 <translation id="831192587911042850">သင်လိုက်ကြည့်နေသော ဝဘ်ဆိုက်များစာရင်းတွင် လက်ရှိဝဘ်ဆိုက်ကို ပေါင်းထည့်သည်။</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
index e55c73a..579cee67 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">यो सुविधाले नयाँ जोखिमहरू पत्ता लगाउन पेज, डाउनलोड, एक्स्टेन्सनसम्बन्धी गतिविधि र प्रणालीसम्बन्धी जानकारीको सानो नमुना पनि Safe Browsing मा पठाउँछ</translation>
 <translation id="3297344142967351106">आवाज सहायता</translation>
 <translation id="3303414029551471755">सामग्री डाउनलोड गर्न अगाडि बढ्ने हो?</translation>
+<translation id="3305795716056605962">"थप विकल्पहरू" बटनमा गई पेजहरू अनुवाद गर्नुहोस्</translation>
 <translation id="3334729583274622784">फाइलको एक्स्टेन्सन परिवर्तन गर्ने हो?</translation>
 <translation id="3341262203274374114">अनफलो गर्न सकिएन। केही चिज गडबड भयो।</translation>
 <translation id="3359667936385849800">तपाईंको हालको सेवा प्रदायक प्रयोग गर्नुहोस्</translation>
@@ -1267,6 +1268,7 @@
 <translation id="7853202427316060426">गतिविधि</translation>
 <translation id="7857691613771368249">फाइलहरू कहिले सुरक्षित गर्ने भनी सोध्नुहोस्</translation>
 <translation id="7859988229622350291">कहिल्यै अनुवाद नगरियोस्</translation>
+<translation id="7866213166286285359">पेजहरू यहाँ अनुवाद गर्नुहोस्</translation>
 <translation id="78707286264420418">तपाईंको डिभाइसमा कनेक्ट गर्नका निम्ति <ph name="PRODUCT_NAME" /> लाई नजिकैका डिभाइसहरू खोज्ने अनुमति दिनु पर्ने हुन्छ</translation>
 <translation id="7875915731392087153">इमेल सिर्जना गर्नुहोस्</translation>
 <translation id="7876243839304621966">सबै हटाउनुहोस्</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
index 92e68a6..55665e4c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">ଆଇନଗତ ସୂଚନା</translation>
 <translation id="4084682180776658562">ବୁକମାର୍କ</translation>
 <translation id="4084712963632273211"><ph name="PUBLISHER_ORIGIN" />ଙ୍କ ଠାରୁ – <ph name="BEGIN_DEEMPHASIZED" />Google ଦ୍ୱାରା ବିତରଣ କରାଯାଇଛି<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">ଏହି QR କୋଡ ଡିସପ୍ଲେ କରୁଥିବା ଡିଭାଇସରେ ସାଇନ ଇନ କରିବା ପାଇଁ ଆପଣ ଏହି ଟାବଲେଟକୁ ବ୍ୟବହାର କରିପାରିବେ।</translation>
 <translation id="4095146165863963773">ଆପ୍ ଡାଟା ଡିଲିଟ୍ କରିବେ କି?</translation>
 <translation id="4096227151372679484">ବୁକମାର୍କ ସେଭ ଫ୍ଲୋ ଅଧା ଖୋଲାଯାଇଛି</translation>
 <translation id="4099578267706723511">Googleକୁ ବ୍ୟବହାରର ପରିସଂଖ୍ୟାନ ଏବଂ କ୍ରାଶ୍ ରିପୋର୍ଟ ପଠାଇ, Chromeକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ।</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />କେଉଁ ଡାଟା ବ୍ୟବହାର କରାଯାଏ:<ph name="END_BOLD" /> ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଇତିହାସ, ଏହି ଡିଭାଇସରେ Chrome ବ୍ୟବହାର କରି ଆପଣ ଭିଜିଟ କରିଥିବା ସାଇଟଗୁଡ଼ିକର ଏହା ହେଉଛି ଏକ ରେକର୍ଡ।</translation>
 <translation id="4263656433980196874">Assistantର ଭଏସ୍ ମାଧ୍ୟମରେ ସନ୍ଧାନ ପାଇଁ ସମ୍ମତିର ui ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନରେ ଖୋଲିଛି</translation>
 <translation id="4269820728363426813">ଲିଙ୍କ୍ ଠିକଣା କପି କରନ୍ତୁ</translation>
+<translation id="4283102315569707115">ଡେସ୍କଟପ ସାଇଟଗୁଡ଼ିକୁ ଡିଫଲ୍ଟ ଭାବେ ଅନୁରୋଧ କରିବେ?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Android ସେଟିଂସରେ ସ୍କ୍ରିନ ଲକ ଚାଲୁ କରନ୍ତୁ<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Chrome ବ୍ୟବହାର କରି, ଆପଣ <ph name="BEGIN_TOS_LINK" />Google ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_TOS_LINK" /> ଏବଂ <ph name="BEGIN_ATOS_LINK" />Google Chrome ଏବଂ ChromeOSର ଅତିରିକ୍ତ ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_ATOS_LINK" />ରେ ସମ୍ମତ ହୁଅନ୍ତି। <ph name="BEGIN_PRIVACY_LINK" />ଗୋପନୀୟତା ନୀତି<ph name="END_PRIVACY_LINK" /> ମଧ୍ୟ ଲାଗୁ ହୁଏ।</translation>
 <translation id="4296252229500326964">ନୂଆ ଇନକଗ୍ନିଟୋ ଟାବ୍</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">ଏହିକ୍ଷଣି</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ଏବଂ <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ଅଧିକ}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ଏବଂ <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ଅଧିକ}}</translation>
 <translation id="6345878117466430440">ପଢ଼ାଯାଇଛି ଭାବରେ ଚିହ୍ନଟ କରନ୍ତୁ</translation>
+<translation id="6357653805084533597">ଏହି QR କୋଡ ଡିସପ୍ଲେ କରୁଥିବା ଡିଭାଇସରେ ସାଇନ ଇନ କରିବା ପାଇଁ ଆପଣ ଏହି ଫୋନକୁ ବ୍ୟବହାର କରିପାରିବେ।</translation>
 <translation id="6363990818884053551">ସିଙ୍କ୍ ଆରମ୍ଭ କରିବାକୁ ଏହା ଆପଣ ଅଟନ୍ତି ବୋଲି ଯାଞ୍ଚ କରନ୍ତୁ</translation>
 <translation id="6364438453358674297">ଇତିବୃତ୍ତିରୁ ପ୍ରସ୍ତାବକୁ କାଢ଼ି ଦେବେକି?</translation>
 <translation id="6380100320871303656">ଆପଣ ଭିଜିଟ କରିବାର ସମ୍ଭାବନା ଅଛି ବୋଲି Chrome ଭାବୁଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ବାରମ୍ବାର ପ୍ରିଲୋଡ କରେ। ଏହି ସେଟିଂ ଯୋଗୁଁ ଡାଟାର ବ୍ୟବହାର ବଢ଼ିପାରେ।</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index 7be88c56..1ef3693 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Informacje prawne</translation>
 <translation id="4084682180776658562">Dodaj do zakładek</translation>
 <translation id="4084712963632273211">Opublikowane na <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />wyświetlone przez Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Za pomocą tego tabletu możesz zalogować się na urządzeniu, na którym wyświetlany jest ten kod QR.</translation>
 <translation id="4095146165863963773">Usunąć dane aplikacji?</translation>
 <translation id="4096227151372679484">Procedura zapisywania zakładki została otwarta na połowę wysokości</translation>
 <translation id="4099578267706723511">Pomóż ulepszyć Chrome, wysyłając do Google statystyki użytkowania i raporty o awariach.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Jakich danych używamy:<ph name="END_BOLD" /> używamy Twojej historii przeglądania, czyli rejestru witryn, które odwiedzasz w Chrome na tym urządzeniu.</translation>
 <translation id="4263656433980196874">Ekran wyrażenia zgody na wyszukiwanie głosowe z pomocą Asystenta został otwarty na pełną wysokość</translation>
 <translation id="4269820728363426813">Kopiuj adres linku</translation>
+<translation id="4283102315569707115">Domyślnie żądać strony w wersji na komputer?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Włącz blokadę ekranu w ustawieniach Androida<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Korzystając z Chrome, wyrażasz zgodę na <ph name="BEGIN_TOS_LINK" />Warunki korzystania z usług Google<ph name="END_TOS_LINK" /> oraz <ph name="BEGIN_ATOS_LINK" />Dodatkowe warunki korzystania z Google Chrome i Chrome OS<ph name="END_ATOS_LINK" />. Obowiązują też postanowienia <ph name="BEGIN_PRIVACY_LINK" />polityki prywatności<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Nowa karta incognito</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Przed momentem</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
 <translation id="6345878117466430440">Oznacz jako przeczytane</translation>
+<translation id="6357653805084533597">Za pomocą tego telefonu możesz zalogować się na urządzeniu, na którym wyświetlany jest ten kod QR.</translation>
 <translation id="6363990818884053551">Aby rozpocząć synchronizację, potwierdź swoją tożsamość</translation>
 <translation id="6364438453358674297">Usunąć sugestię z historii?</translation>
 <translation id="6380100320871303656">Częściej wczytuje strony, w przypadku których Chrome przewiduje, że prawdopodobieństwo ich odwiedzin jest duże. Gdy ustawienie jest aktywne, zużycie danych może być większe.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index 1c26b328..4b291d6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -983,6 +983,7 @@
 <translation id="6397616442223433927">Подключение восстановлено</translation>
 <translation id="6401458660421980302">Чтобы отправить вкладку на другое устройство, войдите на нем в Chrome.</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" />: <ph name="VIOLATED_URL" />.</translation>
+<translation id="6403371459378431832">Синхронизируйте данные на всех устройствах</translation>
 <translation id="6404511346730675251">Изменить закладку</translation>
 <translation id="6406506848690869874">Синхронизация</translation>
 <translation id="6407224748847589805">Не удается подключиться к компьютеру. Выберите другой способ подтверждения.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index ee09abc..0c84a81 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">නෛතික තොරතුරු</translation>
 <translation id="4084682180776658562">පිටු සලකුණ</translation>
 <translation id="4084712963632273211"><ph name="PUBLISHER_ORIGIN" /> වෙතින් – <ph name="BEGIN_DEEMPHASIZED" />Google විසින් බෙදා හරින ලදි<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">මෙම QR කේතය සංදර්ශනය කරන උපාංගයට පිරීමට ඔබට මෙම ටැබ්ලටය භාවිතා කළ හැක.</translation>
 <translation id="4095146165863963773">යෙදුම් දත්ත මකා දමනවා ද?</translation>
 <translation id="4096227151372679484">පිටුසන් සුරැකීම් ප්‍රවාහය අර්ධ උසකදී විවෘතයි</translation>
 <translation id="4099578267706723511">Google වෙත භාවිත සංඛ්‍යාන සහ බිඳවැටීම් වාර්තා යැවීමෙන් Chrome වඩා යහපත් කිරීමට උදවු වන්න.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />භාවිත කරන දත්ත මොනවාද:<ph name="END_BOLD" /> ඔබගේ බ්‍රවුස් කිරීමේ ඉතිහාසය, මෙම උපාංගයේ Chrome භාවිතයෙන් ඔබ පිවිසි අඩවිවල වාර්තාවක්.</translation>
 <translation id="4263656433980196874">පූර්ණ උසකදී සහායක හඬ සෙවීම් අනුමත ui විවෘත කරන ලදි</translation>
 <translation id="4269820728363426813">ලින්ක් ලිපිනය පිටපත් කරන්න</translation>
+<translation id="4283102315569707115">පෙරනිමියෙන් ඩෙස්ක්ටොප් අඩවි ඉල්ලන්න ද?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Android සැකසීම් තුළ තිර අගුල ක්‍රියාත්මක කරන්න<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Chrome භාවිත කිරීමෙන්, ඔබ <ph name="BEGIN_TOS_LINK" />Google සේවා නියම<ph name="END_TOS_LINK" /> සහ <ph name="BEGIN_ATOS_LINK" />Google Chrome සහ ChromeOS අතිරේක සේවා නියම<ph name="END_ATOS_LINK" /> සමග එකඟ වේ. <ph name="BEGIN_PRIVACY_LINK" />පෞද්ගලිකත්ව ප්‍රතිපත්තිය<ph name="END_PRIVACY_LINK" /> ද අදාළ වේ.</translation>
 <translation id="4296252229500326964">නව අප්‍රකට ටැබය</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">මේ දැන්</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
 <translation id="6345878117466430440">කියවූ ලෙස ලකුණු කරන්න</translation>
+<translation id="6357653805084533597">මෙම QR කේතය සංදර්ශනය කරන උපාංගයට පිරීමට ඔබට මෙම දුරකථනය භාවිතා කළ හැක.</translation>
 <translation id="6363990818884053551">සමමුහුර්ත කිරීම ආරම්භ කිරීමට, ඒ ඔබ බව සත්‍යාපනය කරන්න</translation>
 <translation id="6364438453358674297">යෝජනාව ඉතිහාසය වෙතින් ඉවත් කරන්නද?</translation>
 <translation id="6380100320871303656">ඔබ පිවිසීමට ඉඩ ඇතැයි Chrome සිතන පිටු වඩාත් නිතර පූර්ව පූරණය කරයි. මෙම සැකසීම දත්ත භාවිතය වැඩි වීමට හේතු විය හැකිය.</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 21c25e7..0604574 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
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Odosiela aj malú vzorku stránok, stiahnutých súborov, aktivity rozšírení a informácií o systéme, čím pomáha zisťovať nové hrozby</translation>
 <translation id="3297344142967351106">Hlasová pomoc</translation>
 <translation id="3303414029551471755">Pokračovať a stiahnuť obsah?</translation>
+<translation id="3305795716056605962">Tlačidlo na preklad stránok v ponuke Ďalšie možnosti</translation>
 <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>
@@ -986,6 +987,7 @@
 <translation id="6397616442223433927">Sme späť online</translation>
 <translation id="6401458660421980302">Ak chcete túto kartu odoslať do iného zariadenia, prihláste sa v ňom do Chromu</translation>
 <translation id="6402652558933147609"><ph name="VIOLATED_URL" />: <ph name="ERROR_CODE" /></translation>
+<translation id="6403371459378431832">Synchronizujte údaje vo všetkých zariadeniach</translation>
 <translation id="6404511346730675251">Upraviť záložku</translation>
 <translation id="6406506848690869874">Synchronizácia</translation>
 <translation id="6407224748847589805">K vášmu počítaču sa nedá pripojiť. Skúste inú možnosť overenia.</translation>
@@ -1267,6 +1269,7 @@
 <translation id="7853202427316060426">Aktivita</translation>
 <translation id="7857691613771368249">Opýtať sa, kedy uložiť súbory</translation>
 <translation id="7859988229622350291">Nikdy neprekladať tieto jazyky</translation>
+<translation id="7866213166286285359">Tu preložíte stránky</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> potrebuje povolenie pre zariadenia v okolí, aby sa mohol pripojiť k vášmu zariadeniu</translation>
 <translation id="7875915731392087153">Vytvorte správu</translation>
 <translation id="7876243839304621966">Odstrániť všetko</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 ca0800e..207e3b9 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
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Prav tako pošlje manjši vzorec strani, prenosov, dejavnosti razširitev in podatkov o sistemu zaradi pomoči pri odkrivanju novih groženj.</translation>
 <translation id="3297344142967351106">Glasovna pomoč</translation>
 <translation id="3303414029551471755">Ali želite prenesti vsebino?</translation>
+<translation id="3305795716056605962">Prevajanje strani z gumbom za več možnosti</translation>
 <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>
@@ -986,6 +987,7 @@
 <translation id="6397616442223433927">Povezava je znova vzpostavljena</translation>
 <translation id="6401458660421980302">Če želite ta zavihek poslati v drugo napravo, se v njej prijavite v Chrome.</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> na <ph name="VIOLATED_URL" /></translation>
+<translation id="6403371459378431832">Sinhronizacija podatkov v vseh napravah</translation>
 <translation id="6404511346730675251">Uredi zaznamek</translation>
 <translation id="6406506848690869874">Sinhronizacija</translation>
 <translation id="6407224748847589805">Ni se mogoče povezati z računalnikom. Poskusite drugo možnost preverjanja.</translation>
@@ -1267,6 +1269,7 @@
 <translation id="7853202427316060426">Dejavnost</translation>
 <translation id="7857691613771368249">Vprašaj, kdaj shraniti datoteke</translation>
 <translation id="7859988229622350291">Nikoli ne prevedi</translation>
+<translation id="7866213166286285359">Prevajanje strani tukaj</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> potrebuje dovoljenje za naprave v bližini za vzpostavitev povezave z vašo napravo.</translation>
 <translation id="7875915731392087153">Ustvarite e-poštno sporočilo</translation>
 <translation id="7876243839304621966">Odstrani vse</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index e0e7c40..cdb417b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Ett litet urval av sidor, nedladdning, tilläggsaktivitet och systeminformation skickas även för att upptäcka nya hot</translation>
 <translation id="3297344142967351106">Rösthjälp</translation>
 <translation id="3303414029551471755">Vill du ladda ned innehållet?</translation>
+<translation id="3305795716056605962">Översätt sidor via knappen Fler alternativ</translation>
 <translation id="3334729583274622784">Vill du ändra filnamnstillägget?</translation>
 <translation id="3341262203274374114">Det gick inte att sluta följa flödet på grund av ett fel.</translation>
 <translation id="3359667936385849800">Använd den nuvarande DNS-leverantören</translation>
@@ -1265,6 +1266,7 @@
 <translation id="7853202427316060426">Aktivitet</translation>
 <translation id="7857691613771368249">Fråga när filerna ska sparas</translation>
 <translation id="7859988229622350291">Översätt aldrig</translation>
+<translation id="7866213166286285359">Översätt sidor här</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> behöver behörigheten Enheter i närheten för att kunna ansluta till enheten</translation>
 <translation id="7875915731392087153">Skapa ett e-postmeddelande</translation>
 <translation id="7876243839304621966">Ta bort alla</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
index 76b0f4d..cff4e58f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -986,6 +986,7 @@
 <translation id="6397616442223433927">இணைப்பு வந்துவிட்டது</translation>
 <translation id="6401458660421980302">இந்தப் பக்கத்தை மற்றொரு சாதனத்திற்கு அனுப்ப, அந்தச் சாதனத்திலிருக்கும் Chromeமில் உள்நுழைய வேண்டும்</translation>
 <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> இல் <ph name="ERROR_CODE" /> பிழை</translation>
+<translation id="6403371459378431832">அனைத்துச் சாதனங்களிலும் உங்கள் தரவை ஒத்திசைக்கலாம்</translation>
 <translation id="6404511346730675251">புக்மார்க்களைத் திருத்து</translation>
 <translation id="6406506848690869874">Sync</translation>
 <translation id="6407224748847589805">கம்ப்யூட்டருடன் இணைக்க முடியவில்லை. வேறொரு சரிபார்ப்பு விருப்பத்தைப் பயன்படுத்தவும்.</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 73863ae..662544c 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
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">รวมถึงส่งตัวอย่างส่วนเล็กๆ ของหน้าเว็บ การดาวน์โหลด กิจกรรมของส่วนขยาย และข้อมูลระบบเพื่อช่วยค้นหาภัยคุกคามใหม่ๆ</translation>
 <translation id="3297344142967351106">เสียงผู้ช่วย</translation>
 <translation id="3303414029551471755">ต้องการดำเนินการดาวน์โหลดเนื้อหานี้ไหม</translation>
+<translation id="3305795716056605962">ดูข้อความแจ้งเกี่ยวกับการแปลหน้าเว็บจากปุ่ม "ตัวเลือกเพิ่มเติม"</translation>
 <translation id="3334729583274622784">เปลี่ยนนามสกุลไฟล์ใช่ไหม</translation>
 <translation id="3341262203274374114">เลิกติดตามไม่ได้ เกิดข้อผิดพลาด</translation>
 <translation id="3359667936385849800">ใช้ผู้ให้บริการปัจจุบัน</translation>
@@ -1267,6 +1268,7 @@
 <translation id="7853202427316060426">กิจกรรม</translation>
 <translation id="7857691613771368249">ถามว่าจะให้บันทึกไฟล์เมื่อใด</translation>
 <translation id="7859988229622350291">ไม่ต้องแปล</translation>
+<translation id="7866213166286285359">ดูข้อความแจ้งเกี่ยวกับการแปลหน้าเว็บที่นี่</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> ต้องการสิทธิ์เข้าถึงอุปกรณ์ที่อยู่ใกล้เคียงเพื่อเชื่อมต่อกับอุปกรณ์ของคุณ</translation>
 <translation id="7875915731392087153">สร้างอีเมล</translation>
 <translation id="7876243839304621966">ลบทั้งหมด</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
index b91cb58..779c04f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -557,6 +557,7 @@
 <translation id="4062305924942672200">Yasal bilgiler</translation>
 <translation id="4084682180776658562">Yer İşareti</translation>
 <translation id="4084712963632273211"><ph name="PUBLISHER_ORIGIN" /> web sitesinden - <ph name="BEGIN_DEEMPHASIZED" />Google tarafından yayınlandı<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Bu QR kodunu gösteren cihazda oturum açmak için bu tableti kullanabilirsiniz.</translation>
 <translation id="4095146165863963773">Uygulama verileri silinsin mi?</translation>
 <translation id="4096227151372679484">Yer işareti kaydetme akışı ekranın yarısına kadar açıldı</translation>
 <translation id="4099578267706723511">Google'a kullanım istatistikleri ve kilitlenme raporları göndererek Chrome'u iyileştirmeye yardımcı olun.</translation>
@@ -591,6 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Kullanılan veriler:<ph name="END_BOLD" /> Tarama geçmişiniz ve bu cihazda Chrome'u kullanarak ziyaret ettiğiniz sitelerin kaydı.</translation>
 <translation id="4263656433980196874">Asistan sesli arama izni kullanıcı arayüzü tam yükseklikte açıldı</translation>
 <translation id="4269820728363426813">Bağlantı adresini kopyala</translation>
+<translation id="4283102315569707115">Varsayılan olarak masaüstü siteleri istensin mi?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Android ayarlarında ekran kilidini açın<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Chrome'u kullanarak <ph name="BEGIN_TOS_LINK" />Google Hizmet Şartları<ph name="END_TOS_LINK" /> ile <ph name="BEGIN_ATOS_LINK" />Google Chrome ve ChromeOS Ek Hizmet Şartları<ph name="END_ATOS_LINK" />'nı kabul etmiş olursunuz. Ayrıca <ph name="BEGIN_PRIVACY_LINK" />Gizlilik Politikası<ph name="END_PRIVACY_LINK" /> da geçerli olur.</translation>
 <translation id="4296252229500326964">Yeni Gizli sekme</translation>
@@ -970,6 +972,7 @@
 <translation id="6342069812937806050">Az önce</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ve <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> adres daha}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ve <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> adres daha}}</translation>
 <translation id="6345878117466430440">Okundu olarak işaretle</translation>
+<translation id="6357653805084533597">Bu QR kodunu gösteren cihazda oturum açmak için bu telefonu kullanabilirsiniz.</translation>
 <translation id="6363990818884053551">Senkronizasyonu başlatmak için kimliğinizi doğrulayın</translation>
 <translation id="6364438453358674297">Öneri geçmişten kaldırılsın mı?</translation>
 <translation id="6380100320871303656">Chrome'un ziyaret edebileceğinizi düşündüğü sayfaları daha sık önceden yükler. Bu ayar sonucunda veri kullanımı artabilir.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index 304fbac4..0d890008 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -557,7 +557,7 @@
 <translation id="4062305924942672200">法律資料</translation>
 <translation id="4084682180776658562">書籤</translation>
 <translation id="4084712963632273211">發佈者:<ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />由 Google 提供<ph name="END_DEEMPHASIZED" /></translation>
-<translation id="409109920254068737">你可以使用這部平板電腦登入顯示這個 QR code 的裝置。</translation>
+<translation id="409109920254068737">您可使用此平板電腦登入顯示此 QR 碼的裝置。</translation>
 <translation id="4095146165863963773">要刪除應用程式資料嗎?</translation>
 <translation id="4096227151372679484">書籤儲存流程宜家顯示喺畫面下半部</translation>
 <translation id="4099578267706723511">將使用統計資料及當機報告傳送給 Google,助我們一臂之力,讓 Chrome 更臻完美。</translation>
@@ -592,7 +592,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />需要使用什麼資料:<ph name="END_BOLD" />您的瀏覽記錄,亦即您在此裝置上使用 Chrome 瀏覽過的網站記錄。</translation>
 <translation id="4263656433980196874">「Google 助理」語音搜尋的同意使用者介面已開啟,顯示於整個畫面</translation>
 <translation id="4269820728363426813">複製連結網址</translation>
-<translation id="4283102315569707115">要讓系統預設顯示電腦版網站嗎?</translation>
+<translation id="4283102315569707115">要讓系統根據預設顯示電腦版網站嗎?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />在 Android 設定中開啟螢幕鎖定<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">使用 Chrome 即表示您同意《<ph name="BEGIN_TOS_LINK" />Google 服務條款<ph name="END_TOS_LINK" />》以及 <ph name="BEGIN_ATOS_LINK" />Google Chrome 和 Chrome OS 的《附加服務條款》<ph name="END_ATOS_LINK" />。須同時受《<ph name="BEGIN_PRIVACY_LINK" />私隱權政策<ph name="END_PRIVACY_LINK" />》約束。</translation>
 <translation id="4296252229500326964">新無痕式分頁</translation>
@@ -972,7 +972,7 @@
 <translation id="6342069812937806050">剛剛完成</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 和另外 <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> 個地址}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 和另外 <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> 個地址}}</translation>
 <translation id="6345878117466430440">標示為已閱讀</translation>
-<translation id="6357653805084533597">你可以使用這支手機登入顯示這個 QR code 的裝置。</translation>
+<translation id="6357653805084533597">您可使用此手機登入顯示此 QR 碼的裝置。</translation>
 <translation id="6363990818884053551">如要開始同步,請驗證您的身分</translation>
 <translation id="6364438453358674297">從記錄中移除建議項目嗎?</translation>
 <translation id="6380100320871303656">Chrome 會較頻密地預先載入 Chrome 您可能會瀏覽的頁面。此設定可能會提高數據用量。</translation>
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
index f8ff4755..3df9b51 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
@@ -222,8 +222,10 @@
 
     /** Returns whether it's on grid tab switcher surface. */
     private boolean isOnGridTabSwitcher() {
-        return mIsRefactorEnabled ? mLayoutType == LayoutType.TAB_SWITCHER
-                                  : mStartSurfaceState == StartSurfaceState.SHOWN_TABSWITCHER;
+        return mIsRefactorEnabled
+                ? mLayoutType == LayoutType.TAB_SWITCHER
+                : (mStartSurfaceState == StartSurfaceState.SHOWN_TABSWITCHER
+                        || mStartSurfaceState == StartSurfaceState.SHOWING_TABSWITCHER);
     }
 
     /**
diff --git a/chrome/browser/ui/bookmarks/bookmark_browsertest.cc b/chrome/browser/ui/bookmarks/bookmark_browsertest.cc
index fbf5dd01..7f699ee 100644
--- a/chrome/browser/ui/bookmarks/bookmark_browsertest.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_browsertest.cc
@@ -200,13 +200,12 @@
   Profile* profile2 = nullptr;
   g_browser_process->profile_manager()->CreateMultiProfileAsync(
       u"New Profile", 0, false,
-      base::BindLambdaForTesting(
-          [&](Profile* profile, Profile::CreateStatus status) {
-            if (status == Profile::CREATE_STATUS_INITIALIZED) {
-              profile2 = profile;
-              run_loop.Quit();
-            }
-          }));
+      base::BindLambdaForTesting([&](Profile* profile) {
+        if (profile) {
+          profile2 = profile;
+          run_loop.Quit();
+        }
+      }));
   run_loop.Run();
   BookmarkModel* bookmark_model2 = WaitForBookmarkModel(profile2);
 
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 244584b..be496c1 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -1981,15 +1981,15 @@
     if (app_controller_ && app_controller_->HasMinimalUiButtons())
       return blink::mojom::DisplayMode::kMinimalUi;
 
-    // TODO(crbug.com/1333978): Sync with the value of
-    // browser_view()->IsWindowControlsOverlayEnabled().
-    if (app_controller_ && app_controller_->AppUsesWindowControlsOverlay())
+    if (app_controller_ && app_controller_->AppUsesWindowControlsOverlay() &&
+        !web_contents->GetWindowsControlsOverlayRect().IsEmpty()) {
       return blink::mojom::DisplayMode::kWindowControlsOverlay;
+    }
 
-    // TODO(crbug.com/1325830): Add check for the Window Management API
-    // permission status.
-    if (app_controller_ && app_controller_->AppUsesBorderlessMode())
+    if (app_controller_ && app_controller_->AppUsesBorderlessMode() &&
+        window_->IsBorderlessModeEnabled()) {
       return blink::mojom::DisplayMode::kBorderless;
+    }
 
     return blink::mojom::DisplayMode::kStandalone;
   }
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h
index 637f21d3..43d0b31 100644
--- a/chrome/browser/ui/browser_window.h
+++ b/chrome/browser/ui/browser_window.h
@@ -620,6 +620,10 @@
   // Shows an Incognito history disclaimer dialog.
   virtual void ShowIncognitoHistoryDisclaimerDialog() = 0;
 
+  // Returns true when the borderless mode should be displayed instead
+  // of a full titlebar. This is only supported for desktop web apps.
+  virtual bool IsBorderlessModeEnabled() const = 0;
+
  protected:
   friend class BrowserCloseManager;
   friend class BrowserView;
diff --git a/chrome/browser/ui/frame/OWNERS b/chrome/browser/ui/frame/OWNERS
index eaac7fc..8ef336885 100644
--- a/chrome/browser/ui/frame/OWNERS
+++ b/chrome/browser/ui/frame/OWNERS
@@ -1,4 +1,3 @@
 bsep@chromium.org
 pkasting@chromium.org
 sky@chromium.org
-rameier@chromium.org
diff --git a/chrome/browser/ui/page_info/chrome_page_info_delegate.cc b/chrome/browser/ui/page_info/chrome_page_info_delegate.cc
index cbe2597ab..523e7a71 100644
--- a/chrome/browser/ui/page_info/chrome_page_info_delegate.cc
+++ b/chrome/browser/ui/page_info/chrome_page_info_delegate.cc
@@ -13,6 +13,8 @@
 #include "chrome/browser/content_settings/page_specific_content_settings_delegate.h"
 #include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h"
 #include "chrome/browser/permissions/permission_manager_factory.h"
+#include "chrome/browser/privacy_sandbox/privacy_sandbox_service.h"
+#include "chrome/browser/privacy_sandbox/privacy_sandbox_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
@@ -79,6 +81,11 @@
   return Profile::FromBrowserContext(web_contents_->GetBrowserContext());
 }
 
+bool ChromePageInfoDelegate::IsFpsAllowed() const {
+  return PrivacySandboxServiceFactory::GetForProfile(GetProfile())
+      ->ShouldShowDetailedFpsControls();
+}
+
 permissions::ObjectPermissionContextBase*
 ChromePageInfoDelegate::GetChooserContext(ContentSettingsType type) {
   switch (type) {
@@ -161,6 +168,14 @@
 }
 
 #if !BUILDFLAG(IS_ANDROID)
+absl::optional<std::u16string> ChromePageInfoDelegate::GetFpsOwner(
+    const GURL& site_url) {
+  return IsFpsAllowed()
+             ? PrivacySandboxServiceFactory::GetForProfile(GetProfile())
+                   ->GetFpsOwnerForDisplay(site_url)
+             : absl::nullopt;
+}
+
 bool ChromePageInfoDelegate::CreateInfoBarDelegate() {
   infobars::ContentInfoBarManager* infobar_manager =
       infobars::ContentInfoBarManager::FromWebContents(web_contents_);
diff --git a/chrome/browser/ui/page_info/chrome_page_info_delegate.h b/chrome/browser/ui/page_info/chrome_page_info_delegate.h
index cc540c34..837e79a 100644
--- a/chrome/browser/ui/page_info/chrome_page_info_delegate.h
+++ b/chrome/browser/ui/page_info/chrome_page_info_delegate.h
@@ -53,6 +53,7 @@
       const url::Origin& origin) override;
 
 #if !BUILDFLAG(IS_ANDROID)
+  absl::optional<std::u16string> GetFpsOwner(const GURL& site_url) override;
   bool CreateInfoBarDelegate() override;
   // In Chrome's case, this may show the site settings page or an app settings
   // page, depending on context.
@@ -85,6 +86,7 @@
 #endif
 
  private:
+  bool IsFpsAllowed() const;
   Profile* GetProfile() const;
 #if BUILDFLAG(FULL_SAFE_BROWSING)
   safe_browsing::ChromePasswordProtectionService*
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
index 989097e8..11e7e377 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -1369,13 +1369,12 @@
 }
 
 // static
-void StartupBrowserCreator::ProcessCommandLineOnProfileCreated(
+void StartupBrowserCreator::ProcessCommandLineOnProfileInitialized(
     const base::CommandLine& command_line,
     const base::FilePath& cur_dir,
     StartupProfileMode mode,
-    Profile* profile,
-    Profile::CreateStatus status) {
-  if (status != Profile::CREATE_STATUS_INITIALIZED)
+    Profile* profile) {
+  if (!profile)
     return;
   StartupBrowserCreator startup_browser_creator;
   startup_browser_creator.ProcessCmdLineImpl(
@@ -1395,8 +1394,8 @@
   if (!profile) {
     profile_manager->CreateProfileAsync(
         profile_path_info.path,
-        base::BindRepeating(&ProcessCommandLineOnProfileCreated, command_line,
-                            cur_dir, profile_path_info.mode));
+        base::BindOnce(&ProcessCommandLineOnProfileInitialized, command_line,
+                       cur_dir, profile_path_info.mode));
     return;
   }
   StartupBrowserCreator startup_browser_creator;
diff --git a/chrome/browser/ui/startup/startup_browser_creator.h b/chrome/browser/ui/startup/startup_browser_creator.h
index 790d0ee..482ca95 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.h
+++ b/chrome/browser/ui/startup/startup_browser_creator.h
@@ -254,13 +254,12 @@
                               const base::FilePath& cur_dir,
                               Profile* profile);
 
-  // Callback after a profile has been created.
-  static void ProcessCommandLineOnProfileCreated(
+  // Callback after a profile has been initialized.
+  static void ProcessCommandLineOnProfileInitialized(
       const base::CommandLine& command_line,
       const base::FilePath& cur_dir,
       StartupProfileMode mode,
-      Profile* profile,
-      Profile::CreateStatus status);
+      Profile* profile);
 
   // Returns true once a profile was activated. Used by the
   // StartupBrowserCreatorTest.LastUsedProfileActivated test.
diff --git a/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc b/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc
index c8f8b45..3997b3d 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc
@@ -18,6 +18,7 @@
 #include "base/threading/thread_restrictions.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/signin/signin_util.h"
 #include "chrome/browser/ui/browser_list.h"
@@ -31,26 +32,6 @@
 
 namespace {
 
-void UnblockOnProfileCreation(Profile::CreateStatus expected_final_status,
-                              base::OnceClosure quit_closure,
-                              Profile* profile,
-                              Profile::CreateStatus status) {
-  // If the status is CREATE_STATUS_CREATED, then the function will be called
-  // again with CREATE_STATUS_INITIALIZED.
-  if (status == Profile::CREATE_STATUS_CREATED)
-    return;
-
-  EXPECT_EQ(expected_final_status, status);
-  std::move(quit_closure).Run();
-}
-
-void UnblockOnProfileInitialized(base::OnceClosure quit_closure,
-                                 Profile* profile,
-                                 Profile::CreateStatus status) {
-  UnblockOnProfileCreation(Profile::CREATE_STATUS_INITIALIZED,
-                           std::move(quit_closure), profile, status);
-}
-
 void OnCloseAllBrowsersSucceeded(base::OnceClosure quit_closure,
                                  const base::FilePath& path) {
   std::move(quit_closure).Run();
@@ -59,15 +40,8 @@
 void CreateAndSwitchToProfile(const std::string& basepath) {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   ASSERT_TRUE(profile_manager);
-
   base::FilePath path = profile_manager->user_data_dir().AppendASCII(basepath);
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      path, base::BindRepeating(&UnblockOnProfileInitialized,
-                                run_loop.QuitClosure()));
-  // Run the message loop to allow profile creation to take place; the loop is
-  // terminated by UnblockOnProfileCreation when the profile is created.
-  run_loop.Run();
+  profiles::testing::CreateProfileSync(profile_manager, path);
 
   profiles::SwitchToProfile(path, false);
 }
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 97574a8..92e9dc51 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -200,12 +200,14 @@
 #include "content/public/browser/download_manager.h"
 #include "content/public/browser/keyboard_event_processing_result.h"
 #include "content/public/browser/notification_service.h"
+#include "content/public/browser/permission_controller.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_switches.h"
 #include "extensions/common/command.h"
+#include "third_party/blink/public/common/permissions/permission_utils.h"
 #include "ui/accessibility/accessibility_features.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_mode_observer.h"
@@ -1598,33 +1600,51 @@
     if (translate_bubble_controller)
       translate_bubble_controller->CloseBubble();
   }
+
+  // This is only done once when the app is first opened so that there is only
+  // one subscriber per web contents.
+  if (AppUsesBorderlessMode() && !old_contents) {
+    SetWindowPlacementPermissionSubscriptionForBorderlessMode(new_contents);
+  }
 }
 
 void BrowserView::OnTabDetached(content::WebContents* contents,
                                 bool was_active) {
-  if (was_active) {
-    // We need to reset the current tab contents to null before it gets
-    // freed. This is because the focus manager performs some operations
-    // on the selected WebContents when it is removed.
-    web_contents_close_handler_->ActiveTabChanged();
-    if (loading_bar_)
-      loading_bar_->SetWebContents(nullptr);
-    contents_web_view_->SetWebContents(nullptr);
-    infobar_container_->ChangeInfoBarManager(nullptr);
-    app_banner_manager_observation_.Reset();
-    UpdateDevToolsForContents(nullptr, true);
+  DCHECK(contents);
+  if (!was_active)
+    return;
 
-    // We must ensure that we propagate an update to the side search controller
-    // so that it removes the now detached tab WebContents from the side panel's
-    // WebView. This is necessary as BrowserView::OnActiveTabChanged() will fire
-    // for the destination window before the source window is destroyed during a
-    // tab dragging operation which could lead to the dragged WebContents being
-    // added to the destination panel's WebView before it is removed from the
-    // source panel's WebView. Failing to so so can lead to visual artifacts
-    // (see crbug.com/1306793).
-    if (side_search_controller_)
-      side_search_controller_->UpdateSidePanelForContents(contents, nullptr);
+  // This is to unsubscribe the window-placement permission subscriber.
+  if (window_placement_subscription_id_) {
+    contents->GetPrimaryMainFrame()
+        ->GetBrowserContext()
+        ->GetPermissionController()
+        ->UnsubscribePermissionStatusChange(
+            window_placement_subscription_id_.value());
+    window_placement_subscription_id_.reset();
   }
+
+  // We need to reset the current tab contents to null before it gets
+  // freed. This is because the focus manager performs some operations
+  // on the selected WebContents when it is removed.
+  web_contents_close_handler_->ActiveTabChanged();
+  if (loading_bar_)
+    loading_bar_->SetWebContents(nullptr);
+  contents_web_view_->SetWebContents(nullptr);
+  infobar_container_->ChangeInfoBarManager(nullptr);
+  app_banner_manager_observation_.Reset();
+  UpdateDevToolsForContents(nullptr, true);
+
+  // We must ensure that we propagate an update to the side search controller
+  // so that it removes the now detached tab WebContents from the side panel's
+  // WebView. This is necessary as BrowserView::OnActiveTabChanged() will fire
+  // for the destination window before the source window is destroyed during a
+  // tab dragging operation which could lead to the dragged WebContents being
+  // added to the destination panel's WebView before it is removed from the
+  // source panel's WebView. Failing to so so can lead to visual artifacts
+  // (see crbug.com/1306793).
+  if (side_search_controller_)
+    side_search_controller_->UpdateSidePanelForContents(contents, nullptr);
 }
 
 void BrowserView::OnTabRestored(int command_id) {
@@ -1854,9 +1874,6 @@
 
   if (AppUsesWindowControlsOverlay())
     UpdateWindowControlsOverlayEnabled();
-  if (AppUsesBorderlessMode())
-    UpdateBorderlessModeEnabled();
-
 #endif  // BUILDFLAG(IS_MAC)
 
   GetExclusiveAccessManager()
@@ -2113,6 +2130,27 @@
     borderless_mode_enabled = false;
   }
 
+  if (auto* web_contents = GetActiveWebContents()) {
+    // Last committed URL is null when PWA is opened from chrome://apps.
+    url::Origin url = url::Origin::Create(web_contents->GetVisibleURL());
+
+    blink::mojom::PermissionStatus status =
+        web_contents->GetPrimaryMainFrame()
+            ->GetBrowserContext()
+            ->GetPermissionController()
+            ->GetPermissionResultForOriginWithoutContext(
+                blink::PermissionType::WINDOW_PLACEMENT, url)
+            .status;
+
+    window_placement_permission_granted_ =
+        status == blink::mojom::PermissionStatus::GRANTED;
+  } else {
+    // Defaults to the value of borderless_mode_enabled if web contents are
+    // null. This gets overridden when the app is launched and its web contents
+    // are ready.
+    window_placement_permission_granted_ = borderless_mode_enabled;
+  }
+
   if (borderless_mode_enabled == borderless_mode_enabled_)
     return;
   borderless_mode_enabled_ = borderless_mode_enabled;
@@ -2122,13 +2160,45 @@
   }
 }
 
+void BrowserView::UpdateWindowPlacementPermission(
+    blink::mojom::PermissionStatus status) {
+  window_placement_permission_granted_ =
+      status == blink::mojom::PermissionStatus::GRANTED;
+
+  // The layout has to update to reflect the borderless mode view change.
+  InvalidateLayout();
+}
+
+void BrowserView::SetWindowPlacementPermissionSubscriptionForBorderlessMode(
+    content::WebContents* web_contents) {
+  content::RenderFrameHost* rfh = web_contents->GetPrimaryMainFrame();
+  auto* controller = rfh->GetBrowserContext()->GetPermissionController();
+
+  // Last committed URL is null when PWA is opened from chrome://apps.
+  url::Origin url = url::Origin::Create(web_contents->GetVisibleURL());
+
+  UpdateWindowPlacementPermission(
+      controller
+          ->GetPermissionResultForOriginWithoutContext(
+              blink::PermissionType::WINDOW_PLACEMENT, url)
+          .status);
+
+  // It is safe to bind base::Unretained(this) because WebContents is
+  // owned by BrowserView.
+  window_placement_subscription_id_ =
+      controller->SubscribePermissionStatusChange(
+          blink::PermissionType::WINDOW_PLACEMENT, rfh->GetProcess(), url,
+          base::BindRepeating(&BrowserView::UpdateWindowPlacementPermission,
+                              base::Unretained(this)));
+}
+
 void BrowserView::ToggleWindowControlsOverlayEnabled() {
   browser()->app_controller()->ToggleWindowControlsOverlayEnabled();
   UpdateWindowControlsOverlayEnabled();
 }
 
 bool BrowserView::IsBorderlessModeEnabled() const {
-  return borderless_mode_enabled_;
+  return borderless_mode_enabled_ && window_placement_permission_granted_;
 }
 
 bool BrowserView::AppUsesBorderlessMode() const {
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 2e054124..7f450010 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -44,7 +44,10 @@
 #include "components/infobars/core/infobar_container.h"
 #include "components/user_education/common/feature_promo_handle.h"
 #include "components/webapps/browser/banners/app_banner_manager.h"
+#include "content/public/browser/permission_controller.h"
+#include "content/public/browser/web_contents.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/permissions/permission_utils.h"
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/models/simple_menu_model.h"
@@ -386,6 +389,11 @@
   base::CallbackListSubscription AddOnLinkOpeningFromGestureCallback(
       OnLinkOpeningFromGestureCallback callback);
 
+  // Updates the variable keeping track of the borderless mode visibility, which
+  // together with the `window_placement_permission_granted_` controls whether
+  // the title bar is shown or not.
+  void UpdateBorderlessModeEnabled();
+
   // Returns true when an app's effective display mode is
   // window-controls-overlay.
   bool AppUsesWindowControlsOverlay() const;
@@ -397,14 +405,18 @@
   // of a full titlebar. This is only supported for desktop web apps.
   bool IsWindowControlsOverlayEnabled() const;
 
-  // Returns true when the borderless mode should be displayed instead
-  // of a full titlebar. This is only supported for desktop web apps.
-  bool IsBorderlessModeEnabled() const;
-
   // Enable or disable the window controls overlay and notify the browser frame
   // view of the update.
   void ToggleWindowControlsOverlayEnabled();
 
+  bool borderless_mode_enabled_for_testing() const {
+    return borderless_mode_enabled_;
+  }
+
+  bool window_placement_permission_granted_for_testing() const {
+    return window_placement_permission_granted_;
+  }
+
   // Update the side panel's horizontal alignment when
   // prefs::kSidePanelHorizontalAlignment is changed from the appearance
   // settings page.
@@ -503,6 +515,7 @@
   bool IsToolbarVisible() const override;
   bool IsToolbarShowing() const override;
   bool IsLocationBarVisible() const override;
+  bool IsBorderlessModeEnabled() const override;
 
   SharingDialog* ShowSharingDialog(content::WebContents* contents,
                                    SharingDialogData data) override;
@@ -925,9 +938,15 @@
   // Updates the visibility of the Window Controls Overlay toggle button.
   void UpdateWindowControlsOverlayToggleVisible();
 
-  // Updates the variable keeping track of the borderless mode visibility, which
-  // controls whether the title bar is shown or not.
-  void UpdateBorderlessModeEnabled();
+  // Updates the variable keeping track of the window-placement permission,
+  // which together with borderless_mode_enabled_ controls whether the title bar
+  // is shown or not.
+  void UpdateWindowPlacementPermission(blink::mojom::PermissionStatus status);
+
+  // Sets the callback which is called when the status of the window-placement
+  // permission changes.
+  void SetWindowPlacementPermissionSubscriptionForBorderlessMode(
+      content::WebContents* web_contents);
 
   // The BrowserFrame that hosts this view.
   raw_ptr<BrowserFrame> frame_ = nullptr;
@@ -1176,6 +1195,9 @@
   bool window_controls_overlay_enabled_ = false;
   bool should_show_window_controls_overlay_toggle_ = false;
   bool borderless_mode_enabled_ = false;
+  bool window_placement_permission_granted_ = false;
+  absl::optional<content::PermissionController::SubscriptionId>
+      window_placement_subscription_id_;
 
   mutable base::WeakPtrFactory<BrowserView> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc b/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc
index 0c0fa50..304fba1 100644
--- a/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc
+++ b/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_shortcut_manager_win.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -180,8 +181,8 @@
 
   base::FilePath path_profile2 =
       profile_manager->GenerateNextProfileDirectoryPath();
-  profile_manager->CreateProfileAsync(path_profile2,
-                                      ProfileManager::CreateCallback());
+  profiles::testing::CreateProfileSync(profile_manager, path_profile2);
+
   // The default profile's name should be part of the relaunch name.
   ValidateBrowserWindowProperties(
       browser(), base::UTF8ToUTF16(browser()->profile()->GetProfileUserName()));
diff --git a/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc b/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc
index 1d1984e..4ef7e6a 100644
--- a/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc
@@ -129,14 +129,14 @@
   // Update the text displaying the number of blocked sites.
   blocking_third_party_cookies_subtitle_label_->SetText(num_blocked_sites_text);
 
-  // TODO(crbug.com/1346305): Add checking if FPS is blocked.
   if (base::FeatureList::IsEnabled(
-          privacy_sandbox::kPrivacySandboxFirstPartySetsUI)) {
+          privacy_sandbox::kPrivacySandboxFirstPartySetsUI) &&
+      cookie_info.fps_info) {
     const std::u16string fps_button_title = l10n_util::GetStringFUTF16(
-        IDS_PAGE_FPS_BUTTON_TITLE, cookie_info.fps_info.owner_name);
+        IDS_PAGE_FPS_BUTTON_TITLE, cookie_info.fps_info->owner_name);
 
     const std::u16string fps_button_subtitle = l10n_util::GetStringFUTF16(
-        IDS_PAGE_FPS_BUTTON_SUBTITLE, cookie_info.fps_info.owner_name);
+        IDS_PAGE_FPS_BUTTON_SUBTITLE, cookie_info.fps_info->owner_name);
 
     InitFPSButton();
     fps_button_->SetTitleText(fps_button_title);
diff --git a/chrome/browser/ui/views/profiles/dice_web_signin_interception_bubble_view_browsertest.cc b/chrome/browser/ui/views/profiles/dice_web_signin_interception_bubble_view_browsertest.cc
index 4237b4e..e0dfbac 100644
--- a/chrome/browser/ui/views/profiles/dice_web_signin_interception_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/dice_web_signin_interception_bubble_view_browsertest.cc
@@ -421,15 +421,11 @@
   base::RunLoop run_loop;
   ProfileManager::CreateMultiProfileAsync(
       u"test_profile", /*icon_index=*/0, /*is_hidden=*/false,
-      base::BindLambdaForTesting(
-          [&new_profile, &run_loop](Profile* profile,
-                                    Profile::CreateStatus status) {
-            ASSERT_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL);
-            if (status == Profile::CREATE_STATUS_INITIALIZED) {
-              new_profile = profile;
-              run_loop.Quit();
-            }
-          }));
+      base::BindLambdaForTesting([&new_profile, &run_loop](Profile* profile) {
+        ASSERT_TRUE(profile);
+        new_profile = profile;
+        run_loop.Quit();
+      }));
   run_loop.Run();
   Browser::CreateParams browser_params(new_profile, /*user_gesture=*/true);
   Browser* new_browser = Browser::Create(browser_params);
diff --git a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc
index fbce3c4..b51057528d 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc
@@ -102,9 +102,9 @@
           ->GetProfileAttributesStorage()
           .ChooseNameForNewProfile(icon_index),
       icon_index, /*is_hidden=*/true,
-      base::BindRepeating(&ProfilePickerDiceSignInProvider::OnProfileCreated,
-                          weak_ptr_factory_.GetWeakPtr(),
-                          base::OwnedRef(std::move(switch_finished_callback))));
+      base::BindOnce(&ProfilePickerDiceSignInProvider::OnProfileInitialized,
+                     weak_ptr_factory_.GetWeakPtr(),
+                     std::move(switch_finished_callback)));
 }
 
 void ProfilePickerDiceSignInProvider::ReloadSignInPage() {
@@ -217,19 +217,13 @@
   }
 }
 
-void ProfilePickerDiceSignInProvider::OnProfileCreated(
-    base::OnceCallback<void(bool)>& switch_finished_callback,
-    Profile* new_profile,
-    Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_LOCAL_FAIL) {
+void ProfilePickerDiceSignInProvider::OnProfileInitialized(
+    base::OnceCallback<void(bool)> switch_finished_callback,
+    Profile* new_profile) {
+  if (!new_profile) {
     std::move(switch_finished_callback).Run(false);
     return;
   }
-  if (status != Profile::CREATE_STATUS_INITIALIZED) {
-    return;
-  }
-
-  DCHECK(new_profile);
   DCHECK(!profile_);
   DCHECK(!contents());
   std::move(switch_finished_callback).Run(true);
diff --git a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h
index 53cbc25..408d8a8 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h
+++ b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h
@@ -105,10 +105,9 @@
       const signin::PrimaryAccountChangeEvent& event_details) override;
 
   // Initializes the flow with the newly created profile.
-  void OnProfileCreated(
-      base::OnceCallback<void(bool)>& switch_finished_callback,
-      Profile* new_profile,
-      Profile::CreateStatus status);
+  void OnProfileInitialized(
+      base::OnceCallback<void(bool)> switch_finished_callback,
+      Profile* new_profile);
 
   // Finishes the sign-in (if there is a primary account with refresh tokens).
   void FinishFlowIfSignedIn();
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.cc b/chrome/browser/ui/views/profiles/profile_picker_view.cc
index cde9e573..42bd4a1 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_view.cc
@@ -554,8 +554,8 @@
 
     g_browser_process->profile_manager()->CreateProfileAsync(
         params_.profile_path(),
-        base::BindRepeating(&ProfilePickerView::OnPickerProfileCreated,
-                            weak_ptr_factory_.GetWeakPtr()));
+        base::BindOnce(&ProfilePickerView::OnPickerProfileCreated,
+                       weak_ptr_factory_.GetWeakPtr()));
     return;
   }
 
@@ -565,16 +565,12 @@
   GetWidget()->Activate();
 }
 
-void ProfilePickerView::OnPickerProfileCreated(Profile* picker_profile,
-                                               Profile::CreateStatus status) {
-  TRACE_EVENT2("browser,startup", "ProfilePickerView::OnPickerProfileCreated",
-               "profile_path",
-               (picker_profile ? picker_profile->GetPath().AsUTF8Unsafe() : ""),
-               "status", status);
-  DCHECK_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL);
-  if (status != Profile::CREATE_STATUS_INITIALIZED)
-    return;
-
+void ProfilePickerView::OnPickerProfileCreated(Profile* picker_profile) {
+  TRACE_EVENT1(
+      "browser,startup", "ProfilePickerView::OnPickerProfileCreated",
+      "profile_path",
+      (picker_profile ? picker_profile->GetPath().AsUTF8Unsafe() : ""));
+  DCHECK(picker_profile);
   Init(picker_profile);
 }
 
@@ -663,10 +659,9 @@
             ->GetProfileAttributesStorage()
             .ChooseNameForNewProfile(icon_index),
         icon_index, /*is_hidden=*/true,
-        base::BindRepeating(
-            &ProfilePickerView::OnProfileForDiceForcedSigninCreated,
-            weak_ptr_factory_.GetWeakPtr(),
-            base::OwnedRef(std::move(switch_finished_callback))));
+        base::BindOnce(&ProfilePickerView::OnProfileForDiceForcedSigninCreated,
+                       weak_ptr_factory_.GetWeakPtr(),
+                       std::move(switch_finished_callback)));
     return;
   }
 
@@ -682,21 +677,15 @@
 }
 
 void ProfilePickerView::OnProfileForDiceForcedSigninCreated(
-    base::OnceCallback<void(bool)>& switch_finished_callback,
-    Profile* profile,
-    Profile::CreateStatus status) {
+    base::OnceCallback<void(bool)> switch_finished_callback,
+    Profile* profile) {
   DCHECK(signin_util::IsForceSigninEnabled());
-
-  if (status == Profile::CREATE_STATUS_LOCAL_FAIL) {
+  if (!profile) {
     std::move(switch_finished_callback).Run(false);
     return;
-  } else if (status != Profile::CREATE_STATUS_INITIALIZED) {
-    return;
   }
 
-  DCHECK(profile);
   std::move(switch_finished_callback).Run(true);
-
   ProfilePickerForceSigninDialog::ShowForceSigninDialog(
       web_view_->GetWebContents()->GetBrowserContext(), profile->GetPath());
 }
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.h b/chrome/browser/ui/views/profiles/profile_picker_view.h
index f08f518..e37c3efd 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view.h
+++ b/chrome/browser/ui/views/profiles/profile_picker_view.h
@@ -131,8 +131,7 @@
   void Display();
 
   // On picker profile creation success, it initializes the view.
-  void OnPickerProfileCreated(Profile* picker_profile,
-                              Profile::CreateStatus status);
+  void OnPickerProfileCreated(Profile* picker_profile);
 
   // Creates and shows the dialog.
   void Init(Profile* picker_profile);
@@ -146,9 +145,8 @@
 
   // Handles profile creation when forced sign-in is enabled.
   void OnProfileForDiceForcedSigninCreated(
-      base::OnceCallback<void(bool)>& switch_finished_callback,
-      Profile* new_profile,
-      Profile::CreateStatus status);
+      base::OnceCallback<void(bool)> switch_finished_callback,
+      Profile* new_profile);
 
   // Called when dice sign-in finishes.
   void OnDiceSigninFinished(absl::optional<SkColor> profile_color,
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
index 6bc7ad5..d21292b 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
@@ -567,15 +567,12 @@
     base::FilePath path = profile_manager->GenerateNextProfileDirectoryPath();
     base::RunLoop run_loop;
     profile_manager->CreateProfileAsync(
-        path, base::BindLambdaForTesting(
-                  [&run_loop](Profile* profile, Profile::CreateStatus status) {
-                    if (status == Profile::CREATE_STATUS_INITIALIZED) {
-                      // Avoid showing the welcome page.
-                      profile->GetPrefs()->SetBoolean(
-                          prefs::kHasSeenWelcomePage, true);
-                      run_loop.Quit();
-                    }
-                  }));
+        path, base::BindLambdaForTesting([&run_loop](Profile* profile) {
+          ASSERT_TRUE(profile);
+          // Avoid showing the welcome page.
+          profile->GetPrefs()->SetBoolean(prefs::kHasSeenWelcomePage, true);
+          run_loop.Quit();
+        }));
     run_loop.Run();
     return path;
   }
@@ -1042,13 +1039,11 @@
   Profile* second_profile = nullptr;
   ProfileManager::CreateMultiProfileAsync(
       u"Joe", /*icon_index=*/0, /*is_hidden=*/false,
-      base::BindLambdaForTesting(
-          [&](Profile* profile, Profile::CreateStatus status) {
-            if (status == Profile::CREATE_STATUS_INITIALIZED) {
-              second_profile = profile;
-              run_loop.Quit();
-            }
-          }));
+      base::BindLambdaForTesting([&](Profile* profile) {
+        ASSERT_TRUE(profile);
+        second_profile = profile;
+        run_loop.Quit();
+      }));
   run_loop.Run();
   AccountInfo second_profile_info =
       FinishDiceSignIn(second_profile, "joe.secondary@gmail.com", "Joe");
diff --git a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc
index e687448..d478392 100644
--- a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc
+++ b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h"
 
 #include "chrome/browser/browsing_data/cookies_tree_model.h"
+#include "chrome/browser/content_settings/cookie_settings_factory.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -44,7 +45,7 @@
 
 // Returns the registable domain (eTLD+1) for the |origin|. If it doesn't exist,
 // returns the host.
-std::string GetEtldPlusOne(url::Origin origin) {
+std::string GetEtldPlusOne(const url::Origin& origin) {
   auto eltd_plus_one = net::registry_controlled_domains::GetDomainAndRegistry(
       origin, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
   return eltd_plus_one.empty() ? origin.host() : eltd_plus_one;
@@ -111,6 +112,7 @@
             profile, ServiceAccessType::EXPLICIT_ACCESS),
         HistoryServiceFactory::GetForProfile(
             profile, ServiceAccessType::EXPLICIT_ACCESS));
+    cookie_settings_ = CookieSettingsFactory::GetForProfile(profile);
   }
 
   void OnDialogExplicitlyClosed() {
@@ -139,7 +141,57 @@
 
   FaviconCache* favicon_cache() { return favicon_cache_.get(); }
 
+  void DeleteStoredObjects(const url::Origin& origin) {
+    // TODO(crbug.com/1344787): Record metrics.
+    bool deleted_from_allowed = DeleteMatchingHostNodeFromModel(
+        allowed_cookies_tree_model_.get(), origin);
+    bool deleted_from_blocked = DeleteMatchingHostNodeFromModel(
+        blocked_cookies_tree_model_.get(), origin);
+    DCHECK(deleted_from_allowed || deleted_from_blocked)
+        << "The node with a matching origin should be found and deleted in one "
+           "of "
+           "the models";
+    DCHECK(deleted_from_allowed != deleted_from_blocked)
+        << "The node with a matching origin should be found and deleted in "
+           "ONLY "
+           "ONE of the models";
+  }
+
+  void SetContentException(const url::Origin& origin, ContentSetting setting) {
+    // TODO(crbug.com/1344787): Record metrics.
+    DCHECK(setting == CONTENT_SETTING_ALLOW ||
+           setting == CONTENT_SETTING_BLOCK ||
+           setting == CONTENT_SETTING_SESSION_ONLY);
+    GURL url = origin.GetURL();
+    if (CanCreateContentException(url)) {
+      cookie_settings_->ResetCookieSetting(url);
+      cookie_settings_->SetCookieSetting(url, setting);
+    }
+  }
+
  private:
+  // Deletes the host node matching |origin| and all stored objects for it.
+  bool DeleteMatchingHostNodeFromModel(CookiesTreeModel* model,
+                                       const url::Origin& origin) {
+    CookieTreeNode* node_to_delete = nullptr;
+    for (const auto& node : model->GetRoot()->children()) {
+      if (origin == node->GetDetailedInfo().origin) {
+        DCHECK(!node_to_delete)
+            << "The node with a matching origin should only be found once";
+        node_to_delete = node.get();
+      }
+    }
+    if (node_to_delete) {
+      DCHECK_EQ(node_to_delete->GetDetailedInfo().node_type,
+                CookieTreeNode::DetailedInfo::TYPE_HOST);
+      model->DeleteCookieNode(node_to_delete);
+    }
+
+    return node_to_delete != nullptr;
+  }
+
+  bool CanCreateContentException(GURL url) const { return !url.SchemeIsFile(); }
+
   base::WeakPtr<content::WebContents> web_contents_;
   // Each model represent separate local storage container. The implementation
   // doesn't make a difference between allowed and blocked models and checks
@@ -147,10 +199,12 @@
   std::unique_ptr<CookiesTreeModel> allowed_cookies_tree_model_;
   std::unique_ptr<CookiesTreeModel> blocked_cookies_tree_model_;
   std::unique_ptr<FaviconCache> favicon_cache_;
+  scoped_refptr<content_settings::CookieSettings> cookie_settings_;
 };
 
 }  // namespace
 
+DEFINE_ELEMENT_IDENTIFIER_VALUE(kPageSpecificSiteDataDialogRowForTesting);
 // static
 views::Widget* ShowPageSpecificSiteDataDialog(
     content::WebContents* web_contents) {
@@ -174,9 +228,19 @@
     for (const auto& origin : section.origins) {
       // TODO(crbug.com/1344787): Get the actual state based on the cookie
       // setting.
+      // It is safe to use base::Unretained for the delegate here because both
+      // the row view and the delegate are owned by the dialog and will be
+      // destroyed when the dialog is destroyed.
       builder.AddCustomField(
           CreateCustomField(std::make_unique<SiteDataRowView>(
-              origin, CONTENT_SETTING_BLOCK, delegate->favicon_cache())));
+              origin, CONTENT_SETTING_BLOCK, delegate->favicon_cache(),
+              base::BindRepeating(
+                  &PageSpecificSiteDataDialogModelDelegate::DeleteStoredObjects,
+                  base::Unretained(delegate)),
+              base::BindRepeating(
+                  &PageSpecificSiteDataDialogModelDelegate::SetContentException,
+                  base::Unretained(delegate)))),
+          kPageSpecificSiteDataDialogRowForTesting);
     }
   }
   // TODO(crbug.com/1344787): Build the rest of the dialog. Add action handling.
diff --git a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h
index 9137bcd6..3127b9b 100644
--- a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h
+++ b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_SITE_DATA_PAGE_SPECIFIC_SITE_DATA_DIALOG_H_
 #define CHROME_BROWSER_UI_VIEWS_SITE_DATA_PAGE_SPECIFIC_SITE_DATA_DIALOG_H_
 
+#include "ui/base/interaction/element_identifier.h"
+
 namespace views {
 class Widget;
 }  // namespace views
@@ -13,6 +15,8 @@
 class WebContents;
 }  // namespace content
 
+DECLARE_ELEMENT_IDENTIFIER_VALUE(kPageSpecificSiteDataDialogRowForTesting);
+
 views::Widget* ShowPageSpecificSiteDataDialog(
     content::WebContents* web_contents);
 
diff --git a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc
index 364e6ab..bf5ae5b 100644
--- a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc
@@ -7,12 +7,18 @@
 #include "base/memory/raw_ptr.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h"
 #include "chrome/browser/ui/views/site_data/page_specific_site_data_dialog_controller.h"
+#include "chrome/browser/ui/views/site_data/site_data_row_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/page_info/core/features.h"
 #include "content/public/test/browser_test.h"
+#include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "ui/base/interaction/element_identifier.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/interaction/element_tracker_views.h"
 #include "ui/views/test/widget_test.h"
 #include "ui/views/widget/any_widget_observer.h"
 
@@ -34,6 +40,7 @@
 
   // InProcessBrowserTest:
   void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
     ASSERT_TRUE(embedded_test_server()->Start());
 
     // Load a page with cookies.
@@ -52,6 +59,39 @@
     return waiter.WaitIfNeededAndGet();
   }
 
+  views::View* GetViewByIdentifier(ui::ElementContext context,
+                                   ui::ElementIdentifier id) {
+    auto* element_tracker = ui::ElementTracker::GetElementTracker();
+    auto* tracked_element =
+        element_tracker->GetFirstMatchingElement(id, context);
+    auto* view = tracked_element->AsA<views::TrackedElementViews>()->view();
+    return view;
+  }
+
+  void ClickDeleteMenuItem(SiteDataRowView* row_view) {
+    // TODO(crbug.com/1344787): Get the menu item from the the menu runner and
+    // click on it.
+    row_view->OnDeleteMenuItemClicked(/*event_flags*/ 0);
+  }
+
+  void ClickBlockMenuItem(SiteDataRowView* row_view) {
+    // TODO(crbug.com/1344787): Get the menu item from the the menu runner and
+    // click on it.
+    row_view->OnBlockMenuItemClicked(/*event_flags*/ 0);
+  }
+
+  void ClickAllowMenuItem(SiteDataRowView* row_view) {
+    // TODO(crbug.com/1344787): Get the menu item from the the menu runner and
+    // click on it.
+    row_view->OnAllowMenuItemClicked(/*event_flags*/ 0);
+  }
+
+  void ClickClearOnExitMenuItem(SiteDataRowView* row_view) {
+    // TODO(crbug.com/1344787): Get the menu item from the the menu runner and
+    // click on it.
+    row_view->OnClearOnExitMenuItemClicked(/*event_flags*/ 0);
+  }
+
  private:
   base::test::ScopedFeatureList feature_list_;
 };
@@ -63,6 +103,7 @@
 IN_PROC_BROWSER_TEST_P(PageSpecificSiteDataDialogBrowserTest, CloseDialog) {
   // Test closing dialog.
   auto* dialog = OpenDialog();
+  EXPECT_FALSE(dialog->IsClosed());
 
   dialog->Close();
   EXPECT_TRUE(dialog->IsClosed());
@@ -120,6 +161,63 @@
 // TODO(crbug.com/1344787): Add testing dialog functionality such as showing
 // infobar after changes, changing content settings, deleting data.
 
+IN_PROC_BROWSER_TEST_P(PageSpecificSiteDataDialogBrowserTest, DeleteMenuItem) {
+  if (!GetParam()) {
+    return;
+  }
+
+  auto* dialog = OpenDialog();
+  ui::ElementContext context =
+      views::ElementTrackerViews::GetContextForWidget(dialog);
+
+  auto* view =
+      GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
+  auto* row_view = static_cast<SiteDataRowView*>(view);
+  EXPECT_TRUE(row_view->GetVisible());
+  ClickDeleteMenuItem(row_view);
+  EXPECT_FALSE(row_view->GetVisible());
+  // TODO(crbug.com/1344787): Check the histograms value.
+}
+
+IN_PROC_BROWSER_TEST_P(PageSpecificSiteDataDialogBrowserTest, AllowMenuItem) {
+  if (!GetParam()) {
+    return;
+  }
+
+  auto* dialog = OpenDialog();
+  ui::ElementContext context =
+      views::ElementTrackerViews::GetContextForWidget(dialog);
+
+  auto* view =
+      GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
+  auto* row_view = static_cast<SiteDataRowView*>(view);
+  // TODO(crbug.com/1344787): Check the initial state.
+  ClickAllowMenuItem(row_view);
+  EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Allowed");
+  // TODO(crbug.com/1344787): Check the histograms value.
+}
+
+IN_PROC_BROWSER_TEST_P(PageSpecificSiteDataDialogBrowserTest,
+                       ClearOnExitMenuItem) {
+  if (!GetParam()) {
+    return;
+  }
+
+  auto* dialog = OpenDialog();
+  ui::ElementContext context =
+      views::ElementTrackerViews::GetContextForWidget(dialog);
+
+  auto* view =
+      GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
+  auto* row_view = static_cast<SiteDataRowView*>(view);
+  // TODO(crbug.com/1344787): Check the initial state.
+  ClickClearOnExitMenuItem(row_view);
+  EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Clear on close");
+  // TODO(crbug.com/1344787): Check the histograms value.
+}
+
+// TODO(crbug.com/1344787): Add test for blocking a site.
+
 // Run tests with kPageSpecificSiteDataDialog flag enabled and disabled.
 INSTANTIATE_TEST_SUITE_P(All,
                          PageSpecificSiteDataDialogBrowserTest,
diff --git a/chrome/browser/ui/views/site_data/site_data_row_view.cc b/chrome/browser/ui/views/site_data/site_data_row_view.cc
index 77256642..f131192a 100644
--- a/chrome/browser/ui/views/site_data/site_data_row_view.cc
+++ b/chrome/browser/ui/views/site_data/site_data_row_view.cc
@@ -7,6 +7,7 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/site_data/page_specific_site_data_dialog.h"
 #include "components/omnibox/browser/favicon_cache.h"
 #include "ui/base/models/dialog_model.h"
 #include "ui/base/models/dialog_model_menu_model_adapter.h"
@@ -66,10 +67,17 @@
 
 }  // namespace
 
-SiteDataRowView::SiteDataRowView(const url::Origin& origin,
-                                 ContentSetting setting,
-                                 FaviconCache* favicon_cache)
-    : setting_(setting) {
+SiteDataRowView::SiteDataRowView(
+    const url::Origin& origin,
+    ContentSetting setting,
+    FaviconCache* favicon_cache,
+    base::RepeatingCallback<void(const url::Origin&)> delete_callback,
+    base::RepeatingCallback<void(const url::Origin&, ContentSetting)>
+        create_exception_callback)
+    : origin_(origin),
+      setting_(setting),
+      delete_callback_(std::move(delete_callback)),
+      create_exception_callback_(std::move(create_exception_callback)) {
   const int icon_size = 16;
   views::TableLayout* layout = SetLayoutManager(SetupTableLayout());
   favicon_image_ = AddChildView(std::make_unique<NonAccessibleImageView>());
@@ -106,6 +114,8 @@
   state_label_->SetVisible(setting_ != CONTENT_SETTING_ALLOW);
 }
 
+SiteDataRowView::~SiteDataRowView() = default;
+
 void SiteDataRowView::SetFaviconImage(const gfx::Image& image) {
   favicon_image_->SetImage(ui::ImageModel::FromImage(image));
 }
@@ -154,6 +164,7 @@
   // easier. All the related items to the dialog have the same lifecycle and are
   // created when dialog is shown and are deleted when the dialog is destroyed.
   SetVisible(false);
+  delete_callback_.Run(origin_);
 }
 
 void SiteDataRowView::OnBlockMenuItemClicked(int event_flags) {
@@ -170,7 +181,7 @@
 
 void SiteDataRowView::SetContentSettingException(ContentSetting setting) {
   DCHECK_NE(setting_, setting);
-  // TODO(crbug.com/1344787): Create the exception.
+  create_exception_callback_.Run(origin_, setting);
 
   setting_ = setting;
   state_label_->SetVisible(true);
diff --git a/chrome/browser/ui/views/site_data/site_data_row_view.h b/chrome/browser/ui/views/site_data/site_data_row_view.h
index 3f0b90d..f5afceaf 100644
--- a/chrome/browser/ui/views/site_data/site_data_row_view.h
+++ b/chrome/browser/ui/views/site_data/site_data_row_view.h
@@ -7,6 +7,7 @@
 
 #include "components/content_settings/core/common/content_settings.h"
 #include "ui/views/view.h"
+#include "url/origin.h"
 
 class FaviconCache;
 
@@ -30,11 +31,21 @@
 // cookies content setting for the site or delete the site data.
 class SiteDataRowView : public views::View {
  public:
-  explicit SiteDataRowView(const url::Origin& origin,
-                           ContentSetting setting,
-                           FaviconCache* favicon_cache);
+  SiteDataRowView(
+      const url::Origin& origin,
+      ContentSetting setting,
+      FaviconCache* favicon_cache,
+      base::RepeatingCallback<void(const url::Origin&)> delete_callback,
+      base::RepeatingCallback<void(const url::Origin&, ContentSetting)>
+          create_exception_callback);
+
+  ~SiteDataRowView() override;
+
+  views::Label* state_label_for_testing() { return state_label_; }
 
  private:
+  friend class PageSpecificSiteDataDialogBrowserTest;
+
   void SetFaviconImage(const gfx::Image& image);
 
   void OnMenuIconClicked();
@@ -49,7 +60,11 @@
   // content menu items. After an update the state label is always visible.
   void SetContentSettingException(ContentSetting setting);
 
+  url::Origin origin_;
   ContentSetting setting_;
+  base::RepeatingCallback<void(const url::Origin&)> delete_callback_;
+  base::RepeatingCallback<void(const url::Origin&, ContentSetting)>
+      create_exception_callback_;
 
   raw_ptr<views::Label> state_label_ = nullptr;
   raw_ptr<views::ImageView> favicon_image_ = nullptr;
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc
index 4d710f2..f72c429 100644
--- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc
+++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc
@@ -41,6 +41,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/infobars/content/content_infobar_manager.h"
+#include "components/permissions/permission_request_manager.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/content_features.h"
@@ -458,27 +459,77 @@
                   .ExtractString(),
               "Borderless");
 
+    EXPECT_EQ(uses_borderless,
+              helper()->browser_view()->AppUsesBorderlessMode());
     return app_id;
   }
 
+  void GrantWindowPlacementPermission() {
+    auto* web_contents = helper()->browser_view()->GetActiveWebContents();
+
+    std::string permission_auto_approve_script = R"(
+      const draggable = document.getElementById('draggable');
+      draggable.setAttribute('allow', 'window-placement');
+    )";
+    EXPECT_TRUE(ExecJs(web_contents, permission_auto_approve_script,
+                       content::EXECUTE_SCRIPT_NO_USER_GESTURE));
+
+    permissions::PermissionRequestManager::FromWebContents(web_contents)
+        ->set_auto_response_for_test(
+            permissions::PermissionRequestManager::ACCEPT_ALL);
+
+    EXPECT_TRUE(ExecJs(web_contents, "window.getScreenDetails();"));
+
+    std::string permission_query_script = R"(
+      navigator.permissions.query({
+        name: 'window-placement'
+      }).then(res => res.state)
+    )";
+    EXPECT_EQ("granted", EvalJs(web_contents, permission_query_script));
+
+    // The permission subscriber doesn't get properly triggered in these tests
+    // so calling this function directly to update the borderless mode related
+    // variables.
+    helper()->browser_view()->UpdateBorderlessModeEnabled();
+  }
+
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
   base::ScopedTempDir temp_dir_;
 };
 
 IN_PROC_BROWSER_TEST_F(WebAppFrameToolbarBrowserTest_Borderless,
-                       AppUsesBorderlessMode) {
+                       AppUsesBorderlessModeAndHasWindowPlacementPermission) {
   InstallAndLaunchWebApp(true);
-  ASSERT_TRUE(helper()->browser_view()->AppUsesBorderlessMode());
+  GrantWindowPlacementPermission();
+
+  ASSERT_TRUE(helper()->browser_view()->borderless_mode_enabled_for_testing());
+  ASSERT_TRUE(helper()
+                  ->browser_view()
+                  ->window_placement_permission_granted_for_testing());
   ASSERT_TRUE(helper()->browser_view()->IsBorderlessModeEnabled());
   ASSERT_FALSE(
       helper()->web_app_frame_toolbar()->GetAppMenuButton()->GetVisible());
 }
 
+IN_PROC_BROWSER_TEST_F(
+    WebAppFrameToolbarBrowserTest_Borderless,
+    AppUsesBorderlessModeAndDoesNotHaveWindowPlacementPermission) {
+  InstallAndLaunchWebApp(true);
+  ASSERT_TRUE(helper()->browser_view()->borderless_mode_enabled_for_testing());
+  ASSERT_FALSE(helper()
+                   ->browser_view()
+                   ->window_placement_permission_granted_for_testing());
+  ASSERT_FALSE(helper()->browser_view()->IsBorderlessModeEnabled());
+}
+
 IN_PROC_BROWSER_TEST_F(WebAppFrameToolbarBrowserTest_Borderless,
                        AppDoesntUseBorderlessMode) {
   InstallAndLaunchWebApp(false);
-  ASSERT_FALSE(helper()->browser_view()->AppUsesBorderlessMode());
+  ASSERT_FALSE(helper()->browser_view()->borderless_mode_enabled_for_testing());
+  ASSERT_FALSE(helper()
+                   ->browser_view()
+                   ->window_placement_permission_granted_for_testing());
   ASSERT_FALSE(helper()->browser_view()->IsBorderlessModeEnabled());
   ASSERT_TRUE(
       helper()->web_app_frame_toolbar()->GetAppMenuButton()->GetVisible());
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.cc
index 2c1ec7e..53f206a4 100644
--- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.cc
+++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.cc
@@ -299,15 +299,15 @@
 }
 
 void WebAppFrameToolbarView::UpdateBorderlessModeEnabled() {
-  bool is_borderless_mode_enabled_ = browser_view_->IsBorderlessModeEnabled();
+  bool is_borderless_mode_enabled = browser_view_->IsBorderlessModeEnabled();
 
   // The toolbar and menu button are hidden and not set to nullptrs,
   // because there are many features that depend on the toolbar and would not
   // work without it. For example all the shortcut commands (e.g. Ctrl+F, zoom)
   // rely on the menu button and toolbar so when these are hidden, the shortcuts
   // will still work.
-  SetVisible(!is_borderless_mode_enabled_);
-  GetAppMenuButton()->SetVisible(!is_borderless_mode_enabled_);
+  SetVisible(!is_borderless_mode_enabled);
+  GetAppMenuButton()->SetVisible(!is_borderless_mode_enabled);
 }
 
 void WebAppFrameToolbarView::SetWindowControlsOverlayToggleVisible(
diff --git a/chrome/browser/ui/web_applications/sub_apps_service_impl.cc b/chrome/browser/ui/web_applications/sub_apps_service_impl.cc
index 3c75afd..08db3279 100644
--- a/chrome/browser/ui/web_applications/sub_apps_service_impl.cc
+++ b/chrome/browser/ui/web_applications/sub_apps_service_impl.cc
@@ -102,9 +102,11 @@
     content::RenderFrameHost* render_frame_host,
     mojo::PendingReceiver<blink::mojom::SubAppsService> receiver) {
   CHECK(render_frame_host);
-  // This class is created only on the primary main frame (this excludes
-  // fenced frames and prerendered pages).
-  DCHECK(render_frame_host->IsInPrimaryMainFrame());
+
+  // This class is created only on the primary main frame.
+  if (!render_frame_host->IsInPrimaryMainFrame()) {
+    return;
+  }
 
   // Bail if Web Apps aren't enabled on current profile.
   if (!AreWebAppsEnabled(Profile::FromBrowserContext(
diff --git a/chrome/browser/ui/web_applications/web_app_profile_deletion_browsertest.cc b/chrome/browser/ui/web_applications/web_app_profile_deletion_browsertest.cc
index e60358b..c139ddb3 100644
--- a/chrome/browser/ui/web_applications/web_app_profile_deletion_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_profile_deletion_browsertest.cc
@@ -9,6 +9,7 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -18,18 +19,6 @@
 #include "url/gurl.h"
 
 namespace web_app {
-namespace {
-
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
-void OnUnblockOnProfileCreation(base::RunLoop* run_loop,
-                                Profile* profile,
-                                Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-#endif
-
-}  // namespace
 
 class WebAppProfileDeletionBrowserTest : public WebAppControllerBrowserTest {
  public:
@@ -78,13 +67,7 @@
   // another profile first, we ensure this doesn't happen.
   base::FilePath path_profile2 =
       profile_manager->GenerateNextProfileDirectoryPath();
-  base::RunLoop create_run_loop;
-  profile_manager->CreateProfileAsync(
-      path_profile2,
-      base::BindRepeating(&OnUnblockOnProfileCreation, &create_run_loop));
-  // Run the message loop to allow profile creation to take place; the loop is
-  // terminated by OnUnblockOnProfileCreation when the profile is created.
-  create_run_loop.Run();
+  profiles::testing::CreateProfileSync(profile_manager, path_profile2);
 #endif
 
   ScheduleCurrentProfileForDeletion();
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc
index b697c60..72ac4757 100644
--- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc
+++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc
@@ -138,29 +138,28 @@
   g_dialog = this;
   g_browser_process->profile_manager()->CreateProfileAsync(
       ProfileHelper::GetLockScreenProfileDir(),
-      base::BindRepeating(&LockScreenStartReauthDialog::OnProfileCreated,
-                          weak_factory_.GetWeakPtr()));
+      base::BindOnce(&LockScreenStartReauthDialog::OnProfileInitialized,
+                     weak_factory_.GetWeakPtr()));
 }
 
-void LockScreenStartReauthDialog::OnProfileCreated(
-    Profile* profile,
-    Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED) {
-    profile_ = profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
-    g_dialog->ShowSystemDialogForBrowserContext(profile_);
-    const NetworkStateInformer::State state = network_state_informer_->state();
-    // Show network or captive portal screen if needed.
-    // TODO(crbug.com/1237407): Handle other states in NetworkStateInformer
-    // properly.
-    if (state == NetworkStateInformer::OFFLINE) {
-      ShowLockScreenNetworkDialog();
-    } else if (state == NetworkStateInformer::CAPTIVE_PORTAL) {
-      ShowLockScreenCaptivePortalDialog();
-    }
-  } else if (status != Profile::CREATE_STATUS_CREATED) {
-    // TODO(mohammedabdon): Create some generic way to show an error on the lock
-    // screen.
+void LockScreenStartReauthDialog::OnProfileInitialized(Profile* profile) {
+  if (!profile) {
+    // TODO(mohammedabdon): Create some generic way to show an error on
+    // the lock screen.
     LOG(ERROR) << "Failed to load lockscreen profile";
+    return;
+  }
+
+  profile_ = profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
+  g_dialog->ShowSystemDialogForBrowserContext(profile_);
+  const NetworkStateInformer::State state = network_state_informer_->state();
+  // Show network or captive portal screen if needed.
+  // TODO(crbug.com/1237407): Handle other states in NetworkStateInformer
+  // properly.
+  if (state == NetworkStateInformer::OFFLINE) {
+    ShowLockScreenNetworkDialog();
+  } else if (state == NetworkStateInformer::CAPTIVE_PORTAL) {
+    ShowLockScreenCaptivePortalDialog();
   }
 }
 
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h
index d6e0d72..30ef3c5 100644
--- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h
+++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h
@@ -81,7 +81,7 @@
  private:
   class ModalDialogManagerCleanup;
 
-  void OnProfileCreated(Profile* profile, Profile::CreateStatus status);
+  void OnProfileInitialized(Profile* profile);
   void DeleteLockScreenNetworkDialog();
 
   // BaseLockDialog:
diff --git a/chrome/browser/ui/webui/profile_helper.cc b/chrome/browser/ui/webui/profile_helper.cc
index d95e532..f78e8b5 100644
--- a/chrome/browser/ui/webui/profile_helper.cc
+++ b/chrome/browser/ui/webui/profile_helper.cc
@@ -33,7 +33,7 @@
 
     g_browser_process->profile_manager()->CreateProfileAsync(
         ProfileManager::GetSystemProfilePath(),
-        ProfileManager::CreateCallback());
+        base::OnceCallback<void(Profile*)>());
     return;
   }
 
diff --git a/chrome/browser/ui/webui/profile_helper_browsertest.cc b/chrome/browser/ui/webui/profile_helper_browsertest.cc
index 59f3bc3..1e80e0e3 100644
--- a/chrome/browser/ui/webui/profile_helper_browsertest.cc
+++ b/chrome/browser/ui/webui/profile_helper_browsertest.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
@@ -32,23 +33,10 @@
 
 namespace {
 
-// An observer that returns back to test code after a new profile is
-// initialized.
-void UnblockOnProfileCreation(base::RunLoop* run_loop,
-                              Profile* profile,
-                              Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-
 Profile* CreateProfile() {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath new_path = profile_manager->GenerateNextProfileDirectoryPath();
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      new_path, base::BindRepeating(&UnblockOnProfileCreation, &run_loop));
-  run_loop.Run();
-  return profile_manager->GetProfileByPath(new_path);
+  return profiles::testing::CreateProfileSync(profile_manager, new_path);
 }
 
 // An observer returns back to test code after brower window associated with
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 4805a8f..82d5506 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2474,6 +2474,10 @@
      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_SIGN_OUT},
     {"siteSettingsClearDisplayedStorageSignOut",
      IDS_SETTINGS_SITE_SETTINGS_CLEAR_DISPLAYED_STORAGE_SIGN_OUT},
+    {"firstPartySetsShowRelatedSitesButton",
+     IDS_SETTINGS_SITE_SETTINGS_FIRST_PARTY_SETS_SHOW_RELATED_SITES_BUTTON},
+    {"firstPartySetsSiteClearStorageButton",
+     IDS_SETTINGS_SITE_SETTINGS_FIRST_PARTY_SETS_SITE_CLEAR_STORAGE_BUTTON},
     {"siteSettingsOriginDeleteConfirmation",
      IDS_SETTINGS_SITE_SETTINGS_ORIGIN_DELETE_CONFIRMATION},
     {"siteSettingsOriginDeleteConfirmationInstalled",
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
index 8237994..1ceee3f 100644
--- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
+++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
@@ -103,7 +103,9 @@
     return;
 
   // GAIA image is loaded asynchronously.
-  FireWebUIListener("available-icons-changed", GetAvailableIcons());
+  FireWebUIListener(
+      "available-icons-changed",
+      profiles::GetIconsAndLabelsForProfileAvatarSelector(profile_->GetPath()));
 }
 
 void ManageProfileHandler::OnProfileAvatarChanged(
@@ -112,7 +114,9 @@
     return;
 
   // This is necessary to send the potentially updated GAIA photo.
-  FireWebUIListener("available-icons-changed", GetAvailableIcons());
+  FireWebUIListener(
+      "available-icons-changed",
+      profiles::GetIconsAndLabelsForProfileAvatarSelector(profile_->GetPath()));
 }
 
 void ManageProfileHandler::OnProfileThemeColorsChanged(
@@ -130,52 +134,9 @@
   CHECK_EQ(1U, args.size());
   const base::Value& callback_id = args[0];
 
-  ResolveJavascriptCallback(callback_id, GetAvailableIcons());
-}
-
-base::Value::List ManageProfileHandler::GetAvailableIcons() {
-  ProfileAttributesEntry* entry =
-      g_browser_process->profile_manager()
-          ->GetProfileAttributesStorage()
-          .GetProfileAttributesWithPath(profile_->GetPath());
-  // TODO(msalama): Convert to a DCHECK.
-  if (!entry) {
-    LOG(ERROR) << "No profile attributes entry found for profile with path: "
-               << profile_->GetPath();
-    return base::Value::List();
-  }
-
-  bool using_gaia = entry->IsUsingGAIAPicture();
-  size_t selected_avatar_idx =
-      using_gaia ? SIZE_MAX : entry->GetAvatarIconIndex();
-
-  // Obtain a list of the modern avatar icons.
-  base::Value::List avatars(
-      profiles::GetCustomProfileAvatarIconsAndLabels(selected_avatar_idx));
-
-  if (entry->GetSigninState() == SigninState::kNotSignedIn) {
-    ProfileThemeColors colors = entry->GetProfileThemeColors();
-    auto generic_avatar_info = profiles::GetDefaultProfileAvatarIconAndLabel(
-        colors.default_avatar_fill_color, colors.default_avatar_stroke_color,
-        selected_avatar_idx == profiles::GetPlaceholderAvatarIndex());
-    avatars.Insert(avatars.begin(),
-                   base::Value(std::move(generic_avatar_info)));
-    return avatars;
-  }
-
-  // Add the GAIA picture to the beginning of the list if it is available.
-  const gfx::Image* icon = entry->GetGAIAPicture();
-  if (icon) {
-    gfx::Image avatar_icon = profiles::GetAvatarIconForWebUI(*icon);
-    auto gaia_picture_info = profiles::GetAvatarIconAndLabelDict(
-        /*url=*/webui::GetBitmapDataUrl(avatar_icon.AsBitmap()),
-        /*label=*/
-        l10n_util::GetStringUTF16(IDS_SETTINGS_CHANGE_PICTURE_PROFILE_PHOTO),
-        /*index=*/0, using_gaia, /*is_gaia_avatar=*/true);
-    avatars.Insert(avatars.begin(), base::Value(std::move(gaia_picture_info)));
-  }
-
-  return avatars;
+  ResolveJavascriptCallback(
+      callback_id,
+      profiles::GetIconsAndLabelsForProfileAvatarSelector(profile_->GetPath()));
 }
 
 void ManageProfileHandler::HandleSetProfileIconToGaiaAvatar(
@@ -204,18 +165,8 @@
   CHECK_EQ(1u, args.size());
   CHECK(args[0].is_int());
 
-  size_t new_icon_index = args[0].GetInt();
-  CHECK(profiles::IsDefaultAvatarIconIndex(new_icon_index));
-
-  PrefService* pref_service = profile_->GetPrefs();
-  pref_service->SetInteger(prefs::kProfileAvatarIndex, new_icon_index);
-  pref_service->SetBoolean(
-      prefs::kProfileUsingDefaultAvatar,
-      new_icon_index == profiles::GetPlaceholderAvatarIndex());
-  pref_service->SetBoolean(prefs::kProfileUsingGAIAAvatar, false);
-
-  ProfileMetrics::LogProfileAvatarSelection(new_icon_index);
-  ProfileMetrics::LogProfileUpdate(profile_->GetPath());
+  size_t avatar_icon_index = args[0].GetInt();
+  profiles::SetDefaultProfileAvatarIndex(profile_, avatar_icon_index);
 }
 
 void ManageProfileHandler::HandleSetProfileName(const base::Value::List& args) {
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h
index d330a7ba..ba1f30c 100644
--- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h
+++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h
@@ -61,9 +61,6 @@
   // Sends the array of default profile icon URLs and profile names to WebUI.
   void HandleGetAvailableIcons(const base::Value::List& args);
 
-  // Get all the available profile icons to choose from.
-  base::Value::List GetAvailableIcons();
-
   // Callback for the "setProfileIconToGaiaAvatar" message.
   void HandleSetProfileIconToGaiaAvatar(const base::Value::List& args);
 
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_chromeos_browsertest.cc b/chrome/browser/ui/webui/signin/inline_login_handler_chromeos_browsertest.cc
index abe7b0fc..ac7afd39 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_chromeos_browsertest.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_chromeos_browsertest.cc
@@ -47,8 +47,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
-
 namespace chromeos {
 
 namespace {
diff --git a/chrome/browser/ui/webui/signin/profile_customization_handler.cc b/chrome/browser/ui/webui/signin/profile_customization_handler.cc
index 00e5937..9f5b3ed3 100644
--- a/chrome/browser/ui/webui/signin/profile_customization_handler.cc
+++ b/chrome/browser/ui/webui/signin/profile_customization_handler.cc
@@ -33,23 +33,31 @@
 }
 
 ProfileCustomizationHandler::ProfileCustomizationHandler(
+    Profile* profile,
     base::OnceCallback<void(CustomizationResult)> completion_callback)
-    : completion_callback_(std::move(completion_callback)) {}
+    : profile_(profile), completion_callback_(std::move(completion_callback)) {}
 
 ProfileCustomizationHandler::~ProfileCustomizationHandler() = default;
 
 void ProfileCustomizationHandler::RegisterMessages() {
-  profile_path_ = Profile::FromWebUI(web_ui())->GetPath();
   web_ui()->RegisterMessageCallback(
       "initialized",
       base::BindRepeating(&ProfileCustomizationHandler::HandleInitialized,
                           base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
+      "getAvailableIcons",
+      base::BindRepeating(&ProfileCustomizationHandler::HandleGetAvailableIcons,
+                          base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
       "done", base::BindRepeating(&ProfileCustomizationHandler::HandleDone,
                                   base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
       "skip", base::BindRepeating(&ProfileCustomizationHandler::HandleSkip,
                                   base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "setAvatarIcon",
+      base::BindRepeating(&ProfileCustomizationHandler::HandleSetAvatarIcon,
+                          base::Unretained(this)));
 }
 
 void ProfileCustomizationHandler::OnJavascriptAllowed() {
@@ -64,6 +72,9 @@
 void ProfileCustomizationHandler::OnProfileAvatarChanged(
     const base::FilePath& profile_path) {
   UpdateProfileInfo(profile_path);
+  FireWebUIListener(
+      "on-available-icons-changed",
+      profiles::GetIconsAndLabelsForProfileAvatarSelector(profile_->GetPath()));
 }
 
 void ProfileCustomizationHandler::OnProfileHighResAvatarLoaded(
@@ -74,6 +85,9 @@
 void ProfileCustomizationHandler::OnProfileThemeColorsChanged(
     const base::FilePath& profile_path) {
   UpdateProfileInfo(profile_path);
+  FireWebUIListener(
+      "on-available-icons-changed",
+      profiles::GetIconsAndLabelsForProfileAvatarSelector(profile_->GetPath()));
 }
 
 void ProfileCustomizationHandler::OnProfileHostedDomainChanged(
@@ -95,6 +109,16 @@
   ResolveJavascriptCallback(callback_id, GetProfileInfoValue());
 }
 
+void ProfileCustomizationHandler::HandleGetAvailableIcons(
+    const base::Value::List& args) {
+  AllowJavascript();
+  CHECK_EQ(1U, args.size());
+  const base::Value& callback_id = args[0];
+  ResolveJavascriptCallback(
+      callback_id,
+      profiles::GetIconsAndLabelsForProfileAvatarSelector(profile_->GetPath()));
+}
+
 void ProfileCustomizationHandler::HandleDone(const base::Value::List& args) {
   CHECK_EQ(1u, args.size());
   std::u16string profile_name = base::UTF8ToUTF16(args[0].GetString());
@@ -115,10 +139,18 @@
     std::move(completion_callback_).Run(CustomizationResult::kSkip);
 }
 
+void ProfileCustomizationHandler::HandleSetAvatarIcon(
+    const base::Value::List& args) {
+  CHECK_EQ(1u, args.size());
+  size_t avatar_icon_index = args[0].GetInt();
+
+  profiles::SetDefaultProfileAvatarIndex(profile_, avatar_icon_index);
+}
+
 void ProfileCustomizationHandler::UpdateProfileInfo(
     const base::FilePath& profile_path) {
   DCHECK(IsJavascriptAllowed());
-  if (profile_path != profile_path_)
+  if (profile_path != profile_->GetPath())
     return;
   FireWebUIListener("on-profile-info-changed", GetProfileInfoValue());
 }
@@ -148,7 +180,7 @@
   ProfileAttributesEntry* entry =
       g_browser_process->profile_manager()
           ->GetProfileAttributesStorage()
-          .GetProfileAttributesWithPath(profile_path_);
+          .GetProfileAttributesWithPath(profile_->GetPath());
   DCHECK(entry);
   return entry;
 }
diff --git a/chrome/browser/ui/webui/signin/profile_customization_handler.h b/chrome/browser/ui/webui/signin/profile_customization_handler.h
index 4af8192..c5cdbbb 100644
--- a/chrome/browser/ui/webui/signin/profile_customization_handler.h
+++ b/chrome/browser/ui/webui/signin/profile_customization_handler.h
@@ -9,9 +9,11 @@
 
 #include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 
+class Profile;
 class ProfileAttributesEntry;
 
 // WebUI message handler for the profile customization bubble.
@@ -26,6 +28,7 @@
   };
 
   explicit ProfileCustomizationHandler(
+      Profile* profile,
       base::OnceCallback<void(CustomizationResult)> completion_callback);
   ~ProfileCustomizationHandler() override;
 
@@ -51,8 +54,10 @@
  private:
   // Handlers for messages from javascript.
   void HandleInitialized(const base::Value::List& args);
+  void HandleGetAvailableIcons(const base::Value::List& args);
   void HandleDone(const base::Value::List& args);
   void HandleSkip(const base::Value::List& args);
+  void HandleSetAvatarIcon(const base::Value::List& args);
 
   // Sends an updated profile info (avatar and colors) to the WebUI.
   // `profile_path` is the path of the profile being updated, this function does
@@ -65,7 +70,9 @@
   // Returns the ProfilesAttributesEntry associated with the current profile.
   ProfileAttributesEntry* GetProfileEntry() const;
 
-  base::FilePath profile_path_;
+  // Non-owning pointer to the associated profile.
+  raw_ptr<Profile> profile_;
+
   base::ScopedObservation<ProfileAttributesStorage,
                           ProfileAttributesStorage::Observer>
       observed_profile_{this};
diff --git a/chrome/browser/ui/webui/signin/profile_customization_ui.cc b/chrome/browser/ui/webui/signin/profile_customization_ui.cc
index 45172be68..47980f6b 100644
--- a/chrome/browser/ui/webui/signin/profile_customization_ui.cc
+++ b/chrome/browser/ui/webui/signin/profile_customization_ui.cc
@@ -22,6 +22,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/signin_resources.h"
 #include "components/signin/public/identity_manager/account_info.h"
+#include "components/strings/grit/components_strings.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
@@ -65,6 +66,14 @@
       {"profileCustomizationTitle", IDS_PROFILE_CUSTOMIZATION_TITLE_V2},
       {"localProfileCreationTitle",
        IDS_PROFILE_CUSTOMIZATION_LOCAL_PROFILE_CREATION_TITLE},
+      {"profileCustomizationCustomizeAvatarLabel",
+       IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_LOCAL_PROFILE_CREATION_CUSTOMIZE_AVATAR_BUTTON_LABEL},
+      {"profileCustomizationAvatarSelectionTitle",
+       IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_LOCAL_PROFILE_CREATION_AVATAR_TEXT},
+      {"profileCustomizationAvatarSelectionConfirmButtonLabel", IDS_OK},
+      {"profileCustomizationAvatarSelectionCancelButtonLabel", IDS_CANCEL},
+      {"profileCustomizationAvatarSelectionBackButtonLabel",
+       IDS_PROFILE_CUSTOMIZATION_AVATAR_SELECTION_BACK_BUTTON_LABEL},
 
       // Color picker strings:
       {"colorPickerLabel", IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL},
@@ -107,7 +116,7 @@
     base::OnceCallback<void(ProfileCustomizationHandler::CustomizationResult)>
         completion_callback) {
   web_ui()->AddMessageHandler(std::make_unique<ProfileCustomizationHandler>(
-      std::move(completion_callback)));
+      Profile::FromWebUI(web_ui()), std::move(completion_callback)));
 }
 
 void ProfileCustomizationUI::BindInterface(
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
index d2bbbd2..ff61aa3 100644
--- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc
+++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -680,9 +680,9 @@
       ProfileMetrics::ADD_NEW_PROFILE_PICKER_LOCAL);
   ProfileManager::CreateMultiProfileAsync(
       profile_name, avatar_index, /*is_hidden=*/false,
-      base::BindRepeating(&ProfilePickerHandler::OnProfileCreated,
-                          weak_factory_.GetWeakPtr(), profile_color,
-                          create_shortcut));
+      base::BindOnce(&ProfilePickerHandler::OnProfileInitialized,
+                     weak_factory_.GetWeakPtr(), profile_color,
+                     create_shortcut));
 }
 
 void ProfilePickerHandler::HandleGetSwitchProfile(
@@ -726,35 +726,15 @@
   ProfilePicker::CancelSignedInFlow();
 }
 
-void ProfilePickerHandler::OnProfileCreated(
-    absl::optional<SkColor> profile_color,
-    bool create_shortcut,
-    Profile* profile,
-    Profile::CreateStatus status) {
-  switch (status) {
-    case Profile::CREATE_STATUS_LOCAL_FAIL: {
-      NOTREACHED() << "Local fail in creating new profile";
-      break;
-    }
-
-    case Profile::CREATE_STATUS_CREATED:
-      // Do nothing for an intermediate status.
-      return;
-
-    case Profile::CREATE_STATUS_INITIALIZED: {
-      OnProfileCreationSuccess(profile_color, create_shortcut, profile);
-      break;
-    }
-  }
-
-  FireWebUIListener("create-profile-finished", base::Value());
-}
-
-void ProfilePickerHandler::OnProfileCreationSuccess(
+void ProfilePickerHandler::OnProfileInitialized(
     absl::optional<SkColor> profile_color,
     bool create_shortcut,
     Profile* profile) {
-  DCHECK(profile);
+  if (!profile) {
+    NOTREACHED() << "Local fail in creating new profile";
+    FireWebUIListener("create-profile-finished", base::Value());
+    return;
+  }
   DCHECK(!signin_util::IsForceSigninEnabled());
 
   // Apply a new color to the profile or use the default theme.
@@ -788,6 +768,8 @@
               // browser window if the Profile is not locked. Hence there is no
               // extension blocked.
       profile);
+
+  FireWebUIListener("create-profile-finished", base::Value());
 }
 
 void ProfilePickerHandler::HandleRecordSignInPromoImpression(
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.h b/chrome/browser/ui/webui/signin/profile_picker_handler.h
index 6e2c6408..5f1a9b6 100644
--- a/chrome/browser/ui/webui/signin/profile_picker_handler.h
+++ b/chrome/browser/ui/webui/signin/profile_picker_handler.h
@@ -104,13 +104,9 @@
   void OnSwitchToProfileComplete(bool new_profile,
                                  bool open_settings,
                                  Profile* profile);
-  void OnProfileCreated(absl::optional<SkColor> profile_color,
-                        bool create_shortcut,
-                        Profile* profile,
-                        Profile::CreateStatus status);
-  void OnProfileCreationSuccess(absl::optional<SkColor> profile_color,
-                                bool create_shortcut,
-                                Profile* profile);
+  void OnProfileInitialized(absl::optional<SkColor> profile_color,
+                            bool create_shortcut,
+                            Profile* profile);
   void PushProfilesList();
   base::Value::List GetProfilesList();
   // Adds a profile with `profile_path` to `profiles_order_`.
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc
index a70bb4a..63bdfa4 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc
@@ -42,7 +42,7 @@
 
 Browser* GetBrowserWithGroupId(Profile* profile, std::string group_id_string) {
   for (auto* browser : *BrowserList::GetInstance()) {
-    if (browser->profile() != profile) {
+    if (profile && browser->profile() != profile) {
       continue;
     }
 
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.h
index 467a51a..df8b495 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.h
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.h
@@ -24,6 +24,9 @@
     TabGroupModel* tab_group_model,
     std::string group_id_string);
 
+// Find the browser containing the group with ID |group_id_string| or nullptr if
+// none. If the profile is not specified, find any browser containing the
+// |group_id|.
 Browser* GetBrowserWithGroupId(Profile* profile, std::string group_id_string);
 
 void MoveTabAcrossWindows(
diff --git a/chrome/browser/ui/webui/version/version_handler_win_unittest.cc b/chrome/browser/ui/webui/version/version_handler_win_unittest.cc
index bed0d923..a6248e8 100644
--- a/chrome/browser/ui/webui/version/version_handler_win_unittest.cc
+++ b/chrome/browser/ui/webui/version/version_handler_win_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/test/scoped_os_info_override_win.h"
 #include "base/test/test_reg_util_win.h"
 #include "base/win/registry.h"
-#include "chrome/browser/ui/webui/version/version_handler_win.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 class WebUIWindowsVersion : public testing::Test {
diff --git a/chrome/browser/undo/OWNERS b/chrome/browser/undo/OWNERS
index 40c070a..90b3e80 100644
--- a/chrome/browser/undo/OWNERS
+++ b/chrome/browser/undo/OWNERS
@@ -1,2 +1 @@
 sky@chromium.org
-tom.cassiotis@gmail.com
diff --git a/chrome/browser/updates/announcement_notification/announcement_notification_service_factory.cc b/chrome/browser/updates/announcement_notification/announcement_notification_service_factory.cc
index 79c658c1..41d674d 100644
--- a/chrome/browser/updates/announcement_notification/announcement_notification_service_factory.cc
+++ b/chrome/browser/updates/announcement_notification/announcement_notification_service_factory.cc
@@ -19,8 +19,6 @@
 
 #if BUILDFLAG(IS_ANDROID)
 #include "chrome/browser/updates/announcement_notification/announcement_notification_delegate_android.h"
-#else
-#include "chrome/browser/updates/announcement_notification/announcement_notification_delegate.h"
 #endif  // BUILDFLAG(IS_ANDROID)
 
 // static
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc b/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
index 824e9ff..8fc00e8b 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
@@ -51,8 +51,6 @@
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "base/path_service.h"
-#include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_paths_lacros.h"
 #include "chromeos/crosapi/mojom/crosapi.mojom.h"
 #endif
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.cc b/chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.cc
index 1ce7ec3..9c6beee 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.cc
@@ -24,7 +24,6 @@
 #if BUILDFLAG(IS_CHROMEOS)
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/calculator.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/google_calendar.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/google_chat.h"
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 2259fcd..a03aa71d 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1661147815-d915342c6e308db896b7c502d8127c9294613966.profdata
+chrome-linux-main-1661169344-d39827cf1ccf2085dd832af34927ee43102caf6b.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index bc7d3e3..2a1bb99 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1661147815-8adce9ad2756b8541fbf6a7a50c530135537e19f.profdata
+chrome-mac-arm-main-1661169344-9d73f66820cb921ae29c3a54dd43fd5ae5ca5471.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 6125737..ff9e3ab 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1661147815-7f3afc44ff1ce285d22d9dcaf86e1d9bc9f40184.profdata
+chrome-mac-main-1661169344-5beeb780c4912161c5ec60d032f0994a6405dc14.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index a48fbd1..7ec93b1 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1661147815-3e5a7ff1ef773abbc842c4786d06466afd45adba.profdata
+chrome-win32-main-1661158747-10f2dfd5236142c38615e3b67494695d8bc3050b.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index c685139..ce83e603 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1661147815-7b7442896c53936deb710b1509349974e912b106.profdata
+chrome-win64-main-1661169344-717addf9885f8e053ed41c1753d05e56e994c2ec.profdata
diff --git a/chrome/renderer/autofill/autofill_renderer_browsertest.cc b/chrome/renderer/autofill/autofill_renderer_browsertest.cc
index 1f558c0..d3ab005 100644
--- a/chrome/renderer/autofill/autofill_renderer_browsertest.cc
+++ b/chrome/renderer/autofill/autofill_renderer_browsertest.cc
@@ -102,13 +102,13 @@
       const FormFieldData& field,
       const std::u16string& old_value) override {}
 
-  void AskForValuesToFill(const FormData& form,
-                          const FormFieldData& field,
-                          const gfx::RectF& bounding_box,
-                          int32_t query_id,
-                          bool autoselect_first_suggestion,
-                          TouchToFillEligible touch_to_fill_eligible) override {
-  }
+  void AskForValuesToFill(
+      const FormData& form,
+      const FormFieldData& field,
+      const gfx::RectF& bounding_box,
+      int32_t query_id,
+      bool autoselect_first_suggestion,
+      FormElementWasClicked form_element_was_clicked) override {}
 
   void HidePopup() override {}
 
diff --git a/chrome/renderer/autofill/form_autocomplete_browsertest.cc b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
index 33745c04..8a247e90 100644
--- a/chrome/renderer/autofill/form_autocomplete_browsertest.cc
+++ b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
@@ -100,13 +100,13 @@
       const FormFieldData& field,
       const std::u16string& old_value) override {}
 
-  void AskForValuesToFill(const FormData& form,
-                          const FormFieldData& field,
-                          const gfx::RectF& bounding_box,
-                          int32_t query_id,
-                          bool autoselect_first_field,
-                          TouchToFillEligible touch_to_fill_eligible) override {
-  }
+  void AskForValuesToFill(
+      const FormData& form,
+      const FormFieldData& field,
+      const gfx::RectF& bounding_box,
+      int32_t query_id,
+      bool autoselect_first_field,
+      FormElementWasClicked form_element_was_clicked) override {}
 
   void HidePopup() override {}
 
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index 38248d64..c94c0fdd 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -286,7 +286,7 @@
   // TODO(crbug.com/1293802): On Android, the JS above doesn't trigger the
   // method below.
   GetMainFrame()->AutofillClient()->DidCompleteFocusChangeInFrame();
-#endif  // !BUILDFLAG(IS_ANDROID)
+#endif  // BUILDFLAG(IS_ANDROID)
 }
 
 void PasswordGenerationAgentTest::ExpectAutomaticGenerationAvailable(
diff --git a/chrome/renderer/cart/commerce_hint_agent_browsertest.cc b/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
index 344421c3..0148bf5 100644
--- a/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
+++ b/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/chrome_test_utils.h"
@@ -100,15 +101,6 @@
   return proto;
 }
 
-#if !BUILDFLAG(IS_CHROMEOS)
-void UnblockOnProfileCreation(base::RunLoop* run_loop,
-                              Profile* profile,
-                              Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-#endif  // !BUILDFLAG(IS_CHROMEOS)
-
 const char kMockExample[] = "guitarcenter.com";
 const char kMockExampleFallbackURL[] = "https://www.guitarcenter.com/cart";
 const char kMockExampleLinkURL[] =
@@ -857,10 +849,7 @@
   // Create another profile.
   base::FilePath profile_path2 =
       profile_manager->GenerateNextProfileDirectoryPath();
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      profile_path2, base::BindRepeating(&UnblockOnProfileCreation, &run_loop));
-  run_loop.Run();
+  profiles::testing::CreateProfileSync(profile_manager, profile_path2);
   ASSERT_EQ(profile_manager->GetNumberOfProfiles(), 2U);
 
   NavigateToURL("https://www.guitarcenter.com/");
diff --git a/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc b/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc
index 64545e6d..1e3c5331 100644
--- a/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc
+++ b/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc
@@ -13,6 +13,7 @@
 #include "base/bind.h"
 #include "base/compiler_specific.h"
 #include "base/logging.h"
+#include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_checker.h"
@@ -21,6 +22,7 @@
 #include "chrome/services/sharing/webrtc/p2p_socket_client_delegate.h"
 #include "components/webrtc/net_address_utils.h"
 #include "net/base/ip_address.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/webrtc/rtc_base/async_packet_socket.h"
 
 namespace sharing {
@@ -206,6 +208,7 @@
 
   // rtc::AsyncResolverInterface interface.
   void Start(const rtc::SocketAddress& addr) override;
+  void Start(const rtc::SocketAddress& addr, int address_family) override;
   bool GetResolvedAddress(int family, rtc::SocketAddress* addr) const override;
   int GetError() const override;
   void Destroy(bool wait) override;
@@ -219,6 +222,8 @@
 
   rtc::SocketAddress addr_;                // Address to resolve.
   std::vector<rtc::IPAddress> addresses_;  // Resolved addresses.
+
+  base::WeakPtrFactory<AsyncAddressResolverImpl> weak_factory_{this};
 };
 
 IpcPacketSocket::IpcPacketSocket()
@@ -610,9 +615,21 @@
   // GetResolvedAddress.
   addr_ = addr;
 
-  resolver_.Start(addr,
+  resolver_.Start(addr, /*address_family=*/absl::nullopt,
                   base::BindOnce(&AsyncAddressResolverImpl::OnAddressResolved,
-                                 base::Unretained(this)));
+                                 weak_factory_.GetWeakPtr()));
+}
+
+void AsyncAddressResolverImpl::Start(const rtc::SocketAddress& addr,
+                                     int address_family) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  // Port and hostname must be copied to the resolved address returned from
+  // GetResolvedAddress.
+  addr_ = addr;
+
+  resolver_.Start(addr, absl::make_optional(address_family),
+                  base::BindOnce(&AsyncAddressResolverImpl::OnAddressResolved,
+                                 weak_factory_.GetWeakPtr()));
 }
 
 bool AsyncAddressResolverImpl::GetResolvedAddress(
diff --git a/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc b/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc
index e0f9d91..b8df376 100644
--- a/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc
+++ b/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc
@@ -24,16 +24,24 @@
 }
 
 void P2PAsyncAddressResolver::Start(const rtc::SocketAddress& host_name,
+                                    absl::optional<int> address_family,
                                     DoneCallback done_callback) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(STATE_CREATED, state_);
 
   state_ = STATE_SENT;
   done_callback_ = std::move(done_callback);
-  socket_manager_->GetHostAddress(
-      host_name.hostname(), /*enable_mdns=*/true,
-      base::BindOnce(&P2PAsyncAddressResolver::OnResponse,
-                     base::Unretained(this)));
+  if (address_family.has_value()) {
+    socket_manager_->GetHostAddressWithFamily(
+        host_name.hostname(), address_family.value(), /*enable_mdns=*/true,
+        base::BindOnce(&P2PAsyncAddressResolver::OnResponse,
+                       base::Unretained(this)));
+  } else {
+    socket_manager_->GetHostAddress(
+        host_name.hostname(), /*enable_mdns=*/true,
+        base::BindOnce(&P2PAsyncAddressResolver::OnResponse,
+                       base::Unretained(this)));
+  }
 }
 
 void P2PAsyncAddressResolver::Cancel() {
diff --git a/chrome/services/sharing/webrtc/p2p_async_address_resolver.h b/chrome/services/sharing/webrtc/p2p_async_address_resolver.h
index d3e8962..a8a8bfd 100644
--- a/chrome/services/sharing/webrtc/p2p_async_address_resolver.h
+++ b/chrome/services/sharing/webrtc/p2p_async_address_resolver.h
@@ -13,6 +13,7 @@
 #include "mojo/public/cpp/bindings/shared_remote.h"
 #include "net/base/ip_address.h"
 #include "services/network/public/mojom/p2p.mojom.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/webrtc/rtc_base/async_resolver_interface.h"
 
 namespace sharing {
@@ -33,7 +34,9 @@
   ~P2PAsyncAddressResolver();
 
   // Start address resolve process.
-  void Start(const rtc::SocketAddress& addr, DoneCallback done_callback);
+  void Start(const rtc::SocketAddress& addr,
+             absl::optional<int> address_family,
+             DoneCallback done_callback);
   // Clients must unregister before exiting for cleanup.
   void Cancel();
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 6922bf9..698b2f2 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -8055,7 +8055,6 @@
         "../browser/extensions/external_pref_loader_unittest.cc",
         "../browser/extensions/external_provider_impl_chromeos_unittest.cc",
         "../browser/extensions/system_display/display_info_provider_chromeos_unittest.cc",
-        "../browser/extensions/system_display/system_display_serialization_unittest.cc",
         "../browser/media_galleries/chromeos/mtp_device_object_enumerator_unittest.cc",
         "../browser/policy/restricted_mgs_policy_provider_ash_unittest.cc",
         "../browser/ui/webui/about_ui_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/OWNERS b/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/OWNERS
index 7325cb0..d1fbac9 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/OWNERS
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/OWNERS
@@ -1,3 +1,2 @@
-aluo@chromium.org
 skym@chromium.org
 wuwang@chromium.org
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
index ea4da51..0f60a2d3 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
@@ -148,6 +148,15 @@
     }
 
     /**
+     * Sets the result for the next add account flow.
+     * @param result The activity result to return when the intent is launched
+     * @param newAccountName The account name to return when the intent is launched
+     */
+    public void setResultForNextAddAccountFlow(int result, @Nullable String newAccountName) {
+        mFakeAccountManagerFacade.setResultForNextAddAccountFlow(result, newAccountName);
+    }
+
+    /**
      * Removes an account with the given account email.
      */
     public void removeAccount(String accountEmail) {
diff --git a/chrome/test/base/browser_tests_main.cc b/chrome/test/base/browser_tests_main.cc
index b87927f..3da6541 100644
--- a/chrome/test/base/browser_tests_main.cc
+++ b/chrome/test/base/browser_tests_main.cc
@@ -17,7 +17,6 @@
 #endif  // BUILDFLAG(IS_WIN)
 
 #if BUILDFLAG(IS_FUCHSIA)
-#include "base/test/test_switches.h"
 #include "ui/gfx/switches.h"
 #include "ui/ozone/public/ozone_switches.h"  // nogncheck
 #endif
diff --git a/chrome/test/base/chrome_test_suite.cc b/chrome/test/base/chrome_test_suite.cc
index 588c96f..f7e803b 100644
--- a/chrome/test/base/chrome_test_suite.cc
+++ b/chrome/test/base/chrome_test_suite.cc
@@ -15,7 +15,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
-#include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/app/chrome_main_delegate.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index 13aebd5..1917f8c 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -44,6 +44,7 @@
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_test_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -174,17 +175,6 @@
 }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
-#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
-// An observer that returns back to test code after a new profile is
-// initialized.
-void UnblockOnProfileCreation(base::RunLoop* run_loop,
-                              Profile* profile,
-                              Profile::CreateStatus status) {
-  if (status == Profile::CREATE_STATUS_INITIALIZED)
-    run_loop->Quit();
-}
-#endif
-
 #if BUILDFLAG(IS_MAC)
 class ChromeBrowserMainExtraPartsBrowserProcessInjection
     : public ChromeBrowserMainExtraParts {
@@ -678,16 +668,14 @@
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath guest_path = profile_manager->GetGuestProfilePath();
 
-  base::RunLoop run_loop;
-  profile_manager->CreateProfileAsync(
-      guest_path, base::BindRepeating(&UnblockOnProfileCreation, &run_loop));
-  run_loop.Run();
-
-  Profile* profile = profile_manager->GetProfileByPath(guest_path)
-                         ->GetPrimaryOTRProfile(/*create_if_needed=*/true);
+  Profile* guest_profile =
+      profiles::testing::CreateProfileSync(profile_manager, guest_path);
+  Profile* guest_profile_otr =
+      guest_profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
 
   // Create browser and add tab.
-  Browser* browser = Browser::Create(Browser::CreateParams(profile, true));
+  Browser* browser =
+      Browser::Create(Browser::CreateParams(guest_profile_otr, true));
   AddBlankTabAndShow(browser);
   return browser;
 }
diff --git a/chrome/test/base/test_browser_window.cc b/chrome/test/base/test_browser_window.cc
index 84548a7..223b903 100644
--- a/chrome/test/base/test_browser_window.cc
+++ b/chrome/test/base/test_browser_window.cc
@@ -237,6 +237,10 @@
   return false;
 }
 
+bool TestBrowserWindow::IsBorderlessModeEnabled() const {
+  return false;
+}
+
 ShowTranslateBubbleResult TestBrowserWindow::ShowTranslateBubble(
     content::WebContents* contents,
     translate::TranslateStep step,
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h
index a3dab06..d357429 100644
--- a/chrome/test/base/test_browser_window.h
+++ b/chrome/test/base/test_browser_window.h
@@ -143,6 +143,7 @@
   bool IsToolbarVisible() const override;
   bool IsLocationBarVisible() const override;
   bool IsToolbarShowing() const override;
+  bool IsBorderlessModeEnabled() const override;
   SharingDialog* ShowSharingDialog(content::WebContents* contents,
                                    SharingDialogData data) override;
   void ShowUpdateChromeDialog() override {}
diff --git a/chrome/test/data/extensions/calculator_app/OWNERS b/chrome/test/data/extensions/calculator_app/OWNERS
deleted file mode 100644
index 30c31e5..0000000
--- a/chrome/test/data/extensions/calculator_app/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Separate owners because this app ships with Chrome OS.
-dharcourt@chromium.org
diff --git a/chrome/test/data/webui/settings/all_sites_tests.ts b/chrome/test/data/webui/settings/all_sites_tests.ts
index 4db52689..30c1ac3 100644
--- a/chrome/test/data/webui/settings/all_sites_tests.ts
+++ b/chrome/test/data/webui/settings/all_sites_tests.ts
@@ -559,16 +559,16 @@
         siteEntries[0]!.$$<HTMLElement>('#overflowMenuButton')!;
     assertFalse(
         overflowMenuButton.closest<HTMLElement>('.row-aligned')!.hidden);
-    // Open the reset settings dialog.
-    const overflowMenu = testElement.$.menu.get();
-    const menuItems =
-        overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
 
+    // Open the reset settings dialog.
     // Test clicking on the overflow menu button opens the menu.
+    const overflowMenu = testElement.$.menu.get();
     assertFalse(overflowMenu.open);
     overflowMenuButton.click();
     assertTrue(overflowMenu.open);
-
+    flush();
+    const menuItems =
+        overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
     // Open the reset settings dialog and tap the |buttonType| button.
     assertFalse(testElement.$.confirmResetSettings.get().open);
     menuItems[0]!.click();
@@ -664,12 +664,13 @@
 
     // Open the clear data dialog.
     const overflowMenu = testElement.$.menu.get();
-    const menuItems =
-        overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
     // Test clicking on the overflow menu button opens the menu.
     assertFalse(overflowMenu.open);
     overflowMenuButton.click();
     assertTrue(overflowMenu.open);
+    flush();
+    const menuItems =
+        overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
 
     // Open the clear data dialog and tap the |buttonType| button.
     assertFalse(testElement.$.confirmClearData.get().open);
@@ -859,7 +860,7 @@
       },
     }));
     assertTrue(overflowMenu.open);
-
+    flush();
     const menuItems =
         overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
 
@@ -957,7 +958,7 @@
       },
     }));
     assertTrue(overflowMenu.open);
-
+    flush();
     const menuItems =
         overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
 
@@ -1386,3 +1387,148 @@
             .querySelector<HTMLElement>('#logoutBulletPoint')!.innerText);
   });
 });
+
+suite('AllSites_EnableFirstPartySets', function() {
+  /**
+   * An example eTLD+1 Object with multiple origins grouped under it.
+   */
+  const TEST_MULTIPLE_SITE_GROUP = createSiteGroup('example.com', [
+    'http://example.com',
+    'https://www.example.com',
+    'https://login.example.com',
+  ]);
+
+  let testElement: AllSitesElement;
+
+  /**
+   * The mock proxy object to use during test.
+   */
+  let browserProxy: TestSiteSettingsPrefsBrowserProxy;
+
+  /**
+   * The mock local data proxy object to use during test.
+   */
+  let localDataBrowserProxy: TestLocalDataBrowserProxy;
+
+  suiteSetup(function() {
+    CrSettingsPrefs.setInitialized();
+
+    loadTimeData.overrideValues({
+      consolidatedSiteStorageControlsEnabled: true,
+      firstPartySetsUIEnabled: true,
+    });
+  });
+
+  suiteTeardown(function() {
+    CrSettingsPrefs.resetForTesting();
+  });
+
+
+  // Initialize a site-list before each test.
+  setup(async function() {
+    document.body.innerHTML = '';
+
+    browserProxy = new TestSiteSettingsPrefsBrowserProxy();
+    localDataBrowserProxy = new TestLocalDataBrowserProxy();
+    SiteSettingsPrefsBrowserProxyImpl.setInstance(browserProxy);
+    LocalDataBrowserProxyImpl.setInstance(localDataBrowserProxy);
+    testElement = document.createElement('all-sites');
+    assertTrue(!!testElement);
+    document.body.appendChild(testElement);
+  });
+
+  function removeSiteViaOverflowMenu(buttonType: string) {
+    assertTrue(
+        buttonType === 'cancel-button' || buttonType === 'action-button');
+    flush();
+    const siteEntries =
+        testElement.$.listContainer.querySelectorAll('site-entry');
+    assertEquals(1, siteEntries.length);
+    const overflowMenuButton =
+        siteEntries[0]!.shadowRoot!.querySelector<HTMLElement>(
+            '#fpsOverflowMenuButton')!;
+    assertFalse(
+        overflowMenuButton.closest<HTMLElement>('.row-aligned')!.hidden);
+
+    // Test clicking on the overflow menu button opens the menu.
+    const overflowMenu = testElement.$.menu.get();
+    assertFalse(overflowMenu.open);
+    overflowMenuButton.click();
+    assertTrue(overflowMenu.open);
+    flush();
+    const menuItems =
+        overflowMenu.querySelectorAll<HTMLElement>('.dropdown-item');
+    assertFalse(testElement.$.confirmRemoveSite.get().open);
+    menuItems[1]!.click();
+    assertTrue(testElement.$.confirmRemoveSite.get().open);
+    const actionButtonList =
+        testElement.$.confirmRemoveSite.get().querySelectorAll<HTMLElement>(
+            `.${buttonType}`);
+    assertEquals(1, actionButtonList.length);
+    actionButtonList[0]!.click();
+    // Check the dialog and overflow menu are now both closed.
+    assertFalse(testElement.$.confirmRemoveSite.get().open);
+    assertFalse(overflowMenu.open);
+  }
+
+  function removeFirstSiteGroup() {
+    const siteEntries =
+        testElement.$.listContainer.querySelectorAll('site-entry');
+    assertEquals(1, siteEntries.length);
+    siteEntries[0]!.shadowRoot!.querySelector<HTMLElement>(
+                                   '#removeSiteButton')!.click();
+  }
+
+  function confirmDialog() {
+    assertTrue(testElement.$.confirmRemoveSite.get().open);
+    testElement.$.confirmRemoveSite.get()
+        .querySelector<HTMLElement>('.action-button')!.click();
+  }
+
+  function cancelDialog() {
+    assertTrue(testElement.$.confirmRemoveSite.get().open);
+    testElement.$.confirmRemoveSite.get()
+        .querySelector<HTMLElement>('.cancel-button')!.click();
+  }
+
+  test('remove site via overflow menu', async function() {
+    const siteGroup = JSON.parse(JSON.stringify(TEST_MULTIPLE_SITE_GROUP));
+    siteGroup.fpsOwner = 'htpps://google.com';
+    testElement.siteGroupMap.set(
+        siteGroup.etldPlus1, JSON.parse(JSON.stringify(siteGroup)));
+    testElement.forceListUpdateForTesting();
+    removeSiteViaOverflowMenu('action-button');
+  });
+
+  test(
+      'cancelling the confirm dialog on removing site works', async function() {
+        const siteGroup = JSON.parse(JSON.stringify(TEST_MULTIPLE_SITE_GROUP));
+        siteGroup.fpsOwner = 'htpps://google.com';
+        testElement.siteGroupMap.set(
+            siteGroup.etldPlus1, JSON.parse(JSON.stringify(siteGroup)));
+        testElement.forceListUpdateForTesting();
+        removeSiteViaOverflowMenu('cancel-button');
+      });
+
+  test('click and remove site entry with remove button', async function() {
+    testElement.siteGroupMap.set(
+        TEST_MULTIPLE_SITE_GROUP.etldPlus1,
+        JSON.parse(JSON.stringify(TEST_MULTIPLE_SITE_GROUP)));
+    testElement.forceListUpdateForTesting();
+    flush();
+    removeFirstSiteGroup();
+    confirmDialog();
+  });
+
+  test(
+      'click and cancel dialog site entry with remove button',
+      async function() {
+        testElement.siteGroupMap.set(
+            TEST_MULTIPLE_SITE_GROUP.etldPlus1,
+            JSON.parse(JSON.stringify(TEST_MULTIPLE_SITE_GROUP)));
+        testElement.forceListUpdateForTesting();
+        flush();
+        removeFirstSiteGroup();
+        cancelDialog();
+      });
+});
\ No newline at end of file
diff --git a/chrome/test/data/webui/signin/test_profile_customization_browser_proxy.ts b/chrome/test/data/webui/signin/test_profile_customization_browser_proxy.ts
index 5738ab4..d482b50d60 100644
--- a/chrome/test/data/webui/signin/test_profile_customization_browser_proxy.ts
+++ b/chrome/test/data/webui/signin/test_profile_customization_browser_proxy.ts
@@ -10,7 +10,8 @@
   private profileInfo_: ProfileInfo;
 
   constructor() {
-    super(['done', 'initialized', 'skip']);
+    super(
+        ['done', 'initialized', 'getAvailableIcons', 'skip', 'setAvatarIcon']);
 
     this.profileInfo_ = {
       backgroundColor: '',
@@ -29,6 +30,11 @@
     return Promise.resolve(this.profileInfo_);
   }
 
+  getAvailableIcons() {
+    this.methodCalled('getAvailableIcons');
+    return Promise.resolve([]);
+  }
+
   done(profileName: string) {
     this.methodCalled('done', profileName);
   }
@@ -36,4 +42,8 @@
   skip() {
     this.methodCalled('skip');
   }
+
+  setAvatarIcon(avatarIndex: number) {
+    this.methodCalled('setAvatarIcon', avatarIndex);
+  }
 }
diff --git a/chrome/test/nacl/nacl_browsertest.cc b/chrome/test/nacl/nacl_browsertest.cc
index 2b5d2e1d..49f0fc1 100644
--- a/chrome/test/nacl/nacl_browsertest.cc
+++ b/chrome/test/nacl/nacl_browsertest.cc
@@ -16,7 +16,6 @@
 #include "base/process/launch.h"
 #include "base/process/process.h"
 #include "base/strings/string_number_conversions.h"
-#include "build/build_config.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/nacl/nacl_browsertest_util.h"
diff --git a/chrome/updater/app/server/mac/app_server.h b/chrome/updater/app/server/mac/app_server.h
index a691343f..17d5524e 100644
--- a/chrome/updater/app/server/mac/app_server.h
+++ b/chrome/updater/app/server/mac/app_server.h
@@ -13,7 +13,6 @@
 #include "base/callback_forward.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "chrome/updater/app/app_server.h"
 #include "chrome/updater/app/server/mac/service_delegate.h"
diff --git a/chrome/updater/win/app_install_controller.cc b/chrome/updater/win/app_install_controller.cc
index 92aa3e0..77cad0b 100644
--- a/chrome/updater/win/app_install_controller.cc
+++ b/chrome/updater/win/app_install_controller.cc
@@ -65,7 +65,6 @@
 #include "chrome/updater/win/ui/resources/updater_installer_strings.h"
 #include "chrome/updater/win/ui/splash_screen.h"
 #include "chrome/updater/win/ui/ui_util.h"
-#include "chrome/updater/win/win_util.h"
 #pragma clang diagnostic pop
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/utility/image_writer/OWNERS b/chrome/utility/image_writer/OWNERS
deleted file mode 100644
index 22549ad..0000000
--- a/chrome/utility/image_writer/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-haven@chromium.org
diff --git a/chromeos/ash/components/chromebox_for_meetings/OWNERS b/chromeos/ash/components/chromebox_for_meetings/OWNERS
index 9905ab4..e229114 100644
--- a/chromeos/ash/components/chromebox_for_meetings/OWNERS
+++ b/chromeos/ash/components/chromebox_for_meetings/OWNERS
@@ -1,3 +1,2 @@
 kdgwill@chromium.org
 pmoy@chromium.org
-lasoren@chromium.org
diff --git a/chromeos/ash/components/feature_usage/OWNERS b/chromeos/ash/components/feature_usage/OWNERS
index cf0b7f4..896e981 100644
--- a/chromeos/ash/components/feature_usage/OWNERS
+++ b/chromeos/ash/components/feature_usage/OWNERS
@@ -1,3 +1,2 @@
 rsorokin@chromium.org
 hsuregan@chromium.org
-karkhedkar@chromium.org
diff --git a/chromeos/ash/components/memory/OWNERS b/chromeos/ash/components/memory/OWNERS
index efb8db2..e8171f9 100644
--- a/chromeos/ash/components/memory/OWNERS
+++ b/chromeos/ash/components/memory/OWNERS
@@ -1,4 +1,2 @@
 bgeffon@chromium.org
-yuzhao@chromium.org
-jsbarnes@chromium.org
 vovoy@chromium.org
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom
index 430aa2a2..fcf61a0 100644
--- a/chromeos/crosapi/mojom/crosapi.mojom
+++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -547,8 +547,8 @@
 
   // Binds the System Display interface for querying display info.
   // Added in M92.
-  [MinVersion=24] BindSystemDisplay@29(
-      pending_receiver<SystemDisplay> receiver);
+  [MinVersion=24] REMOVED_29@29(
+      pending_receiver<SystemDisplayDeprecated> receiver);
 
   // Binds the Task Manager interface for integrating lacros tasks in ash
   // task manager.
diff --git a/chromeos/crosapi/mojom/system_display.mojom b/chromeos/crosapi/mojom/system_display.mojom
index f975ae3a..546ded8 100644
--- a/chromeos/crosapi/mojom/system_display.mojom
+++ b/chromeos/crosapi/mojom/system_display.mojom
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// This interface is deprecated and is not used anymore.
+// Please use cros_display_config.mojom instead.
+
 module crosapi.mojom;
 
 import "ui/gfx/geometry/mojom/geometry.mojom";
@@ -148,9 +151,12 @@
   OnCrosapiDisplayChanged@0();
 };
 
+// Deprecated.
+// Replaced by CrosDisplayConfigController.
 // Crosapi support for chrome.system.display extensions API.
-[Stable, Uuid="07f25a88-9762-4876-a8ce-2c1e6ad9f797"]
-interface SystemDisplay {
+[Stable, Uuid="07f25a88-9762-4876-a8ce-2c1e6ad9f797",
+ RenamedFrom="crosapi.mojom.SystemDisplay"]
+interface SystemDisplayDeprecated {
   // Returns the properties for all displays. If |single_unified| is true, a
   // single display will be returned if the display layout is in unifed mode.
   GetDisplayUnitInfoList@0(bool single_unified) =>
diff --git a/chromeos/dbus/power/native_timer.cc b/chromeos/dbus/power/native_timer.cc
index 11ea9ec..9ea8ac2 100644
--- a/chromeos/dbus/power/native_timer.cc
+++ b/chromeos/dbus/power/native_timer.cc
@@ -35,8 +35,16 @@
 
 }  // namespace
 
+bool NativeTimer::simulate_timer_creation_failure_for_testing_ = false;
+
 NativeTimer::NativeTimer(const std::string& tag)
     : timer_id_(kNotCreatedId), tag_(tag) {
+  // Simulate timer creation failure for testing.
+  if (simulate_timer_creation_failure_for_testing_) {
+    timer_id_ = kErrorId;
+    return;
+  }
+
   // Create a socket pair, one end will be sent to the power daemon the other
   // socket will be used to listen for the timer firing.
   base::ScopedFD powerd_fd;
@@ -126,6 +134,10 @@
                      std::move(result_callback)));
 }
 
+void NativeTimer::SimulateTimerCreationFailureForTesting() {
+  simulate_timer_creation_failure_for_testing_ = true;
+}
+
 void NativeTimer::OnCreateTimer(
     base::ScopedFD expiration_fd,
     absl::optional<std::vector<int32_t>> timer_ids) {
diff --git a/chromeos/dbus/power/native_timer.h b/chromeos/dbus/power/native_timer.h
index 88d56fa8..2acbae2 100644
--- a/chromeos/dbus/power/native_timer.h
+++ b/chromeos/dbus/power/native_timer.h
@@ -45,6 +45,9 @@
              base::OnceClosure timer_expiration_callback,
              OnStartNativeTimerCallback result_callback);
 
+  // Simulates timer creation failure in tests
+  static void SimulateTimerCreationFailureForTesting();
+
  private:
   struct StartTimerParams;
 
@@ -92,6 +95,9 @@
   std::unique_ptr<base::FileDescriptorWatcher::Controller>
       expiration_fd_watcher_;
 
+  // Indicating if the timer creation should fail. Only set by tests.
+  static bool simulate_timer_creation_failure_for_testing_;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<NativeTimer> weak_factory_{this};
diff --git a/chromeos/lacros/lacros_service.cc b/chromeos/lacros/lacros_service.cc
index 0db45c76..d95460a7 100644
--- a/chromeos/lacros/lacros_service.cc
+++ b/chromeos/lacros/lacros_service.cc
@@ -80,7 +80,6 @@
 #include "chromeos/crosapi/mojom/sharesheet.mojom.h"
 #include "chromeos/crosapi/mojom/speech_recognition.mojom.h"
 #include "chromeos/crosapi/mojom/sync.mojom.h"
-#include "chromeos/crosapi/mojom/system_display.mojom.h"
 #include "chromeos/crosapi/mojom/task_manager.mojom.h"
 #include "chromeos/crosapi/mojom/test_controller.mojom.h"
 #include "chromeos/crosapi/mojom/timezone.mojom.h"
@@ -455,8 +454,6 @@
   ConstructRemote<crosapi::mojom::SyncService,
                   &crosapi::mojom::Crosapi::BindSyncService,
                   Crosapi::MethodMinVersions::kBindSyncServiceMinVersion>();
-  ConstructRemote<crosapi::mojom::SystemDisplay, &Crosapi::BindSystemDisplay,
-                  Crosapi::MethodMinVersions::kBindSystemDisplayMinVersion>();
   ConstructRemote<crosapi::mojom::TaskManager,
                   &crosapi::mojom::Crosapi::BindTaskManager,
                   Crosapi::MethodMinVersions::kBindTaskManagerMinVersion>();
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt
index 1ae58bc..b407d3a 100644
--- a/chromeos/profiles/atom.afdo.newest.txt
+++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-atom-106-5226.0-1660558034-benchmark-106.0.5249.5-r1-redacted.afdo.xz
+chromeos-chrome-amd64-atom-106-5239.0-1661164408-benchmark-106.0.5249.6-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt
index acdf515..285d3a0 100644
--- a/chromeos/profiles/bigcore.afdo.newest.txt
+++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-bigcore-106-5195.24-1660556265-benchmark-106.0.5249.5-r1-redacted.afdo.xz
+chromeos-chrome-amd64-bigcore-106-5229.0-1661162659-benchmark-106.0.5249.6-r1-redacted.afdo.xz
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index 207d412..71285aa3 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Volume harder</translation>
 <translation id="1555130319947370107">Blou</translation>
 <translation id="155865706765934889">Raakpaneel</translation>
+<translation id="1561927818299383735">agterligkleur</translation>
 <translation id="1565038567006703504">Kan nie <ph name="DEVICE_NAME" /> opdateer nie</translation>
 <translation id="1567064801249837505">Albums</translation>
 <translation id="1572585716423026576">Stel as muurpapier</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Laat Roetines weer loop</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">agterligkleur</translation>
 <translation id="5294769550414936029">weergawe <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Skuif venster na lessenaar</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Herbegin</translation>
 <translation id="5901630391730855834">Geel</translation>
 <translation id="5903200662178656908">Toestel is ’n sleutelbord-en-muis-kombinasie.</translation>
+<translation id="5907649332524363701">sleutelkleur</translation>
 <translation id="5916084858004523819">Verbode</translation>
 <translation id="5916664084637901428">Aan</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Jou lêer is suksesvol geskandeer en in <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> gestoor.}other{Jou lêers is suksesvol geskandeer en in <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> gestoor.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Volume sagter</translation>
 <translation id="6766275201586212568">Mislukte DNS-resolusies</translation>
 <translation id="6768237774506518020">Hoë DNS-resolusiemislukkingkoers</translation>
+<translation id="6791471867139427246">sleutelbordligkleur</translation>
 <translation id="680983167891198932">Sleutel</translation>
 <translation id="6816797338148849397">Inligting is beskikbaar wat met jou keuse verband hou. Gebruik oppylsleutel om dit te sien.</translation>
 <translation id="6853312040151791195">Ontlaaikoers</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Vra die kundiges in die Chromebook-hulpforum</translation>
+<translation id="7311368985037279727">sleutelbordkleur</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Druk Search plus spasiebalk om resultaat in Google Search te sien.</translation>
 <translation id="7343649194310845056">Netwerktoestelle</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index 0086ca9..96a40a36 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Pojačavanje zvuka</translation>
 <translation id="1555130319947370107">Plava</translation>
 <translation id="155865706765934889">Dodirna podloga</translation>
+<translation id="1561927818299383735">boja pozadinskog osvjetljenja</translation>
 <translation id="1565038567006703504">Nije moguće ažurirati uređaj <ph name="DEVICE_NAME" /></translation>
 <translation id="1567064801249837505">Albumi</translation>
 <translation id="1572585716423026576">Postavi kao pozadinsku sliku</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Ponovo pokreni rutine</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">boja pozadinskog svjetla</translation>
 <translation id="5294769550414936029">verzija <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Premjesti prozor na radnu površinu</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Ponovo pokreni</translation>
 <translation id="5901630391730855834">Žuta</translation>
 <translation id="5903200662178656908">Uređaj predstavlja kombinaciju tastature i miša.</translation>
+<translation id="5907649332524363701">boja tipke</translation>
 <translation id="5916084858004523819">Zabranjeno</translation>
 <translation id="5916664084637901428">Uključeno</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Vaš fajl je uspješno skeniran i sačuvan u folder <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}one{Vaši fajlovi su uspješno skenirani i sačuvani u folder <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}few{Vaši fajlovi su uspješno skenirani i sačuvani u folder <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Vaši fajlovi su uspješno skenirani i sačuvani u folder <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Utišaj zvuk</translation>
 <translation id="6766275201586212568">DNS rezolucije nisu uspjele</translation>
 <translation id="6768237774506518020">Visoka stopa neuspjeha DNS rezolucije</translation>
+<translation id="6791471867139427246">svijetla boja tipkovnice</translation>
 <translation id="680983167891198932">Ključ</translation>
 <translation id="6816797338148849397">Dostupne su informacije u vezi s vašim odabirom. Pristupite tipkom strelice nagore.</translation>
 <translation id="6853312040151791195">Brzina pražnjenja</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Pitajte stručnjake na forumu za Chromebook pomoć</translation>
+<translation id="7311368985037279727">boja tipkovnice</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; pritisnite tipku za pretraživanje i tipku za razmak da vidite rezultat u Google Pretraživanju.</translation>
 <translation id="7343649194310845056">Mrežni uređaji</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index bba2a81f..b582ef8 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Lakasan ang volume</translation>
 <translation id="1555130319947370107">Asul</translation>
 <translation id="155865706765934889">Touchpad</translation>
+<translation id="1561927818299383735">kulay ng backlit</translation>
 <translation id="1565038567006703504">Hindi ma-update ang <ph name="DEVICE_NAME" /></translation>
 <translation id="1567064801249837505">Mga Album</translation>
 <translation id="1572585716423026576">Itakda bilang wallpaper</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Patakbuhin Ulit ang Mga Routine</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">kulay ng backlight</translation>
 <translation id="5294769550414936029">bersyon <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Ilipat sa desk ang window</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">I-restart</translation>
 <translation id="5901630391730855834">Dilaw</translation>
 <translation id="5903200662178656908">Pinagsamang keyboard at mouse ang device.</translation>
+<translation id="5907649332524363701">kulay ng key</translation>
 <translation id="5916084858004523819">Ipinagbabawal</translation>
 <translation id="5916664084637901428">Naka-on</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Na-scan at na-save na ang iyong file sa <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}one{Na-scan at na-save na ang iyong mga file sa <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Na-scan at na-save na ang iyong mga file sa <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Hinaan ang volume</translation>
 <translation id="6766275201586212568">May mga hindi naisagawang pagresolba sa DNS</translation>
 <translation id="6768237774506518020">Mataas na rate ng hindi naisagawang pagresolba sa DNS</translation>
+<translation id="6791471867139427246">kulay ng liwanag ng keyboard</translation>
 <translation id="680983167891198932">Key</translation>
 <translation id="6816797338148849397">Available ang impormasyong nauugnay sa iyong pinili. Gamitin ang Pataas na arrow key para ma-access.</translation>
 <translation id="6853312040151791195">Rate ng Pag-discharge</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Magtanong sa mga eksperto sa forum ng tulong ng Chromebook</translation>
+<translation id="7311368985037279727">kulay ng keyboard</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Pindutin ang Search at Space para tingnan ang resulta sa Google Search.</translation>
 <translation id="7343649194310845056">Mga Device sa Network</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index 3d43051..fca312e 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Pojačavanje glasnoće</translation>
 <translation id="1555130319947370107">Plava</translation>
 <translation id="155865706765934889">Dodirna površina</translation>
+<translation id="1561927818299383735">boja pozadinskog osvjetljenja</translation>
 <translation id="1565038567006703504">Ažuriranje uređaja <ph name="DEVICE_NAME" /> nije moguće</translation>
 <translation id="1567064801249837505">Albumi</translation>
 <translation id="1572585716423026576">Postavi kao pozadinu</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Ponovo pokreni rutine</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">boja pozadinskog svjetla</translation>
 <translation id="5294769550414936029">verzija <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Premjesti prozor na radnu površinu</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Ponovno pokreni</translation>
 <translation id="5901630391730855834">Žuta</translation>
 <translation id="5903200662178656908">Uređaj je kombinacija tipkovnice i miša.</translation>
+<translation id="5907649332524363701">boja tipke</translation>
 <translation id="5916084858004523819">Zabranjeno</translation>
 <translation id="5916664084637901428">Uključi</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Vaša je datoteka skenirana i spremljena u mapu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}one{Vaše su datoteke skenirane i spremljene u mapu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}few{Vaše su datoteke skenirane i spremljene u mapu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Vaše su datoteke skenirane i spremljene u mapu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Smanjivanje glasnoće</translation>
 <translation id="6766275201586212568">Neuspješna razrješavanja DNS-a</translation>
 <translation id="6768237774506518020">Visoka stopa neuspješnih razrješavanja DNS-a</translation>
+<translation id="6791471867139427246">svijetla boja tipkovnice</translation>
 <translation id="680983167891198932">Ključ</translation>
 <translation id="6816797338148849397">Dostupne su informacije o vašem odabiru. Pristupite im pritiskom strelice prema gore.</translation>
 <translation id="6853312040151791195">Brzina pražnjenja</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Pitajte stručnjake na Chromebookovom forumu za pomoć</translation>
+<translation id="7311368985037279727">boja tipkovnice</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Pritisnite Pretraži i razmaknicu da biste vidjeli rezultate u Google pretraživanju.</translation>
 <translation id="7343649194310845056">Mrežni uređaji</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index 1e2c9bc..dfd9e6c 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Катуулатуу</translation>
 <translation id="1555130319947370107">Көк</translation>
 <translation id="155865706765934889">Тийме такта</translation>
+<translation id="1561927818299383735">баскычтоптун жарыгынын түсү</translation>
 <translation id="1565038567006703504"><ph name="DEVICE_NAME" /> жаңыртылбай жатат</translation>
 <translation id="1567064801249837505">Альбомдор</translation>
 <translation id="1572585716423026576">Тушкагаз катары коюу</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Программаларды кайра иштетүү</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">баскычтоптун жарыгынын түсү</translation>
 <translation id="5294769550414936029"><ph name="MILESTONE_VERSION" /> версиясы</translation>
 <translation id="5300814202279832142">Терезени иш тактага жылдыруу</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Өчүрүп күйгүзүү</translation>
 <translation id="5901630391730855834">Сары</translation>
 <translation id="5903200662178656908">Түзмөк баскычтоп менен чычкандан турат.</translation>
+<translation id="5907649332524363701">баскычтын түсү</translation>
 <translation id="5916084858004523819">Тыюу салынат</translation>
 <translation id="5916664084637901428">Күйүк</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Файл ийгиликтүү скандалып, <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> папкасына сакталды.}other{Файлдар ийгиликтүү скандалып, <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> папкасына сакталды.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Акырындатуу</translation>
 <translation id="6766275201586212568">DNS резолюциялары орундалган жок</translation>
 <translation id="6768237774506518020">DNS резолюциясынын бузулуу деңгээли жогору</translation>
+<translation id="6791471867139427246">баскычтоптун жарыгынын түсү</translation>
 <translation id="680983167891198932">Ачкыч</translation>
 <translation id="6816797338148849397">Сиз тандаган нерсеге тиешелүү маалымат бар. Көрүү үчүн Өйдө жебе баскычын басыңыз.</translation>
 <translation id="6853312040151791195">Батареянын кубатынын түгөнүү көрсөткүчү</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Chromebook'тун Жардам форумундагы адистерден сураңыз</translation>
+<translation id="7311368985037279727">баскычтоптун түсү</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Google Издөөдөгү натыйжаларды көрүү үчүн Издөө жана Боштук баскычтарын басыңыз.</translation>
 <translation id="7343649194310845056">Тармак түзмөктөрү</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index bc9e124..31dd5caa 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -46,7 +46,7 @@
 <translation id="1394661041439318933">ဘူးတွင် ဘက်ထရီ <ph name="BATTERY_PERCENTAGE" />% ရှိသည်။</translation>
 <translation id="1397738625398125236">ကွန်ရက်ဂိတ်ဝကို ဆက်သွယ်နိုင်ပါသည်</translation>
 <translation id="1398634363027580500">HTTPS တုံ့ပြန်ချိန် အလွန်မြင့်သည်</translation>
-<translation id="1407069428457324124">မှောင်သည့်အပြင်အဆင်</translation>
+<translation id="1407069428457324124">အမှောင်နောက်ခံ</translation>
 <translation id="1413240736185167732">မအောင်မြင်ပါ - ဆန်ခါ ရပ်သွားသည်</translation>
 <translation id="1416836038590872660">EAP-MD5</translation>
 <translation id="142228117786570094">ကျွန်ုပ်တွင် ကီးအတွဲရှိသည်</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb
index 0cb6b59f..3b7bf1f 100644
--- a/chromeos/strings/chromeos_strings_ne.xtb
+++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">भोल्युम बढाउनुहोस्</translation>
 <translation id="1555130319947370107">निलो</translation>
 <translation id="155865706765934889">टचप्याड</translation>
+<translation id="1561927818299383735">ब्याकलिटको रङ</translation>
 <translation id="1565038567006703504"><ph name="DEVICE_NAME" /> अपडेट गर्न सकिएन</translation>
 <translation id="1567064801249837505">एल्बमहरू</translation>
 <translation id="1572585716423026576">वालपेपरका रूपमा सेट गर्नुहोस्</translation>
@@ -436,6 +437,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">निदानसम्बन्धी रुटिनहरू पुनः सञ्चालन गर्नुहोस्</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">ब्याकलाइटको रङ</translation>
 <translation id="5294769550414936029">संस्करण <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">विन्डो सारेर डेस्कमा लैजानुहोस्</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -496,6 +498,7 @@
 <translation id="5895138241574237353">पुन: शुरू गर्नुहोस्</translation>
 <translation id="5901630391730855834">पहेँलो</translation>
 <translation id="5903200662178656908">यो डिभाइस किबोर्ड र माउसको कम्बो हो।</translation>
+<translation id="5907649332524363701">कीको रङ</translation>
 <translation id="5916084858004523819">प्रतिबन्धित</translation>
 <translation id="5916664084637901428">अन</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{तपाईंको फाइल स्क्यान गर्ने काम पूरा भएको छ र उक्त फाइल <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> मा सुरक्षित गरिएको छ।}other{तपाईंका फाइलहरू स्क्यान गर्ने काम पूरा भएको छ र ती फाइलहरू <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> मा सुरक्षित गरिएका छन्।}}</translation>
@@ -597,6 +600,7 @@
 <translation id="6760706756348334449">भोल्युम घटाउनुहोस्</translation>
 <translation id="6766275201586212568">DNS रिजोल्युसन पूरा हुन सकेनन्</translation>
 <translation id="6768237774506518020">DNS रिजोल्युसन पूरा हुन नसक्ने दर उच्च छ</translation>
+<translation id="6791471867139427246">किबोर्डको प्रकाशको रङ</translation>
 <translation id="680983167891198932">की</translation>
 <translation id="6816797338148849397">तपाईंले चयन गर्नुभएको पाठसँग सम्बन्धित जानकारी उपलब्ध छ। उक्त जानकारी प्राप्त गर्न अप एरो की प्रयोग गर्नुहोस्।</translation>
 <translation id="6853312040151791195">डिस्चार्ज हुने दर</translation>
@@ -642,6 +646,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Chromebook को मद्दतसम्बन्धी फोरममा विशेषज्ञसँग मद्दत माग्नुहोस्</translation>
+<translation id="7311368985037279727">किबोर्डको रङ</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Google Search मा परिणाम हेर्न Search र Space बटन एकै चोटि थिच्नुहोस्।</translation>
 <translation id="7343649194310845056">नेटवर्कसम्बन्धी यन्त्रहरू</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index 1b4a2cd..f0f1241 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Volume omhoog</translation>
 <translation id="1555130319947370107">Blauw</translation>
 <translation id="155865706765934889">Touchpad</translation>
+<translation id="1561927818299383735">kleur van achtergrondverlichting</translation>
 <translation id="1565038567006703504">Kan <ph name="DEVICE_NAME" /> niet updaten</translation>
 <translation id="1567064801249837505">Albums</translation>
 <translation id="1572585716423026576">Instellen als achtergrond</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Routines opnieuw uitvoeren</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">kleur van achtergrondverlichting</translation>
 <translation id="5294769550414936029">versie <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Venster verplaatsen naar bureau</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Opnieuw starten</translation>
 <translation id="5901630391730855834">Geel</translation>
 <translation id="5903200662178656908">Apparaat is een combinatie van toetsenbord en muis.</translation>
+<translation id="5907649332524363701">toetskleur</translation>
 <translation id="5916084858004523819">Verboden</translation>
 <translation id="5916664084637901428">Aan</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Je bestand is gescand en opgeslagen in <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Je bestanden zijn gescand en opgeslagen in <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Volume omlaag</translation>
 <translation id="6766275201586212568">Mislukte DNS-omzettingen</translation>
 <translation id="6768237774506518020">Hoog percentage mislukte DNS-omzettingen</translation>
+<translation id="6791471867139427246">kleur van toetsenbordverlichting</translation>
 <translation id="680983167891198932">Sleutel</translation>
 <translation id="6816797338148849397">Er is informatie met betrekking tot je selectie beschikbaar. Gebruik de pijl-omhoog om deze te openen.</translation>
 <translation id="6853312040151791195">Ontlaadsnelheid</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Vraag het aan de experts op het Helpforum van Chromebook</translation>
+<translation id="7311368985037279727">toetsenbordkleur</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; druk op de knop Zoeken en de spatiebalk om het resultaat te bekijken in Google Zoeken</translation>
 <translation id="7343649194310845056">Netwerkapparaten</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 446cca4..6b9a709 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Aumentar o volume</translation>
 <translation id="1555130319947370107">Azul</translation>
 <translation id="155865706765934889">Touchpad</translation>
+<translation id="1561927818299383735">cor retroiluminada</translation>
 <translation id="1565038567006703504">Não é possível atualizar o dispositivo <ph name="DEVICE_NAME" /></translation>
 <translation id="1567064801249837505">Álbuns</translation>
 <translation id="1572585716423026576">Definir como imagem de fundo</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Executar novamente as Rotinas</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">cor da retroiluminação</translation>
 <translation id="5294769550414936029">versão <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Mover janela para o espaço de trabalho</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5901630391730855834">Amarelo</translation>
 <translation id="5903200662178656908">O dispositivo é uma combinação de teclado e rato.</translation>
+<translation id="5907649332524363701">cor das teclas</translation>
 <translation id="5916084858004523819">Proibido</translation>
 <translation id="5916664084637901428">Ativado</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{O seu ficheiro foi digitalizado com êxito e guardado em <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Os seus ficheiros foram digitalizados com êxito e guardados em <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Diminuir volume</translation>
 <translation id="6766275201586212568">Resoluções de DNS com falhas</translation>
 <translation id="6768237774506518020">Taxa de falhas de resolução de DNS elevada</translation>
+<translation id="6791471867139427246">cor da luz do teclado</translation>
 <translation id="680983167891198932">Chave</translation>
 <translation id="6816797338148849397">Informações disponíveis relacionadas com a sua seleção. Utilize a tecla da seta para cima para aceder.</translation>
 <translation id="6853312040151791195">Velocidade de descarregamento</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Pergunte aos especialistas no Fórum de Ajuda do Chromebook</translation>
+<translation id="7311368985037279727">cor do teclado</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; prima Pesquisar e a tecla de espaço para ver o resultado na Pesquisa Google.</translation>
 <translation id="7343649194310845056">Dispositivos de rede</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index 3689509..384eb0d3 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Zvýšenie hlasitosti</translation>
 <translation id="1555130319947370107">Modrá</translation>
 <translation id="155865706765934889">Touchpad</translation>
+<translation id="1561927818299383735">farba podsvietenia</translation>
 <translation id="1565038567006703504"><ph name="DEVICE_NAME" /> sa nedá aktualizovať</translation>
 <translation id="1567064801249837505">Albumy</translation>
 <translation id="1572585716423026576">Nastaviť ako tapetu</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Znova spustiť postupy</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">farba podsvietenia</translation>
 <translation id="5294769550414936029">verzia <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Presunúť okno na plochu</translation>
 <translation id="5304899856529773394">EvDo</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Reštartovať</translation>
 <translation id="5901630391730855834">Žltá</translation>
 <translation id="5903200662178656908">Zariadenie je kombináciou klávesnice a myši.</translation>
+<translation id="5907649332524363701">farba klávesov</translation>
 <translation id="5916084858004523819">Zakázané</translation>
 <translation id="5916664084637901428">Zapnuté</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Súbor bol úspešne naskenovaný a uložený do priečinka <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}few{Súbory boli úspešne naskenované a uložené do priečinka <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}many{Súbory boli úspešne naskenované a uložené do priečinka <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Súbory boli úspešne naskenované a uložené do priečinka <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Zníženie hlasitosti</translation>
 <translation id="6766275201586212568">Neúspešné preklady DNS</translation>
 <translation id="6768237774506518020">Vysoká miera neúspešných prekladov DNS</translation>
+<translation id="6791471867139427246">farba osvetlenia klávesnice</translation>
 <translation id="680983167891198932">Kľúč</translation>
 <translation id="6816797338148849397">K dispozícii sú informácie súvisiace s vaším výberom. Prístup získate pomocou šípky nahor.</translation>
 <translation id="6853312040151791195">Rýchlosť vybíjania</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Spýtajte sa odborníkov vo fóre pomoci pre Chromebooky</translation>
+<translation id="7311368985037279727">farba klávesnice</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; stlačením klávesa vyhľadávania a medzerníka zobrazíte výsledok vo Vyhľadávaní Google.</translation>
 <translation id="7343649194310845056">Sieťové zariadenia</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 4d922bdf..f72aea1c 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Povečanje glasnosti</translation>
 <translation id="1555130319947370107">Modra</translation>
 <translation id="155865706765934889">Sledilna ploščica</translation>
+<translation id="1561927818299383735">barva osvetlitve</translation>
 <translation id="1565038567006703504">Naprave <ph name="DEVICE_NAME" /> ni mogoče posodobiti.</translation>
 <translation id="1567064801249837505">Albumi</translation>
 <translation id="1572585716423026576">Nastavi kot ozadje</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Znova zaženi rutine</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">barva osvetlitve ozadja</translation>
 <translation id="5294769550414936029">različica <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Premik okna na namizje</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Znova zaženi</translation>
 <translation id="5901630391730855834">Rumena</translation>
 <translation id="5903200662178656908">Naprava je kombinacija tipkovnice in miške.</translation>
+<translation id="5907649332524363701">barva tipk</translation>
 <translation id="5916084858004523819">Onemogočeno</translation>
 <translation id="5916664084637901428">Vklopljeno</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Vaša datoteka je bila uspešno pregledana in je shranjena v mapo <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}one{Vaše datoteke so bile uspešno pregledane in so shranjene v mapo <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}two{Vaše datoteke so bile uspešno pregledane in so shranjene v mapo <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}few{Vaše datoteke so bile uspešno pregledane in so shranjene v mapo <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Vaše datoteke so bile uspešno pregledane in so shranjene v mapo <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Zmanjšanje glasnosti</translation>
 <translation id="6766275201586212568">Neuspele razrešitve DNS</translation>
 <translation id="6768237774506518020">Visoko število napak pri razreševanju DNS</translation>
+<translation id="6791471867139427246">barva svetlobe tipkovnice</translation>
 <translation id="680983167891198932">Ključ</translation>
 <translation id="6816797338148849397">Podatki, ki so na voljo v zvezi z vašim izborom. Za dostop uporabite tipko s puščico gor.</translation>
 <translation id="6853312040151791195">Hitrost praznjenja</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Vprašajte strokovnjake v forumu s pomočjo za Chromebook.</translation>
+<translation id="7311368985037279727">barva tipkovnice</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Pritisnite tipko za iskanje in preslednico, če si želite rezultat ogledati v Iskanju Google.</translation>
 <translation id="7343649194310845056">Omrežne naprave</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index ebd9434..4d91dfd 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Pojačajte zvuk</translation>
 <translation id="1555130319947370107">Plava</translation>
 <translation id="155865706765934889">Dodirna tabla</translation>
+<translation id="1561927818299383735">boja pozadinskog osvetljenja</translation>
 <translation id="1565038567006703504">Ažuriranje uređaja <ph name="DEVICE_NAME" /> nije uspelo</translation>
 <translation id="1567064801249837505">Albumi</translation>
 <translation id="1572585716423026576">Postavi kao pozadinu</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Ponovo pokreni rutine</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">boja pozadinskog osvetljenja</translation>
 <translation id="5294769550414936029">verzija <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Premestite prozor na radnu površinu</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Pokreni ponovo</translation>
 <translation id="5901630391730855834">Žuta</translation>
 <translation id="5903200662178656908">Uređaj je kombinacija tastature i miša.</translation>
+<translation id="5907649332524363701">boja ključa</translation>
 <translation id="5916084858004523819">Zabranjeno</translation>
 <translation id="5916664084637901428">Uključeno</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Fajl je skeniran i sačuvan u folderu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}one{Fajlovi su skenirani i sačuvani u folderu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}few{Fajlovi su skenirani i sačuvani u folderu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Fajlovi su skenirani i sačuvani u folderu <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Utišajte zvuk</translation>
 <translation id="6766275201586212568">Neuspešna DNS razrešavanja</translation>
 <translation id="6768237774506518020">Velika stopa neuspeha DNS razrešavanja</translation>
+<translation id="6791471867139427246">boja osvetljenja tastature</translation>
 <translation id="680983167891198932">Ključ</translation>
 <translation id="6816797338148849397">Dostupne su informacije vezane za vaš izbor. Koristite taster sa strelicom nagore da biste im pristupili.</translation>
 <translation id="6853312040151791195">Brzina pražnjenja</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Pitajte stručnjake na Chromebook forumu pomoći</translation>
+<translation id="7311368985037279727">boja tastature</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Pritisnite taster za pretragu i razmak da biste videli rezultat u Google pretrazi.</translation>
 <translation id="7343649194310845056">Mrežni uređaji</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index ed07075..080e219 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Појачајте звук</translation>
 <translation id="1555130319947370107">Плава</translation>
 <translation id="155865706765934889">Додирна табла</translation>
+<translation id="1561927818299383735">боја позадинског осветљења</translation>
 <translation id="1565038567006703504">Ажурирање уређаја <ph name="DEVICE_NAME" /> није успело</translation>
 <translation id="1567064801249837505">Албуми</translation>
 <translation id="1572585716423026576">Постави као позадину</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Поново покрени рутине</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">боја позадинског осветљења</translation>
 <translation id="5294769550414936029">верзија <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Преместите прозор на радну површину</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Покрени поново</translation>
 <translation id="5901630391730855834">Жута</translation>
 <translation id="5903200662178656908">Уређај је комбинација тастатуре и миша.</translation>
+<translation id="5907649332524363701">боја кључа</translation>
 <translation id="5916084858004523819">Забрањено</translation>
 <translation id="5916664084637901428">Укључено</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Фајл је скениран и сачуван у фолдеру <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}one{Фајлови су скенирани и сачувани у фолдеру <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}few{Фајлови су скенирани и сачувани у фолдеру <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}other{Фајлови су скенирани и сачувани у фолдеру <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" />.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Утишајте звук</translation>
 <translation id="6766275201586212568">Неуспешна DNS разрешавања</translation>
 <translation id="6768237774506518020">Велика стопа неуспеха DNS разрешавања</translation>
+<translation id="6791471867139427246">боја осветљења тастатуре</translation>
 <translation id="680983167891198932">Кључ</translation>
 <translation id="6816797338148849397">Доступне су информације везане за ваш избор. Користите тастер са стрелицом нагоре да бисте им приступили.</translation>
 <translation id="6853312040151791195">Брзина пражњења</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Питајте стручњаке на Chromebook форуму помоћи</translation>
+<translation id="7311368985037279727">боја тастатуре</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Притисните тастер за претрагу и размак да бисте видели резултат у Google претрази.</translation>
 <translation id="7343649194310845056">Мрежни уређаји</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index 9b92af3..82299811 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -67,6 +67,7 @@
 <translation id="152892567002884378">Sesi açar</translation>
 <translation id="1555130319947370107">Mavi</translation>
 <translation id="155865706765934889">Dokunmatik Tuş Takımı</translation>
+<translation id="1561927818299383735">arkadan aydınlatmalı renk</translation>
 <translation id="1565038567006703504"><ph name="DEVICE_NAME" /> güncellenemiyor</translation>
 <translation id="1567064801249837505">Albümler</translation>
 <translation id="1572585716423026576">Duvar kağıdı yap</translation>
@@ -437,6 +438,7 @@
 <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation>
 <translation id="5275828089655680674">Rutinleri Tekrar Çalıştır</translation>
 <translation id="5286252187236914003">L2TP/IPsec</translation>
+<translation id="5286263799730375393">arka ışık rengi</translation>
 <translation id="5294769550414936029">sürüm: <ph name="MILESTONE_VERSION" /></translation>
 <translation id="5300814202279832142">Pencereyi masaya taşı</translation>
 <translation id="5304899856529773394">EVDO</translation>
@@ -497,6 +499,7 @@
 <translation id="5895138241574237353">Yeniden başlat</translation>
 <translation id="5901630391730855834">Sarı</translation>
 <translation id="5903200662178656908">Bu cihaz bir klavye ile fare kombinasyonudur.</translation>
+<translation id="5907649332524363701">tuş rengi</translation>
 <translation id="5916084858004523819">Yasak</translation>
 <translation id="5916664084637901428">Açık</translation>
 <translation id="5921506667911082617">{COUNT,plural, =1{Dosyanız başarıyla taranarak <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> klasörüne kaydedildi.}other{Dosyalarınız başarıyla taranarak <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> klasörüne kaydedildi.}}</translation>
@@ -598,6 +601,7 @@
 <translation id="6760706756348334449">Sesi kısar</translation>
 <translation id="6766275201586212568">Başarısız DNS çözümlemeleri</translation>
 <translation id="6768237774506518020">DNS çözümleme hata oranı yüksek</translation>
+<translation id="6791471867139427246">klavye ışığı rengi</translation>
 <translation id="680983167891198932">Anahtar</translation>
 <translation id="6816797338148849397">Seçiminizle ilgili bilgi mevcut. Erişmek için yukarı ok tuşunu kullanın.</translation>
 <translation id="6853312040151791195">Şarjın boşalma hızı</translation>
@@ -643,6 +647,7 @@
 <translation id="7302860742311162920">ICCID</translation>
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7308203371573257315">Chromebook Yardım Forumu'nda uzmanlara soru sorun</translation>
+<translation id="7311368985037279727">klavye rengi</translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Sonucu Google Arama'da görmek için Ara'ya ve Boşluk çubuğuna basın.</translation>
 <translation id="7343649194310845056">Ağ Cihazları</translation>
diff --git a/components/android_autofill/browser/android_autofill_manager.cc b/components/android_autofill/browser/android_autofill_manager.cc
index 7500ea89..4166196d 100644
--- a/components/android_autofill/browser/android_autofill_manager.cc
+++ b/components/android_autofill/browser/android_autofill_manager.cc
@@ -110,11 +110,11 @@
     const gfx::RectF& bounding_box,
     int query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   if (auto* provider = GetAutofillProvider()) {
     provider->OnAskForValuesToFill(this, form, field, bounding_box, query_id,
                                    autoselect_first_suggestion,
-                                   touch_to_fill_eligible);
+                                   form_element_was_clicked);
   }
 }
 
diff --git a/components/android_autofill/browser/android_autofill_manager.h b/components/android_autofill/browser/android_autofill_manager.h
index 1ba6e4e..72e2baa 100644
--- a/components/android_autofill/browser/android_autofill_manager.h
+++ b/components/android_autofill/browser/android_autofill_manager.h
@@ -112,7 +112,7 @@
       const gfx::RectF& bounding_box,
       int query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) override;
+      FormElementWasClicked form_element_was_clicked) override;
 
   void OnFocusOnFormFieldImpl(const FormData& form,
                               const FormFieldData& field,
diff --git a/components/android_autofill/browser/autofill_provider.h b/components/android_autofill/browser/autofill_provider.h
index 92bf213..4cf79f0 100644
--- a/components/android_autofill/browser/autofill_provider.h
+++ b/components/android_autofill/browser/autofill_provider.h
@@ -41,7 +41,7 @@
       const gfx::RectF& bounding_box,
       int32_t query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) = 0;
+      FormElementWasClicked form_element_was_clicked) = 0;
 
   virtual void OnTextFieldDidChange(AndroidAutofillManager* manager,
                                     const FormData& form,
diff --git a/components/android_autofill/browser/autofill_provider_android.cc b/components/android_autofill/browser/autofill_provider_android.cc
index c05b72d..f422a27 100644
--- a/components/android_autofill/browser/autofill_provider_android.cc
+++ b/components/android_autofill/browser/autofill_provider_android.cc
@@ -107,7 +107,7 @@
     const gfx::RectF& bounding_box,
     int32_t query_id,
     bool /*unused_autoselect_first_suggestion*/,
-    TouchToFillEligible /*unused_touch_to_fill_eligible*/) {
+    FormElementWasClicked /*unused_form_element_was_clicked*/) {
   // The id isn't passed to Java side because Android API guarantees the
   // response is always for current session, so we just use the current id
   // in response, see OnAutofillAvailable.
diff --git a/components/android_autofill/browser/autofill_provider_android.h b/components/android_autofill/browser/autofill_provider_android.h
index cfd10a6..6391b4d8 100644
--- a/components/android_autofill/browser/autofill_provider_android.h
+++ b/components/android_autofill/browser/autofill_provider_android.h
@@ -54,7 +54,7 @@
       const gfx::RectF& bounding_box,
       int32_t query_id,
       bool /*unused_autoselect_first_suggestion*/,
-      TouchToFillEligible /*unused_touch_to_fill_eligible*/) override;
+      FormElementWasClicked /*unused_form_element_was_clicked*/) override;
   void OnTextFieldDidChange(AndroidAutofillManager* manager,
                             const FormData& form,
                             const FormFieldData& field,
diff --git a/components/android_autofill/browser/autofill_provider_unittest.cc b/components/android_autofill/browser/autofill_provider_unittest.cc
index 718e3cb..febab2c 100644
--- a/components/android_autofill/browser/autofill_provider_unittest.cc
+++ b/components/android_autofill/browser/autofill_provider_unittest.cc
@@ -27,7 +27,7 @@
     OnAskForValuesToFillImpl(FormData(), FormFieldData(), gfx::RectF(),
                              /*query_id=*/0,
                              /*autoselect_first_suggestion=*/false,
-                             TouchToFillEligible(false));
+                             FormElementWasClicked(false));
   }
 };
 
@@ -47,7 +47,7 @@
       const gfx::RectF& bounding_box,
       int32_t query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) override {
+      FormElementWasClicked form_element_was_clicked) override {
     manager_ = manager;
   }
   void OnServerQueryRequestError(AndroidAutofillManager* manager,
diff --git a/components/android_autofill/browser/test_autofill_provider.h b/components/android_autofill/browser/test_autofill_provider.h
index 2930740..f3a4834 100644
--- a/components/android_autofill/browser/test_autofill_provider.h
+++ b/components/android_autofill/browser/test_autofill_provider.h
@@ -27,7 +27,7 @@
       const gfx::RectF& bounding_box,
       int32_t query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) override {}
+      FormElementWasClicked form_element_was_clicked) override {}
   void OnTextFieldDidChange(AndroidAutofillManager* manager,
                             const FormData& form,
                             const FormFieldData& field,
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
index 8c12f8b..d6cdb075 100644
--- a/components/autofill/content/browser/content_autofill_driver.cc
+++ b/components/autofill/content/browser/content_autofill_driver.cc
@@ -324,10 +324,10 @@
     const gfx::RectF& bounding_box,
     int32_t query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   autofill_manager_->OnAskForValuesToFill(form, field, bounding_box, query_id,
                                           autoselect_first_suggestion,
-                                          touch_to_fill_eligible);
+                                          form_element_was_clicked);
 }
 
 void ContentAutofillDriver::HidePopupImpl() {
@@ -483,7 +483,7 @@
     const gfx::RectF& bounding_box,
     int32_t query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   if (!bad_message::CheckFrameNotPrerendering(render_frame_host_))
     return;
   FormData form = raw_form;
@@ -492,7 +492,7 @@
   GetAutofillRouter().AskForValuesToFill(
       this, form, field,
       TransformBoundingBoxToViewportCoordinates(bounding_box), query_id,
-      autoselect_first_suggestion, touch_to_fill_eligible);
+      autoselect_first_suggestion, form_element_was_clicked);
 }
 
 void ContentAutofillDriver::HidePopup() {
diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h
index fc6caef..3ece234 100644
--- a/components/autofill/content/browser/content_autofill_driver.h
+++ b/components/autofill/content/browser/content_autofill_driver.h
@@ -220,12 +220,13 @@
   void SelectControlDidChange(const FormData& form,
                               const FormFieldData& field,
                               const gfx::RectF& bounding_box) override;
-  void AskForValuesToFill(const FormData& form,
-                          const FormFieldData& field,
-                          const gfx::RectF& bounding_box,
-                          int32_t query_id,
-                          bool autoselect_first_suggestion,
-                          TouchToFillEligible touch_to_fill_eligible) override;
+  void AskForValuesToFill(
+      const FormData& form,
+      const FormFieldData& field,
+      const gfx::RectF& bounding_box,
+      int32_t query_id,
+      bool autoselect_first_suggestion,
+      FormElementWasClicked form_element_was_clicked) override;
   void HidePopup() override;
   void FocusNoLongerOnForm(bool had_interacted_form) override;
   void FocusOnFormField(const FormData& form,
@@ -264,7 +265,7 @@
                               const gfx::RectF& bounding_box,
                               int32_t query_id,
                               bool autoselect_first_suggestion,
-                              TouchToFillEligible touch_to_fill_eligible);
+                              FormElementWasClicked form_element_was_clicked);
   void HidePopupImpl();
   void FocusNoLongerOnFormImpl(bool had_interacted_form);
   void FocusOnFormFieldImpl(const FormData& form,
diff --git a/components/autofill/content/browser/content_autofill_router.cc b/components/autofill/content/browser/content_autofill_router.cc
index a507bb0..19fa310 100644
--- a/components/autofill/content/browser/content_autofill_router.cc
+++ b/components/autofill/content/browser/content_autofill_router.cc
@@ -354,11 +354,11 @@
     const gfx::RectF& bounding_box,
     int32_t query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   if (!base::FeatureList::IsEnabled(features::kAutofillAcrossIframes)) {
     source->AskForValuesToFillImpl(form, field, bounding_box, query_id,
                                    autoselect_first_suggestion,
-                                   touch_to_fill_eligible);
+                                   form_element_was_clicked);
     return;
   }
 
@@ -376,7 +376,7 @@
   SetLastQueriedTarget(target);
   target->AskForValuesToFillImpl(browser_form, field, bounding_box, query_id,
                                  autoselect_first_suggestion,
-                                 touch_to_fill_eligible);
+                                 form_element_was_clicked);
 }
 
 void ContentAutofillRouter::HidePopup(ContentAutofillDriver* source) {
diff --git a/components/autofill/content/browser/content_autofill_router.h b/components/autofill/content/browser/content_autofill_router.h
index 72ec0866..a5bad43b 100644
--- a/components/autofill/content/browser/content_autofill_router.h
+++ b/components/autofill/content/browser/content_autofill_router.h
@@ -195,7 +195,7 @@
                           const gfx::RectF& bounding_box,
                           int32_t query_id,
                           bool autoselect_first_suggestion,
-                          TouchToFillEligible touch_to_fill_eligible);
+                          FormElementWasClicked form_element_was_clicked);
   void HidePopup(ContentAutofillDriver* source_driver);
   void FocusNoLongerOnForm(ContentAutofillDriver* source_driver,
                            bool had_interacted_form);
diff --git a/components/autofill/content/common/mojom/autofill_driver.mojom b/components/autofill/content/common/mojom/autofill_driver.mojom
index e823c14..dcdb359 100644
--- a/components/autofill/content/common/mojom/autofill_driver.mojom
+++ b/components/autofill/content/common/mojom/autofill_driver.mojom
@@ -53,15 +53,14 @@
   // Queries the browser for Autofill suggestions for a form input field.
   // For autofill this means asking the user which values to fill.
   // |query_id| is the request ID which is used to map responses correctly.
-  // |touch_to_fill_eligible| indicates if the Touch To Fill surface could
-  // be used for showing suggestions (e.g. when the user taps an input element
-  // but not on text change).
+  // |form_element_was_clicked| indicates the user tapped an input element. When
+  // this happens, surfaces like Touch To Fill and Fast Checkout might be shown.
   AskForValuesToFill(FormData form,
                      FormFieldData field,
                      gfx.mojom.RectF bounding_box,
                      int32 query_id,
                      bool autoselect_first_suggestion,
-                     TouchToFillEligible touch_to_fill_eligible);
+                     FormElementWasClicked form_element_was_clicked);
 
   // Instructs the browser to hide the Autofill popup if it is open.
   HidePopup();
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc
index e9b7331..58d866f0 100644
--- a/components/autofill/content/renderer/autofill_agent.cc
+++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -175,15 +175,16 @@
   void SelectFieldOptionsDidChange(const FormData& form) override {
     DeferMsg(&mojom::AutofillDriver::SelectFieldOptionsDidChange, form);
   }
-  void AskForValuesToFill(const FormData& form,
-                          const FormFieldData& field,
-                          const gfx::RectF& bounding_box,
-                          int32_t query_id,
-                          bool autoselect_first_suggestion,
-                          TouchToFillEligible touch_to_fill_eligible) override {
+  void AskForValuesToFill(
+      const FormData& form,
+      const FormFieldData& field,
+      const gfx::RectF& bounding_box,
+      int32_t query_id,
+      bool autoselect_first_suggestion,
+      FormElementWasClicked form_element_was_clicked) override {
     DeferMsg(&mojom::AutofillDriver::AskForValuesToFill, form, field,
              bounding_box, query_id, autoselect_first_suggestion,
-             touch_to_fill_eligible);
+             form_element_was_clicked);
   }
   void HidePopup() override { DeferMsg(&mojom::AutofillDriver::HidePopup); }
   void FocusNoLongerOnForm(bool had_interacted_form) override {
@@ -823,7 +824,7 @@
   }
 
   QueryAutofillSuggestions(element, options.autoselect_first_suggestion,
-                           options.touch_to_fill_eligible);
+                           options.form_element_was_clicked);
 }
 
 void AutofillAgent::SetQueryPasswordSuggestion(bool query) {
@@ -891,7 +892,7 @@
 void AutofillAgent::QueryAutofillSuggestions(
     const WebFormControlElement& element,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   blink::WebLocalFrame* frame = element.GetDocument().GetFrame();
   if (!frame)
     return;
@@ -938,7 +939,7 @@
   is_popup_possibly_visible_ = true;
   GetAutofillDriver().AskForValuesToFill(
       form, field, field.bounds, autofill_query_id_,
-      autoselect_first_suggestion, touch_to_fill_eligible);
+      autoselect_first_suggestion, form_element_was_clicked);
 }
 
 void AutofillAgent::DoFillFieldWithValue(const std::u16string& value,
@@ -1140,7 +1141,7 @@
                 // have a common prefix with the default value.
                 .show_full_suggestion_list =
                     element.IsAutofilled() || !element.UserHasEditedTheField(),
-                .touch_to_fill_eligible = TouchToFillEligible(true)});
+                .form_element_was_clicked = FormElementWasClicked(true)});
 
   SendPotentiallySubmittedFormToBrowser();
 }
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h
index c2f1e04..2d373db6 100644
--- a/components/autofill/content/renderer/autofill_agent.h
+++ b/components/autofill/content/renderer/autofill_agent.h
@@ -179,9 +179,10 @@
     // dropdown is shown. Enabled when the user presses ARROW_DOWN on a field.
     bool autoselect_first_suggestion{false};
 
-    // Specifies that suggestions are triggered in a way it makes sense to
-    // prompt the Touch To Fill surface first (e.g. on click).
-    TouchToFillEligible touch_to_fill_eligible{false};
+    // Signals that suggestions are triggered due to a click on an input
+    // element. The signal is used to understand whether other surfaces (e.g.
+    // TouchToFill, FastCheckout) can be triggered.
+    FormElementWasClicked form_element_was_clicked{false};
   };
 
   // content::RenderFrameObserver:
@@ -250,7 +251,7 @@
   // |element|.
   void QueryAutofillSuggestions(const blink::WebFormControlElement& element,
                                 bool autoselect_first_suggestion,
-                                TouchToFillEligible touch_to_fill_eligible);
+                                FormElementWasClicked form_element_was_clicked);
 
   // Sets the selected value of the the field identified by |field_id| to
   // |suggested_value|.
diff --git a/components/autofill/content/renderer/autofill_agent_browsertest.cc b/components/autofill/content/renderer/autofill_agent_browsertest.cc
index e70e58e..3b8a515 100644
--- a/components/autofill/content/renderer/autofill_agent_browsertest.cc
+++ b/components/autofill/content/renderer/autofill_agent_browsertest.cc
@@ -97,7 +97,7 @@
                const gfx::RectF& bounding_box,
                int32_t query_id,
                bool autoselect_first_suggestion,
-               TouchToFillEligible touch_to_fill_eligible),
+               FormElementWasClicked form_element_was_clicked),
               (override));
   MOCK_METHOD(void, HidePopup, (), (override));
   MOCK_METHOD(void,
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index acc29385..60d78cb 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1338,6 +1338,9 @@
     const WebElement& form_or_fieldset,
     const base::flat_set<std::pair<FormFieldData*, ShadowFieldData>,
                          CompareByRendererId>& field_set) {
+  DCHECK(!base::FeatureList::IsEnabled(
+      features::kAutofillImprovedLabelForInference));
+
   static base::NoDestructor<WebString> kLabel("label");
   static base::NoDestructor<WebString> kFor("for");
   static base::NoDestructor<WebString> kHidden("hidden");
@@ -1373,12 +1376,15 @@
       continue;
 
     std::u16string label_text = FindChildText(label);
+    if (label_text.empty())
+      continue;
 
     // Concatenate labels because some sites might have multiple label
     // candidates.
-    if (!field_data->label.empty() && !label_text.empty())
+    if (!field_data->label.empty())
       field_data->label += u" ";
     field_data->label += label_text;
+    field_data->label_source = FormFieldData::LabelSource::kFor;
     base::UmaHistogramEnumeration(kAssignedLabelSourceHistogram, label_source);
   }
 }
@@ -1516,6 +1522,11 @@
     FormFieldData& field = form->fields[field_index++];
     if (field.label.empty())
       InferLabelForElement(control_element, field.label, field.label_source);
+    // At this point, label-for and heuristic label inference has happened and
+    // `field.label_source` is set appropriately. In case no label was found,
+    // it is set to kUnknown.
+    base::UmaHistogramEnumeration("Autofill.LabelInference.InferredLabelSource",
+                                  field.label_source);
     TruncateString(&field.label, kMaxDataLength);
 
     if (optional_field && *form_control_element == control_element) {
@@ -1961,6 +1972,8 @@
   if (base::FeatureList::IsEnabled(
           features::kAutofillImprovedLabelForInference)) {
     field->label = GetAssignedLabel(element);
+    if (!field->label.empty())
+      field->label_source = FormFieldData::LabelSource::kFor;
   }
   if (base::EqualsCaseInsensitiveASCII(element.GetAttribute(*kRole).Utf16(),
                                        "presentation")) {
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index e757918..2a5e9532 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -161,6 +161,9 @@
     "data_model/phone_number.h",
     "data_model/test_data_creator.cc",
     "data_model/test_data_creator.h",
+    "fast_checkout_delegate.h",
+    "fast_checkout_delegate_impl.cc",
+    "fast_checkout_delegate_impl.h",
     "field_filler.cc",
     "field_filler.h",
     "field_types.cc",
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 54ae9d9..c9f638b2 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -467,7 +467,7 @@
     const gfx::RectF& bounding_box,
     int query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   if (!IsValidFormData(form) || !IsValidFormFieldData(field))
     return;
 
@@ -475,7 +475,7 @@
   if (!base::FeatureList::IsEnabled(features::kAutofillParseAsync)) {
     OnAskForValuesToFillImpl(form, field, bounding_box, query_id,
                              autoselect_first_suggestion,
-                             touch_to_fill_eligible);
+                             form_element_was_clicked);
     NotifyObservers(&Observer::OnAfterAskForValuesToFill);
     return;
   }
@@ -483,7 +483,7 @@
       form, ParsingCallback(&AutofillManager::OnAskForValuesToFillImpl,
                             &Observer::OnAfterAskForValuesToFill, field,
                             bounding_box, query_id, autoselect_first_suggestion,
-                            touch_to_fill_eligible));
+                            form_element_was_clicked));
 }
 
 void AutofillManager::OnFocusOnFormField(const FormData& form,
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h
index 2354a2f..90768c2 100644
--- a/components/autofill/core/browser/autofill_manager.h
+++ b/components/autofill/core/browser/autofill_manager.h
@@ -171,12 +171,13 @@
   // used for showing suggestion. Note that it doesn't guarantee the given form
   // input field is eligible for autofilling.
   // Virtual for testing.
-  virtual void OnAskForValuesToFill(const FormData& form,
-                                    const FormFieldData& field,
-                                    const gfx::RectF& bounding_box,
-                                    int query_id,
-                                    bool autoselect_first_suggestion,
-                                    TouchToFillEligible touch_to_fill_eligible);
+  virtual void OnAskForValuesToFill(
+      const FormData& form,
+      const FormFieldData& field,
+      const gfx::RectF& bounding_box,
+      int query_id,
+      bool autoselect_first_suggestion,
+      FormElementWasClicked form_element_was_clicked);
 
   // Invoked when |form|'s |field| has focus.
   // |bounding_box| are viewport coordinates.
@@ -387,7 +388,7 @@
       const gfx::RectF& bounding_box,
       int query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) = 0;
+      FormElementWasClicked form_element_was_clicked) = 0;
 
   virtual void OnFocusOnFormFieldImpl(const FormData& form,
                                       const FormFieldData& field,
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index 21c00f6..87afd85b 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -140,7 +140,7 @@
                const gfx::RectF& bounding_box,
                int query_id,
                bool autoselect_first_suggestion,
-               TouchToFillEligible touch_to_fill_eligible),
+               FormElementWasClicked form_element_was_clicked),
               (override));
   MOCK_METHOD(void,
               OnFocusOnFormFieldImpl,
diff --git a/components/autofill/core/browser/autofill_test_utils.cc b/components/autofill/core/browser/autofill_test_utils.cc
index 8d74afe8..bd135c3 100644
--- a/components/autofill/core/browser/autofill_test_utils.cc
+++ b/components/autofill/core/browser/autofill_test_utils.cc
@@ -170,6 +170,16 @@
   field->is_focusable = true;
 }
 
+void CreateTestFormField(const char* label,
+                         const char* name,
+                         const char* value,
+                         const char* type,
+                         const char* autocomplete,
+                         FormFieldData* field) {
+  CreateTestFormField(label, name, value, type, field);
+  field->autocomplete_attribute = autocomplete;
+}
+
 void CreateTestSelectField(const char* label,
                            const char* name,
                            const char* value,
diff --git a/components/autofill/core/browser/autofill_test_utils.h b/components/autofill/core/browser/autofill_test_utils.h
index ecb2ada0..0235dad 100644
--- a/components/autofill/core/browser/autofill_test_utils.h
+++ b/components/autofill/core/browser/autofill_test_utils.h
@@ -125,6 +125,13 @@
                          const char* type,
                          FormFieldData* field);
 
+void CreateTestFormField(const char* label,
+                         const char* name,
+                         const char* value,
+                         const char* type,
+                         const char* autocomplete,
+                         FormFieldData* field);
+
 // Provides a quick way to populate a select field.
 void CreateTestSelectField(const char* label,
                            const char* name,
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index 5a8d48e..40d2803 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -60,6 +60,7 @@
 #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/data_model/phone_number.h"
+#include "components/autofill/core/browser/fast_checkout_delegate_impl.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_data_importer.h"
 #include "components/autofill/core/browser/form_structure.h"
@@ -445,6 +446,7 @@
                       enable_download_manager),
       external_delegate_(
           std::make_unique<AutofillExternalDelegate>(this, driver)),
+      fast_checkout_delegate_(std::make_unique<FastCheckoutDelegateImpl>(this)),
       touch_to_fill_delegate_(std::make_unique<TouchToFillDelegateImpl>(this)),
       app_locale_(app_locale),
       personal_data_(client->GetPersonalDataManager()),
@@ -982,7 +984,7 @@
     const gfx::RectF& transformed_box,
     int query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   if (base::FeatureList::IsEnabled(features::kAutofillDisableFilling)) {
     return;
   }
@@ -1096,13 +1098,25 @@
 
   single_field_form_fill_router_->CancelPendingQueries(this);
   if (touch_to_fill_delegate_->IsShowingTouchToFill() ||
-      (touch_to_fill_eligible &&
+      (form_element_was_clicked &&
        touch_to_fill_delegate_->TryToShowTouchToFill(query_id, form, field))) {
     // Touch To Fill surface is shown, so abort showing regular Autofill UI.
     // Now the flow is controlled by the |touch_to_fill_delegate_| instead
     // of |external_delegate_|.
     return;
   }
+
+  if (fast_checkout_delegate_->IsShowingFastCheckoutUI() ||
+      (form_element_was_clicked &&
+       fast_checkout_delegate_->TryToShowFastCheckout(field))) {
+    // The Fast Checkout surface is shown, so abort showing regular Autofill UI.
+    // Now the flow is controlled by the `fast_checkout_delegate_` instead
+    // of `external_delegate_`.
+    // In principle, touch_to_fill is prioritized, but the triggering surfaces
+    // are different and the two screens should never coincide.
+    return;
+  }
+
   // Send Autofill suggestions (could be an empty list).
   external_delegate_->OnSuggestionsReturned(query_id, suggestions,
                                             autoselect_first_suggestion,
@@ -1407,6 +1421,7 @@
 
   single_field_form_fill_router_->CancelPendingQueries(this);
   client()->HideAutofillPopup(PopupHidingReason::kRendererEvent);
+  fast_checkout_delegate_->HideFastCheckoutUI();
   touch_to_fill_delegate_->HideTouchToFill();
 }
 
@@ -1808,6 +1823,7 @@
   credit_card_action_ = mojom::RendererFormDataAction::kPreview;
   initial_interaction_timestamp_ = TimeTicks();
   external_delegate_->Reset();
+  fast_checkout_delegate_->Reset();
   touch_to_fill_delegate_->Reset();
   filling_context_.clear();
   form_interactions_counter_ = std::make_unique<FormInteractionsCounter>();
diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h
index c33ab84..0d18748 100644
--- a/components/autofill/core/browser/browser_autofill_manager.h
+++ b/components/autofill/core/browser/browser_autofill_manager.h
@@ -25,6 +25,7 @@
 #include "components/autofill/core/browser/autofill_driver.h"
 #include "components/autofill/core/browser/autofill_external_delegate.h"
 #include "components/autofill/core/browser/autofill_manager.h"
+#include "components/autofill/core/browser/fast_checkout_delegate.h"
 #include "components/autofill/core/browser/field_filler.h"
 #include "components/autofill/core/browser/form_types.h"
 #include "components/autofill/core/browser/metrics/form_events/address_form_event_logger.h"
@@ -328,6 +329,11 @@
     touch_to_fill_delegate_ = std::move(touch_to_fill_delegate);
   }
 
+  void SetFastCheckoutDelegateForTest(
+      std::unique_ptr<FastCheckoutDelegate> fast_checkout_delegate) {
+    fast_checkout_delegate_ = std::move(fast_checkout_delegate);
+  }
+
   // A public wrapper that calls |DeterminePossibleFieldTypesForUpload| for
   // testing purposes only.
   static void DeterminePossibleFieldTypesForUploadForTest(
@@ -395,7 +401,7 @@
       const gfx::RectF& transformed_box,
       int query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) override;
+      FormElementWasClicked form_element_was_clicked) override;
   void OnSelectControlDidChangeImpl(const FormData& form,
                                     const FormFieldData& field,
                                     const gfx::RectF& bounding_box) override;
@@ -675,6 +681,7 @@
   // Delegates to perform external processing (display, selection) on
   // our behalf.
   std::unique_ptr<AutofillExternalDelegate> external_delegate_;
+  std::unique_ptr<FastCheckoutDelegate> fast_checkout_delegate_;
   std::unique_ptr<TouchToFillDelegateImpl> touch_to_fill_delegate_;
 
   std::string app_locale_;
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
index 7493f1cd..275f226 100644
--- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -183,6 +183,23 @@
   MOCK_METHOD(void, HideTouchToFill, (), (override));
 };
 
+class MockFastCheckoutDelegate : public FastCheckoutDelegate {
+ public:
+  MockFastCheckoutDelegate() = default;
+  MockFastCheckoutDelegate(const MockFastCheckoutDelegate&) = delete;
+  MockFastCheckoutDelegate& operator=(const MockFastCheckoutDelegate&) = delete;
+  ~MockFastCheckoutDelegate() override = default;
+
+  MOCK_METHOD(bool,
+              TryToShowFastCheckout,
+              (const FormFieldData& field),
+              (override));
+  MOCK_METHOD(bool, IsShowingFastCheckoutUI, (), (const, override));
+  MOCK_METHOD(void, HideFastCheckoutUI, (), (override));
+  MOCK_METHOD(void, OnFastCheckoutUIHidden, (), (override));
+  MOCK_METHOD(void, Reset, (), (override));
+};
+
 void ExpectFilledField(const char* expected_label,
                        const char* expected_name,
                        const char* expected_value,
@@ -444,6 +461,11 @@
     browser_autofill_manager_->SetTouchToFillDelegateImplForTest(
         std::move(touch_to_fill_delegate));
 
+    auto fast_checkout_delegate = std::make_unique<MockFastCheckoutDelegate>();
+    fast_checkout_delegate_ = fast_checkout_delegate.get();
+    browser_autofill_manager_->SetFastCheckoutDelegateForTest(
+        std::move(fast_checkout_delegate));
+
     auto test_strike_database = std::make_unique<TestStrikeDatabase>();
     strike_database_ = test_strike_database.get();
     autofill_client_.set_test_strike_database(std::move(test_strike_database));
@@ -515,7 +537,7 @@
                               const FormFieldData& field) {
     browser_autofill_manager_->OnAskForValuesToFill(
         form, field, gfx::RectF(), query_id,
-        /*autoselect_first_suggestion=*/false, TouchToFillEligible(false));
+        /*autoselect_first_suggestion=*/false, FormElementWasClicked(false));
   }
 
   void GetAutofillSuggestions(const FormData& form,
@@ -526,10 +548,10 @@
   void TryToShowTouchToFill(int query_id,
                             const FormData& form,
                             const FormFieldData& field,
-                            TouchToFillEligible touch_to_fill_eligible) {
+                            FormElementWasClicked form_element_was_clicked) {
     browser_autofill_manager_->OnAskForValuesToFill(
         form, field, gfx::RectF(), query_id,
-        /*autoselect_first_suggestion=*/false, touch_to_fill_eligible);
+        /*autoselect_first_suggestion=*/false, form_element_was_clicked);
   }
 
   void AutocompleteSuggestionsReturned(
@@ -560,7 +582,7 @@
                             int unique_id) {
     browser_autofill_manager_->OnAskForValuesToFill(
         form, field, {}, query_id, /*autoselect_first_suggestion=*/true,
-        TouchToFillEligible(false));
+        FormElementWasClicked(false));
     browser_autofill_manager_->FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, query_id, form, field, unique_id);
   }
@@ -776,6 +798,7 @@
   std::unique_ptr<MockAutofillDriver> autofill_driver_;
   std::unique_ptr<TestBrowserAutofillManager> browser_autofill_manager_;
   raw_ptr<TestAutofillExternalDelegate> external_delegate_;
+  raw_ptr<MockFastCheckoutDelegate> fast_checkout_delegate_;
   raw_ptr<MockTouchToFillDelegateImpl> touch_to_fill_delegate_;
   scoped_refptr<AutofillWebDataService> database_;
   raw_ptr<MockAutofillDownloadManager> download_manager_;
@@ -9539,18 +9562,20 @@
 }
 
 // Tests that both Autofill popup and TTF are hidden on renderer event.
-TEST_F(BrowserAutofillManagerTest, HideAutofillPopupAndTouchToFillOnHidePopup) {
+TEST_F(BrowserAutofillManagerTest, HideAutofillPopupAndOtherPopups) {
   EXPECT_CALL(autofill_client_,
               HideAutofillPopup(PopupHidingReason::kRendererEvent));
   EXPECT_CALL(*touch_to_fill_delegate_, HideTouchToFill);
+  EXPECT_CALL(*fast_checkout_delegate_, HideFastCheckoutUI);
   browser_autofill_manager_->OnHidePopup();
 }
 
-// Tests that only Autofill popup is hidden on editing end, but not TTF.
+// Tests that only Autofill popup is hidden on editing end, but not TTF or FC.
 TEST_F(BrowserAutofillManagerTest, OnDidEndTextFieldEditing) {
   EXPECT_CALL(autofill_client_,
               HideAutofillPopup(PopupHidingReason::kEndEditing));
   EXPECT_CALL(*touch_to_fill_delegate_, HideTouchToFill).Times(0);
+  EXPECT_CALL(*fast_checkout_delegate_, HideFastCheckoutUI).Times(0);
   browser_autofill_manager_->OnDidEndTextFieldEditing();
 }
 
@@ -9564,22 +9589,22 @@
   const FormFieldData& field = form.fields[1];
   int query_id = 1;
 
-  // TTF not eligible, Autofill suggestions shown.
+  // Not a form element click, Autofill suggestions shown.
   EXPECT_CALL(*touch_to_fill_delegate_, TryToShowTouchToFill(query_id, _, _))
       .Times(0);
-  TryToShowTouchToFill(query_id++, form, field, TouchToFillEligible(false));
+  TryToShowTouchToFill(query_id++, form, field, FormElementWasClicked(false));
   EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
 
-  // TTF not shown, Autofill suggestions shown.
+  // TTF not available, Autofill suggestions shown.
   EXPECT_CALL(*touch_to_fill_delegate_, TryToShowTouchToFill(query_id, _, _))
       .WillOnce(Return(false));
-  TryToShowTouchToFill(query_id++, form, field, TouchToFillEligible(true));
+  TryToShowTouchToFill(query_id++, form, field, FormElementWasClicked(true));
   EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
 
-  // TTF eligible and shown, Autofill suggestions not shown
+  // A form element click and TTF available, Autofill suggestions not shown.
   EXPECT_CALL(*touch_to_fill_delegate_, TryToShowTouchToFill(query_id, _, _))
       .WillOnce(Return(true));
-  TryToShowTouchToFill(query_id++, form, field, TouchToFillEligible(true));
+  TryToShowTouchToFill(query_id++, form, field, FormElementWasClicked(true));
   EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
 }
 
@@ -9597,7 +9622,8 @@
   EXPECT_CALL(*touch_to_fill_delegate_,
               TryToShowTouchToFill(kDefaultPageID, _, _))
       .Times(0);
-  TryToShowTouchToFill(kDefaultPageID, form, field, TouchToFillEligible(true));
+  TryToShowTouchToFill(kDefaultPageID, form, field,
+                       FormElementWasClicked(true));
   EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
 }
 
diff --git a/components/autofill/core/browser/fast_checkout_delegate.h b/components/autofill/core/browser/fast_checkout_delegate.h
new file mode 100644
index 0000000..6f837f5
--- /dev/null
+++ b/components/autofill/core/browser/fast_checkout_delegate.h
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_H_
+
+#include "components/autofill/core/common/form_data.h"
+#include "components/autofill/core/common/form_field_data.h"
+
+namespace autofill {
+
+// Delegate for in-browser Fast Checkout (FC) surface display and selection.
+// Currently FC surface is eligible only for particular forms on click on
+// an empty focusable text input field.
+//
+// It is supposed to be owned by the given `BrowserAutofillManager`, and
+// interact with it and its `AutofillClient` and `AutofillDriver`.
+class FastCheckoutDelegate {
+ public:
+  virtual ~FastCheckoutDelegate() = default;
+
+  // Checks whether FastCheckout is eligible for the given web form data. On
+  // success triggers the corresponding surface and returns `true`.
+  virtual bool TryToShowFastCheckout(const FormFieldData& field) = 0;
+
+  // Returns whether the FC surface is currently being shown.
+  virtual bool IsShowingFastCheckoutUI() const = 0;
+
+  // Hides the FC surface if one is shown.
+  virtual void HideFastCheckoutUI() = 0;
+
+  // Triggered after the fast checkout card is closed, either by dissmisal or by
+  // accepting the options.
+  virtual void OnFastCheckoutUIHidden() = 0;
+
+  // Resets the internal state of the delegate.
+  virtual void Reset() = 0;
+};
+
+}  // namespace autofill
+
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_H_
diff --git a/components/autofill/core/browser/fast_checkout_delegate_impl.cc b/components/autofill/core/browser/fast_checkout_delegate_impl.cc
new file mode 100644
index 0000000..1b5bd0c
--- /dev/null
+++ b/components/autofill/core/browser/fast_checkout_delegate_impl.cc
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/autofill/core/browser/fast_checkout_delegate_impl.h"
+
+namespace autofill {
+
+FastCheckoutDelegateImpl::FastCheckoutDelegateImpl(
+    BrowserAutofillManager* manager)
+    : manager_(manager) {
+  DCHECK(manager);
+}
+
+FastCheckoutDelegateImpl::~FastCheckoutDelegateImpl() = default;
+
+bool FastCheckoutDelegateImpl::TryToShowFastCheckout(
+    const FormFieldData& field) {
+  // TODO(crbug.com/1334642): Implement.
+  return false;
+}
+
+bool FastCheckoutDelegateImpl::IsShowingFastCheckoutUI() const {
+  return fast_checkout_state_ == FastCheckoutState::kIsShowing;
+}
+
+void FastCheckoutDelegateImpl::OnFastCheckoutUIHidden() {
+  fast_checkout_state_ = FastCheckoutState::kWasShown;
+}
+
+void FastCheckoutDelegateImpl::HideFastCheckoutUI() {
+  // TODO(crbug.com/1334642): Implement.
+}
+
+void FastCheckoutDelegateImpl::Reset() {
+  // TODO(crbug.com/1334642): Implement.
+}
+
+base::WeakPtr<FastCheckoutDelegateImpl> FastCheckoutDelegateImpl::GetWeakPtr() {
+  return weak_ptr_factory_.GetWeakPtr();
+}
+
+}  // namespace autofill
diff --git a/components/autofill/core/browser/fast_checkout_delegate_impl.h b/components/autofill/core/browser/fast_checkout_delegate_impl.h
new file mode 100644
index 0000000..13d6d69
--- /dev/null
+++ b/components/autofill/core/browser/fast_checkout_delegate_impl.h
@@ -0,0 +1,44 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_IMPL_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_IMPL_H_
+
+#include "components/autofill/core/browser/fast_checkout_delegate.h"
+
+namespace autofill {
+
+class BrowserAutofillManager;
+
+class FastCheckoutDelegateImpl : public FastCheckoutDelegate {
+ public:
+  explicit FastCheckoutDelegateImpl(BrowserAutofillManager* manager);
+  FastCheckoutDelegateImpl(const FastCheckoutDelegateImpl&) = delete;
+  FastCheckoutDelegateImpl& operator=(const FastCheckoutDelegateImpl&) = delete;
+  ~FastCheckoutDelegateImpl() override;
+
+  // FastCheckoutDelegate:
+  bool TryToShowFastCheckout(const FormFieldData& field) override;
+  bool IsShowingFastCheckoutUI() const override;
+  void HideFastCheckoutUI() override;
+  void OnFastCheckoutUIHidden() override;
+  void Reset() override;
+
+ private:
+  enum class FastCheckoutState {
+    kNotShownYet,
+    kIsShowing,
+    kWasShown,
+  };
+
+  base::WeakPtr<FastCheckoutDelegateImpl> GetWeakPtr();
+
+  FastCheckoutState fast_checkout_state_ = FastCheckoutState::kNotShownYet;
+  const raw_ptr<BrowserAutofillManager> manager_;
+  base::WeakPtrFactory<FastCheckoutDelegateImpl> weak_ptr_factory_{this};
+};
+
+}  // namespace autofill
+
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_IMPL_H_
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
index b3bce3c..faba7a9 100644
--- a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
@@ -315,13 +315,6 @@
   form.main_frame_origin = url::Origin::Create(origin);
 }
 
-void AddAutoCompleteFieldToForm(const std::string& type, FormData& form) {
-  FormFieldData field;
-  test::CreateTestFormField("", "", "", "", &field);
-  field.autocomplete_attribute = type;
-  form.fields.push_back(field);
-}
-
 std::string SerializeAndEncode(const AutofillQueryResponse& response) {
   std::string unencoded_response_string;
   if (!response.SerializeToString(&unencoded_response_string)) {
@@ -342,17 +335,45 @@
 
 class AutofillMetricsTest : public metrics::AutofillMetricsBaseTest {
  public:
-  AutofillMetricsTest() = default;
+  using metrics::AutofillMetricsBaseTest::AutofillMetricsBaseTest;
   ~AutofillMetricsTest() override = default;
+
+  [[nodiscard]] FormData CreateEmptyForm() {
+    FormData form;
+    form.host_frame = test::MakeLocalFrameToken();
+    form.unique_renderer_id = test::MakeFormRendererId();
+    form.name = u"TestForm";
+    form.url = GURL("https://example.com/form.html");
+    form.action = GURL("https://example.com/submit.html");
+    form.main_frame_origin =
+        url::Origin::Create(autofill_client_->form_origin());
+    return form;
+  }
+
+  [[nodiscard]] FormData CreateForm(std::vector<FormFieldData> fields) {
+    FormData form = CreateEmptyForm();
+    form.fields = std::move(fields);
+    return form;
+  }
+
+  // Forwards to test::CreateTestFormField(). This is a hack meant as an
+  // intermediate step towards removing the out-parameters from
+  // autofill_form_util.h.
+  template <typename... Args>
+  [[nodiscard]] FormFieldData CreateField(Args... args) {
+    FormFieldData field;
+    test::CreateTestFormField(args..., &field);
+    return field;
+  }
 };
 
 // Test parameter indicates if the metrics are being logged for a form in an
 // iframe or the main frame. True means the form is in the main frame.
 class AutofillMetricsIFrameTest : public testing::WithParamInterface<bool>,
-                                  public metrics::AutofillMetricsBaseTest {
+                                  public AutofillMetricsTest {
  public:
   AutofillMetricsIFrameTest()
-      : metrics::AutofillMetricsBaseTest(
+      : AutofillMetricsTest(
             /*is_in_any_main_frame=*/GetParam()),
         credit_card_form_events_frame_histogram_(
             std::string("Autofill.FormEvents.CreditCard.") +
@@ -407,14 +428,12 @@
       NAME_FIRST,    EMAIL_ADDRESS,  NAME_FIRST,
       EMAIL_ADDRESS, NO_SERVER_DATA, PHONE_HOME_CITY_AND_NUMBER};
 
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
 
   // Simulate user changing the second field of the form.
   ChangeTextField(form, form.fields[1]);
-  form.fields.at(1).is_autofilled = false;
+  form.fields[1].is_autofilled = false;
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -485,14 +504,12 @@
       NAME_FIRST,    EMAIL_ADDRESS,  NAME_FIRST,
       EMAIL_ADDRESS, NO_SERVER_DATA, PHONE_HOME_CITY_AND_NUMBER};
 
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
 
   // Simulate user changing the second and forth field of the form.
   ChangeTextField(form, form.fields[1]);
-  form.fields.at(1).is_autofilled = false;
+  form.fields[1].is_autofilled = false;
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -635,10 +652,8 @@
   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, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -691,10 +706,7 @@
       NAME_FIRST,    EMAIL_ADDRESS,  NAME_FIRST,
       EMAIL_ADDRESS, NO_SERVER_DATA, PHONE_HOME_CITY_AND_NUMBER};
 
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -778,26 +790,19 @@
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY,
             .value = u"NoACountry"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -825,26 +830,19 @@
            {.role = ServerFieldType::ADDRESS_HOME_ZIP, .value = u"37373"},
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY, .value = u"USA"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -877,26 +875,15 @@
             .value = u"CA",
             .autocomplete_attribute = "section-shipping address-level1"}}});
 
-  // Set the heuristic types.
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
-                                                  ADDRESS_HOME_LINE1,
-                                                  ADDRESS_HOME_ZIP,
-                                                  ADDRESS_HOME_COUNTRY,
-                                                  PHONE_HOME_CITY_AND_NUMBER,
-                                                  ADDRESS_HOME_CITY,
-                                                  ADDRESS_HOME_STATE};
+  std::vector<ServerFieldType> field_types = {NAME_FULL,
+                                              ADDRESS_HOME_LINE1,
+                                              ADDRESS_HOME_ZIP,
+                                              ADDRESS_HOME_COUNTRY,
+                                              PHONE_HOME_CITY_AND_NUMBER,
+                                              ADDRESS_HOME_CITY,
+                                              ADDRESS_HOME_STATE};
 
-  // Set the server types.
-  std::vector<ServerFieldType> server_types = {NAME_FULL,
-                                               ADDRESS_HOME_LINE1,
-                                               ADDRESS_HOME_ZIP,
-                                               ADDRESS_HOME_COUNTRY,
-                                               PHONE_HOME_CITY_AND_NUMBER,
-                                               ADDRESS_HOME_CITY,
-                                               ADDRESS_HOME_STATE};
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
@@ -932,26 +919,19 @@
            {.role = ServerFieldType::ADDRESS_HOME_ZIP, .value = u"37373"},
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY, .value = u"USA"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -983,8 +963,7 @@
       {AddressImportRequirements::LINE1_REQUIREMENT_FULFILLED, true},
       {AddressImportRequirements::LINE1_REQUIREMENT_VIOLATED, false},
       {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_FULFILLED, true},
-      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false},
-  };
+      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false}};
 
   TestAddressProfileImportRequirements(&histogram_tester, expectations);
 
@@ -1012,26 +991,19 @@
            {.role = ServerFieldType::ADDRESS_HOME_ZIP, .value = u"37373"},
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY, .value = u"USA"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1063,8 +1035,7 @@
       {AddressImportRequirements::LINE1_REQUIREMENT_FULFILLED, false},
       {AddressImportRequirements::LINE1_REQUIREMENT_VIOLATED, true},
       {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_FULFILLED, true},
-      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false},
-  };
+      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false}};
 
   TestAddressProfileImportRequirements(&histogram_tester, expectations);
 
@@ -1096,26 +1067,19 @@
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY,
             .value = u"Germany"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1147,8 +1111,7 @@
       {AddressImportRequirements::LINE1_REQUIREMENT_FULFILLED, true},
       {AddressImportRequirements::LINE1_REQUIREMENT_VIOLATED, false},
       {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_FULFILLED, true},
-      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false},
-  };
+      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false}};
 
   TestAddressProfileImportRequirements(&histogram_tester, expectations);
   // All country specific field requirements have been fulfilled.
@@ -1180,32 +1143,22 @@
            {.role = ServerFieldType::EMAIL_ADDRESS,
             .value = u"test_noat_test.io"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
-                                                  ADDRESS_HOME_LINE1,
-                                                  ADDRESS_HOME_CITY,
-                                                  PHONE_HOME_CITY_AND_NUMBER,
-                                                  ADDRESS_HOME_STATE,
-                                                  ADDRESS_HOME_ZIP,
-                                                  ADDRESS_HOME_COUNTRY,
-                                                  EMAIL_ADDRESS};
-  std::vector<ServerFieldType> server_types = {NAME_FULL,
-                                               ADDRESS_HOME_LINE1,
-                                               ADDRESS_HOME_CITY,
-                                               PHONE_HOME_CITY_AND_NUMBER,
-                                               ADDRESS_HOME_STATE,
-                                               ADDRESS_HOME_ZIP,
-                                               ADDRESS_HOME_COUNTRY,
-                                               EMAIL_ADDRESS};
+  std::vector<ServerFieldType> field_types = {NAME_FULL,
+                                              ADDRESS_HOME_LINE1,
+                                              ADDRESS_HOME_CITY,
+                                              PHONE_HOME_CITY_AND_NUMBER,
+                                              ADDRESS_HOME_STATE,
+                                              ADDRESS_HOME_ZIP,
+                                              ADDRESS_HOME_COUNTRY,
+                                              EMAIL_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1237,8 +1190,7 @@
       {AddressImportRequirements::LINE1_REQUIREMENT_FULFILLED, true},
       {AddressImportRequirements::LINE1_REQUIREMENT_VIOLATED, false},
       {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_FULFILLED, true},
-      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false},
-  };
+      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false}};
 
   TestAddressProfileImportRequirements(&histogram_tester, expectations);
 
@@ -1271,34 +1223,23 @@
             .name = u".email1",
             .value = u"not_test@test.io"}}});
 
-  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
-                                                  ADDRESS_HOME_LINE1,
-                                                  ADDRESS_HOME_CITY,
-                                                  PHONE_HOME_CITY_AND_NUMBER,
-                                                  ADDRESS_HOME_STATE,
-                                                  ADDRESS_HOME_ZIP,
-                                                  ADDRESS_HOME_COUNTRY,
-                                                  EMAIL_ADDRESS,
-                                                  EMAIL_ADDRESS};
-  std::vector<ServerFieldType> server_types = {NAME_FULL,
-                                               ADDRESS_HOME_LINE1,
-                                               ADDRESS_HOME_CITY,
-                                               PHONE_HOME_CITY_AND_NUMBER,
-                                               ADDRESS_HOME_STATE,
-                                               ADDRESS_HOME_ZIP,
-                                               ADDRESS_HOME_COUNTRY,
-                                               EMAIL_ADDRESS,
-                                               EMAIL_ADDRESS};
+  std::vector<ServerFieldType> field_types = {NAME_FULL,
+                                              ADDRESS_HOME_LINE1,
+                                              ADDRESS_HOME_CITY,
+                                              PHONE_HOME_CITY_AND_NUMBER,
+                                              ADDRESS_HOME_STATE,
+                                              ADDRESS_HOME_ZIP,
+                                              ADDRESS_HOME_COUNTRY,
+                                              EMAIL_ADDRESS,
+                                              EMAIL_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1330,8 +1271,7 @@
       {AddressImportRequirements::LINE1_REQUIREMENT_FULFILLED, true},
       {AddressImportRequirements::LINE1_REQUIREMENT_VIOLATED, false},
       {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_FULFILLED, true},
-      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false},
-  };
+      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false}};
 
   TestAddressProfileImportRequirements(&histogram_tester, expectations);
 
@@ -1360,26 +1300,19 @@
            {.role = ServerFieldType::ADDRESS_HOME_ZIP, .value = u""},
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY, .value = u""}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1411,8 +1344,7 @@
       {AddressImportRequirements::LINE1_REQUIREMENT_FULFILLED, true},
       {AddressImportRequirements::LINE1_REQUIREMENT_VIOLATED, false},
       {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_FULFILLED, true},
-      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false},
-  };
+      {AddressImportRequirements::ZIP_OR_STATE_REQUIREMENT_VIOLATED, false}};
 
   TestAddressProfileImportRequirements(&histogram_tester, expectations);
 
@@ -1428,60 +1360,33 @@
 // only_fill_when_focused and are supposed to log RATIONALIZATION_OK.
 TEST_F(AutofillMetricsTest,
        QualityMetrics_LoggedCorrecltyForRationalizationOk) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form = CreateForm(
+      {CreateField("Name", "name", "Elvis Aaron Presley", "text"),
+       CreateField("Address", "address", "3734 Elvis Presley Blvd.", "text"),
+       CreateField("Phone", "phone", "2345678901", "text"),
+       // RATIONALIZATION_OK because it's ambiguous value.
+       CreateField("Phone1", "phone1", "nonsense value", "text"),
+       // RATIONALIZATION_OK because it's same type but different to what is in
+       // the profile.
+       CreateField("Phone2", "phone2", "2345678902", "text"),
+       // RATIONALIZATION_OK because it's a type mismatch.
+       CreateField("Phone3", "phone3", "Elvis Aaron Presley", "text")});
+  form.fields[2].is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
-  FormFieldData field;
-
-  test::CreateTestFormField("Name", "name", "Elvis Aaron Presley", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-
-  test::CreateTestFormField("Address", "address", "3734 Elvis Presley Blvd.",
-                            "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(ADDRESS_HOME_LINE1);
-  server_types.push_back(ADDRESS_HOME_LINE1);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  field.is_autofilled = false;
-
-  // Below are fields with only_fill_when_focused set to true.
-  // RATIONALIZATION_OK because it's ambiguous value.
-  test::CreateTestFormField("Phone1", "phone1", "nonsense value", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_WHOLE_NUMBER);
-
-  // RATIONALIZATION_OK because it's same type but different
-  // to what is in the profile.
-  test::CreateTestFormField("Phone2", "phone2", "2345678902", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-
-  // RATIONALIZATION_OK because it's a type mismatch.
-  test::CreateTestFormField("Phone3", "phone3", "Elvis Aaron Presley", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_WHOLE_NUMBER);
+  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
+                                                  ADDRESS_HOME_LINE1,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER};
+  std::vector<ServerFieldType> server_types = {NAME_FULL,
+                                               ADDRESS_HOME_LINE1,
+                                               PHONE_HOME_CITY_AND_NUMBER,
+                                               PHONE_HOME_WHOLE_NUMBER,
+                                               PHONE_HOME_CITY_AND_NUMBER,
+                                               PHONE_HOME_WHOLE_NUMBER};
 
   base::UserActionTester user_action_tester;
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
   std::string guid(kTestGuid);
   // Trigger phone number rationalization at filling time.
@@ -1492,7 +1397,6 @@
   EXPECT_EQ(
       1, user_action_tester.GetActionCount("Autofill_FilledProfileSuggestion"));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1510,46 +1414,20 @@
 // only_fill_when_focused and are supposed to log RATIONALIZATION_GOOD.
 TEST_F(AutofillMetricsTest,
        QualityMetrics_LoggedCorrecltyForRationalizationGood) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form = CreateForm(
+      {CreateField("Name", "name", "Elvis Aaron Presley", "text"),
+       CreateField("Address", "address", "3734 Elvis Presley Blvd.", "text"),
+       CreateField("Phone", "phone", "2345678901", "text"),
+       // RATIONALIZATION_GOOD because it's empty.
+       CreateField("Phone1", "phone1", "", "text")});
+  form.fields[2].is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
-  FormFieldData field;
-
-  test::CreateTestFormField("Name", "name", "Elvis Aaron Presley", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-
-  test::CreateTestFormField("Address", "address", "3734 Elvis Presley Blvd.",
-                            "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(ADDRESS_HOME_LINE1);
-  server_types.push_back(ADDRESS_HOME_LINE1);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  field.is_autofilled = false;
-
-  // Below are fields with only_fill_when_focused set to true.
-  // RATIONALIZATION_GOOD because it's empty.
-  test::CreateTestFormField("Phone1", "phone1", "", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_WHOLE_NUMBER);
+  std::vector<ServerFieldType> field_types = {NAME_FULL, ADDRESS_HOME_LINE1,
+                                              PHONE_HOME_CITY_AND_NUMBER,
+                                              PHONE_HOME_CITY_AND_NUMBER};
 
   base::UserActionTester user_action_tester;
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
   // Trigger phone number rationalization at filling time.
   autofill_manager().FillOrPreviewForm(
@@ -1559,7 +1437,6 @@
   EXPECT_EQ(
       1, user_action_tester.GetActionCount("Autofill_FilledProfileSuggestion"));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -1579,57 +1456,30 @@
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({
+      CreateField("Name", "name", "", "text"),             // no decision
+      CreateField("Street", "street", "", "text"),         // skips
+      CreateField("City", "city", "", "text"),             // skips
+      CreateField("State", "state", "", "select-one"),     // doesn't skip
+      CreateField("Country", "country", "", "select-one")  // doesn't skip
+  });
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  FieldSignature field_signature[4];
+  form.fields[1].is_focusable = false;
+  form.fields[2].role = FormFieldData::RoleAttribute::kPresentation;
+  form.fields[3].is_focusable = false;
+  form.fields[4].role = FormFieldData::RoleAttribute::kPresentation;
 
-  // no decision
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(NAME_FULL);
+  std::vector<ServerFieldType> field_types = {
+      NAME_FULL, ADDRESS_HOME_LINE1, ADDRESS_HOME_CITY, ADDRESS_HOME_STATE,
+      ADDRESS_HOME_COUNTRY};
 
-  // skips
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  field.is_focusable = false;
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_LINE1);
-  field_signature[0] = Collapse(CalculateFieldSignatureForField(field));
-
-  // skips
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  field.role = FormFieldData::RoleAttribute::kPresentation;
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  field_signature[1] = Collapse(CalculateFieldSignatureForField(field));
-
-  // doesn't skip
-  test::CreateTestFormField("State", "state", "", "select-one", &field);
-  field.is_focusable = false;
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  field_signature[2] = Collapse(CalculateFieldSignatureForField(field));
-
-  // doesn't skip
-  test::CreateTestFormField("Country", "country", "", "select-one", &field);
-  field.role = FormFieldData::RoleAttribute::kPresentation;
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_COUNTRY);
-  field_signature[3] = Collapse(CalculateFieldSignatureForField(field));
+  std::vector<FieldSignature> field_signature;
+  for (auto it = form.fields.begin() + 1; it != form.fields.end(); ++it)
+    field_signature.push_back(Collapse(CalculateFieldSignatureForField(*it)));
 
   FormSignature form_signature = Collapse(CalculateFormSignature(form));
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate filling form.
   {
@@ -1736,14 +1586,7 @@
 
 // Test that we log the address line fields whose server types are rationalized
 TEST_F(AutofillMetricsTest, LogRepeatedAddressTypeRationalized) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateEmptyForm();
 
   FieldSignature field_signature[2];
 
@@ -1772,9 +1615,7 @@
   for (size_t i = 0; i < form_structure.field_count(); ++i)
     field_types.push_back(UNKNOWN_TYPE);
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   AutofillQueryResponse response;
   auto* form_suggestion = response.add_form_suggestions();
@@ -1843,14 +1684,7 @@
 
 // Test that we log the state/country fields whose server types are rationalized
 TEST_F(AutofillMetricsTest, LogRepeatedStateCountryTypeRationalized) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateEmptyForm();
 
   FieldSignature field_signature[3];
 
@@ -1888,9 +1722,7 @@
   for (size_t i = 0; i < form_structure.field_count(); ++i)
     field_types.push_back(UNKNOWN_TYPE);
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   AutofillQueryResponse response;
   auto* form_suggestion = response.add_form_suggestions();
@@ -1983,46 +1815,24 @@
 // only_fill_when_focused and are supposed to log RATIONALIZATION_BAD.
 TEST_F(AutofillMetricsTest,
        QualityMetrics_LoggedCorrecltyForRationalizationBad) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form = CreateForm({
+      CreateField("Name", "name", "Elvis Aaron Presley", "text"),
+      CreateField("Address", "address", "3734 Elvis Presley Blvd.", "text"),
+      CreateField("Phone", "phone", "2345678901", "text"),
+      // RATIONALIZATION_BAD because it's filled with the same value as filled
+      // previously.
+      CreateField("Phone1", "phone1", "2345678901", "text"),
+  });
+  form.fields[2].is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
-  FormFieldData field;
-
-  test::CreateTestFormField("Name", "name", "Elvis Aaron Presley", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-
-  test::CreateTestFormField("Address", "address", "3734 Elvis Presley Blvd.",
-                            "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(ADDRESS_HOME_LINE1);
-  server_types.push_back(ADDRESS_HOME_LINE1);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  field.is_autofilled = false;
-
-  // Below are fields with only_fill_when_focused set to true.
-  // RATIONALIZATION_BAD because it's filled with same
-  // value as filled previously.
-  test::CreateTestFormField("Phone1", "phone1", "2345678901", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_WHOLE_NUMBER);
+  std::vector<ServerFieldType> heuristic_types = {NAME_FULL, ADDRESS_HOME_LINE1,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER};
+  std::vector<ServerFieldType> server_types = {NAME_FULL, ADDRESS_HOME_LINE1,
+                                               PHONE_HOME_CITY_AND_NUMBER,
+                                               PHONE_HOME_WHOLE_NUMBER};
 
   base::UserActionTester user_action_tester;
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
   std::string guid(kTestGuid);
   // Trigger phone number rationalization at filling time.
@@ -2033,7 +1843,6 @@
   EXPECT_EQ(
       1, user_action_tester.GetActionCount("Autofill_FilledProfileSuggestion"));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -2051,61 +1860,35 @@
 // only_fill_when_focused set to true.
 TEST_F(AutofillMetricsTest,
        QualityMetrics_LoggedCorrecltyForOnlyFillWhenFocusedField) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form = CreateForm(
+      {// TRUE_POSITIVE + no rationalization logging
+       CreateField("Name", "name", "Elvis Aaron Presley", "text"),
+       // TRUE_POSITIVE + no rationalization logging
+       CreateField("Address", "address", "3734 Elvis Presley Blvd.", "text"),
+       // TRUE_POSITIVE + no rationalization logging
+       CreateField("Phone", "phone", "2345678901", "text"),
+       // TRUE_NEGATIVE_EMPTY + RATIONALIZATION_GOOD
+       CreateField("Phone1", "phone1", "", "text"),
+       // TRUE_POSITIVE + RATIONALIZATION_BAD
+       CreateField("Phone2", "phone2", "2345678901", "text"),
+       // FALSE_NEGATIVE_MISMATCH + RATIONALIZATION_OK
+       CreateField("Phone3", "phone3", "Elvis Aaron Presley", "text")});
+  form.fields[2].is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
-  FormFieldData field;
-
-  // TRUE_POSITIVE + no rationalization logging
-  test::CreateTestFormField("Name", "name", "Elvis Aaron Presley", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-
-  // TRUE_POSITIVE + no rationalization logging
-  test::CreateTestFormField("Address", "address", "3734 Elvis Presley Blvd.",
-                            "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(ADDRESS_HOME_LINE1);
-  server_types.push_back(ADDRESS_HOME_LINE1);
-
-  // TRUE_POSITIVE + no rationalization logging
-  test::CreateTestFormField("Phone", "phone", "2345678901", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  field.is_autofilled = false;
-
-  // Below are fields with only_fill_when_focused set to true.
-  // TRUE_NEGATIVE_EMPTY + RATIONALIZATION_GOOD
-  test::CreateTestFormField("Phone1", "phone1", "", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_WHOLE_NUMBER);
-
-  // TRUE_POSITIVE + RATIONALIZATION_BAD
-  test::CreateTestFormField("Phone2", "phone2", "2345678901", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-
-  // FALSE_NEGATIVE_MISMATCH + RATIONALIZATION_OK
-  test::CreateTestFormField("Phone3", "phone3", "Elvis Aaron Presley", "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_WHOLE_NUMBER);
+  std::vector<ServerFieldType> heuristic_types = {NAME_FULL,
+                                                  ADDRESS_HOME_LINE1,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER,
+                                                  PHONE_HOME_CITY_AND_NUMBER};
+  std::vector<ServerFieldType> server_types = {NAME_FULL,
+                                               ADDRESS_HOME_LINE1,
+                                               PHONE_HOME_CITY_AND_NUMBER,
+                                               PHONE_HOME_WHOLE_NUMBER,
+                                               PHONE_HOME_CITY_AND_NUMBER,
+                                               PHONE_HOME_WHOLE_NUMBER};
 
   base::UserActionTester user_action_tester;
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
   std::string guid(kTestGuid);
   // Trigger phone number rationalization at filling time.
@@ -2116,7 +1899,6 @@
   EXPECT_EQ(
       1, user_action_tester.GetActionCount("Autofill_FilledProfileSuggestion"));
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -2320,50 +2102,26 @@
            << "Actual: "
            << AutofillType::ServerFieldTypeToString(actual_field_type);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  std::vector<ServerFieldType> heuristic_types, server_types, actual_types;
-  AutofillField field;
-
-  // Add a first name field, that is predicted correctly.
-  test::CreateTestFormField("first", "first", ValueForType(NAME_FIRST), "text",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FIRST);
-  server_types.push_back(NAME_FIRST);
-  actual_types.push_back(NAME_FIRST);
-
-  // Add a last name field, that is predicted correctly.
-  test::CreateTestFormField("last", "last", ValueForType(NAME_LAST), "test",
-                            &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_LAST);
-  server_types.push_back(NAME_LAST);
-  actual_types.push_back(NAME_LAST);
-
-  // Add an empty or unknown field, that is predicted as per the test params.
-  test::CreateTestFormField("Unknown", "Unknown",
-                            ValueForType(actual_field_type), "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(predicted_type == NO_SERVER_DATA ? UNKNOWN_TYPE
-                                                             : predicted_type);
-  server_types.push_back(predicted_type);
+  FormData form = CreateForm(
+      {CreateField("first", "first", ValueForType(NAME_FIRST), "text"),
+       CreateField("last", "last", ValueForType(NAME_LAST), "test"),
+       CreateField("Unknown", "Unknown", ValueForType(actual_field_type),
+                   "text")});
 
   // Resolve any field type ambiguity.
   if (actual_field_type == AMBIGUOUS_TYPE) {
     if (predicted_type == COMPANY_NAME || predicted_type == NAME_MIDDLE)
       actual_field_type = predicted_type;
   }
-  actual_types.push_back(actual_field_type);
 
-  // Simulate having seen this form on page load.
+  std::vector<ServerFieldType> heuristic_types = {
+      NAME_FIRST, NAME_LAST,
+      predicted_type == NO_SERVER_DATA ? UNKNOWN_TYPE : predicted_type};
+  std::vector<ServerFieldType> server_types = {NAME_FIRST, NAME_LAST,
+                                               predicted_type};
+  std::vector<ServerFieldType> actual_types = {NAME_FIRST, NAME_LAST,
+                                               actual_field_type};
+
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
 
   // Run the form submission code while tracking the histograms.
@@ -2496,30 +2254,14 @@
 // actually are recorded and retrieved.
 TEST_F(AutofillMetricsTest, TimingMetrics) {
   base::HistogramTester histogram_tester;
-
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
-
-  FormFieldData field;
-  test::CreateTestFormField("Autofilled", "autofilled", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-
-  test::CreateTestFormField("Autofill Failed", "autofillfailed",
-                            "buddy@gmail.com", "text", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
+  FormData form = CreateForm(
+      {CreateField("Autofilled", "autofilled", "Elvis Aaron Presley", "text"),
+       CreateField("Autofill Failed", "autofillfailed", "buddy@gmail.com",
+                   "text"),
+       CreateField("Phone", "phone", "2345678901", "tel")});
+  form.fields[0].is_autofilled = true;
+  form.fields[1].is_autofilled = false;
+  form.fields[2].is_autofilled = false;
 
   SeeForm(form);
 
@@ -2550,60 +2292,26 @@
 // Test that we log quality metrics appropriately when an upload is triggered
 // but no submission event is sent.
 TEST_F(AutofillMetricsTest, QualityMetrics_NoSubmission) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm(
+      {CreateField("Autofilled", "autofilled", "Elvis Aaron Presley", "text"),
+       CreateField("Autofill Failed", "autofillfailed", "buddy@gmail.com",
+                   "text"),
+       CreateField("Empty", "empty", "", "text"),
+       CreateField("Unknown", "unknown", "garbage", "text"),
+       CreateField("Select", "select", "USA", "select-one"),
+       CreateField("Phone", "phone", "2345678901", "tel")});
+  form.fields.front().is_autofilled = true;
+  form.fields.back().is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
-  FormFieldData field;
+  std::vector<ServerFieldType> heuristic_types = {
+      NAME_FULL,         PHONE_HOME_NUMBER, NAME_FULL,
+      PHONE_HOME_NUMBER, UNKNOWN_TYPE,      PHONE_HOME_CITY_AND_NUMBER};
 
-  test::CreateTestFormField("Autofilled", "autofilled", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FIRST);
+  std::vector<ServerFieldType> server_types = {
+      NAME_FIRST,    EMAIL_ADDRESS,  NAME_FIRST,
+      EMAIL_ADDRESS, NO_SERVER_DATA, PHONE_HOME_CITY_AND_NUMBER};
 
-  test::CreateTestFormField("Autofill Failed", "autofillfailed",
-                            "buddy@gmail.com", "text", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_NUMBER);
-  server_types.push_back(EMAIL_ADDRESS);
-
-  test::CreateTestFormField("Empty", "empty", "", "text", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FIRST);
-
-  test::CreateTestFormField("Unknown", "unknown", "garbage", "text", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_NUMBER);
-  server_types.push_back(EMAIL_ADDRESS);
-
-  test::CreateTestFormField("Select", "select", "USA", "select-one", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(UNKNOWN_TYPE);
-  server_types.push_back(NO_SERVER_DATA);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate text input on one of the fields.
   ChangeTextField(form, form.fields[0]);
   autofill_manager().SetSeenFormPredictions(form.global_id(), heuristic_types,
                                             server_types);
@@ -2668,35 +2376,15 @@
 // Test that we log quality metrics for heuristics and server predictions based
 // on autocomplete attributes present on the fields.
 TEST_F(AutofillMetricsTest, QualityMetrics_BasedOnAutocomplete) {
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"MyForm";
-  form.url = GURL("http://myform.com/form.html");
-  form.action = GURL("http://myform.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
-
-  FormFieldData field;
-  // Heuristic value will match with Autocomplete attribute.
-  test::CreateTestFormField("Last Name", "lastname", "", "text", &field);
-  field.autocomplete_attribute = "family-name";
-  form.fields.push_back(field);
-
-  // Heuristic value will NOT match with Autocomplete attribute.
-  test::CreateTestFormField("First Name", "firstname", "", "text", &field);
-  field.autocomplete_attribute = "additional-name";
-  form.fields.push_back(field);
-
-  // Heuristic value will be unknown.
-  test::CreateTestFormField("Garbage label", "garbage", "", "text", &field);
-  field.autocomplete_attribute = "postal-code";
-  form.fields.push_back(field);
-
-  // No autocomplete attribute. No metric logged.
-  test::CreateTestFormField("Address", "address", "", "text", &field);
-  field.autocomplete_attribute = "";
-  form.fields.push_back(field);
+  FormData form = CreateForm(
+      {// Heuristic value will match with Autocomplete attribute.
+       CreateField("Last Name", "lastname", "", "text", "family-name"),
+       // Heuristic value will NOT match with Autocomplete attribute.
+       CreateField("First Name", "firstname", "", "text", "additional-name"),
+       // Heuristic value will be unknown.
+       CreateField("Garbage label", "garbage", "", "text", "postal-code"),
+       // No autocomplete attribute. No metric logged.
+       CreateField("Address", "address", "", "text", "")});
 
   std::unique_ptr<FormStructure> form_structure =
       std::make_unique<FormStructure>(form);
@@ -2785,42 +2473,18 @@
 
 // Test that we log UPI Virtual Payment Address.
 TEST_F(AutofillMetricsTest, UpiVirtualPaymentAddress) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
+  FormData form = CreateForm(
+      {// Heuristic value will match with Autocomplete attribute.
+       CreateField("Last Name", "lastname", "", "text"),
+       // Heuristic value will NOT match with Autocomplete attribute.
+       CreateField("First Name", "firstname", "", "text"),
+       // Heuristic value will NOT match with Autocomplete attribute.
+       CreateField("Payment Address", "payment_address", "user@upi", "text")});
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
-  FormFieldData field;
+  std::vector<ServerFieldType> field_types = {NAME_LAST, NAME_FIRST,
+                                              ADDRESS_HOME_LINE1};
 
-  // Heuristic value will match with Autocomplete attribute.
-  test::CreateTestFormField("Last Name", "lastname", "", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_LAST);
-  server_types.push_back(NAME_LAST);
-
-  // Heuristic value will NOT match with Autocomplete attribute.
-  test::CreateTestFormField("First Name", "firstname", "", "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FIRST);
-  server_types.push_back(NAME_FIRST);
-
-  // Heuristic value will NOT match with Autocomplete attribute.
-  test::CreateTestFormField("Payment Address", "payment_address", "user@upi",
-                            "text", &field);
-  form.fields.push_back(field);
-  heuristic_types.push_back(ADDRESS_HOME_LINE1);
-  server_types.push_back(ADDRESS_HOME_LINE1);
-
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
-
-  // Simulate form submission.
+  autofill_manager().AddSeenForm(form, field_types);
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -2837,59 +2501,26 @@
 // Test that we behave sanely when the cached form differs from the submitted
 // one.
 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
+  FormData form = CreateForm(
+      {CreateField("Both match", "match", "Elvis Aaron Presley", "text"),
+       CreateField("Both mismatch", "mismatch", "buddy@gmail.com", "text"),
+       CreateField("Only heuristics match", "mixed", "Memphis", "text"),
+       CreateField("Unknown", "unknown", "garbage", "text")});
+  form.fields.front().is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
+  std::vector<ServerFieldType> heuristic_types = {
+      NAME_FULL, PHONE_HOME_NUMBER, ADDRESS_HOME_CITY, UNKNOWN_TYPE};
+  std::vector<ServerFieldType> server_types = {NAME_FULL, PHONE_HOME_NUMBER,
+                                               PHONE_HOME_NUMBER, UNKNOWN_TYPE};
 
-  FormFieldData field;
-  test::CreateTestFormField("Both match", "match", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-  test::CreateTestFormField("Both mismatch", "mismatch", "buddy@gmail.com",
-                            "text", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_NUMBER);
-  server_types.push_back(PHONE_HOME_NUMBER);
-  test::CreateTestFormField("Only heuristics match", "mixed", "Memphis", "text",
-                            &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(ADDRESS_HOME_CITY);
-  server_types.push_back(PHONE_HOME_NUMBER);
-  test::CreateTestFormField("Unknown", "unknown", "garbage", "text", &field);
-  field.is_autofilled = false;
-  form.fields.push_back(field);
-  heuristic_types.push_back(UNKNOWN_TYPE);
-  server_types.push_back(UNKNOWN_TYPE);
-
-  // Simulate having seen this form with the desired heuristic and server types.
-  // |form_structure| will be owned by `autofill_manager()`.
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
 
   // Add a field and re-arrange the remaining form fields before submitting.
   std::vector<FormFieldData> cached_fields = form.fields;
-  form.fields.clear();
-  test::CreateTestFormField("New field", "new field", "Tennessee", "text",
-                            &field);
-  form.fields.push_back(field);
-  form.fields.push_back(cached_fields[2]);
-  form.fields.push_back(cached_fields[1]);
-  form.fields.push_back(cached_fields[3]);
-  form.fields.push_back(cached_fields[0]);
+  form.fields = {CreateField("New field", "new field", "Tennessee", "text"),
+                 cached_fields[2], cached_fields[1], cached_fields[3],
+                 cached_fields[0]};
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -2939,26 +2570,11 @@
 // Verify that when submitting an autofillable form, the stored profile metric
 // is logged.
 TEST_F(AutofillMetricsTest, StoredProfileCountAutofillableFormSubmission) {
-  // Construct a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
-
   // Three fields is enough to make it an autofillable form.
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text"),
+                              CreateField("Phone", "phone", "", "text")});
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SeeForm(form);
   SubmitForm(form);
@@ -2972,24 +2588,10 @@
 // Verify that when submitting a non-autofillable form, the stored profile
 // metric is not logged.
 TEST_F(AutofillMetricsTest, StoredProfileCountNonAutofillableFormSubmission) {
-  // Construct a non-fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
-
   // Two fields is not enough to make it an autofillable form.
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text")});
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SeeForm(form);
   SubmitForm(form);
@@ -3003,36 +2605,20 @@
 // Verify that when submitting an autofillable form, the proper tppe of
 // the edited fields is correctly logged to UKM.
 TEST_F(AutofillMetricsTest, TypeOfEditedAutofilledFieldsUkmLogging) {
-  // Construct a fillable form.
-  FormData form;
-  form.name = u"TestForm";
-  form.url = GURL("https://example.test/form.html");
-  form.action = GURL("https://example.test/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("https://example.test/form.html"));
+  FormData form = CreateForm(
+      {CreateField("Autofilled", "autofilled", "Elvis Aaron Presley", "text"),
+       CreateField("Autofill Failed", "autofillfailed", "buddy@gmail.com",
+                   "text"),
+       CreateField("Phone", "phone", "2345678901", "tel")});
+  form.fields[0].is_autofilled = true;
+  form.fields[1].is_autofilled = true;
+  form.fields[2].is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
+  std::vector<ServerFieldType> heuristic_types = {NAME_FULL, EMAIL_ADDRESS,
+                                                  PHONE_HOME_CITY_AND_NUMBER};
 
-  FormFieldData field;
-  test::CreateTestFormField("Autofilled", "autofilled", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-
-  test::CreateTestFormField("Autofill Failed", "autofillfailed",
-                            "buddy@gmail.com", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(EMAIL_ADDRESS);
-  server_types.push_back(EMAIL_ADDRESS);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
+  std::vector<ServerFieldType> server_types = {NAME_FULL, EMAIL_ADDRESS,
+                                               PHONE_HOME_CITY_AND_NUMBER};
 
   autofill_manager().AddSeenForm(form, heuristic_types, server_types);
 
@@ -3044,7 +2630,6 @@
   // Simulate text input in the first and second fields.
   ChangeTextField(form, form.fields[0]);
 
-  // Simulate form submission.
   SubmitForm(form);
   ExpectedUkmMetricsRecord name_field_ukm_record{
       {UkmEditedAutofilledFieldAtSubmission::kFieldSignatureName,
@@ -3062,45 +2647,25 @@
 // Verify that when submitting an autofillable form, the proper tppe of
 // the edited fields is correctly logged to UMA.
 TEST_F(AutofillMetricsTest, TypeOfEditedAutofilledFieldsUmaLogging) {
-  // Construct a fillable form.
-  FormData form;
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
+  FormData form = CreateForm(
+      {CreateField("Autofilled", "autofilled", "Elvis Aaron Presley", "text"),
+       CreateField("Autofill Failed", "autofillfailed", "buddy@gmail.com",
+                   "text"),
+       CreateField("Phone", "phone", "2345678901", "tel")});
+  form.fields[0].is_autofilled = true;
+  form.fields[1].is_autofilled = true;
+  form.fields[2].is_autofilled = true;
 
-  std::vector<ServerFieldType> heuristic_types, server_types;
+  std::vector<ServerFieldType> field_types = {NAME_FULL, EMAIL_ADDRESS,
+                                              PHONE_HOME_CITY_AND_NUMBER};
 
-  FormFieldData field;
-  test::CreateTestFormField("Autofilled", "autofilled", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
-
-  test::CreateTestFormField("Autofill Failed", "autofillfailed",
-                            "buddy@gmail.com", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(EMAIL_ADDRESS);
-  server_types.push_back(EMAIL_ADDRESS);
-
-  test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   base::HistogramTester histogram_tester;
   // Simulate text input in the first and second fields.
   ChangeTextField(form, form.fields[0]);
   ChangeTextField(form, form.fields[1]);
 
-  // Simulate form submission.
   SubmitForm(form);
 
   // The |NAME_FULL| field was edited (bucket 112).
@@ -3136,48 +2701,26 @@
 // Verify that when submitting an autofillable form, the proper number of edited
 // fields is logged.
 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields) {
-  // Construct a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
-
-  std::vector<ServerFieldType> heuristic_types, server_types;
-
   // Three fields is enough to make it an autofillable form.
-  FormFieldData field;
-  test::CreateTestFormField("Autofilled", "autofilled", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
+  FormData form = CreateForm(
+      {CreateField("Autofilled", "autofilled", "Elvis Aaron Presley", "text"),
+       CreateField("Autofill Failed", "autofillfailed", "buddy@gmail.com",
+                   "text"),
+       CreateField("Phone", "phone", "2345678901", "tel")});
+  form.fields[0].is_autofilled = true;
+  form.fields[1].is_autofilled = true;
+  form.fields[2].is_autofilled = true;
 
-  test::CreateTestFormField("Autofill Failed", "autofillfailed",
-                            "buddy@gmail.com", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(EMAIL_ADDRESS);
-  server_types.push_back(EMAIL_ADDRESS);
+  std::vector<ServerFieldType> field_types = {NAME_FULL, EMAIL_ADDRESS,
+                                              PHONE_HOME_CITY_AND_NUMBER};
 
-  test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   base::HistogramTester histogram_tester;
   // Simulate text input in the first and second fields.
   ChangeTextField(form, form.fields[0]);
   ChangeTextField(form, form.fields[1]);
 
-  // Simulate form submission.
   SubmitForm(form);
 
   // An autofillable form was submitted, and the number of edited autofilled
@@ -3189,40 +2732,20 @@
 // Verify that when resetting the autofill manager (such as during a
 // navigation), the proper number of edited fields is logged.
 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) {
-  // Construct a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  std::vector<ServerFieldType> heuristic_types, server_types;
-
   // Three fields is enough to make it an autofillable form.
-  FormFieldData field;
-  test::CreateTestFormField("Autofilled", "autofilled", "Elvis Aaron Presley",
-                            "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(NAME_FULL);
-  server_types.push_back(NAME_FULL);
+  FormData form = CreateForm(
+      {CreateField("Autofilled", "autofilled", "Elvis Aaron Presley", "text"),
+       CreateField("Autofill Failed", "autofillfailed", "buddy@gmail.com",
+                   "text"),
+       CreateField("Phone", "phone", "2345678901", "tel")});
+  form.fields[0].is_autofilled = true;
+  form.fields[1].is_autofilled = true;
+  form.fields[2].is_autofilled = true;
 
-  test::CreateTestFormField("Autofill Failed", "autofillfailed",
-                            "buddy@gmail.com", "text", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(EMAIL_ADDRESS);
-  server_types.push_back(EMAIL_ADDRESS);
+  std::vector<ServerFieldType> field_types = {NAME_FULL, EMAIL_ADDRESS,
+                                              PHONE_HOME_CITY_AND_NUMBER};
 
-  test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field);
-  field.is_autofilled = true;
-  form.fields.push_back(field);
-  heuristic_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-  server_types.push_back(PHONE_HOME_CITY_AND_NUMBER);
-
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   base::HistogramTester histogram_tester;
   // Simulate text input in the first field.
@@ -3239,20 +2762,8 @@
 
 // Verify that we correctly log metrics regarding developer engagement.
 TEST_F(AutofillMetricsTest, DeveloperEngagement) {
-  // Start with a non-fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text")});
 
   // Ensure no metrics are logged when small form support is disabled (min
   // number of fields enforced).
@@ -3264,8 +2775,7 @@
   }
 
   // Add another field to the form, so that it becomes fillable.
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
+  form.fields.push_back(CreateField("Phone", "phone", "", "text"));
 
   // Expect the "form parsed without hints" metric to be logged.
   {
@@ -3282,15 +2792,9 @@
   // three fillable fields to be considered to be autofillable; and if at least
   // one field specifies an explicit type hint, we don't apply any of our usual
   // local heuristics to detect field types in the rest of the form.
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "given-name";
-  form.fields.push_back(field);
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "email";
-  form.fields.push_back(field);
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "address-line1";
-  form.fields.push_back(field);
+  form.fields.push_back(CreateField("", "", "", "text", "given-name"));
+  form.fields.push_back(CreateField("", "", "", "text", "email"));
+  form.fields.push_back(CreateField("", "", "", "text", "address-line1"));
 
   // Expect the "form parsed with field type hints" metric to be logged.
   {
@@ -3307,9 +2811,7 @@
   }
 
   // Add a field with an author-specified UPI-VPA field type in the form.
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "upi-vpa";
-  form.fields.push_back(field);
+  form.fields.push_back(CreateField("", "", "", "text", "upi-vpa"));
 
   // Expect the "form parsed with type hints" metric, and the
   // "author-specified upi-vpa type" metric to be logged.
@@ -3330,20 +2832,8 @@
 // developer engagement.
 TEST_F(AutofillMetricsTest,
        UkmDeveloperEngagement_LogFillableFormParsedWithoutTypeHints) {
-  // Start with a non-fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text")});
 
   // Ensure no entries are logged when loading a non-fillable form.
   {
@@ -3354,8 +2844,7 @@
   }
 
   // Add another field to the form, so that it becomes fillable.
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
+  form.fields.push_back(CreateField("Phone", "phone", "", "text"));
 
   // Expect the "form parsed without field type hints" metric and the
   // "form loaded" form interaction event to be logged.
@@ -3374,38 +2863,18 @@
 // developer engagement.
 TEST_F(AutofillMetricsTest,
        UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) {
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-
-  // Add another field to the form, so that it becomes fillable.
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
-
-  // Add some fields with an author-specified field type to the form.
+  // The latter three fields have an author-specified field type to the form.
   // We need to add at least three fields, because a form must have at least
   // three fillable fields to be considered to be autofillable; and if at least
   // one field specifies an explicit type hint, we don't apply any of our usual
   // local heuristics to detect field types in the rest of the form.
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "given-name";
-  form.fields.push_back(field);
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "email";
-  form.fields.push_back(field);
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "address-line1";
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("Name", "name", "", "text"),
+                  CreateField("Email", "email", "", "text"),
+                  CreateField("Phone", "phone", "", "text"),
+                  CreateField("", "", "", "text", "given-name"),
+                  CreateField("", "", "", "text", "email"),
+                  CreateField("", "", "", "text", "address-line1")});
 
   // Expect the "form parsed without field type hints" metric and the
   // "form loaded" form interaction event to be logged.
@@ -3423,25 +2892,11 @@
 // Verify that we correctly log UKM for form parsed with type hints regarding
 // developer engagement.
 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) {
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Payment", "payment", "", "text", &field);
-  field.autocomplete_attribute = "upi-vpa";
-  form.fields.push_back(field);
-  test::CreateTestFormField("", "", "", "text", &field);
-  field.autocomplete_attribute = "address-line1";
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("Name", "name", "", "text"),
+                  CreateField("Email", "email", "", "text"),
+                  CreateField("Payment", "payment", "", "text", "upi-vpa"),
+                  CreateField("", "", "", "text", "address-line1")});
 
   {
     SCOPED_TRACE("VPA and other autocomplete hint present");
@@ -3711,69 +3166,52 @@
 
 // Test that we log the number of Autofill suggestions when filling a form.
 TEST_F(AutofillMetricsTest, AddressSuggestionsCount) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "email"),
+                              CreateField("Phone", "phone", "", "tel")});
+  std::vector<ServerFieldType> field_types = {NAME_FULL, EMAIL_ADDRESS,
+                                              PHONE_HOME_NUMBER};
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(NAME_FULL);
-  test::CreateTestFormField("Email", "email", "", "email", &field);
-  form.fields.push_back(field);
-  field_types.push_back(EMAIL_ADDRESS);
-  test::CreateTestFormField("Phone", "phone", "", "tel", &field);
-  form.fields.push_back(field);
-  field_types.push_back(PHONE_HOME_NUMBER);
-
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the phone field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.front());
     histogram_tester.ExpectUniqueSample("Autofill.AddressSuggestionsCount", 2,
                                         1);
   }
 
+  FormFieldData email_field = CreateField("Email", "email", "b", "email");
   {
     // Simulate activating the autofill popup for the email field after typing.
     // No new metric should be logged, since we're still on the same page.
-    test::CreateTestFormField("Email", "email", "b", "email", &field);
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, email_field);
     histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0);
   }
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the email field after typing.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, email_field);
     histogram_tester.ExpectUniqueSample("Autofill.AddressSuggestionsCount", 1,
                                         1);
   }
 
   // Reset the autofill manager state again.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the email field after a fill.
     form.fields[0].is_autofilled = true;
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, email_field);
     histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 1);
   }
 }
@@ -3781,35 +3219,19 @@
 // Test that we log the correct number of Company Name Autofill suggestions when
 // filling a form.
 TEST_F(AutofillMetricsTest, CompanyNameSuggestions) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "email"),
+                              CreateField("Company", "company", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(NAME_FULL);
-  test::CreateTestFormField("Email", "email", "", "email", &field);
-  form.fields.push_back(field);
-  field_types.push_back(EMAIL_ADDRESS);
-  test::CreateTestFormField("Company", "company", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(COMPANY_NAME);
+  std::vector<ServerFieldType> field_types = {NAME_FULL, EMAIL_ADDRESS,
+                                              COMPANY_NAME};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the phone field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.front());
     histogram_tester.ExpectUniqueSample("Autofill.AddressSuggestionsCount", 2,
                                         1);
   }
@@ -3817,40 +3239,26 @@
 
 // Test that the credit card checkout flow user actions are correctly logged.
 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Name on card", "cc-name", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text"),
+                  CreateField("Expiration date", "expdate", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name on card", "cc-name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
-  test::CreateTestFormField("Expiration date", "expdate", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER,
+      CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate an Autofill query on a credit card field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.front());
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_PolledCreditCardSuggestions"));
   }
@@ -3858,7 +3266,7 @@
   // Simulate showing a credit card suggestion polled from "Name on card" field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_ShowedCreditCardSuggestions"));
@@ -3868,7 +3276,7 @@
   // field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[1]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_ShowedCreditCardSuggestions"));
@@ -3893,7 +3301,7 @@
   // field along with a "Clear form" footer suggestion.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[1]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_ShowedCreditCardSuggestions"));
@@ -3913,7 +3321,7 @@
   // field, this time to submit the form.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[1]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_ShowedCreditCardSuggestions"));
@@ -3949,7 +3357,7 @@
   // Simulate submitting the credit card form.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     EXPECT_EQ(1,
               user_action_tester.GetActionCount("Autofill_OnWillSubmitForm"));
@@ -4014,17 +3422,8 @@
 
 // Test that the UPI Checkout flow form submit is correctly logged
 TEST_F(AutofillMetricsTest, UpiVpaUkmTest) {
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-  FormFieldData field;
-  test::CreateTestFormField("Enter VPA", "upi-vpa", "unique_id@upi", "text",
-                            &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm(
+      {CreateField("Enter VPA", "upi-vpa", "unique_id@upi", "text")});
 
   {
     SeeForm(form);
@@ -4032,8 +3431,8 @@
     VerifySubmitFormUkm(test_ukm_recorder_, form,
                         AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA,
                         /*is_for_credit_card=*/false,
-                        /* has_upi_vpa_field */ true,
-                        /* UPI VPA has Unknown form type.*/
+                        /*has_upi_vpa_field=*/true,
+                        // UPI VPA has Unknown form type.
                         {FormType::kAddressForm, FormType::kUnknownFormType});
     PurgeUKM();
   }
@@ -4044,35 +3443,19 @@
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate an Autofill query on a profile field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_PolledProfileSuggestions"));
   }
@@ -4080,7 +3463,7 @@
   // Simulate showing a profile suggestion polled from "State" field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_ShowedProfileSuggestions"));
@@ -4089,7 +3472,7 @@
   // Simulate showing a profile suggestion polled from "City" field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[1]);
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_ShowedProfileSuggestions"));
@@ -4125,7 +3508,7 @@
   // Simulate submitting the profile form.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     EXPECT_EQ(1,
               user_action_tester.GetActionCount("Autofill_OnWillSubmitForm"));
@@ -4184,33 +3567,21 @@
 // Tests that the Autofill_PolledCreditCardSuggestions user action is only
 // logged once if the field is queried repeatedly.
 TEST_F(AutofillMetricsTest, PolledCreditCardSuggestions_DebounceLogs) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up the form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://www.foo.com/");
+  FormData form =
+      CreateForm({CreateField("Name on card", "cc-name", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text"),
+                  CreateField("Expiration date", "expdate", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name on card", "cc-name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
-  test::CreateTestFormField("Expiration date", "expdate", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER,
+      CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate an Autofill query on a credit card field. A poll should be logged.
   base::UserActionTester user_action_tester;
@@ -4239,31 +3610,18 @@
 // Tests that the Autofill.QueriedCreditCardFormIsSecure histogram is logged
 // properly.
 TEST_F(AutofillMetricsTest, QueriedCreditCardFormIsSecure) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up the form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
   {
     // Simulate having seen this insecure form on page load.
@@ -4281,7 +3639,7 @@
         client_form_origin.ReplaceComponents(replacements));
     form.main_frame_origin =
         url::Origin::Create(autofill_client_->form_origin());
-    autofill_manager().AddSeenForm(form, field_types, field_types);
+    autofill_manager().AddSeenForm(form, field_types);
 
     // Simulate an Autofill query on a credit card field (HTTP, non-secure
     // form).
@@ -4294,7 +3652,6 @@
   }
 
   {
-    // Simulate having seen this secure form on page load.
     autofill_manager().Reset();
     form.host_frame = test::MakeLocalFrameToken();
     form.unique_renderer_id = test::MakeFormRendererId();
@@ -4302,7 +3659,7 @@
     form.action = GURL("https://example.com/submit.html");
     form.main_frame_origin =
         url::Origin::Create(autofill_client_->form_origin());
-    autofill_manager().AddSeenForm(form, field_types, field_types);
+    autofill_manager().AddSeenForm(form, field_types);
 
     // Simulate an Autofill query on a credit card field (HTTPS form).
     base::HistogramTester histogram_tester;
@@ -4317,30 +3674,14 @@
 TEST_F(AutofillMetricsTest, PolledProfileSuggestions_DebounceLogs) {
   RecreateProfile(/*is_server=*/false);
 
-  // Set up the form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate an Autofill query on a profile field. A poll should be logged.
   base::UserActionTester user_action_tester;
@@ -4368,28 +3709,15 @@
 
 // Test that we log parsed form event for credit card forms.
 TEST_P(AutofillMetricsIFrameTest, CreditCardParsedFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Card Number", "card_number", "", "text"),
+                  CreateField("Expiration", "cc_exp", "", "text"),
+                  CreateField("Verification", "verification", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Card Number", "card_number", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Expiration", "cc_exp", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Verification", "verification", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_VERIFICATION_CODE);
+  std::vector<ServerFieldType> field_types = {CREDIT_CARD_NAME_FULL,
+                                              CREDIT_CARD_EXP_MONTH,
+                                              CREDIT_CARD_VERIFICATION_CODE};
 
-  // Simulate seeing and parsing the form.
   base::HistogramTester histogram_tester;
   SeeForm(form);
   histogram_tester.ExpectUniqueSample(
@@ -4399,35 +3727,20 @@
 
 // Test that we log interacted form event for credit cards related.
 TEST_P(AutofillMetricsIFrameTest, CreditCardInteractedFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the credit card field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     histogram_tester.ExpectUniqueSample("Autofill.FormEvents.CreditCard",
                                         FORM_EVENT_INTERACTED_ONCE, 1);
     histogram_tester.ExpectUniqueSample(
@@ -4437,13 +3750,15 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the credit card field twice.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field, /*query_id=*/0);
-    autofill_manager().OnAskForValuesToFillTest(form, field, /*query_id=*/1);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0],
+                                                /*query_id=*/0);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0],
+                                                /*query_id=*/1);
     histogram_tester.ExpectUniqueSample("Autofill.FormEvents.CreditCard",
                                         FORM_EVENT_INTERACTED_ONCE, 1);
     histogram_tester.ExpectUniqueSample(
@@ -4454,35 +3769,20 @@
 
 // Test that we log suggestion shown form events for credit cards.
 TEST_P(AutofillMetricsIFrameTest, CreditCardPopupSuppressedFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating popup being suppressed.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidSuppressPopup(form, field);
+    autofill_manager().DidSuppressPopup(form, form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_POPUP_SUPPRESSED, 1);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
@@ -4494,13 +3794,13 @@
   }
 
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating popup being suppressed.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidSuppressPopup(form, field);
-    autofill_manager().DidSuppressPopup(form, field);
+    autofill_manager().DidSuppressPopup(form, form.fields[0]);
+    autofill_manager().DidSuppressPopup(form, form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_POPUP_SUPPRESSED, 2);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
@@ -4514,35 +3814,21 @@
 
 // Test that we log suggestion shown form events for credit cards.
 TEST_P(AutofillMetricsIFrameTest, CreditCardShownFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating new popup being shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 1);
     histogram_tester.ExpectBucketCount(credit_card_form_events_frame_histogram_,
@@ -4555,13 +3841,15 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating two popups in the same page load.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount(credit_card_form_events_frame_histogram_,
@@ -4574,13 +3862,13 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating same popup being refreshed.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(false /* is_new_popup */, form,
-                                          field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/false, form,
+                                          form.fields[0]);
     EXPECT_THAT(
         histogram_tester.GetAllSamples("Autofill.FormEvents.CreditCard"),
         BucketsAre(Bucket(FORM_EVENT_SUGGESTIONS_SHOWN, 0),
@@ -4595,43 +3883,30 @@
 // Test that we log specific suggestion shown form events for virtual credit
 // cards.
 TEST_P(AutofillMetricsIFrameTest, VirtualCreditCardShownFormEvents) {
-  // Set up our form data.  https:// is required.
-  FormData form;
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("CVC", "cvc", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("CVC", "cvc", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_VERIFICATION_CODE);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR,
+      CREDIT_CARD_VERIFICATION_CODE, CREDIT_CARD_NUMBER};
 
   // Creating cards, including a virtual card.
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      true /* include_virtual_credit_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/false,
+                      /*include_virtual_credit_card=*/true);
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate new popup being shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 1);
     histogram_tester.ExpectBucketCount(credit_card_form_events_frame_histogram_,
@@ -4656,14 +3931,16 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating two popups in the same page load.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount(credit_card_form_events_frame_histogram_,
@@ -4688,14 +3965,14 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating same popup being refreshed.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(false /* is_new_popup */, form,
-                                          field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/false, form,
+                                          form.fields.back());
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 0);
     histogram_tester.ExpectBucketCount(credit_card_form_events_frame_histogram_,
@@ -4719,22 +3996,24 @@
   }
 
   // Recreate cards, this time *without* a virtual card.
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* include_virtual_credit_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/false,
+                      /*include_virtual_credit_card=*/false);
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating two popups in the same page load. Suggestions shown should be
     // logged, but suggestions shown with virtual card should not.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.CreditCard",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount(credit_card_form_events_frame_histogram_,
@@ -4761,34 +4040,19 @@
 // Test that we log selected form event for credit cards.
 TEST_P(AutofillMetricsIFrameTest, CreditCardSelectedFormEvents) {
   // Creating all kinds of cards.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating selecting a masked server card suggestion.
@@ -4815,7 +4079,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating selecting a masked server card multiple times.
@@ -4846,7 +4110,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating selecting a virtual server suggestion by selecting the
@@ -4874,7 +4138,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating selecting a virtual card multiple times.
@@ -4908,34 +4172,19 @@
 // Test that we log filled form events for credit cards.
 TEST_P(AutofillMetricsIFrameTest, CreditCardFilledFormEvents) {
   // Creating all kinds of cards.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling a local card suggestion.
@@ -4959,7 +4208,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling a virtual card suggestion by selecting the option
@@ -4987,7 +4236,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling a masked card server suggestion.
@@ -5016,14 +4265,14 @@
 
   // Recreating cards as the previous test should have upgraded the masked
   // card to a full card.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling a full card server suggestion.
@@ -5048,7 +4297,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling multiple times.
@@ -5095,7 +4344,7 @@
   std::vector<ServerFieldType> field_types = {
       CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
   // Simulate filling a unique local card suggestion.
   base::HistogramTester histogram_tester;
   autofill_manager().FillOrPreviewForm(
@@ -5139,11 +4388,11 @@
   std::vector<ServerFieldType> field_types = {
       CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
   // Simulate filling a local card suggestion with a duplicate server card.
   base::HistogramTester histogram_tester;
   // Local card with a duplicate server card present at index 0.
-  std::string local_guid(local_and_duplicate_server_card_guids.at(0));
+  std::string local_guid(local_and_duplicate_server_card_guids[0]);
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
@@ -5176,27 +4425,22 @@
   std::string preflight_latency_metric =
       "Autofill.BetterAuth.CardUnmaskPreflightDuration";
 
-  // Set up our form data.
-  FormData form;
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  FormData form =
+      CreateForm({CreateField("Credit card", "cardnum", "", "text")});
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  std::vector<ServerFieldType> field_types = {CREDIT_CARD_NUMBER};
+
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Create local cards and set user as eligible for FIDO authentication.
     base::HistogramTester histogram_tester;
-    RecreateCreditCards(true /* include_local_credit_card */,
-                        false /* include_masked_server_credit_card */,
-                        false /* include_full_server_credit_card */,
-                        false /* masked_card_is_enrolled_for_virtual_card */);
+    RecreateCreditCards(/*include_local_credit_card=*/true,
+                        /*include_masked_server_credit_card=*/false,
+                        /*include_full_server_credit_card=*/false,
+                        /*masked_card_is_enrolled_for_virtual_card=*/false);
     SetFidoEligibility(true);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     // If no masked server cards are available, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
@@ -5207,12 +4451,12 @@
     // Create masked server cards and set user as ineligible for FIDO
     // authentication.
     base::HistogramTester histogram_tester;
-    RecreateCreditCards(false /* include_local_credit_card */,
-                        true /* include_masked_server_credit_card */,
-                        false /* include_full_server_credit_card */,
-                        false /* masked_card_is_enrolled_for_virtual_card */);
+    RecreateCreditCards(/*include_local_credit_card=*/false,
+                        /*include_masked_server_credit_card=*/true,
+                        /*include_full_server_credit_card=*/false,
+                        /*masked_card_is_enrolled_for_virtual_card=*/false);
     SetFidoEligibility(false);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     // If user is not verifiable, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
@@ -5223,12 +4467,12 @@
     // Create full server cards and set user as eligible for FIDO
     // authentication.
     base::HistogramTester histogram_tester;
-    RecreateCreditCards(false /* include_local_credit_card */,
-                        false /* include_masked_server_credit_card */,
-                        true /* include_full_server_credit_card */,
-                        false /* masked_card_is_enrolled_for_virtual_card */);
+    RecreateCreditCards(/*include_local_credit_card=*/false,
+                        /*include_masked_server_credit_card=*/false,
+                        /*include_full_server_credit_card=*/true,
+                        /*masked_card_is_enrolled_for_virtual_card=*/false);
     SetFidoEligibility(false);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     // If no masked server cards are available, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
@@ -5239,12 +4483,12 @@
     // Create masked server cards and set user as eligible for FIDO
     // authentication.
     base::HistogramTester histogram_tester;
-    RecreateCreditCards(false /* include_local_credit_card */,
-                        true /* include_masked_server_credit_card */,
-                        false /* include_full_server_credit_card */,
-                        false /* masked_card_is_enrolled_for_virtual_card */);
+    RecreateCreditCards(/*include_local_credit_card=*/false,
+                        /*include_masked_server_credit_card=*/true,
+                        /*include_full_server_credit_card=*/false,
+                        /*masked_card_is_enrolled_for_virtual_card=*/false);
     SetFidoEligibility(true);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     std::string guid(
         "10000000-0000-0000-0000-000000000002");  // masked server card
@@ -5267,12 +4511,12 @@
     // Create all types of cards and set user as eligible for FIDO
     // authentication.
     base::HistogramTester histogram_tester;
-    RecreateCreditCards(true /* include_local_credit_card */,
-                        true /* include_masked_server_credit_card */,
-                        true /* include_full_server_credit_card */,
-                        false /* masked_card_is_enrolled_for_virtual_card */);
+    RecreateCreditCards(/*include_local_credit_card=*/true,
+                        /*include_masked_server_credit_card=*/true,
+                        /*include_full_server_credit_card=*/true,
+                        /*masked_card_is_enrolled_for_virtual_card=*/false);
     SetFidoEligibility(true);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                           form.fields[0]);
     std::string guid(
         "10000000-0000-0000-0000-000000000002");  // masked server card
@@ -5295,34 +4539,19 @@
 // Test that we log submitted form events for credit cards.
 TEST_F(AutofillMetricsTest, CreditCardGetRealPanDuration_ServerCard) {
   // Creating masked card
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling a masked card server suggestion.
@@ -5343,12 +4572,12 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
   // Creating masked card
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
   {
     // Simulating filling a masked card server suggestion.
@@ -5372,10 +4601,10 @@
 // crbug/1267105.
 TEST_F(AutofillMetricsTest, CreditCardGetRealPanDuration_BadServerResponse) {
   // Creating masked card.
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
   // Set up our form data.
   FormData form;
   test::CreateTestCreditCardFormData(&form,
@@ -5387,9 +4616,7 @@
       CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, CREDIT_CARD_VERIFICATION_CODE};
   ASSERT_EQ(form.fields.size(), field_types.size());
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating filling a masked card server suggestion.
@@ -5497,40 +4724,26 @@
 TEST_F(AutofillMetricsTest,
        CreditCardSubmittedWithoutSelectingSuggestionsNoCard) {
   // Create a local card for testing, card number is 4111111111111111.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with suggestion shown, but not selected.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   SubmitForm(form);
   histogram_tester.ExpectBucketCount(
       "Autofill.FormEvents.CreditCard",
@@ -5540,40 +4753,26 @@
 TEST_P(AutofillMetricsIFrameTest,
        CreditCardSubmittedWithoutSelectingSuggestionsWrongSizeCard) {
   // Create a local card for testing, card number is 4111111111111111.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "411111111", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "411111111", "text",
-                            &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with suggestion shown, but not selected.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   SubmitForm(form);
   histogram_tester.ExpectBucketCount(
       "Autofill.FormEvents.CreditCard",
@@ -5586,40 +4785,26 @@
 TEST_P(AutofillMetricsIFrameTest,
        CreditCardSubmittedWithoutSelectingSuggestionsFailLuhnCheckCard) {
   // Create a local card for testing, card number is 4111111111111111.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form = CreateForm(
+      {CreateField("Month", "card_month", "", "text"),
+       CreateField("Year", "card_year", "", "text"),
+       CreateField("Credit card", "cardnum", "4444444444444444", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "4444444444444444",
-                            "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with suggestion shown, but not selected.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   SubmitForm(form);
   histogram_tester.ExpectBucketCount(
       "Autofill.FormEvents.CreditCard",
@@ -5632,41 +4817,26 @@
 TEST_P(AutofillMetricsIFrameTest,
        CreditCardSubmittedWithoutSelectingSuggestionsUnknownCard) {
   // Create a local card for testing, card number is 4111111111111111.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm(
+      {CreateField("Month", "card_month", "", "text"),
+       CreateField("Year", "card_year", "", "text"),
+       CreateField("Credit card", "cardnum", "5105105105105100", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "5105105105105100",
-                            "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with suggestion shown, but not selected.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   SubmitForm(form);
   histogram_tester.ExpectBucketCount(
       "Autofill.FormEvents.CreditCard",
@@ -5679,41 +4849,26 @@
 TEST_P(AutofillMetricsIFrameTest,
        CreditCardSubmittedWithoutSelectingSuggestionsKnownCard) {
   // Create a local card for testing, card number is 4111111111111111.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm(
+      {CreateField("Month", "card_month", "", "text"),
+       CreateField("Year", "card_year", "", "text"),
+       CreateField("Credit card", "cardnum", "4111111111111111", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "4111111111111111",
-                            "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with suggestion shown, but not selected.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   SubmitForm(form);
   histogram_tester.ExpectBucketCount(
       "Autofill.FormEvents.CreditCard",
@@ -5726,41 +4881,26 @@
 TEST_P(AutofillMetricsIFrameTest,
        ShouldNotLogSubmitWithoutSelectingSuggestionsIfSuggestionFilled) {
   // Create a local card for testing, card number is 4111111111111111.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm(
+      {CreateField("Month", "card_month", "", "text"),
+       CreateField("Year", "card_year", "", "text"),
+       CreateField("Credit card", "cardnum", "4111111111111111", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "4111111111111111",
-                            "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with suggestion shown and selected.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   std::string guid("10000000-0000-0000-0000-000000000001");
   autofill_manager().FillOrPreviewForm(
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.back(),
@@ -5791,35 +4931,20 @@
 TEST_F(AutofillMetricsTest, ShouldNotLogFormEventNoCardForAddressForm) {
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulating submission with no filled data.
   base::HistogramTester histogram_tester;
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                        form.fields[0]);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   SubmitForm(form);
   histogram_tester.ExpectBucketCount(
       "Autofill.FormEvents.Address",
@@ -5829,39 +4954,24 @@
 // Test that we log submitted form events for credit cards.
 TEST_P(AutofillMetricsIFrameTest, CreditCardSubmittedFormEvents) {
   // Creating all kinds of cards.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with no filled data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     SubmitForm(form);
 
     histogram_tester.ExpectBucketCount(
@@ -5887,13 +4997,14 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.CreditCard",
@@ -5929,15 +5040,16 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown. Form is submmitted and
     // autofill manager is reset before UploadFormDataAsyncCallback is
     // triggered.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     SubmitForm(form);
     // Trigger UploadFormDataAsyncCallback.
     autofill_manager().Reset();
@@ -5975,12 +5087,12 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled local data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     std::string guid("10000000-0000-0000-0000-000000000001");  // local card
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
@@ -6020,13 +5132,13 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled virtual card data by selecting the
     // option based on the enrolled masked card.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     std::string guid("10000000-0000-0000-0000-000000000002");  // masked card
     autofill_manager().FillOrPreviewVirtualCardInformation(
         mojom::RendererFormDataAction::kFill, guid, kDefaultPageID, form,
@@ -6067,12 +5179,12 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled server data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     std::string guid(
         "10000000-0000-0000-0000-000000000003");  // full server card
     autofill_manager().FillOrPreviewForm(
@@ -6114,7 +5226,7 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with a masked card server suggestion.
@@ -6162,19 +5274,19 @@
 
   // Recreating cards as the previous test should have upgraded the masked
   // card to a full card.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating multiple submissions.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     SubmitForm(form);
 
     VerifySubmitFormUkm(test_ukm_recorder_, form,
@@ -6277,13 +5389,14 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown but without previous
     // interaction.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.CreditCard",
@@ -6369,39 +5482,24 @@
 // cards.
 TEST_P(AutofillMetricsIFrameTest, CreditCardWillSubmitFormEvents) {
   // Creating all kinds of cards.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with no filled data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.CreditCard",
@@ -6419,13 +5517,14 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.CreditCard",
@@ -6443,12 +5542,12 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled local data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     std::string guid("10000000-0000-0000-0000-000000000001");  // local card
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
@@ -6471,13 +5570,13 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled virtual card data by selecting the
     // option based on the enrolled masked card.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     std::string guid("10000000-0000-0000-0000-000000000002");  // masked card
     autofill_manager().FillOrPreviewVirtualCardInformation(
         mojom::RendererFormDataAction::kFill, guid, kDefaultPageID, form,
@@ -6501,12 +5600,12 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled server data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     // Full server card.
     std::string guid("10000000-0000-0000-0000-000000000003");
     autofill_manager().FillOrPreviewForm(
@@ -6530,7 +5629,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with a masked card server suggestion.
@@ -6558,19 +5657,19 @@
 
   // Recreating cards as the previous test should have upgraded the masked
   // card to a full card.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      true /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/true);
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating multiple submissions.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
@@ -6637,13 +5736,14 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown but without previous
     // interaction.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.CreditCard",
@@ -6710,40 +5810,29 @@
 
 // Test that we log form events for masked server card with offers.
 TEST_F(AutofillMetricsTest, LogServerOfferFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
   // Creating all kinds of cards. None of them have offers.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating activating the autofill popup for the credit card field, new
     // popup being shown and filling a local card suggestion.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     std::string guid("10000000-0000-0000-0000-000000000001");  // local card
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
@@ -6782,7 +5871,7 @@
                                      /*id=*/0x4fff);
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // A masked server card with linked offers.
@@ -6791,8 +5880,9 @@
     // submitting the form. Verify that all related form events are correctly
     // logged to offer sub-histogram.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     // Select the masked server card with the linked offer.
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.back(),
@@ -6828,7 +5918,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // A masked server card with linked offers.
@@ -6837,8 +5927,9 @@
     // submitting the form. Verify that all related form events are correctly
     // logged to offer sub-histogram.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     // Select another card, and still log to offer
     // sub-histogram because user has another masked server card with offer.
     guid = "10000000-0000-0000-0000-000000000002";
@@ -6884,10 +5975,10 @@
   }
 
   // Recreate cards and add card that is linked to an expired offer.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
   guid = "12340000-0000-0000-0000-000000000002";
   AddMaskedServerCreditCardWithOffer(guid, "$4",
                                      autofill_client_->form_origin(),
@@ -6895,14 +5986,15 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating activating the autofill popup for the credit card field,
     // new popup being shown and filling a local card suggestion.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     // Select the card with linked offer, though metrics should not record it
     // since the offer is expired.
     autofill_manager().FillOrPreviewForm(
@@ -6954,10 +6046,10 @@
   }
 
   // Recreate cards and add card that is linked to an offer.
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
   guid = "12340000-0000-0000-0000-000000000003";
   AddMaskedServerCreditCardWithOffer(guid, "$5",
                                      autofill_client_->form_origin(),
@@ -6965,7 +6057,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // A masked server card with linked offers.
@@ -6976,8 +6068,9 @@
     // sub-histogram. Making suggestions reappear tests confirmation of a fix
     // for crbug/1198751.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     // Select the masked server card with the linked offer.
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.back(),
@@ -6988,8 +6081,9 @@
 
     // Simulate user showing suggestions but then submitting form with
     // previously filled card info.
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.CreditCard.WithOffer",
@@ -7027,7 +6121,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // A masked server card with linked offers.
@@ -7036,8 +6130,9 @@
     // failing the CVC check and submitting the form anyways. Verify that all
     // related form events are correctly logged to offer sub-histogram.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     // Select the masked server card with the linked offer, but fail the CVC
     // check.
     autofill_manager().FillOrPreviewForm(
@@ -7085,7 +6180,7 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // A masked server card with linked offers.
@@ -7096,8 +6191,9 @@
     base::HistogramTester histogram_tester;
 
     // Show suggestions and select the card with offer.
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.back(),
         autofill_manager().suggestion_generator()->MakeFrontendId(
@@ -7106,8 +6202,9 @@
                     "6011000990139424");
 
     // Show suggestions again, and select a local card instead.
-    autofill_manager().OnAskForValuesToFillTest(form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields.back());
     guid = "10000000-0000-0000-0000-000000000001";
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.back(),
@@ -7143,37 +6240,19 @@
 
 // Test that we log parsed form events for address and cards in the same form.
 TEST_F(AutofillMetricsTest, MixedParsedFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("State", "state", "", "text"),
+                  CreateField("City", "city", "", "text"),
+                  CreateField("Street", "street", "", "text"),
+                  CreateField("Card Number", "card_number", "", "text"),
+                  CreateField("Expiration", "cc_exp", "", "text"),
+                  CreateField("Verification", "verification", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
-  test::CreateTestFormField("Card Number", "card_number", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Expiration", "cc_exp", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Verification", "verification", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_VERIFICATION_CODE);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE,          ADDRESS_HOME_CITY,
+      ADDRESS_HOME_STREET_ADDRESS, CREDIT_CARD_NAME_FULL,
+      CREDIT_CARD_EXP_MONTH,       CREDIT_CARD_VERIFICATION_CODE};
 
-  // Simulate seeing and parsing the form.
   base::HistogramTester histogram_tester;
   SeeForm(form);
   histogram_tester.ExpectUniqueSample("Autofill.FormEvents.Address.WithNoData",
@@ -7185,28 +6264,13 @@
 
 // Test that we log parsed form events for address.
 TEST_F(AutofillMetricsTest, AddressParsedFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate seeing and parsing the form.
   base::HistogramTester histogram_tester;
   SeeForm(form);
   histogram_tester.ExpectUniqueSample("Autofill.FormEvents.Address.WithNoData",
@@ -7226,35 +6290,19 @@
 
 // Test that we log interacted form events for address.
 TEST_F(AutofillMetricsTest, AddressInteractedFormEvents) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the street field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[2]);
     histogram_tester.ExpectUniqueSample("Autofill.FormEvents.Address",
                                         FORM_EVENT_INTERACTED_ONCE, 1);
 
@@ -7274,13 +6322,15 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate activating the autofill popup for the street field twice.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field, /*query_id=*/0);
-    autofill_manager().OnAskForValuesToFillTest(form, field, /*query_id=*/1);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[2],
+                                                /*query_id=*/0);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[2],
+                                                /*query_id=*/1);
     histogram_tester.ExpectUniqueSample("Autofill.FormEvents.Address",
                                         FORM_EVENT_INTERACTED_ONCE, 1);
     // Check if FormEvent UKM is logged properly
@@ -7301,35 +6351,19 @@
 TEST_F(AutofillMetricsTest, AddressSuppressedFormEvents) {
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating new popup being shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidSuppressPopup(form, field);
+    autofill_manager().DidSuppressPopup(form, form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
                                        FORM_EVENT_POPUP_SUPPRESSED, 1);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
@@ -7356,13 +6390,13 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating two popups in the same page load.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidSuppressPopup(form, field);
-    autofill_manager().DidSuppressPopup(form, field);
+    autofill_manager().DidSuppressPopup(form, form.fields[0]);
+    autofill_manager().DidSuppressPopup(form, form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
                                        FORM_EVENT_POPUP_SUPPRESSED, 2);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
@@ -7396,35 +6430,20 @@
 TEST_F(AutofillMetricsTest, AddressShownFormEvents) {
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating new popup being shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 1);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
@@ -7450,13 +6469,15 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating two popups in the same page load.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
@@ -7487,13 +6508,13 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating same popup being refreshed.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(false /* is_new_popup */, form,
-                                          field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/false, form,
+                                          form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
                                        FORM_EVENT_SUGGESTIONS_SHOWN, 0);
     histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address",
@@ -7509,30 +6530,14 @@
 TEST_F(AutofillMetricsTest, AddressFilledFormEvents) {
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating selecting/filling a local profile suggestion.
@@ -7568,7 +6573,7 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating selecting/filling a local profile suggestion more than once.
@@ -7592,7 +6597,7 @@
   // Create a server profile and reset the autofill manager state.
   RecreateProfile(/*is_server=*/true);
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate selecting/filling a server profile suggestion.
@@ -7610,7 +6615,7 @@
   }
 
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulate selecting/filling a server profile suggestion more than once.
@@ -7636,35 +6641,19 @@
 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) {
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with no filled data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.Address",
@@ -7682,14 +6671,14 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with no filled data. Form is submmitted and
     // autofill manager is reset before UploadFormDataAsyncCallback is
     // triggered.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     // Trigger UploadFormDataAsyncCallback.
     autofill_manager().Reset();
@@ -7709,13 +6698,14 @@
   // Reset the autofill manager state and purge UKM logs.
   PurgeUKM();
 
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.Address",
@@ -7728,12 +6718,12 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled local data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     std::string guid(kTestGuid);  // local profile
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
@@ -7750,12 +6740,12 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating multiple submissions.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     SubmitForm(form);
 
@@ -7774,13 +6764,14 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion show but without previous
     // interaction.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     SubmitForm(form);
 
     EXPECT_THAT(
@@ -7810,35 +6801,19 @@
 TEST_F(AutofillMetricsTest, AddressWillSubmitFormEvents) {
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with no filled data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.Address",
@@ -7851,13 +6826,14 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     histogram_tester.ExpectBucketCount(
         "Autofill.FormEvents.Address",
@@ -7870,12 +6846,12 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with filled local data.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     std::string guid(kTestGuid);  // local profile
     autofill_manager().FillOrPreviewForm(
         mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
@@ -7893,12 +6869,12 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating multiple submissions.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     SubmitForm(form);
     SubmitForm(form);
     EXPECT_THAT(
@@ -7925,13 +6901,14 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   {
     // Simulating submission with suggestion shown but without previous
     // interaction.
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true /* is_new_popup */, form, field);
+    autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
+                                          form.fields[0]);
     SubmitForm(form);
     EXPECT_THAT(
         histogram_tester.GetAllSamples("Autofill.FormEvents.Address"),
@@ -7957,63 +6934,37 @@
 
 // Test that we log the phone field.
 TEST_F(AutofillMetricsTest, RecordStandalonePhoneField) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("Phone", "phone", "", "tel")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Phone", "phone", "", "tel", &field);
-  form.fields.push_back(field);
-  field_types.push_back(PHONE_HOME_NUMBER);
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  std::vector<ServerFieldType> field_types = {PHONE_HOME_NUMBER};
+  autofill_manager().AddSeenForm(form, field_types);
 
   base::HistogramTester histogram_tester;
-  autofill_manager().OnAskForValuesToFillTest(form, field);
+  autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
   histogram_tester.ExpectBucketCount("Autofill.FormEvents.Address.PhoneOnly",
                                      FORM_EVENT_INTERACTED_ONCE, 1);
 }
 
 // Test that we log interacted form event for credit cards only once.
 TEST_F(AutofillMetricsTest, CreditCardFormEventsAreSegmented) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form =
+      CreateForm({CreateField("Month", "card_month", "", "text"),
+                  CreateField("Year", "card_year", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Year", "card_year", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_2_DIGIT_YEAR);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_2_DIGIT_YEAR, CREDIT_CARD_NUMBER};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  autofill_manager().AddSeenForm(form, field_types);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
   {
     // Simulate activating the autofill popup for the credit card field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.CreditCard.WithNoData", FORM_EVENT_INTERACTED_ONCE,
         1);
@@ -8022,16 +6973,16 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  autofill_manager().AddSeenForm(form, field_types);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
   {
     // Simulate activating the autofill popup for the credit card field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.CreditCard.WithOnlyLocalData",
         FORM_EVENT_INTERACTED_ONCE, 1);
@@ -8040,16 +6991,16 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      true /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  autofill_manager().AddSeenForm(form, field_types);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/true,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
   {
     // Simulate activating the autofill popup for the credit card field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.CreditCard.WithOnlyServerData",
         FORM_EVENT_INTERACTED_ONCE, 1);
@@ -8058,16 +7009,16 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
-  RecreateCreditCards(false /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  autofill_manager().AddSeenForm(form, field_types);
+  RecreateCreditCards(/*include_local_credit_card=*/false,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
   {
     // Simulate activating the autofill popup for the credit card field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.CreditCard.WithOnlyServerData",
         FORM_EVENT_INTERACTED_ONCE, 1);
@@ -8076,16 +7027,16 @@
   // Reset the autofill manager state.
   autofill_manager().Reset();
   PurgeUKM();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      true /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  autofill_manager().AddSeenForm(form, field_types);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/true,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
   {
     // Simulate activating the autofill popup for the credit card field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.CreditCard.WithBothServerAndLocalData",
         FORM_EVENT_INTERACTED_ONCE, 1);
@@ -8094,36 +7045,20 @@
 
 // Test that we log interacted form event for address only once.
 TEST_F(AutofillMetricsTest, AddressFormEventsAreSegmented) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
   personal_data().ClearProfiles();
 
   {
     // Simulate activating the autofill popup for the street field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[2]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.Address.WithNoData", FORM_EVENT_INTERACTED_ONCE,
         1);
@@ -8131,13 +7066,13 @@
 
   // Reset the autofill manager state.
   autofill_manager().Reset();
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
   RecreateProfile(/*is_server=*/false);
 
   {
     // Simulate activating the autofill popup for the street field.
     base::HistogramTester histogram_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields[2]);
     histogram_tester.ExpectUniqueSample(
         "Autofill.FormEvents.Address.WithOnlyLocalData",
         FORM_EVENT_INTERACTED_ONCE, 1);
@@ -8295,24 +7230,10 @@
 
 // Verify that we correctly log the submitted form's state.
 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
-  // Start with a form with insufficiently many fields.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Unknown", "unknown", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text"),
+                              CreateField("Phone", "phone", "", "text"),
+                              CreateField("Unknown", "unknown", "", "text")});
 
   // Expect no notifications when the form is first seen.
   {
@@ -8565,24 +7486,11 @@
 TEST_F(
     AutofillMetricsTest,
     AutofillFormSubmittedState_DontCountUnfilledFieldsWithOnlyFillWhenFocused) {
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Billing Phone", "billing_phone", "", "text",
-                            &field);
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("Name", "name", "", "text"),
+                  CreateField("Email", "email", "", "text"),
+                  CreateField("Phone", "phone", "", "text"),
+                  CreateField("Billing Phone", "billing_phone", "", "text")});
 
   // Verify if the form is otherwise filled with a field having
   // |only_fill_when_focused|=true, we consider the form is all filled.
@@ -8701,14 +7609,7 @@
 
 // Verify that nothing is logging in happiness metrics if no fields in form.
 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction_EmptyForm) {
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  FormData form = CreateEmptyForm();
 
   // Expect a notification when the form is first seen.
   {
@@ -8723,28 +7624,15 @@
 // Verify that we correctly log user happiness metrics dealing with form
 // interaction.
 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction_CreditCardForm) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  // Construct a valid credit card form.
-  FormFieldData field;
-  test::CreateTestFormField("Card Number", "card_number", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Expiration", "cc_exp", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Verification", "verification", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("Card Number", "card_number", "", "text"),
+                  CreateField("Expiration", "cc_exp", "", "text"),
+                  CreateField("Verification", "verification", "", "text")});
 
   // Expect a notification when the form is first seen.
   {
@@ -8775,8 +7663,8 @@
   {
     SCOPED_TRACE("Separate pop-ups");
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true, form, field);
-    autofill_manager().DidShowSuggestions(true, form, field);
+    autofill_manager().DidShowSuggestions(true, form, form.fields[0]);
+    autofill_manager().DidShowSuggestions(true, form, form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount(
@@ -8796,8 +7684,8 @@
   {
     SCOPED_TRACE("Multiple keystrokes");
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true, form, field);
-    autofill_manager().DidShowSuggestions(false, form, field);
+    autofill_manager().DidShowSuggestions(true, form, form.fields[0]);
+    autofill_manager().DidShowSuggestions(false, form, form.fields[0]);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::SUGGESTIONS_SHOWN, 1);
     histogram_tester.ExpectBucketCount(
@@ -8890,22 +7778,9 @@
 // Verify that we correctly log user happiness metrics dealing with form
 // interaction.
 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction_AddressForm) {
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text"),
+                              CreateField("Phone", "phone", "", "text")});
 
   // Expect a notification when the form is first seen.
   {
@@ -8930,8 +7805,8 @@
   // Simulate suggestions shown twice with separate popups.
   {
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true, form, field);
-    autofill_manager().DidShowSuggestions(true, form, field);
+    autofill_manager().DidShowSuggestions(true, form, form.fields.back());
+    autofill_manager().DidShowSuggestions(true, form, form.fields.back());
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount(
@@ -8949,8 +7824,8 @@
   // keystrokes in a single field).
   {
     base::HistogramTester histogram_tester;
-    autofill_manager().DidShowSuggestions(true, form, field);
-    autofill_manager().DidShowSuggestions(false, form, field);
+    autofill_manager().DidShowSuggestions(true, form, form.fields.back());
+    autofill_manager().DidShowSuggestions(false, form, form.fields.back());
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::SUGGESTIONS_SHOWN, 1);
     histogram_tester.ExpectBucketCount(
@@ -9144,29 +8019,16 @@
   TestAutofillTickClock test_clock;
   test_clock.SetNowTicks(now);
 
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text"),
+                              CreateField("Phone", "phone", "", "text")});
 
   // Fill additional form.
   FormData second_form = form;
   second_form.host_frame = test::MakeLocalFrameToken();
   second_form.unique_renderer_id = test::MakeFormRendererId();
-  test::CreateTestFormField("Second Phone", "second_phone", "", "text", &field);
-  second_form.fields.push_back(field);
+  second_form.fields.push_back(
+      CreateField("Second Phone", "second_phone", "", "text"));
 
   // Fill the field values for form submission.
   FormData submitted_form = form;
@@ -9354,7 +8216,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kCreditCardForm}, true /* used_autofill */,
+        {FormType::kCreditCardForm}, /*used_autofill=*/true,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.CreditCard",
@@ -9367,7 +8229,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kCreditCardForm}, false /* used_autofill */,
+        {FormType::kCreditCardForm}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithoutAutofill.CreditCard",
@@ -9381,7 +8243,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kUnknownFormType}, false /* used_autofill */,
+        {FormType::kUnknownFormType}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTotalCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.CreditCard", 0);
@@ -9395,7 +8257,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kAddressForm}, true /* used_autofill */,
+        {FormType::kAddressForm}, /*used_autofill=*/true,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.Address",
@@ -9408,7 +8270,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kAddressForm}, false /* used_autofill */,
+        {FormType::kAddressForm}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithoutAutofill.Address",
@@ -9422,7 +8284,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kUnknownFormType}, false /* used_autofill */,
+        {FormType::kUnknownFormType}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTotalCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.Address", 0);
@@ -9436,7 +8298,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kPasswordForm}, true /* used_autofill */,
+        {FormType::kPasswordForm}, /*used_autofill=*/true,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.Password",
@@ -9449,7 +8311,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kPasswordForm}, false /* used_autofill */,
+        {FormType::kPasswordForm}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithoutAutofill.Password",
@@ -9463,7 +8325,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kUnknownFormType}, false /* used_autofill */,
+        {FormType::kUnknownFormType}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTotalCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.Password", 0);
@@ -9477,7 +8339,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kUnknownFormType}, true /* used_autofill */,
+        {FormType::kUnknownFormType}, /*used_autofill=*/true,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.Unknown",
@@ -9490,7 +8352,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kUnknownFormType}, false /* used_autofill */,
+        {FormType::kUnknownFormType}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithoutAutofill.Unknown",
@@ -9504,7 +8366,7 @@
   {
     base::HistogramTester histogram_tester;
     AutofillMetrics::LogFormFillDurationFromInteraction(
-        {FormType::kAddressForm}, false /* used_autofill */,
+        {FormType::kAddressForm}, /*used_autofill=*/false,
         base::Milliseconds(2000));
     histogram_tester.ExpectTotalCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.Unknown", 0);
@@ -9520,7 +8382,7 @@
     AutofillMetrics::LogFormFillDurationFromInteraction(
         {FormType::kCreditCardForm, FormType::kAddressForm,
          FormType::kPasswordForm, FormType::kUnknownFormType},
-        true /* used_autofill */, base::Milliseconds(2000));
+        /*used_autofill=*/true, base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithAutofill.CreditCard",
         base::Milliseconds(2000), 1);
@@ -9541,7 +8403,7 @@
     AutofillMetrics::LogFormFillDurationFromInteraction(
         {FormType::kCreditCardForm, FormType::kAddressForm,
          FormType::kPasswordForm, FormType::kUnknownFormType},
-        false /* used_autofill */, base::Milliseconds(2000));
+        /*used_autofill=*/false, base::Milliseconds(2000));
     histogram_tester.ExpectTimeBucketCount(
         "Autofill.FillDuration.FromInteraction.WithoutAutofill.CreditCard",
         base::Milliseconds(2000), 1);
@@ -9561,35 +8423,17 @@
 TEST_F(AutofillMetricsTest, ProfileActionOnFormSubmitted) {
   base::HistogramTester histogram_tester;
 
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
   // Create the form's fields.
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Address", "address", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Country", "country", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Zip", "zip", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Organization", "organization", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("Name", "name", "", "text"),
+                  CreateField("Email", "email", "", "text"),
+                  CreateField("Phone", "phone", "", "text"),
+                  CreateField("Address", "address", "", "text"),
+                  CreateField("City", "city", "", "text"),
+                  CreateField("Country", "country", "", "text"),
+                  CreateField("State", "state", "", "text"),
+                  CreateField("Zip", "zip", "", "text"),
+                  CreateField("Organization", "organization", "", "text")});
 
   FormData second_form = form;
   FormData third_form = form;
@@ -9822,45 +8666,31 @@
 // Tests that credit card form submissions are logged specially when the form is
 // on a non-secure page.
 TEST_F(AutofillMetricsTest, NonsecureCreditCardForm) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
+  FormData form =
+      CreateForm({CreateField("Name on card", "cc-name", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text"),
+                  CreateField("Month", "cardmonth", "", "text"),
+                  CreateField("Expiration date", "expdate", "", "text")});
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH,
+      CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR};
+
+  // Non-https origin.
   GURL frame_origin("http://example_root.com/form.html");
   form.main_frame_origin = url::Origin::Create(frame_origin);
   autofill_client_->set_form_origin(frame_origin);
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name on card", "cc-name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
-  test::CreateTestFormField("Month", "cardmonth", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  test::CreateTestFormField("Expiration date", "expdate", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR);
-
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate an Autofill query on a credit card field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.front());
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_PolledCreditCardSuggestions"));
   }
@@ -9884,43 +8714,26 @@
 // form is *not* on a non-secure page.
 TEST_F(AutofillMetricsTest,
        NonsecureCreditCardFormMetricsNotRecordedOnSecurePage) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
 
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  // Form action needs to be secure on secure page, otherwise this triggers
-  // mixed form warnings and no suggestions are offered.
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin =
-      url::Origin::Create(GURL("http://example_root.com/form.html"));
+  FormData form =
+      CreateForm({CreateField("Name on card", "cc-name", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text"),
+                  CreateField("Expiration date", "expdate", "", "text")});
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name on card", "cc-name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
-  test::CreateTestFormField("Expiration date", "expdate", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER,
+      CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR};
 
-  // Simulate having seen this form on page load.
-  // |form_structure| will be owned by `autofill_manager()`.
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate an Autofill query on a credit card field.
   {
     base::UserActionTester user_action_tester;
-    autofill_manager().OnAskForValuesToFillTest(form, field);
+    autofill_manager().OnAskForValuesToFillTest(form, form.fields.back());
     EXPECT_EQ(1, user_action_tester.GetActionCount(
                      "Autofill_PolledCreditCardSuggestions"));
   }
@@ -10013,33 +8826,22 @@
 //
 // Flaky on all platforms. TODO(crbug.com/876897): Fix it.
 TEST_F(AutofillMetricsTest, DISABLED_AutofillSuggestionShownTest) {
-  RecreateCreditCards(true /* include_local_credit_card */,
-                      false /* include_masked_server_credit_card */,
-                      false /* include_full_server_credit_card */,
-                      false /* masked_card_is_enrolled_for_virtual_card */);
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example_cc.com/form.html");
-  form.action = GURL("http://example_cc.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
+  RecreateCreditCards(/*include_local_credit_card=*/true,
+                      /*include_masked_server_credit_card=*/false,
+                      /*include_full_server_credit_card=*/false,
+                      /*masked_card_is_enrolled_for_virtual_card=*/false);
+  FormData form =
+      CreateForm({CreateField("Name on card", "cc-name", "", "text"),
+                  CreateField("Credit card", "cardnum", "", "text"),
+                  CreateField("Month", "card_month", "", "text")});
 
   FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("Name on card", "cc-name", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NAME_FULL);
-  test::CreateTestFormField("Credit card", "cardnum", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_NUMBER);
-  test::CreateTestFormField("Month", "card_month", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(CREDIT_CARD_EXP_MONTH);
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  std::vector<ServerFieldType> field_types = {
+      CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH};
+  autofill_manager().AddSeenForm(form, field_types);
 
   // Simulate and Autofill query on credit card name field.
-  autofill_manager().DidShowSuggestions(true /* is_new_popup */, form,
+  autofill_manager().DidShowSuggestions(/*is_new_popup=*/true, form,
                                         form.fields[0]);
   VerifyUkm(
       test_ukm_recorder_, form, UkmSuggestionsShownType::kEntryName,
@@ -10054,28 +8856,16 @@
 }
 
 TEST_F(AutofillMetricsTest, DynamicFormMetrics) {
-  // Set up our form data.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
+
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
   // Simulate seeing.
   base::HistogramTester histogram_tester;
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
   std::string guid(kTestGuid);
 
   // Simulate checking whether to fill a dynamic form before the form was filled
@@ -10174,22 +8964,9 @@
 // Verify that we correctly log LogUserHappinessBySecurityLevel dealing form the
 // form event metrics.
 TEST_F(AutofillMetricsTest, LogUserHappinessBySecurityLevel_FromFormEvents) {
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("Name", "name", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Email", "email", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Phone", "phone", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Name", "name", "", "text"),
+                              CreateField("Email", "email", "", "text"),
+                              CreateField("Phone", "phone", "", "text")});
 
   // Simulate seeing the form.
   {
@@ -10207,8 +8984,8 @@
     base::HistogramTester histogram_tester;
     autofill_client_->set_security_level(
         security_state::SecurityLevel::WARNING);
-    autofill_manager().DidShowSuggestions(true, form, field);
-    autofill_manager().DidShowSuggestions(true, form, field);
+    autofill_manager().DidShowSuggestions(true, form, form.fields.front());
+    autofill_manager().DidShowSuggestions(true, form, form.fields.front());
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness.Address.WARNING",
                                        AutofillMetrics::SUGGESTIONS_SHOWN, 2);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness.Address.WARNING",
@@ -10479,20 +9256,9 @@
 // Verify that we correctly log metrics if a frame has
 // autocomplete="one-time-code".
 TEST_F(AutofillMetricsTest, FrameHasAutocompleteOneTimeCode) {
-  FormData form;  // Form with one time code.
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("", "", "", "password", &field);
-  field.autocomplete_attribute = "one-time-code";
-  form.fields.push_back(field);
-  test::CreateTestFormField("", "", "", "password", &field);
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("", "", "", "password", "one-time-code"),
+                  CreateField("", "", "", "password")});
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10509,17 +9275,7 @@
 // Verify that we correctly log metrics if a frame does not have
 // autocomplete="one-time-code".
 TEST_F(AutofillMetricsTest, FrameDoesNotHaveAutocompleteOneTimeCode) {
-  FormData form;  // Form without one time code.
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("", "", "", "password", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("", "", "", "password")});
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10535,23 +9291,12 @@
 // Verify that we correctly log metrics when a phone number field does not have
 // autocomplete attribute but there are at least 3 fields in the form.
 TEST_F(AutofillMetricsTest, FrameHasPhoneNumberFieldWithoutAutocomplete) {
-  FormData form;  // Form with phone number.
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
   // At least 3 fields are necessary for FormStructure to compute proper field
   // types if autocomplete attribute value is not available.
-  FormFieldData field;
-  test::CreateTestFormField("Phone", "phone", "", "tel", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("Last Name", "lastname", "", "text", &field);
-  form.fields.push_back(field);
-  test::CreateTestFormField("First Name", "firstname", "", "text", &field);
-  form.fields.push_back(field);
+  FormData form =
+      CreateForm({CreateField("Phone", "phone", "", "tel"),
+                  CreateField("Last Name", "lastname", "", "text"),
+                  CreateField("First Name", "firstname", "", "text")});
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10567,19 +9312,9 @@
 // Verify that we correctly log metrics when a phone number field does not have
 // autocomplete attribute and there are less than 3 fields in the form.
 TEST_F(AutofillMetricsTest, FrameHasSinglePhoneNumberFieldWithoutAutocomplete) {
-  FormData form;  // Form with single phone number field.
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
   // At least 3 fields are necessary for FormStructure to compute proper field
   // types if autocomplete attribute value is not available.
-  FormFieldData field;
-  test::CreateTestFormField("Phone", "phone", "", "tel", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("Phone", "phone", "", "tel")});
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10597,7 +9332,7 @@
 TEST_F(AutofillMetricsTest, FrameHasPhoneNumberFieldWithAutocomplete) {
   FormData form;  // Form with phone number.
   CreateSimpleForm(autofill_client_->form_origin(), form);
-  AddAutoCompleteFieldToForm("phone", form);
+  form.fields = {CreateField("", "", "", "", "phone")};
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10613,17 +9348,7 @@
 // Verify that we correctly log metrics when a form does not have phone number
 // field.
 TEST_F(AutofillMetricsTest, FrameDoesNotHavePhoneNumberField) {
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("", "", "", "password", &field);
-  form.fields.push_back(field);
+  FormData form = CreateForm({CreateField("", "", "", "password")});
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10641,7 +9366,7 @@
 #if !BUILDFLAG(IS_IOS)
 
 struct WebOTPPhoneCollectionMetricsTestCase {
-  std::vector<std::string> autocomplete_field;
+  std::vector<const char*> autocomplete_field;
   PhoneCollectionMetricState phone_collection_metric_state;
   bool report_autofill_web_otp_metrics = false;
 };
@@ -10701,8 +9426,8 @@
   if (!test_case.autocomplete_field.empty()) {
     FormData form;
     CreateSimpleForm(autofill_client_->form_origin(), form);
-    for (const auto& autocomplete : test_case.autocomplete_field)
-      AddAutoCompleteFieldToForm(autocomplete, form);
+    for (const char* autocomplete : test_case.autocomplete_field)
+      form.fields.push_back(CreateField("", "", "", "", autocomplete));
 
     SeeForm(form);
   }
@@ -10725,9 +9450,9 @@
   FormData form;
   CreateSimpleForm(autofill_client_->form_origin(), form);
   // Document collects phone number
-  AddAutoCompleteFieldToForm("tel", form);
+  form.fields.push_back(CreateField("", "", "", "", "tel"));
   // Document uses OntTimeCode
-  AddAutoCompleteFieldToForm("one-time-code", form);
+  form.fields.push_back(CreateField("", "", "", "", "one-time-code"));
 
   base::HistogramTester histogram_tester;
   SeeForm(form);
@@ -10748,19 +9473,8 @@
   TestAutofillTickClock test_clock;
   test_clock.SetNowTicks(now);
 
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  test::CreateTestFormField("", "", "", "password", &field);
-  field.autocomplete_attribute = "one-time-code";
-  form.fields.push_back(field);
-
+  FormData form =
+      CreateForm({CreateField("", "", "", "password", "one-time-code")});
   form.fields[0].value = u"123456";
 
   {
@@ -10910,7 +9624,7 @@
   {
     base::HistogramTester histogram_tester;
     AddressFormEventLogger logger(
-        /*is_in_main_frame=*/true,
+        /*is_in_any_main_frame=*/true,
         /*form_interactions_ukm_logger=*/nullptr,
         /*client=*/nullptr);
     logger.OnDidSeeFillableDynamicForm(AutofillSyncSigninState::kSignedOut,
@@ -10922,7 +9636,7 @@
   {
     base::HistogramTester histogram_tester;
     AddressFormEventLogger logger(
-        /*is_in_main_frame=*/true,
+        /*is_in_any_main_frame=*/true,
         /*form_interactions_ukm_logger=*/nullptr,
         /*client=*/nullptr);
     logger.OnDidRefill(AutofillSyncSigninState::kSignedIn, form_structure);
@@ -10996,26 +9710,11 @@
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
 
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("http://example.com/form.html");
-  form.action = GURL("http://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
   base::HistogramTester histogram_tester;
 
@@ -11053,7 +9752,6 @@
             Suggestion::BackendId(), Suggestion::BackendId(kTestGuid)));
   }
 
-  // Simulate form submission.
   if (user_submitted_form) {
     SubmitForm(form);
   }
@@ -11144,8 +9842,7 @@
       {features::kAutofillAblationStudyEnabledForAddressesParam.name, "true"},
       {features::kAutofillAblationStudyEnabledForPaymentsParam.name, "true"},
       {features::kAutofillAblationStudyAblationWeightPerMilleParam.name,
-       "1000"},
-  };
+       "1000"}};
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeatureWithParameters(
       features::kAutofillEnableAblationStudy, feature_parameters);
@@ -11153,26 +9850,11 @@
   // Create a profile.
   RecreateProfile(/*is_server=*/false);
 
-  // Load a fillable form.
-  FormData form;
-  form.host_frame = test::MakeLocalFrameToken();
-  form.unique_renderer_id = test::MakeFormRendererId();
-  form.name = u"TestForm";
-  form.url = GURL("https://example.com/form.html");
-  form.action = GURL("https://example.com/submit.html");
-  form.main_frame_origin = url::Origin::Create(autofill_client_->form_origin());
-
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
+  FormData form = CreateForm({CreateField("State", "state", "", "text"),
+                              CreateField("City", "city", "", "text"),
+                              CreateField("Street", "street", "", "text")});
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
   base::HistogramTester histogram_tester;
 
@@ -11185,25 +9867,22 @@
   // Don't simulate a suggestion but simulate the user typing.
   ChangeTextField(form, form.fields[0]);
 
-  // Simulate form submission.
   SubmitForm(form);
 
   ResetDriverToCommitMetrics();
 
   // Phase 2: Validate Funnel expectations.
-  const char* kMetrics[] = {
-      "Autofill.Funnel.ParsedAsType",
-      "Autofill.Funnel.InteractionAfterParsedAsType",
-      "Autofill.Funnel.SuggestionAfterInteraction",
-      "Autofill.Funnel.FillAfterSuggestion",
-      "Autofill.Funnel.SubmissionAfterFill",
-      "Autofill.KeyMetrics.FillingReadiness",
-      "Autofill.KeyMetrics.FillingAcceptance",
-      "Autofill.KeyMetrics.FillingCorrectness",
-      "Autofill.KeyMetrics.FillingAssistance",
-      "Autofill.Autocomplete.NotOff.FillingAcceptance",
-      "Autofill.Autocomplete.Off.FillingAcceptance",
-  };
+  const char* kMetrics[] = {"Autofill.Funnel.ParsedAsType",
+                            "Autofill.Funnel.InteractionAfterParsedAsType",
+                            "Autofill.Funnel.SuggestionAfterInteraction",
+                            "Autofill.Funnel.FillAfterSuggestion",
+                            "Autofill.Funnel.SubmissionAfterFill",
+                            "Autofill.KeyMetrics.FillingReadiness",
+                            "Autofill.KeyMetrics.FillingAcceptance",
+                            "Autofill.KeyMetrics.FillingCorrectness",
+                            "Autofill.KeyMetrics.FillingAssistance",
+                            "Autofill.Autocomplete.NotOff.FillingAcceptance",
+                            "Autofill.Autocomplete.Off.FillingAcceptance"};
   for (const char* metric : kMetrics) {
     histogram_tester.ExpectTotalCount(base::StrCat({metric, ".Address"}), 0);
     histogram_tester.ExpectTotalCount(base::StrCat({metric, ".CreditCard"}), 0);
@@ -11229,26 +9908,13 @@
   RecreateProfile(/*is_server=*/false);
 
   // Load a fillable form.
-  form_.unique_renderer_id = test::MakeFormRendererId();
-  form_.name = u"TestForm";
-  form_.url = GURL("http://example.com/form.html");
-  form_.action = GURL("http://example.com/submit.html");
-  form_.main_frame_origin =
-      url::Origin::Create(autofill_client_->form_origin());
+  form_ = CreateEmptyForm();
+  form_.fields = {CreateField("State", "state", "", "text"),
+                  CreateField("City", "city", "", "text"),
+                  CreateField("Street", "street", "", "text")};
+  std::vector<ServerFieldType> field_types = {
+      ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, ADDRESS_HOME_STREET_ADDRESS};
 
-  FormFieldData field;
-  std::vector<ServerFieldType> field_types;
-  test::CreateTestFormField("State", "state", "", "text", &field);
-  form_.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STATE);
-  test::CreateTestFormField("City", "city", "", "text", &field);
-  form_.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_CITY);
-  test::CreateTestFormField("Street", "street", "", "text", &field);
-  form_.fields.push_back(field);
-  field_types.push_back(ADDRESS_HOME_STREET_ADDRESS);
-
-  // Simulate having seen this form on page load.
   autofill_manager().AddSeenForm(form_, field_types, field_types);
 }
 
@@ -11262,7 +9928,6 @@
   SeeForm(form_);
   autofill_manager().OnAskForValuesToFillTest(form_, form_.fields[0]);
 
-  // Simulate form submission.
   SubmitForm(form_);
 
   ResetDriverToCommitMetrics();
@@ -11294,11 +9959,8 @@
   SeeForm(form_);
   autofill_manager().OnAskForValuesToFillTest(form_, form_.fields[0]);
 
-  // Simulate user typing the address.
   ChangeTextField(form_, form_.fields[0]);
   ChangeTextField(form_, form_.fields[1]);
-
-  // Simulate form submission.
   SubmitForm(form_);
 
   ResetDriverToCommitMetrics();
@@ -11330,11 +9992,8 @@
   autofill_manager().DidShowSuggestions(
       /*has_autofill_suggestions=*/true, form_, form_.fields[0]);
 
-  // Simulate user typing the address.
   ChangeTextField(form_, form_.fields[0]);
   ChangeTextField(form_, form_.fields[1]);
-
-  // Simulate form submission.
   SubmitForm(form_);
 
   ResetDriverToCommitMetrics();
@@ -11373,8 +10032,6 @@
 
   // Simulate user fixing the address.
   ChangeTextField(form_, form_.fields[1]);
-
-  // Simulate form submission.
   SubmitForm(form_);
 
   ResetDriverToCommitMetrics();
@@ -11466,7 +10123,6 @@
   autofill_client_->GetLanguageState()->SetCurrentLanguage("ub");
   int language_code = 'u' * 256 + 'b';
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -11489,7 +10145,6 @@
   autofill_client_->GetLanguageState()->SetSourceLanguage("en");
   autofill_client_->GetLanguageState()->SetCurrentLanguage("other");
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -11518,21 +10173,14 @@
                   {.role = ServerFieldType::ADDRESS_HOME_ZIP},
                   {.role = ServerFieldType::ADDRESS_HOME_COUNTRY}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,           ADDRESS_HOME_LINE1,
-      ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
-      ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
-      ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,           ADDRESS_HOME_LINE1,
       ADDRESS_HOME_CITY,   PHONE_HOME_CITY_AND_NUMBER,
       ADDRESS_HOME_STATE,  ADDRESS_HOME_ZIP,
       ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -11589,15 +10237,11 @@
             .value = u"12345678901"},  // Case #3
            {.role = ServerFieldType::ADDRESS_HOME_COUNTRY}}});
 
-  std::vector<ServerFieldType> heuristic_types = {
-      NAME_FULL,        ADDRESS_HOME_CITY,       ADDRESS_HOME_STATE,
-      ADDRESS_HOME_ZIP, PHONE_HOME_WHOLE_NUMBER, ADDRESS_HOME_COUNTRY};
-  std::vector<ServerFieldType> server_types = {
+  std::vector<ServerFieldType> field_types = {
       NAME_FULL,        ADDRESS_HOME_CITY,       ADDRESS_HOME_STATE,
       ADDRESS_HOME_ZIP, PHONE_HOME_WHOLE_NUMBER, ADDRESS_HOME_COUNTRY};
 
-  // Simulate having seen this form on page load.
-  autofill_manager().AddSeenForm(form, heuristic_types, server_types,
+  autofill_manager().AddSeenForm(form, field_types, field_types,
                                  /*preserve_values_in_form_structure=*/true);
 
   autofill_manager().OnAskForValuesToFillTest(form, form.fields[0]);
@@ -11620,7 +10264,6 @@
   form.fields[3].value = u"00001";
   ChangeTextField(form, form.fields[3]);
 
-  // Simulate form submission.
   base::HistogramTester histogram_tester;
   SubmitForm(form);
 
@@ -11639,7 +10282,7 @@
   CreateSimpleForm(autofill_client_->form_origin(), form);
 
   std::vector<ServerFieldType> field_types = {NAME_FULL};
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // WHEN
   // Simulate manual text field change.
@@ -11656,7 +10299,6 @@
       mojom::RendererFormDataAction::kFill, 0, form, form.fields.front(),
       autofill_manager().suggestion_generator()->MakeFrontendId(
           Suggestion::BackendId(), Suggestion::BackendId(guid)));
-  // Simulate form submission.
   SubmitForm(form);
 
   // THEN
@@ -11675,10 +10317,9 @@
   CreateSimpleForm(autofill_client_->form_origin(), form);
 
   std::vector<ServerFieldType> field_types = {NAME_FULL};
-  autofill_manager().AddSeenForm(form, field_types, field_types);
+  autofill_manager().AddSeenForm(form, field_types);
 
   // WHEN
-  // Simulate form submission.
   SubmitForm(form);
 
   // THEN
@@ -11713,10 +10354,10 @@
   void SetUp() override {
     AutofillMetricsTest::SetUp();
 
-    RecreateCreditCards(true /* include_local_credit_card */,
-                        false /* include_masked_server_credit_card */,
-                        false /* include_full_server_credit_card */,
-                        false /* masked_card_is_enrolled_for_virtual_card */);
+    RecreateCreditCards(/*include_local_credit_card=*/true,
+                        /*include_masked_server_credit_card=*/false,
+                        /*include_full_server_credit_card=*/false,
+                        /*masked_card_is_enrolled_for_virtual_card=*/false);
 
     credit_card_with_cvc_ = {
         .credit_card = *autofill_manager()
diff --git a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
index a2311a5..e7427d3 100644
--- a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
+++ b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
@@ -18,7 +18,6 @@
 #include "base/containers/flat_set.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/waitable_event.h"
-#include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_progress_dialog_type.h"
diff --git a/components/autofill/core/browser/test_browser_autofill_manager.cc b/components/autofill/core/browser/test_browser_autofill_manager.cc
index 3517633..967f464 100644
--- a/components/autofill/core/browser/test_browser_autofill_manager.cc
+++ b/components/autofill/core/browser/test_browser_autofill_manager.cc
@@ -76,12 +76,12 @@
     const gfx::RectF& bounding_box,
     int query_id,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   TestAutofillManagerWaiter waiter(*this,
                                    {&Observer::OnAfterAskForValuesToFill});
   AutofillManager::OnAskForValuesToFill(form, field, bounding_box, query_id,
                                         autoselect_first_suggestion,
-                                        touch_to_fill_eligible);
+                                        form_element_was_clicked);
   ASSERT_TRUE(waiter.Wait());
 }
 
@@ -248,12 +248,12 @@
     int query_id,
     const gfx::RectF& bounding_box,
     bool autoselect_first_suggestion,
-    TouchToFillEligible touch_to_fill_eligible) {
+    FormElementWasClicked form_element_was_clicked) {
   TestAutofillManagerWaiter waiter(
       *this, {&AutofillManager::Observer::OnAfterAskForValuesToFill});
   BrowserAutofillManager::OnAskForValuesToFill(
       form, field, bounding_box, query_id, autoselect_first_suggestion,
-      touch_to_fill_eligible);
+      form_element_was_clicked);
   ASSERT_TRUE(waiter.Wait());
 }
 
diff --git a/components/autofill/core/browser/test_browser_autofill_manager.h b/components/autofill/core/browser/test_browser_autofill_manager.h
index f017a080..3e45c914 100644
--- a/components/autofill/core/browser/test_browser_autofill_manager.h
+++ b/components/autofill/core/browser/test_browser_autofill_manager.h
@@ -56,7 +56,7 @@
       const gfx::RectF& bounding_box,
       int query_id,
       bool autoselect_first_suggestion,
-      TouchToFillEligible touch_to_fill_eligible) override;
+      FormElementWasClicked form_element_was_clicked) override;
   void OnJavaScriptChangedAutofilledValue(
       const FormData& form,
       const FormFieldData& field,
@@ -85,6 +85,14 @@
   int GetPackedCreditCardID(int credit_card_id);
 
   void AddSeenForm(const FormData& form,
+                   const std::vector<ServerFieldType>& field_types,
+                   bool preserve_values_in_form_structure = false) {
+    AddSeenForm(form, /*heuristic_types=*/field_types,
+                /*server_types=*/field_types,
+                preserve_values_in_form_structure);
+  }
+
+  void AddSeenForm(const FormData& form,
                    const std::vector<ServerFieldType>& heuristic_types,
                    const std::vector<ServerFieldType>& server_types,
                    bool preserve_values_in_form_structure = false);
@@ -114,13 +122,13 @@
   const std::string GetSubmittedFormSignature();
 
   // Helper to skip irrelevant params.
-  void OnAskForValuesToFillTest(
-      const FormData& form,
-      const FormFieldData& field,
-      int query_id = 0,
-      const gfx::RectF& bounding_box = {},
-      bool autoselect_first_suggestion = false,
-      TouchToFillEligible touch_to_fill_eligible = TouchToFillEligible(false));
+  void OnAskForValuesToFillTest(const FormData& form,
+                                const FormFieldData& field,
+                                int query_id = 0,
+                                const gfx::RectF& bounding_box = {},
+                                bool autoselect_first_suggestion = false,
+                                FormElementWasClicked form_element_was_clicked =
+                                    FormElementWasClicked(false));
 
   void SetAutofillProfileEnabled(bool profile_enabled);
 
diff --git a/components/autofill/core/common/aliases.h b/components/autofill/core/common/aliases.h
index dfd1a0c6..0e82b5d 100644
--- a/components/autofill/core/common/aliases.h
+++ b/components/autofill/core/common/aliases.h
@@ -12,8 +12,9 @@
 // TODO(crbug.com/1326518): Use strong aliases for other primitives in mojom
 // files.
 
-using TouchToFillEligible =
-    base::StrongAlias<struct TouchToFillEligibleTag, bool>;
+// Specifies whether a form input element was clicked.
+using FormElementWasClicked =
+    base::StrongAlias<struct FormElementWasClickedTag, bool>;
 
 }  // namespace autofill
 
diff --git a/components/autofill/core/common/mojom/BUILD.gn b/components/autofill/core/common/mojom/BUILD.gn
index e4a2f5ef..75f2fdb 100644
--- a/components/autofill/core/common/mojom/BUILD.gn
+++ b/components/autofill/core/common/mojom/BUILD.gn
@@ -77,8 +77,8 @@
           cpp = "::autofill::password_generation::PasswordGenerationUIData"
         },
         {
-          mojom = "autofill.mojom.TouchToFillEligible"
-          cpp = "::autofill::TouchToFillEligible"
+          mojom = "autofill.mojom.FormElementWasClicked"
+          cpp = "::autofill::FormElementWasClicked"
           copyable_pass_by_value = true
         },
       ]
diff --git a/components/autofill/core/common/mojom/autofill_types.mojom b/components/autofill/core/common/mojom/autofill_types.mojom
index 0afc2f8c..17eba1e1 100644
--- a/components/autofill/core/common/mojom/autofill_types.mojom
+++ b/components/autofill/core/common/mojom/autofill_types.mojom
@@ -198,6 +198,7 @@
     kAriaLabel,
     kCombined,  // Combined with various elements.
     kValue,     // label is the value of element.
+    kFor,       // Derived from the "for" attribute of a label element.
   };
 
   mojo_base.mojom.String16 label;
@@ -355,7 +356,7 @@
   kPreview,  // The renderer should preview the form data.
 };
 
-// autofill::TouchToFillEligible (components/autofill/core/common/aliases.h)
-struct TouchToFillEligible {
-  bool eligible;
+// autofill::FormElementWasClicked (components/autofill/core/common/aliases.h)
+struct FormElementWasClicked {
+  bool form_element_was_clicked;
 };
diff --git a/components/autofill/core/common/mojom/autofill_types_mojom_traits.cc b/components/autofill/core/common/mojom/autofill_types_mojom_traits.cc
index 1e41d15..2098382a 100644
--- a/components/autofill/core/common/mojom/autofill_types_mojom_traits.cc
+++ b/components/autofill/core/common/mojom/autofill_types_mojom_traits.cc
@@ -407,11 +407,11 @@
          data.ReadConfirmPasswordRendererId(&out->confirm_password_renderer_id);
 }
 
-bool StructTraits<autofill::mojom::TouchToFillEligibleDataView,
-                  autofill::TouchToFillEligible>::
-    Read(autofill::mojom::TouchToFillEligibleDataView data,
-         autofill::TouchToFillEligible* out) {
-  *out = autofill::TouchToFillEligible(data.eligible());
+bool StructTraits<autofill::mojom::FormElementWasClickedDataView,
+                  autofill::FormElementWasClicked>::
+    Read(autofill::mojom::FormElementWasClickedDataView data,
+         autofill::FormElementWasClicked* out) {
+  *out = autofill::FormElementWasClicked(data.form_element_was_clicked());
   return true;
 }
 
diff --git a/components/autofill/core/common/mojom/autofill_types_mojom_traits.h b/components/autofill/core/common/mojom/autofill_types_mojom_traits.h
index 0710814..f6d5e254 100644
--- a/components/autofill/core/common/mojom/autofill_types_mojom_traits.h
+++ b/components/autofill/core/common/mojom/autofill_types_mojom_traits.h
@@ -631,12 +631,14 @@
 };
 
 template <>
-struct StructTraits<autofill::mojom::TouchToFillEligibleDataView,
-                    autofill::TouchToFillEligible> {
-  static bool eligible(autofill::TouchToFillEligible r) { return r.value(); }
+struct StructTraits<autofill::mojom::FormElementWasClickedDataView,
+                    autofill::FormElementWasClicked> {
+  static bool form_element_was_clicked(autofill::FormElementWasClicked r) {
+    return r.value();
+  }
 
-  static bool Read(autofill::mojom::TouchToFillEligibleDataView data,
-                   autofill::TouchToFillEligible* out);
+  static bool Read(autofill::mojom::FormElementWasClickedDataView data,
+                   autofill::FormElementWasClicked* out);
 };
 
 }  // namespace mojo
diff --git a/components/autofill/ios/browser/autofill_agent.mm b/components/autofill/ios/browser/autofill_agent.mm
index a90b5bf..38e3bf4 100644
--- a/components/autofill/ios/browser/autofill_agent.mm
+++ b/components/autofill/ios/browser/autofill_agent.mm
@@ -335,7 +335,7 @@
   autofillManager->OnAskForValuesToFill(form, field, gfx::RectF(),
                                         ++_lastQueryID,
                                         /*autoselect_first_suggestion=*/false,
-                                        autofill::TouchToFillEligible(false));
+                                        autofill::FormElementWasClicked(false));
 }
 
 - (void)checkIfSuggestionsAvailableForForm:
diff --git a/components/autofill_assistant/browser/BUILD.gn b/components/autofill_assistant/browser/BUILD.gn
index 7a4c3c2b..e056fb2 100644
--- a/components/autofill_assistant/browser/BUILD.gn
+++ b/components/autofill_assistant/browser/BUILD.gn
@@ -253,8 +253,8 @@
     "service/cup_factory.h",
     "service/cup_impl.cc",
     "service/cup_impl.h",
-    "service/offline_service.cc",
-    "service/offline_service.h",
+    "service/no_round_trip_service.cc",
+    "service/no_round_trip_service.h",
     "service/rpc_type.h",
     "service/server_url_fetcher.cc",
     "service/server_url_fetcher.h",
@@ -565,7 +565,7 @@
     "service/mock_simple_url_loader_factory.h",
     "service/mock_url_loader.cc",
     "service/mock_url_loader.h",
-    "service/offline_service_unittests.cc",
+    "service/no_round_trip_service_unittests.cc",
     "service/server_url_fetcher_unittest.cc",
     "service/service_impl_unittest.cc",
     "service/service_request_sender_impl_unittest.cc",
diff --git a/components/autofill_assistant/browser/details_unittest.cc b/components/autofill_assistant/browser/details_unittest.cc
index 969a65d5..ca8e0af 100644
--- a/components/autofill_assistant/browser/details_unittest.cc
+++ b/components/autofill_assistant/browser/details_unittest.cc
@@ -8,7 +8,6 @@
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/geo/country_names.h"
-#include "components/autofill_assistant/browser/details.h"
 #include "components/autofill_assistant/browser/service.pb.h"
 #include "components/autofill_assistant/browser/trigger_context.h"
 #include "components/autofill_assistant/browser/user_data.h"
diff --git a/components/autofill_assistant/browser/service/offline_service.cc b/components/autofill_assistant/browser/service/no_round_trip_service.cc
similarity index 75%
rename from components/autofill_assistant/browser/service/offline_service.cc
rename to components/autofill_assistant/browser/service/no_round_trip_service.cc
index 2f9484e..34afe053 100644
--- a/components/autofill_assistant/browser/service/offline_service.cc
+++ b/components/autofill_assistant/browser/service/no_round_trip_service.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill_assistant/browser/service/offline_service.h"
+#include "components/autofill_assistant/browser/service/no_round_trip_service.h"
 
 #include <memory>
 #include <string>
@@ -28,22 +28,22 @@
 LocalScriptStore::~LocalScriptStore() = default;
 
 // static
-std::unique_ptr<OfflineService> OfflineService::Create(
+std::unique_ptr<NoRoundTripService> NoRoundTripService::Create(
     const LocalScriptStore& script_store) {
-  return std::make_unique<OfflineService>(script_store);
+  return std::make_unique<NoRoundTripService>(script_store);
 }
 
-OfflineService::OfflineService(const LocalScriptStore& script_store)
+NoRoundTripService::NoRoundTripService(const LocalScriptStore& script_store)
     : script_store_(script_store) {}
 
-OfflineService::~OfflineService() = default;
+NoRoundTripService::~NoRoundTripService() = default;
 
-void OfflineService::SetScriptStoreConfig(
+void NoRoundTripService::SetScriptStoreConfig(
     const ScriptStoreConfig& script_store_config) {
   script_store_config_ = script_store_config;
 }
 
-void OfflineService::GetScriptsForUrl(
+void NoRoundTripService::GetScriptsForUrl(
     const GURL& url,
     const TriggerContext& trigger_context,
     ServiceRequestSender::ResponseCallback callback) {
@@ -60,7 +60,7 @@
   std::move(callback).Run(status, supports_site_response_str, response_info);
 }
 
-void OfflineService::GetActions(
+void NoRoundTripService::GetActions(
     const std::string& script_path,
     const GURL& url,
     const TriggerContext& trigger_context,
@@ -88,7 +88,7 @@
   std::move(callback).Run(net::HTTP_BAD_REQUEST, "", response_info);
 }
 
-void OfflineService::GetNextActions(
+void NoRoundTripService::GetNextActions(
     const TriggerContext& trigger_context,
     const std::string& previous_global_payload,
     const std::string& previous_script_payload,
@@ -96,35 +96,35 @@
     const RoundtripTimingStats& timing_stats,
     const RoundtripNetworkStats& network_stats,
     ServiceRequestSender::ResponseCallback callback) {
-  VLOG(1) << __func__ << "called in OfflineService, returning empty list";
+  VLOG(1) << __func__ << "called in NoRoundTripService, returning empty list";
   std::move(callback).Run(net::HTTP_OK, "",
                           ServiceRequestSender::ResponseInfo());
 }
 
-void OfflineService::GetUserData(
+void NoRoundTripService::GetUserData(
     const CollectUserDataOptions& options,
     uint64_t run_id,
     const UserData* user_data,
     ServiceRequestSender::ResponseCallback callback) {
-  LOG(ERROR) << __func__ << "not available in OfflineService";
+  LOG(ERROR) << __func__ << "not available in NoRoundTripService";
   std::move(callback).Run(net::HTTP_METHOD_NOT_ALLOWED, "",
                           ServiceRequestSender::ResponseInfo());
 }
 
-void OfflineService::SetDisableRpcSigning(bool disable_rpc_signing) {
-  LOG(WARNING) << __func__ << "not available in OfflineService";
+void NoRoundTripService::SetDisableRpcSigning(bool disable_rpc_signing) {
+  LOG(WARNING) << __func__ << "not available in NoRoundTripService";
 }
 
-void OfflineService::UpdateAnnotateDomModelContext(int64_t model_version) {
-  LOG(WARNING) << __func__ << "not available in OfflineService";
+void NoRoundTripService::UpdateAnnotateDomModelContext(int64_t model_version) {
+  LOG(WARNING) << __func__ << "not available in NoRoundTripService";
 }
 
-void OfflineService::UpdateJsFlowLibraryLoaded(
+void NoRoundTripService::UpdateJsFlowLibraryLoaded(
     const bool js_flow_library_loaded) {
-  LOG(WARNING) << __func__ << "not available in OfflineService";
+  LOG(WARNING) << __func__ << "not available in NoRoundTripService";
 }
 
-void OfflineService::ReportProgress(
+void NoRoundTripService::ReportProgress(
     const std::string& token,
     const std::string& payload,
     ServiceRequestSender::ResponseCallback callback) {}
diff --git a/components/autofill_assistant/browser/service/offline_service.h b/components/autofill_assistant/browser/service/no_round_trip_service.h
similarity index 87%
rename from components/autofill_assistant/browser/service/offline_service.h
rename to components/autofill_assistant/browser/service/no_round_trip_service.h
index a697756..c17b1d5 100644
--- a/components/autofill_assistant/browser/service/offline_service.h
+++ b/components/autofill_assistant/browser/service/no_round_trip_service.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_OFFLINE_SERVICE_H_
-#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_OFFLINE_SERVICE_H_
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_NO_ROUND_TRIP_SERVICE_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_NO_ROUND_TRIP_SERVICE_H_
 
 #include <memory>
 #include <string>
@@ -44,16 +44,16 @@
 
 // An offline version of the service that fetches all actions at once and then
 // serves scripts without roundtrips.
-class OfflineService : public Service {
+class NoRoundTripService : public Service {
  public:
   // Convenience method for creating an offline service.
-  static std::unique_ptr<OfflineService> Create(
+  static std::unique_ptr<NoRoundTripService> Create(
       const LocalScriptStore& script_store);
 
-  explicit OfflineService(const LocalScriptStore& script_store);
-  OfflineService(const OfflineService&) = delete;
-  OfflineService& operator=(const OfflineService&) = delete;
-  ~OfflineService() override;
+  explicit NoRoundTripService(const LocalScriptStore& script_store);
+  NoRoundTripService(const NoRoundTripService&) = delete;
+  NoRoundTripService& operator=(const NoRoundTripService&) = delete;
+  ~NoRoundTripService() override;
 
   // Return the SupportsSite response from the local script store.
   void GetScriptsForUrl(
@@ -109,4 +109,4 @@
   const LocalScriptStore script_store_;
 };
 }  // namespace autofill_assistant
-#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_OFFLINE_SERVICE_H_
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_NO_ROUND_TRIP_SERVICE_H_
diff --git a/components/autofill_assistant/browser/service/offline_service_unittests.cc b/components/autofill_assistant/browser/service/no_round_trip_service_unittests.cc
similarity index 82%
rename from components/autofill_assistant/browser/service/offline_service_unittests.cc
rename to components/autofill_assistant/browser/service/no_round_trip_service_unittests.cc
index 05311854..fe360f1 100644
--- a/components/autofill_assistant/browser/service/offline_service_unittests.cc
+++ b/components/autofill_assistant/browser/service/no_round_trip_service_unittests.cc
@@ -1,10 +1,10 @@
 // Copyright 2020 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-#include "components/autofill_assistant/browser/service/offline_service.h"
+#include "components/autofill_assistant/browser/service/no_round_trip_service.h"
 
 #include <memory>
-#include "components/autofill_assistant/browser/service/offline_service.h"
+#include "components/autofill_assistant/browser/service/no_round_trip_service.h"
 
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
@@ -24,9 +24,9 @@
 namespace {
 const char kFakeUrl[] = "https://www.example.com";
 
-class OfflineServiceTest : public testing::Test {
+class NoRoundTripServiceTest : public testing::Test {
  protected:
-  ~OfflineServiceTest() override = default;
+  ~NoRoundTripServiceTest() override = default;
 
   base::MockCallback<ServiceRequestSender::ResponseCallback>
       mock_response_callback_;
@@ -37,13 +37,13 @@
       GetNoRoundtripScriptsByHashPrefixResponseProto::MatchInfo::RoutineScript>
       routines_;
 
-  OfflineService GetService() {
-    return OfflineService(
+  NoRoundTripService GetService() {
+    return NoRoundTripService(
         LocalScriptStore(routines_, domain_, supports_site_response_));
   }
 };
 
-TEST_F(OfflineServiceTest, WithRightUrlGetScriptsSucceeds) {
+TEST_F(NoRoundTripServiceTest, WithRightUrlGetScriptsSucceeds) {
   domain_ = "example.com";
   supports_site_response_.add_scripts()->set_path("test_path");
 
@@ -55,7 +55,7 @@
                                 mock_response_callback_.Get());
 }
 
-TEST_F(OfflineServiceTest, WithWrongUrlGetScriptsFails) {
+TEST_F(NoRoundTripServiceTest, WithWrongUrlGetScriptsFails) {
   domain_ = "example.com";
   supports_site_response_.add_scripts()->set_path("test_path");
 
@@ -67,7 +67,7 @@
                                 mock_response_callback_.Get());
 }
 
-TEST_F(OfflineServiceTest, WithExistingPathGetActionsSucceeds) {
+TEST_F(NoRoundTripServiceTest, WithExistingPathGetActionsSucceeds) {
   domain_ = "example.com";
   routines_.resize(1);
   routines_[0].mutable_routine()->set_path("script_path");
@@ -83,7 +83,7 @@
                           "", mock_response_callback_.Get());
 }
 
-TEST_F(OfflineServiceTest, GetActionsFailsGivenWrongPath) {
+TEST_F(NoRoundTripServiceTest, GetActionsFailsGivenWrongPath) {
   domain_ = "example.com";
   routines_.resize(1);
   routines_[0].mutable_routine()->set_path("script_path");
@@ -95,7 +95,7 @@
                           "", "", mock_response_callback_.Get());
 }
 
-TEST_F(OfflineServiceTest, GetNextActionsReturnsEmptyResponse) {
+TEST_F(NoRoundTripServiceTest, GetNextActionsReturnsEmptyResponse) {
   EXPECT_CALL(mock_response_callback_, Run(net::HTTP_OK, "", _));
 
   const std::vector<ProcessedActionProto> processed_actions;
@@ -105,7 +105,7 @@
                               mock_response_callback_.Get());
 }
 
-TEST_F(OfflineServiceTest, GetUserDataFails) {
+TEST_F(NoRoundTripServiceTest, GetUserDataFails) {
   EXPECT_CALL(mock_response_callback_,
               Run(net::HTTP_METHOD_NOT_ALLOWED, "", _));
   const UserData user_data;
diff --git a/components/autofill_assistant/content/renderer/autofill_assistant_model_executor_unittest.cc b/components/autofill_assistant/content/renderer/autofill_assistant_model_executor_unittest.cc
index 71a5c26..a9e41a0 100644
--- a/components/autofill_assistant/content/renderer/autofill_assistant_model_executor_unittest.cc
+++ b/components/autofill_assistant/content/renderer/autofill_assistant_model_executor_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
-#include "components/autofill_assistant/content/renderer/autofill_assistant_model_executor.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/web_string.h"
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
index 45b45360..5e3556c4 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
@@ -59,7 +59,7 @@
 <translation id="2321958826496381788">သင်က ယင်းကို ဖတ်ရအဆင်ပြေသည့် အထိ ဆွဲတန်းကို ဆွဲယူပါ။ စာသားတွင် စာပိုဒ် တစ်ခုကို နှစ်ကြိမ် ပုတ်လိုက်သည့် နောက်မှာ ဤမျှလောက် ကြီးလျက် မြင်ရသင့်သည်။</translation>
 <translation id="2329473609445770916">သင့်ကို ကြော်ငြာပြရန် အခြားဝဘ်ဆိုက်များသုံးနိုင်သော စိတ်ဝင်စားမှုများကို ဤဝဘ်ဆိုက်က သတ်မှတ်သည်</translation>
 <translation id="2359808026110333948">ဆက်လုပ်ရန်</translation>
-<translation id="2379925928934107488">Chrome က ဝဘ်ဆိုက်များကို မှောင်သည့် အပြင်အဆင်သုံးလျှင် ဖြစ်နိုင်ပါက ၎င်းအပြင်အဆင်ကို ပြောင်းပေးသည်</translation>
+<translation id="2379925928934107488">Chrome က ဝဘ်ဆိုက်များကို အမှောင်နောက်ခံသုံးလျှင် ဖြစ်နိုင်ပါက ၎င်းအပြင်အဆင်ကို ပြောင်းပေးသည်</translation>
 <translation id="2387895666653383613">စာသား စကေး</translation>
 <translation id="2402980924095424747"><ph name="MEGABYTES" /> မီဂါဘိုက်</translation>
 <translation id="2404630663942400771">{PERMISSIONS_SUMMARY_ALLOWED,plural, =1{<ph name="PERMISSION_1" />၊ <ph name="PERMISSION_2" /> နှင့် နောက်ထပ် <ph name="NUM_MORE" /> ခု ခွင့်ပြုထားသည်}other{<ph name="PERMISSION_1" />၊ <ph name="PERMISSION_2" /> နှင့် နောက်ထပ် <ph name="NUM_MORE" /> ခု ခွင့်ပြုထားသည်}}</translation>
@@ -74,7 +74,7 @@
 <translation id="2570922361219980984">ဤစက်ပစ္စည်းအတွက်လည်း တည်နေရာ အသုံးပြုခွင့်ကို ပိတ်ထားသည်။ <ph name="BEGIN_LINK" />Android ဆက်တင်များ<ph name="END_LINK" /> တွင် ၎င်းကို ဖွင့်ပါ။</translation>
 <translation id="257931822824936280">ချဲ့ထား၏ - ခေါက်သိမ်းရန် နှိပ်ပါ</translation>
 <translation id="2586657967955657006">ကလစ်ဘုတ်</translation>
-<translation id="2597457036804169544">ဝဘ်ဆိုက်များကို မှောင်သည့် အပြင်အဆင်မပြောင်းပါ</translation>
+<translation id="2597457036804169544">ဝဘ်ဆိုက်များကို အမှောင်နောက်ခံသို့ မပြောင်းပါနှင့်</translation>
 <translation id="2621115761605608342">တိကျသည့်ဆိုက်အတွက် JavaScript ကိုခွင့်ပြုပါ။</translation>
 <translation id="2653659639078652383">ပေးပို့ရန်</translation>
 <translation id="2677748264148917807">ထွက်ခွာရန်</translation>
@@ -122,7 +122,7 @@
 <translation id="3628308229821498208">အကြံပြုထားသည့် ရှာဖွေမှုများ</translation>
 <translation id="3744111561329211289">နောက်ခံတွင် စင့်ခ်လုပ်ခြင်း</translation>
 <translation id="3763247130972274048">၁၀ စက္ကန့်ကျော်ရန် ဗီဒီယိုဘယ်ဘက် သို့မဟုတ် ညာဘက်တွင် နှစ်ချက်တို့ပါ</translation>
-<translation id="3797520601150691162">ဝဘ်ဆိုက်တစ်ခုအတွက် မှောင်သည့် အပြင်အဆင်ကိုမပြောင်းပါ</translation>
+<translation id="3797520601150691162">ဝဘ်ဆိုက်တစ်ခုအတွက် အမှောင်နောက်ခံသို့ မပြောင်းပါ</translation>
 <translation id="3804247818991980532"><ph name="TYPE_1" />။ <ph name="TYPE_2" />။</translation>
 <translation id="381841723434055211">ဖုန်းနံပါတ်များ</translation>
 <translation id="3826050100957962900">ပြင်ပအဖွဲ့အစည်းသို့ လက်မှတ်ထိုးဝင်ခြင်း</translation>
@@ -277,7 +277,7 @@
 <translation id="7066151586745993502">{NUM_SELECTED,plural, =1{1 ခု ရွေးထားသည်}other{# ခု ရွေးထားသည်}}</translation>
 <translation id="7087918508125750058"><ph name="ITEM_COUNT" /> ခု ရွေးထားသည်။ မျက်နှာပြင်၏ ထိပ်နားတွင် ရွေးချယ်စရာများ ရှိသည်</translation>
 <translation id="7141896414559753902">ပေါ့ပ်အပ်နှင့် တစ်ဆင့်ပြန်ညွှန်ချက်များကို မဖော်ပြနိုင်စေရန် ဝဘ်ဆိုက်များအား ပိတ်ပါ (အကြံပြုထားသည်)</translation>
-<translation id="7176368934862295254"><ph name="KILOBYTES" /> ကီလိုဘိုက်</translation>
+<translation id="7176368934862295254"><ph name="KILOBYTES" /> KB</translation>
 <translation id="7180611975245234373">ပြန်လည်စတင်ရန်</translation>
 <translation id="7203150201908454328">တိုးချဲ့ထား</translation>
 <translation id="723171743924126238">ပုံများကို ရွေးရန်</translation>
diff --git a/components/browser_watcher/extended_crash_reporting.cc b/components/browser_watcher/extended_crash_reporting.cc
index 444eb5b..b98f25a 100644
--- a/components/browser_watcher/extended_crash_reporting.cc
+++ b/components/browser_watcher/extended_crash_reporting.cc
@@ -18,7 +18,6 @@
 #include "components/browser_watcher/activity_data_names.h"
 #include "components/browser_watcher/activity_report.pb.h"
 #include "components/browser_watcher/activity_tracker_annotation.h"
-#include "components/browser_watcher/extended_crash_reporting.h"
 #include "components/browser_watcher/extended_crash_reporting_metrics.h"
 #include "components/browser_watcher/features.h"
 
diff --git a/components/captive_portal/content/captive_portal_service_unittest.cc b/components/captive_portal/content/captive_portal_service_unittest.cc
index 0b36d75c..b987844 100644
--- a/components/captive_portal/content/captive_portal_service_unittest.cc
+++ b/components/captive_portal/content/captive_portal_service_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
-#include "components/captive_portal/content/captive_portal_service.h"
 #include "components/captive_portal/core/captive_portal_testing_utils.h"
 #include "components/captive_portal/core/captive_portal_types.h"
 #include "components/embedder_support/pref_names.h"
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 283f336..25bf0681 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "10.80",
-  "log_list_timestamp": "2022-08-21T12:54:08Z",
+  "version": "10.81",
+  "log_list_timestamp": "2022-08-22T12:54:45Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/crash/android/crash_keys_android.cc b/components/crash/android/crash_keys_android.cc
index ad3c01d..5ce5f929 100644
--- a/components/crash/android/crash_keys_android.cc
+++ b/components/crash/android/crash_keys_android.cc
@@ -23,6 +23,7 @@
       {"emulated_modules", JavaCrashKey::Tag::kArray},
       {"dynamic_module_dex_name", JavaCrashKey::Tag::kArray},
       {"partner_customization_config", JavaCrashKey::Tag::kArray},
+      {"first_run", JavaCrashKey::Tag::kArray},
   };
   static_assert(
       std::size(crash_keys) == static_cast<size_t>(CrashKeyIndex::NUM_ENTRIES),
diff --git a/components/crash/android/crash_keys_android.h b/components/crash/android/crash_keys_android.h
index 5936ba0..25ae526 100644
--- a/components/crash/android/crash_keys_android.h
+++ b/components/crash/android/crash_keys_android.h
@@ -18,6 +18,7 @@
   EMULATED_MODULES,
   DYNAMIC_MODULE_DEX_NAME,
   PARTNER_CUSTOMIZATION_CONFIG,
+  FIRST_RUN,
   NUM_ENTRIES
 };
 
diff --git a/components/crash/android/java/src/org/chromium/components/crash/CrashKeys.java b/components/crash/android/java/src/org/chromium/components/crash/CrashKeys.java
index 9cc54fb1..e764aef 100644
--- a/components/crash/android/java/src/org/chromium/components/crash/CrashKeys.java
+++ b/components/crash/android/java/src/org/chromium/components/crash/CrashKeys.java
@@ -25,7 +25,7 @@
 public class CrashKeys {
     private static final String[] KEYS = new String[] {"loaded_dynamic_module",
             "active_dynamic_module", "application_status", "installed_modules", "emulated_modules",
-            "dynamic_module_dex_name", "partner_customization_config"};
+            "dynamic_module_dex_name", "partner_customization_config", "first_run"};
 
     private final AtomicReferenceArray<String> mValues = new AtomicReferenceArray<>(KEYS.length);
 
diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc
index 3efcc8e..8be1c9e4 100644
--- a/components/history/core/browser/history_backend.cc
+++ b/components/history/core/browser/history_backend.cc
@@ -508,6 +508,79 @@
   ScheduleCommit();
 }
 
+void HistoryBackend::SetPageLanguageForVisit(ContextID context_id,
+                                             int nav_entry_id,
+                                             const GURL& url,
+                                             const std::string& page_language) {
+  VisitID visit_id = tracker_.GetLastVisit(context_id, nav_entry_id, url);
+  if (!visit_id)
+    return;
+
+  SetPageLanguageForVisitByVisitID(visit_id, page_language);
+}
+
+void HistoryBackend::SetPageLanguageForVisitByVisitID(
+    VisitID visit_id,
+    const std::string& page_language) {
+  TRACE_EVENT0("browser", "HistoryBackend::SetPageLanguageForVisitByVisitID");
+
+  if (!db_)
+    return;
+
+  // Only add to the annotations table if the visit_id exists in the visits
+  // table.
+  VisitRow visit_row;
+  if (db_->GetRowForVisit(visit_id, &visit_row)) {
+    VisitContentAnnotations annotations;
+    if (db_->GetContentAnnotationsForVisit(visit_id, &annotations)) {
+      annotations.page_language = page_language;
+      db_->UpdateContentAnnotationsForVisit(visit_id, annotations);
+    } else {
+      annotations.page_language = page_language;
+      db_->AddContentAnnotationsForVisit(visit_id, annotations);
+    }
+    NotifyVisitUpdated(visit_row);
+    ScheduleCommit();
+  }
+}
+
+void HistoryBackend::SetPasswordStateForVisit(
+    ContextID context_id,
+    int nav_entry_id,
+    const GURL& url,
+    VisitContentAnnotations::PasswordState password_state) {
+  VisitID visit_id = tracker_.GetLastVisit(context_id, nav_entry_id, url);
+  if (!visit_id)
+    return;
+
+  SetPasswordStateForVisitByVisitID(visit_id, password_state);
+}
+
+void HistoryBackend::SetPasswordStateForVisitByVisitID(
+    VisitID visit_id,
+    VisitContentAnnotations::PasswordState password_state) {
+  TRACE_EVENT0("browser", "HistoryBackend::SetPasswordStateForVisitByVisitID");
+
+  if (!db_)
+    return;
+
+  // Only add to the annotations table if the visit_id exists in the visits
+  // table.
+  VisitRow visit_row;
+  if (db_->GetRowForVisit(visit_id, &visit_row)) {
+    VisitContentAnnotations annotations;
+    if (db_->GetContentAnnotationsForVisit(visit_id, &annotations)) {
+      annotations.password_state = password_state;
+      db_->UpdateContentAnnotationsForVisit(visit_id, annotations);
+    } else {
+      annotations.password_state = password_state;
+      db_->AddContentAnnotationsForVisit(visit_id, annotations);
+    }
+    NotifyVisitUpdated(visit_row);
+    ScheduleCommit();
+  }
+}
+
 void HistoryBackend::AddContentModelAnnotationsForVisit(
     VisitID visit_id,
     const VisitContentModelAnnotations& model_annotations) {
diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h
index 3acc127..a00772c 100644
--- a/components/history/core/browser/history_backend.h
+++ b/components/history/core/browser/history_backend.h
@@ -255,6 +255,20 @@
   void SetBrowsingTopicsAllowed(ContextID context_id,
                                 int nav_entry_id,
                                 const GURL& url);
+  void SetPageLanguageForVisit(ContextID context_id,
+                               int nav_entry_id,
+                               const GURL& url,
+                               const std::string& page_language);
+  void SetPageLanguageForVisitByVisitID(VisitID visit_id,
+                                        const std::string& page_language);
+  void SetPasswordStateForVisit(
+      ContextID context_id,
+      int nav_entry_id,
+      const GURL& url,
+      VisitContentAnnotations::PasswordState password_state);
+  void SetPasswordStateForVisitByVisitID(
+      VisitID visit_id,
+      VisitContentAnnotations::PasswordState password_state);
   void AddContentModelAnnotationsForVisit(
       VisitID visit_id,
       const VisitContentModelAnnotations& model_annotations);
diff --git a/components/history/core/browser/history_service.cc b/components/history/core/browser/history_service.cc
index d954434..b719dfef 100644
--- a/components/history/core/browser/history_service.cc
+++ b/components/history/core/browser/history_service.cc
@@ -485,6 +485,33 @@
                               history_backend_, context_id, nav_entry_id, url));
 }
 
+void HistoryService::SetPageLanguageForVisit(ContextID context_id,
+                                             int nav_entry_id,
+                                             const GURL& url,
+                                             const std::string& page_language) {
+  TRACE_EVENT0("browser", "HistoryService::SetPageLanguageForVisit");
+  DCHECK(backend_task_runner_) << "History service being called after cleanup";
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  ScheduleTask(
+      PRIORITY_NORMAL,
+      base::BindOnce(&HistoryBackend::SetPageLanguageForVisit, history_backend_,
+                     context_id, nav_entry_id, url, page_language));
+}
+
+void HistoryService::SetPasswordStateForVisit(
+    ContextID context_id,
+    int nav_entry_id,
+    const GURL& url,
+    VisitContentAnnotations::PasswordState password_state) {
+  TRACE_EVENT0("browser", "HistoryService::SetPasswordStateForVisit");
+  DCHECK(backend_task_runner_) << "History service being called after cleanup";
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  ScheduleTask(PRIORITY_NORMAL,
+               base::BindOnce(&HistoryBackend::SetPasswordStateForVisit,
+                              history_backend_, context_id, nav_entry_id, url,
+                              password_state));
+}
+
 void HistoryService::AddContentModelAnnotationsForVisit(
     const VisitContentModelAnnotations& model_annotations,
     VisitID visit_id) {
diff --git a/components/history/core/browser/history_service.h b/components/history/core/browser/history_service.h
index 79fe737..779e62e1 100644
--- a/components/history/core/browser/history_service.h
+++ b/components/history/core/browser/history_service.h
@@ -33,6 +33,7 @@
 #include "components/favicon_base/favicon_usage_data.h"
 #include "components/history/core/browser/history_types.h"
 #include "components/history/core/browser/keyword_id.h"
+#include "components/history/core/browser/url_row.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "sql/init_status.h"
 #include "ui/base/page_transition_types.h"
@@ -221,6 +222,25 @@
                                 int nav_entry_id,
                                 const GURL& url);
 
+  // Updates the history database by setting the detected language of the page
+  // content.
+  // The page can be identified by the combination of the context id, the
+  // navigation entry id and the url. No-op if the page is not found.
+  void SetPageLanguageForVisit(ContextID context_id,
+                               int nav_entry_id,
+                               const GURL& url,
+                               const std::string& page_language);
+
+  // Updates the history database by setting the "password state", i.e. whether
+  // a password form was found on the page.
+  // The page can be identified by the combination of the context id, the
+  // navigation entry id and the url. No-op if the page is not found.
+  void SetPasswordStateForVisit(
+      ContextID context_id,
+      int nav_entry_id,
+      const GURL& url,
+      VisitContentAnnotations::PasswordState password_state);
+
   // Updates the history database with the content model annotations for the
   // visit.
   void AddContentModelAnnotationsForVisit(
diff --git a/components/history/core/browser/url_row.cc b/components/history/core/browser/url_row.cc
index 59ee61b..79c3582 100644
--- a/components/history/core/browser/url_row.cc
+++ b/components/history/core/browser/url_row.cc
@@ -136,7 +136,7 @@
     const std::u16string& search_terms,
     const std::string& alternative_title,
     const std::string& page_language,
-    int password_state)
+    PasswordState password_state)
     : annotation_flags(annotation_flags),
       model_annotations(model_annotations),
       related_searches(related_searches),
diff --git a/components/history/core/browser/url_row.h b/components/history/core/browser/url_row.h
index 84a2d04c..717e4da5 100644
--- a/components/history/core/browser/url_row.h
+++ b/components/history/core/browser/url_row.h
@@ -235,6 +235,14 @@
 
 // A structure containing the annotations made to page content for a visit.
 struct VisitContentAnnotations {
+  // Values are persisted; do not reorder or reuse, and only add new values at
+  // the end.
+  enum class PasswordState {
+    kUnknown = 0,
+    kNoPasswordField = 1,
+    kHasPasswordField = 2,
+  };
+
   VisitContentAnnotations();
   VisitContentAnnotations(VisitContentAnnotationFlags annotation_flags,
                           VisitContentModelAnnotations model_annotations,
@@ -243,7 +251,7 @@
                           const std::u16string& search_terms,
                           const std::string& alternative_title,
                           const std::string& page_language,
-                          int password_state);
+                          PasswordState password_state);
   VisitContentAnnotations(const VisitContentAnnotations& other);
   ~VisitContentAnnotations();
 
@@ -259,10 +267,9 @@
   // Language of the content on the page, as an ISO 639 language code (usually
   // two letters). May be "und" if the language couldn't be determined.
   std::string page_language;
-  // Whether a password form was found on the page - see
-  // sessions::GetPasswordStateFromNavigation().
-  // TODO(crbug.com/1347012): Make this strongly typed instead of just an int.
-  int password_state = 0;
+  // Whether a password form was found on the page - see also
+  // sessions::SerializedNavigationEntry::PasswordState.
+  PasswordState password_state = PasswordState::kUnknown;
 };
 
 class URLResult : public URLRow {
diff --git a/components/history/core/browser/visit_annotations_database.cc b/components/history/core/browser/visit_annotations_database.cc
index d5b8f04..c168c71 100644
--- a/components/history/core/browser/visit_annotations_database.cc
+++ b/components/history/core/browser/visit_annotations_database.cc
@@ -100,6 +100,26 @@
   return static_cast<int>(type);
 }
 
+VisitContentAnnotations::PasswordState PasswordStateFromInt(int state) {
+  VisitContentAnnotations::PasswordState converted =
+      static_cast<VisitContentAnnotations::PasswordState>(state);
+  // Verify that `converted` is actually a valid enum value.
+  switch (converted) {
+    case VisitContentAnnotations::PasswordState::kUnknown:
+    case VisitContentAnnotations::PasswordState::kNoPasswordField:
+    case VisitContentAnnotations::PasswordState::kHasPasswordField:
+      return converted;
+  }
+  // If the `state` wasn't actually a valid PasswordState value (e.g. due to DB
+  // corruption), return `kUnknown` to be safe.
+  return VisitContentAnnotations::PasswordState::kUnknown;
+}
+
+int PasswordStateToInt(VisitContentAnnotations::PasswordState state) {
+  DCHECK_EQ(PasswordStateFromInt(static_cast<int>(state)), state);
+  return static_cast<int>(state);
+}
+
 // An enum of bitmasks to help represent the boolean flags of
 // `VisitContextAnnotations` in the database. This avoids having to update
 // the schema every time we add/remove/change a bool context annotation. As
@@ -293,7 +313,8 @@
   statement.BindString16(8, visit_content_annotations.search_terms);
   statement.BindString(9, visit_content_annotations.alternative_title);
   statement.BindString(10, visit_content_annotations.page_language);
-  statement.BindInt(11, visit_content_annotations.password_state);
+  statement.BindInt(
+      11, PasswordStateToInt(visit_content_annotations.password_state));
 
   if (!statement.Run()) {
     DVLOG(0) << "Failed to execute 'content_annotations' insert statement:  "
@@ -478,7 +499,8 @@
   out_content_annotations->search_terms = statement.ColumnString16(8);
   out_content_annotations->alternative_title = statement.ColumnString(9);
   out_content_annotations->page_language = statement.ColumnString(10);
-  out_content_annotations->password_state = statement.ColumnInt(11);
+  out_content_annotations->password_state =
+      PasswordStateFromInt(statement.ColumnInt(11));
   return true;
 }
 
diff --git a/components/history/core/browser/visit_annotations_database_unittest.cc b/components/history/core/browser/visit_annotations_database_unittest.cc
index e0c042c3..faac4ef8 100644
--- a/components/history/core/browser/visit_annotations_database_unittest.cc
+++ b/components/history/core/browser/visit_annotations_database_unittest.cc
@@ -124,7 +124,7 @@
       u"search",
       "Alternative title",
       "en",
-      0};
+      VisitContentAnnotations::PasswordState::kUnknown};
   AddContentAnnotationsForVisit(visit_id, content_annotations);
 
   // Query for it.
@@ -256,14 +256,15 @@
   std::vector<std::string> related_searches{"related searches"};
   VisitContentAnnotationFlags annotation_flags =
       VisitContentAnnotationFlag::kBrowsingTopicsEligible;
-  VisitContentAnnotations original{annotation_flags,
-                                   model_annotations,
-                                   related_searches,
-                                   GURL("http://pagewithvisit.com?q=search"),
-                                   u"search",
-                                   "Alternative title",
-                                   "en",
-                                   0};
+  VisitContentAnnotations original{
+      annotation_flags,
+      model_annotations,
+      related_searches,
+      GURL("http://pagewithvisit.com?q=search"),
+      u"search",
+      "Alternative title",
+      "en",
+      VisitContentAnnotations::PasswordState::kUnknown};
   AddContentAnnotationsForVisit(visit_id, original);
 
   // Mutate that row.
diff --git a/components/nacl/common/BUILD.gn b/components/nacl/common/BUILD.gn
index 15fcd45c..27cb91a35 100644
--- a/components/nacl/common/BUILD.gn
+++ b/components/nacl/common/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build/buildflag_header.gni")
 import("//components/nacl/features.gni")
+import("//components/nacl/toolchain.gni")
 import("//mojo/public/tools/bindings/mojom.gni")
 
 if (enable_nacl) {
@@ -146,5 +147,8 @@
 
 buildflag_header("buildflags") {
   header = "buildflags.h"
-  flags = [ "ENABLE_NACL=$enable_nacl" ]
+  flags = [
+    "ENABLE_NACL=$enable_nacl",
+    "IS_MINIMAL_TOOLCHAIN=$is_minimal_toolchain",
+  ]
 }
diff --git a/components/nacl/loader/BUILD.gn b/components/nacl/loader/BUILD.gn
index 622e78d..e0fee03 100644
--- a/components/nacl/loader/BUILD.gn
+++ b/components/nacl/loader/BUILD.gn
@@ -166,7 +166,10 @@
     ]
 
     if (is_minimal_toolchain) {
-      assert_no_deps += [ "//net" ]
+      assert_no_deps += [
+        "//net",
+        "//skia",
+      ]
     }
   }
 
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
index 2fc62009..98bfe4e 100644
--- a/components/page_info/page_info.cc
+++ b/components/page_info/page_info.cc
@@ -1159,10 +1159,14 @@
     cookies_info.blocked_sites_count =
         GetThirdPartySitesWithBlockedCookiesAccessCount(site_url_);
 
-    // TODO(crbug.com/1346305): Add dummy function for FPS information.
-    if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get() &&
-        site_url_.host() == "example.com") {
-      cookies_info.fps_info.owner_name = u"example.com";
+    if (base::FeatureList::IsEnabled(
+            privacy_sandbox::kPrivacySandboxFirstPartySetsUI)) {
+#if !BUILDFLAG(IS_ANDROID)
+      auto fps_owner = delegate_->GetFpsOwner(site_url_);
+      if (fps_owner)
+        cookies_info.fps_info = PageInfoUI::CookiesFPSInfo(*fps_owner);
+
+#endif
     }
 
     ui_->SetCookieInfo(cookies_info);
diff --git a/components/page_info/page_info_delegate.h b/components/page_info/page_info_delegate.h
index 7548fb9..2e457bf 100644
--- a/components/page_info/page_info_delegate.h
+++ b/components/page_info/page_info_delegate.h
@@ -66,6 +66,10 @@
       blink::PermissionType permission,
       const url::Origin& origin) = 0;
 #if !BUILDFLAG(IS_ANDROID)
+  // Returns absl::nullopt if `site_url` is not recognised as a member of any
+  // FPS or if FPS functionality is not allowed .
+  virtual absl::optional<std::u16string> GetFpsOwner(const GURL& site_url) = 0;
+
   // Creates an infobars::ContentInfoBarManager and an InfoBarDelegate using it,
   // if possible. Returns true if an InfoBarDelegate was created, false
   // otherwise.
diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
index 4859faca..dfa6466b 100644
--- a/components/page_info/page_info_ui.cc
+++ b/components/page_info/page_info_ui.cc
@@ -373,7 +373,10 @@
 
 PageInfoUI::CookiesNewInfo::CookiesNewInfo() = default;
 
-PageInfoUI::CookiesFPSInfo::CookiesFPSInfo() = default;
+PageInfoUI::CookiesNewInfo::~CookiesNewInfo() = default;
+
+PageInfoUI::CookiesFPSInfo::CookiesFPSInfo(const std::u16string& owner_name)
+    : owner_name(owner_name) {}
 
 PageInfoUI::CookiesFPSInfo::~CookiesFPSInfo() = default;
 
diff --git a/components/page_info/page_info_ui.h b/components/page_info/page_info_ui.h
index f9a5760..66fa845c 100644
--- a/components/page_info/page_info_ui.h
+++ b/components/page_info/page_info_ui.h
@@ -89,12 +89,9 @@
 
   // |CookiesFPSInfo| contains information about a specific First-Party Set.
   struct CookiesFPSInfo {
-    CookiesFPSInfo();
+    explicit CookiesFPSInfo(const std::u16string& owner_name);
     ~CookiesFPSInfo();
 
-    // The number of sites in the same FPS.
-    int sites_accessing_data_count = -1;
-
     // The name of the owner of the FPS.
     std::u16string owner_name;
   };
@@ -105,6 +102,7 @@
   // cookies subpage implementation
   struct CookiesNewInfo {
     CookiesNewInfo();
+    ~CookiesNewInfo();
 
     // The number of third-party sites blocked.
     int blocked_sites_count = -1;
@@ -112,7 +110,7 @@
     // The number of sites allowed to access cookies.
     int allowed_sites_count = -1;
 
-    CookiesFPSInfo fps_info;
+    absl::optional<CookiesFPSInfo> fps_info;
   };
 
   // |ChosenObjectInfo| contains information about a single |chooser_object| of
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index f07c10d1..94331b5 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -292,6 +292,11 @@
   // Preferences for |PasswordChangeSuccessTracker|.
   registry->RegisterIntegerPref(prefs::kPasswordChangeSuccessTrackerVersion, 0);
   registry->RegisterListPref(prefs::kPasswordChangeSuccessTrackerFlows);
+
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+  registry->RegisterBooleanPref(prefs::kBiometricAuthenticationBeforeFilling,
+                                false);
+#endif
 }
 
 // static
diff --git a/components/password_manager/core/common/password_manager_pref_names.cc b/components/password_manager/core/common/password_manager_pref_names.cc
index 260485a..a5589f4 100644
--- a/components/password_manager/core/common/password_manager_pref_names.cc
+++ b/components/password_manager/core/common/password_manager_pref_names.cc
@@ -94,5 +94,10 @@
 const char kPasswordChangeSuccessTrackerVersion[] =
     "password_manager.password_change_success_tracker.version";
 
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+const char kBiometricAuthenticationBeforeFilling[] =
+    "password_manager.biometric_authentication_filling";
+#endif
+
 }  // namespace prefs
 }  // namespace password_manager
diff --git a/components/password_manager/core/common/password_manager_pref_names.h b/components/password_manager/core/common/password_manager_pref_names.h
index 229e621..dbfd456 100644
--- a/components/password_manager/core/common/password_manager_pref_names.h
+++ b/components/password_manager/core/common/password_manager_pref_names.h
@@ -164,6 +164,12 @@
 // |kPasswordChangeSuccessTrackerFlows|.
 extern const char kPasswordChangeSuccessTrackerVersion[];
 
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+// Boolean indicating whether user enabled biometric authentication before
+// filling.
+extern const char kBiometricAuthenticationBeforeFilling[];
+#endif
+
 }  // namespace prefs
 }  // namespace password_manager
 
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 32b8822..ea25f6a 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -18080,7 +18080,7 @@
         {
           'name': 'SAML_INTERSTITIAL',
           'value': 1,
-          'caption': '''Redirect to SAML IdP after user confirmation''',
+          'caption': '''Redirect to SAML IdP by default (prior to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 99 user confirmation is needed)''',
         },
       ],
       'supported_on': ['chrome_os:51-'],
@@ -18097,7 +18097,9 @@
 
       If set to GAIA, login will be done via the normal GAIA authentication flow.
 
-      If set to SAML_INTERSTITIAL, login will show an interstitial screen offering the user to go forward with authentication via the SAML IdP of the device's enrollment domain, or go back to the normal GAIA login flow.'''
+      If set to SAML_INTERSTITIAL, login will automatically redirect to SAML IdP by default. The user is still allowed to go back to the normal GAIA login flow.
+
+      Note: the additional user confirmation screen, which was shown on <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> until version 99, isn't displayed anymore. If SAML IdP isn't configured and this policy is set to SAML_INTERSTITIAL, redirect will fail with the 400 error.'''
     },
     {
       'name': 'UsbDetachableWhitelist',
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 79a6d6a..43ccb8f0 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -51,6 +51,13 @@
 
       Jika kebijakan tidak disetel, secara default fitur tidak diizinkan bagi pengguna terkelola tetapi diizinkan bagi pengguna lainnya.</translation>
 <translation id="1035860095382451169">Mengaktifkan ikon gembok di omnibox untuk koneksi aman</translation>
+<translation id="1040125341954178855">Fitur ini telah dihapus di Chrome 100.
+
+      Jika kebijakan ini disetel ke Aktif, rekomendasi untuk aplikasi yang sebelumnya diinstal oleh pengguna pada perangkat lain akan ditampilkan. Jika tidak ada penelusuran teks yang dimasukkan, rekomendasi ini akan muncul di peluncur setelah rekomendasi aplikasi lokal.
+
+      Jika kebijakan ini disetel ke Nonaktif atau tidak disetel, rekomendasi ini tidak akan muncul.
+
+      Jika kebijakan ini disetel, pengguna tidak dapat mengubahnya.</translation>
 <translation id="1040446814317236570">Aktifkan penyembunyian URL PAC (untuk https://)</translation>
 <translation id="1041719059374171202">Menyetel kebijakan memungkinkan Anda menetapkan daftar pola URL yang menentukan situs yang tidak dapat menjalankan JavaScript.
 
@@ -2142,6 +2149,7 @@
 <translation id="3118552207903834734">Mengizinkan pengguna mengonfigurasi nama host perangkatnya</translation>
 <translation id="3122082892722698079">Mengontrol penggunaan pengecualian konten tidak aman</translation>
 <translation id="3128072319047570212">Setelan keygen</translation>
+<translation id="3131703464330936425">Jangan izinkan roaming data seluler</translation>
 <translation id="3135820765957090754">Jika setelan ini diaktifkan, pengguna akan diizinkan untuk menyinkronkan konfigurasi jaringan Wi-Fi antara perangkat <ph name="PRODUCT_OS_NAME" /> dan ponsel Android yang terhubung. Sebelum konfigurasi jaringan Wi-Fi dapat disinkronkan, pengguna harus secara eksplisit memilih untuk menggunakan fitur ini dengan menyelesaikan alur penyiapan.
 
       Jika setelan ini dinonaktifkan, pengguna tidak akan diizinkan untuk menyinkronkan konfigurasi jaringan Wi-Fi.
@@ -2576,6 +2584,7 @@
 <translation id="35668690622495904">
           Panggilan tidak akan ditolak jika berasal dari daftar konteks yang tidak diizinkan. (Panggilan mungkin masih dapat ditolak karena alasan lain.)</translation>
 <translation id="3568762199045490351">Fungsi setTimeout() JavaScript dengan waktu tunggu 0 md akan dibulatkan ke 1 md.</translation>
+<translation id="3574450691573438824">Nonaktifkan upload log sistem perangkat</translation>
 <translation id="3575011234198230041">Autentikasi HTTP</translation>
 <translation id="3577251398714997599">Setelan iklan untuk situs yang menayangkan iklan mengganggu</translation>
 <translation id="3577628175311752799">Menggunakan kebijakan perujuk default untuk no-referrer-when-downgrade.</translation>
@@ -2697,6 +2706,7 @@
       Jika tidak disetel, interval default 3 jam akan berlaku.</translation>
 <translation id="3756011779061588474">Blokir mode pengembang</translation>
 <translation id="3756516139200532906">Izinkan pengguna terkelola mengonfigurasi nama host perangkat</translation>
+<translation id="3756737071958233151">Aktifkan upload log sistem perangkat</translation>
 <translation id="3758089716224084329">Memungkinkan Anda menentukan server proxy yang digunakan oleh <ph name="PRODUCT_NAME" /> dan mencegah pengguna mengubah setelan proxy.
 
       Jika Anda memilih untuk tidak pernah menggunakan server proxy dan selalu terhubung secara langsung, semua opsi lainnya akan diabaikan.
@@ -2743,6 +2753,7 @@
 
       Catatan: Untuk perangkat yang dikelola oleh <ph name="MS_AD_NAME" />, kebijakan ini mendukung ekspansi <ph name="MACHINE_NAME_VARIABLE" /> ke nama mesin <ph name="MS_AD_NAME" /> atau substring darinya. Misalnya, jika nama mesin adalah <ph name="MACHINE_NAME_EXAMPLE" />, lalu <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> digantikan oleh 4 karakter yang dimulai setelah posisi ke-6, dengan kata lain, <ph name="MACHINE_NAME_PART_EXAMPLE" />. Posisi dimulai dari nol.</translation>
 <translation id="377044054160169374">Penerapan Pencegahan Pengalaman yang Menyinggung</translation>
+<translation id="3777833753656885744">Mengaktifkan alur pengesahan untuk daftar URL pada layar login dan layar kunci</translation>
 <translation id="3778689139323007309">Lakukan pemeriksaan pembatalan sertifikat server yang berhasil divalidasi yang ditandatangani oleh sertifikat CA yang diinstal secara lokal</translation>
 <translation id="3780152581321609624">Sertakan port non-standar di SPN Kerberos</translation>
 <translation id="378495749480642482">Mengonfigurasi apakah situs yang dibuka pengguna akan diizinkan untuk membuat sesi Augmented Reality yang imersif menggunakan <ph name="WEBXR_API_NAME" />.
@@ -4285,6 +4296,7 @@
 
       Kebijakan ini tidak berlaku untuk peralihan channel.</translation>
 <translation id="5519331583722582543">Tanda boolean menunjukkan apakah keyboard virtual dapat memberikan input melalui pengenalan tulis tangan.</translation>
+<translation id="5519619299971727565">Nonaktifkan pelaporan penggunaan aplikasi Linux</translation>
 <translation id="5521875416764302911">Cegah pengguna login ke <ph name="PRODUCT_NAME" /></translation>
 <translation id="5526184558582921522">Izinkan kueri ke Server Quirk dan file konfigurasi khusus hardware yang mungkin didownload</translation>
 <translation id="5526701598901867718">Semua (tidak aman)</translation>
@@ -4305,6 +4317,7 @@
 
       Jika tidak ditentukan, tidak akan mengubah URL bibit Variasi.</translation>
 <translation id="5561811616825571914">Memilih sertifikat klien untuk situs ini secara otomatis di layar login</translation>
+<translation id="5563240289883266691">Aktifkan pelaporan penggunaan aplikasi Linux</translation>
 <translation id="5565178130821694365">Sandi harus dimasukkan setiap dua hari (48 jam)</translation>
 <translation id="5566210228171064229">Izinkan pencetakan dengan dan tanpa PIN</translation>
 <translation id="5572971233886879856">Menentukan subset server cetak yang akan dikueri untuk server printer. Ini hanya berlaku untuk kebijakan <ph name="DEVICE_EXTERNAL_PRINT_SERVERS_POLICY" />.
@@ -4849,6 +4862,7 @@
 <translation id="6155936611791017817">Setel status default kursor besar di layar masuk</translation>
 <translation id="6157537876488211233">Peraturan mengabaikan proxy yang dipisahkan koma</translation>
 <translation id="6158324314836466367">Nama toko web perusahaan (tidak digunakan)</translation>
+<translation id="6164441518097008843">Hanya izinkan login untuk pengguna di daftar</translation>
 <translation id="6169768162756928771">Setelan pengelolaan identitas pengguna GAIA</translation>
 <translation id="6172896675583897796">Jika kebijakan disetel ke Aktif, Asisten Google akan diizinkan untuk mengakses konteks layar dan mengirimkan data tersebut ke server. Jika kebijakan disetel ke Nonaktif, Asisten Google tidak akan diizinkan mengakses konteks layar.
 
@@ -4920,6 +4934,19 @@
       Kebijakan ini ditujukan untuk memberikan fleksibilitas kepada perusahaan untuk menonaktifkan sandbox audio jika menggunakan penyiapan software keamanan yang mengganggu sandbox.</translation>
 <translation id="624818583115864448">port 554 (blokir dapat dibatalkan hingga 15/10/2021)</translation>
 <translation id="6252773211180267325">Jangan cegah <ph name="BOREALIS_NAME" /> berjalan untuk pengguna</translation>
+<translation id="6255671003289033162">Mengaktifkan <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> untuk daftar URL.
+
+      Menyetel kebijakan ini akan menentukan URL mana yang akan diizinkan menjadi bagian dari alur pengesahan untuk mendapatkan serangkaian sinyal dari perangkat.
+
+      Jika kebijakan ini tidak disetel atau disetel ke kosong, tidak ada endpoint yang akan dapat memulai alur pengesahan atau mendapatkan sinyal dari perangkat.
+
+      URL harus berisi skema HTTPS, misalnya "https://example.com".
+
+      Catatan: Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan.
+
+      Untuk ChromeOS, kebijakan ini berhubungan dengan pengesahan jarak jauh dengan sertifikat yang otomatis dibuat dan diupload ke Server Pengelolaan Perangkat.
+
+      Untuk informasi selengkapnya tentang pola <ph name="URL_LABEL" /> yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
 <translation id="6258658183356534534">Mengontrol fitur Pembaruan GREASE Petunjuk Klien Agen Pengguna.</translation>
 <translation id="6261643884958898336">Laporkan informasi Identifikasi Mesin</translation>
 <translation id="6265892395051519509">Mengizinkan akses ke sensor di situs ini</translation>
@@ -4964,6 +4991,7 @@
 <translation id="6282524907402492171">Tampilkan peringatan <ph name="CLOUD_PRINT_NAME" /> tidak digunakan lagi</translation>
 <translation id="6282799760374509080">Izinkan atau tolak penangkapan audio</translation>
 <translation id="6284362063448764300">TLS 1.1</translation>
+<translation id="6287128640500683781">Izinkan semua pengguna login</translation>
 <translation id="6287310684159482272">Setelan cookie</translation>
 <translation id="6299147100249359151">Izinkan deteksi cakupan Kebijakan.</translation>
 <translation id="6300871921951390976">Jika kebijakan ini disetel ke Benar (True), pengguna hanya akan diizinkan mengubah saluran rilis perangkat. Jika kebijakan ini disetel ke Salah (False) atau tidak disetel, pengguna tidak akan diizinkan mengubah saluran.
@@ -5757,6 +5785,7 @@
 <translation id="7007283257527015835">Tanda boolean menunjukkan apakah pengendali protokol harus disetel sebagai default.</translation>
 <translation id="7008308728445338159">Pemeriksaan intersepsi DNS diaktifkan</translation>
 <translation id="7010006999849135962">Aktifkan autentikasi tanpa PIN untuk host akses jarak jauh</translation>
+<translation id="7016587686120059767">Nonaktifkan mode tamu</translation>
 <translation id="7016736684656067099">Jika kebijakan disetel ke 1, semua situs akan dapat menampilkan gambar. Jika kebijakan disetel ke 2, situs tidak akan dapat menampilkan gambar.
 
       Jika tidak disetel, kebijakan akan mengizinkan gambar, tetapi pengguna dapat mengubah setelan ini.</translation>
@@ -5764,6 +5793,7 @@
 
       Jika kebijakan disetel ke Nonaktif, <ph name="PRODUCT_NAME" /> akan menutup tab setelah beralih ke browser alternatif, meskipun itu adalah tab terakhir. Hal ini menyebabkan <ph name="PRODUCT_NAME" /> keluar sepenuhnya.</translation>
 <translation id="7019805045859631636">Cepat</translation>
+<translation id="7021590945154530517">Aktifkan pemantauan kondisi perangkat</translation>
 <translation id="7025332601572838001">Mengonfigurasi perilaku ToS saat CCT pertama kali dijalankan</translation>
 <translation id="7026351325994257733">Mengizinkan konfigurasi jaringan Wi-Fi disinkronkan di seluruh perangkat <ph name="PRODUCT_OS_NAME" /> dan ponsel Android yang terhubung.</translation>
 <translation id="7027057540229843762">Gunakan Tema terang</translation>
@@ -6026,6 +6056,7 @@
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, kebijakan KDC akan diabaikan di platform yang didukung dan hanya <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> yang akan dipatuhi.
 
       Di <ph name="MS_WIN_NAME" />, kebijakan KDC selalu dipatuhi.</translation>
+<translation id="7273785848231509306">Jangan tampilkan nama dan foto pengguna</translation>
 <translation id="7274077256421167535">Mengaktifkan berbagi daya USB</translation>
 <translation id="7275334191706090484">Bookmark Terkelola</translation>
 <translation id="7275689301063927473">Tolak izin Font Lokal di semua situs secara default</translation>
@@ -6046,6 +6077,19 @@
 <translation id="7323896582714668701">Parameter baris perintah tambahan untuk <ph name="PRODUCT_NAME" /></translation>
 <translation id="7325801934761922681">Cegah Chrome memblokir navigasi ke protokol eksternal di dalam iframe sandbox</translation>
 <translation id="7326394567531622570">Serupa dengan Wipe (nilai 2), namun mencoba untuk mempertahankan token login sehingga pengguna tidak perlu login lagi.</translation>
+<translation id="7328028920258952696">Mengaktifkan <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> untuk daftar URL di layar login dan layar kunci.
+
+      Menyetel kebijakan ini akan menentukan URL mana yang akan diizinkan menjadi bagian dari alur pengesahan untuk mendapatkan serangkaian sinyal dari perangkat.
+
+      Jika kebijakan ini tidak disetel atau disetel ke kosong, tidak ada endpoint yang akan dapat memulai alur pengesahan atau mendapatkan sinyal dari perangkat.
+
+      URL harus berisi skema HTTPS, misalnya "https://example.com".
+
+      Catatan: Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan.
+
+      Kebijakan ini hanya akan memengaruhi alur pengesahan di layar login dan layar kunci. Untuk mengubah alur pengesahan dalam sesi, gunakan kebijakan <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" />.
+
+      Untuk informasi selengkapnya tentang pola <ph name="URL_LABEL" /> yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
 <translation id="7331962793961469250">Bila disetel ke True, promosi untuk apl Chrome Webstore tidak akan muncul pada halaman tab baru. Menyetel opsi ini ke False atau membiarkannya tanpa disetel akan membuat promosi untuk apl Chrome Webstore muncul di halaman tab baru</translation>
 <translation id="7332963785317884918">Kebijakan ini tidak lagi digunakan. <ph name="PRODUCT_OS_NAME" /> akan selalu menggunakan strategi pembersihan 'RemoveLRU'.
 
@@ -6643,6 +6687,7 @@
 <translation id="7974114691960514888">Kebijakan ini tidak lagi didukung. Mengaktifkan penggunaan STUN dan server relay saat menyambungkan ke klien jarak jauh. Jika setelan ini diaktifkan, maka komputer ini dapat menemukan dan terhubung ke komputer host jarak jauh bahkan jika dipisahkan oleh firewall. Jika setelan ini dinonaktifkan dan sambungan UDP keluar difilter oleh firewall, maka komputer ini hanya dapat terhubung ke komputer host dalam jaringan lokal.</translation>
 <translation id="7976157349247117979">Nama tujuan <ph name="PRODUCT_NAME" /></translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
+<translation id="7986473886676689183">Aktifkan pelaporan Android</translation>
 <translation id="7991022023019679916">Perhatikan bahwa kebijakan ini sudah tidak digunakan lagi dan akan dihapus di <ph name="PRODUCT_OS_NAME" /> versi 85. Sebagai gantinya, gunakan <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
 
           Menentukan durasi waktu tanpa masukan pengguna setelah layar dinonaktifkan saat menggunakan daya AC.
@@ -6811,6 +6856,7 @@
 <translation id="8164687848393015214">Jika kebijakan disetel ke Aktif, paket jaringan pemantauan (<ph name="HEARTBEATS_TERM" />) akan dikirim ke server pengelolaan untuk memantau status online, guna memungkinkan server mendeteksi apakah perangkat sedang offline.
 
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, paket tidak akan dikirim.</translation>
+<translation id="8169452762291746260">Nonaktifkan pemantauan kondisi perangkat</translation>
 <translation id="8171924760436219650">Mengalihkan tombol mouse utama ke tombol kanan pada layar login</translation>
 <translation id="8173864651667424191">Opsi Cetak sebagai gambar akan disetel sebagai default untuk pratinjau cetak dokumen PDF jika tersedia.</translation>
 <translation id="8176035528522326671">Memungkinkan pengguna perusahaan menjadi pengguna banyak profil primer saja (Perilaku default untuk pengguna yang dikelola perusahaan)</translation>
@@ -7072,6 +7118,7 @@
 
        Kebijakan ini akan dihapus dari <ph name="PRODUCT_NAME" /> versi 95.</translation>
 <translation id="8427466947904008809">Izinkan CRD mengeksekusi permintaan WebAuthn API yang di-proxy dari host jarak jauh.</translation>
+<translation id="8428635849021776523">Nonaktifkan pelaporan Android</translation>
 <translation id="8433186206711564395">Setelan jaringan</translation>
 <translation id="8433769814000220721">Mengaktifkan Konten yang Disarankan</translation>
 <translation id="843609873781525167">Jika kebijakan ditetapkan ke Benar (True), <ph name="PRODUCT_NAME" /> akan selalu memeriksa apakah browser merupakan default saat memulai dan, jika mungkin, mendaftarkan sendiri secara otomatis. Jika kebijakan ditetapkan ke Salah (False), <ph name="PRODUCT_NAME" /> akan berhenti memeriksa apakah browser tersebut merupakan default dan menonaktifkan kontrol pengguna untuk opsi ini.
@@ -7676,6 +7723,7 @@
 <translation id="9073405975862312795">Jika kebijakan disetel ke Aktif atau tidak disetel, perangkat yang terdaftar akan melaporkan jangka waktu pengguna aktif di perangkat.
 
       Jika kebijakan disetel ke Nonaktif, perangkat yang terdaftar tidak akan merekam atau melaporkan waktu aktivitas.</translation>
+<translation id="9076477053438828079">Selalu tampilkan nama dan foto pengguna</translation>
 <translation id="9077227880520270584">Timer login otomatis akun lokal perangkat</translation>
 <translation id="9079531125758468956">Nonaktifkan impor bookmark saat browser pertama kali dijalankan</translation>
 <translation id="9084985621503260744">Tentukan apakah aktivitas video memengaruhi pengelolaan daya</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index bb0bf81..fdce35f 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -1985,6 +1985,7 @@
 <translation id="3118552207903834734">デバイスのホスト名の設定をユーザーに許可する</translation>
 <translation id="3122082892722698079">安全でないコンテンツの例外の使用を管理する</translation>
 <translation id="3128072319047570212">keygen の設定</translation>
+<translation id="3131703464330936425">モバイルデータ ローミングを許可しない</translation>
 <translation id="3135820765957090754">この設定を有効にした場合、ユーザーは <ph name="PRODUCT_OS_NAME" /> デバイスと接続された Android スマートフォンとの間で Wi-Fi ネットワーク設定を同期できます。Wi-Fi ネットワーク設定を同期する前に、ユーザーは設定手順を完了して、この機能を明示的に有効にする必要があります。
 
       この設定を無効にした場合、ユーザーは Wi-Fi ネットワーク設定を同期できません。
@@ -2401,6 +2402,7 @@
 <translation id="35668690622495904">
           許可リストにないコンテキストで発生したという理由で呼び出しをブロックしない (その他の理由によりブロックされる可能性はあります)。</translation>
 <translation id="3568762199045490351">タイムアウトを 0 ミリ秒に設定した JavaScript setTimeout() に 1 ミリ秒のタイムアウトを含める。</translation>
+<translation id="3574450691573438824">デバイスのシステムログのアップロードを無効にする</translation>
 <translation id="3575011234198230041">HTTP 認証</translation>
 <translation id="3577251398714997599">煩わしい広告を含むサイトでの広告表示に関する設定</translation>
 <translation id="3577628175311752799">デフォルトのリファラー ポリシー「no-referrer-when-downgrade」を使用します。</translation>
@@ -2522,6 +2524,7 @@
       設定しなかった場合は、デフォルトの 3 時間間隔が適用されます。</translation>
 <translation id="3756011779061588474">デベロッパー モードをブロックする</translation>
 <translation id="3756516139200532906">管理対象ユーザーにデバイスのホスト名の設定を許可する</translation>
+<translation id="3756737071958233151">デバイスのシステムログのアップロードを有効にする</translation>
 <translation id="3758089716224084329"><ph name="PRODUCT_NAME" /> が使用するプロキシ サーバーを指定できます。この場合、ユーザーがプロキシ設定を変更することはできません。
 
       プロキシ サーバーを使用せず常に直接接続することを選択した場合、他の設定はすべて無視されます。
@@ -2567,6 +2570,7 @@
 
       注: <ph name="MS_AD_NAME" /> の管理対象デバイスの場合、このポリシーは <ph name="MACHINE_NAME_VARIABLE" /> から <ph name="MS_AD_NAME" /> のマシン名またはその部分文字列への展開をサポートします。たとえばマシン名が <ph name="MACHINE_NAME_EXAMPLE" /> の場合、<ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> は 6 文字目以降の 4 文字(<ph name="MACHINE_NAME_PART_EXAMPLE" />)に置き換えられます(先頭をゼロ文字目として数えます)。</translation>
 <translation id="377044054160169374">不正なコンテンツに対する処理の適用</translation>
+<translation id="3777833753656885744">ログイン画面とロック画面で認証フローを有効にする URL のリストを指定する</translation>
 <translation id="3778689139323007309">ローカルにインストール済みの CA 証明書によって署名された、確認済みのサーバー証明書に対して失効確認を行う</translation>
 <translation id="3780152581321609624">Kerberos SPN に非標準ポートを含める</translation>
 <translation id="378495749480642482">ユーザーがアクセスしたサイトで <ph name="WEBXR_API_NAME" /> を使用した没入的な拡張現実セッションの作成を許可するかどうかを設定します。
@@ -3997,6 +4001,7 @@
 
       このポリシーはチャンネルの切り替えには適用されません。</translation>
 <translation id="5519331583722582543">画面キーボードで手書き入力認識ツールを使用した入力を有効にするかどうかを示すブール値のフラグです。</translation>
+<translation id="5519619299971727565">Linux アプリの使用状況に関するレポートを無効にする</translation>
 <translation id="5521875416764302911">ユーザーに <ph name="PRODUCT_NAME" /> へのログインを許可しない</translation>
 <translation id="5526184558582921522">Quirks サーバーへのクエリの送信と、必要に応じたハードウェア固有の設定ファイルのダウンロードを許可する</translation>
 <translation id="5526701598901867718">すべて(安全ではありません)</translation>
@@ -4017,6 +4022,7 @@
 
       このポリシーが指定されていない場合、バリエーション シード URL は変更されません。</translation>
 <translation id="5561811616825571914">指定サイトに対し、ログイン画面でクライアント証明書を自動的に選択する</translation>
+<translation id="5563240289883266691">Linux アプリの使用状況に関するレポートを有効にする</translation>
 <translation id="5565178130821694365">2 日(48 時間)ごとにパスワードの入力を求める</translation>
 <translation id="5566210228171064229">PIN ありと PIN なしの印刷を両方許可します</translation>
 <translation id="5572971233886879856">サーバー プリンタについてのクエリを送信するプリント サーバーのサブセットを指定します。これは <ph name="DEVICE_EXTERNAL_PRINT_SERVERS_POLICY" /> ポリシーにのみ適用されます。
@@ -4543,6 +4549,7 @@
 <translation id="6155936611791017817">ログイン画面での大きいカーソルのデフォルト状態を設定する</translation>
 <translation id="6157537876488211233">プロキシ バイパス ルールのカンマ区切りリスト</translation>
 <translation id="6158324314836466367">エンタープライズ ウェブストア名(サポート終了)</translation>
+<translation id="6164441518097008843">ログインをリスト内のユーザーのみに制限する</translation>
 <translation id="6169768162756928771">GAIA ユーザー ID 管理の設定</translation>
 <translation id="6172896675583897796">このポリシーを有効に設定した場合、Google アシスタントは画面のコンテキストにアクセスし、そのデータをサーバーに送信できます。このポリシーを無効に設定した場合、Google アシスタントは画面のコンテキストにアクセスできません。
 
@@ -4608,6 +4615,19 @@
       このポリシーは、企業のセキュリティ ソフトウェアの設定がサンドボックス化と干渉する場合に、音声処理のサンドボックス化を無効にできるようにするためのものです。</translation>
 <translation id="624818583115864448">ポート 554(ブロックの解除は 2021 年 10 年 15 日まで可能)</translation>
 <translation id="6252773211180267325">ユーザーに対して <ph name="BOREALIS_NAME" /> の実行をブロックしない</translation>
+<translation id="6255671003289033162"><ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> を有効にする URL のリストを指定します。
+
+      このポリシーでは、パソコンから一連のシグナルを受け取る認証フローに含める URL を指定できます。
+
+      このポリシーを未設定のままにするか空白にした場合は、どのエンドポイントも、認証フローを開始したり、パソコンからシグナルを受け取ったりできません。
+
+      指定する URL は HTTPS スキームを使用したものでなければなりません(例: 「https://example.com」)。
+
+      注: ワイルドカード(<ph name="WILDCARD_VALUE" />)は使用可能です。
+
+      ChromeOS では、このポリシーはリモート認証に関連付けられ、証明書が自動的に生成されてデバイス管理サーバーにアップロードされます。
+
+      有効な <ph name="URL_LABEL" /> パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。</translation>
 <translation id="6258658183356534534">User-Agent Client Hints の GREASE 更新機能を管理します。</translation>
 <translation id="6261643884958898336">マシン識別情報に関するレポートを作成</translation>
 <translation id="6265892395051519509">センサーへのアクセスを許可するサイトを指定します</translation>
@@ -4652,6 +4672,7 @@
 <translation id="6282524907402492171"><ph name="CLOUD_PRINT_NAME" /> のサポート終了の警告を表示する</translation>
 <translation id="6282799760374509080">音声キャプチャを許可または拒否する</translation>
 <translation id="6284362063448764300">TLS 1.1</translation>
+<translation id="6287128640500683781">すべてのユーザーにログインを許可する</translation>
 <translation id="6287310684159482272">Cookie の設定</translation>
 <translation id="6299147100249359151">ポリシー スコープの検出を許可する。</translation>
 <translation id="6300871921951390976">このポリシーが True に設定されている場合、ユーザーにはデバイスのリリース チャンネルの変更のみが許可されます。このポリシーが False か未設定の場合、ユーザーはチャンネルを変更できません。
@@ -5378,6 +5399,7 @@
 <translation id="7007283257527015835">プロトコル ハンドラがデフォルトとして設定されている必要があるかどうかを示すブール値のフラグです。</translation>
 <translation id="7008308728445338159">DNS 傍受チェックを有効にする</translation>
 <translation id="7010006999849135962">リモート アクセスホストの PIN 入力なしの認証を有効にする</translation>
+<translation id="7016587686120059767">ゲストモードを無効にする</translation>
 <translation id="7016736684656067099">このポリシーを 1 に設定した場合、すべてのウェブサイトに対して画像の表示が許可されます。このポリシーを 2 に設定した場合、画像の表示は拒否されます。
 
       このポリシーを未設定のままにした場合、画像は許可されますが、ユーザーはこの設定を変更できます。</translation>
@@ -5385,6 +5407,7 @@
 
       このポリシーを無効に設定した場合、<ph name="PRODUCT_NAME" /> は、最後のタブであっても代替ブラウザへの切り替え後にタブを閉じます。その結果、<ph name="PRODUCT_NAME" /> が完全に終了します。</translation>
 <translation id="7019805045859631636">速い</translation>
+<translation id="7021590945154530517">デバイスの稼働状況の監視を有効にする</translation>
 <translation id="7025332601572838001">CCT の初回実行時の利用規約処理を設定します</translation>
 <translation id="7026351325994257733">Wi-Fi ネットワーク設定を <ph name="PRODUCT_OS_NAME" /> デバイスと接続された Android スマートフォンとの間で同期できるようにします。</translation>
 <translation id="7027057540229843762">ライトモードを使用する</translation>
@@ -5639,6 +5662,7 @@
       このポリシーを無効に設定するか未設定のままにした場合、KDC ポリシーはサポートされているプラットフォームで無視され、<ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> のみが適用されます。
 
       <ph name="MS_WIN_NAME" /> では、KDC ポリシーが常に適用されます。</translation>
+<translation id="7273785848231509306">ユーザー名と写真を表示しない</translation>
 <translation id="7274077256421167535">USB 電力共有を有効にする</translation>
 <translation id="7275334191706090484">管理対象のブックマーク</translation>
 <translation id="7275689301063927473">すべてのサイトに対してローカル フォントに関する権限をデフォルトで自動的に拒否する</translation>
@@ -5659,6 +5683,19 @@
 <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> の追加コマンド ライン パラメータ</translation>
 <translation id="7325801934761922681">サンドボックス化された iframe 内で外部プロトコルへの移動を Chrome がブロックしないようにする</translation>
 <translation id="7326394567531622570">このオプションは Wipe(値 2)と似ていますが、ログイン トークンを保持するように動作します(この場合、ユーザーの再ログインが不要になります)。</translation>
+<translation id="7328028920258952696">ログイン画面とロック画面で <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> を有効にする URL のリストを指定します。
+
+      このポリシーでは、パソコンから一連のシグナルを受け取る認証フローに含める URL を指定できます。
+
+      このポリシーを未設定のままにするか空白にした場合は、どのエンドポイントも、認証フローを開始したり、パソコンからシグナルを受け取ったりできません。
+
+      指定する URL は HTTPS スキームを使用したものでなければなりません(例: 「https://example.com」)。
+
+      注: ワイルドカード(<ph name="WILDCARD_VALUE" />)は使用可能です。
+
+      このポリシーは、ログイン画面とロック画面の認証フローにのみ影響します。セッション中の認証フローを変更するには、<ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" /> ポリシーを使用してください。
+
+      有効な <ph name="URL_LABEL" /> パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。</translation>
 <translation id="7331962793961469250">True に設定すると、Chrome ウェブストア アプリのプロモーションは新しいタブ ページに表示されません。このオプションが False または未設定の場合、Chrome ウェブストア アプリのプロモーションが新しいタブ ページに表示されます。</translation>
 <translation id="7332963785317884918">このポリシーはサポート終了となりました。今後、<ph name="PRODUCT_OS_NAME" /> では常に「RemoveLRU」クリーンアップ設定を使用します。
 
@@ -6223,6 +6260,7 @@
 <translation id="7974114691960514888">このポリシーは現在サポートされていません。リモート クライアントに接続するときの STUN とリレー サーバーの使用を有効にします。この設定が有効になっている場合は、間にファイアウォールがあるかどうかにかかわらず、このコンピュータがリモート ホスト コンピュータを検出して接続することができます。この設定が無効であり、かつ発信 UDP 接続がファイアウォールによってフィルタリングされている場合は、このコンピュータから接続できるのはローカル ネットワーク内のホスト コンピュータのみとなります。</translation>
 <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> のレシーバー名</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
+<translation id="7986473886676689183">Android のレポート機能を有効にする</translation>
 <translation id="7991022023019679916">このポリシーはサポートが終了しており、<ph name="PRODUCT_OS_NAME" /> バージョン 85 で削除されます。代わりに <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> を使用してください。
 
           AC 電源での使用中、ユーザー入力が行われなくなってから画面をオフにするまでの時間を指定します。
@@ -6379,6 +6417,7 @@
 <translation id="8164687848393015214">このポリシーを有効に設定すると、監視ネットワーク パケット(<ph name="HEARTBEATS_TERM" />)が管理サーバーに送信されてオンライン ステータスがモニタリングされ、デバイスがオフラインかどうかをサーバーが検出できるようになります。
 
       このポリシーを無効にするか、未設定のままにすると、パケットは送信されません。</translation>
+<translation id="8169452762291746260">デバイスの稼働状況の監視を無効にする</translation>
 <translation id="8171924760436219650">ログイン画面でマウスのメインボタンを右に切り替える</translation>
 <translation id="8173864651667424191">「画像として印刷する」オプションが使用可能な場合、「画像として印刷する」オプションは PDF ドキュメントの印刷プレビューでデフォルトで設定されます。</translation>
 <translation id="8176035528522326671">企業ユーザーがメインのマルチプロフィール ユーザーとしてのみ操作できるようにする(企業の管理対象ユーザーに対するデフォルトの動作)</translation>
@@ -6623,6 +6662,7 @@
 <translation id="8426231401662877819">画面を時計回りに 90 度回転</translation>
 <translation id="8426819027631706846"><ph name="JS_ALERT" />、<ph name="JS_CONFIRM" />、<ph name="JS_PROMPT" /> によってトリガーされた JavaScript モード ダイアログは、トリガーしたサブフレームの生成元がメインフレームの生成元とは異なる場合に <ph name="PRODUCT_NAME" /> でブロックされます(参照: https://www.chromestatus.com/feature/5148698084376576)。このポリシーは前述の変更を許可します。このポリシーが有効に設定されている、または未設定の場合、生成元が異なるサブフレームからトリガーされた JavaScript ダイアログはブロックされます。ポリシーが無効に設定されている場合、生成元が異なるサブフレームからトリガーされた JavaScript ダイアログはブロックされません。このポリシーは <ph name="PRODUCT_NAME" /> バージョン 95 で削除されます。</translation>
 <translation id="8427466947904008809">CRD にリモートホストからプロキシ送信される WebAuthn API リクエストの実行を許可する。</translation>
+<translation id="8428635849021776523">Android のレポート機能を無効にする</translation>
 <translation id="8433186206711564395">ネットワーク設定</translation>
 <translation id="8433769814000220721">おすすめのコンテンツを有効にする</translation>
 <translation id="843609873781525167">このポリシーを True に設定すると、<ph name="PRODUCT_NAME" /> で起動時にデフォルトのブラウザであるかが常に確認され、可能であれば自動的に登録されます。このポリシーを False に設定した場合、<ph name="PRODUCT_NAME" /> でデフォルトであるかどうかが確認されなくなり、このオプションに対するユーザー制御がオフになります。このポリシーを未設定のままにした場合は、<ph name="PRODUCT_NAME" /> でデフォルトに指定するかどうかをユーザーが制御でき、またデフォルトにしない場合はユーザー通知が表示されるかどうかを制御できます。注: <ph name="MS_WIN_NAME" /> 管理者の場合は、Windows 7 が稼働するマシンについてのみ、この設定をオンにできます。それ以後のバージョンについては、<ph name="PRODUCT_NAME" /> を <ph name="HTTPS_PROTOCOL" /> プロトコルと <ph name="HTTP_PROTOCOL" /> プロトコル(必要に応じて <ph name="FTP_PROTOCOL" /> プロトコルとその他のファイル形式)のハンドラにする、「デフォルトのアプリケーション関連付け」ファイルをデプロイする必要があります。Chrome ヘルプ(https://support.google.com/chrome?p=make_chrome_default_win)をご覧ください。</translation>
@@ -7218,6 +7258,7 @@
 <translation id="9073405975862312795">このポリシーを有効にするか、未設定のままにすると、登録済みのデバイスはユーザーがデバイス上でアクティブになっていた期間を報告します。
 
       このポリシーを無効に設定すると、登録済みのデバイスはアクティブな期間を記録または報告しません。</translation>
+<translation id="9076477053438828079">ユーザー名と写真を常に表示する</translation>
 <translation id="9077227880520270584">デバイスのローカル アカウントの自動ログイン タイマー</translation>
 <translation id="9079531125758468956">初回実行時のブックマークのインポートを無効にする</translation>
 <translation id="9084985621503260744">動画操作を電源管理に関連付けるかどうかを指定する</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 2a062af..db251a90 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -51,6 +51,13 @@
 
       정책을 설정하지 않으면 기본적으로 관리 대상 사용자에게는 기능이 허용되지 않고 다른 사용자에게는 허용됩니다.</translation>
 <translation id="1035860095382451169">보안 연결일 경우 검색주소창에 자물쇠 아이콘 표시</translation>
+<translation id="1040125341954178855">이 기능은 Chrome 100에서 삭제되었습니다.
+
+      정책을 사용 설정하면 다른 기기에서 사용자가 이전에 설치한 앱에 관한 추천이 표시됩니다. 검색어를 입력하지 않을 경우 런처에서 로컬 앱 추천 아래에 이러한 추천이 표시됩니다.
+
+      정책을 사용 중지하거나 설정하지 않으면 이러한 추천이 표시되지 않습니다.
+
+      이 정책이 설정된 경우 사용자가 변경할 수 없습니다.</translation>
 <translation id="1040446814317236570">PAC URL 제거 사용(https://용)</translation>
 <translation id="1041719059374171202">정책을 설정하면 자바스크립트 실행이 불가능한 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다.
 
@@ -2140,6 +2147,7 @@
 <translation id="3118552207903834734">사용자가 기기 호스트 이름을 구성하도록 허용</translation>
 <translation id="3122082892722698079">안전하지 않은 콘텐츠 예외 사용 제어</translation>
 <translation id="3128072319047570212">키 생성기 설정</translation>
+<translation id="3131703464330936425">모바일 데이터 로밍 허용 안함</translation>
 <translation id="3135820765957090754">설정을 사용하면 사용자가 <ph name="PRODUCT_OS_NAME" /> 기기 및 연결된 Android 휴대전화 간에 Wi-Fi 네트워크 구성을 동기화할 수 있습니다. Wi-Fi 네트워크 구성을 동기화하려면 사용자가 설정 절차를 완료하여 이 기능을 명시적으로 선택해야 합니다.
 
       설정을 사용 중지하면 사용자가 Wi-Fi 네트워크 구성을 동기화할 수 없습니다.
@@ -2573,6 +2581,7 @@
           허용 목록에 없는 컨텍스트에서 발생한 계정의 통화가
 거부되지 않습니다. 다른 이유로 통화가 거절될 수는 있습니다.</translation>
 <translation id="3568762199045490351">시간 초과가 0ms인 자바스크립트 setTimeout()이 1ms로 클램프됩니다.</translation>
+<translation id="3574450691573438824">기기 시스템 로그 업로드 사용 안함</translation>
 <translation id="3575011234198230041">HTTP 인증</translation>
 <translation id="3577251398714997599">방해가 되는 광고가 포함된 사이트의 광고 설정</translation>
 <translation id="3577628175311752799">no-referrer-when-downgrade인 기본 리퍼러 정책을 사용합니다.</translation>
@@ -2694,6 +2703,7 @@
       정책이 설정되지 않으면 기본 간격인 3시간이 적용됩니다.</translation>
 <translation id="3756011779061588474">개발자 모드 차단</translation>
 <translation id="3756516139200532906">관리 대상 사용자가 기기 호스트 이름을 구성하도록 허용</translation>
+<translation id="3756737071958233151">기기 시스템 로그 업로드 사용</translation>
 <translation id="3758089716224084329"><ph name="PRODUCT_NAME" />에서사용하는 프록시 서버를 지정하도록 하며 사용자가 프록시 설정을 변경하지 못하게 합니다.
 
       프록시 서버를 사용하지 않고 항상 직접 연결하도록 선택하면 다른 옵션은 모두 무시됩니다.
@@ -2739,6 +2749,7 @@
 
       참고: <ph name="MS_AD_NAME" /> 관리 대상 기기에서는 이 정책을 통해 <ph name="MACHINE_NAME_VARIABLE" />을(를) <ph name="MS_AD_NAME" /> 컴퓨터 이름 또는 관련 하위 문자열로 확장할 수 있습니다. 예를 들어, 컴퓨터 이름이 <ph name="MACHINE_NAME_EXAMPLE" />인 경우 <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />이(가) 6번째 글자 후의 글자 4개로 대체되어 <ph name="MACHINE_NAME_PART_EXAMPLE" />이(가) 됩니다. 글자 위치는 0을 기준으로 합니다.</translation>
 <translation id="377044054160169374">악의적 사용자 환경 개입 시행</translation>
+<translation id="3777833753656885744">로그인 화면 및 잠금 화면의 URL 목록에 증명 흐름 사용 설정</translation>
 <translation id="3778689139323007309">로컬에 설치된 CA 인증서로 서명했으며 유효성이 검증된 서버 인증서 폐기 확인 검사 실행</translation>
 <translation id="3780152581321609624">Kerberos SPN에 비표준 포트 포함</translation>
 <translation id="378495749480642482">사용자가 탐색하는 사이트에서 <ph name="WEBXR_API_NAME" />를 사용하여 몰입형 증강 현실 세션을 생성할 수 있는지 선택합니다.
@@ -4277,6 +4288,7 @@
 
       이 정책은 채널 전환에 적용되지 않습니다.</translation>
 <translation id="5519331583722582543">터치 키보드가 필기 인식을 통한 입력을 지원할 수 있는지 나타내는 부울 플래그입니다.</translation>
+<translation id="5519619299971727565">Linux 앱 사용량 보고 사용 중지</translation>
 <translation id="5521875416764302911">사용자가 <ph name="PRODUCT_NAME" />에 로그인하지 못하도록 차단</translation>
 <translation id="5526184558582921522">Quirks 서버로 쿼리 및 잠재적인 하드웨어별 구성 파일 다운로드 허용</translation>
 <translation id="5526701598901867718">모두(안전하지 않음)</translation>
@@ -4297,6 +4309,7 @@
 
       지정하지 않으면 버전 시드 URL을 수정할 수 없습니다.</translation>
 <translation id="5561811616825571914">로그인 화면에서 이 사이트의 클라이언트 인증서를 자동으로 선택합니다.</translation>
+<translation id="5563240289883266691">Linux 앱 사용량 보고 사용 설정</translation>
 <translation id="5565178130821694365">2일(48시간)마다 비밀번호를 입력해야 합니다.</translation>
 <translation id="5566210228171064229">PIN이 있을 때 또는 없을 때 모두 인쇄를 허용합니다.</translation>
 <translation id="5572971233886879856">서버 프린터로 요청될 인쇄 서버의 하위 집합을 지정합니다. 이는 <ph name="DEVICE_EXTERNAL_PRINT_SERVERS_POLICY" /> 정책에만 적용됩니다.
@@ -4840,6 +4853,7 @@
 <translation id="6155936611791017817">로그인 화면에서 큰 커서의 기본 상태를 설정</translation>
 <translation id="6157537876488211233">쉼표로 구분된 프록시 우회 규칙 목록</translation>
 <translation id="6158324314836466367">엔터프라이즈 웹 스토어 이름(지원 중단됨)</translation>
+<translation id="6164441518097008843">목록에 있는 사용자로 로그인 제한</translation>
 <translation id="6169768162756928771">GAIA 사용자 ID 관리 설정</translation>
 <translation id="6172896675583897796">정책을 '사용'으로 설정하면 Google 어시스턴트가 화면 컨텍스트에 액세스하고 이 데이터를 서버에 전송할 수 있습니다. 정책을 '사용 안함'으로 설정하면 Google 어시스턴트가 화면 컨텍스트에 액세스할 수 없습니다.
 
@@ -4911,6 +4925,19 @@
       이 정책은 기업에서 샌드박스를 방해하는 보안 소프트웨어 설정을 사용하는 경우 필요에 따라 오디오 샌드박스를 사용 중지할 수 있도록 만들어졌습니다.</translation>
 <translation id="624818583115864448">포트 554(2021년 10월 15일까지 차단 해제될 수 있음)</translation>
 <translation id="6252773211180267325">사용자가 <ph name="BOREALIS_NAME" />를 실행하는 것을 차단하지 않음</translation>
+<translation id="6255671003289033162">URL 목록에 대한 <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" />을(를) 사용 설정합니다.
+
+      정책을 설정하면 시스템에서 여러 신호를 가져오기 위한 증명 흐름의 일부로서 어떤 URL을 허용할지 지정할 수 있습니다.
+
+      정책을 설정하지 않거나 비워두면 어떤 엔드포인트도 증명 흐름을 시작할 수 없고 시스템에서 신호를 수신할 수 없게 됩니다.
+
+      URL에는 HTTPS 스킴(예: 'https://example.com')이 있어야 합니다.
+
+      참고: <ph name="WILDCARD_VALUE" /> 와일드 카드가 허용됩니다.
+
+      Chrome OS의 경우 이 정책은 원격 증명과 관련되어 있으며, 원격 증명에서는 인증서가 자동으로 생성되어 기기 관리 서버에 업로드됩니다.
+
+      유효한 <ph name="URL_LABEL" /> 패턴에 관해 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요.</translation>
 <translation id="6258658183356534534">User-Agent Client Hints GREASE 업데이트 기능을 제어합니다.</translation>
 <translation id="6261643884958898336">기기 식별 정보 보고</translation>
 <translation id="6265892395051519509">이 사이트에서 센서에 액세스하도록 허용</translation>
@@ -4955,6 +4982,7 @@
 <translation id="6282524907402492171"><ph name="CLOUD_PRINT_NAME" /> 지원 중단 경고 표시</translation>
 <translation id="6282799760374509080">오디오 캡처 허용 또는 거부</translation>
 <translation id="6284362063448764300">TLS 1.1</translation>
+<translation id="6287128640500683781">모든 사용자의 로그인 허용</translation>
 <translation id="6287310684159482272">쿠키 설정</translation>
 <translation id="6299147100249359151">정책 범위 감지 허용</translation>
 <translation id="6300871921951390976">정책을 True로 설정하면 사용자가 기기의 출시 채널만 변경할 수 있습니다. 정책을 False로 설정하거나 설정하지 않으면 사용자가 채널을 변경할 수 없습니다.
@@ -5736,6 +5764,7 @@
 <translation id="7007283257527015835">프로토콜 핸들러가 기본값으로 설정되어야 하는지 나타내는 부울 플래그입니다.</translation>
 <translation id="7008308728445338159">DNS 가로채기 검사 사용 설정됨</translation>
 <translation id="7010006999849135962">원격 액세스 호스트에서 PIN을 사용하지 않는 인증을 사용합니다.</translation>
+<translation id="7016587686120059767">게스트 모드 사용 안함</translation>
 <translation id="7016736684656067099">정책을 1로 설정하면 모든 웹사이트에서 이미지 표시를 허용합니다. 정책을 2로 설정하면 이미지 표시를 거부합니다.
 
       설정하지 않으면 이미지를 허용하지만 사용자가 이 설정을 변경할 수 있습니다.</translation>
@@ -5743,6 +5772,7 @@
 
       정책을 사용 안함으로 설정하면 대체 브라우저로 전환한 후 <ph name="PRODUCT_NAME" />에서 마지막 탭일지라도 모두 닫습니다. 따라서 <ph name="PRODUCT_NAME" />이 완전히 종료됩니다.</translation>
 <translation id="7019805045859631636">Fast</translation>
+<translation id="7021590945154530517">기기 상태 모니터링 사용</translation>
 <translation id="7025332601572838001">CCT 첫 실행 시 서비스 약관 동작 구성</translation>
 <translation id="7026351325994257733"><ph name="PRODUCT_OS_NAME" /> 기기 및 연결된 Android 휴대전화 전체에서 Wi-Fi 네트워크 구성을 동기화하도록 허용합니다.</translation>
 <translation id="7027057540229843762">밝은 테마 사용</translation>
@@ -6006,6 +6036,7 @@
       정책을 사용 안함으로 설정하거나 설정하지 않으면 지원되는 플랫폼에서 KDC 정책이 무시되고 <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> 정책만 인정됩니다.
 
       <ph name="MS_WIN_NAME" />에서는 KDC 정책이 항상 인정됩니다.</translation>
+<translation id="7273785848231509306">사용자 이름 및 사진 표시 안함</translation>
 <translation id="7274077256421167535">USB 전력 공유 사용</translation>
 <translation id="7275334191706090484">관리 북마크</translation>
 <translation id="7275689301063927473">기본적으로 모든 사이트에서 로컬 글꼴 권한 거부</translation>
@@ -6026,6 +6057,19 @@
 <translation id="7323896582714668701"><ph name="PRODUCT_NAME" />의 추가 명령줄 매개변수</translation>
 <translation id="7325801934761922681">Chrome이 샌드박스 처리된 iframe 내부에서 외부 프로토콜로 이동을 차단하지 못하도록 방지</translation>
 <translation id="7326394567531622570">완전 삭제(값 2)와 유사하지만, 사용자가 다시 로그인할 필요가 없도록 로그인 토큰을 저장합니다.</translation>
+<translation id="7328028920258952696">로그인 화면 및 잠금 화면의 URL 목록에 <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" />을(를) 사용 설정합니다.
+
+      정책을 설정하면 시스템에서 여러 신호를 가져오기 위한 증명 흐름의 일부로서 어떤 URL을 허용할지 지정할 수 있습니다.
+
+      정책을 설정하지 않거나 비워두면 어떤 엔드포인트도 증명 흐름을 시작할 수 없고 시스템에서 신호를 수신할 수 없게 됩니다.
+
+      URL에는 HTTPS 스킴(예: 'https://example.com')이 있어야 합니다.
+
+      참고: <ph name="WILDCARD_VALUE" /> 와일드 카드가 허용됩니다.
+
+      이 정책은 로그인 화면 및 잠금 화면의 증명 흐름에만 영향을 미칩니다. 세션 내 증명 흐름을 변경하려면 <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" /> 정책을 사용하세요.
+
+      유효한 <ph name="URL_LABEL" /> 패턴에 관해 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요.</translation>
 <translation id="7331962793961469250">True로 설정하면 Chrome 웹 스토어의 앱 홍보가 새 탭 페이지에 표시되지 않습니다.
 
       이 옵션을 False로 설정하거나 설정하지 않으면 Chrome 웹 스토어의 앱 홍보가 새 탭 페이지에 표시됩니다.</translation>
@@ -6630,6 +6674,7 @@
           이 설정을 사용 중지하고 발신 UDP 연결이 방화벽에 의해 필터링되는 경우 이 컴퓨터는 로컬 네트워크 내에 있는 호스트 컴퓨터에만 연결할 수 있습니다.</translation>
 <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> 전송 대상의 이름</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
+<translation id="7986473886676689183">Android 보고서 사용 설정</translation>
 <translation id="7991022023019679916">이 정책은 지원이 중단되었으며 <ph name="PRODUCT_OS_NAME" /> 버전 85에서 삭제될 예정입니다. 대신 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> 정책을 사용하세요.
 
           AC 전원으로 실행할 때 사용자 입력이 없어서 화면이 꺼지기까지 걸리는 시간을 지정합니다.
@@ -6798,6 +6843,7 @@
 <translation id="8164687848393015214">정책을 사용 설정하면 관리 서버에 모니터링 네트워크 패킷(<ph name="HEARTBEATS_TERM" />)을 전송하여 온라인 상태를 모니터링하고, 기기가 오프라인일 때 서버에서 감지할 수 있도록 합니다.
 
       정책을 사용 중지하거나 설정하지 않으면 패킷을 전송하지 않습니다.</translation>
+<translation id="8169452762291746260">기기 상태 모니터링 사용 중지</translation>
 <translation id="8171924760436219650">로그인 화면의 기본 마우스 버튼을 오른쪽 버튼으로 변경</translation>
 <translation id="8173864651667424191">이미지로 인쇄 옵션이 사용 가능한 경우 PDF 문서의 인쇄 미리보기로 기본적으로 설정됩니다.</translation>
 <translation id="8176035528522326671">기업 사용자에게 기본 멀티 프로필 사용자만 허용(기업에서 관리하는 사용자에 대한 기본 동작임)</translation>
@@ -7054,6 +7100,7 @@
 
        이 정책은 <ph name="PRODUCT_NAME" /> 버전 95에서 삭제됩니다.</translation>
 <translation id="8427466947904008809">CRD가 원격 호스트에서 프록시된 WebAuthn API 요청을 실행하도록 허용합니다.</translation>
+<translation id="8428635849021776523">Android 보고서 사용 중지</translation>
 <translation id="8433186206711564395">네트워크 설정</translation>
 <translation id="8433769814000220721">추천 콘텐츠 사용 설정</translation>
 <translation id="843609873781525167">정책을 True로 설정하면 <ph name="PRODUCT_NAME" />에서 시작 시 항상 기본 브라우저인지 확인하며 가능한 경우 자동으로 기본 브라우저로 등록합니다. 정책을 False로 설정하면 <ph name="PRODUCT_NAME" />에서 기본 브라우저인지 확인하지 않으며 사용자가 이 옵션을 사용 중지할 수 없습니다.
@@ -7664,6 +7711,7 @@
 <translation id="9073405975862312795">정책을 사용 설정하거나 설정하지 않으면 등록된 기기는 사용자가 기기에서 활성 상태인 기간을 보고합니다.
 
       정책을 사용 중지하면 등록된 기기에서 활동 시간을 기록하거나 보고하지 않습니다.</translation>
+<translation id="9076477053438828079">사용자 이름 및 사진 항상 표시</translation>
 <translation id="9077227880520270584">기기 로컬 계정 자동 로그인 타이머</translation>
 <translation id="9079531125758468956">처음 실행 시 북마크 가져오기 사용 중지</translation>
 <translation id="9084985621503260744">동영상 활동이 전원 관리에 영향을 미치는지 여부 지정</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 17c05ed..85a3726 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -1090,6 +1090,7 @@
 <translation id="2058055310819710697">Ontwikkelaarsmodus voor geïsoleerde apps aanzetten</translation>
 <translation id="2061123930713023976">Opnamen van netwerkpakketten voor fouten opsporen toestaan</translation>
 <translation id="2061810934846663491">De vereiste domeinnamen configureren voor hosts voor externe toegang</translation>
+<translation id="2062632109797189011">De beëindigde API window.webkitStorageInfo opnieuw aanzetten</translation>
 <translation id="2069350366303315077">Als je dit beleid toepast, dwingt <ph name="PRODUCT_NAME" /> gastsessies af en wordt voorkomen dat gebruikers inloggen bij profielen. Gastlogins zijn <ph name="PRODUCT_NAME" />-profielen waarbij alle vensters in de incognitomodus zijn.
 
       Als je het beleid niet toepast, niet instelt of de gastmodus voor de browser uitzet (via <ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" />), is het gebruik van nieuwe en bestaande profielen toegestaan.</translation>
@@ -1855,6 +1856,7 @@
 
       Als je het beleid niet toepast of niet instelt, rapporteren ingeschreven apparaten geen Android-statusinformatie.</translation>
 <translation id="288923520817177650">Toestaan dat <ph name="WEBXR_AR_SESSION_ENUM_VALUE" />-sessies van <ph name="WEBXR_API_NAME_SHORT" /> worden gemaakt</translation>
+<translation id="2889842394011108075">window.webkitStorageInfo wordt beschikbaar.</translation>
 <translation id="2890645751406497668">Automatisch rechten verlenen aan deze sites om verbinding te maken met USB-apparaten met de opgegeven leveranciers- en product-ID's.</translation>
 <translation id="2891049933730408118">Als je het beleid instelt, wordt gespecificeerd voor welke herkomsten alle HTTP-verificatieschema's worden toegestaan die <ph name="PRODUCT_NAME" /> ondersteunt, ongeacht het beleid <ph name="AUTH_SCHEMES_POLICY_NAME" />.
 
@@ -3494,6 +3496,7 @@
 <translation id="4700190441681139987">Geen sites toegang geven tot sensoren</translation>
 <translation id="4703402283970867140">Slim dimmodel aanzetten, zodat het langer duurt tot het scherm wordt gedimd</translation>
 <translation id="4704958130749494760">Automatisch toestemming aan sites geven om verbinding te maken met seriële USB-apparaten.</translation>
+<translation id="471360812659157054">window.webkitStorageInfo is niet beschikbaar.</translation>
 <translation id="4722122254122249791">Site-isolatie voor opgegeven oorsprongen aanzetten</translation>
 <translation id="4723829699367336876">Firewallpassage vanaf client voor externe toegang aanzetten</translation>
 <translation id="4725528134735324213">Android Backup Service aanzetten</translation>
@@ -6664,6 +6667,11 @@
 <translation id="8091982561085048989">Booleaanse markering die aangeeft of IPP Everywhere moet worden gebruikt om de printer in te stellen. Deze markering wordt ondersteund in versie 76 en hoger van <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="8099880303030573137">Inactieve vertraging wanneer op de batterij wordt gewerkt</translation>
 <translation id="8101381354936029836">Beleid van atomische groep:</translation>
+<translation id="8102504778644322990">Vanaf M106 wordt de niet-standaard API window.webkitStorageInfo verwijderd.
+      Met dit beleid wordt de API opnieuw aangezet tot M107.
+      Als je dit beleid toepast, is de API window.webkitStorageInfo beschikbaar.
+      Als je dit beleid niet toepast of niet instelt, is de API window.webkitStorageInfo niet beschikbaar.
+      </translation>
 <translation id="8102913158860568230">Standaardinstelling voor mediastreams</translation>
 <translation id="8104962233214241919">Clientcertificaten automatisch selecteren voor deze sites</translation>
 <translation id="8114382167597081590">'Beperkte modus' niet afdwingen op YouTube</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 3ae0a61..899c9a06 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -51,6 +51,13 @@
 
       Politika ayarlanmadan bırakılırsa bu özellik, varsayılan olarak yönetilen kullanıcılar için devre dışı bırakılır, diğer kullanıcılar için etkinleştirilir.</translation>
 <translation id="1035860095382451169">Güvenli bağlantılar için çok amaçlı adres çubuğundaki kilit simgesini etkinleştirin</translation>
+<translation id="1040125341954178855">Bu özellik Chrome 100 sürümünde kaldırılmıştır.
+
+      Bu politika, Etkin değerine ayarlanırsa kullanıcı tarafından daha önce diğer cihazlara yüklenen uygulamalar için öneriler verilir. Hiçbir arama metni girilmediyse bu öneriler yerel uygulama önerilerinden sonra başlatıcıda görünür.
+
+      Bu politika, Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa bu öneriler görünmez.
+
+      Bu politika ayarlanırsa kullanıcılar değiştiremez.</translation>
 <translation id="1040446814317236570">PAC URL ayırmayı etkinleştir (https:// için)</translation>
 <translation id="1041719059374171202">Politikayı ayarlamak, JavaScript çalıştıramayan siteleri belirten URL kalıpları için bir liste yapmanıza olanak tanır.
 
@@ -1097,6 +1104,7 @@
 <translation id="2058055310819710697">Erişime kapalı uygulamalar için geliştirici modunu etkinleştir</translation>
 <translation id="2061123930713023976">Ağ paketi yakalama işlemlerinde hata ayıklamaya izin ver</translation>
 <translation id="2061810934846663491">Uzaktan erişim ana makineleri için gereken alan adlarını yapılandır</translation>
+<translation id="2062632109797189011">Kullanımdan kaldırılan window.webkitStorageInfo API'sini yeniden etkinleştir</translation>
 <translation id="2069350366303315077">Politika, Etkin değerine ayarlanırsa <ph name="PRODUCT_NAME" />, misafir oturumunu zorunlu kılıp profil ile oturum açma işlemlerini engeller. Misafir oturumları, tüm pencerelerin gizli modda olduğu <ph name="PRODUCT_NAME" /> profilleridir.
 
       Politika, Devre Dışı değerine ayarlanır, ayarlanmadan bırakılır veya tarayıcı Misafir Modu devre dışı bırakılırsa (<ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" /> politikasıyla) yeni ve mevcut profiller kullanılabilir.</translation>
@@ -1864,6 +1872,7 @@
 
       Politika Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa kayıtlı cihazlar Android durum bilgilerini rapor etmez.</translation>
 <translation id="288923520817177650"><ph name="WEBXR_API_NAME_SHORT" /> API'nin <ph name="WEBXR_AR_SESSION_ENUM_VALUE" /> oturumlarına izin ver</translation>
+<translation id="2889842394011108075">window.webkitStorageInfo kullanılabilir.</translation>
 <translation id="2890645751406497668">Bu sitelere, sağlanan tedarikçi ve ürün kimlikleriyle otomatik olarak USB cihazlarına bağlanma izni verir.</translation>
 <translation id="2891049933730408118">Politika ayarlandığında <ph name="AUTH_SCHEMES_POLICY_NAME" /> politikasından bağımsız olarak hangi kaynaklar için <ph name="PRODUCT_NAME" /> tarafından desteklenen tüm HTTP kimlik doğrulama şemalarına izin verileceğini belirtir.
 
@@ -3518,6 +3527,7 @@
 <translation id="4700190441681139987">Hiçbir sitenin sensörlere erişmesine izin verme</translation>
 <translation id="4703402283970867140">Ekranın karartma süresini uzatmak için akıllı karartma modelini etkinleştir</translation>
 <translation id="4704958130749494760">Sitelere, USB seri cihazlara bağlanmak için otomatik olarak izin ver.</translation>
+<translation id="471360812659157054">window.webkitStorageInfo kullanılamaz.</translation>
 <translation id="4722122254122249791">Site İzolasyonu'nu belirtilen kaynaklar için etkinleştirme</translation>
 <translation id="4723829699367336876">Uzaktan erişim istemcisinden güvenlik duvarı geçişini etkinleştir</translation>
 <translation id="4725528134735324213">Android Backup Service'ı etkinleştir</translation>
@@ -6681,6 +6691,11 @@
 <translation id="8091982561085048989">Yazıcıyı kurmak için IPP Everywhere'in kullanılıp kullanılmayacağını belirten boole flag'i. Bu işaret, <ph name="PRODUCT_OS_NAME" /> sürüm 76 ve sonrasındaki sürümlerde desteklenir.</translation>
 <translation id="8099880303030573137">Pil gücüyle çalışırken boşta kalma gecikmesi</translation>
 <translation id="8101381354936029836">Politika atom grubu:</translation>
+<translation id="8102504778644322990">Standart olmayan window.webkitStorageInfo API'si, M106 sürümünden itibaren kaldırılacaktır.
+      Bu politika, API'yi M107'ye kadar yeniden etkinleştirir.
+      Bu politika, Etkin değerine ayarlanırsa window.webkitStorageInfo API'si kullanılabilir.
+      Bu politika, Devre Dışı değerine ayarlanırsa veya ayarlanmadan bırakılırsa window.webkitStorageInfo API'si kullanılamaz.
+      </translation>
 <translation id="8102913158860568230">Varsayılan medya akışı ayarı</translation>
 <translation id="8104962233214241919">Bu siteler için istemci sertifikalarını otomatik olarak seç</translation>
 <translation id="8114382167597081590">YouTube'da Kısıtlı Mod'u zorunlu kılma</translation>
diff --git a/components/security_interstitials/OWNERS b/components/security_interstitials/OWNERS
index d77e8d2..9e46f98 100644
--- a/components/security_interstitials/OWNERS
+++ b/components/security_interstitials/OWNERS
@@ -2,7 +2,6 @@
 cthomp@chromium.org
 drubery@chromium.org
 estark@chromium.org
-felt@chromium.org
 mattm@chromium.org
 meacer@chromium.org
 nparker@chromium.org
diff --git a/components/signin/internal/identity_manager/account_capabilities_constants.cc b/components/signin/internal/identity_manager/account_capabilities_constants.cc
index 43d9cfa1a..47ca9242 100644
--- a/components/signin/internal/identity_manager/account_capabilities_constants.cc
+++ b/components/signin/internal/identity_manager/account_capabilities_constants.cc
@@ -8,6 +8,3 @@
   const char cpp_label[] = name;
 #include "components/signin/internal/identity_manager/account_capabilities_list.h"
 #undef ACCOUNT_CAPABILITY
-
-const char kIsAllowedForMachineLearningCapabilityName[] =
-    "accountcapabilities/g42tslldmfya";
diff --git a/components/signin/internal/identity_manager/account_capabilities_constants.h b/components/signin/internal/identity_manager/account_capabilities_constants.h
index ba8eae5..e94f33a0 100644
--- a/components/signin/internal/identity_manager/account_capabilities_constants.h
+++ b/components/signin/internal/identity_manager/account_capabilities_constants.h
@@ -10,8 +10,4 @@
 #include "components/signin/internal/identity_manager/account_capabilities_list.h"
 #undef ACCOUNT_CAPABILITY
 
-// TODO(https://crbug.com/1352081): move this capability to
-// account_capabilities_list.h once it's ready.
-extern const char kIsAllowedForMachineLearningCapabilityName[];
-
 #endif  // COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNT_CAPABILITIES_CONSTANTS_H_
diff --git a/components/signin/internal/identity_manager/account_capabilities_list.h b/components/signin/internal/identity_manager/account_capabilities_list.h
index ff3f8115..3b489d28 100644
--- a/components/signin/internal/identity_manager/account_capabilities_list.h
+++ b/components/signin/internal/identity_manager/account_capabilities_list.h
@@ -20,6 +20,10 @@
                    IS_SUBJECT_TO_PARENTAL_CONTROLS_CAPABILITY_NAME,
                    "accountcapabilities/guydolldmfya")
 
+ACCOUNT_CAPABILITY(kIsAllowedForMachineLearningCapabilityName,
+                   IS_ALLOWED_FOR_MACHINE_LEARNING_CAPABILITY_NAME,
+                   "accountcapabilities/g42tslldmfya")
+
 ACCOUNT_CAPABILITY(kCanOfferExtendedChromeSyncPromosCapabilityName,
                    CAN_OFFER_EXTENDED_CHROME_SYNC_PROMOS_CAPABILITY_NAME,
                    "accountcapabilities/gi2tklldmfya")
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java
index e9c115b1c..9a761fe 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java
@@ -80,6 +80,14 @@
     }
 
     /**
+     * @return isAllowedForMachineLearning capability value.
+     */
+    public @Tribool int isAllowedForMachineLearning() {
+        return getCapabilityByName(
+                AccountCapabilitiesConstants.IS_ALLOWED_FOR_MACHINE_LEARNING_CAPABILITY_NAME);
+    }
+
+    /**
      * @return canRunChromePrivacySandboxTrials capability value.
      */
     public @Tribool int canRunChromePrivacySandboxTrials() {
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
index 9b31d0f..c478f91 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
@@ -20,6 +20,8 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.components.signin.AccessTokenData;
 import org.chromium.components.signin.AccountManagerFacade;
+import org.chromium.components.signin.AccountManagerFacadeProvider;
+import org.chromium.components.signin.AccountUtils;
 import org.chromium.components.signin.AccountsChangeObserver;
 import org.chromium.components.signin.AuthException;
 import org.chromium.components.signin.base.AccountCapabilities;
@@ -41,7 +43,10 @@
      * a child account in {@link FakeAccountManagerFacade}.
      */
     private static final String CHILD_ACCOUNT_NAME_PREFIX = "child.";
-    public static final String NEW_ACCOUNT_EMAIL = "new.account@gmail.com";
+
+    /** AddAccountActivityStub intent arguments to set account name and result */
+    private static final String ADDED_ACCOUNT_NAME = "AddedAccountName";
+    private static final String ADD_ACCOUNT_RESULT = "AddAccountResult";
 
     /** An {@link Activity} stub to test add account flow. */
     public static final class AddAccountActivityStub extends Activity {
@@ -49,9 +54,14 @@
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             Intent data = new Intent();
-            // TODO(https://crbug.com/1352486) : Get the account name and result code from callsite.
-            data.putExtra(AccountManager.KEY_ACCOUNT_NAME, NEW_ACCOUNT_EMAIL);
-            setResult(RESULT_OK, data);
+            int result = getIntent().getIntExtra(ADD_ACCOUNT_RESULT, RESULT_CANCELED);
+            String addedAccountName = getIntent().getStringExtra(ADDED_ACCOUNT_NAME);
+            data.putExtra(AccountManager.KEY_ACCOUNT_NAME, addedAccountName);
+            if (result != RESULT_CANCELED && addedAccountName != null) {
+                ((FakeAccountManagerFacade) AccountManagerFacadeProvider.getInstance())
+                        .addAccount(AccountUtils.createAccountFromName(addedAccountName));
+            }
+            setResult(result, data);
             finish();
         }
     }
@@ -64,6 +74,7 @@
 
     /** Can be used to block {@link #getAccounts()} result. */
     private @Nullable Promise<List<Account>> mBlockedGetAccountsPromise;
+    private @Nullable Intent mAddAccountIntent;
 
     /**
      * Creates an object of FakeAccountManagerFacade.
@@ -137,9 +148,8 @@
 
     @Override
     public void createAddAccountIntent(Callback<Intent> callback) {
-        Intent addAccountIntent =
-                new Intent(ContextUtils.getApplicationContext(), AddAccountActivityStub.class);
-        callback.onResult(addAccountIntent);
+        callback.onResult(mAddAccountIntent);
+        mAddAccountIntent = null;
     }
 
     @Override
@@ -218,6 +228,19 @@
         }
     }
 
+    /**
+     * Sets the result for the next add account flow.
+     * @param result The activity result to return when the intent is launched
+     * @param newAccountName The account name to return when the intent is launched
+     */
+    public void setResultForNextAddAccountFlow(int result, @Nullable String newAccountName) {
+        assert mAddAccountIntent == null : "mAddAccountIntent is already set";
+        mAddAccountIntent =
+                new Intent(ContextUtils.getApplicationContext(), AddAccountActivityStub.class);
+        mAddAccountIntent.putExtra(ADD_ACCOUNT_RESULT, result);
+        mAddAccountIntent.putExtra(ADDED_ACCOUNT_NAME, newAccountName);
+    }
+
     @GuardedBy("mLock")
     private List<Account> getAccountsInternal() {
         List<Account> accounts = new ArrayList<>();
diff --git a/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java b/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java
index adb4f30..30b5890 100644
--- a/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java
+++ b/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java
@@ -50,6 +50,8 @@
                 return capabilities.canRunChromePrivacySandboxTrials();
             case AccountCapabilitiesConstants.IS_SUBJECT_TO_PARENTAL_CONTROLS_CAPABILITY_NAME:
                 return capabilities.isSubjectToParentalControls();
+            case AccountCapabilitiesConstants.IS_ALLOWED_FOR_MACHINE_LEARNING_CAPABILITY_NAME:
+                return capabilities.isAllowedForMachineLearning();
             case AccountCapabilitiesConstants.CAN_STOP_PARENTAL_SUPERVISION_CAPABILITY_NAME:
                 return capabilities.canStopParentalSupervision();
             case AccountCapabilitiesConstants.CAN_TOGGLE_AUTO_UPDATES_NAME:
@@ -93,7 +95,11 @@
                                         .CAN_OFFER_EXTENDED_CHROME_SYNC_PROMOS_CAPABILITY_NAME),
                 new ParameterSet()
                         .name("CanToggleAutoUpdates")
-                        .value(AccountCapabilitiesConstants.CAN_TOGGLE_AUTO_UPDATES_NAME));
+                        .value(AccountCapabilitiesConstants.CAN_TOGGLE_AUTO_UPDATES_NAME),
+                new ParameterSet()
+                        .name("IsAllowedForMachineLearning")
+                        .value(AccountCapabilitiesConstants
+                                        .IS_ALLOWED_FOR_MACHINE_LEARNING_CAPABILITY_NAME));
 
         // Returns String value added from Capabilities ParameterSet.
         static String getCapabilityName(ParameterSet parameterSet) {
diff --git a/components/ssl_errors/OWNERS b/components/ssl_errors/OWNERS
index f90a591..65db9c0 100644
--- a/components/ssl_errors/OWNERS
+++ b/components/ssl_errors/OWNERS
@@ -1,5 +1,4 @@
 agl@chromium.org
 carlosil@chromium.org
 estark@chromium.org
-felt@chromium.org
 meacer@chromium.org
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 2299f76..c1b72a5 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Ligging is geblokkeer</translation>
 <translation id="2042213636306070719">Laai 7</translation>
 <translation id="204357726431741734">Meld aan om wagwoorde te gebruik wat in jou Google-rekening gestoor is</translation>
+<translation id="2048261947532620704">Vertaal tans bladsy</translation>
 <translation id="205212645995975601">Braai en rooster</translation>
 <translation id="2053111141626950936">Bladsye in <ph name="LANGUAGE" /> sal nie vertaal word nie.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Wanneer hierdie kontrole aan is en die status aktief is, bepaal Chrome met watter groot groep mense, of "kohort", jou onlangse blaai-aktiwiteit die meeste ooreenstem. Adverteerders kan advertensies vir die groep kies en jou blaai-aktiwiteit word privaat op jou toestel gehou. Jou groep word elke dag opgedateer.}=1{Wanneer hierdie kontrole aan is en die status aktief is, bepaal Chrome met watter groot groep mense, of "kohort", jou onlangse blaai-aktiwiteit die meeste ooreenstem. Adverteerders kan advertensies vir die groep kies en jou blaai-aktiwiteit word privaat op jou toestel gehou. Jou groep word elke dag opgedateer.}other{Wanneer hierdie kontrole aan is en die status aktief is, bepaal Chrome met watter groot groep mense, of "kohort", jou onlangse blaai-aktiwiteit die meeste ooreenstem. Adverteerders kan advertensies vir die groep kies en jou blaai-aktiwiteit word privaat op jou toestel gehou. Jou groep word elke {NUM_DAYS} dae opgedateer.}}</translation>
@@ -645,6 +646,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om jou blaaigeskiedenis, webkoekies, kas en meer in Chrome-instellings uit te vee</translation>
 <translation id="2650446666397867134">Toegang tot die leêr is geweier</translation>
 <translation id="2653659639078652383">Dien in</translation>
+<translation id="2657637947725373811">{0,plural, =1{Dra vertroulike lêer oor?}other{Dra vertroulike lêers oor?}}</translation>
 <translation id="2660779039299703961">Geleentheid</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Geen}=1{1 wagwoord (vir <ph name="DOMAIN_LIST" />)}=2{2 wagwoorde (vir <ph name="DOMAIN_LIST" />)}other{# wagwoorde (vir <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Top</translation>
@@ -789,6 +791,7 @@
 <translation id="3108943290502734357">Middelste laai</translation>
 <translation id="3109728660330352905">Jy het nie magtiging om hierdie bladsy te bekyk nie.</translation>
 <translation id="3113284927548439113">Derde skof</translation>
+<translation id="3115363211799416195">{0,plural, =1{Laai vertroulike lêer af?}other{Laai vertroulike lêers af?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> vereis dat jy jou data rugsteun en hierdie <ph name="DEVICE_TYPE" /> terugstuur.</translation>
 <translation id="3116158981186517402">Lamineer</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -979,6 +982,7 @@
 <translation id="3615877443314183785">Voer 'n geldige vervaldatum in</translation>
 <translation id="36224234498066874">Vee blaaierdata uit …</translation>
 <translation id="362276910939193118">Wys hele geskiedenis</translation>
+<translation id="3628905806504633297">{0,plural, =1{Administrateursbeleid beveel aan dat jy nie hierdie lêer na <ph name="DESTINATION_NAME" /> toe oordra nie}other{Administrateursbeleid beveel aan dat jy nie hierdie lêers na <ph name="DESTINATION_NAME" /> toe oordra nie}}</translation>
 <translation id="3630155396527302611">As dit reeds gelys is as 'n program wat by die netwerk mag ingaan, probeer
       om dit van die lys af te verwyder en dit weer by te voeg.</translation>
 <translation id="3630699740441428070">Administrateurs van hierdie toestel het jou netwerkverbinding opgestel wat hulle dalk toelaat om jou netwerkverkeer te sien, insluitend watter webwerwe jy besoek.</translation>
@@ -1338,6 +1342,7 @@
 <translation id="4607603470419975064">Sien Chrome-wenke-knoppie; druk Enter om meer oor Chrome-kenmerke te wete te kom</translation>
 <translation id="4607608436550361748">Sien Chrome-wenke</translation>
 <translation id="4617273035598175554">Grafika- en animasiesagteware</translation>
+<translation id="4622292761762557753">Dra nogtans oor</translation>
 <translation id="4627675673814409125">Hierdie beleid kan nie op die Chrome-profielvlak gestel word nie en sal geïgnoreer word.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Kontantterugbetaling is gekoppel</translation>
@@ -1653,6 +1658,7 @@
 <translation id="540969355065856584">Hierdie bediener kon nie bewys dat dit <ph name="DOMAIN" /> is nie; sy sekuriteitsertifikaat is nie op die oomblik geldig nie. Dit kan veroorsaak word deur 'n wanopstelling of 'n aanvaller wat jou verbinding onderskep.</translation>
 <translation id="5412040515238827314">Ongeldige formaat: ’n lys patrone word verwag.</translation>
 <translation id="5412236728747081950">Hierdie werf kry jou belangstellings van Chrome af om vir jou relevanter advertensies te wys</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" />-<ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Stapelaar 4</translation>
 <translation id="5421136146218899937">Vee blaaidata uit …</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> wil vir jou kennisgewings stuur</translation>
@@ -2585,6 +2591,7 @@
 <translation id="8004582292198964060">Blaaier</translation>
 <translation id="8009225694047762179">Bestuur wagwoorde</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Hierdie kaart en sy faktureringadres sal gestoor word. Jy sal dit kan gebruik wanneer jy by <ph name="USER_EMAIL" />aangemeld is.}other{Hierdie kaarte en hul faktureringadresse sal gestoor word. Jy sal hulle kan gebruik wanneer jy by <ph name="USER_EMAIL" /> aangemeld is.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Aanvallers op hierdie werf kan jou dalk mislei om iets gevaarliks te doen soos om sagteware te installeer of jou persoonlike inligting (byvoorbeeld wagwoorde, foonnommers of kredietkaarte) bekend te maak.</translation>
 <translation id="8026334261755873520">Vee blaaidata uit</translation>
 <translation id="8027077570865220386">Laai 15</translation>
@@ -2636,6 +2643,7 @@
 <translation id="8148608574971654810">PDF-weergawe:</translation>
 <translation id="8149426793427495338">Jou rekenaar het gaan slaap.</translation>
 <translation id="8150722005171944719">Die lêer by <ph name="URL" /> is nie leesbaar nie. Dit is dalk verwyder, geskuif of lêertoestemmings kan dalk toegang verhinder.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Administrateursbeleid beveel aan dat jy nie hierdie lêer na <ph name="DESTINATION_NAME" /> toe aflaai nie}other{Administrateursbeleid beveel aan dat jy nie hierdie lêers na <ph name="DESTINATION_NAME" /> toe aflaai nie}}</translation>
 <translation id="8157295877370077682">Verlaat werf</translation>
 <translation id="8163866351304776260">Vierpons links</translation>
 <translation id="8175796834047840627">Chrome bied aan om jou kaarte in jou Google-rekening te stoor omdat jy aangemeld is. Jy kan hierdie gedrag in instellings verander.</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index efd4561..0eacf8600 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -912,6 +912,7 @@
 <translation id="3427342743765426898">إعادة الت&amp;حرير</translation>
 <translation id="342781501876943858">‏يُوصي Chromium بإعادة تحديد كلمة المرور في حال إعادة استخدامها في مواقع إلكترونية أخرى.</translation>
 <translation id="3428151540071562330">‏إنّ معرّف واحد أو أكثر من معرّفات الموارد المنتظمة (URI) لنموذج خادم DnsOverHttpsTemplates غير صالح وبالتالي لن يتم استخدامه.</translation>
+<translation id="3431216045099978607">اضغط على مفتاح |<ph name="ACCELERATOR" />| للخروج من وضع ملء الشاشة والاطّلاع على عملية التنزيل.</translation>
 <translation id="3431636764301398940">حفظ هذه البطاقة إلى هذا الجهاز</translation>
 <translation id="3432601291244612633">إغلاق الصفحة</translation>
 <translation id="3435738964857648380">أمن المعلومات</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 0bf9d17..598c561d 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -646,6 +646,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Tab düyməsi, sonra Enter düyməsinə basaraq Chrome ayarlarında baxış tarixçəsi, kukilər, keş və daha çoxunu təmizləyin</translation>
 <translation id="2650446666397867134">Fayla giriş rədd edildi</translation>
 <translation id="2653659639078652383">Təqdim edin</translation>
+<translation id="2657637947725373811">{0,plural, =1{Məxfi fayl ötürülsün?}other{Məxfi fayllar ötürülsün?}}</translation>
 <translation id="2660779039299703961">Tədbir</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Heç biri}=1{1 parol (<ph name="DOMAIN_LIST" /> üçün)}=2{2 parol (<ph name="DOMAIN_LIST" /> üçün)}other{# parol (<ph name="DOMAIN_LIST" /> üçün)}}</translation>
 <translation id="2666092431469916601">Yuxarı</translation>
@@ -790,6 +791,7 @@
 <translation id="3108943290502734357">Orta Qab</translation>
 <translation id="3109728660330352905">Bu səhifəyə baxmaq üçün icazəniz yoxdur.</translation>
 <translation id="3113284927548439113">Üçüncü növbə</translation>
+<translation id="3115363211799416195">{0,plural, =1{Məxfi fayl endirilsin?}other{Məxfi fayllar endirilsin?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> datanızı yedəkləmənizi və bu <ph name="DEVICE_TYPE" /> cihazını qaytarmanızı tələb edir.</translation>
 <translation id="3116158981186517402">Laminat vurun</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -976,6 +978,7 @@
 <translation id="3615877443314183785">Düzgün bitmə tarixi daxil edin</translation>
 <translation id="36224234498066874">Axtarış Datasını Silin...</translation>
 <translation id="362276910939193118">Tam tarixçəni göstərin</translation>
+<translation id="3628905806504633297">{0,plural, =1{Administrator siyasəti bu faylı <ph name="DESTINATION_NAME" /> bölməsinə ötürməyi tövsiyə etmir}other{Administrator siyasəti bu faylları <ph name="DESTINATION_NAME" /> bölməsinə ötürməyi tövsiyə etmir}}</translation>
 <translation id="3630155396527302611">Şəbəkəyə girmək icazəsi olan proqram olaraq siyahılanıb, onu siyahıdan silin və yenidən əlavə edin.</translation>
 <translation id="3630699740441428070">Bu cihazın administratorları onların şəbəkə trafiki, o cümlədən daxil olduğunuz veb saytlara baxmasına imkan verə biləcək şəbəkə bağlantısı konfiqurasiya edib.</translation>
 <translation id="3631244953324577188">Biometriklər</translation>
@@ -1334,6 +1337,7 @@
 <translation id="4607603470419975064">"Chrome ipucularına baxın" düyməsi, Enter düyməsinə basaraq Chrome funksiyaları haqqında ətraflı məlumat əldə edin</translation>
 <translation id="4607608436550361748">Chrome ipucularına baxın</translation>
 <translation id="4617273035598175554">Qrafika və animasiya proqramı</translation>
+<translation id="4622292761762557753">İstənilən halda ötürün</translation>
 <translation id="4627675673814409125">Bu siyasət Chrome profil səviyyəsində ayarlana bilməz və nəzərə alınmayacaq.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Keşbek əlaqələndirilib</translation>
@@ -1649,6 +1653,7 @@
 <translation id="540969355065856584">Bu server <ph name="DOMAIN" /> domenini təsdiqləyə bilmir; güvənlik sertifikatı hazırda etibarlı deyil. Buna yanlış konfiqurasiya və ya hücumçu tərəfindən bağlantının ələ keçirilməsi səbəb ola bilər.</translation>
 <translation id="5412040515238827314">Yanlış format: Model siyahısı gözlənilir.</translation>
 <translation id="5412236728747081950">Bu sayt sizə daha uyğun reklamlar göstərmək üçün Chrome'dan maraqlarınızı əldə edir</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Yığıcı 4</translation>
 <translation id="5421136146218899937">Baxış datasını silin...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> Sizə bildiriş göndərmək istəyir</translation>
@@ -2582,6 +2587,7 @@
 <translation id="8004582292198964060">Brauzer</translation>
 <translation id="8009225694047762179">Parolları İdarə edin</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Bu kart və faktura ünvanı yadda saxlanacaq. <ph name="USER_EMAIL" /> hesabına daxil olduqda bundan istifadə edə bilməyəcəksiniz.}other{Bu kartlar və faktura ünvanları yadda saxlanacaq. <ph name="USER_EMAIL" /> hesabına daxil olduqda bunlardan istifadə edə bilməyəcəksiniz.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Bu saytdakı hücumçular Sizi proqram təminatı endirmək və ya şəxsi məlumatları aşkarlamaq kimi təhlükəli işləri görməyə (məsələn, parollar, telefon nömrələri və ya kredit kartları) sövq edə bilər</translation>
 <translation id="8026334261755873520">Brauzinq datasını təmizləyin</translation>
 <translation id="8027077570865220386">Qab 15</translation>
@@ -2633,6 +2639,7 @@
 <translation id="8148608574971654810">PDF versiyası:</translation>
 <translation id="8149426793427495338">Kompüteriniz yatmağa getdi.</translation>
 <translation id="8150722005171944719"><ph name="URL" /> linkində olan fayl oxunmur. O, silinmiş, köçürülmüş ola bilər və ya fayl icazələri girişin qarşısını alıb.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Administrator siyasəti bu faylı <ph name="DESTINATION_NAME" /> bölməsinə endirməyi tövsiyə etmir}other{Administrator siyasəti bu faylları <ph name="DESTINATION_NAME" /> bölməsinə endirməyi tövsiyə etmir}}</translation>
 <translation id="8157295877370077682">Saytdan çıxın</translation>
 <translation id="8163866351304776260">Soldan dördlü deşik açın</translation>
 <translation id="8175796834047840627">Daxil olduğunuza görə Chrome kartları Google Hesabında yadda saxlamağı təklif edir. Bunu ayarlarda dəyişə bilərsiniz.</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 88cccbd..fc06113 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Узнавіць змену</translation>
 <translation id="342781501876943858">Chromium рэкамендуе скінуць ваш пароль, калі вы карысталіся ім на іншых сайтах.</translation>
 <translation id="3428151540071562330">Адзін або некалькі URI шаблонаў сервераў з палітыкі DnsOverHttpsTemplates няправільныя і выкарыстоўвацца не будуць.</translation>
+<translation id="3431216045099978607">Націсніце |<ph name="ACCELERATOR" />|, каб выйсці з поўнаэкраннага рэжыму і паглядзець спампоўку.</translation>
 <translation id="3431636764301398940">Захаваць гэту картку на гэту прыладу</translation>
 <translation id="3432601291244612633">Закрыць старонку</translation>
 <translation id="3435738964857648380">Бяспека</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 5ebc5fc..b5dc4140 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Възстановяване на редактирането</translation>
 <translation id="342781501876943858">Chromium препоръчва да зададете повторно паролата си, ако сте я използвали и на други сайтове.</translation>
 <translation id="3428151540071562330">Един или повече от URI адресите на шаблон за сървър в DnsOverHttpsTemplates са невалидни и няма да се използват.</translation>
+<translation id="3431216045099978607">Натиснете |<ph name="ACCELERATOR" />|, за да излезете от режима на цял екран и да видите изтеглянето.</translation>
 <translation id="3431636764301398940">Запазване на картата на това устройство</translation>
 <translation id="3432601291244612633">Затваряне на страницата</translation>
 <translation id="3435738964857648380">Сигурност</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index ea8019b..2081e2e 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Lokacija je blokirana</translation>
 <translation id="2042213636306070719">Ladica 7</translation>
 <translation id="204357726431741734">Prijavite se da koristite lozinke sačuvane na Google računu</translation>
+<translation id="2048261947532620704">Prevođenje stranice</translation>
 <translation id="205212645995975601">Roštilj i grilovanje</translation>
 <translation id="2053111141626950936">Stranice čiji jezik je <ph name="LANGUAGE" />, neće se prevoditi.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svaki dan.}=1{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svaki dan.}one{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svakih {NUM_DAYS} dan.}few{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svaka {NUM_DAYS} dana.}other{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svakih {NUM_DAYS} dana.}}</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index b882dd1..08928e3 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Refés la modificació</translation>
 <translation id="342781501876943858">Chromium et recomana que restableixis la contrasenya si l'has fet servir en altres llocs web.</translation>
 <translation id="3428151540071562330">Un o més dels URI de plantilla de servidor corresponents a DnsOverHttpsTemplates no són vàlids i no s'utilitzaran.</translation>
+<translation id="3431216045099978607">Prem |<ph name="ACCELERATOR" />| per sortir de la pantalla completa i veure la baixada.</translation>
 <translation id="3431636764301398940">Desa aquesta targeta al dispositiu</translation>
 <translation id="3432601291244612633">Tanca la pàgina</translation>
 <translation id="3435738964857648380">Seguretat</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 1a2bf23..a4906b9 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Ailwneud Golygu</translation>
 <translation id="342781501876943858">Mae Chromium yn argymell ailosod eich cyfrinair os gwnaethoch ei ailddefnyddio ar wefannau eraill.</translation>
 <translation id="3428151540071562330">Mae un neu fwy o'r URI templed gweinydd DnsOverHttpsTemplates yn annilys ac ni chaiff ei ddefnyddio.</translation>
+<translation id="3431216045099978607">Pwyswch |<ph name="ACCELERATOR" />| i adael y sgrîn lawn a gweld y lawrlwythiad.</translation>
 <translation id="3431636764301398940">Cadw'r cerdyn hwn i'r ddyfais hon</translation>
 <translation id="3432601291244612633">Cau'r dudalen</translation>
 <translation id="3435738964857648380">Diogelwch</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index b20e330..5c10b1e 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Annuller fortryd redigering</translation>
 <translation id="342781501876943858">Chromium anbefaler, at du nulstiller din adgangskode, hvis du har brugt den på andre websites.</translation>
 <translation id="3428151540071562330">En eller flere af serverskabelon-URI'erne for DnsOverHttpsTemplates er ugyldige og anvendes ikke.</translation>
+<translation id="3431216045099978607">Tryk på |<ph name="ACCELERATOR" />| for at afslutte visningen i fuld skærm og se downloadfilen.</translation>
 <translation id="3431636764301398940">Gem dette kort på denne enhed</translation>
 <translation id="3432601291244612633">Luk side</translation>
 <translation id="3435738964857648380">Sikkerhed</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 642a7d4..d2dcbfe 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Bearbeiten wiederholen</translation>
 <translation id="342781501876943858">Chromium empfiehlt, dein Passwort zurückzusetzen, wenn du es auf anderen Websites verwendet hast.</translation>
 <translation id="3428151540071562330">Einer oder mehrere der "DnsOverHttpsTemplates"-Servervorlagen-URIs sind ungültig und werden nicht verwendet.</translation>
+<translation id="3431216045099978607">Drücke auf die |<ph name="ACCELERATOR" />|-Taste, um den Vollbildmodus zu beenden und den Download zu sehen.</translation>
 <translation id="3431636764301398940">Diese Karte für dieses Gerät speichern</translation>
 <translation id="3432601291244612633">Seite schließen</translation>
 <translation id="3435738964857648380">Sicherheit</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index caae02a..333a71c 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -913,6 +913,7 @@
 <translation id="3427342743765426898">&amp;Επανάληψη επεξεργασίας</translation>
 <translation id="342781501876943858">Το Chromium συνιστά την επαναφορά του κωδικού πρόσβασης, εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="3428151540071562330">Ένα ή περισσότερα από τα URI προτύπου διακομιστή DnsOverHttpsTemplates δεν είναι έγκυρα και δεν θα χρησιμοποιηθούν.</translation>
+<translation id="3431216045099978607">Για εμφάνιση της λήψης, πατήστε |<ph name="ACCELERATOR" />| για έξοδο από την πλήρη οθόνη.</translation>
 <translation id="3431636764301398940">Αποθήκευση αυτής της κάρτας στη συγκεκριμένη συσκευή</translation>
 <translation id="3432601291244612633">Κλείσιμο σελίδας</translation>
 <translation id="3435738964857648380">Ασφάλεια</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 15364ef4..4db9ed21 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -646,6 +646,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, press tab, then enter to clear your browsing history, cookies, cache and more in Chrome settings</translation>
 <translation id="2650446666397867134">Access to the file was denied</translation>
 <translation id="2653659639078652383">Submit</translation>
+<translation id="2657637947725373811">{0,plural, =1{Transfer confidential file?}other{Transfer confidential files?}}</translation>
 <translation id="2660779039299703961">Event</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{None}=1{1 password (for <ph name="DOMAIN_LIST" />)}=2{2 passwords (for <ph name="DOMAIN_LIST" />)}other{# passwords (for <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Top</translation>
@@ -790,6 +791,7 @@
 <translation id="3108943290502734357">Middle tray</translation>
 <translation id="3109728660330352905">You don't have authorisation to view this page.</translation>
 <translation id="3113284927548439113">Third shift</translation>
+<translation id="3115363211799416195">{0,plural, =1{Download confidential file?}other{Download confidential files?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> requires you to back up your data and return this <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Laminate</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -980,6 +982,7 @@
 <translation id="3615877443314183785">Enter a valid expiry date</translation>
 <translation id="36224234498066874">Clear Browsing Data...</translation>
 <translation id="362276910939193118">Show full history</translation>
+<translation id="3628905806504633297">{0,plural, =1{Administrator policy doesn’t recommend transferring this file to <ph name="DESTINATION_NAME" />}other{Administrator policy doesn’t recommend transferring these files to <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">If it is already listed as a program allowed to access the network, try
       removing it from the list and adding it again.</translation>
 <translation id="3630699740441428070">Administrators of this device have configured your network connection, which may allow them to see your network traffic, including which websites that you visit.</translation>
@@ -1339,6 +1342,7 @@
 <translation id="4607603470419975064">See Chrome tips button: press Enter to learn about Chrome features</translation>
 <translation id="4607608436550361748">See Chrome tips</translation>
 <translation id="4617273035598175554">Graphics and animation software</translation>
+<translation id="4622292761762557753">Transfer anyway</translation>
 <translation id="4627675673814409125">This policy cannot be set at the Chrome profile level and will be ignored.</translation>
 <translation id="4628948037717959914">Photo</translation>
 <translation id="4631649115723685955">Cashback linked</translation>
@@ -1654,6 +1658,7 @@
 <translation id="540969355065856584">This server could not prove that it is <ph name="DOMAIN" />; its security certificate is not valid at this time. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation>
 <translation id="5412040515238827314">Invalid format: Expected a list of patterns.</translation>
 <translation id="5412236728747081950">This site gets your interests from Chrome to show you more relevant ads</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Stacker 4</translation>
 <translation id="5421136146218899937">Clear browsing data...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> wants to send you notifications</translation>
@@ -2587,6 +2592,7 @@
 <translation id="8004582292198964060">Browser</translation>
 <translation id="8009225694047762179">Manage Passwords</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{This card and its billing address will be saved. You'll be able to use it when signed in to <ph name="USER_EMAIL" />.}other{These cards and their billing addresses will be saved. You'll be able to use them when signed in to <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Attackers on this site may trick you into doing something dangerous like installing software or revealing your personal information (for example passwords, phone numbers or credit cards).</translation>
 <translation id="8026334261755873520">Clear browsing data</translation>
 <translation id="8027077570865220386">Tray 15</translation>
@@ -2638,6 +2644,7 @@
 <translation id="8148608574971654810">PDF version:</translation>
 <translation id="8149426793427495338">Your computer went to sleep.</translation>
 <translation id="8150722005171944719">The file at <ph name="URL" /> is not readable.  It may have been removed, moved or file permissions may be preventing access.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Administrator policy doesn’t recommend downloading this file to <ph name="DESTINATION_NAME" />}other{Administrator policy doesn’t recommend downloading these files to <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Leave site</translation>
 <translation id="8163866351304776260">Quad punch left</translation>
 <translation id="8175796834047840627">Chrome is offering to save your cards in your Google Account because you are signed in. You can change this behaviour in settings.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 36b567b4..77e959ec 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Muuda uuesti</translation>
 <translation id="342781501876943858">Chromium soovitab teil parooli lähtestada, kui kasutasite seda ka muudel saitidel.</translation>
 <translation id="3428151540071562330">Vähemalt üks reegli DnsOverHttpsTemplates serveri malli URI on kehtetu ja seda ei kasutata.</translation>
+<translation id="3431216045099978607">Täisekraanilt väljumiseks ja allalaaditud faili(de) nägemiseks vajutage klahvi |<ph name="ACCELERATOR" />|.</translation>
 <translation id="3431636764301398940">Salvesta kaart sellesse seadmesse</translation>
 <translation id="3432601291244612633">Sule leht</translation>
 <translation id="3435738964857648380">Turvalisus</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index eea1ea3bb..8a20127a 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -2054,6 +2054,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> gailuak ez du kudeatzailerik</translation>
 <translation id="6592952801936330159">Webguneen ezarpenak kudeatzeko botoia, sakatu Sartu Chrome-ren ezarpenetara joan, eta baimenak eta webguneetan gordetako datuak kudeatzeko</translation>
 <translation id="6596325263575161958">Enkriptatze aukerak</translation>
+<translation id="6599642189720630047">Jarraipena egiten diezun produktuak</translation>
 <translation id="6609880536175561541">Prc7 (gutun-azala)</translation>
 <translation id="6611723696964473273">Ekonomiari buruzko albisteak</translation>
 <translation id="6612010098632894193">Sareko bideoak</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 28387f4..5b0a535 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;انجام مجدد ویرایش</translation>
 <translation id="342781501876943858">‏Chromium توصیه می‌کند اگر از گذرواژه‌تان در سایت‌های دیگری استفاده کردید آن را بازنشانی کنید.</translation>
 <translation id="3428151540071562330">‏یک یا چند سرور نشانی وب الگوی سرور DnsOverHttpsTemplates نامعتبر است و استفاده نخواهد شد.</translation>
+<translation id="3431216045099978607">برای خروج از حالت تمام صفحه و دیدن بارگیری، |<ph name="ACCELERATOR" />| را فشار دهید.</translation>
 <translation id="3431636764301398940">این کارت را در این دستگاه ذخیره کنید</translation>
 <translation id="3432601291244612633">بستن صفحه</translation>
 <translation id="3435738964857648380">امنیت</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 609033d..f3c84fe4 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -912,6 +912,7 @@
 <translation id="3427342743765426898">&amp;Toista muokkaus</translation>
 <translation id="342781501876943858">Chromium suosittelee salasanan vaihtamista, jos olet käyttänyt sitä myös muilla sivustoilla.</translation>
 <translation id="3428151540071562330">Yksi tai useampi DnsOverHttpsTemplates-palvelinmallien URI-tunnuksista on virheellinen, eikä niitä käytetä.</translation>
+<translation id="3431216045099978607">Voit poistua koko näytön tilasta ja nähdä latauksen painamalla |<ph name="ACCELERATOR" />|.</translation>
 <translation id="3431636764301398940">Tallenna kortti tälle laitteelle</translation>
 <translation id="3432601291244612633">Sulje sivu</translation>
 <translation id="3435738964857648380">Suojaus</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index d96fd77a..3584eb4 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Na-block ang lokasyon</translation>
 <translation id="2042213636306070719">Tray 7</translation>
 <translation id="204357726431741734">Mag-sign in para magamit ang mga naka-save na password sa iyong Google Account</translation>
+<translation id="2048261947532620704">Isinasalin ang page</translation>
 <translation id="205212645995975601">BBQ at pag-iihaw</translation>
 <translation id="2053111141626950936">Hindi ita-translate ang mga page na nasa <ph name="LANGUAGE" />.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Kapag naka-on ang kontrol na ito at aktibo ang status, tinutukoy ng Chrome kung aling malaking grupo ng mga tao, o "cohort," ang pinakakatulad ng iyong kamakailang aktibidad sa pag-browse. Makakapili ang mga advertiser ng mga ad para sa grupo at pinapanatiling pribado sa iyong device ang aktibidad mo sa pag-browse. Ina-update ang iyong grupo araw-araw.}=1{Kapag naka-on ang kontrol na ito at aktibo ang status, tinutukoy ng Chrome kung aling malaking grupo ng mga tao, o "cohort," ang pinakakatulad ng iyong kamakailang aktibidad sa pag-browse. Makakapili ang mga advertiser ng mga ad para sa grupo at pinapanatiling pribado sa iyong device ang aktibidad mo sa pag-browse. Ina-update ang iyong grupo araw-araw.}one{Kapag naka-on ang kontrol na ito at aktibo ang status, tinutukoy ng Chrome kung aling malaking grupo ng mga tao, o "cohort," ang pinakakatulad ng iyong kamakailang aktibidad sa pag-browse. Makakapili ang mga advertiser ng mga ad para sa grupo at pinapanatiling pribado sa iyong device ang aktibidad mo sa pag-browse. Ina-update ang iyong grupo kada {NUM_DAYS} araw.}other{Kapag naka-on ang kontrol na ito at aktibo ang status, tinutukoy ng Chrome kung aling malaking grupo ng mga tao, o "cohort," ang pinakakatulad ng iyong kamakailang aktibidad sa pag-browse. Makakapili ang mga advertiser ng mga ad para sa grupo at pinapanatiling pribado sa iyong device ang aktibidad mo sa pag-browse. Ina-update ang iyong grupo kada {NUM_DAYS} na araw.}}</translation>
@@ -911,6 +912,7 @@
 <translation id="3427342743765426898">&amp;Gawing Muli ang Pag-e-edit</translation>
 <translation id="342781501876943858">Inirerekomenda ng Chromium na i-reset ang iyong password kung ginamit mo ito sa iba pang site.</translation>
 <translation id="3428151540071562330">Invalid at hindi gagamitin ang isa o higit pa sa mga URI ng template ng server ng DnsOverHttpsTemplates.</translation>
+<translation id="3431216045099978607">Pindutin ang |<ph name="ACCELERATOR" />| para lumabas sa full screen at makita ang download.</translation>
 <translation id="3431636764301398940">I-save ang card na ito sa device na ito</translation>
 <translation id="3432601291244612633">Isara ang page</translation>
 <translation id="3435738964857648380">Seguridad</translation>
@@ -2057,6 +2059,7 @@
 <translation id="6591833882275308647">Hindi pinapamahalaan ang iyong <ph name="DEVICE_TYPE" /></translation>
 <translation id="6592952801936330159">Button na Pamahalaan ang mga setting ng site, pindutin ang Enter para pamahalaan ang mga pahintulot at data na naka-store sa lahat ng site sa mga setting ng Chrome</translation>
 <translation id="6596325263575161958">Mga pagpipilian sa pag-encrypt</translation>
+<translation id="6599642189720630047">Mga Sinusubaybayang Produkto</translation>
 <translation id="6609880536175561541">Prc7 (Envelope)</translation>
 <translation id="6611723696964473273">Balita sa ekonomiya</translation>
 <translation id="6612010098632894193">Online na video</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 6c202d0..bc78083 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -912,6 +912,7 @@
 <translation id="3427342743765426898">&amp;Rétablir la modification</translation>
 <translation id="342781501876943858">Chromium recommande de réinitialiser votre mot de passe si vous l'avez réutilisé sur d'autres sites.</translation>
 <translation id="3428151540071562330">Une ou plusieurs des URL de modèle de serveur DnsOverHttpsTemplates sont incorrectes et ne seront pas utilisées.</translation>
+<translation id="3431216045099978607">Appuyez sur |<ph name="ACCELERATOR" />| pour quitter le mode plein écran et voir le téléchargement.</translation>
 <translation id="3431636764301398940">Enregistrer cette carte sur cet appareil</translation>
 <translation id="3432601291244612633">Fermer la page</translation>
 <translation id="3435738964857648380">Sécurité</translation>
@@ -2058,6 +2059,7 @@
 <translation id="6591833882275308647">Votre <ph name="DEVICE_TYPE" /> n'est pas géré</translation>
 <translation id="6592952801936330159">Bouton Gérer les paramètres du site, appuyez sur Entrée afin de gérer les autorisations et les données stockées pour les sites dans les paramètres de Chrome</translation>
 <translation id="6596325263575161958">Options de chiffrement</translation>
+<translation id="6599642189720630047">Produits suivis</translation>
 <translation id="6609880536175561541">Enveloppe Prc7</translation>
 <translation id="6611723696964473273">Actualités économiques</translation>
 <translation id="6612010098632894193">Vidéo en ligne</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 951eb58f2..db35ae9 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -645,6 +645,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" /> : appuyer sur Tabulation, puis sur Entrée pour effacer votre historique de navigation et vos cookies, vider le cache et bien davantage dans les paramètres Chrome</translation>
 <translation id="2650446666397867134">Accès au fichier refusé</translation>
 <translation id="2653659639078652383">Envoyer</translation>
+<translation id="2657637947725373811">{0,plural, =1{Transférer le fichier confidentiel ?}one{Transférer le fichier confidentiel ?}other{Transférer les fichiers confidentiels ?}}</translation>
 <translation id="2660779039299703961">Événement</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Aucun}=1{1 mot de passe (associé à <ph name="DOMAIN_LIST" />)}=2{2 mots de passe (associés à <ph name="DOMAIN_LIST" />)}one{# mot de passe (associé à <ph name="DOMAIN_LIST" />)}other{# mots de passe (associés à <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">En haut</translation>
@@ -789,6 +790,7 @@
 <translation id="3108943290502734357">Bac intermédiaire</translation>
 <translation id="3109728660330352905">Vous n'êtes pas autorisé à consulter cette page.</translation>
 <translation id="3113284927548439113">Troisième quart de travail</translation>
+<translation id="3115363211799416195">{0,plural, =1{Télécharger le fichier confidentiel ?}one{Télécharger le fichier confidentiel ?}other{Télécharger les fichiers confidentiels ?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> vous demande de sauvegarder vos données et de retourner ce <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Plastifier</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -911,6 +913,7 @@
 <translation id="3427342743765426898">&amp;Rétablir la modification</translation>
 <translation id="342781501876943858">L'équipe Chromium vous recommande de réinitialiser votre mot de passe si vous l'avez réutilisé sur d'autres sites.</translation>
 <translation id="3428151540071562330">Au moins un URI de modèle de serveur DnsOverHttpsTemplates n'est pas valide et ne sera pas utilisé.</translation>
+<translation id="3431216045099978607">Appuyez sur |<ph name="ACCELERATOR" />| pour quitter le plein écran et voir le téléchargement.</translation>
 <translation id="3431636764301398940">Enregistrer cette carte sur cet appareil</translation>
 <translation id="3432601291244612633">Fermer la page</translation>
 <translation id="3435738964857648380">Sécurité</translation>
@@ -978,6 +981,7 @@
 <translation id="3615877443314183785">Saisissez une date d'expiration valide</translation>
 <translation id="36224234498066874">Effacer les données de navigation...</translation>
 <translation id="362276910939193118">Afficher l'historique complet</translation>
+<translation id="3628905806504633297">{0,plural, =1{Une règle de l'administrateur déconseille de transférer ce fichier vers <ph name="DESTINATION_NAME" />}one{Une règle de l'administrateur déconseille de transférer ce fichier vers <ph name="DESTINATION_NAME" />}other{Une règle de l'administrateur déconseille de transférer ces fichiers vers <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">S'il est déjà répertorié en tant que programme autorisé à accéder au réseau,
     essayez de le supprimer de la liste, puis de le rajouter.</translation>
 <translation id="3630699740441428070">Les administrateurs de cet appareil ont configuré votre connexion réseau grâce à laquelle ils ont la possibilité d'afficher le trafic de votre réseau, y compris les sites Web que vous consultez.</translation>
@@ -1337,6 +1341,7 @@
 <translation id="4607603470419975064">Bouton "Voir les astuces Chrome", appuyez sur Entrée pour en savoir plus sur les fonctionnalités de Chrome</translation>
 <translation id="4607608436550361748">Voir les astuces Chrome</translation>
 <translation id="4617273035598175554">Logiciels de graphisme et d'animation</translation>
+<translation id="4622292761762557753">Transférer quand même</translation>
 <translation id="4627675673814409125">Cette règle sera ignorée, car elle ne peut pas être définie au niveau du profil Chrome.</translation>
 <translation id="4628948037717959914">Photo</translation>
 <translation id="4631649115723685955">Avec cashback</translation>
@@ -1652,6 +1657,7 @@
 <translation id="540969355065856584">Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité actuel n'est pas valide. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation>
 <translation id="5412040515238827314">Format non valide : liste de formats attendue.</translation>
 <translation id="5412236728747081950">Ce site obtient vos centres d'intérêt via Chrome pour afficher des annonces plus pertinentes</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Empileur 4</translation>
 <translation id="5421136146218899937">Effacer les données de navigation...</translation>
 <translation id="5426179911063097041">"<ph name="SITE" />" souhaite vous envoyer des notifications</translation>
@@ -2585,6 +2591,7 @@
 <translation id="8004582292198964060">Navigateur</translation>
 <translation id="8009225694047762179">Gérer les mots de passe</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Cette carte et l'adresse de facturation associée seront enregistrées. Vous pourrez vous en servir lorsque vous serez connecté à <ph name="USER_EMAIL" />.}one{Cette carte et l'adresse de facturation associée seront enregistrées. Vous pourrez vous en servir lorsque vous serez connecté à <ph name="USER_EMAIL" />.}other{Ces cartes et les adresses de facturation associées seront enregistrées. Vous pourrez vous en servir lorsque vous serez connecté à <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Des individus malveillants à l'œuvre sur ce site pourraient vous inciter à effectuer des opérations dangereuses, telles que l'installation d'un logiciel ou la révélation d'informations personnelles (par exemple des mots de passe, des numéros de téléphone ou des numéros de carte de paiement).</translation>
 <translation id="8026334261755873520">Effacer les données de navigation</translation>
 <translation id="8027077570865220386">Bac 15</translation>
@@ -2636,6 +2643,7 @@
 <translation id="8148608574971654810">Version PDF :</translation>
 <translation id="8149426793427495338">Votre ordinateur s'est mis en veille.</translation>
 <translation id="8150722005171944719">Le fichier disponible à l'adresse <ph name="URL" /> n'est pas lisible. Il est possible qu'il ait été supprimé ou déplacé, ou que les autorisations associées empêchent d'y accéder.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Une règle de l'administrateur déconseille de télécharger ce fichier vers <ph name="DESTINATION_NAME" />}one{Une règle de l'administrateur déconseille de télécharger ce fichier vers <ph name="DESTINATION_NAME" />}other{Une règle de l'administrateur déconseille de télécharger ces fichiers vers <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Quitter le site</translation>
 <translation id="8163866351304776260">Quadruple perforation à gauche</translation>
 <translation id="8175796834047840627">Chrome propose d'enregistrer vos cartes dans votre compte Google, car vous êtes connecté. Vous pouvez modifier ce comportement dans les paramètres.</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index 65187ef..18c21e46 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Refacer modificación</translation>
 <translation id="342781501876943858">Chromium recoméndache que restablezas o contrasinal se o reutilizaches noutros sitios.</translation>
 <translation id="3428151540071562330">Un ou varios URI do modelo do servidor DnsOverHttpsTemplates non son válidos e non se utilizarán.</translation>
+<translation id="3431216045099978607">Preme |<ph name="ACCELERATOR" />| para saír de pantalla completa e ver a descarga.</translation>
 <translation id="3431636764301398940">Gardar esta tarxeta neste dispositivo</translation>
 <translation id="3432601291244612633">Pechar páxina</translation>
 <translation id="3435738964857648380">Seguranza</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 52bda229..0966766 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -2059,6 +2059,7 @@
 <translation id="6591833882275308647">તમારું <ph name="DEVICE_TYPE" /> મેનેજ કરવામાં આવતું નથી</translation>
 <translation id="6592952801936330159">સાઇટ સેટિંગના બટન મેનેજ કરો, તેમજ Chrome સેટિંગમાં પરવાનગીઓ અને સમગ્ર સાઇટનો સ્ટોર કરેલો ડેટા મેનેજ કરવા માટે Enter કી દબાવો</translation>
 <translation id="6596325263575161958">એન્ક્રિપ્શન વિકલ્પો</translation>
+<translation id="6599642189720630047">ટ્રૅક કરેલી પ્રોડક્ટ</translation>
 <translation id="6609880536175561541">Prc7 (એન્વલપ)</translation>
 <translation id="6611723696964473273">અર્થતંત્રના સમાચાર</translation>
 <translation id="6612010098632894193">ઑનલાઇન વીડિયો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 4e608af..66e84af 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;बदलाव को फिर से लागू करें</translation>
 <translation id="342781501876943858">अगर आपने अपने पासवर्ड का दूसरी साइटों पर दोबारा इस्तेमाल किया है, तो क्रोमियम आपको उसे रीसेट करने का सुझाव देता है.</translation>
 <translation id="3428151540071562330">DnsOverHttpsTemplates सर्वर टेम्प्लेट का एक या इससे ज़्यादा यूआरएल अमान्य है और इसका इस्तेमाल नहीं किया जाएगा.</translation>
+<translation id="3431216045099978607">फ़ुल स्क्रीन मोड से बाहर निकलकर, डाउनलोड की गई फ़ाइलें देखने के लिए |<ph name="ACCELERATOR" />| बटन दबाएं</translation>
 <translation id="3431636764301398940">इस कार्ड को इस डिवाइस में सेव करें</translation>
 <translation id="3432601291244612633">पेज बंद करें</translation>
 <translation id="3435738964857648380">सुरक्षा</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index d1f9a9e..de271069 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Lokacija je blokirana</translation>
 <translation id="2042213636306070719">Ladica 7</translation>
 <translation id="204357726431741734">Prijavite se kako biste upotrebljavali zaporke spremljene na Google računu</translation>
+<translation id="2048261947532620704">Prevođenje stranice</translation>
 <translation id="205212645995975601">Roštilj</translation>
 <translation id="2053111141626950936">Neće se prevoditi <ph name="LANGUAGE" />.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaki dan.}=1{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaki dan.}one{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaki {NUM_DAYS} dan.}few{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaka {NUM_DAYS} dana.}other{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svakih {NUM_DAYS} dana.}}</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index f3d30f5..b5d3378 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Ulangi Pengeditan</translation>
 <translation id="342781501876943858">Chromium menyarankan untuk menyetel ulang sandi jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="3428151540071562330">Satu atau beberapa URI template server DnsOverHttpsTemplates tidak valid dan tidak akan digunakan.</translation>
+<translation id="3431216045099978607">Tekan |<ph name="ACCELERATOR" />| untuk keluar dari layar penuh dan melihat download.</translation>
 <translation id="3431636764301398940">Simpan kartu ini ke perangkat ini</translation>
 <translation id="3432601291244612633">Tutup halaman</translation>
 <translation id="3435738964857648380">Keamanan</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index a9c352d..6505bd3 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">Endu&amp;rtaka breytingu</translation>
 <translation id="342781501876943858">Chromium mælir með því að þú endurstillir aðgangsorðið þitt ef þú notaðir það einnig á öðrum síðum.</translation>
 <translation id="3428151540071562330">Eitt eða fleiri af URI sniðmátum netþjóns DnsOverHttpsTemplates eru ógild og verða ekki notuð.</translation>
+<translation id="3431216045099978607">Ýttu á |<ph name="ACCELERATOR" />| til að hætta að nota allan skjáinn og sjá niðurhal.</translation>
 <translation id="3431636764301398940">Vista kortið á þessu tæki</translation>
 <translation id="3432601291244612633">Loka síðu</translation>
 <translation id="3435738964857648380">Öryggi</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 890b23d..1866bdab 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;ביצוע מחדש של עריכה</translation>
 <translation id="342781501876943858">‏אם הזנת את הסיסמה שלך באתרים אחרים, ההמלצה של Chromium היא לאפס אותה.</translation>
 <translation id="3428151540071562330">‏אחד או יותר ממזהי ה-URI של תבנית השרת DnsOverHttpsTemplates אינם חוקיים ולא ייעשה בהם שימוש.</translation>
+<translation id="3431216045099978607">צריך להקיש על |<ph name="ACCELERATOR" />| כדי לצאת מהמסך המלא ולראות את ההורדה.</translation>
 <translation id="3431636764301398940">שמירת כרטיס זה במכשיר הנוכחי</translation>
 <translation id="3432601291244612633">סגירת הדף</translation>
 <translation id="3435738964857648380">אבטחה</translation>
@@ -2281,7 +2282,7 @@
 <translation id="7219179957768738017">החיבור משתמש ב-<ph name="SSL_VERSION" />.</translation>
 <translation id="7220786058474068424">המערכת מעבדת את התשלום</translation>
 <translation id="7221855153210829124">להציג הודעות</translation>
-<translation id="722454870747268814">כרטיסייה חדשה לגלישה בסתר</translation>
+<translation id="722454870747268814">כרטיסייה פרטית חדשה</translation>
 <translation id="7233592378249864828">הדפסה של גיליון אישור</translation>
 <translation id="7234638337680728591">מחירי דלק ותדלוק כלי רכב</translation>
 <translation id="7237492777898608035">לא להציג את ההודעה הזו שוב לאתר הזה</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 00eb6f78..3ab1398 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">編集のやり直し(&amp;R)</translation>
 <translation id="342781501876943858">パスワードを他のサイトで再使用した場合、Chromium ではパスワードの再設定を促すメッセージが表示されます。</translation>
 <translation id="3428151540071562330">DnsOverHttpsTemplates サーバー テンプレートの一部の URI が無効なため、使用されません。</translation>
+<translation id="3431216045099978607">|<ph name="ACCELERATOR" />| を押すと、全画面表示を終了してダウンロードを表示します。</translation>
 <translation id="3431636764301398940">このカード情報をこのデバイスに保存する</translation>
 <translation id="3432601291244612633">ページを閉じる</translation>
 <translation id="3435738964857648380">セキュリティ</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index dd718c9..cb00e85 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -2059,6 +2059,7 @@
 <translation id="6591833882275308647">თქვენი <ph name="DEVICE_TYPE" /> არ არის მართული</translation>
 <translation id="6592952801936330159">საიტების პარამეტრების მართვის ღილაკი, ნებართვებისა და სხვადასხვა საიტზე შენახული მონაცემების Chrome-ის პარამეტრებიდან სამართავად დააჭირეთ კლავიშს Enter</translation>
 <translation id="6596325263575161958">დაშიფვრის პარამეტრები</translation>
+<translation id="6599642189720630047">თვალმიდევნებული პროდუქტები</translation>
 <translation id="6609880536175561541">Prc7 (კონვერტი)</translation>
 <translation id="6611723696964473273">ეკონომიკის სიახლეები</translation>
 <translation id="6612010098632894193">ონლაინვიდეო</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 2c11695d5..400db99 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -910,6 +910,7 @@
 <translation id="3427342743765426898">&amp;Өзгертуді қайталау</translation>
 <translation id="342781501876943858">Chromium басқа сайттарда пайдаланылған құпия сөзіңізді қайта орнатуды ұсынады.</translation>
 <translation id="3428151540071562330">DnsOverHttpsTemplates серверінің бір немесе бірнеше URI үлгісі жарамсыз және пайдаланылмайды.</translation>
+<translation id="3431216045099978607">Толық экраннан шығу және жүктеп салынғандарды көру үшін |<ph name="ACCELERATOR" />| пернесін басыңыз.</translation>
 <translation id="3431636764301398940">Карта мәліметтерін осы құрылғыда сақтау</translation>
 <translation id="3432601291244612633">Бетті жабу</translation>
 <translation id="3435738964857648380">Қауіпсіздік</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 0bb8eba..30991e26 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">수정 다시 실행(&amp;R)</translation>
 <translation id="342781501876943858">다른 사이트에서 비밀번호를 재사용했다면 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="3428151540071562330">하나 이상의 DnsOverHttpsTemplates 서버 템플릿 URI가 유효하지 않아 앞으로 사용되지 않습니다.</translation>
+<translation id="3431216045099978607">|<ph name="ACCELERATOR" />|를 눌러서 전체 화면을 종료하고 다운로드를 확인합니다.</translation>
 <translation id="3431636764301398940">기기에 카드 저장</translation>
 <translation id="3432601291244612633">페이지 닫기</translation>
 <translation id="3435738964857648380">보안</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index a30549e..08ca7db 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Жайгашкан жер бөгөттөлдү</translation>
 <translation id="2042213636306070719">7-түпкүч</translation>
 <translation id="204357726431741734">Google аккаунтуңузда сакталган сырсөздөрдү колдонуу үчүн аккаунтуңузга кириңиз</translation>
+<translation id="2048261947532620704">Барак которулууда</translation>
 <translation id="205212645995975601">Барбекю жана гриль</translation>
 <translation id="2053111141626950936"><ph name="LANGUAGE" /> тилиндеги барактар которулбайт.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Бул көзөмөлдөө каражаты күйүк жана абалы жигердүү болгондо, Chrome акыркы көргөн вебсайттарыңыз адамдардын кайсы чоң тобуна же "когортасына" эң ылайыктуу экенин аныктайт. Жарнамачылар ал топ үчүн жарнамаларды тандай алат жана көргөн вебсайттарыңыз түзмөгүңүздө купуя сакталат. Тобуңуз күн сайын жаңыртылып турат.}=1{Бул көзөмөлдөө каражаты күйүк жана абалы жигердүү болгондо, Chrome акыркы көргөн вебсайттарыңыз адамдардын кайсы чоң тобуна же "когортасына" эң ылайыктуу экенин аныктайт. Жарнамачылар ал топ үчүн жарнамаларды тандай алат жана көргөн вебсайттарыңыз түзмөгүңүздө купуя сакталат. Тобуңуз күн сайын жаңыртылып турат.}other{Бул көзөмөлдөө каражаты күйүк жана абалы жигердүү болгондо, Chrome акыркы көргөн вебсайттарыңыз адамдардын кайсы чоң тобуна же "когортасына" эң ылайыктуу экенин аныктайт. Жарнамачылар ал топ үчүн жарнамаларды тандай алат жана көргөн вебсайттарыңыз түзмөгүңүздө купуя сакталат. Тобуңуз {NUM_DAYS} күн сайын жаңыртылып турат.}}</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 95e7e1e0..c91fb77a 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">ເຮັດຄືນຄໍາສັ່ງແກ້ໄຂ</translation>
 <translation id="342781501876943858">Chromium ແນະນຳໃຫ້ຣີເຊັດລະຫັດຜ່ານຂອງທ່ານ ຖ້າທ່ານນຳມັນມາໃຊ້ໃໝ່ໃນເວັບໄຊອື່ນ.</translation>
 <translation id="3428151540071562330">ໜຶ່ງ ຫຼື ຫຼາຍ URI ຂອງແມ່ແບບເຊີບເວີ DnsOverHttpsTemplates ບໍ່ຖືກຕ້ອງ ແລະ ຈະບໍ່ຖືກນຳໃຊ້.</translation>
+<translation id="3431216045099978607">ກົດ |<ph name="ACCELERATOR" />| ເພື່ອອອກຈາກການສະແດງເຕັມຈໍ ແລະ ເບິ່ງການດາວໂຫຼດ.</translation>
 <translation id="3431636764301398940">ບັນທຶກບັດນີ້ໃສ່ອຸປະກອນນີ້</translation>
 <translation id="3432601291244612633">ປິດໜ້າ</translation>
 <translation id="3435738964857648380">ຄວາມ​ປອດ​ໄພ</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index e9fa711..19d7053 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -646,6 +646,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, притиснете Tab, а потоа Enter за да ги избришете историјата на прелистувањето, колачињата, кешот и други работи во поставките за Chrome</translation>
 <translation id="2650446666397867134">Пристапот до датотеката беше одбиен</translation>
 <translation id="2653659639078652383">Испрати</translation>
+<translation id="2657637947725373811">{0,plural, =1{Да се префрли доверлива датотека?}one{Да се префрлат доверливи датотеки?}other{Да се префрлат доверливи датотеки?}}</translation>
 <translation id="2660779039299703961">Настан</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Ниедна}=1{1 лозинка (за <ph name="DOMAIN_LIST" />)}=2{2 лозинки (за <ph name="DOMAIN_LIST" />)}one{# лозинка (за <ph name="DOMAIN_LIST" />)}other{# лозинки (за <ph name="DOMAIN_LIST" />-}}</translation>
 <translation id="2666092431469916601">Горе</translation>
@@ -790,6 +791,7 @@
 <translation id="3108943290502734357">Средна фиока</translation>
 <translation id="3109728660330352905">Немате авторизација да ја видите страницата.</translation>
 <translation id="3113284927548439113">Трета смена</translation>
+<translation id="3115363211799416195">{0,plural, =1{Да се преземе доверлива датотека?}one{Да се преземат доверливи датотеки?}other{Да се преземат доверливи датотеки?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> бара да направите бекап на вашите податоци и да го вратите овој <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Пластифицирање</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -980,6 +982,7 @@
 <translation id="3615877443314183785">Внесете важечки датум на истекување</translation>
 <translation id="36224234498066874">Исчисти податоци…</translation>
 <translation id="362276910939193118">Покажи целосна историја</translation>
+<translation id="3628905806504633297">{0,plural, =1{Правилото на администраторот не препорачува да се префрла датотекава во <ph name="DESTINATION_NAME" />}one{Правилото на администраторот не препорачува да се префрлаат датотекиве во <ph name="DESTINATION_NAME" />}other{Правилото на администраторот не препорачува да се префрлаат датотекиве во <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Доколку веќе е на списокот со програми на кои им е дозволен пристап до мрежата, обидете се
         да го отстраните од списокот и да го додадете повторно.</translation>
 <translation id="3630699740441428070">Администраторите на уредов ја конфигурирале мрежната врска, што може да им дозволи да го гледаат мрежниот сообраќај, вклучително и кои веб-сајтови ги посетувате.</translation>
@@ -1339,6 +1342,7 @@
 <translation id="4607603470419975064">Копче за гледање совети за Chrome, притиснете го копчето Enter за да дознаете за функциите на Chrome</translation>
 <translation id="4607608436550361748">Видете ги советите за Chrome</translation>
 <translation id="4617273035598175554">Графички и анимациски софтвер</translation>
+<translation id="4622292761762557753">Сепак префрли</translation>
 <translation id="4627675673814409125">Правилово не може да се постави на ниво на профил на Chrome и ќе се игнорира.</translation>
 <translation id="4628948037717959914">Фотографија</translation>
 <translation id="4631649115723685955">Со поврат на готовина</translation>
@@ -1654,6 +1658,7 @@
 <translation id="540969355065856584">Серверот не може да докаже дека е <ph name="DOMAIN" />; неговиот безбедносен сертификат не е важечки во моментов. Тоа може да се должи на погрешна конфигурација или на напаѓач што го пресретнува поврзувањето.</translation>
 <translation id="5412040515238827314">Неважечки формат: се очекува список со шеми.</translation>
 <translation id="5412236728747081950">Сајтов ги добива вашите интереси од Chrome за да ви прикажува порелевантни реклами</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Фиока за складирање 4</translation>
 <translation id="5421136146218899937">Исчисти податоци од прелистување…</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> сака да ви испраќа известувања</translation>
@@ -2586,6 +2591,7 @@
 <translation id="8004582292198964060">Прелистувач</translation>
 <translation id="8009225694047762179">Управување со лозинки</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Картичкава и нејзината адреса за наплата ќе се зачуваат. Ќе може да ја користите кога ќе се најавите на <ph name="USER_EMAIL" />.}one{Картичкиве и нивните адреси за наплата ќе се зачуваат. Ќе може да ги користите кога ќе се најавите на <ph name="USER_EMAIL" />.}other{Картичкиве и нивните адреси за наплата ќе се зачуваат. Ќе може да ги користите кога ќе се најавите на <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Напаѓачите што се наоѓаат на сајтов може да ве измамат да направите нешто опасно како што е инсталирањето софтвер или откривањето лични информации (на пример лозинки, телефонски броеви или кредитни картички).</translation>
 <translation id="8026334261755873520">Исчисти податоци од прелистување</translation>
 <translation id="8027077570865220386">Фиока 15</translation>
@@ -2637,6 +2643,7 @@
 <translation id="8148608574971654810">PDF-верзија:</translation>
 <translation id="8149426793427495338">Компјутерот е во режим на спиење.</translation>
 <translation id="8150722005171944719">Датотеката на <ph name="URL" /> не може да се прочита. Можно е да е отстранета, преместена или дозволите на датотеката да го спречуваат пристапот.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Правилото на администраторот не препорачува да се презема датотекава во <ph name="DESTINATION_NAME" />}one{Правилото на администраторот не препорачува да се преземаат датотекиве во <ph name="DESTINATION_NAME" />}other{Правилото на администраторот не препорачува да се преземаат датотекиве во <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Напушти го сајтот</translation>
 <translation id="8163866351304776260">Четири дупки лево</translation>
 <translation id="8175796834047840627">Chrome нуди да ви ги зачува картичките во вашата сметка на Google бидејќи сте најавени. Ваквото однесување може да го смените во поставки.</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index f3c9c1a..db3d7663 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -913,6 +913,7 @@
 <translation id="3427342743765426898">&amp; Засварлах үйлдлийг дахин хийх</translation>
 <translation id="342781501876943858">Хэрэв та нууц үгээ бусад сайтад дахин ашигласан бол Chromium-с үүнийг шинэчлэхийг зөвлөж байна.</translation>
 <translation id="3428151540071562330">DnsOverHttpsTemplates серверийн загварын нэг буюу түүнээс олон URI нь буруу байгаа бөгөөд тэднийг ашиглахгүй.</translation>
+<translation id="3431216045099978607">|<ph name="ACCELERATOR" />| дарж бүтэн дэлгэцээс гарах ба татаж авахыг харна уу.</translation>
 <translation id="3431636764301398940">Энэ картыг энэ төхөөрөмжид хадгалах</translation>
 <translation id="3432601291244612633">Хуудсыг хаах</translation>
 <translation id="3435738964857648380">Нууцлал</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 28cbb35c..2fed22f 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -645,6 +645,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome सेटिंग्जमधील तुमचा ब्राउझिंग इतिहास, कुकी, कॅशे आणि आणखी बरेच काही साफ करण्यासाठी टॅब आणि त्यानंतर एंटर दाबा</translation>
 <translation id="2650446666397867134">फाइलवरील ॲक्सेस नाकारण्यात आला</translation>
 <translation id="2653659639078652383">सबमिट करा</translation>
+<translation id="2657637947725373811">{0,plural, =1{गोपनीय फाइल ट्रान्सफर करायची आहे का?}other{गोपनीय फाइल ट्रान्सफर करायच्या आहेत का?}}</translation>
 <translation id="2660779039299703961">इव्‍हेंट</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{काहीही नाही}=1{(<ph name="DOMAIN_LIST" /> साठी) एक पासवर्ड}=2{(<ph name="DOMAIN_LIST" /> साठी) दोन पासवर्ड}other{(<ph name="DOMAIN_LIST" /> साठी) # पासवर्ड}}</translation>
 <translation id="2666092431469916601">शीर्ष</translation>
@@ -789,6 +790,7 @@
 <translation id="3108943290502734357">मधला ट्रे</translation>
 <translation id="3109728660330352905">तुम्हाला हे पेज पाहण्याची परवानगी नाही.</translation>
 <translation id="3113284927548439113">तिसरी शिफ्ट</translation>
+<translation id="3115363211799416195">{0,plural, =1{गोपनीय फाइल डाउनलोड करायची आहे का?}other{गोपनीय फाइल डाउनलोड करायच्या आहेत का?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> साठी तुम्ही तुमच्या डेटाचा बॅकअप घेणे आणि हे <ph name="DEVICE_TYPE" /> परत करणे आवश्यक आहे.</translation>
 <translation id="3116158981186517402">लॅमिनेट</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -978,6 +980,7 @@
 <translation id="3615877443314183785">वैध समाप्ती दिनांक एंटर करा</translation>
 <translation id="36224234498066874">ब्राउझिंग डेटा साफ करा...</translation>
 <translation id="362276910939193118">पूर्ण इतिहास दर्शवा</translation>
+<translation id="3628905806504633297">{0,plural, =1{अ‍ॅडमिनिस्ट्रेटर धोरण ही फाइल <ph name="DESTINATION_NAME" /> वर ट्रान्सफर करण्याची शिफारस करत नाही}other{अ‍ॅडमिनिस्ट्रेटर धोरण या फाइल <ph name="DESTINATION_NAME" /> वर ट्रान्सफर करण्याची शिफारस करत नाही}}</translation>
 <translation id="3630155396527302611">नेटवर्क ॲक्सेस करण्यासाठी परवानगी  दिलेला प्रोग्राम म्हणून तो आधीपासून सूचीबद्ध केला असल्यास
         तो सूचीमधून काढा आणि पुन्हा जोडून पहा.</translation>
 <translation id="3630699740441428070">या डिव्हाइसच्या अ‍ॅडमिनिस्ट्रेटरनी तुमचे नेटवर्क कनेक्शन कॉंफिगर केले आहे, ज्यामुळे त्यांना तुम्ही भेट देत असलेल्या वेबसाइटसह, तुमचे नेटवर्क ट्रॅफिक पाहता येते.</translation>
@@ -1337,6 +1340,7 @@
 <translation id="4607603470419975064">Chrome शी संबंधित टिपा पहा बटण, Chrome च्या वैशिष्‍ट्यांविषयी जाणून घेण्यासाठी एंटर दाबा</translation>
 <translation id="4607608436550361748">Chrome शी संबंधित टिपा पहा</translation>
 <translation id="4617273035598175554">ग्राफिक आणि अ‍ॅनिमेशन सॉफ्टवेअर</translation>
+<translation id="4622292761762557753">तरीही ट्रान्सफर करा</translation>
 <translation id="4627675673814409125">हे धोरण Chrome प्रोफाइल स्तरावर सेट केले जाऊ शकत नाही आणि ते दुर्लक्षित केले जाईल.</translation>
 <translation id="4628948037717959914">फोटो</translation>
 <translation id="4631649115723685955">कॅशबॅक लिंक केला</translation>
@@ -1652,6 +1656,7 @@
 <translation id="540969355065856584">हा सर्व्हर <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट यावेळी वैध नाही. हे कदाचित चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोर तुमचे कनेक्शन इंटरसेप्ट करत असल्‍यामुळे होऊ शकते.</translation>
 <translation id="5412040515238827314">फॉरमॅट चुकीचा आहे: सूचीचा पॅटर्न अपेक्षित आहे.</translation>
 <translation id="5412236728747081950">तुम्हाला आणखी उपयुक्त जाहिराती दाखवण्यासाठी ही साइट Chrome मधून तुमची स्वारस्ये मिळवते</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">स्टॅकर ४</translation>
 <translation id="5421136146218899937">ब्राउझिंग डेटा साफ करा...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> ला तुम्हाला सूचना पाठवायची आहे</translation>
@@ -2585,6 +2590,7 @@
 <translation id="8004582292198964060">ब्राउझर</translation>
 <translation id="8009225694047762179">पासवर्ड व्यवस्थापित करा</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{हे कार्ड आणि त्याचा बिलिंग पत्ता सेव्ह केला जाईल. <ph name="USER_EMAIL" /> मध्ये साइन इन केलेले असताना तुम्ही ते वापरू शकाल.}other{ही कार्डे आणि त्यांचे बिलिंग पत्ते सेव्ह केले जातील. <ph name="USER_EMAIL" /> मध्ये साइन इन केलेले असताना तुम्ही ती वापरू शकाल.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">या साइट वरील आक्रमणकर्ते सॉफ्‍टवेअर इंस्टॉल करणे किंवा तुमची वैयक्तिक माहिती (उदाहरणार्थ, पासवर्ड, फोन नंबर किंवा क्रेडिट कार्ड) उघड करणे यासारखे काहीतरी धोकादायक करण्‍यामध्‍ये तुम्हाला चलाखीने गुंतवू शकतात.</translation>
 <translation id="8026334261755873520">ब्राउझिंग डेटा साफ करा</translation>
 <translation id="8027077570865220386">ट्रे १५</translation>
@@ -2636,6 +2642,7 @@
 <translation id="8148608574971654810">पीडीएफ आवृत्ती:</translation>
 <translation id="8149426793427495338">तुमचा कॉंप्युटर निष्क्रीय झाला.</translation>
 <translation id="8150722005171944719"><ph name="URL" /> येथील फाइल वाचनीय नाही. ती काढून टाकलेली, हलविलेली असू शकते किंवा फाइल परवानग्या ॲक्सेस प्रतिबंधित करत असू शकतात.</translation>
+<translation id="8153865548451212769">{0,plural, =1{अ‍ॅडमिनिस्ट्रेटर धोरण ही फाइल <ph name="DESTINATION_NAME" /> वर डाउनलोड करण्याची शिफारस करत नाही}other{अ‍ॅडमिनिस्ट्रेटर धोरण या फाइल <ph name="DESTINATION_NAME" /> वर डाउनलोड करण्याची शिफारस करत नाही}}</translation>
 <translation id="8157295877370077682">साइट सोडा</translation>
 <translation id="8163866351304776260">क्वाड पंच लेफ्ट</translation>
 <translation id="8175796834047840627">तुम्ही साइन इन केले असल्यामुळे Chrome तुमच्या Google खात्यामध्ये तुमची कार्डे सेव्ह करत आहे. तुम्‍ही हे वर्तन सेटिंग्‍जमध्‍ये बदलू शकता.</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 9d5ae1f2..378d157 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">लोकेसन हेर्न रोक लगाइएको छ</translation>
 <translation id="2042213636306070719">ट्रे ७</translation>
 <translation id="204357726431741734">आफ्नो Google खातामा सुरक्षित गरिएका पासवर्डहरू प्रयोग गर्न साइन इन गर्नुहोस्</translation>
+<translation id="2048261947532620704">पेज अनुवाद गरिँदै छ</translation>
 <translation id="205212645995975601">बार्बिक्यू तथा पोलेका परिकार</translation>
 <translation id="2053111141626950936"><ph name="LANGUAGE" /> भाषाका पृष्ठहरू अनुवाद गरिने छैनन्।</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{यो सेटिङ अन र यसको स्थिति सक्रिय भएको खण्डमा Chrome ले मान्छेहरूको ठुलो समूह वा "साझा गुण भएका मान्छेहरूको समूह" मध्ये कुनसँग तपाईंले ब्राउजर प्रयोग गरी हालसालै गर्नुभएका क्रियाकलाप सबैभन्दा बढी मिल्छन् भन्ने कुरा निर्धारण गर्छ। विज्ञापनदाताहरू उक्त समूहमा आफूले देखाउन चाहेका विज्ञापनहरू छनौट गर्न सक्छन् र तपाईंले ब्राउजर प्रयोग गरी गर्नुभएका क्रियाकलाप तपाईंको डिभाइसमा गोप्य राखिन्छन्। तपाईंको समूह हरेक दिन अपडेट गरिन्छ।}=1{यो सेटिङ अन र यसको स्थिति सक्रिय भएको खण्डमा Chrome ले मान्छेहरूको ठुलो समूह वा "साझा गुण भएका मान्छेहरूको समूह" मध्ये कुनसँग तपाईंले ब्राउजर प्रयोग गरी हालसालै गर्नुभएका क्रियाकलाप सबैभन्दा बढी मिल्छन् भन्ने कुरा निर्धारण गर्छ। विज्ञापनदाताहरू उक्त समूहमा आफूले देखाउन चाहेका विज्ञापनहरू छनौट गर्न सक्छन् र तपाईंले ब्राउजर प्रयोग गरी गर्नुभएका क्रियाकलाप तपाईंको डिभाइसमा गोप्य राखिन्छन्। तपाईंको समूह हरेक दिन अपडेट गरिन्छ।}other{यो सेटिङ अन र यसको स्थिति सक्रिय भएको खण्डमा Chrome ले मान्छेहरूको ठुलो समूह वा "साझा गुण भएका मान्छेहरूको समूह" मध्ये कुनसँग तपाईंले ब्राउजर प्रयोग गरी हालसालै गर्नुभएका क्रियाकलाप सबैभन्दा बढी मिल्छन् भन्ने कुरा निर्धारण गर्छ। विज्ञापनदाताहरू उक्त समूहमा आफूले देखाउन चाहेका विज्ञापनहरू छनौट गर्न सक्छन् र तपाईंले ब्राउजर प्रयोग गरी गर्नुभएका क्रियाकलाप तपाईंको डिभाइसमा गोप्य राखिन्छन्। तपाईंको समूह हरेक {NUM_DAYS} दिनमा अपडेट गरिन्छ।}}</translation>
@@ -2055,6 +2056,7 @@
 <translation id="6591833882275308647">तपाईंको <ph name="DEVICE_TYPE" /> व्यवस्थित छैन</translation>
 <translation id="6592952801936330159">'साइटसम्बन्धी सेटिङ मिलाउनुहोस्' नामक बटन, Chrome का सेटिङमा गई अनुमति तथा विभिन्न साइटहरूमा भण्डारण गरिएका डेटा व्यवस्थापन गर्न Enter थिच्नुहोस्</translation>
 <translation id="6596325263575161958">गुप्तीकरण विकल्पहरू</translation>
+<translation id="6599642189720630047">ट्र्याक गरिएका उत्पादनहरू</translation>
 <translation id="6609880536175561541">Prc7 (Envelope)</translation>
 <translation id="6611723696964473273">आर्थिक समाचार</translation>
 <translation id="6612010098632894193">अनलाइन भिडियो</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 6917059..4a8140b 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Locatie geblokkeerd</translation>
 <translation id="2042213636306070719">Lade 7</translation>
 <translation id="204357726431741734">Inloggen om wachtwoorden te gebruiken die zijn opgeslagen in je Google-account</translation>
+<translation id="2048261947532620704">Pagina vertalen</translation>
 <translation id="205212645995975601">Barbecue en grillen</translation>
 <translation id="2053111141626950936">Pagina's in het <ph name="LANGUAGE" /> worden niet vertaald.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Als dit bedieningselement aanstaat en de status actief is, bepaalt Chrome op welke grote groep mensen (ook wel een cohort genoemd) je recente browse-activiteit het meest lijkt. Adverteerders kunnen advertenties voor de groep selecteren en je browse-activiteit blijft privé op je apparaat. Je groep wordt elke dag geüpdatet.}=1{Als dit bedieningselement aanstaat en de status actief is, bepaalt Chrome op welke grote groep mensen (ook wel een cohort genoemd) je recente browse-activiteit het meest lijkt. Adverteerders kunnen advertenties voor de groep selecteren en je browse-activiteit blijft privé op je apparaat. Je groep wordt elke dag geüpdatet.}other{Als dit bedieningselement aanstaat en de status actief is, bepaalt Chrome op welke grote groep mensen (ook wel een cohort genoemd) je recente browse-activiteit het meest lijkt. Adverteerders kunnen advertenties voor de groep selecteren en je browse-activiteit blijft privé op je apparaat. Je groep wordt elke {NUM_DAYS} dagen geüpdatet.}}</translation>
@@ -908,6 +909,7 @@
 <translation id="3427342743765426898">&amp;Opnieuw bewerken</translation>
 <translation id="342781501876943858">Chromium raadt je aan je wachtwoord te resetten als je het voor andere sites hebt hergebruikt.</translation>
 <translation id="3428151540071562330">Een of meer van de servertemplate-URI's voor DnsOverHttpsTemplates zijn ongeldig en worden niet gebruikt.</translation>
+<translation id="3431216045099978607">Druk op |<ph name="ACCELERATOR" />| om het volledige scherm te sluiten en de download te bekijken.</translation>
 <translation id="3431636764301398940">Deze creditcard opslaan op dit apparaat</translation>
 <translation id="3432601291244612633">Pagina sluiten</translation>
 <translation id="3435738964857648380">Beveiliging</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 3971cd90..19580f0 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Localização bloqueada</translation>
 <translation id="2042213636306070719">Tabuleiro 7</translation>
 <translation id="204357726431741734">Iniciar sessão para utilizar palavras-passe guardadas na sua Conta Google</translation>
+<translation id="2048261947532620704">A traduzir a página</translation>
 <translation id="205212645995975601">Churrascos e grelhados</translation>
 <translation id="2053111141626950936">As páginas em <ph name="LANGUAGE" /> não serão traduzidas.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Quando este controlo está ativado e o estado está ativo, o Chrome determina a que grupo alargado de pessoas, ou "coorte", a sua atividade de navegação recente é mais semelhante. Os anunciantes podem selecionar anúncios para o grupo e a sua atividade de navegação permanece privada no seu dispositivo. O seu grupo é atualizado todos os dias.}=1{Quando este controlo está ativado e o estado está ativo, o Chrome determina a que grupo alargado de pessoas, ou "coorte", a sua atividade de navegação recente é mais semelhante. Os anunciantes podem selecionar anúncios para o grupo e a sua atividade de navegação permanece privada no seu dispositivo. O seu grupo é atualizado todos os dias.}other{Quando este controlo está ativado e o estado está ativo, o Chrome determina a que grupo alargado de pessoas, ou "coorte", a sua atividade de navegação recente é mais semelhante. Os anunciantes podem selecionar anúncios para o grupo e a sua atividade de navegação permanece privada no seu dispositivo. O seu grupo é atualizado a cada {NUM_DAYS} dias.}}</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 740f5af..4614fd2 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Repetați editarea</translation>
 <translation id="342781501876943858">Chromium îți recomandă să resetezi parola dacă ai folosit-o și pe alte site-uri.</translation>
 <translation id="3428151540071562330">Una sau mai multe dintre adresele URI pentru șabloanele de server DnsOverHttpsTemplates este nevalidă și nu va fi folosită.</translation>
+<translation id="3431216045099978607">Apasă pe |<ph name="ACCELERATOR" />| ca să ieși din ecranul complet și să vezi descărcarea.</translation>
 <translation id="3431636764301398940">Salvează cardul pe acest dispozitiv</translation>
 <translation id="3432601291244612633">Închide pagina</translation>
 <translation id="3435738964857648380">Securitate</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 7c405b6d..dfc2a36e 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Poloha je blokovaná</translation>
 <translation id="2042213636306070719">Priehradka č. 7</translation>
 <translation id="204357726431741734">Prihlásiť sa a používať heslá uložené vo vašom účte Google</translation>
+<translation id="2048261947532620704">Stránka sa prekladá</translation>
 <translation id="205212645995975601">Opekanie a grilovanie</translation>
 <translation id="2053111141626950936">Stránky v jazyku <ph name="LANGUAGE" /> nebudú prekladané.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Keď je tento ovládací prvok zapnutý a stav je aktívny, Chrome stanoví, ktorej veľkej skupine ľudí („kohorte“) je vaša nedávna aktivita prehliadania najviac podobná. Inzerenti môžu pre túto skupinu vybrať reklamy a vaša aktivita prehliadania zostane uchovaná v súkromí vo vašom zariadení. Skupina sa aktualizuje každý deň.}=1{Keď je tento ovládací prvok zapnutý a stav je aktívny, Chrome stanoví, ktorej veľkej skupine ľudí („kohorte“) je vaša nedávna aktivita prehliadania najviac podobná. Inzerenti môžu pre túto skupinu vybrať reklamy a vaša aktivita prehliadania zostane uchovaná v súkromí vo vašom zariadení. Skupina sa aktualizuje každý deň.}few{Keď je tento ovládací prvok zapnutý a stav je aktívny, Chrome stanoví, ktorej veľkej skupine ľudí („kohorte“) je vaša nedávna aktivita prehliadania najviac podobná. Inzerenti môžu pre túto skupinu vybrať reklamy a vaša aktivita prehliadania zostane uchovaná v súkromí vo vašom zariadení. Skupina sa aktualizuje každé {NUM_DAYS} dni.}many{Keď je tento ovládací prvok zapnutý a stav je aktívny, Chrome stanoví, ktorej veľkej skupine ľudí („kohorte“) je vaša nedávna aktivita prehliadania najviac podobná. Inzerenti môžu pre túto skupinu vybrať reklamy a vaša aktivita prehliadania zostane uchovaná v súkromí vo vašom zariadení. Skupina sa aktualizuje každého {NUM_DAYS} dňa.}other{Keď je tento ovládací prvok zapnutý a stav je aktívny, Chrome stanoví, ktorej veľkej skupine ľudí („kohorte“) je vaša nedávna aktivita prehliadania najviac podobná. Inzerenti môžu pre túto skupinu vybrať reklamy a vaša aktivita prehliadania zostane uchovaná v súkromí vo vašom zariadení. Skupina sa aktualizuje každých {NUM_DAYS} dní.}}</translation>
@@ -2052,6 +2053,7 @@
 <translation id="6591833882275308647">Zariadenie <ph name="DEVICE_TYPE" /> nie je spravované</translation>
 <translation id="6592952801936330159">Tlačidlo Spravovať nastavenia webov. Stlačením klávesa Enter môžete v nastaveniach Chromu spravovať povolenia a údaje uložené na rôznych weboch.</translation>
 <translation id="6596325263575161958">Možnosti šifrovania</translation>
+<translation id="6599642189720630047">Sledované výrobky</translation>
 <translation id="6609880536175561541">Prc7 (obálka)</translation>
 <translation id="6611723696964473273">Správy z ekonomiky</translation>
 <translation id="6612010098632894193">Online video</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index dd6bb3d..aec29007 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Lokacija je blokirana</translation>
 <translation id="2042213636306070719">Pladenj 7</translation>
 <translation id="204357726431741734">Prijavite se, če želite uporabljati gesla, shranjena v računu Google</translation>
+<translation id="2048261947532620704">Prevajanje strani</translation>
 <translation id="205212645995975601">Žar</translation>
 <translation id="2053111141626950936">Strani v jeziku <ph name="LANGUAGE" /> ne bodo prevedene.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Če je ta kontrolnik vklopljen in stanje aktivno, Chrome določi, kateri veliki skupini oseb ali »kohorti« je vaša nedavna dejavnost brskanja najbolj podobna. Izdajatelji lahko izberejo oglase za skupino in vaša dejavnost brskanja je zasebna v napravi. Skupina se posodobi vsak dan.}=1{Če je ta kontrolnik vklopljen in stanje aktivno, Chrome določi, kateri veliki skupini oseb ali »kohorti« je vaša nedavna dejavnost brskanja najbolj podobna. Izdajatelji lahko izberejo oglase za skupino in vaša dejavnost brskanja je zasebna v napravi. Skupina se posodobi vsak dan.}one{Če je ta kontrolnik vklopljen in stanje aktivno, Chrome določi, kateri veliki skupini oseb ali »kohorti« je vaša nedavna dejavnost brskanja najbolj podobna. Izdajatelji lahko izberejo oglase za skupino in vaša dejavnost brskanja je zasebna v napravi. Skupina se posodobi vsak {NUM_DAYS} dan.}two{Če je ta kontrolnik vklopljen in stanje aktivno, Chrome določi, kateri veliki skupini oseb ali »kohorti« je vaša nedavna dejavnost brskanja najbolj podobna. Izdajatelji lahko izberejo oglase za skupino in vaša dejavnost brskanja je zasebna v napravi. Skupina se posodobi vsak {NUM_DAYS} dneva.}few{Če je ta kontrolnik vklopljen in stanje aktivno, Chrome določi, kateri veliki skupini oseb ali »kohorti« je vaša nedavna dejavnost brskanja najbolj podobna. Izdajatelji lahko izberejo oglase za skupino in vaša dejavnost brskanja je zasebna v napravi. Skupina se posodobi vsak {NUM_DAYS} dni.}other{Če je ta kontrolnik vklopljen in stanje aktivno, Chrome določi, kateri veliki skupini oseb ali »kohorti« je vaša nedavna dejavnost brskanja najbolj podobna. Izdajatelji lahko izberejo oglase za skupino in vaša dejavnost brskanja je zasebna v napravi. Skupina se posodobi vsak {NUM_DAYS} dni.}}</translation>
@@ -911,6 +912,7 @@
 <translation id="3427342743765426898">&amp;Uveljavi urejanje</translation>
 <translation id="342781501876943858">Chromium priporoča, da ponastavite geslo, če ste ga uporabljali tudi na drugih spletnih mestih.</translation>
 <translation id="3428151540071562330">Eden ali več URI-jev strežniških predlog pravilnika DnsOverHttpsTemplates je neveljaven in ne bo uporabljen.</translation>
+<translation id="3431216045099978607">Pritisnite |<ph name="ACCELERATOR" />| za izhod iz celozaslonskega načina in prikaz prenosa.</translation>
 <translation id="3431636764301398940">Shrani to kartico v tej napravi</translation>
 <translation id="3432601291244612633">Zapri stran</translation>
 <translation id="3435738964857648380">Varnost</translation>
@@ -2057,6 +2059,7 @@
 <translation id="6591833882275308647">Naprava <ph name="DEVICE_TYPE" /> ni upravljana</translation>
 <translation id="6592952801936330159">Gumb za upravljanje nastavitev spletnega mesta, pritisnite Enter, če želite upravljati dovoljenja in podatke, shranjene na spletnih mestih v Chromovih nastavitvah.</translation>
 <translation id="6596325263575161958">Možnosti šifriranja</translation>
+<translation id="6599642189720630047">Spremljani izdelki</translation>
 <translation id="6609880536175561541">Prc7 (Envelope)</translation>
 <translation id="6611723696964473273">Gospodarske novice</translation>
 <translation id="6612010098632894193">Spletni videoposnetki</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index e26ebdc..b4ec01c7 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Lokacija je blokirana</translation>
 <translation id="2042213636306070719">7. fioka</translation>
 <translation id="204357726431741734">Prijavite se da biste koristili lozinke sačuvane na Google nalogu</translation>
+<translation id="2048261947532620704">Stranica se prevodi</translation>
 <translation id="205212645995975601">Roštilj</translation>
 <translation id="2053111141626950936">Stranice na jeziku <ph name="LANGUAGE" /> neće biti prevedene.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Kada je ova kontrola uključena i status je aktivan, Chrome određuje veliku grupu ljudi, ili kohortu, kojoj su vaše nedavne aktivnosti pregledanja najsličnije. Oglašavači mogu da biraju oglase za grupu i vaše aktivnosti pregledanja ostaju privatne na uređaju. Grupa se ažurira svakog dana.}=1{Kada je ova kontrola uključena i status je aktivan, Chrome određuje veliku grupu ljudi, ili kohortu, kojoj su vaše nedavne aktivnosti pregledanja najsličnije. Oglašavači mogu da biraju oglase za grupu i vaše aktivnosti pregledanja ostaju privatne na uređaju. Grupa se ažurira svakog dana.}one{Kada je ova kontrola uključena i status je aktivan, Chrome određuje veliku grupu ljudi, ili kohortu, kojoj su vaše nedavne aktivnosti pregledanja najsličnije. Oglašavači mogu da biraju oglase za grupu i vaše aktivnosti pregledanja ostaju privatne na uređaju. Grupa se ažurira na {NUM_DAYS} dan.}few{Kada je ova kontrola uključena i status je aktivan, Chrome određuje veliku grupu ljudi, ili kohortu, kojoj su vaše nedavne aktivnosti pregledanja najsličnije. Oglašavači mogu da biraju oglase za grupu i vaše aktivnosti pregledanja ostaju privatne na uređaju. Grupa se ažurira na {NUM_DAYS} dana.}other{Kada je ova kontrola uključena i status je aktivan, Chrome određuje veliku grupu ljudi, ili kohortu, kojoj su vaše nedavne aktivnosti pregledanja najsličnije. Oglašavači mogu da biraju oglase za grupu i vaše aktivnosti pregledanja ostaju privatne na uređaju. Grupa se ažurira na {NUM_DAYS} dana.}}</translation>
@@ -911,6 +912,7 @@
 <translation id="3427342743765426898">&amp;Ponovi izmenu</translation>
 <translation id="342781501876943858">Chromium vam preporučuje da resetujete lozinku ako ste je koristili na drugim sajtovima.</translation>
 <translation id="3428151540071562330">Jedan ili više URI-ja šablona DnsOverHttpsTemplates servera su nevažeći i neće se koristiti.</translation>
+<translation id="3431216045099978607">Pritisnite |<ph name="ACCELERATOR" />| da biste izašli iz režima celog ekrana i videli preuzimanje.</translation>
 <translation id="3431636764301398940">Sačuvaj ovu karticu na ovom uređaju</translation>
 <translation id="3432601291244612633">Zatvori stranicu</translation>
 <translation id="3435738964857648380">Bezbednost</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 2a9a777..eddee1d30 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Локација је блокирана</translation>
 <translation id="2042213636306070719">7. фиока</translation>
 <translation id="204357726431741734">Пријавите се да бисте користили лозинке сачуване на Google налогу</translation>
+<translation id="2048261947532620704">Страница се преводи</translation>
 <translation id="205212645995975601">Роштиљ</translation>
 <translation id="2053111141626950936">Странице на језику <ph name="LANGUAGE" /> неће бити преведене.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Када је ова контрола укључена и статус је активан, Chrome одређује велику групу људи, или кохорту, којој су ваше недавне активности прегледања најсличније. Оглашавачи могу да бирају огласе за групу и ваше активности прегледања остају приватне на уређају. Група се ажурира сваког дана.}=1{Када је ова контрола укључена и статус је активан, Chrome одређује велику групу људи, или кохорту, којој су ваше недавне активности прегледања најсличније. Оглашавачи могу да бирају огласе за групу и ваше активности прегледања остају приватне на уређају. Група се ажурира сваког дана.}one{Када је ова контрола укључена и статус је активан, Chrome одређује велику групу људи, или кохорту, којој су ваше недавне активности прегледања најсличније. Оглашавачи могу да бирају огласе за групу и ваше активности прегледања остају приватне на уређају. Група се ажурира на {NUM_DAYS} дан.}few{Када је ова контрола укључена и статус је активан, Chrome одређује велику групу људи, или кохорту, којој су ваше недавне активности прегледања најсличније. Оглашавачи могу да бирају огласе за групу и ваше активности прегледања остају приватне на уређају. Група се ажурира на {NUM_DAYS} дана.}other{Када је ова контрола укључена и статус је активан, Chrome одређује велику групу људи, или кохорту, којој су ваше недавне активности прегледања најсличније. Оглашавачи могу да бирају огласе за групу и ваше активности прегледања остају приватне на уређају. Група се ажурира на {NUM_DAYS} дана.}}</translation>
@@ -911,6 +912,7 @@
 <translation id="3427342743765426898">&amp;Понови измену</translation>
 <translation id="342781501876943858">Chromium вам препоручује да ресетујете лозинку ако сте је користили на другим сајтовима.</translation>
 <translation id="3428151540071562330">Један или више URI-ја шаблона DnsOverHttpsTemplates сервера су неважећи и неће се користити.</translation>
+<translation id="3431216045099978607">Притисните |<ph name="ACCELERATOR" />| да бисте изашли из режима целог екрана и видели преузимање.</translation>
 <translation id="3431636764301398940">Сачувај ову картицу на овом уређају</translation>
 <translation id="3432601291244612633">Затвори страницу</translation>
 <translation id="3435738964857648380">Безбедност</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index 7900279a..6938099 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Gör om Redigera</translation>
 <translation id="342781501876943858">Du rekommenderas att återställa lösenordet om du har återanvänt det på andra webbplatser.</translation>
 <translation id="3428151540071562330">Minst en av URI:erna i servermallen för DnsOverHttpsTemplates är ogiltig och kommer inte att användas.</translation>
+<translation id="3431216045099978607">Tryck på |<ph name="ACCELERATOR" />| för att avsluta helskärmsläget och se nedladdningen.</translation>
 <translation id="3431636764301398940">Spara kortet på enheten</translation>
 <translation id="3432601291244612633">Stäng sidan</translation>
 <translation id="3435738964857648380">Säkerhet</translation>
@@ -2057,6 +2058,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> hanteras inte</translation>
 <translation id="6592952801936330159">Knappen Hantera webbplatsinställningar, tryck på Retur om du vill hantera behörigheter och data som lagras på olika webbplatser i inställningarna för Chrome</translation>
 <translation id="6596325263575161958">Krypteringsalternativ</translation>
+<translation id="6599642189720630047">Bevakade produkter</translation>
 <translation id="6609880536175561541">Prc7 (kuvert)</translation>
 <translation id="6611723696964473273">Ekonominyheter</translation>
 <translation id="6612010098632894193">Onlinevideo</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 149244dd..d9eafd6b 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -646,6 +646,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" /> กด Tab ตามด้วย Enter เพื่อล้างประวัติการท่องเว็บ คุกกี้ แคช และอื่นๆ ในการตั้งค่า Chrome</translation>
 <translation id="2650446666397867134">การเข้าถึงไฟล์ถูกปฏิเสธ</translation>
 <translation id="2653659639078652383">ส่ง</translation>
+<translation id="2657637947725373811">{0,plural, =1{โอนไฟล์ลับใช่ไหม}other{โอนไฟล์ลับใช่ไหม}}</translation>
 <translation id="2660779039299703961">กิจกรรม</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{ไม่มี}=1{มีรหัสผ่าน 1 รายการ (สำหรับ <ph name="DOMAIN_LIST" />)}=2{มีรหัสผ่าน 2 รายการ (สำหรับ <ph name="DOMAIN_LIST" />)}other{มีรหัสผ่าน # รายการ (สำหรับ <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">ด้านบน</translation>
@@ -790,6 +791,7 @@
 <translation id="3108943290502734357">ถาดกลาง</translation>
 <translation id="3109728660330352905">คุณไม่มีสิทธิ์ดูหน้านี้</translation>
 <translation id="3113284927548439113">กะที่ 3</translation>
+<translation id="3115363211799416195">{0,plural, =1{ดาวน์โหลดไฟล์ลับใช่ไหม}other{ดาวน์โหลดไฟล์ลับใช่ไหม}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> กำหนดให้คุณสำรองข้อมูลและส่งคืน <ph name="DEVICE_TYPE" /> เครื่องนี้</translation>
 <translation id="3116158981186517402">แยกออกเป็นชั้นๆ</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -979,6 +981,7 @@
 <translation id="3615877443314183785">ป้อนวันที่หมดอายุที่ถูกต้อง</translation>
 <translation id="36224234498066874">ล้างข้อมูลการท่องเว็บ</translation>
 <translation id="362276910939193118">แสดงประวัติการเข้าชมทั้งหมด</translation>
+<translation id="3628905806504633297">{0,plural, =1{นโยบายของผู้ดูแลระบบไม่แนะนำให้โอนไฟล์นี้ไปยัง <ph name="DESTINATION_NAME" />}other{นโยบายของผู้ดูแลระบบไม่แนะนำให้โอนไฟล์เหล่านี้ไปยัง <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">หากโปรแกรมอยู่ในรายการที่ได้รับอนุญาตให้เข้าถึงเครือข่ายอยู่แล้ว
       ลองนำโปรแกรมออกจากรายการและเพิ่มกลับเข้าไปใหม่</translation>
 <translation id="3630699740441428070">ผู้ดูแลระบบของอุปกรณ์นี้ได้กำหนดค่าการเชื่อมต่อเครือข่ายของคุณ ซึ่งอาจทำให้เห็นการจราจรของข้อมูลในเครือข่าย รวมถึงเว็บไซต์ที่คุณเข้าชม</translation>
@@ -1338,6 +1341,7 @@
 <translation id="4607603470419975064">ปุ่มดูเคล็ดลับในการใช้ Chrome กด Enter เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์ต่างๆ ของ Chrome</translation>
 <translation id="4607608436550361748">ดูเคล็ดลับในการใช้ Chrome</translation>
 <translation id="4617273035598175554">ซอฟต์แวร์กราฟิกและแอนิเมชัน</translation>
+<translation id="4622292761762557753">โอนต่อไป</translation>
 <translation id="4627675673814409125">ตั้งค่านโยบายนี้ในระดับโปรไฟล์ Chrome ไม่ได้ และระบบจะไม่สนใจ</translation>
 <translation id="4628948037717959914">รูปภาพ</translation>
 <translation id="4631649115723685955">บริการคืนเงินที่ลิงก์อยู่</translation>
@@ -1653,6 +1657,7 @@
 <translation id="540969355065856584">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เนื่องจากใบรับรองความปลอดภัยไม่สามารถใช้ได้ในขณะนี้ ซึ่งอาจเป็นเพราะการกำหนดค่าที่ไม่ถูกต้องหรือมีผู้โจมตีที่ขัดขวางการเชื่อมต่อของคุณ</translation>
 <translation id="5412040515238827314">รูปแบบไม่ถูกต้อง: ควรมีรายการรูปแบบ</translation>
 <translation id="5412236728747081950">เว็บไซต์นี้รับข้อมูลความสนใจของคุณจาก Chrome เพื่อแสดงโฆษณาที่เกี่ยวข้องมากขึ้น</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">สแต็กเกอร์ 4</translation>
 <translation id="5421136146218899937">ล้างข้อมูลการท่องเว็บ...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> ต้องการส่งการแจ้งเตือนให้คุณ</translation>
@@ -2058,6 +2063,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> ของคุณไม่มีการจัดการ</translation>
 <translation id="6592952801936330159">ปุ่มจัดการการตั้งค่าเว็บไซต์ กด Enter เพื่อจัดการสิทธิ์และข้อมูลที่จัดเก็บในเว็บไซต์ต่างๆ ในการตั้งค่า Chrome</translation>
 <translation id="6596325263575161958">ตัวเลือกการเข้ารหัส</translation>
+<translation id="6599642189720630047">ผลิตภัณฑ์ที่ติดตาม</translation>
 <translation id="6609880536175561541">Prc7 (ซองจดหมาย)</translation>
 <translation id="6611723696964473273">ข่าวเศรษฐกิจ</translation>
 <translation id="6612010098632894193">วิดีโอออนไลน์</translation>
@@ -2585,6 +2591,7 @@
 <translation id="8004582292198964060">เบราว์เซอร์</translation>
 <translation id="8009225694047762179">จัดการรหัสผ่าน</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{ระบบจะบันทึกบัตรนี้และที่อยู่สำหรับการเรียกเก็บเงินของบัตร คุณจะใช้บัตรนี้ได้เมื่อลงชื่อเข้าใช้ <ph name="USER_EMAIL" />}other{ระบบจะบันทึกบัตรเหล่านี้และที่อยู่สำหรับการเรียกเก็บเงินของบัตร คุณจะใช้บัตรเหล่านี้ได้เมื่อลงชื่อเข้าใช้ <ph name="USER_EMAIL" />}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">ผู้โจมตีในเว็บไซต์นี้อาจหลอกล่อให้คุณทำบางสิ่งที่อันตราย เช่น การติดตั้งซอฟต์แวร์หรือเปิดเผยข้อมูลส่วนบุคคล (ตัวอย่างเช่น รหัสผ่าน หมายเลขโทรศัพท์ หรือบัตรเครดิต)</translation>
 <translation id="8026334261755873520">ล้างข้อมูลการท่องเว็บ</translation>
 <translation id="8027077570865220386">ถาด 15</translation>
@@ -2636,6 +2643,7 @@
 <translation id="8148608574971654810">เวอร์ชัน PDF:</translation>
 <translation id="8149426793427495338">คอมพิวเตอร์ของคุณเข้าสู่โหมดสลีปแล้ว</translation>
 <translation id="8150722005171944719">ไฟล์ที่ <ph name="URL" /> ไม่สามารถอ่านได้ เนื่องจากอาจถูกลบ ย้ายไปแล้ว หรือการอนุญาตของไฟล์อาจป้องกันการเข้าถึง</translation>
+<translation id="8153865548451212769">{0,plural, =1{นโยบายของผู้ดูแลระบบไม่แนะนำให้ดาวน์โหลดไฟล์นี้ไปยัง <ph name="DESTINATION_NAME" />}other{นโยบายของผู้ดูแลระบบไม่แนะนำให้ดาวน์โหลดไฟล์เหล่านี้ไปยัง <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">ออกจากเว็บไซต์</translation>
 <translation id="8163866351304776260">เจาะรูด้านซ้าย 4 รู</translation>
 <translation id="8175796834047840627">Chrome เสนอที่จะบันทึกบัตรลงในบัญชี Google ของคุณเพราะคุณลงชื่อเข้าใช้อยู่ คุณปรับเปลี่ยนลักษณะการทำงานนี้ได้ในการตั้งค่า</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 0be7c06..dd46d20e 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -421,6 +421,7 @@
 <translation id="2040894699575719559">Konum engellendi</translation>
 <translation id="2042213636306070719">Tepsi 7</translation>
 <translation id="204357726431741734">Google Hesabınızda kayıtlı şifreleri kullanmak için oturum açın</translation>
+<translation id="2048261947532620704">Sayfa çevriliyor</translation>
 <translation id="205212645995975601">Barbekü ve ızgara</translation>
 <translation id="2053111141626950936"><ph name="LANGUAGE" /> dilindeki sayfalar çevrilmeyecek.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Bu denetim açık ve durum etkin olduğunda Chrome, son tarama etkinliklerinizin en çok benzediği geniş kullanıcı grubu veya "kohort"u belirler. Reklamverenler grup için reklam seçebilirler ve tarama etkinliğiniz cihazınızda gizli tutulur. Grubunuz her gün güncellenir.}=1{Bu denetim açık ve durum etkin olduğunda Chrome, son tarama etkinliklerinizin en çok benzediği geniş kullanıcı grubu veya "kohort"u belirler. Reklamverenler grup için reklam seçebilirler ve tarama etkinliğiniz cihazınızda gizli tutulur. Grubunuz her gün güncellenir.}other{Bu denetim açık ve durum etkin olduğunda Chrome, son tarama etkinliklerinizin en çok benzediği geniş kullanıcı grubu veya "kohort"u belirler. Reklamverenler grup için reklam seçebilirler ve tarama etkinliğiniz cihazınızda gizli tutulur. Grubunuz {NUM_DAYS} günde bir güncellenir.}}</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index b052670b..e5386819 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -911,6 +911,7 @@
 <translation id="3427342743765426898">&amp;Повторити редагування</translation>
 <translation id="342781501876943858">Chromium радить скинути пароль, якщо ви застосовували його на інших сайтах.</translation>
 <translation id="3428151540071562330">Щонайменше один ідентифікатор URI шаблону сервера DnsOverHttpsTemplates недійсний і не використовуватиметься.</translation>
+<translation id="3431216045099978607">Натисніть клавішу |<ph name="ACCELERATOR" />|, щоб вийти з повноекранного режиму й переглянути завантажений файл.</translation>
 <translation id="3431636764301398940">Зберегти цю картку на пристрої</translation>
 <translation id="3432601291244612633">Закрити сторінку</translation>
 <translation id="3435738964857648380">Безпека</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index c75d59a..0ddce1b4 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -909,6 +909,7 @@
 <translation id="3427342743765426898">恢复修改(&amp;R)</translation>
 <translation id="342781501876943858">如果您在其他网站上重复使用了您的密码,Chromium 建议您重置该密码。</translation>
 <translation id="3428151540071562330">一个或多个 DnsOverHttpsTemplates 服务器模板 URI 无效,因此不会被使用。</translation>
+<translation id="3431216045099978607">按 |<ph name="ACCELERATOR" />| 键即可退出全屏模式以查看下载内容。</translation>
 <translation id="3431636764301398940">将此卡的信息保存到该设备</translation>
 <translation id="3432601291244612633">关闭页面</translation>
 <translation id="3435738964857648380">安全</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 7ce038e..a8d7a9f 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -912,6 +912,7 @@
 <translation id="3427342743765426898">重做編輯(&amp;R)</translation>
 <translation id="342781501876943858">如果你在其他網站上重複使用過你的密碼,Chromium 會建議你重設密碼。</translation>
 <translation id="3428151540071562330">一或多個 DnsOverHttpsTemplates 伺服器範本 URI 無效,因此系統不會採用這些伺服器範本 URI。</translation>
+<translation id="3431216045099978607">按下 |<ph name="ACCELERATOR" />| 鍵以結束全螢幕模式並查看下載內容。</translation>
 <translation id="3431636764301398940">將這張信用卡儲存到這個裝置</translation>
 <translation id="3432601291244612633">關閉頁面</translation>
 <translation id="3435738964857648380">安全性</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index 799c3a3..de1d871 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -909,6 +909,7 @@
 <translation id="3427342743765426898">&amp;Yenza futhi ukuhlela</translation>
 <translation id="342781501876943858">I-Chromium incoma ukusetha kabusha iphasiwedi yakho uma uphinde wayisebenzisa kwamanye amasayithi.</translation>
 <translation id="3428151540071562330">Eyodwa noma ngaphezulu yama-URL wethempulethi leseva le-DnsOverHttpsTemplates alivumelekile futhi ngeke lisetshenziswe.</translation>
+<translation id="3431216045099978607">Cindezela okuthi |<ph name="ACCELERATOR" />| ukuze uphume esikrinini esigcwele futhi ubone ukudawuniloda.</translation>
 <translation id="3431636764301398940">Londoloza leli khadi kule divayisi</translation>
 <translation id="3432601291244612633">Vala ikhasi</translation>
 <translation id="3435738964857648380">Ukuvikela</translation>
diff --git a/components/test/android/OWNERS b/components/test/android/OWNERS
index e822ec4..d3930d9 100644
--- a/components/test/android/OWNERS
+++ b/components/test/android/OWNERS
@@ -1,2 +1 @@
-jaekyun@chromium.org
 tedchoc@chromium.org
diff --git a/components/undo/OWNERS b/components/undo/OWNERS
index 40c070a..90b3e80 100644
--- a/components/undo/OWNERS
+++ b/components/undo/OWNERS
@@ -1,2 +1 @@
 sky@chromium.org
-tom.cassiotis@gmail.com
diff --git a/components/url_formatter/OWNERS b/components/url_formatter/OWNERS
index 9e47a6f..a403c422 100644
--- a/components/url_formatter/OWNERS
+++ b/components/url_formatter/OWNERS
@@ -2,7 +2,6 @@
 meacer@chromium.org
 cthomp@chromium.org
 estark@chromium.org
-felt@chromium.org
 
 # Changes to FormatUrlForSecurityDisplay and FormatOriginForSecurityDisplay
 # require a security review to avoid introducing security bugs.
diff --git a/components/url_pattern_index/OWNERS b/components/url_pattern_index/OWNERS
index 1ef21d2..fecf34aa 100644
--- a/components/url_pattern_index/OWNERS
+++ b/components/url_pattern_index/OWNERS
@@ -1,5 +1,4 @@
 csharrison@chromium.org
 engedy@chromium.org
-pkalinnikov@chromium.org
 
 # Note that this folder is also heavily used by UI>Browser>AdFilter
diff --git a/content/browser/permissions/permission_controller_impl.cc b/content/browser/permissions/permission_controller_impl.cc
index d8c23c0..2368b747 100644
--- a/content/browser/permissions/permission_controller_impl.cc
+++ b/content/browser/permissions/permission_controller_impl.cc
@@ -10,6 +10,7 @@
 #include "content/browser/permissions/permission_util.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/permission_controller.h"
 #include "content/public/browser/permission_controller_delegate.h"
 #include "content/public/browser/permission_result.h"
 #include "content/public/browser/render_frame_host.h"
@@ -509,6 +510,18 @@
   return id;
 }
 
+PermissionControllerImpl::SubscriptionId
+PermissionControllerImpl::SubscribePermissionStatusChange(
+    PermissionType permission,
+    RenderProcessHost* render_process_host,
+    const url::Origin& requesting_origin,
+    const base::RepeatingCallback<void(blink::mojom::PermissionStatus)>&
+        callback) {
+  return SubscribePermissionStatusChange(permission, render_process_host,
+                                         /*render_frame_host=*/nullptr,
+                                         requesting_origin.GetURL(), callback);
+}
+
 void PermissionControllerImpl::UnsubscribePermissionStatusChange(
     SubscriptionId subscription_id) {
   Subscription* subscription = subscriptions_.Lookup(subscription_id);
diff --git a/content/browser/permissions/permission_controller_impl.h b/content/browser/permissions/permission_controller_impl.h
index b332fca..401aba4 100644
--- a/content/browser/permissions/permission_controller_impl.h
+++ b/content/browser/permissions/permission_controller_impl.h
@@ -70,8 +70,15 @@
       const GURL& requesting_origin,
       const base::RepeatingCallback<void(blink::mojom::PermissionStatus)>&
           callback);
+  SubscriptionId SubscribePermissionStatusChange(
+      PermissionType permission,
+      RenderProcessHost* render_process_host,
+      const url::Origin& requesting_origin,
+      const base::RepeatingCallback<void(blink::mojom::PermissionStatus)>&
+          callback) override;
 
-  void UnsubscribePermissionStatusChange(SubscriptionId subscription_id);
+  void UnsubscribePermissionStatusChange(
+      SubscriptionId subscription_id) override;
 
  private:
   friend class PermissionControllerImplTest;
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 034915c..37434a2 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -2867,6 +2867,10 @@
   return weak_factory_.GetSafeRef();
 }
 
+bool NavigationRequest::ExistingDocumentWasDiscarded() const {
+  return commit_params_->was_discarded;
+}
+
 void NavigationRequest::CheckForIsolationOptIn(const GURL& url) {
   // Check whether an origin-keyed agent cluster is explicitly requested, either
   // opting in or out, before attempting to isolate it. If an explicit request
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h
index dfd6978..e7fd7ab2 100644
--- a/content/browser/renderer_host/navigation_request.h
+++ b/content/browser/renderer_host/navigation_request.h
@@ -394,6 +394,7 @@
   const base::android::JavaRef<jobject>& GetJavaNavigationHandle() override;
 #endif
   base::SafeRef<NavigationHandle> GetSafeRef() override;
+  bool ExistingDocumentWasDiscarded() const override;
 
   // mojom::NavigationRendererCancellationListener implementation
   void RendererCancellationWindowEnded() override;
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h
index 650d621..b59ab311 100644
--- a/content/public/browser/navigation_handle.h
+++ b/content/public/browser/navigation_handle.h
@@ -578,6 +578,11 @@
   // navigation from committing, or nullptr if the navigation isn't currently
   // blocked on a CommitDeferringCondition.
   virtual CommitDeferringCondition* GetCommitDeferringConditionForTesting() = 0;
+
+  // Returns true if the navigation is a reload due to the existing document
+  // represented by the FrameTreeNode being previously discarded by the browser.
+  // This can be used as soon as the navigation begins.
+  virtual bool ExistingDocumentWasDiscarded() const = 0;
 };
 
 }  // namespace content
diff --git a/content/public/browser/permission_controller.h b/content/public/browser/permission_controller.h
index f147bc4..c200560 100644
--- a/content/public/browser/permission_controller.h
+++ b/content/public/browser/permission_controller.h
@@ -99,6 +99,16 @@
   // Sets the permission back to its default for the `origin`.
   virtual void ResetPermission(blink::PermissionType permission,
                                const url::Origin& origin) = 0;
+
+  virtual SubscriptionId SubscribePermissionStatusChange(
+      blink::PermissionType permission,
+      RenderProcessHost* render_process_host,
+      const url::Origin& requesting_origin,
+      const base::RepeatingCallback<void(blink::mojom::PermissionStatus)>&
+          callback) = 0;
+
+  virtual void UnsubscribePermissionStatusChange(
+      SubscriptionId subscription_id) = 0;
 };
 
 }  // namespace content
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h
index eae0fc3..76ef5d06 100644
--- a/content/public/test/mock_navigation_handle.h
+++ b/content/public/test/mock_navigation_handle.h
@@ -211,6 +211,7 @@
   base::SafeRef<NavigationHandle> GetSafeRef() override {
     return weak_factory_.GetSafeRef();
   }
+  MOCK_METHOD(bool, ExistingDocumentWasDiscarded, (), (const));
 
   CommitDeferringCondition* GetCommitDeferringConditionForTesting() override {
     return nullptr;
diff --git a/content/public/test/mock_permission_controller.cc b/content/public/test/mock_permission_controller.cc
index 645e9f9..85da71d 100644
--- a/content/public/test/mock_permission_controller.cc
+++ b/content/public/test/mock_permission_controller.cc
@@ -25,4 +25,7 @@
 
 void MockPermissionController::ResetPermission(blink::PermissionType permission,
                                                const url::Origin& origin) {}
+
+void MockPermissionController::UnsubscribePermissionStatusChange(
+    SubscriptionId subscription_id) {}
 }  // namespace content
diff --git a/content/public/test/mock_permission_controller.h b/content/public/test/mock_permission_controller.h
index b940ff58..d8fa33a 100644
--- a/content/public/test/mock_permission_controller.h
+++ b/content/public/test/mock_permission_controller.h
@@ -65,6 +65,16 @@
       override;
   void ResetPermission(blink::PermissionType permission,
                        const url::Origin& origin) override;
+
+  MOCK_METHOD4(SubscribePermissionStatusChange,
+               SubscriptionId(blink::PermissionType permission,
+                              RenderProcessHost* render_process_host,
+                              const url::Origin& requesting_origin,
+                              const base::RepeatingCallback<void(
+                                  blink::mojom::PermissionStatus)>& callback));
+
+  void UnsubscribePermissionStatusChange(
+      SubscriptionId subscription_id) override;
 };
 
 }  // namespace content
diff --git a/content/renderer/accessibility/ax_tree_distiller.cc b/content/renderer/accessibility/ax_tree_distiller.cc
index 9002748..954a9dd 100644
--- a/content/renderer/accessibility/ax_tree_distiller.cc
+++ b/content/renderer/accessibility/ax_tree_distiller.cc
@@ -19,8 +19,6 @@
 
 namespace {
 
-static constexpr int kMaxNodes = 5000;
-
 // TODO: Consider moving this to AXNodeProperties.
 static const ax::mojom::Role kContentRoles[]{
     ax::mojom::Role::kHeading,
@@ -136,8 +134,11 @@
   ui::AXMode ax_mode =
       ui::AXMode::kWebContents | ui::AXMode::kHTML | ui::AXMode::kScreenReader;
   AXTreeSnapshotterImpl snapshotter(render_frame_, ax_mode);
+  // Setting max_node_count = 0 means there is no max.
+  // TODO(crbug.com/1266555): Set a timeout to ensure that huge pages do not
+  // cause the snapshotter to hang.
   snapshotter.Snapshot(
-      /* exclude_offscreen= */ false, kMaxNodes,
+      /* exclude_offscreen= */ false, /* max_node_count= */ 0,
       /* timeout= */ {}, snapshot_.get());
 }
 
diff --git a/gpu/command_buffer/client/BUILD.gn b/gpu/command_buffer/client/BUILD.gn
index 6b39c77..77bfd14 100644
--- a/gpu/command_buffer/client/BUILD.gn
+++ b/gpu/command_buffer/client/BUILD.gn
@@ -2,9 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//components/nacl/toolchain.gni")
 import("//ui/gl/features.gni")
 
-if (!is_nacl) {
+if (!is_nacl && !is_minimal_toolchain) {
   import("//skia/features.gni")
 }
 
@@ -95,7 +96,7 @@
   ]
 
   # These files now rely on Skia which isn't allowed as a dependency in nacl builds.
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     sources += [
       "shared_image_interface.cc",
       "shared_image_interface.h",
@@ -235,13 +236,14 @@
     ":gles2_cmd_helper",
     ":gles2_interface",
     "//base",
+    "//components/nacl/common:buildflags",
     "//gpu/command_buffer/common",
     "//gpu/command_buffer/common:gles2",
     "//gpu/command_buffer/common:gles2_utils",
     "//ui/gfx/geometry",
   ]
 
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     deps += [
       "//components/viz/common:resource_format",
       "//ui/gfx:color_space",
@@ -338,6 +340,7 @@
     ":gles2_cmd_helper",
     ":gles2_interface",
     "//base",
+    "//components/nacl/common:buildflags",
     "//gpu/command_buffer/common",
     "//gpu/command_buffer/common:gles2",
     "//gpu/command_buffer/common:gles2_utils",
diff --git a/gpu/command_buffer/client/DEPS b/gpu/command_buffer/client/DEPS
index 516d9f6..aa9d3f02 100644
--- a/gpu/command_buffer/client/DEPS
+++ b/gpu/command_buffer/client/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+ui/latency",
   "+cc/paint",
+  "+components/nacl/common/buildflags.h",
   "+third_party/skia",
   "+components/viz/common/resources/resource_format.h",
   "+components/viz/common/resources/resource_format_utils.h",
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index 5c61920b..e97c3be 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -37,6 +37,7 @@
 #include "base/trace_event/process_memory_dump.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
+#include "components/nacl/common/buildflags.h"
 #include "gpu/command_buffer/client/buffer_tracker.h"
 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
 #include "gpu/command_buffer/client/gpu_control.h"
@@ -56,9 +57,9 @@
 #include "ui/gfx/geometry/rect_f.h"
 #include "ui/gl/gpu_preference.h"
 
-#if !defined(__native_client__)
-#include "ui/gfx/color_space.h"
-#include "ui/gfx/ipc/color/gfx_param_traits.h"
+#if !defined(__native_client__) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
+#include "ui/gfx/color_space.h"                 // nogncheck
+#include "ui/gfx/ipc/color/gfx_param_traits.h"  // nogncheck
 #endif
 
 #if defined(GPU_CLIENT_DEBUG)
@@ -82,7 +83,8 @@
 //
 // If it was up to us we'd just always write to the destination but the OpenGL
 // spec defines the behavior of OpenGL functions, not us. :-(
-#if defined(__native_client__) || defined(GLES2_CONFORMANCE_TESTS)
+#if defined(__native_client__) || defined(GLES2_CONFORMANCE_TESTS) || \
+    BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 #define GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION_ASSERT(v)
 #define GPU_CLIENT_DCHECK(v)
 #elif defined(GPU_DCHECK)
@@ -5924,7 +5926,7 @@
                      << height << ", " << scale_factor << ", " << alpha << ")");
   // Including gfx::ColorSpace would bring Skia and a lot of other code into
   // NaCl's IRT, so just leave the color space unspecified.
-#if !defined(__native_client__)
+#if !defined(__native_client__) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
   if (gl_color_space) {
     gfx::ColorSpace gfx_color_space =
         *reinterpret_cast<const gfx::ColorSpace*>(gl_color_space);
diff --git a/gpu/ipc/common/BUILD.gn b/gpu/ipc/common/BUILD.gn
index 39432cb..7a14e48 100644
--- a/gpu/ipc/common/BUILD.gn
+++ b/gpu/ipc/common/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/ui.gni")
+import("//components/nacl/toolchain.gni")
 import("//gpu/vulkan/features.gni")
 import("//mojo/public/tools/bindings/mojom.gni")
 
@@ -52,7 +53,7 @@
     "//ui/gfx/ipc/geometry",
   ]
 
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     deps += [ "//ui/gfx/ipc/skia" ]
   }
 }
@@ -158,7 +159,7 @@
     frameworks = [ "IOSurface.framework" ]
   }
 
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     deps += [ "//ui/gfx/ipc/skia" ]
   }
 
diff --git a/infra/config/groups/ios/OWNERS b/infra/config/groups/ios/OWNERS
index ebdd93e..6578fe4 100644
--- a/infra/config/groups/ios/OWNERS
+++ b/infra/config/groups/ios/OWNERS
@@ -1,4 +1,3 @@
 jeffyoon@google.com
 lindsayw@chromium.org
 zhaoyangli@chromium.org
-zhaoyangli@google.com
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
index 097d851a..f96e22f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium kan nie vir opdaterings kyk nie</translation>
 <translation id="5396916991083608703">Stel Chromium as verstek?</translation>
 <translation id="5521125884468363740">Meld aan en skakel sinkronisering aan om jou oortjies te sien van waar ook al jy Chromium gebruik</translation>
+<translation id="5522297504975449419">Sommige Chromium-kenmerke sal nie meer beskikbaar wees nie.</translation>
 <translation id="5573014823074921752">Chromium-wenk. Vir meer oortjieopsies, raak en hou die Wys Oortjies-knoppie op die nutsbalk aan die onderkant of bokant van jou skerm.</translation>
 <translation id="5700709190537129682">Chromium kan nie jou wagwoorde nagaan nie</translation>
 <translation id="5777187867430702742">Chromium-bladsy</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
index e06b3b1..224cce0 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
@@ -40,6 +40,7 @@
 <translation id="2918709798697875261">የእርስዎ ድርጅት ከChromium ዘግተው እንደወጡ እንዲቆዩ ይፈልጋል።</translation>
 <translation id="2942241131342758843">አገናኞችን ለመክፈት፣ ከመግብሮች ለመፈለግ እና የይለፍ ቃሎችን በራስ-ለመሙላት በሌሎች መተግበሪያዎች ውስጥ በነባሪነት Chromium ይጠቀሙ</translation>
 <translation id="2977470724722393594">Chromium የተዘመነ ነው</translation>
+<translation id="3102849287235003384">በሁሉም ድር ጣቢያዎች ላይ የእርስዎን የGoogle መለያ ዘግተው ለመውጣት <ph name="BEGIN_LINK" />ከChromium ዘግተው ይውጡ<ph name="END_LINK" />።</translation>
 <translation id="3256316712990552818">ወደ Chromium ተቀድቷል</translation>
 <translation id="3344973607274501920">Chromium የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። የበይነመረብ ግንኙነትዎን ለመፈተሽ ይሞክሩ።</translation>
 <translation id="3472200483164753384">በChromium Canary ላይ አይደገፍም</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
index ef3e55c..1ec7b88 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium güncəlləmələri yoxlaya bilmir</translation>
 <translation id="5396916991083608703">Chromium defolt olaraq ayarlansın?</translation>
 <translation id="5521125884468363740">Chromium istifadə etdiyiniz hər yerdən tabları görmək üçün daxil olun və sinxronizasiyanı aktiv edin</translation>
+<translation id="5522297504975449419">Bəzi Chromium funksiyaları daha əlçatan olmayacaq.</translation>
 <translation id="5573014823074921752">Chromium məsləhəti. Daha çox tab seçimləri üçün ekranın aşağısında və ya yuxarısında yerləşən alət panelində "Tabları Göstərin" düyməsinə basıb saxlayın.</translation>
 <translation id="5700709190537129682">Chromium parollarınızı yoxlaya bilmir</translation>
 <translation id="5777187867430702742">Chromium Səhifəsi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
index 38b4ac9..2f6dd7b8 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Организацията ви изисква да не влизате в профила си в Chromium.</translation>
 <translation id="2942241131342758843">Използвайте Chromium по подразбиране за отваряне на връзки, търсене от приспособления и автоматично попълване на пароли в други приложения</translation>
 <translation id="2977470724722393594">Chromium е актуален</translation>
+<translation id="3102849287235003384">За да излезете от профила си в Google на всички уебсайтове, <ph name="BEGIN_LINK" />излезте от профила си в Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Копирано в Chromium</translation>
 <translation id="3344973607274501920">Chromium не успя да провери паролите ви. Проверете връзката си с интернет.</translation>
 <translation id="3472200483164753384">Не се поддържа от Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
index 2932b11..2edc5bf 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Din organisation kræver, at du forbliver logget ud af Chromium.</translation>
 <translation id="2942241131342758843">Brug som standard Chromium til at åbne links, søge efter widgets og udfylde adgangskoder automatisk i andre apps</translation>
 <translation id="2977470724722393594">Chromium er opdateret</translation>
+<translation id="3102849287235003384">Hvis du vil logge ud af din Google-konto på alle websites, skal du <ph name="BEGIN_LINK" />logge ud af Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Kopieret til Chromium</translation>
 <translation id="3344973607274501920">Chromium kunne ikke tjekke dine adgangskoder. Prøv at tjekke din internetforbindelse.</translation>
 <translation id="3472200483164753384">Understøttes ikke i Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
index 4375d9c..9edb22f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium can't check for updates</translation>
 <translation id="5396916991083608703">Set Chromium as default?</translation>
 <translation id="5521125884468363740">To see your tabs from wherever you use Chromium, sign in and turn on sync</translation>
+<translation id="5522297504975449419">Some Chromium features won’t be available anymore.</translation>
 <translation id="5573014823074921752">Chromium tip. For more tab options, touch and hold the Show Tabs button in the toolbar, which is at the bottom or top of your screen.</translation>
 <translation id="5700709190537129682">Chromium can't check your passwords</translation>
 <translation id="5777187867430702742">Chromium page</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
index e6c68d7ba..c6fce67e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Tu organización requiere que no accedas a tu cuenta en Chromium.</translation>
 <translation id="2942241131342758843">Usa Chromium como tu navegador predeterminado para abrir vínculos, realizar búsquedas desde widgets y autocompletar contraseñas en otras apps</translation>
 <translation id="2977470724722393594">Chromium está actualizado.</translation>
+<translation id="3102849287235003384">Para salir de tu Cuenta de Google en todos los sitios web, debes <ph name="BEGIN_LINK" />salir de Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Se copió en Chromium.</translation>
 <translation id="3344973607274501920">Chromium no pudo revisar las contraseñas. Revisa la conexión a Internet.</translation>
 <translation id="3472200483164753384">No es compatible en Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
index 5893948..57c3b33c 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Chromium-en saioa amaituta edukitzea eskatzen dizu zure erakundeak.</translation>
 <translation id="2942241131342758843">Erabili Chromium modu lehenetsian estekak irekitzeko, widgetetatik bilaketak egiteko eta beste aplikazio batzuetako pasahitzak automatikoki betetzeko</translation>
 <translation id="2977470724722393594">Eguneratuta dago Chromium</translation>
+<translation id="3102849287235003384">Google-ko kontuko saioa webgune guztietan amaitzeko, <ph name="BEGIN_LINK" />amaitu Chromium-eko saioa<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Chromium-en kopiatu da</translation>
 <translation id="3344973607274501920">Chromium-ek ezin izan ditu egiaztatu pasahitzak. Egiaztatu Internetera konektatuta zaudela.</translation>
 <translation id="3472200483164753384">Ez da bateragarria Chromium Canary-rekin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
index b8c93eb0..bd3134d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
@@ -66,6 +66,7 @@
 <translation id="5308226104666789935">Chromium ne parvient pas à rechercher les mises à jour</translation>
 <translation id="5396916991083608703">Utiliser Chromium par défaut ?</translation>
 <translation id="5521125884468363740">Pour retrouver vos onglets Chromium quel que soit l'appareil utilisé, connectez-vous et activez la synchronisation</translation>
+<translation id="5522297504975449419">Certaines fonctionnalités de Chromium ne seront plus disponibles.</translation>
 <translation id="5573014823074921752">Astuce Chromium : Pour afficher plus d'options d'onglets, appuyez de manière prolongée sur le bouton "Afficher les onglets" situé dans la barre d'outils affichée dans la partie inférieure ou supérieure de l'écran.</translation>
 <translation id="5700709190537129682">Chromium ne parvient pas à vérifier vos mots de passe</translation>
 <translation id="5777187867430702742">Page Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
index c895bfe5..dbf3a7e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">A túa organización require que manteñas a sesión pechada en Chromium.</translation>
 <translation id="2942241131342758843">Usa Chromium de forma predeterminada para abrir ligazóns, realizar buscas desde widgets e autocompletar contrasinais noutras aplicacións</translation>
 <translation id="2977470724722393594">Chromium está actualizado</translation>
+<translation id="3102849287235003384">Para pechar sesión na túa Conta de Google en todos os sitios web, <ph name="BEGIN_LINK" />pecha sesión en Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Copiouse en Chromium</translation>
 <translation id="3344973607274501920">Chromium non puido comprobar os teus contrasinais. Verifica a conexión a Internet.</translation>
 <translation id="3472200483164753384">Non compatible en Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
index ea366e0f..de28505e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Organisasi mengharuskan Anda tetap logout dari Chromium.</translation>
 <translation id="2942241131342758843">Gunakan Chromium secara default untuk membuka link, menelusuri dari widget, dan mengisi otomatis sandi di aplikasi lainnya</translation>
 <translation id="2977470724722393594">Chromium sudah diperbarui</translation>
+<translation id="3102849287235003384">Untuk logout dari Akun Google Anda di semua situs, <ph name="BEGIN_LINK" />logout dari Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Disalin ke Chromium</translation>
 <translation id="3344973607274501920">Chromium tidak dapat memeriksa sandi Anda. Coba periksa koneksi internet Anda.</translation>
 <translation id="3472200483164753384">Tidak didukung di Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
index 9b05e82..2f2aa46 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">組織が Chromium にログインしないように求めています。</translation>
 <translation id="2942241131342758843">Chromium を既定に設定すると、リンクの表示やウィジェットからの検索、他のアプリでのパスワードの自動入力に使用できるようになります</translation>
 <translation id="2977470724722393594">Chromium は最新版です</translation>
+<translation id="3102849287235003384">すべてのウェブサイトで Google アカウントからログアウトするには、<ph name="BEGIN_LINK" />Chromium からログアウト<ph name="END_LINK" />します。</translation>
 <translation id="3256316712990552818">Chromium にコピー済み</translation>
 <translation id="3344973607274501920">Chromium でパスワードを確認できませんでした。インターネット接続を確認してみてください。</translation>
 <translation id="3472200483164753384">Chromium Canary ではサポートされていません</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
index 5c1ef84..68c4623 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">ស្ថាប័នរបស់អ្នក​តម្រូវឱ្យអ្នក​នៅបន្តចេញពីគណនី​នៅលើ Chromium។</translation>
 <translation id="2942241131342758843">ប្រើ Chromium តាមលំនាំដើម ដើម្បីបើកតំណ ស្វែងរក​ពីធាតុក្រាហ្វិក និងបំពេញ​ពាក្យសម្ងាត់ដោយស្វ័យ​ប្រវត្តិនៅក្នុងកម្មវិធី​ផ្សេងទៀត</translation>
 <translation id="2977470724722393594">Chromium នេះជា​កំណែថ្មី​ហើយ</translation>
+<translation id="3102849287235003384">ដើម្បីចេញ​ពី​គណនី Google របស់អ្នក​នៅលើ​គ្រប់​គេហទំព័រ សូម​<ph name="BEGIN_LINK" />ចេញពី Chromium<ph name="END_LINK" />។</translation>
 <translation id="3256316712990552818">បានថតចម្លទៅ Chromium</translation>
 <translation id="3344973607274501920">Chromium មិនអាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមសាកល្បងពិនិត្យ​ការតភ្ជាប់អ៊ីនធឺណិត​របស់អ្នក។</translation>
 <translation id="3472200483164753384">មិនអាចប្រើ​នៅលើ Chromium Canary បានទេ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
index 469e9b4..f1987f4 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">조직에서 Chromium 로그아웃 상태를 유지할 것을 요청합니다.</translation>
 <translation id="2942241131342758843">Chromium을 다른 앱에서 링크를 열고, 위젯에서 검색하고, 비밀번호를 자동 완성할 기본값으로 사용합니다.</translation>
 <translation id="2977470724722393594">Chromium이 최신 버전임</translation>
+<translation id="3102849287235003384">웹사이트에 로그인되어 있는 Google 계정에서 모두 로그아웃하려면 <ph name="BEGIN_LINK" />Chromium에서 로그아웃<ph name="END_LINK" />하세요.</translation>
 <translation id="3256316712990552818">Chromium에 복사됨</translation>
 <translation id="3344973607274501920">Chromium에서 비밀번호를 확인할 수 없습니다. 인터넷 연결 상태를 확인하세요.</translation>
 <translation id="3472200483164753384">Chromium Canary에서 지원되지 않습니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
index c86a5fe7..419cbfc 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">ອົງການຂອງທ່ານກຳນົດໃຫ້ທ່ານສືບຕໍ່ອອກຈາກລະບົບ Chromium.</translation>
 <translation id="2942241131342758843">ໃຊ້ Chromium ເປັນຄ່າເລີ່ມຕົ້ນເພື່ອເປີດລິ້ງ, ຊອກຫາຈາກວິດເຈັດ ແລະ ການຕື່ມຂໍ້ມູນລະຫັດຜ່ານອັດຕະໂນມັດໃນແອັບອື່ນໆ</translation>
 <translation id="2977470724722393594">Chromium ແມ່ນເວີຊັນໃໝ່ຫຼ້າສຸດແລ້ວ</translation>
+<translation id="3102849287235003384">ເພື່ອອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານຢູ່ເວັບໄຊທ໌ທັງໝົດ, ກະລຸນາ <ph name="BEGIN_LINK" />ອອກຈາກລະບົບ Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">ອັດ​ສຳ​ເນົາ​ໄປ​ໃສ່ Chromium ແລ້ວ</translation>
 <translation id="3344973607274501920">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
 <translation id="3472200483164753384">ບໍ່ຮອງຮັບໃນ Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
index 58f8d27..a8b1fdf 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium не може да провери дали има ажурирања</translation>
 <translation id="5396916991083608703">Да се постави Chromium како стандарден?</translation>
 <translation id="5521125884468363740">За да ги гледате картичките секаде каде што користите Chromium, најавете се и вклучете синхронизација</translation>
+<translation id="5522297504975449419">Некои функции на Chromium веќе нема да бидат достапни.</translation>
 <translation id="5573014823074921752">Совет за Chromium: за повеќе опции за картичките, допрете го и задржете го копчето „Прикажи ги картичките“ во алатникот, што се наоѓа најдолу или најгоре на екранот.</translation>
 <translation id="5700709190537129682">Chromium не може да ги провери вашите лозинки</translation>
 <translation id="5777187867430702742">Страница на Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
index 28133005..c34429a1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Танай байгууллага танаас Chromium-с гарсан хэвээр байхыг шаардаж байна.</translation>
 <translation id="2942241131342758843">Холбооснуудыг нээх, жижиг хэрэгслүүдээс хайх, бусад аппад нууц үгнүүдийг автоматаар бөглөхийн тулд Chromium-г өгөгдмөлөөр ашиглана уу</translation>
 <translation id="2977470724722393594">Chromium-г шинэчилсэн байна</translation>
+<translation id="3102849287235003384">Бүх вебсайт дээр Google Бүртгэлээсээ гарахын тулд <ph name="BEGIN_LINK" />Chromium-с гарна уу<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Chromium руу хуулсан</translation>
 <translation id="3344973607274501920">Chromium таны нууц үгнүүдийг шалгаж чадсангүй. Интернэт холболтоо шалгаж үзнэ үү.</translation>
 <translation id="3472200483164753384">Chromium Канар дээр дэмжихгүй</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
index 6038e80..179fd39e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -66,6 +66,7 @@
 <translation id="5308226104666789935">Chromium अपडेट तपासू शकत नाही</translation>
 <translation id="5396916991083608703">Chromium ला डीफॉल्ट म्हणून सेट करायचे आहे का?</translation>
 <translation id="5521125884468363740">तुम्ही जेथून Chromium वापरत असाल तेथून तुमचे टॅब पाहण्यासाठी, साइन इन करा आणि सिंक सुरू करा</translation>
+<translation id="5522297504975449419">काही Chromium वैशिष्ट्ये यापुढे उपलब्ध असणार नाहीत.</translation>
 <translation id="5573014823074921752">Chromium टीप. आणखी टॅब पर्यायांसाठी, तुमच्या स्क्रीनच्या तळाशी किंवा सर्वात वर असलेल्या टूलबारवरील टॅब दाखवा बटणाला स्पर्श करा आणि धरून ठेवा.</translation>
 <translation id="5700709190537129682">Chromium तुमचे पासवर्ड तपासू शकत नाही</translation>
 <translation id="5777187867430702742">Chromium पेज</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
index c8a5e71..99965a1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Согласно правилам вашей организации, входить в Chromium запрещено.</translation>
 <translation id="2942241131342758843">Сделайте Chromium браузером по умолчанию, чтобы открывать ссылки, выполнять поиск прямо из виджетов и автозаполнять пароли в других приложениях.</translation>
 <translation id="2977470724722393594">Вы используете последнюю версию Chromium</translation>
+<translation id="3102849287235003384">Чтобы выйти из аккаунта Google на всех сайтах, <ph name="BEGIN_LINK" />выйдите из Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Скопировано в Chromium</translation>
 <translation id="3344973607274501920">Не удается проверить пароли в браузере Chromium. Проверьте подключение к Интернету.</translation>
 <translation id="3472200483164753384">Проверка не поддерживается в Chromium Canary.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
index a5d27ac7..e372e22 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Vaša organizácia vyžaduje, aby ste sa do prehliadača Chromium neprihlasovali.</translation>
 <translation id="2942241131342758843">Predvolene otvárajte odkazy, vyhľadávajte v miniaplikáciách a automaticky dopĺňajte heslá v iných aplikáciách pomocou prehliadača Chromium</translation>
 <translation id="2977470724722393594">Prehliadač Chromium bol aktualizovaný</translation>
+<translation id="3102849287235003384">Ak sa chcete odhlásiť zo svojho účtu Google na všetkých weboch, <ph name="BEGIN_LINK" />odhláste sa z prehliadača Chromium<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Skopírovaná do prehliadača Chromium</translation>
 <translation id="3344973607274501920">Prehliadaču Chromium sa nepodarilo skontrolovať heslá. Skontrolujte internetové pripojenie.</translation>
 <translation id="3472200483164753384">Nepodporované vo verzii Chromium Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
index 7f998f8..d5155a0 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Vaša organizacija zahteva, da niste prijavljeni v Chromium.</translation>
 <translation id="2942241131342758843">Uporabljajte Chromium kot privzeto možnost odpiranja povezav, iskanja v pripomočkih in samodejnega izpolnjevanja gesel v drugih aplikacijah.</translation>
 <translation id="2977470724722393594">Chromium je posodobljen</translation>
+<translation id="3102849287235003384">Če se želite odjaviti iz računa Google na vseh spletnih mestih, <ph name="BEGIN_LINK" />se odjavite iz Chromiuma<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Kopirano v Chromium</translation>
 <translation id="3344973607274501920">Chromiumu ni uspelo preveriti vaših gesel. Poskusite preveriti internetno povezavo.</translation>
 <translation id="3472200483164753384">Ni podprto v Chromiumu Canary</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
index 76d3694e..e926a1b1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -41,6 +41,7 @@
 <translation id="2918709798697875261">Chromiumமில் உங்கள் கணக்கிலிருந்து வெளியேறிய நிலையில் இருக்குமாறு உங்கள் நிறுவனம் கோருகிறது.</translation>
 <translation id="2942241131342758843">இணைப்புகளைத் திறப்பதற்கும், விட்ஜெட்டுகளில் தேடுவதற்கும், பிற ஆப்ஸில் கடவுச்சொற்களைத் தானாக நிரப்புவதற்கும் Chromiumமை இயல்பு உலாவியாகப் பயன்படுத்தலாம்</translation>
 <translation id="2977470724722393594">Chromium புதுப்பித்த நிலையில் உள்ளது</translation>
+<translation id="3102849287235003384">இணையதளங்கள் அனைத்திலும் உங்கள் Google கணக்கில் இருந்து வெளியேற <ph name="BEGIN_LINK" />Chromiumமில் இருந்து வெளியேறுங்கள்<ph name="END_LINK" />.</translation>
 <translation id="3256316712990552818">Chromium இல் நகலெடுக்கப்பட்டது</translation>
 <translation id="3344973607274501920">Chromium உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. இணைய இணைப்பைச் சரிபார்க்கவும்.</translation>
 <translation id="3472200483164753384">Chromium Canaryயில் ஆதரிக்கப்படாது</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
index 4907bf36..56c2ea8 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
@@ -66,6 +66,7 @@
 <translation id="5308226104666789935">Chromium ตรวจหาอัปเดตไม่ได้</translation>
 <translation id="5396916991083608703">ตั้งค่า Chromium เป็นค่าเริ่มต้นไหม</translation>
 <translation id="5521125884468363740">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อดูแท็บที่เปิดไว้จากอุปกรณ์ที่คุณใช้ Chromium</translation>
+<translation id="5522297504975449419">ฟีเจอร์บางอย่างของ Chromium จะใช้งานไม่ได้อีกต่อไป</translation>
 <translation id="5573014823074921752">เคล็ดลับสำหรับ Chromium ถ้าต้องการดูตัวเลือกแท็บเพิ่มเติม ให้แตะปุ่ม "แสดงแท็บ" ค้างไว้ในแถบเครื่องมือ ซึ่งอยู่ที่ด้านล่างหรือด้านบนของหน้าจอ</translation>
 <translation id="5700709190537129682">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้</translation>
 <translation id="5777187867430702742">หน้า Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
index 3630055..4721b26 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
@@ -41,7 +41,7 @@
 <translation id="2918709798697875261">您的機構要求您保持登出 Chromium。</translation>
 <translation id="2942241131342758843">預設使用 Chromium 來開啟連結、從小工具搜尋,以及在其他應用程式中自動填入密碼</translation>
 <translation id="2977470724722393594">Chromium 已是最新版本</translation>
-<translation id="3102849287235003384">如要從所有網站中登出 Google 帳戶,請<ph name="BEGIN_LINK" />登出 Chromium<ph name="END_LINK" />。</translation>
+<translation id="3102849287235003384">如要在所有網站上登出 Google 帳戶,請<ph name="BEGIN_LINK" />登出 Chromium<ph name="END_LINK" />。</translation>
 <translation id="3256316712990552818">已複製至 Chromium</translation>
 <translation id="3344973607274501920">Chromium 無法檢查密碼,請檢查互聯網連線。</translation>
 <translation id="3472200483164753384">Chromium Canary 上不支援此功能</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
index c06aa50..7159886 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Jou organisasie vereis dat jy aanmeld om Chrome te gebruik.</translation>
 <translation id="6054613632208573261">Gebruik Chrome by verstek</translation>
 <translation id="6063091872902370735">Laat Chrome-aanmelding toe</translation>
+<translation id="6110625574506755980">Sommige Chrome-kenmerke sal nie meer beskikbaar wees nie.</translation>
 <translation id="6181930887571472871">Skakel oor na Chrome</translation>
 <translation id="6238746320622508509">Laat Chrome toe om jou Incognito-oortjies te sluit.</translation>
 <translation id="6387994324662817823">Wagwoorde word slegs op hierdie toestel in Google Wagwoordbestuurder gestoor.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
index b4617f28..45de98f 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome አሁን ተሻሽሏል! አዲስ ስሪት አለ።</translation>
 <translation id="257708665678654955">Google Chrome በሚቀጥለው ጊዜ ከዚህ ጣቢያ የመጡ የ<ph name="LANGUAGE_NAME" /> ገጾች እንዲተረጎምልዎ ይፈልጋሉ?</translation>
 <translation id="2671426118752779020">በእርስዎ iPhone ላይ ባሉ ሌሎች መተግበሪያዎች ውስጥ ወደ የGoogle የይለፍ ቃል አስተዳዳሪ ያስቀመጧቸውን የይለፍ ቃላት መጠቀም ይችላሉ።</translation>
+<translation id="2689064829982324496">በሁሉም ድር ጣቢያዎች ላይ የእርስዎን የGoogle መለያ ዘግተው ለመውጣት <ph name="BEGIN_LINK" />ከChrome ዘግተው ይውጡ<ph name="END_LINK" />።</translation>
 <translation id="2695886661449553974">Chrome ዝማኔዎች ካሉ መፈተሽ አልቻለም። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="2732745070297234559">Chrome ሁሉንም የይለፍ ቃላት ማረጋገጥ አልቻለም። ነገ እንደገና ይሞክሩ።</translation>
 <translation id="2869959624320573933">በመለያ ወደ Chrome ይግቡ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
index 64ffc02..86f176f 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Təşkilatınız Chrome'dan istifadə etmək üçün daxil olmağınızı tələb edir.</translation>
 <translation id="6054613632208573261">Defolt olaraq Chrome istifadə edin</translation>
 <translation id="6063091872902370735">Chrome girişinə icazə verin</translation>
+<translation id="6110625574506755980">Bəzi Chrome funksiyaları daha əlçatan olmayacaq.</translation>
 <translation id="6181930887571472871">Chrome'a keçin</translation>
 <translation id="6238746320622508509">Chrome'un Anonim tabları kilidləməsinə icazə verin.</translation>
 <translation id="6387994324662817823">Parollar yalnız bu cihazda Google Parol Menecerində saxlanılır.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
index 81fe1a47..05fe016 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome току-що се подобри! Налице е нова версия.</translation>
 <translation id="257708665678654955">Искате ли следващия път Google Chrome да предложи да преведе от <ph name="LANGUAGE_NAME" /> страниците от този сайт?</translation>
 <translation id="2671426118752779020">Можете да използвате паролите, които сте запазили в мениджъра на паролите в Google, в други приложения на вашия iPhone.</translation>
+<translation id="2689064829982324496">За да излезете от профила си в Google на всички уебсайтове, <ph name="BEGIN_LINK" />излезте от профила си в Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome не можа да провери за актуализации. Опитайте отново по-късно.</translation>
 <translation id="2732745070297234559">Chrome не успя да провери всички пароли. Опитайте отново утре.</translation>
 <translation id="2869959624320573933">Влизане в Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
index a845d3c..b0e9fd1 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome er lige blevet bedre! Der er en ny tilgængelig version.</translation>
 <translation id="257708665678654955">Skal Google Chrome tilbyde at oversætte sider på <ph name="LANGUAGE_NAME" /> fra dette website næste gang?</translation>
 <translation id="2671426118752779020">Du kan bruge de adgangskoder, du har gemt i Google Adgangskodeadministrator, i andre apps på din iPhone.</translation>
+<translation id="2689064829982324496">Hvis du vil logge ud af din Google-konto på alle websites, skal du <ph name="BEGIN_LINK" />logge ud af Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome kunne ikke søge efter opdateringer. Prøv igen senere.</translation>
 <translation id="2732745070297234559">Chrome kunne ikke tjekke alle adgangskoder. Prøv igen i morgen.</translation>
 <translation id="2869959624320573933">Log ind i Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
index ec60a33c..a4b11414 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Your organisation requires you to sign in to use Chrome.</translation>
 <translation id="6054613632208573261">Use Chrome by default</translation>
 <translation id="6063091872902370735">Allow Chrome Sign-in</translation>
+<translation id="6110625574506755980">Some Chrome features won’t be available anymore.</translation>
 <translation id="6181930887571472871">Switch to Chrome</translation>
 <translation id="6238746320622508509">Let Chrome lock your incognito tabs.</translation>
 <translation id="6387994324662817823">Passwords are saved to Google Password Manager on this device only.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
index 853f3e2..617d40d2 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">¡Chrome mejoró! Hay una nueva versión disponible.</translation>
 <translation id="257708665678654955">¿Quieres que Google Chrome te ofrezca traducir las páginas de este sitio que estén en <ph name="LANGUAGE_NAME" /> la próxima vez?</translation>
 <translation id="2671426118752779020">Puedes usar las contraseñas que guardaste en el Administrador de contraseñas de Google en otras apps de tu iPhone.</translation>
+<translation id="2689064829982324496">Para salir de tu Cuenta de Google en todos los sitios web, debes <ph name="BEGIN_LINK" />salir de Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome no pudo buscar actualizaciones. Vuelve a intentarlo más tarde.</translation>
 <translation id="2732745070297234559">Chrome no pudo revisar todas las contraseñas. Vuelve a intentarlo mañana.</translation>
 <translation id="2869959624320573933">Acceder a Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
index a9e894323..abdbd12 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome hobetu egin dugu! Bertsio berria duzu erabilgarri.</translation>
 <translation id="257708665678654955">Webgune honetara zatozen hurrengo aldian Google Chrome-k <ph name="LANGUAGE_NAME" /> hizkuntzan dauden orriak itzultzea eskaintzea nahi duzu?</translation>
 <translation id="2671426118752779020">iPhone-ko beste aplikazio batzuk erabiltzen ari zinela Google-ren Pasahitz-kudeatzailea zerbitzuan gorde zenituen pasahitzak erabil ditzakezu.</translation>
+<translation id="2689064829982324496">Google-ko kontuko saioa webgune guztietan amaitzeko, <ph name="BEGIN_LINK" />amaitu Chrome-ko saioa<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome-k ezin izan ditu bilatu eguneratzeak. Saiatu berriro geroago.</translation>
 <translation id="2732745070297234559">Chrome-k ezin izan ditu egiaztatu pasahitz guztiak. Saiatu berriro bihar.</translation>
 <translation id="2869959624320573933">Hasi saioa Chrome-n</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
index 1d9917a..4f91827c 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
@@ -77,6 +77,7 @@
 <translation id="5998675059699164418">Votre organisation exige que vous vous connectiez pour utiliser Chrome.</translation>
 <translation id="6054613632208573261">Utiliser Chrome par défaut</translation>
 <translation id="6063091872902370735">Autoriser la connexion à Chrome</translation>
+<translation id="6110625574506755980">Certaines fonctionnalités de Chrome ne seront plus disponibles.</translation>
 <translation id="6181930887571472871">Passer à Chrome</translation>
 <translation id="6238746320622508509">Chrome peut verrouiller vos onglets de navigation privée.</translation>
 <translation id="6387994324662817823">Les mots de passe sont enregistrés dans le Gestionnaire de mots de passe Google uniquement sur cet appareil.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
index addac070..342c62b 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome introduciu melloras. Hai dispoñible unha nova versión.</translation>
 <translation id="257708665678654955">Queres que a próxima vez Google Chrome che ofreza a posibilidade de traducir as páxinas en <ph name="LANGUAGE_NAME" /> deste sitio?</translation>
 <translation id="2671426118752779020">Podes utilizar os contrasinais que gardaches no xestor de contrasinais de Google noutras aplicacións do teu iPhone.</translation>
+<translation id="2689064829982324496">Para pechar sesión na túa Conta de Google en todos os sitios web, <ph name="BEGIN_LINK" />pecha sesión en Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome non puido buscar actualizacións. Téntao máis tarde.</translation>
 <translation id="2732745070297234559">Chrome non puido comprobar todos os contrasinais. Téntao de novo mañá.</translation>
 <translation id="2869959624320573933">Inicia sesión en Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
index 557d0d6..659e7c2 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome jadi semakin baik! Versi baru telah tersedia.</translation>
 <translation id="257708665678654955">Ingin Google Chrome menawarkan untuk menerjemahkan halaman berbahasa <ph name="LANGUAGE_NAME" /> dari situs ini saat Anda mengunjunginya lagi?</translation>
 <translation id="2671426118752779020">Anda dapat menggunakan sandi yang Anda simpan ke Pengelola Sandi Google di aplikasi lain pada iPhone.</translation>
+<translation id="2689064829982324496">Untuk logout dari Akun Google Anda di semua situs, <ph name="BEGIN_LINK" />logout dari Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome tidak dapat memeriksa update. Coba lagi nanti.</translation>
 <translation id="2732745070297234559">Chrome tidak dapat memeriksa semua sandi. Coba lagi besok.</translation>
 <translation id="2869959624320573933">Login ke Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
index 62af123..7b230636 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome のアップデートが見つかりました。新しいバージョンが利用可能です。</translation>
 <translation id="257708665678654955">次回から Google Chrome でこのサイトの <ph name="LANGUAGE_NAME" /> ページの翻訳を表示しますか?</translation>
 <translation id="2671426118752779020">他のアプリや iPhone で Google パスワード マネージャに保存したパスワードを使用できます。</translation>
+<translation id="2689064829982324496">すべてのウェブサイトで Google アカウントからログアウトするには、<ph name="BEGIN_LINK" />Chrome からログアウト<ph name="END_LINK" />します。</translation>
 <translation id="2695886661449553974">Chrome でアップデートを確認できませんでした。しばらくしてからもう一度お試しください。</translation>
 <translation id="2732745070297234559">Chrome ですべてのパスワードを確認できませんでした。明日もう一度お試しください。</translation>
 <translation id="2869959624320573933">Chrome へのログイン</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
index 3444f76..9195395 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome កាន់តែប្រសើរជាងមុន! មានកំណែថ្មី។</translation>
 <translation id="257708665678654955">តើអ្នកចង់ឲ្យ Google Chrome ផ្តល់ជូននូវការបកប្រែទំព័រ <ph name="LANGUAGE_NAME" /> ចេញពីគេហទំព័រនេះដែរឬទេនៅពេលក្រោយ?</translation>
 <translation id="2671426118752779020">អ្នកអាចប្រើពាក្យសម្ងាត់ ដែលអ្នកបានរក្សាទុកទៅក្នុងកម្មវិធីគ្រប់គ្រង​ពាក្យសម្ងាត់ Google នៅក្នុងកម្មវិធីផ្សេងទៀតនៅលើ iPhone របស់អ្នក។</translation>
+<translation id="2689064829982324496">ដើម្បីចេញ​ពី​គណនី Google របស់អ្នក​នៅលើ​គ្រប់​គេហទំព័រ សូម​<ph name="BEGIN_LINK" />ចេញពី Chrome<ph name="END_LINK" />។</translation>
 <translation id="2695886661449553974">Chrome មិនអាចពិនិត្យរក​កំណែថ្មីបានទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation>
 <translation id="2732745070297234559">Chrome មិនអាចពិនិត្យពាក្យសម្ងាត់ទាំងអស់បានទេ។ សូម​ព្យាយាម​ម្ដងទៀតនៅថ្ងៃស្អែក។</translation>
 <translation id="2869959624320573933">ចូល Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
index 415a3c5cf..84d1551 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">한층 개선된 Chrome의 최신 버전이 출시되었습니다.</translation>
 <translation id="257708665678654955">다음에 Chrome에서 이 사이트의 <ph name="LANGUAGE_NAME" /> 페이지를 번역하시겠습니까?</translation>
 <translation id="2671426118752779020">Google 비밀번호 관리자에 저장된 비밀번호를 iPhone의 다른 앱에서 사용할 수 있습니다</translation>
+<translation id="2689064829982324496">웹사이트에 로그인되어 있는 Google 계정에서 모두 로그아웃하려면 <ph name="BEGIN_LINK" />Chrome에서 로그아웃<ph name="END_LINK" />하세요.</translation>
 <translation id="2695886661449553974">Chrome에서 업데이트를 확인할 수 없습니다. 나중에 다시 시도해 주세요.</translation>
 <translation id="2732745070297234559">Chrome에서 일부 비밀번호를 확인할 수 없습니다. 내일 다시 시도해 보세요.</translation>
 <translation id="2869959624320573933">Chrome에 로그인</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
index d18a3b04..0fdc2e8 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome ​ດີກ​ວ່າເກົ່າແລ້ວ​! ມີລຸ້ນ​ໃຫມ່​ໃຫ້​​ໃຊ້​.</translation>
 <translation id="257708665678654955">ທ່ານຕ້ອງການໃຫ້ Google Chrome ສະເໜີແປໜ້າ <ph name="LANGUAGE_NAME" /> ຈາກເວັບໄຊນີ້ໃນຄັ້ງຕໍ່ໄປບໍ່?</translation>
 <translation id="2671426118752779020">ທ່ານສາມາດໃຊ້ລະຫັດຜ່ານທີ່ທ່ານບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ໃນແອັບອື່ນຢູ່ iPhone ຂອງທ່ານໄດ້.</translation>
+<translation id="2689064829982324496">ເພື່ອອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານຢູ່ເວັບໄຊທັງໝົດ, ກະລຸນາ <ph name="BEGIN_LINK" />ອອກຈາກລະບົບ Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome ບໍ່ສາມາດກວດການອັບເດດໄດ້. ກະລຸນາລອງໃໝ່ໃນພາຍຫລັງ.</translation>
 <translation id="2732745070297234559">Chrome ບໍ່ສາມາດກວດລະຫັດຜ່ານທັງໝົດໄດ້. ກະລຸນາລອງໃໝ່ໃນມື້ອື່ນ.</translation>
 <translation id="2869959624320573933">ເຂົ້າສູ່ລະບົບຫາ Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
index b8ce406..ee9264afa 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Вашата организација бара да се најавите за да користите Chrome.</translation>
 <translation id="6054613632208573261">Користете ја Chrome како стандардна</translation>
 <translation id="6063091872902370735">Дозволете најавување на Chrome</translation>
+<translation id="6110625574506755980">Некои функции на Chrome веќе нема да бидат достапни.</translation>
 <translation id="6181930887571472871">Префрлете се на Chrome</translation>
 <translation id="6238746320622508509">Дозволете Chrome да ги заклучи вашите картички „Инкогнито“.</translation>
 <translation id="6387994324662817823">Лозинките се зачувани во „Управникот со лозинки на Google“ само на уредов.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
index 64edcd3..b8cf8359 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome-ийн шинэ хувилбар саяхан гарлаа.</translation>
 <translation id="257708665678654955">Та Google Chrome-г дараагийн удаа энэ сайтаас <ph name="LANGUAGE_NAME" /> хуудсыг орчуулахыг зөвшөөрөх үү?</translation>
 <translation id="2671426118752779020">Та Google-н Нууц үгний менежерт хадгалсан нууц үгнүүдээ iPhone дээрх бусад аппад ашиглах боломжтой.</translation>
+<translation id="2689064829982324496">Бүх вебсайт дээр Google Бүртгэлээсээ гарахын тулд <ph name="BEGIN_LINK" />Chrome-с гарна уу<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome-н шинэчлэлтийг шалгаж чадсангүй. Дараа дахин оролдоно уу.</translation>
 <translation id="2732745070297234559">Chrome бүх нууц үгийг шалгаж чадсангүй. Маргааш дахин оролдоно уу.</translation>
 <translation id="2869959624320573933">Chrome-д нэвтэрнэ үү</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
index 15c0ae8..bb5fec6d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
@@ -77,6 +77,7 @@
 <translation id="5998675059699164418">Chrome वापरण्यासाठी तुमच्या संस्थेनुसार तुम्ही साइन इन करणे आवश्यक आहे.</translation>
 <translation id="6054613632208573261">बाय डीफॉल्ट Chrome वापरा</translation>
 <translation id="6063091872902370735">Chrome मध्ये साइन-इन करण्यासाठी अनुमती द्या</translation>
+<translation id="6110625574506755980">काही Chrome वैशिष्ट्ये यापुढे उपलब्ध असणार नाहीत.</translation>
 <translation id="6181930887571472871">Chrome वर स्विच करा</translation>
 <translation id="6238746320622508509">Chrome ला तुमचे गुप्त टॅब लॉक करू द्या.</translation>
 <translation id="6387994324662817823">पासवर्ड फक्त या डिव्हाइसवर Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जातात.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
index 9ed4a72..5c7e954 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome становится лучше! Доступна новая версия.</translation>
 <translation id="257708665678654955">Хотите, чтобы Google Chrome всегда предлагал перевести этот сайт, когда обнаружит на его страницах <ph name="LANGUAGE_NAME" />?</translation>
 <translation id="2671426118752779020">Вы можете использовать пароли, сохраненные в Диспетчере паролей Google, для других приложений на своем устройстве iPhone.</translation>
+<translation id="2689064829982324496">Чтобы выйти из аккаунта Google на всех сайтах, <ph name="BEGIN_LINK" />выйдите из Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Браузеру Chrome не удалось проверить наличие обновлений. Повторите попытку позже.</translation>
 <translation id="2732745070297234559">Браузеру Chrome не удается проверить все пароли. Повторите попытку завтра.</translation>
 <translation id="2869959624320573933">Вход в Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
index a9a0936..77cae1d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Prehliadač Chrome bol práve vylepšený. K dispozícii je nová verzia.</translation>
 <translation id="257708665678654955">Chcete, aby prehliadač Google Chrome nabudúce ponúkol možnosť prekladu stránok tohto webu v jazyku <ph name="LANGUAGE_NAME" />?</translation>
 <translation id="2671426118752779020">Heslá, ktoré ste uložili do správcu hesiel Google, môžete v iPhone použiť v iných aplikáciách.</translation>
+<translation id="2689064829982324496">Ak sa chcete odhlásiť zo svojho účtu Google na všetkých weboch, <ph name="BEGIN_LINK" />odhláste sa z Chromu<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chromu sa nepodarilo skontrolovať dostupnosť aktualizácií. Skúste to neskôr.</translation>
 <translation id="2732745070297234559">Chromu sa nepodarilo skontrolovať všetky heslá. Skúste to znova zajtra.</translation>
 <translation id="2869959624320573933">Prihláste sa do Chromu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
index 36b1e5e3..0977486 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome je izboljšan! Na voljo je nova različica.</translation>
 <translation id="257708665678654955">Želite, da Google Chrome naslednjič ponudi prevod strani v jeziku <ph name="LANGUAGE_NAME" /> s tega spletnega mesta?</translation>
 <translation id="2671426118752779020">Gesla, ki ste jih shranili v Googlovem upravitelju gesel, lahko uporabite v drugih aplikacijah v iPhonu.</translation>
+<translation id="2689064829982324496">Če se želite odjaviti iz računa Google na vseh spletnih mestih, <ph name="BEGIN_LINK" />se odjavite iz Chroma<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome ni mogel preveriti, ali so na voljo posodobitve. Poskusite pozneje.</translation>
 <translation id="2732745070297234559">Chromu ni uspelo preveriti vseh gesel. Poskusite znova jutri.</translation>
 <translation id="2869959624320573933">Prijava v Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
index fca7f2a..32027fc 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
@@ -28,6 +28,7 @@
 <translation id="2576431527583832481">Chrome தற்போதுதான் சிறப்பைப் பெற்றது! புதிய பதிப்பு உள்ளது.</translation>
 <translation id="257708665678654955">அடுத்த முறை இந்தத் தளத்தின் <ph name="LANGUAGE_NAME" /> பக்கங்களை மொழிபெயர்க்கவா என்று Google Chrome  கேட்க வேண்டுமென விரும்புகிறீர்களா?</translation>
 <translation id="2671426118752779020">Google கடவுச்சொல் நிர்வாகியில் நீங்கள் சேமித்துள்ள கடவுச்சொற்களை உங்கள் iPhoneனில் உள்ள பிற ஆப்ஸில் பயன்படுத்தலாம்.</translation>
+<translation id="2689064829982324496">இணையதளங்கள் அனைத்திலும் உங்கள் Google கணக்கில் இருந்து வெளியேற <ph name="BEGIN_LINK" />Chromeமில் இருந்து வெளியேறுங்கள்<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome உலாவியால் புதுப்பிப்புகள் உள்ளனவா எனப் பார்க்க முடியவில்லை. பிறகு முயலவும்.</translation>
 <translation id="2732745070297234559">Chrome உலாவியால் கடவுச்சொற்கள் அனைத்தையும் சரிபார்க்க முடியவில்லை. நாளை முயலவும்.</translation>
 <translation id="2869959624320573933">Chromeமில் உள்நுழைக</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
index f1721fcd2..5b7e057 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
@@ -77,6 +77,7 @@
 <translation id="5998675059699164418">องค์กรกำหนดให้คุณต้องลงชื่อเพื่อเข้าใช้ Chrome</translation>
 <translation id="6054613632208573261">ใช้ Chrome โดยค่าเริ่มต้น</translation>
 <translation id="6063091872902370735">อนุญาตให้ลงชื่อเข้าใช้ Chrome</translation>
+<translation id="6110625574506755980">ฟีเจอร์บางอย่างของ Chrome จะใช้งานไม่ได้อีกต่อไป</translation>
 <translation id="6181930887571472871">เปลี่ยนไปใช้ Chrome</translation>
 <translation id="6238746320622508509">ให้ Chrome ล็อกแท็บที่ไม่ระบุตัวตน</translation>
 <translation id="6387994324662817823">รหัสผ่านจะบันทึกอยู่ในเครื่องมือจัดการรหัสผ่านของ Google ในอุปกรณ์นี้เท่านั้น</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
index e589a64c..a525055 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
@@ -28,7 +28,7 @@
 <translation id="2576431527583832481">Chrome 現在更進一步!歡迎您升級使用新版本。</translation>
 <translation id="257708665678654955">您希望 Google Chrome 將來翻譯此網站的<ph name="LANGUAGE_NAME" />頁面嗎?</translation>
 <translation id="2671426118752779020">您可在 iPhone 上的其他應用程式使用您儲存到「Google 密碼管理工具」的密碼。</translation>
-<translation id="2689064829982324496">如要從所有網站中登出 Google 帳戶,請<ph name="BEGIN_LINK" />登出 Chrome<ph name="END_LINK" />。</translation>
+<translation id="2689064829982324496">如要在所有網站上登出 Google 帳戶,請<ph name="BEGIN_LINK" />登出 Chrome<ph name="END_LINK" />。</translation>
 <translation id="2695886661449553974">Chrome 無法檢查更新,請稍後再試。</translation>
 <translation id="2732745070297234559">Chrome 無法檢查所有密碼。請明天再試。</translation>
 <translation id="2869959624320573933">登入 Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index fff85424..46f5849 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Адресът на сайта бе копиран</translation>
 <translation id="3285962946108803577">Споделяне на страницата...</translation>
 <translation id="3290875554372353449">Изберете профил</translation>
+<translation id="3305294846493618482">още</translation>
 <translation id="3311748811247479259">Изключено</translation>
 <translation id="3324193307694657476">Адрес 2</translation>
 <translation id="3328801116991980348">Информация за сайта</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index 1392a94..23685a1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Se copió la dirección del sitio</translation>
 <translation id="3285962946108803577">Compartir página…</translation>
 <translation id="3290875554372353449">Elegir una cuenta</translation>
+<translation id="3305294846493618482">más</translation>
 <translation id="3311748811247479259">No</translation>
 <translation id="3324193307694657476">Dirección 2</translation>
 <translation id="3328801116991980348">Información del sitio</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 7f85cc0a..b8b6969 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Saidi aadress on kopeeritud</translation>
 <translation id="3285962946108803577">Lehe jagamine …</translation>
 <translation id="3290875554372353449">Konto valimine</translation>
+<translation id="3305294846493618482">rohkem</translation>
 <translation id="3311748811247479259">Väljas</translation>
 <translation id="3324193307694657476">Aadress 2</translation>
 <translation id="3328801116991980348">Saiditeave</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index 7e137bc..29fb3c4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Nakopya ang address ng site</translation>
 <translation id="3285962946108803577">Ibahagi ang Page...</translation>
 <translation id="3290875554372353449">Pumili ng Account</translation>
+<translation id="3305294846493618482">higit pa</translation>
 <translation id="3311748811247479259">Naka-off</translation>
 <translation id="3324193307694657476">Address 2</translation>
 <translation id="3328801116991980348">Impormasyon ng site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 6add3b2f..abe858e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Webhely címe másolva</translation>
 <translation id="3285962946108803577">Oldal megosztása…</translation>
 <translation id="3290875554372353449">Válasszon fiókot</translation>
+<translation id="3305294846493618482">több</translation>
 <translation id="3311748811247479259">Ki</translation>
 <translation id="3324193307694657476">Cím 2. sora</translation>
 <translation id="3328801116991980348">Webhelyadatok</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 30394acf..cc62a53 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Alamat situs disalin</translation>
 <translation id="3285962946108803577">Bagikan Halaman ...</translation>
 <translation id="3290875554372353449">Pilih Akun</translation>
+<translation id="3305294846493618482">lainnya</translation>
 <translation id="3311748811247479259">Nonaktif</translation>
 <translation id="3324193307694657476">Alamat 2</translation>
 <translation id="3328801116991980348">Informasi situs</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index ad6699c..6ef79264 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">כתובת האתר הועתקה</translation>
 <translation id="3285962946108803577">שיתוף הדף…</translation>
 <translation id="3290875554372353449">בחירת חשבון</translation>
+<translation id="3305294846493618482">עוד</translation>
 <translation id="3311748811247479259">כבוי</translation>
 <translation id="3324193307694657476">כתובת, שורה 2</translation>
 <translation id="3328801116991980348">פרטי אתר</translation>
@@ -439,7 +440,7 @@
 <translation id="4737560986434232178">חיפוש בכרטיסיות האחרונות</translation>
 <translation id="473775607612524610">עדכון</translation>
 <translation id="4747097190499141774">‏הצפנה באמצעות ביטוי סיסמה לא כוללת אמצעי תשלום וכתובות מ-Google Pay. רק מי שיודע את ביטוי הסיסמה שלך יכול לקרוא את הנתונים המוצפנים. ביטוי הסיסמה לא נשלח אל Google והיא אינה מאחסנת אותו. אם שוכחים את ביטוי הסיסמה או רוצים לשנות את ההגדרה הזו, צריך לאפס את הסנכרון. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
-<translation id="4751645464639803239">כרטיסיית מצב אנונימי חדשה</translation>
+<translation id="4751645464639803239">כרטיסייה פרטית חדשה</translation>
 <translation id="4766112107778026136">‏Discover והפיד 'במעקב'</translation>
 <translation id="4775879719735953715">דפדפן ברירת המחדל</translation>
 <translation id="4778644898150334464">שימוש בסיסמה אחרת</translation>
@@ -452,7 +453,7 @@
 <translation id="4805759445554688327">מספר כרטיס לא חוקי</translation>
 <translation id="4808744395915275922">עדכונים</translation>
 <translation id="4818522717893377262">הוספת שפה…</translation>
-<translation id="481968316161811770">‏קובצי cookie, נתוני אתרים</translation>
+<translation id="481968316161811770">‏קובצי cookie, נתונים מאתרים</translation>
 <translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} ואחד נוסף}two{{domain} ו-{count} נוספים}many{{domain} ו-{count} נוספים}other{{domain} ו-{count} נוספים}}</translation>
 <translation id="4826218269716039351">חסימת צדדים שלישיים</translation>
 <translation id="4826726074642088322">שיתוף של הטקסט המודגש</translation>
@@ -767,7 +768,7 @@
 <translation id="7207023858769244910">סנכרון לקבלת תוכן על סמך תחומי העניין שלך.</translation>
 <translation id="7207383424303353046">‏חדש: אם Chrome יוגדר כאפליקציית הדפדפן בברירת מחדל, אתרים ייפתחו בו באופן אוטומטי. <ph name="BEGIN_LINK" />לפתיחת ההגדרות<ph name="END_LINK" /></translation>
 <translation id="721597782417389033">כינוי הכרטיס לא חוקי</translation>
-<translation id="722454870747268814">כרטיסייה חדשה לגלישה בסתר</translation>
+<translation id="722454870747268814">כרטיסייה פרטית חדשה</translation>
 <translation id="7265758999917665941">אף פעם עבור אתר זה</translation>
 <translation id="7272437679830969316">לא ניתן לאמת את הזהות שלך. הסיסמה לא הועתקה.</translation>
 <translation id="7291368939935408496">הכנת הסיסמאות מתבצעת...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index edf5ee1d..20cc7d6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">បានចម្លង​អាសយដ្ឋាន​ទំព័រ</translation>
 <translation id="3285962946108803577">ចែករំលែក​ទំព័រ...</translation>
 <translation id="3290875554372353449">ជ្រើសរើសគណនី</translation>
+<translation id="3305294846493618482">ច្រើន​ទៀត</translation>
 <translation id="3311748811247479259">បិទ</translation>
 <translation id="3324193307694657476">អាសយដ្ឋាន 2</translation>
 <translation id="3328801116991980348">ព័ត៌មានគេហទំព័រ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index 9ff52c7d..f8025b4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">사이트 주소가 복사되었습니다.</translation>
 <translation id="3285962946108803577">페이지 공유...</translation>
 <translation id="3290875554372353449">계정 선택</translation>
+<translation id="3305294846493618482">더보기</translation>
 <translation id="3311748811247479259">사용 안함</translation>
 <translation id="3324193307694657476">주소 2</translation>
 <translation id="3328801116991980348">사이트 정보</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index cbe6a90..309c95b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">ສຳເນົາທີ່ຢູ່ເວັບໄຊແລ້ວ</translation>
 <translation id="3285962946108803577">ແບ່ງປັນໜ້າ...</translation>
 <translation id="3290875554372353449">ເລືອກບັນຊີ</translation>
+<translation id="3305294846493618482">ເພີ່ມເຕີມ</translation>
 <translation id="3311748811247479259">ປິດ</translation>
 <translation id="3324193307694657476">ທີ່ຢູ່ 2</translation>
 <translation id="3328801116991980348">ຂໍ້​ມູນ​ເວັບ​ໄຊທ໌</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index 7ed9cc0..f2ae07e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Svetainės adresas nukopijuotas</translation>
 <translation id="3285962946108803577">Bendrinti puslapį...</translation>
 <translation id="3290875554372353449">Pasirinkite paskyrą</translation>
+<translation id="3305294846493618482">daugiau</translation>
 <translation id="3311748811247479259">Išjungta</translation>
 <translation id="3324193307694657476">2 adreso eil.</translation>
 <translation id="3328801116991980348">Svetainės informacija</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 6d0582348..ece3571 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -150,7 +150,7 @@
 <translation id="2251686759395008410">မီနူး → မှတ်တမ်း</translation>
 <translation id="2256933947031277845">အကောင့်အချို့ဖြင့်သာ လက်မှတ်ထိုးဝင်ရန် သင့်အဖွဲ့အစည်းက ခွင့်ပြုထားသည်။</translation>
 <translation id="225943865679747347">အမှား ကုဒ်: <ph name="ERROR_CODE" /></translation>
-<translation id="2267753748892043616">အကောင့် ပေါင်းထည့်ပါ</translation>
+<translation id="2267753748892043616">အကောင့်ထည့်ပါ</translation>
 <translation id="2268044343513325586">ပြန်မွမ်းမံ</translation>
 <translation id="2271351792809375263">သင် Chrome တွင်သိမ်းထားသည့် စကားဝှက်များကို သင့်စက်ရှိ အခြားအက်ပ်များတွင် သုံးပါ</translation>
 <translation id="2273327106802955778">မီနူးကို ပိုပြပေးပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb
index c79434f..92e51cc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">ସାଇଟ୍ ଠିକଣା କପି କରାଯାଇଛି</translation>
 <translation id="3285962946108803577">ପୃଷ୍ଠା ସେୟାର୍ କରନ୍ତୁ...</translation>
 <translation id="3290875554372353449">ଗୋଟିଏ ଆକାଉଣ୍ଟ ଚୟନ କରନ୍ତୁ</translation>
+<translation id="3305294846493618482">ଅଧିକ</translation>
 <translation id="3311748811247479259">ବନ୍ଦ ଅଛି</translation>
 <translation id="3324193307694657476">ଠିକଣା 2</translation>
 <translation id="3328801116991980348">ସାଇଟ୍‌ ସୂଚନା</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index eebb95c..bfbaeea5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Skopiowano adres strony</translation>
 <translation id="3285962946108803577">Udostępnij stronę...</translation>
 <translation id="3290875554372353449">Wybierz konto</translation>
+<translation id="3305294846493618482">więcej</translation>
 <translation id="3311748811247479259">Wyłączono</translation>
 <translation id="3324193307694657476">Adres 2</translation>
 <translation id="3328801116991980348">Informacje o witrynie</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb
index 4f24de24..284b7abd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">අඩවි ලිපිනය පිටපත් කරන ලදී</translation>
 <translation id="3285962946108803577">පිටුව බෙදා ගන්න...</translation>
 <translation id="3290875554372353449">ගිණුමක් තෝරා ගන්න</translation>
+<translation id="3305294846493618482">තවත්</translation>
 <translation id="3311748811247479259">අක්‍රිය</translation>
 <translation id="3324193307694657476">ලිපිනය 2</translation>
 <translation id="3328801116991980348">අඩවි තොරතුරු</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 220b95ce..4b02feb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Site adresi kopyalandı</translation>
 <translation id="3285962946108803577">Sayfayı Paylaş...</translation>
 <translation id="3290875554372353449">Bir Hesap Seçin</translation>
+<translation id="3305294846493618482">daha fazla</translation>
 <translation id="3311748811247479259">Kapalı</translation>
 <translation id="3324193307694657476">Adres 2</translation>
 <translation id="3328801116991980348">Site bilgileri</translation>
diff --git a/ios/chrome/browser/crash_report/crash_helper.h b/ios/chrome/browser/crash_report/crash_helper.h
index 159c3ade..024a84d2 100644
--- a/ios/chrome/browser/crash_report/crash_helper.h
+++ b/ios/chrome/browser/crash_report/crash_helper.h
@@ -38,7 +38,7 @@
 int GetPendingCrashReportCount();
 
 // Gets the number of pending crash reports on a background thread and invokes
-// |callback| with the result when complete.
+// `callback` with the result when complete.
 void GetPendingCrashReportCount(void (^callback)(int));
 
 // Check if there is currently a crash report to upload. This function will wait
diff --git a/ios/chrome/browser/crash_report/crash_helper.mm b/ios/chrome/browser/crash_report/crash_helper.mm
index 9ff4bd4..83b2575d 100644
--- a/ios/chrome/browser/crash_report/crash_helper.mm
+++ b/ios/chrome/browser/crash_report/crash_helper.mm
@@ -158,7 +158,7 @@
   // value immediately on startup, such as in safe mode or extensions.
   crash_helper::common::SetUserEnabledUploading(enabled);
 
-  // It is necessary to always call |MainThreadFreezeDetector setEnabled| as
+  // It is necessary to always call `MainThreadFreezeDetector setEnabled` as
   // the function will update its preference based on finch.
   [[MainThreadFreezeDetector sharedInstance] setEnabled:enabled];
 
diff --git a/ios/chrome/browser/crash_report/crash_helper_unittest.mm b/ios/chrome/browser/crash_report/crash_helper_unittest.mm
index ac702e3..0024e29 100644
--- a/ios/chrome/browser/crash_report/crash_helper_unittest.mm
+++ b/ios/chrome/browser/crash_report/crash_helper_unittest.mm
@@ -37,7 +37,7 @@
         [OCMockObject mockForClass:[BreakpadController class]];
 
     // Swizzle +[BreakpadController sharedInstance] to return
-    // |mock_breakpad_controller_| instead of the normal singleton instance.
+    // `mock_breakpad_controller_` instead of the normal singleton instance.
     id implementation_block = ^BreakpadController*(id self) {
       return mock_breakpad_controller_;
     };
diff --git a/ios/chrome/browser/crash_report/crash_keys_helper.h b/ios/chrome/browser/crash_report/crash_keys_helper.h
index 177b018..a137363 100644
--- a/ios/chrome/browser/crash_report/crash_keys_helper.h
+++ b/ios/chrome/browser/crash_report/crash_keys_helper.h
@@ -11,11 +11,11 @@
 
 namespace crash_keys {
 
-// Sets a key if |background| is true, unset if false. This will allow tracking
+// Sets a key if `background` is true, unset if false. This will allow tracking
 // of crashes that occur when the app is backgrounded.
 void SetCurrentlyInBackground(bool background);
 
-// Sets a key if |signedIn| is true, unset if false. The key indicates that the
+// Sets a key if `signedIn` is true, unset if false. The key indicates that the
 // user is signed-in.
 void SetCurrentlySignedIn(bool signedIn);
 
@@ -76,8 +76,8 @@
 void SetDestroyingAndRebuildingIncognitoBrowserState(bool in_progress);
 
 // Sets a key to help debug a crash when animating from grid to visible tab.
-// |to_view_controller| is the view controller about to be presented. The
-// remaining parameters relate to the |to_view_controller|.
+// `to_view_controller` is the view controller about to be presented. The
+// remaining parameters relate to the `to_view_controller`.
 void SetGridToVisibleTabAnimation(NSString* to_view_controller,
                                   NSString* presenting_view_controller,
                                   NSString* presented_view_controller,
diff --git a/ios/chrome/browser/crash_report/crash_loop_detection_util.h b/ios/chrome/browser/crash_report/crash_loop_detection_util.h
index 2077ec53..647fbd7 100644
--- a/ios/chrome/browser/crash_report/crash_loop_detection_util.h
+++ b/ios/chrome/browser/crash_report/crash_loop_detection_util.h
@@ -14,8 +14,8 @@
 
 // Increases the failed startup count. This should be called immediately after
 // startup, so that if there is a crash, it is recorded.
-// If |flush_immediately| is true, the value will be persisted immediately. If
-// |flush_immediately| is false, this should be followed by a call to
+// If `flush_immediately` is true, the value will be persisted immediately. If
+// `flush_immediately` is false, this should be followed by a call to
 // [[NSUserDefaults standardUserDefaults] synchronize]. This is optional to
 // allow coallescing of the potentially expensive call during startup.
 void IncrementFailedStartupAttemptCount(bool flush_immediately);
diff --git a/ios/chrome/browser/crash_report/crash_report_helper.h b/ios/chrome/browser/crash_report/crash_report_helper.h
index 8300e37..c1afb0c 100644
--- a/ios/chrome/browser/crash_report/crash_report_helper.h
+++ b/ios/chrome/browser/crash_report/crash_report_helper.h
@@ -23,45 +23,45 @@
 
 namespace breakpad {
 
-// Monitors the urls loaded by |web_state| to allow crash reports to contain the
+// Monitors the urls loaded by `web_state` to allow crash reports to contain the
 // current loading url.
 // It is not needed to call that method for web_state contained in an already
 // observed WebStateList. This method is typically used for Preload WebState
 // (that are not in any WebStateList).
 void MonitorURLsForPreloadWebState(web::WebState* web_state);
 
-// Stop monitoring the urls loaded by |web_state|.
+// Stop monitoring the urls loaded by `web_state`.
 // If MonitorURLsForPreloadWebState(web_state) has been called, it is necessary
 // to call StopMonitoringURLsForPreloadWebState before inserting the web_state
 // in an observed WebStateList.
 void StopMonitoringURLsForPreloadWebState(web::WebState* web_state);
 
-// Monitors the urls loaded in |web_state_list| to allow crash reports to
+// Monitors the urls loaded in `web_state_list` to allow crash reports to
 // contain the currently loaded urls.
 void MonitorURLsForWebStateList(WebStateList* web_state_list);
 
-// Stop monitoring the urls loaded in the |web_state_list|.
+// Stop monitoring the urls loaded in the `web_state_list`.
 void StopMonitoringURLsForWebStateList(WebStateList* web_state_list);
 
-// Adds the state monitor to |web_state_list|. WebStateLists that are not
+// Adds the state monitor to `web_state_list`. WebStateLists that are not
 // monitored via this function are still monitored through WebStateObserver
 // methods, but calling this function is mandatory to keep the monitoring of
 // deleted tabs consistent.
 void MonitorTabStateForWebStateList(WebStateList* web_state_list);
 
-// Stop the state monitor of |web_state_list|.
+// Stop the state monitor of `web_state_list`.
 void StopMonitoringTabStateForWebStateList(WebStateList* web_state_list);
 
 // Clear any state about the urls loaded in the given WebStateList; this should
 // be called when the WebStateList is deactivated.
 void ClearStateForWebStateList(WebStateList* web_state_list);
 
-// Starts listening for breadcrumbs logged to |breadcrumb_manager_service|.
+// Starts listening for breadcrumbs logged to `breadcrumb_manager_service`.
 // Collected breadcrumbs will be attached to crash reports.
 void MonitorBreadcrumbManagerService(
     breadcrumbs::BreadcrumbManagerKeyedService* breadcrumb_manager_service);
 
-// Stops listening for breadcrumbs logged to |breadcrumb_manager_service|.
+// Stops listening for breadcrumbs logged to `breadcrumb_manager_service`.
 void StopMonitoringBreadcrumbManagerService(
     breadcrumbs::BreadcrumbManagerKeyedService* breadcrumb_manager_service);
 
diff --git a/ios/chrome/browser/crash_report/crash_report_helper.mm b/ios/chrome/browser/crash_report/crash_report_helper.mm
index 5349698..5a8ce8c 100644
--- a/ios/chrome/browser/crash_report/crash_report_helper.mm
+++ b/ios/chrome/browser/crash_report/crash_report_helper.mm
@@ -58,24 +58,24 @@
 - (void)removeTabId:(NSString*)tabId;
 // Removes document related information from tabCurrentStateByTabId_.
 - (void)closingDocumentInTab:(NSString*)tabId;
-// Sets a tab |tabId| specific information with key |key| and value |value| in
+// Sets a tab `tabId` specific information with key `key` and value `value` in
 // tabCurrentStateByTabId_.
 - (void)setTabInfo:(NSString*)key
          withValue:(const NSString*)value
             forTab:(NSString*)tabId;
-// Retrieves the |key| information for tab |tabID|.
+// Retrieves the `key` information for tab `tabID`.
 - (id)tabInfo:(NSString*)key forTab:(NSString*)tabID;
-// Removes the |key| information for tab |tabId|
+// Removes the `key` information for tab `tabId`
 - (void)removeTabInfo:(NSString*)key forTab:(NSString*)tabId;
-// Observes |webState| by this instance of the CrashReporterTabStateObserver.
+// Observes `webState` by this instance of the CrashReporterTabStateObserver.
 - (void)observeWebState:(web::WebState*)webState;
-// Stop Observing |webState| by this instance of the
+// Stop Observing `webState` by this instance of the
 // CrashReporterTabStateObserver.
 - (void)stopObservingWebState:(web::WebState*)webState;
-// Observes |webStateList| by this instance of the
+// Observes `webStateList` by this instance of the
 // CrashReporterTabStateObserver.
 - (void)observeWebStateList:(WebStateList*)webStateList;
-// Stop Observing |webStateList| by this instance of the
+// Stop Observing `webStateList` by this instance of the
 // CrashReporterTabStateObserver.
 - (void)stopObservingWebStateList:(WebStateList*)webStateList;
 @end
diff --git a/ios/chrome/browser/crash_report/crash_reporter_breadcrumb_observer_unittest.mm b/ios/chrome/browser/crash_report/crash_reporter_breadcrumb_observer_unittest.mm
index 7592525..229d5b4 100644
--- a/ios/chrome/browser/crash_report/crash_reporter_breadcrumb_observer_unittest.mm
+++ b/ios/chrome/browser/crash_report/crash_reporter_breadcrumb_observer_unittest.mm
@@ -28,7 +28,7 @@
 
 namespace {
 // Returns an OCMArg validator which checks that the parameter value is a string
-// containing |count| occurances of |substring|.
+// containing `count` occurances of `substring`.
 id StringParameterValidatorWithCountOfSubstring(NSUInteger count,
                                                 NSString* substring) {
   return [OCMArg checkWithBlock:^(id value) {
@@ -67,7 +67,7 @@
         [OCMockObject mockForClass:[BreakpadController class]];
 
     // Swizzle +[BreakpadController sharedInstance] to return
-    // |mock_breakpad_controller_| instead of the normal singleton instance.
+    // `mock_breakpad_controller_` instead of the normal singleton instance.
     id implementation_block = ^BreakpadController*(id self) {
       return mock_breakpad_controller_;
     };
@@ -83,8 +83,8 @@
   }
 
  protected:
-  // Returns the BreadcrumbManagerKeyedService for |browser_state|, and sets
-  // |crash_reporter_breadcrumb_observer_| as its observer.
+  // Returns the BreadcrumbManagerKeyedService for `browser_state`, and sets
+  // `crash_reporter_breadcrumb_observer_` as its observer.
   breadcrumbs::BreadcrumbManagerKeyedService* GetAndObserveBreadcrumbService(
       web::BrowserState* const browser_state) {
     breadcrumbs::BreadcrumbManagerKeyedService* const breadcrumb_service =
diff --git a/ios/chrome/browser/crash_report/crash_reporter_url_observer.h b/ios/chrome/browser/crash_report/crash_reporter_url_observer.h
index 1150a50..d17a9031 100644
--- a/ios/chrome/browser/crash_report/crash_reporter_url_observer.h
+++ b/ios/chrome/browser/crash_report/crash_reporter_url_observer.h
@@ -22,12 +22,12 @@
 
 // Provides method to set and remove parameter values.
 @protocol CrashReporterParameterSetter
-// Sets a parameter named |key||pending| with value |value|.
+// Sets a parameter named `key||pending` with value `value`.
 - (void)setReportParameterURL:(const GURL&)URL
                        forKey:(NSNumber*)key
                       pending:(BOOL)pending;
 
-// Deletes the parameter |key||pending|.
+// Deletes the parameter `key||pending`.
 - (void)removeReportParameter:(NSNumber*)key pending:(BOOL)pending;
 @end
 
@@ -45,17 +45,17 @@
   void RemoveWebStateList(WebStateList* web_state_list);
 
   // Records the given URL associated to the given id to the list of URLs to
-  // send to the crash server. If |pending| is true, the URL is one that is
+  // send to the crash server. If `pending` is true, the URL is one that is
   // expected to start loading, but hasn't actually been seen yet.
   void RecordURL(const GURL& url, web::WebState* web_state, bool pending);
 
-  // Observes |webState| by this instance of the CrashReporterURLObserver.
+  // Observes `webState` by this instance of the CrashReporterURLObserver.
   void ObservePreloadWebState(web::WebState* web_state);
-  // Stop Observing |webState| by this instance of the CrashReporterURLObserver.
+  // Stop Observing `webState` by this instance of the CrashReporterURLObserver.
   void StopObservingPreloadWebState(web::WebState* web_state);
-  // Observes |webStateList| by this instance of the CrashReporterURLObserver.
+  // Observes `webStateList` by this instance of the CrashReporterURLObserver.
   void ObserveWebStateList(WebStateList* web_state_list);
-  // Stop Observing |webStateList| by this instance of the
+  // Stop Observing `webStateList` by this instance of the
   // CrashReporterURLObserver.
   void StopObservingWebStateList(WebStateList* web_state_list);
 
@@ -85,11 +85,11 @@
                           int index) override;
 
  private:
-  // A unique string identifying |web_state_list| as a group of WebStates.
+  // A unique string identifying `web_state_list` as a group of WebStates.
   std::string GroupForWebStateList(WebStateList* web_state_list);
-  // Convenient method to report the URL displayed by |web_state|.
+  // Convenient method to report the URL displayed by `web_state`.
   void RecordURLForWebState(web::WebState* web_state);
-  // Remove the reporting of URLs of every WebStates in |group|.
+  // Remove the reporting of URLs of every WebStates in `group`.
   void RemoveGroup(const std::string& group);
   // Map associating each Breakpad key with the group it is currently reporting
   // URLs for.
diff --git a/ios/chrome/browser/crash_report/crash_reporter_url_observer.mm b/ios/chrome/browser/crash_report/crash_reporter_url_observer.mm
index 37d982cc..71fc687 100644
--- a/ios/chrome/browser/crash_report/crash_reporter_url_observer.mm
+++ b/ios/chrome/browser/crash_report/crash_reporter_url_observer.mm
@@ -34,7 +34,7 @@
 // Max number of urls to send. This represent 1 URL per WebState group.
 const int kNumberOfURLsToSend = 3;
 
-// Keep the following two CrashKey arrays in sync with |kNumberOfURLsToSend|.
+// Keep the following two CrashKey arrays in sync with `kNumberOfURLsToSend`.
 static crash_reporter::CrashKeyString<1024> url_crash_keys[] = {
     {"url0", CrashKeyString<1024>::Tag::kArray},
     {"url1", CrashKeyString<1024>::Tag::kArray},
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper.h b/ios/chrome/browser/crash_report/crash_restore_helper.h
index c719293..e447cd8 100644
--- a/ios/chrome/browser/crash_report/crash_restore_helper.h
+++ b/ios/chrome/browser/crash_report/crash_restore_helper.h
@@ -21,14 +21,14 @@
 + (BOOL)isBackedUpSessionID:(NSString*)sessionID
                browserState:(ChromeBrowserState*)browserState;
 
-// Saves the session information stored on disk for sessions with |sessionIDs|
+// Saves the session information stored on disk for sessions with `sessionIDs`
 // in temporary files and will then delete those from their default location.
 // This will ensure that the user will then start from scratch, while allowing
 // restoring their old sessions. This method has to be called before the browser
 // is created, or the session information will be overwritten.
-// |sessionIDs| can be nil when multiple windows are not supported, and in that
+// `sessionIDs` can be nil when multiple windows are not supported, and in that
 // case only the default session will be moved.
-// Returns |YES| if the  at least one session deletion was successful.
+// Returns `YES` if the  at least one session deletion was successful.
 + (BOOL)moveAsideSessions:(NSSet<NSString*>*)sessionIDs
           forBrowserState:(ChromeBrowserState*)browserState;
 
@@ -40,7 +40,7 @@
 
 @interface CrashRestoreHelper (Testing)
 
-// Returns the path for back of session |sessionID| relative in |directory|.
+// Returns the path for back of session `sessionID` relative in `directory`.
 + (NSString*)backupPathForSessionID:(NSString*)sessionID
                           directory:(const base::FilePath&)directory;
 
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper.mm b/ios/chrome/browser/crash_report/crash_restore_helper.mm
index 19c6c7b..12a0fe6 100644
--- a/ios/chrome/browser/crash_report/crash_restore_helper.mm
+++ b/ios/chrome/browser/crash_report/crash_restore_helper.mm
@@ -60,7 +60,7 @@
     (ChromeBrowserState*)browserState;
 
 // Restores the sessions after a crash. It should only be called if
-// |moveAsideSessions:forBrowserState| for the browser state of the current
+// `moveAsideSessions:forBrowserState` for the browser state of the current
 // browser was successful.
 - (BOOL)restoreSessionsAfterCrash;
 
@@ -86,7 +86,7 @@
 const base::FilePath::CharType kSessionBackupFileName[] =
     FILE_PATH_LITERAL("session.backup.plist");
 
-// Convert |path| to NSString.
+// Convert `path` to NSString.
 NSString* PathAsNSString(const base::FilePath& path) {
   return base::SysUTF8ToNSString(path.AsUTF8Unsafe());
 }
@@ -132,7 +132,7 @@
 // A delegate for the InfoBar shown when the previous session has crashed.
 class SessionCrashedInfoBarDelegate : public ConfirmInfoBarDelegate {
  public:
-  // Creates a session crashed infobar  and adds it to |infobar_manager|.
+  // Creates a session crashed infobar  and adds it to `infobar_manager`.
   static bool Create(infobars::InfoBarManager* infobar_manager,
                      CrashRestoreHelper* crash_restore_helper);
 
@@ -227,7 +227,7 @@
       recordConfirmInfobarEvent:MobileMessagesConfirmInfobarEvents::Accepted
           forInfobarConfirmType:InfobarConfirmType::kInfobarConfirmTypeRestore];
   // Accept should return NO if the infobar is going to be dismissed.
-  // Since |restoreSessionAfterCrash| returns YES if a single NTP tab is closed,
+  // Since `restoreSessionAfterCrash` returns YES if a single NTP tab is closed,
   // which will dismiss the infobar, invert the bool.
   return ![crash_restore_helper_ restoreSessionsAfterCrash];
 }
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm b/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
index 9759b3832..166f4359 100644
--- a/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
+++ b/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
@@ -41,9 +41,9 @@
   }
 
  protected:
-  // Creates the session for |session_id|, if |session_id| is nil a session
+  // Creates the session for `session_id`, if `session_id` is nil a session
   // will be created in the default location.
-  // Returns |true| if the creation was successful.
+  // Returns `true` if the creation was successful.
   bool CreateSession(NSString* session_id) {
     NSFileManager* file_manager = [NSFileManager defaultManager];
     ChromeBrowserState* browser_states[] = {
@@ -74,8 +74,8 @@
     return true;
   }
 
-  // Returns |true| if session for |session_id| was erased from its default
-  // location. if |session_id| is nil, the default session location is used.
+  // Returns `true` if session for `session_id` was erased from its default
+  // location. if `session_id` is nil, the default session location is used.
   bool IsSessionErased(NSString* session_id) {
     NSFileManager* file_manager = [NSFileManager defaultManager];
     ChromeBrowserState* browser_states[] = {
@@ -94,8 +94,8 @@
     return true;
   }
 
-  // Returns |true| if the session with |session_id| was backed up correctly,
-  // and deletes the backup file. if |session_id| is nil, the default backup
+  // Returns `true` if the session with `session_id` was backed up correctly,
+  // and deletes the backup file. if `session_id` is nil, the default backup
   // session location is used.
   bool CheckAndDeleteSessionBackedUp(NSString* session_id,
                                      ChromeBrowserState* browser_state) {
diff --git a/ios/chrome/browser/crash_report/main_thread_freeze_detector.h b/ios/chrome/browser/crash_report/main_thread_freeze_detector.h
index abbeee0..ecb5588 100644
--- a/ios/chrome/browser/crash_report/main_thread_freeze_detector.h
+++ b/ios/chrome/browser/crash_report/main_thread_freeze_detector.h
@@ -11,7 +11,7 @@
 
 // Detects freezes of the main thread.
 // This class that the main thread runloop is run at least every
-// |TimeoutForMainThreadFreezeDetection|. If this is not the case, a
+// `TimeoutForMainThreadFreezeDetection`. If this is not the case, a
 // NSUserDefault flag is raised and a crash report is generated capturing the
 // stack of the main frame at that time.
 // The report is deleted if the main thread recovers.
diff --git a/ios/chrome/browser/crash_report/main_thread_freeze_detector.mm b/ios/chrome/browser/crash_report/main_thread_freeze_detector.mm
index 7c4eabb6..6186f25 100644
--- a/ios/chrome/browser/crash_report/main_thread_freeze_detector.mm
+++ b/ios/chrome/browser/crash_report/main_thread_freeze_detector.mm
@@ -22,7 +22,7 @@
 #endif
 namespace {
 // The info contains a dictionary with info about the freeze report.
-// See description at |_lastSessionFreezeInfo|.
+// See description at `_lastSessionFreezeInfo`.
 const char kNsUserDefaultKeyLastSessionInfo[] =
     "MainThreadDetectionLastThreadWasFrozenInfo";
 
@@ -72,7 +72,7 @@
 // The callback that is called regularly on watchdog thread.
 - (void)runInFreezeDetectionQueue;
 // These 4 properties will be accessed from both thread. Make them atomic.
-// The date at which |runInMainLoop| was last called.
+// The date at which `runInMainLoop` was last called.
 @property(atomic) NSDate* lastSeenMainThread;
 // Whether the watchdog should continue running.
 @property(atomic) BOOL running;
@@ -89,8 +89,8 @@
 
   // The information on the UTE report that was created on last session.
   // Contains 3 fields:
-  // "dump": the file name of the .dmp file in |_UTEDirectory|,
-  // "config": the file name of the config file in |_UTEDirectory|,
+  // "dump": the file name of the .dmp file in `_UTEDirectory`,
+  // "config": the file name of the config file in `_UTEDirectory`,
   // "date": the date at which the UTE file was generated.
   // NOTE: Fields are unused with crashpad.
   NSDictionary* _lastSessionFreezeInfo;
@@ -296,7 +296,7 @@
   }
   // The report is always generated in the BreakpadDirectory.
   // As only one report can be uploaded per session, this report is
-  // moved out of the Breakpad directory and put in a |UTE| directory.
+  // moved out of the Breakpad directory and put in a `UTE` directory.
   NSString* configFile =
       [breakpadReportInfo objectForKey:@BREAKPAD_OUTPUT_CONFIG_FILE];
   NSString* UTEConfigFile = [_UTEDirectory
@@ -445,8 +445,8 @@
   [self restoreLastSessionReportIfNeeded];
   NSFileManager* fileManager = [[NSFileManager alloc] init];
   // It is possible that this call will delete a report on the current session.
-  // But this is unlikely because |handleLastSessionReport| run on the
-  // |_freezeDetectionQueue| and is called directly from setEnabled which means
+  // But this is unlikely because `handleLastSessionReport` run on the
+  // `_freezeDetectionQueue` and is called directly from setEnabled which means
   // that main thread was responding recently.
   [fileManager removeItemAtPath:_UTEDirectory error:nil];
   [fileManager createDirectoryAtPath:_UTEDirectory
diff --git a/ios/chrome/browser/crash_report/main_thread_freeze_detector_unittest.mm b/ios/chrome/browser/crash_report/main_thread_freeze_detector_unittest.mm
index 20de277..9b3d15d 100644
--- a/ios/chrome/browser/crash_report/main_thread_freeze_detector_unittest.mm
+++ b/ios/chrome/browser/crash_report/main_thread_freeze_detector_unittest.mm
@@ -33,7 +33,7 @@
   NSDate* date1 = [[file_manager attributesOfItemAtPath:original_file error:nil]
       objectForKey:NSFileModificationDate];
   // Spin the run loop so, if the move below uses an updated modification date,
-  // |date2| will not match (which would be a test failure).
+  // `date2` will not match (which would be a test failure).
   base::test::ios::SpinRunLoopWithMinDelay(base::Milliseconds(40));
   ASSERT_TRUE([file_manager moveItemAtPath:original_file
                                     toPath:new_file
diff --git a/ios/chrome/browser/crash_report/synthetic_crash_report_util.h b/ios/chrome/browser/crash_report/synthetic_crash_report_util.h
index ad561505c..863372dd 100644
--- a/ios/chrome/browser/crash_report/synthetic_crash_report_util.h
+++ b/ios/chrome/browser/crash_report/synthetic_crash_report_util.h
@@ -12,7 +12,7 @@
 }
 
 // Creates Synthetic Crash Report for Unexplained Termination Event to be
-// uploaded by Breakpad. |path| should be a path to Breakpad directory and
+// uploaded by Breakpad. `path` should be a path to Breakpad directory and
 // the rest of the arguments are Breakpad specific values.
 void CreateSyntheticCrashReportForUte(
     const base::FilePath& path,
diff --git a/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm b/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm
index a8da791..99e6b1c 100644
--- a/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm
+++ b/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm
@@ -23,7 +23,7 @@
 
 namespace {
 
-// Appends |config| vector with key value pair, respecting max value length.
+// Appends `config` vector with key value pair, respecting max value length.
 void AppendConfig(std::vector<std::string>& config,
                   std::string key,
                   std::string value) {
@@ -44,7 +44,7 @@
   }
 }
 
-// Appends |config| vector with key value pair, respecting max value length.
+// Appends `config` vector with key value pair, respecting max value length.
 // Key is prepent with BreakpadServerParameterPrefix_.
 void AppendConfigWithBreakpadServerParam(std::vector<std::string>& config,
                                          std::string key,
diff --git a/ios/chrome/browser/external_files/external_file_remover.h b/ios/chrome/browser/external_files/external_file_remover.h
index 0f9aa97..282560b 100644
--- a/ios/chrome/browser/external_files/external_file_remover.h
+++ b/ios/chrome/browser/external_files/external_file_remover.h
@@ -19,7 +19,7 @@
 
   ~ExternalFileRemover() override = default;
   // Post a delayed task to clean up the files received from other applications.
-  // |callback| is called when the clean up has finished; it may be null.
+  // `callback` is called when the clean up has finished; it may be null.
   virtual void RemoveAfterDelay(base::TimeDelta delay,
                                 base::OnceClosure callback) = 0;
 };
diff --git a/ios/chrome/browser/external_files/external_file_remover_factory.h b/ios/chrome/browser/external_files/external_file_remover_factory.h
index 9e6e6e3..81857d1f 100644
--- a/ios/chrome/browser/external_files/external_file_remover_factory.h
+++ b/ios/chrome/browser/external_files/external_file_remover_factory.h
@@ -13,9 +13,9 @@
 class ChromeBrowserState;
 class ExternalFileRemover;
 
-// Singleton that owns all |ExternalFileRemover| and associates them with
-// browser states. Listens for the |BrowserState|'s destruction notification and
-// cleans up the associated |ExternalFileRemover|.
+// Singleton that owns all `ExternalFileRemover` and associates them with
+// browser states. Listens for the `BrowserState`'s destruction notification and
+// cleans up the associated `ExternalFileRemover`.
 class ExternalFileRemoverFactory : public BrowserStateKeyedServiceFactory {
  public:
   static ExternalFileRemover* GetForBrowserState(
diff --git a/ios/chrome/browser/external_files/external_file_remover_impl.h b/ios/chrome/browser/external_files/external_file_remover_impl.h
index fcab33ee..a5273772 100644
--- a/ios/chrome/browser/external_files/external_file_remover_impl.h
+++ b/ios/chrome/browser/external_files/external_file_remover_impl.h
@@ -53,14 +53,14 @@
     bool remove_all_files;
     base::ScopedClosureRunner closure_runner;
   };
-  // Removes all files received from other apps if |all_files| is true.
-  // Otherwise, removes the unreferenced files only. |closure_runner| is called
+  // Removes all files received from other apps if `all_files` is true.
+  // Otherwise, removes the unreferenced files only. `closure_runner` is called
   // when the removal finishes.
   void Remove(bool all_files, base::ScopedClosureRunner closure_runner);
-  // Removes files received from other apps. If |all_files| is true, then
+  // Removes files received from other apps. If `all_files` is true, then
   // all files including files that may be referenced by tabs through restore
   // service or history. Otherwise, only the unreferenced files are removed.
-  // |closure_runner| is called when the removal finishes.
+  // `closure_runner` is called when the removal finishes.
   void RemoveFiles(bool all_files, base::ScopedClosureRunner closure_runner);
   // Returns all Referenced External files.
   NSSet* GetReferencedExternalFiles();
@@ -73,7 +73,7 @@
   ChromeBrowserState* browser_state_ = nullptr;
   // Used to ensure that this class' methods are called on the correct sequence.
   SEQUENCE_CHECKER(sequence_checker_);
-  // Used to ensure |Remove()| is not run when this object is destroyed.
+  // Used to ensure `Remove()` is not run when this object is destroyed.
   base::WeakPtrFactory<ExternalFileRemoverImpl> weak_ptr_factory_;
 };
 
diff --git a/ios/chrome/browser/external_files/external_file_remover_impl.mm b/ios/chrome/browser/external_files/external_file_remover_impl.mm
index b7d96a3..0525f8b 100644
--- a/ios/chrome/browser/external_files/external_file_remover_impl.mm
+++ b/ios/chrome/browser/external_files/external_file_remover_impl.mm
@@ -41,7 +41,7 @@
 // Conversion factor to turn number of days to number of seconds.
 const CFTimeInterval kSecondsPerDay = 60 * 60 * 24;
 
-// Empty callback. The closure owned by |closure_runner| will be invoked as
+// Empty callback. The closure owned by `closure_runner` will be invoked as
 // part of the destructor of base::ScopedClosureRunner (which takes care of
 // checking for null closure).
 void RunCallback(base::ScopedClosureRunner closure_runner) {}
@@ -106,8 +106,8 @@
 }
 
 // Removes all the files in the Inbox directory that are not in
-// |files_to_keep| and that are older than |age_in_days| days.
-// |files_to_keep| may be nil if all files should be removed.
+// `files_to_keep` and that are older than `age_in_days` days.
+// `files_to_keep` may be nil if all files should be removed.
 void RemoveFilesWithOptions(NSSet* files_to_keep, NSInteger age_in_days) {
   base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
                                                 base::BlockingType::WILL_BLOCK);
diff --git a/ios/chrome/browser/geolocation/geolocation_logger.mm b/ios/chrome/browser/geolocation/geolocation_logger.mm
index 99ae0e2..113715948 100644
--- a/ios/chrome/browser/geolocation/geolocation_logger.mm
+++ b/ios/chrome/browser/geolocation/geolocation_logger.mm
@@ -112,8 +112,8 @@
     switch (locationManager.authorizationStatus) {
       case kCLAuthorizationStatusNotDetermined:
         // We may get a spurious notification about a transition to
-        // |kCLAuthorizationStatusNotDetermined| when we first start location
-        // services. Ignore it and don't reset |systemPrompt_| until we get a
+        // `kCLAuthorizationStatusNotDetermined` when we first start location
+        // services. Ignore it and don't reset `systemPrompt_` until we get a
         // real change.
         break;
 
diff --git a/ios/chrome/browser/google/google_logo_service.h b/ios/chrome/browser/google/google_logo_service.h
index 7d611702..1a995c2e 100644
--- a/ios/chrome/browser/google/google_logo_service.h
+++ b/ios/chrome/browser/google/google_logo_service.h
@@ -33,7 +33,7 @@
 
   using LogoServiceImpl::GetLogo;
 
-  // |LogoService::GetLogo| does everything on callbacks, and iOS needs to load
+  // `LogoService::GetLogo` does everything on callbacks, and iOS needs to load
   // the logo immediately on page load. This caches the SkBitmap so we can
   // immediately load. This prevents showing the google logo on every new tab
   // page and immediately animating to the logo. Only one SkBitmap is cached per
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h
index 5e5acb7..f9668b8d 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h
@@ -78,6 +78,8 @@
 // of times it has been displayed and if the user closed the sign-in promo view.
 + (BOOL)shouldDisplaySigninPromoViewWithAccessPoint:
             (signin_metrics::AccessPoint)accessPoint
+                              authenticationService:
+                                  (AuthenticationService*)authenticationService
                                         prefService:(PrefService*)prefService;
 
 // See -[SigninPromoViewMediator initWithBrowserState:].
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
index a7a2007f..ce2e837 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
@@ -434,10 +434,21 @@
 
 + (BOOL)shouldDisplaySigninPromoViewWithAccessPoint:
             (signin_metrics::AccessPoint)accessPoint
+                              authenticationService:
+                                  (AuthenticationService*)authenticationService
                                         prefService:(PrefService*)prefService {
   // Checks if user can't sign in.
-  if (!signin::IsSigninAllowed(prefService)) {
-    return NO;
+  switch (authenticationService->GetServiceStatus()) {
+    case AuthenticationService::ServiceStatus::SigninForcedByPolicy:
+    case AuthenticationService::ServiceStatus::SigninAllowed:
+      // The user is allowed to sign-in, so the sign-in/sync promo can be
+      // displayed.
+      break;
+    case AuthenticationService::ServiceStatus::SigninDisabledByUser:
+    case AuthenticationService::ServiceStatus::SigninDisabledByPolicy:
+    case AuthenticationService::ServiceStatus::SigninDisabledByInternal:
+      // The user is not allowed to sign-in. The promo cannot be displayed.
+      return NO;
   }
 
   // Checks if the user has exceeded the max impression count.
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
index dc81d54..441dcf0 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
@@ -522,6 +522,7 @@
   EXPECT_FALSE([SigninPromoViewMediator
       shouldDisplaySigninPromoViewWithAccessPoint:signin_metrics::AccessPoint::
                                                       ACCESS_POINT_RECENT_TABS
+                            authenticationService:GetAuthenticationService()
                                       prefService:browser_state->GetPrefs()]);
 }
 
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm
index 8c4cb633..5233b13 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm
@@ -102,9 +102,12 @@
     return;
 
   DCHECK(_browserState);
+  AuthenticationService* authenticationService =
+      AuthenticationServiceFactory::GetForBrowserState(_browserState);
   if ([SigninPromoViewMediator
           shouldDisplaySigninPromoViewWithAccessPoint:
               signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER
+                                authenticationService:authenticationService
                                           prefService:_browserState
                                                           ->GetPrefs()]) {
     signin::IdentityManager* identityManager =
diff --git a/ios/chrome/browser/ui/ntp/feed_top_section/feed_top_section_mediator.mm b/ios/chrome/browser/ui/ntp/feed_top_section/feed_top_section_mediator.mm
index 2405162..bf24c07c 100644
--- a/ios/chrome/browser/ui/ntp/feed_top_section/feed_top_section_mediator.mm
+++ b/ios/chrome/browser/ui/ntp/feed_top_section/feed_top_section_mediator.mm
@@ -7,6 +7,7 @@
 #import "components/signin/public/identity_manager/identity_manager.h"
 #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
 #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h"
 #import "ios/chrome/browser/ui/ntp/feed_top_section/feed_top_section_consumer.h"
@@ -156,9 +157,12 @@
       [self.ntpDelegate isStartSurface]) {
     return;
   }
+  AuthenticationService* authenticationService =
+      AuthenticationServiceFactory::GetForBrowserState(_browserState);
   if ([SigninPromoViewMediator
           shouldDisplaySigninPromoViewWithAccessPoint:
               signin_metrics::AccessPoint::ACCESS_POINT_NTP_FEED_TOP_PROMO
+                                authenticationService:authenticationService
                                           prefService:_browserState
                                                           ->GetPrefs()]) {
     signin::IdentityManager* identityManager =
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
index a58724b..f24eca3 100644
--- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -642,9 +642,12 @@
 
   SyncSetupService* syncSetupService =
       SyncSetupServiceFactory::GetForBrowserState(_browserState);
+  AuthenticationService* authenticationService =
+      AuthenticationServiceFactory::GetForBrowserState(_browserState);
   return [SigninPromoViewMediator
              shouldDisplaySigninPromoViewWithAccessPoint:
                  signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS
+                                   authenticationService:authenticationService
                                              prefService:_browserState
                                                              ->GetPrefs()] &&
          !syncSetupService->IsFirstSetupComplete();
diff --git a/ios/chrome/browser/web/font_size/font_size_tab_helper.mm b/ios/chrome/browser/web/font_size/font_size_tab_helper.mm
index eb5cc41..a22c22ad 100644
--- a/ios/chrome/browser/web/font_size/font_size_tab_helper.mm
+++ b/ios/chrome/browser/web/font_size/font_size_tab_helper.mm
@@ -316,10 +316,11 @@
 }
 
 double FontSizeTabHelper::GetCurrentUserZoomMultiplier() const {
-  const base::Value* pref =
-      GetPrefService()->Get(prefs::kIosUserZoomMultipliers);
+  const base::Value::Dict& pref =
+      GetPrefService()->GetValueDict(prefs::kIosUserZoomMultipliers);
 
-  return pref->FindDoublePath(GetCurrentUserZoomMultiplierKey()).value_or(1);
+  return pref.FindDoubleByDottedPath(GetCurrentUserZoomMultiplierKey())
+      .value_or(1);
 }
 
 void FontSizeTabHelper::StoreCurrentUserZoomMultiplier(double multiplier) {
diff --git a/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm b/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm
index c3f5e47..13a28109 100644
--- a/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm
+++ b/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm
@@ -290,9 +290,9 @@
   // Check that new zoom value is also saved in the pref under the right key.
   std::string pref_key =
       ZoomMultiplierPrefKey(preferred_content_size_category_, test_url);
-  const base::Value* pref =
-      browser_state_->GetPrefs()->Get(prefs::kIosUserZoomMultipliers);
-  EXPECT_EQ(1.1, pref->FindDoublePath(pref_key));
+  const base::Value::Dict& pref =
+      browser_state_->GetPrefs()->GetValueDict(prefs::kIosUserZoomMultipliers);
+  EXPECT_EQ(1.1, pref.FindDoubleByDottedPath(pref_key));
 }
 
 // Tests that the user can zoom out, and that after zooming out, the correct
@@ -313,9 +313,9 @@
   // Check that new zoom value is also saved in the pref under the right key.
   std::string pref_key =
       ZoomMultiplierPrefKey(preferred_content_size_category_, test_url);
-  const base::Value* pref =
-      browser_state_->GetPrefs()->Get(prefs::kIosUserZoomMultipliers);
-  EXPECT_EQ(0.9, pref->FindDoublePath(pref_key));
+  const base::Value::Dict& pref =
+      browser_state_->GetPrefs()->GetValueDict(prefs::kIosUserZoomMultipliers);
+  EXPECT_EQ(0.9, pref.FindDoubleByDottedPath(pref_key));
 }
 
 // Tests after resetting the zoom level, the correct Javascript has been
@@ -330,15 +330,15 @@
   font_size_tab_helper->UserZoom(ZOOM_IN);
   std::string pref_key =
       ZoomMultiplierPrefKey(preferred_content_size_category_, test_url);
-  const base::Value* pref =
-      browser_state_->GetPrefs()->Get(prefs::kIosUserZoomMultipliers);
-  EXPECT_EQ(1.1, pref->FindDoublePath(pref_key));
+  const base::Value::Dict& pref =
+      browser_state_->GetPrefs()->GetValueDict(prefs::kIosUserZoomMultipliers);
+  EXPECT_EQ(1.1, pref.FindDoubleByDottedPath(pref_key));
 
   // Then reset. The pref key should be removed from the dictionary.
   font_size_tab_helper->UserZoom(ZOOM_RESET);
 
   EXPECT_TRUE(WaitForMainFrameTextSizeAdjustmentEqualTo(100));
-  EXPECT_FALSE(pref->FindDoublePath(pref_key));
+  EXPECT_FALSE(pref.FindDoubleByDottedPath(pref_key));
 }
 
 // Tests that when the user changes the accessibility content size category and
@@ -358,9 +358,9 @@
   // 1.12 from accessibility * 1.1 from zoom
   EXPECT_TRUE(WaitForMainFrameTextSizeAdjustmentEqualTo(123));
   // Only the user zoom portion is stored in the preferences.
-  const base::Value* pref =
-      browser_state_->GetPrefs()->Get(prefs::kIosUserZoomMultipliers);
-  EXPECT_EQ(1.1, pref->FindDoublePath(pref_key));
+  const base::Value::Dict& pref =
+      browser_state_->GetPrefs()->GetValueDict(prefs::kIosUserZoomMultipliers);
+  EXPECT_EQ(1.1, pref.FindDoubleByDottedPath(pref_key));
 }
 
 // Tests that the user pref is cleared when requested.
@@ -375,18 +375,18 @@
       base::Seconds(base::test::ios::kSpinDelaySeconds));
 
   // Make sure the first value is stored in the pref store.
-  const base::Value* pref =
-      browser_state_->GetPrefs()->Get(prefs::kIosUserZoomMultipliers);
+  const base::Value::Dict& pref =
+      browser_state_->GetPrefs()->GetValueDict(prefs::kIosUserZoomMultipliers);
   std::string pref_key =
       ZoomMultiplierPrefKey(preferred_content_size_category_, test_url);
-  EXPECT_EQ(1.1, pref->FindDoublePath(pref_key));
+  EXPECT_EQ(1.1, pref.FindDoubleByDottedPath(pref_key));
 
   FontSizeTabHelper::ClearUserZoomPrefs(browser_state_->GetPrefs());
 
   EXPECT_TRUE(browser_state_.get()
                   ->GetPrefs()
-                  ->Get(prefs::kIosUserZoomMultipliers)
-                  ->DictEmpty());
+                  ->GetValueDict(prefs::kIosUserZoomMultipliers)
+                  .empty());
 }
 
 TEST_F(FontSizeTabHelperTest, GoogleCachedAMPPageHasSeparateKey) {
@@ -412,8 +412,8 @@
 
   EXPECT_NE(google_pref_key, google_amp_pref_key);
 
-  const base::Value* pref =
-      browser_state_->GetPrefs()->Get(prefs::kIosUserZoomMultipliers);
-  EXPECT_EQ(1.1, pref->FindDoublePath(google_pref_key));
-  EXPECT_EQ(0.9, pref->FindDoublePath(google_amp_pref_key));
+  const base::Value::Dict& pref =
+      browser_state_->GetPrefs()->GetValueDict(prefs::kIosUserZoomMultipliers);
+  EXPECT_EQ(1.1, pref.FindDoubleByDottedPath(google_pref_key));
+  EXPECT_EQ(0.9, pref.FindDoubleByDottedPath(google_amp_pref_key));
 }
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_am.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_am.xtb
index 76e7275..ddb46919 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_am.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_am.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="am">
+<translation id="2513892053093488070">የድምፅ ፍለጋ</translation>
+<translation id="2535710892645968259">ከማያ ገጽ ቁልፍዎ ወደ Chrome Dino ጨዋታ ይዝለሉ።</translation>
 <translation id="2542770169955243077">Chrome Dino ጨዋታ</translation>
 <translation id="302608144225178783">ከመነሻ ማያ ገጽዎ ወደ የChrome Dino ጨዋታ ይዝለሉ።</translation>
+<translation id="3296938369177810197">የድምፅ ፍለጋ</translation>
 <translation id="3464120926993669599">ማንነት የማያሳውቅ ፍለጋ</translation>
+<translation id="3501428580460217920">Chrome ውስጥ በአዲስ ማንነት የማያሳውቅ ትር ይፈልጉ ወይም ያስሱ።</translation>
 <translation id="3528874492835415837">ይፈልጉ ወይም ዩአርኤል ይጻፉ</translation>
+<translation id="3798529146539130967">ድምጽዎን ተጠቅመው በChrome ውስጥ ይፈልጉ።</translation>
 <translation id="405442954313519726">ድምጽዎን፣ ወይም በQR ኮድ በመጠቀም፣ በአዲስ ትር ውስጥ ማንነት በማያሳውቅ ሁኔታ ይፈልጉ ወይም ያስሱ።</translation>
+<translation id="4557098988773644458">ወደ Chrome Dino ጨዋታ ዝለል</translation>
 <translation id="4954445889641385956">ይፈልጉ ወይም ዩአርኤል ይጻፉ</translation>
+<translation id="5234725349196694896">በሚወዱት የፍለጋ ፕሮግራም አማካኝነት በChrome ውስጥ ይፈልጉ።</translation>
 <translation id="5277852985315196237">ይፈልጉ ወይም ዩአርኤል ይጻፉ</translation>
 <translation id="529497070985873480">Chrome Dino</translation>
 <translation id="5683557219437283801">የድምጽ ፍለጋ</translation>
 <translation id="6179961764474023795">ፈጣን እርምጃዎች</translation>
+<translation id="6336802729091778259">የChrome Dino ጨዋታ</translation>
+<translation id="6663288906398689853">ይፈልጉ</translation>
 <translation id="6855322554930231468">ፍለጋ</translation>
+<translation id="7010831364920321713">ማንነት የማያሳውቅ ፍለጋ</translation>
 <translation id="7048549665319929185">ይፈልጉ ወይም
 ዩአርኤል ይጻፉ</translation>
 <translation id="7317302007099170473">የQR ኮድን ይቃኙ</translation>
+<translation id="744668050028871192">ይፈልጉ</translation>
 <translation id="8104498668011127805">ወደ Chrome Dino ጨዋታ ይዝለሉ</translation>
+<translation id="8171952085734471362">ማንነት የማያሳውቅ ፍለጋ</translation>
 <translation id="8564942608461410346">በሚወዱት የፍለጋ ፕሮግራም አማካኝነት በChrome ውስጥ ይፈልጉ።</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_bg.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_bg.xtb
index 03f48d7..e5985d60 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_bg.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_bg.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
+<translation id="2513892053093488070">Гласово търсене</translation>
+<translation id="2535710892645968259">Влизайте в играта с динозавъра в Chrome направо от заключения си екран.</translation>
 <translation id="2542770169955243077">Играта с динозавъра в Chrome</translation>
 <translation id="302608144225178783">Влизайте в играта с динозавъра в Chrome направо от началния си екран.</translation>
+<translation id="3296938369177810197">Гласово търсене</translation>
 <translation id="3464120926993669599">Търсене в режим „инкогнито“</translation>
+<translation id="3501428580460217920">Търсете или навигирайте в нов раздел в режим „инкогнито“ в Chrome.</translation>
 <translation id="3528874492835415837">Търсете или въведете URL адрес</translation>
+<translation id="3798529146539130967">Търсете в Chrome посредством гласа си.</translation>
 <translation id="405442954313519726">Търсете или навигирайте в нов раздел, в режим „инкогнито“, като ползвате гласа си или чрез QR код.</translation>
+<translation id="4557098988773644458">Отваряне на играта с динозавъра в Chrome</translation>
 <translation id="4954445889641385956">Търсете или въведете URL адрес</translation>
+<translation id="5234725349196694896">Търсете в Chrome с любимата си търсеща машина.</translation>
 <translation id="5277852985315196237">Търсете или въведете URL адрес</translation>
 <translation id="529497070985873480">Динозавърът в Chrome</translation>
 <translation id="5683557219437283801">Гласово търсене</translation>
 <translation id="6179961764474023795">Бързи действия</translation>
+<translation id="6336802729091778259">Играта с динозавъра в Chrome</translation>
+<translation id="6663288906398689853">Търсене</translation>
 <translation id="6855322554930231468">Търсене</translation>
+<translation id="7010831364920321713">Търсене в режим „инкогнито“</translation>
 <translation id="7048549665319929185">Търсете
 или въведете URL адрес</translation>
 <translation id="7317302007099170473">Сканиране на QR код</translation>
+<translation id="744668050028871192">Търсене</translation>
 <translation id="8104498668011127805">Отваряне на играта с динозавъра в Chrome</translation>
+<translation id="8171952085734471362">Търсене в режим „инкогнито“</translation>
 <translation id="8564942608461410346">Търсете в Chrome с любимата си търсеща машина.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_da.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_da.xtb
index a8c3fd48..8386473 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_da.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_da.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
+<translation id="2513892053093488070">Stemmesøgning</translation>
+<translation id="2535710892645968259">Hop ind i Chrome Dino-spillet via din låseskærm.</translation>
 <translation id="2542770169955243077">Chrome Dino-spillet</translation>
 <translation id="302608144225178783">Hop ind i Chrome Dino-spillet via din startskærm.</translation>
+<translation id="3296938369177810197">Stemmesøgning</translation>
 <translation id="3464120926993669599">Søgning i inkognitotilstand</translation>
+<translation id="3501428580460217920">Søg eller naviger i en ny inkognitofane i Chrome.</translation>
 <translation id="3528874492835415837">Søg, eller angiv en webadresse</translation>
+<translation id="3798529146539130967">Søg i Chrome ved hjælp af stemmen.</translation>
 <translation id="405442954313519726">Du kan søge og finde rundt på en ny fane, i inkognitotilstand, ved hjælp af din stemme eller med en QR-kode.</translation>
+<translation id="4557098988773644458">Hop ind i Chrome Dino-spillet</translation>
 <translation id="4954445889641385956">Søg, eller angiv en webadresse</translation>
+<translation id="5234725349196694896">Søg i Chrome med din foretrukne søgemaskine.</translation>
 <translation id="5277852985315196237">Søg, eller angiv en webadresse</translation>
 <translation id="529497070985873480">Chrome Dino</translation>
 <translation id="5683557219437283801">Stemmesøgning</translation>
 <translation id="6179961764474023795">Genvejsmenu</translation>
+<translation id="6336802729091778259">Chrome Dino-spillet</translation>
+<translation id="6663288906398689853">Søg</translation>
 <translation id="6855322554930231468">Søgning</translation>
+<translation id="7010831364920321713">Søgning i inkognitotilstand</translation>
 <translation id="7048549665319929185">Søg, eller
 angiv en webadresse</translation>
 <translation id="7317302007099170473">Scan QR-kode</translation>
+<translation id="744668050028871192">Søg</translation>
 <translation id="8104498668011127805">Hop ind i Chrome Dino-spillet</translation>
+<translation id="8171952085734471362">Søgning i inkognitotilstand</translation>
 <translation id="8564942608461410346">Søg i Chrome med din foretrukne søgemaskine.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_es-419.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_es-419.xtb
index 03001cb..2fd3455 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_es-419.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_es-419.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="es-419">
+<translation id="2513892053093488070">Búsqueda por voz</translation>
+<translation id="2535710892645968259">Comienza a disfrutar el juego del dinosaurio de Chrome desde la pantalla de bloqueo.</translation>
 <translation id="2542770169955243077">Juego del dinosaurio de Chrome</translation>
 <translation id="302608144225178783">Comienza a disfrutar el juego del dinosaurio de Chrome desde la pantalla principal.</translation>
+<translation id="3296938369177810197">Búsqueda por voz</translation>
 <translation id="3464120926993669599">Búsqueda en el modo Incógnito</translation>
+<translation id="3501428580460217920">Realiza búsquedas o navega en una nueva pestaña de incógnito en Chrome.</translation>
 <translation id="3528874492835415837">Buscar o escribir URL</translation>
+<translation id="3798529146539130967">Realiza búsquedas en Chrome usando tu voz.</translation>
 <translation id="405442954313519726">Realiza una búsqueda o navega en una pestaña nueva, en el modo Incógnito, usando tu voz o con un código QR.</translation>
+<translation id="4557098988773644458">Comenzar el juego del dinosaurio de Chrome</translation>
 <translation id="4954445889641385956">Buscar o escribir URL</translation>
+<translation id="5234725349196694896">Realiza búsquedas en Chrome con tu motor de búsqueda favorito.</translation>
 <translation id="5277852985315196237">Buscar o escribir URL</translation>
 <translation id="529497070985873480">Dinosaurio de Chrome</translation>
 <translation id="5683557219437283801">Búsqueda por voz</translation>
 <translation id="6179961764474023795">Acciones rápidas</translation>
+<translation id="6336802729091778259">Juego del dinosaurio de Chrome</translation>
+<translation id="6663288906398689853">Búsqueda</translation>
 <translation id="6855322554930231468">Búsqueda</translation>
+<translation id="7010831364920321713">Búsqueda en el modo Incógnito</translation>
 <translation id="7048549665319929185">Buscar o
 escribir una URL</translation>
 <translation id="7317302007099170473">Escanear código QR</translation>
+<translation id="744668050028871192">Búsqueda</translation>
 <translation id="8104498668011127805">Comenzar el juego del dinosaurio de Chrome</translation>
+<translation id="8171952085734471362">Búsqueda en el modo Incógnito</translation>
 <translation id="8564942608461410346">Realiza búsquedas en Chrome con tu motor de búsqueda favorito.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_eu.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_eu.xtb
index 6334ccfa..7c0af52 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_eu.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_eu.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="eu">
+<translation id="2513892053093488070">Ahozko bilaketa</translation>
+<translation id="2535710892645968259">Joan hasierako pantailatik Chrome-ko Dino jokora.</translation>
 <translation id="2542770169955243077">Chrome-ko Dino jokoa</translation>
 <translation id="302608144225178783">Joan hasierako pantailatik Chrome-ko Dino jokora.</translation>
+<translation id="3296938369177810197">Ahozko bilaketa</translation>
 <translation id="3464120926993669599">Ezkutuko moduko bilaketa</translation>
+<translation id="3501428580460217920">Egin bilaketak edo nabigatu Chrome-ko ezkutuko moduko beste fitxa batean.</translation>
 <translation id="3528874492835415837">Bilatu zerbait edo idatzi URL bat</translation>
+<translation id="3798529146539130967">Egin bilaketak Chrome-n ahotsa erabilita.</translation>
 <translation id="405442954313519726">Egin bilaketak edo nabigatu fitxa berri batean, ezkutuko moduan, ahotsa erabiliz edo QR kode baten bidez.</translation>
+<translation id="4557098988773644458">Joan Chrome-ko Dino jokora</translation>
 <translation id="4954445889641385956">Bilatu zerbait edo idatzi URL bat</translation>
+<translation id="5234725349196694896">Erabili gogoko duzun bilatzailea Chrome-n.</translation>
 <translation id="5277852985315196237">Bilatu zerbait edo idatzi URL bat</translation>
 <translation id="529497070985873480">Chrome-ko Dino</translation>
 <translation id="5683557219437283801">Ahozko bilaketa</translation>
 <translation id="6179961764474023795">Ekintza bizkorrak</translation>
+<translation id="6336802729091778259">Chrome-ko Dino jokoa</translation>
+<translation id="6663288906398689853">Bilatu</translation>
 <translation id="6855322554930231468">Bilaketa</translation>
+<translation id="7010831364920321713">Ezkutuko moduko bilaketa</translation>
 <translation id="7048549665319929185">Bilatu zerbait
 edo idatzi URL bat</translation>
 <translation id="7317302007099170473">Eskaneatu QR kodea</translation>
+<translation id="744668050028871192">Bilatu</translation>
 <translation id="8104498668011127805">Joan Chrome-ko Dino jokora</translation>
+<translation id="8171952085734471362">Ezkutuko moduko bilaketa</translation>
 <translation id="8564942608461410346">Erabili gogoko duzun bilatzailea Chrome-n.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_gl.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_gl.xtb
index 6a807dde..c4ec644 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_gl.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_gl.xtb
@@ -1,19 +1,31 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="gl">
+<translation id="2513892053093488070">Busca por voz</translation>
+<translation id="2535710892645968259">Salta ao xogo do dinosauro de Chrome desde a pantalla de bloqueo.</translation>
 <translation id="2542770169955243077">Xogo do dinosauro de Chrome</translation>
 <translation id="302608144225178783">Salta ao xogo do dinosauro de Chrome desde a pantalla de inicio.</translation>
+<translation id="3296938369177810197">Busca por voz</translation>
 <translation id="3464120926993669599">Busca do modo de incógnito</translation>
+<translation id="3501428580460217920">Busca contido ou navega nunha pestana nova do modo de incógnito en Chrome.</translation>
 <translation id="3528874492835415837">Buscar ou escribir URL</translation>
+<translation id="3798529146539130967">Realiza buscas en Chrome usando a voz.</translation>
 <translation id="405442954313519726">Busca contido ou navega nunha pestana nova, no modo de incógnito, coa túa voz ou cun código QR.</translation>
+<translation id="4557098988773644458">Saltar ao xogo do dinosauro de Chrome</translation>
 <translation id="4954445889641385956">Buscar ou escribir URL</translation>
+<translation id="5234725349196694896">Busca contido en Chrome co teu motor de busca favorito.</translation>
 <translation id="5277852985315196237">Buscar ou escribir URL</translation>
 <translation id="529497070985873480">O dinosauro de Chrome</translation>
 <translation id="5683557219437283801">Busca por voz</translation>
 <translation id="6179961764474023795">Accións rápidas</translation>
+<translation id="6336802729091778259">Xogo do dinosauro de Chrome</translation>
+<translation id="6663288906398689853">Buscar</translation>
 <translation id="6855322554930231468">Busca</translation>
+<translation id="7010831364920321713">Busca do modo de incógnito</translation>
 <translation id="7048549665319929185">Buscar contido ou escribir o URL</translation>
 <translation id="7317302007099170473">Escanear código QR</translation>
+<translation id="744668050028871192">Buscar</translation>
 <translation id="8104498668011127805">Saltar ao xogo do dinosauro de Chrome</translation>
+<translation id="8171952085734471362">Busca do modo de incógnito</translation>
 <translation id="8564942608461410346">Busca contido en Chrome co teu motor de busca favorito.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_id.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_id.xtb
index 515367e..b8e8de25 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_id.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_id.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="id">
+<translation id="2513892053093488070">Penelusuran Suara</translation>
+<translation id="2535710892645968259">Buka Game Chrome Dino dari layar kunci Anda.</translation>
 <translation id="2542770169955243077">Game Chrome Dino</translation>
 <translation id="302608144225178783">Buka game Chrome Dino dari Layar Utama Anda.</translation>
+<translation id="3296938369177810197">Penelusuran Suara</translation>
 <translation id="3464120926993669599">Penelusuran Samaran</translation>
+<translation id="3501428580460217920">Telusuri atau buka di tab Samaran baru di Chrome.</translation>
 <translation id="3528874492835415837">Telusuri atau Ketik URL</translation>
+<translation id="3798529146539130967">Telusuri di Chrome menggunakan suara Anda.</translation>
 <translation id="405442954313519726">Telusuri atau buka di tab baru dalam mode Samaran, menggunakan suara Anda, atau dengan kode QR.</translation>
+<translation id="4557098988773644458">Buka Game Chrome Dino</translation>
 <translation id="4954445889641385956">Telusuri atau ketik URL</translation>
+<translation id="5234725349196694896">Telusuri di Chrome dengan mesin telusur favorit Anda.</translation>
 <translation id="5277852985315196237">Telusuri atau ketik URL</translation>
 <translation id="529497070985873480">Chrome Dino</translation>
 <translation id="5683557219437283801">Penelusuran Suara</translation>
 <translation id="6179961764474023795">Tindakan Cepat</translation>
+<translation id="6336802729091778259">Game Chrome Dino</translation>
+<translation id="6663288906398689853">Penelusuran</translation>
 <translation id="6855322554930231468">Telusuri</translation>
+<translation id="7010831364920321713">Penelusuran Samaran</translation>
 <translation id="7048549665319929185">Telusuri atau
 ketik URL</translation>
 <translation id="7317302007099170473">Pindai Kode QR</translation>
+<translation id="744668050028871192">Penelusuran</translation>
 <translation id="8104498668011127805">Buka Game Chrome Dino</translation>
+<translation id="8171952085734471362">Penelusuran Samaran</translation>
 <translation id="8564942608461410346">Telusuri di Chrome dengan mesin telusur favorit Anda.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ja.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ja.xtb
index 278696cc..3dbbbf6 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ja.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ja.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ja">
+<translation id="2513892053093488070">音声検索</translation>
+<translation id="2535710892645968259">ロック画面から Chrome Dino ゲームに移動できます。</translation>
 <translation id="2542770169955243077">Chrome Dino ゲーム</translation>
 <translation id="302608144225178783">ホーム画面から Chrome Dino ゲームに移動できます。</translation>
+<translation id="3296938369177810197">音声検索</translation>
 <translation id="3464120926993669599">シークレット検索</translation>
+<translation id="3501428580460217920">Chrome の新しいシークレット タブで検索や操作を行えます。</translation>
 <translation id="3528874492835415837">検索または URL を入力</translation>
+<translation id="3798529146539130967">Chrome で音声を使って検索できます。</translation>
 <translation id="405442954313519726">新しいタブ、シークレット モード、音声、QR コードで検索や操作を行えます。</translation>
+<translation id="4557098988773644458">Chrome Dino ゲームに移動</translation>
 <translation id="4954445889641385956">検索または URL を入力</translation>
+<translation id="5234725349196694896">Chrome でお気に入りの検索エンジンを使って検索できます。</translation>
 <translation id="5277852985315196237">検索または URL を入力</translation>
 <translation id="529497070985873480">Chrome Dino</translation>
 <translation id="5683557219437283801">音声検索</translation>
 <translation id="6179961764474023795">クイック操作</translation>
+<translation id="6336802729091778259">Chrome Dino ゲーム</translation>
+<translation id="6663288906398689853">検索</translation>
 <translation id="6855322554930231468">検索</translation>
+<translation id="7010831364920321713">シークレット検索</translation>
 <translation id="7048549665319929185">検索または
 URL を入力</translation>
 <translation id="7317302007099170473">QR コードをスキャン</translation>
+<translation id="744668050028871192">検索</translation>
 <translation id="8104498668011127805">Chrome Dino ゲームに移動</translation>
+<translation id="8171952085734471362">シークレット検索</translation>
 <translation id="8564942608461410346">Chrome でお気に入りの検索エンジンを使って検索できます。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_km.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_km.xtb
index 1cdee9f..2de3c3e 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_km.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_km.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="km">
+<translation id="2513892053093488070">ស្វែងរក​​តាម​​សំឡេង</translation>
+<translation id="2535710892645968259">ចូលក្នុងហ្គេមដាយណូស័រ Chrome ពីអេក្រង់ចាក់សោរបស់អ្នក។</translation>
 <translation id="2542770169955243077">ហ្គេម Chrome ដាយណូស័រ</translation>
 <translation id="302608144225178783">ចូលក្នុងហ្គេម Chrome ដាយណូស័រ ពីអេក្រង់ដើមរបស់អ្នក។</translation>
+<translation id="3296938369177810197">ស្វែងរក​​តាម​​សំឡេង</translation>
 <translation id="3464120926993669599">ការស្វែងរក​លក្ខណៈឯកជន</translation>
+<translation id="3501428580460217920">ស្វែងរក ឬរុករកនៅក្នុងផ្ទាំងឯកជនថ្មីក្នុង Chrome។</translation>
 <translation id="3528874492835415837">ស្វែងរក ឬវាយបញ្ចូល URL</translation>
+<translation id="3798529146539130967">ស្វែងរកនៅក្នុង Chrome ដោយប្រើសំឡេងរបស់អ្នក។</translation>
 <translation id="405442954313519726">ស្វែងរក ឬរុករកនៅក្នុងផ្ទាំងថ្មី​ នៅក្នុងមុខងារ​ឯកជន ដោយប្រើសំឡេងរបស់អ្នក ឬដោយប្រើកូដ QR។</translation>
+<translation id="4557098988773644458">ចូលក្នុងហ្គេមដាយណូស័រ Chrome</translation>
 <translation id="4954445889641385956">ស្វែងរក ឬវាយបញ្ចូល URL</translation>
+<translation id="5234725349196694896">ស្វែងរកនៅក្នុង Chrome ដោយប្រើម៉ាស៊ីន​ស្វែងរកដែលអ្នកពេញចិត្ត។</translation>
 <translation id="5277852985315196237">ស្វែងរក ឬវាយបញ្ចូល URL</translation>
 <translation id="529497070985873480">Chrome ដាយណូស័រ</translation>
 <translation id="5683557219437283801">ស្វែងរក​តាមសំឡេង</translation>
 <translation id="6179961764474023795">សកម្មភាពរហ័ស</translation>
+<translation id="6336802729091778259">ហ្គេមដាយណូស័រ Chrome</translation>
+<translation id="6663288906398689853">ស្វែងរក</translation>
 <translation id="6855322554930231468">ស្វែងរក</translation>
+<translation id="7010831364920321713">ការស្វែងរក​លក្ខណៈឯកជន</translation>
 <translation id="7048549665319929185">ស្វែងរក ឬ
 វាយបញ្ចូល URL</translation>
 <translation id="7317302007099170473">ស្កេន​កូដ QR</translation>
+<translation id="744668050028871192">ស្វែងរក</translation>
 <translation id="8104498668011127805">ចូលក្នុងហ្គេម Chrome ដាយណូស័រ</translation>
+<translation id="8171952085734471362">ការស្វែងរក​លក្ខណៈឯកជន</translation>
 <translation id="8564942608461410346">ស្វែងរកនៅក្នុង Chrome ដោយប្រើម៉ាស៊ីន​ស្វែងរកដែលអ្នកចូលចិត្ត។</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ko.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ko.xtb
index 14f675d1..8603f28 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ko.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ko.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ko">
+<translation id="2513892053093488070">음성 검색</translation>
+<translation id="2535710892645968259">잠금 화면에서 Chrome 공룡 게임을 바로 시작합니다.</translation>
 <translation id="2542770169955243077">Chrome 공룡 게임</translation>
 <translation id="302608144225178783">홈 화면에서 Chrome 공룡 게임을 바로 시작하세요.</translation>
+<translation id="3296938369177810197">음성 검색</translation>
 <translation id="3464120926993669599">시크릿 검색</translation>
+<translation id="3501428580460217920">Chrome의 새 시크릿 탭에서 검색하거나 탐색합니다.</translation>
 <translation id="3528874492835415837">검색 또는 URL 입력</translation>
+<translation id="3798529146539130967">Chrome에서 음성으로 검색합니다.</translation>
 <translation id="405442954313519726">새 탭 또는 시크릿 모드, 음성 또는 QR 코드를 사용하여 검색하거나 탐색하세요.</translation>
+<translation id="4557098988773644458">Chrome 공룡 게임 시작</translation>
 <translation id="4954445889641385956">검색 또는 URL 입력</translation>
+<translation id="5234725349196694896">Chrome에서 내가 좋아하는 검색엔진을 이용하여 검색합니다.</translation>
 <translation id="5277852985315196237">검색 또는 URL 입력</translation>
 <translation id="529497070985873480">Chrome 공룡 게임</translation>
 <translation id="5683557219437283801">음성 검색</translation>
 <translation id="6179961764474023795">빠른 작업</translation>
+<translation id="6336802729091778259">Chrome 공룡 게임</translation>
+<translation id="6663288906398689853">검색</translation>
 <translation id="6855322554930231468">검색</translation>
+<translation id="7010831364920321713">시크릿 검색</translation>
 <translation id="7048549665319929185">검색 또는
 URL 입력</translation>
 <translation id="7317302007099170473">QR 코드 스캔</translation>
+<translation id="744668050028871192">검색</translation>
 <translation id="8104498668011127805">Chrome 공룡 게임 시작</translation>
+<translation id="8171952085734471362">시크릿 검색</translation>
 <translation id="8564942608461410346">Chrome에서 내가 좋아하는 검색엔진을 이용하여 검색하세요.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_lo.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_lo.xtb
index b8e5cd0..6e1eadf 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_lo.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_lo.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lo">
+<translation id="2513892053093488070">ຊອກຫາດ້ວຍສຽງ</translation>
+<translation id="2535710892645968259">ໄປທີ່ເກມ Chrome Dino ຈາກໜ້າຈໍລັອກຂອງທ່ານ.</translation>
 <translation id="2542770169955243077">ເກມ Chrome Dino</translation>
 <translation id="302608144225178783">ໄປທີ່ເກມ Chrome Dino ຈາກໜ້າຈໍຫຼັກຂອງທ່ານ.</translation>
+<translation id="3296938369177810197">ຊອກຫາດ້ວຍສຽງ</translation>
 <translation id="3464120926993669599">ການຊອກຫາແບບບໍ່ເປີດເຜີຍຕົວຕົນ</translation>
+<translation id="3501428580460217920">ຊອກຫາ ຫຼື ນຳທາງໃນແຖບບໍ່ເປີດເຜີຍຕົວຕົນໃໝ່ໃນ Chrome.</translation>
 <translation id="3528874492835415837">ຊອກຫາ ຫຼື ພິມ URL</translation>
+<translation id="3798529146539130967">ຊອກຫາໃນ Chrome ໂດຍໃຊ້ສຽງຂອງທ່ານ.</translation>
 <translation id="405442954313519726">ຊອກຫາ ຫຼື ນຳທາງໃນແຖບໃໝ່, ໃນໂໝດບໍ່ເປີດເຜີຍຕົວຕົນ, ໂດຍໃຊ້ສຽງຂອງທ່ານ ຫຼື ດ້ວຍລະຫັດ QR.</translation>
+<translation id="4557098988773644458">ໄປທີ່ເກມ Chrome Dino</translation>
 <translation id="4954445889641385956">ຊອກຫາ ຫຼື ພິມ URL</translation>
+<translation id="5234725349196694896">ຊອກຫາໃນ Chrome ດ້ວຍໂປຣແກຣມຊອກຫາທີ່ທ່ານມັກ.</translation>
 <translation id="5277852985315196237">ຊອກຫາ ຫຼື ພິມ URL</translation>
 <translation id="529497070985873480">Chrome Dino</translation>
 <translation id="5683557219437283801">ຊອກຫາດ້ວຍສຽງ</translation>
 <translation id="6179961764474023795">ຄຳສັ່ງດ່ວນ</translation>
+<translation id="6336802729091778259">ເກມ Chrome Dino</translation>
+<translation id="6663288906398689853">ຊອກຫາ</translation>
 <translation id="6855322554930231468">ຊອກຫາ</translation>
+<translation id="7010831364920321713">ການຊອກຫາແບບບໍ່ເປີດເຜີຍຕົວຕົນ</translation>
 <translation id="7048549665319929185">ຊອກຫາ ຫຼື
 ພິມ URL</translation>
 <translation id="7317302007099170473">ສະແກນລະຫັດ QR</translation>
+<translation id="744668050028871192">ຊອກຫາ</translation>
 <translation id="8104498668011127805">ໄປທີ່ເກມ Chrome Dino</translation>
+<translation id="8171952085734471362">ການຊອກຫາແບບບໍ່ເປີດເຜີຍຕົວຕົນ</translation>
 <translation id="8564942608461410346">ຊອກຫາໃນ Chrome ດ້ວຍໂປຣແກຣມຊອກຫາທີ່ທ່ານມັກ.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_mn.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_mn.xtb
index 6abd7b2..4c7c7c4 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_mn.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_mn.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mn">
+<translation id="2513892053093488070">Дуут хайлт</translation>
+<translation id="2535710892645968259">Түгжигдсэн дэлгэцээсээ Chrome Dino тоглоомыг тоглоорой.</translation>
 <translation id="2542770169955243077">Chrome-н Дино тоглоом</translation>
 <translation id="302608144225178783">Үндсэн нүүрээсээ Chrome-н Дино тоглоомыг тоглоорой.</translation>
+<translation id="3296938369177810197">Дуут хайлт</translation>
 <translation id="3464120926993669599">Нууцлалтай хайлт</translation>
+<translation id="3501428580460217920">Chrome-н шинэ нууцлалтай табаас хайх эсвэл шилжээрэй.</translation>
 <translation id="3528874492835415837">Хайх эсвэл URL-г бичих</translation>
+<translation id="3798529146539130967">Chrome-с дуу хоолойгоо ашиглан хайгаарай.</translation>
 <translation id="405442954313519726">Дуу хоолой эсвэл QR кодыг ашиглан шинэ таб, Нууцлалын горимд хайж эсвэл шилжээрэй.</translation>
+<translation id="4557098988773644458">Chrome Dino тоглоомыг тоглоорой</translation>
 <translation id="4954445889641385956">Хайх эсвэл URL-г бичих</translation>
+<translation id="5234725349196694896">Дуртай хайлтын системээрээ Chrome-с хайгаарай.</translation>
 <translation id="5277852985315196237">Хайх эсвэл URL-г бичих</translation>
 <translation id="529497070985873480">Chrome-н Дино</translation>
 <translation id="5683557219437283801">Дуут хайлт</translation>
 <translation id="6179961764474023795">Шуурхай үйлдэл</translation>
+<translation id="6336802729091778259">Chrome Dino тоглоом</translation>
+<translation id="6663288906398689853">Хайх</translation>
 <translation id="6855322554930231468">Хайлт</translation>
+<translation id="7010831364920321713">Нууцлалтай хайлт</translation>
 <translation id="7048549665319929185">Хайх эсвэл
 URL-г бичих</translation>
 <translation id="7317302007099170473">QR кодыг скан хийх</translation>
+<translation id="744668050028871192">Хайх</translation>
 <translation id="8104498668011127805">Chrome-н Дино тоглоомыг тоглоорой</translation>
+<translation id="8171952085734471362">Нууцлалтай хайлт</translation>
 <translation id="8564942608461410346">Дуртай хайлтын системээрээ Chrome-с хайгаарай.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ru.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ru.xtb
index 893b304..863cf53 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ru.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ru.xtb
@@ -1,19 +1,31 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ru">
+<translation id="2513892053093488070">Голосовой поиск</translation>
+<translation id="2535710892645968259">Запускайте игру Chrome Dino с заблокированного экрана.</translation>
 <translation id="2542770169955243077">Игра Chrome Dino</translation>
 <translation id="302608144225178783">Запускайте игру Chrome Dino с главного экрана.</translation>
+<translation id="3296938369177810197">Голосовой поиск</translation>
 <translation id="3464120926993669599">Поиск в режиме инкогнито</translation>
+<translation id="3501428580460217920">Вводите поисковые запросы и просматривайте сайты на вкладке инкогнито в Chrome.</translation>
 <translation id="3528874492835415837">Введите запрос или URL</translation>
+<translation id="3798529146539130967">Вводите поисковые запросы в Chrome с помощью голосовых команд.</translation>
 <translation id="405442954313519726">Вводите запросы, пользуйтесь голосовым поиском, переключайтесь в режим инкогнито и открывайте веб-страницы по QR-коду.</translation>
+<translation id="4557098988773644458">Удобный запуск игры Chrome Dino</translation>
 <translation id="4954445889641385956">Введите запрос или URL</translation>
+<translation id="5234725349196694896">Пользуйтесь любимой поисковой системой в Chrome.</translation>
 <translation id="5277852985315196237">Введите запрос или URL</translation>
 <translation id="529497070985873480">Chrome Dino</translation>
 <translation id="5683557219437283801">Голосовой поиск</translation>
 <translation id="6179961764474023795">Панель действий</translation>
+<translation id="6336802729091778259">Игра Chrome Dino</translation>
+<translation id="6663288906398689853">Поиск</translation>
 <translation id="6855322554930231468">Поиск</translation>
+<translation id="7010831364920321713">Поиск в режиме инкогнито</translation>
 <translation id="7048549665319929185">Введите запрос или URL</translation>
 <translation id="7317302007099170473">Сканировать QR-код</translation>
+<translation id="744668050028871192">Поиск</translation>
 <translation id="8104498668011127805">Запустить игру Chrome Dino</translation>
+<translation id="8171952085734471362">Поиск в режиме инкогнито</translation>
 <translation id="8564942608461410346">Пользуйтесь любимой поисковой системой в Chrome.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sk.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sk.xtb
index 2beca88..b8487181 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sk.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sk.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sk">
+<translation id="2513892053093488070">Hlasové vyhľadávanie</translation>
+<translation id="2535710892645968259">Prejdite do hry Chrome Dino priamo z plochy.</translation>
 <translation id="2542770169955243077">Hra Dinosaurus v Chrome</translation>
 <translation id="302608144225178783">Prejdite do hry Dinosaurus v Chrome priamo z plochy.</translation>
+<translation id="3296938369177810197">Hlasové vyhľadávanie</translation>
 <translation id="3464120926993669599">Vyhľadávanie v režime inkognito</translation>
+<translation id="3501428580460217920">Vyhľadávate alebo prechádzajte v Chrome na novej karte inkognito.</translation>
 <translation id="3528874492835415837">Vyhľadávanie alebo zadávanie webovej adresy</translation>
+<translation id="3798529146539130967">Vyhľadávajte v Chrome hlasom.</translation>
 <translation id="405442954313519726">Hľadajte alebo prechádzajte na novej karte, v režime inkognito, hlasom alebo pomocou QR kódu.</translation>
+<translation id="4557098988773644458">Prejsť do hry Chrome Dino</translation>
 <translation id="4954445889641385956">Hľadať alebo zadať webovú adresu</translation>
+<translation id="5234725349196694896">Vyhľadávajte v Chrome pomocou svojho obľúbeného vyhľadávača.</translation>
 <translation id="5277852985315196237">Vyhľadávanie alebo zadávanie webovej adresy</translation>
 <translation id="529497070985873480">Dinosaurus v Chrome</translation>
 <translation id="5683557219437283801">Hlasové vyhľadávanie</translation>
 <translation id="6179961764474023795">Rýchle akcie</translation>
+<translation id="6336802729091778259">Hra Chrome Dino</translation>
+<translation id="6663288906398689853">Hľadať</translation>
 <translation id="6855322554930231468">Vyhľadávanie</translation>
+<translation id="7010831364920321713">Vyhľadávanie v režime inkognito</translation>
 <translation id="7048549665319929185">Vyhľadávanie alebo
 zadávanie webovej adresy</translation>
 <translation id="7317302007099170473">Naskenovať QR kód</translation>
+<translation id="744668050028871192">Hľadať</translation>
 <translation id="8104498668011127805">Prejsť do hry Dinosaurus v Chrome</translation>
+<translation id="8171952085734471362">Vyhľadávanie v režime inkognito</translation>
 <translation id="8564942608461410346">Vyhľadávajte v Chrome pomocou svojho obľúbeného vyhľadávača.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sl.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sl.xtb
index 33e42687..4f835869 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sl.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_sl.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sl">
+<translation id="2513892053093488070">Glasovno iskanje</translation>
+<translation id="2535710892645968259">Začnite igrati igro Dino za Chrome kar na zaklenjenem zaslonu.</translation>
 <translation id="2542770169955243077">Igra Dino za Chrome</translation>
 <translation id="302608144225178783">Začnite igrati igro Dino za Chrome kar z začetnega zaslona.</translation>
+<translation id="3296938369177810197">Glasovno iskanje</translation>
 <translation id="3464120926993669599">Anonimno iskanje</translation>
+<translation id="3501428580460217920">Iščite ali se pomikajte na novem anonimnem zavihku v Chromu.</translation>
 <translation id="3528874492835415837">Iskanje ali vnos URL-ja</translation>
+<translation id="3798529146539130967">Iščite v Chromu z glasom.</translation>
 <translation id="405442954313519726">Iskanje ali pomikanje na novem zavihku, v anonimnem načinu, z govorom ali s kodo QR.</translation>
+<translation id="4557098988773644458">Začetek igranja igre Dino za Chrome</translation>
 <translation id="4954445889641385956">Iskanje ali vnos URL-ja</translation>
+<translation id="5234725349196694896">Iščite v Chromu s priljubljenim iskalnikom.</translation>
 <translation id="5277852985315196237">Poiščite ali vnesite URL</translation>
 <translation id="529497070985873480">Dino za Chrome</translation>
 <translation id="5683557219437283801">Glasovno iskanje</translation>
 <translation id="6179961764474023795">Hitra dejanja</translation>
+<translation id="6336802729091778259">Igra Dino za Chrome</translation>
+<translation id="6663288906398689853">Iskanje</translation>
 <translation id="6855322554930231468">Iskanje</translation>
+<translation id="7010831364920321713">Anonimno iskanje</translation>
 <translation id="7048549665319929185">Poiščite ali
 vnesite URL</translation>
 <translation id="7317302007099170473">Optično branje kode QR</translation>
+<translation id="744668050028871192">Iskanje</translation>
 <translation id="8104498668011127805">Začetek igranja igre Dino za Chrome</translation>
+<translation id="8171952085734471362">Anonimno iskanje</translation>
 <translation id="8564942608461410346">Iščite v Chromu s priljubljenim iskalnikom.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ta.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ta.xtb
index fed0165..61ab5f0 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ta.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_ta.xtb
@@ -1,20 +1,32 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ta">
+<translation id="2513892053093488070">குரல் மூலம் தேடலாம்</translation>
+<translation id="2535710892645968259">பூட்டுத் திரையிலிருந்தே Chrome டைனோசர் கேமிற்குச் செல்லலாம்.</translation>
 <translation id="2542770169955243077">Chrome டைனோசர் கேம்</translation>
 <translation id="302608144225178783">முகப்புத் திரையிலிருந்தே Chrome டைனோசர் கேமிற்குச் செல்லலாம்.</translation>
+<translation id="3296938369177810197">குரல் தேடல்</translation>
 <translation id="3464120926993669599">மறைநிலைத் தேடல்</translation>
+<translation id="3501428580460217920">Chromeமில் புதிய மறைநிலைப் பக்கத்தில் தேடலாம் அல்லது வழிசெலுத்தலாம்.</translation>
 <translation id="3528874492835415837">தேடலாம் அல்லது URLலை உள்ளிடலாம்</translation>
+<translation id="3798529146539130967">உங்கள் குரலைப் பயன்படுத்தி Chromeமில் தேடலாம்.</translation>
 <translation id="405442954313519726">புதிய தாவலிலும் மறைநிலைப் பயன்முறையிலும் உங்கள் குரல்/QR குறியீடு மூலம் தேடலாம் அல்லது வழிசெலுத்தலாம்.</translation>
+<translation id="4557098988773644458">Chrome டைனோசர் கேமிற்குச் செல்லும்</translation>
 <translation id="4954445889641385956">தேடலாம் அல்லது URLலை உள்ளிடலாம்</translation>
+<translation id="5234725349196694896">உங்களுக்கு விருப்பமான தேடல் இன்ஜின் மூலம் Chromeமில் தேடலாம்.</translation>
 <translation id="5277852985315196237">தேடுக அல்லது URLலை உள்ளிடுக</translation>
 <translation id="529497070985873480">Chrome டைனோசர்</translation>
 <translation id="5683557219437283801">குரல் தேடல்</translation>
 <translation id="6179961764474023795">விரைவுச் செயல்பாடுகள்</translation>
+<translation id="6336802729091778259">Chrome டைனோசர் கேம்</translation>
+<translation id="6663288906398689853">தேடல்</translation>
 <translation id="6855322554930231468">தேடல்</translation>
+<translation id="7010831364920321713">மறைநிலைத் தேடல்</translation>
 <translation id="7048549665319929185">தேடுக அல்லது
 URLலை உள்ளிடுக</translation>
 <translation id="7317302007099170473">QR குறியீட்டை ஸ்கேன் செய்யும்</translation>
+<translation id="744668050028871192">தேடும்</translation>
 <translation id="8104498668011127805">Chrome டைனோசர் கேமிற்குச் செல்லும்</translation>
+<translation id="8171952085734471362">மறைநிலைப் பக்கத்தில் தேடலாம்</translation>
 <translation id="8564942608461410346">உங்களுக்கு விருப்பமான தேடல் இன்ஜினைப் பயன்படுத்தி Chromeமில் தேடலாம்.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_zh-HK.xtb b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_zh-HK.xtb
index df785740..e0e7562 100644
--- a/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_zh-HK.xtb
+++ b/ios/chrome/widget_kit_extension/strings/resources/ios_widget_kit_extension_strings_zh-HK.xtb
@@ -2,18 +2,18 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-HK">
 <translation id="2513892053093488070">語音搜尋</translation>
-<translation id="2535710892645968259">從螢幕鎖定畫面進入 Chrome 恐龍遊戲。</translation>
+<translation id="2535710892645968259">從上鎖畫面進入 Chrome 恐龍遊戲。</translation>
 <translation id="2542770169955243077">Chrome 恐龍遊戲</translation>
 <translation id="302608144225178783">從主畫面進入 Chrome 恐龍遊戲。</translation>
 <translation id="3296938369177810197">語音搜尋</translation>
 <translation id="3464120926993669599">無痕搜尋</translation>
-<translation id="3501428580460217920">在 Chrome 中使用全新無痕分頁搜尋或瀏覽內容。</translation>
+<translation id="3501428580460217920">在 Chrome 使用新無痕式分頁搜尋或瀏覽內容。</translation>
 <translation id="3528874492835415837">搜尋或者輸入網址</translation>
-<translation id="3798529146539130967">在 Chrome 中使用語音進行搜尋。</translation>
+<translation id="3798529146539130967">在 Chrome 中使用語音搜尋。</translation>
 <translation id="405442954313519726">透過新分頁、無痕模式、語音搜尋或 QR 碼來搜尋或瀏覽。</translation>
 <translation id="4557098988773644458">進入 Chrome 恐龍遊戲</translation>
 <translation id="4954445889641385956">搜尋或輸入網址</translation>
-<translation id="5234725349196694896">在 Chrome 中使用你喜好的搜尋引擎進行搜尋。</translation>
+<translation id="5234725349196694896">在 Chrome 使用您喜愛的搜尋引擎進行搜尋。</translation>
 <translation id="5277852985315196237">搜尋或輸入網址</translation>
 <translation id="529497070985873480">Chrome 恐龍</translation>
 <translation id="5683557219437283801">語音搜尋</translation>
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h
index a000c0b..c7837efe 100644
--- a/net/base/net_error_list.h
+++ b/net/base/net_error_list.h
@@ -814,6 +814,11 @@
 // request should be invalidated.
 NET_ERROR(INCONSISTENT_IP_ADDRESS_SPACE, -383)
 
+// The IP address space of the cached remote endpoint is blocked by private
+// network access check.
+NET_ERROR(CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY,
+          -384)
+
 // The cache does not have the requested entry.
 NET_ERROR(CACHE_MISS, -400)
 
diff --git a/net/base/registry_controlled_domains/OWNERS b/net/base/registry_controlled_domains/OWNERS
index 33ed6c7e..242a993 100644
--- a/net/base/registry_controlled_domains/OWNERS
+++ b/net/base/registry_controlled_domains/OWNERS
@@ -1,3 +1,2 @@
 cfredric@chromium.org
-pam@chromium.org
 pkasting@chromium.org
diff --git a/net/base/registry_controlled_domains/effective_tld_names.dat b/net/base/registry_controlled_domains/effective_tld_names.dat
index 6365ade3..cf52263a 100644
--- a/net/base/registry_controlled_domains/effective_tld_names.dat
+++ b/net/base/registry_controlled_domains/effective_tld_names.dat
@@ -26,8 +26,7 @@
 ad
 nom.ad
 
-// ae : https://en.wikipedia.org/wiki/.ae
-// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php
+// ae : https://tdra.gov.ae/en/aeda/ae-policies
 ae
 co.ae
 net.ae
@@ -1320,7 +1319,9 @@
 ie
 gov.ie
 
-// il : http://www.isoc.org.il/domains/
+// il :         http://www.isoc.org.il/domains/
+// see also:    https://en.isoc.org.il/il-cctld/registration-rules
+// ISOC-IL      (operated by .il Registry)
 il
 ac.il
 co.il
@@ -1330,6 +1331,16 @@
 muni.il
 net.il
 org.il
+// xn--4dbrk0ce ("Israel", Hebrew) : IL
+ישראל
+// xn--4dbgdty6c.xn--4dbrk0ce.
+אקדמיה.ישראל
+// xn--5dbhl8d.xn--4dbrk0ce.
+ישוב.ישראל
+// xn--8dbq2a.xn--4dbrk0ce.
+צהל.ישראל
+// xn--hebda8b.xn--4dbrk0ce.
+ממשל.ישראל
 
 // im : https://www.nic.im/
 // Submitted by registry <info@nic.im>
@@ -1345,22 +1356,51 @@
 tv.im
 
 // in : https://en.wikipedia.org/wiki/.in
-// see also: https://registry.in/Policies
+// see also: https://registry.in/policies
 // Please note, that nic.in is not an official eTLD, but used by most
 // government institutions.
 in
-co.in
-firm.in
-net.in
-org.in
-gen.in
-ind.in
-nic.in
+5g.in
+6g.in
 ac.in
+ai.in
+am.in
+bihar.in
+biz.in
+business.in
+ca.in
+cn.in
+co.in
+com.in
+coop.in
+cs.in
+delhi.in
+dr.in
 edu.in
-res.in
+er.in
+firm.in
+gen.in
 gov.in
+gujarat.in
+ind.in
+info.in
+int.in
+internet.in
+io.in
+me.in
 mil.in
+net.in
+nic.in
+org.in
+pg.in
+post.in
+pro.in
+res.in
+travel.in
+tv.in
+uk.in
+up.in
+us.in
 
 // info : https://en.wikipedia.org/wiki/.info
 info
@@ -7135,7 +7175,7 @@
 
 // newGTLDs
 
-// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-03-22T15:14:59Z
+// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-07-28T15:14:54Z
 // This list is auto-generated, don't edit it manually.
 // aaa : 2015-02-26 American Automobile Association, Inc.
 aaa
@@ -7476,7 +7516,7 @@
 // black : 2014-01-16 Afilias Limited
 black
 
-// blackfriday : 2014-01-16 UNR Corp.
+// blackfriday : 2014-01-16 Registry Services, LLC
 blackfriday
 
 // blockbuster : 2015-07-30 Dish DBS Corporation
@@ -7692,7 +7732,7 @@
 // channel : 2014-05-08 Charleston Road Registry Inc.
 channel
 
-// charity : 2018-04-11 Binky Moon, LLC
+// charity : 2018-04-11 Public Interest Registry
 charity
 
 // chase : 2015-04-30 JPMorgan Chase Bank, National Association
@@ -7839,7 +7879,7 @@
 // coupons : 2015-03-26 Binky Moon, LLC
 coupons
 
-// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+// courses : 2014-12-04 Registry Services, LLC
 courses
 
 // cpa : 2019-06-10 American Institute of Certified Public Accountants
@@ -8025,7 +8065,7 @@
 // dvr : 2016-05-26 DISH Technologies L.L.C.
 dvr
 
-// earth : 2014-12-04 Interlink Co., Ltd.
+// earth : 2014-12-04 Interlink Systems Innovation Institute K.K.
 earth
 
 // eat : 2014-01-23 Charleston Road Registry Inc.
@@ -8232,7 +8272,7 @@
 // forum : 2015-04-02 Fegistry, LLC
 forum
 
-// foundation : 2013-12-05 Binky Moon, LLC
+// foundation : 2013-12-05 Public Interest Registry
 foundation
 
 // fox : 2015-09-11 FOX Registry, LLC
@@ -8313,7 +8353,7 @@
 // gea : 2014-12-04 GEA Group Aktiengesellschaft
 gea
 
-// gent : 2014-01-23 COMBELL NV
+// gent : 2014-01-23 Easyhost BV
 gent
 
 // genting : 2015-03-12 Resorts World Inc Pte. Ltd.
@@ -8331,7 +8371,7 @@
 // gifts : 2014-07-03 Binky Moon, LLC
 gifts
 
-// gives : 2014-03-06 Dog Beach, LLC
+// gives : 2014-03-06 Public Interest Registry
 gives
 
 // giving : 2014-11-13 Giving Limited
@@ -8457,7 +8497,7 @@
 // healthcare : 2014-06-12 Binky Moon, LLC
 healthcare
 
-// help : 2014-06-26 UNR Corp.
+// help : 2014-06-26 Innovation service Limited
 help
 
 // helsinki : 2015-02-05 City of Helsinki
@@ -8472,7 +8512,7 @@
 // hgtv : 2015-07-02 Lifestyle Domain Holdings, Inc.
 hgtv
 
-// hiphop : 2014-03-06 Dot Hip Hop LLC
+// hiphop : 2014-03-06 Dot Hip Hop, LLC
 hiphop
 
 // hisamitsu : 2015-07-16 Hisamitsu Pharmaceutical Co.,Inc.
@@ -8784,7 +8824,7 @@
 // lasalle : 2015-04-02 Jones Lang LaSalle Incorporated
 lasalle
 
-// lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico
+// lat : 2014-10-16 XYZ.COM LLC
 lat
 
 // latino : 2015-07-30 Dish DBS Corporation
@@ -8856,7 +8896,7 @@
 // linde : 2014-12-04 Linde Aktiengesellschaft
 linde
 
-// link : 2013-11-14 UNR Corp.
+// link : 2013-11-14 Nova Registry Ltd
 link
 
 // lipsy : 2015-06-25 Lipsy Ltd
@@ -8871,7 +8911,7 @@
 // llc : 2017-12-14 Afilias Limited
 llc
 
-// llp : 2019-08-26 UNR Corp.
+// llp : 2019-08-26 Intercap Registry Inc.
 llp
 
 // loan : 2014-11-20 dot Loan Limited
@@ -9039,7 +9079,7 @@
 // moda : 2013-11-07 Dog Beach, LLC
 moda
 
-// moe : 2013-11-13 Interlink Co., Ltd.
+// moe : 2013-11-13 Interlink Systems Innovation Institute K.K.
 moe
 
 // moi : 2014-12-18 Amazon Registry Services, Inc.
@@ -9312,7 +9352,7 @@
 // phone : 2016-06-02 Dish DBS Corporation
 phone
 
-// photo : 2013-11-14 UNR Corp.
+// photo : 2013-11-14 Registry Services, LLC
 photo
 
 // photography : 2013-09-20 Binky Moon, LLC
@@ -9555,7 +9595,7 @@
 // rugby : 2016-12-15 World Rugby Strategic Developments Limited
 rugby
 
-// ruhr : 2013-10-02 regiodot GmbH & Co. KG
+// ruhr : 2013-10-02 dotSaarland GmbH
 ruhr
 
 // run : 2015-03-19 Binky Moon, LLC
@@ -9846,7 +9886,7 @@
 // studio : 2015-02-11 Dog Beach, LLC
 studio
 
-// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+// study : 2014-12-11 Registry Services, LLC
 study
 
 // style : 2014-12-04 Binky Moon, LLC
@@ -9906,7 +9946,7 @@
 // tatar : 2014-04-24 Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic"
 tatar
 
-// tattoo : 2013-08-30 UNR Corp.
+// tattoo : 2013-08-30 Top Level Design, LLC
 tattoo
 
 // tax : 2014-03-20 Binky Moon, LLC
@@ -9999,7 +10039,7 @@
 // toshiba : 2014-04-10 TOSHIBA Corporation
 toshiba
 
-// total : 2015-08-06 Total SA
+// total : 2015-08-06 TOTAL SE
 total
 
 // tours : 2015-01-22 Binky Moon, LLC
@@ -10637,6 +10677,12 @@
 // Submitted by Przemyslaw Plewa <it-admin@domena.pl>
 beep.pl
 
+// Airkit : https://www.airkit.com/
+// Submitted by Grant Cooksey <security@airkit.com>
+airkitapps.com
+airkitapps-au.com
+airkitapps.eu
+
 // Aiven: https://aiven.io/
 // Submitted by Etienne Stalmans <security@aiven.io>
 aivencloud.com
@@ -11667,6 +11713,11 @@
 mytuleap.com
 tuleap-partners.com
 
+// Encoretivity AB: https://encore.dev
+// Submitted by André Eriksson <andre@encore.dev>
+encr.app
+encoreapi.com
+
 // ECG Robotics, Inc: https://ecgrobotics.org
 // Submitted by <frc1533@ecgrobotics.org>
 onred.one
@@ -11928,7 +11979,7 @@
 // Submitted by Jonathan Rudenberg <jonathan@flynn.io>
 flynnhosting.net
 
-// Forgerock : https://www.forgerock.com
+// Forgerock : https://www.forgerock.com
 // Submitted by Roderick Parr <roderick.parr@forgerock.com>
 forgeblocks.com
 id.forgerock.io
@@ -12105,6 +12156,7 @@
 kilo.jp
 kuron.jp
 littlestar.jp
+lolipopmc.jp
 lolitapunk.jp
 lomo.jp
 lovepop.jp
@@ -12275,6 +12327,10 @@
 // Submitted by Niels Martignene <hello@goupile.fr>
 goupile.fr
 
+// Government of the Netherlands: https://www.government.nl
+// Submitted by <domeinnaam@minaz.nl>
+gov.nl
+
 // Group 53, LLC : https://www.group53.com
 // Submitted by Tyler Todd <noc@nova53.net>
 awsmppl.com
@@ -12351,7 +12407,6 @@
 ngo.ng
 edu.scot
 sch.so
-org.yt
 
 // HostyHosting (hostyhosting.com)
 hostyhosting.io
@@ -12369,6 +12424,11 @@
 // Submitted by Hannu Aronsson <haa@iki.fi>
 iki.fi
 
+// iliad italia: https://www.iliad.it
+// Submitted by Marios Makassikis <mmakassikis@freebox.fr>
+ibxos.it
+iliadboxos.it
+
 // Impertrix Solutions : <https://impertrixcdn.com>
 // Submitted by Zhixiang Zhao <csuite@impertrix.com>
 impertrixcdn.com
@@ -12449,9 +12509,11 @@
 // Submitted by Matthew Hardeman <mhardeman@ipifony.com>
 ipifony.net
 
-// IServ GmbH : https://iserv.eu
-// Submitted by Kim-Alexander Brodowski <info@iserv.eu>
+// IServ GmbH : https://iserv.de
+// Submitted by Mario Hoberg <info@iserv.de>
+iservschule.de
 mein-iserv.de
+schulplattform.de
 schulserver.de
 test-iserv.de
 iserv.dev
@@ -12661,6 +12723,10 @@
 // Submitted by Victor Velchev <admin@liquidnetlimited.com>
 we.bs
 
+// Localcert : https://localcert.dev
+// Submitted by Lann Martin <security@localcert.dev>
+*.user.localcert.dev
+
 // localzone.xyz
 // Submitted by Kenny Niehage <hello@yahe.sh>
 localzone.xyz
@@ -12769,6 +12835,10 @@
 miniserver.com
 memset.net
 
+// Messerli Informatik AG : https://www.messerli.ch/
+// Submitted by Ruben Schmidmeister <psl-maintainers@messerli.ch>
+messerli.app
+
 // MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/
 // Submitted by Zdeněk Šustr <zdenek.sustr@cesnet.cz>
 *.cloud.metacentrum.cz
@@ -12788,12 +12858,13 @@
 co.pl
 
 // Microsoft Corporation : http://microsoft.com
-// Submitted by Mitch Webster <miwebst@microsoft.com>
+// Submitted by Public Suffix List Admin <msftpsladmin@microsoft.com>
 *.azurecontainer.io
 azurewebsites.net
 azure-mobile.net
 cloudapp.net
 azurestaticapps.net
+1.azurestaticapps.net
 centralus.azurestaticapps.net
 eastasia.azurestaticapps.net
 eastus2.azurestaticapps.net
@@ -13378,6 +13449,12 @@
 спб.рус
 я.рус
 
+// Salesforce.com, Inc. https://salesforce.com/
+// Submitted by Michael Biven <mbiven@salesforce.com>
+*.builder.code.com
+*.dev-builder.code.com
+*.stg-builder.code.com
+
 // Sandstorm Development Group, Inc. : https://sandcats.io/
 // Submitted by Asheesh Laroia <asheesh@sandstorm.io>
 sandcats.io
@@ -13387,6 +13464,34 @@
 logoip.de
 logoip.com
 
+// Scaleway : https://www.scaleway.com/
+// Submitted by Rémy Léone <rleone@scaleway.com>
+fr-par-1.baremetal.scw.cloud
+fr-par-2.baremetal.scw.cloud
+nl-ams-1.baremetal.scw.cloud
+fnc.fr-par.scw.cloud
+functions.fnc.fr-par.scw.cloud
+k8s.fr-par.scw.cloud
+nodes.k8s.fr-par.scw.cloud
+s3.fr-par.scw.cloud
+s3-website.fr-par.scw.cloud
+whm.fr-par.scw.cloud
+priv.instances.scw.cloud
+pub.instances.scw.cloud
+k8s.scw.cloud
+k8s.nl-ams.scw.cloud
+nodes.k8s.nl-ams.scw.cloud
+s3.nl-ams.scw.cloud
+s3-website.nl-ams.scw.cloud
+whm.nl-ams.scw.cloud
+k8s.pl-waw.scw.cloud
+nodes.k8s.pl-waw.scw.cloud
+s3.pl-waw.scw.cloud
+s3-website.pl-waw.scw.cloud
+scalebook.scw.cloud
+smartlabeling.scw.cloud
+dedibox.fr
+
 // schokokeks.org GbR : https://schokokeks.org/
 // Submitted by Hanno Böck <hanno@schokokeks.org>
 schokokeks.net
@@ -13607,19 +13712,20 @@
 
 // Synology, Inc. : https://www.synology.com/
 // Submitted by Rony Weng <ronyweng@synology.com>
-diskstation.me
 dscloud.biz
-dscloud.me
-dscloud.mobi
+direct.quickconnect.cn
 dsmynas.com
-dsmynas.net
-dsmynas.org
 familyds.com
-familyds.net
-familyds.org
+diskstation.me
+dscloud.me
 i234.me
 myds.me
 synology.me
+dscloud.mobi
+dsmynas.net
+familyds.net
+dsmynas.org
+familyds.org
 vpnplus.to
 direct.quickconnect.to
 
@@ -13772,6 +13878,15 @@
 ltd.hk
 inc.hk
 
+// UNIVERSAL DOMAIN REGISTRY : https://www.udr.org.yt/
+// see also: whois -h whois.udr.org.yt help
+// Submitted by Atanunu Igbunuroghene <publicsuffixlist@udr.org.yt>
+name.pm
+sch.tf
+biz.wf
+sch.wf
+org.yt
+
 // United Gameserver GmbH : https://united-gameserver.de
 // Submitted by Stefan Schwarz <sysadm@united-gameserver.de>
 virtualuser.de
diff --git a/net/base/registry_controlled_domains/effective_tld_names.gperf b/net/base/registry_controlled_domains/effective_tld_names.gperf
index e2fa64f..490782df 100644
--- a/net/base/registry_controlled_domains/effective_tld_names.gperf
+++ b/net/base/registry_controlled_domains/effective_tld_names.gperf
@@ -15,6 +15,7 @@
 001www.com, 4
 0e.vc, 4
 0emm.com, 6
+1.azurestaticapps.net, 4
 1.bg, 0
 12hp.at, 4
 12hp.ch, 4
@@ -37,9 +38,11 @@
 4lima.de, 4
 4u.com, 4
 5.bg, 0
+5g.in, 0
 6.bg, 0
 611.to, 4
 64-b.it, 4
+6g.in, 0
 7.bg, 0
 8.bg, 0
 9.bg, 0
@@ -188,6 +191,7 @@
 ah.cn, 0
 ah.no, 0
 ai, 0
+ai.in, 0
 aibetsu.hokkaido.jp, 0
 aichi.jp, 0
 aid.pl, 0
@@ -203,6 +207,9 @@
 aircraft.aero, 0
 airforce, 0
 airguard.museum, 0
+airkitapps-au.com, 4
+airkitapps.com, 4
+airkitapps.eu, 4
 airline.aero, 0
 airport.aero, 0
 airtel, 0
@@ -269,6 +276,7 @@
 am, 0
 am.br, 0
 am.gov.br, 0
+am.in, 0
 am.leg.br, 4
 ama.aichi.jp, 0
 ama.shimane.jp, 0
@@ -739,6 +747,7 @@
 bieszczady.pl, 0
 bievat.no, 0
 bifuka.hokkaido.jp, 0
+bihar.in, 0
 bihoro.hokkaido.jp, 0
 bike, 0
 bilbao.museum, 0
@@ -767,6 +776,7 @@
 biz.fj, 0
 biz.gl, 4
 biz.id, 0
+biz.in, 0
 biz.ki, 0
 biz.ls, 0
 biz.mv, 0
@@ -783,6 +793,7 @@
 biz.tt, 0
 biz.ua, 4
 biz.vn, 0
+biz.wf, 4
 biz.zm, 0
 bizen.okayama.jp, 0
 bj, 0
@@ -988,6 +999,7 @@
 bugatti, 0
 build, 0
 build.run, 6
+builder.code.com, 6
 builders, 0
 building.museum, 0
 builtwithdark.com, 4
@@ -1003,6 +1015,7 @@
 busan.kr, 0
 bushey.museum, 0
 business, 0
+business.in, 0
 but.jp, 4
 buy, 0
 buyshop.jp, 4
@@ -1029,6 +1042,7 @@
 ca, 0
 ca-central-1.elasticbeanstalk.com, 4
 ca.eu.org, 4
+ca.in, 0
 ca.it, 0
 ca.na, 0
 ca.reclaim.cloud, 4
@@ -1368,6 +1382,7 @@
 cn-northwest-1.eb.amazonaws.com.cn, 4
 cn.com, 4
 cn.eu.org, 4
+cn.in, 0
 cn.it, 0
 cn.ua, 0
 cn.vu, 4
@@ -1531,6 +1546,7 @@
 com.hr, 0
 com.ht, 0
 com.im, 0
+com.in, 0
 com.io, 0
 com.iq, 0
 com.is, 0
@@ -1659,6 +1675,7 @@
 coop.ar, 0
 coop.br, 0
 coop.ht, 0
+coop.in, 0
 coop.km, 0
 coop.mv, 0
 coop.mw, 0
@@ -1709,6 +1726,7 @@
 cruise, 0
 cruises, 0
 cryptonomic.net, 6
+cs.in, 0
 cs.it, 0
 cs.keliweb.cloud, 4
 csx.cc, 4
@@ -1821,12 +1839,14 @@
 deca.jp, 4
 deci.jp, 4
 decorativearts.museum, 0
+dedibox.fr, 4
 dedyn.io, 4
 def.br, 0
 definima.io, 4
 definima.net, 4
 degree, 0
 delaware.museum, 0
+delhi.in, 0
 delivery, 0
 dell, 0
 dell-ogliastra.it, 0
@@ -1859,6 +1879,7 @@
 deta.dev, 4
 detroit.museum, 0
 dev, 0
+dev-builder.code.com, 6
 dev-myqnapcloud.com, 4
 dev.adobeaemcloud.com, 6
 dev.br, 0
@@ -1883,6 +1904,7 @@
 diher.solutions, 6
 dinosaur.museum, 0
 direct, 0
+direct.quickconnect.cn, 4
 direct.quickconnect.to, 4
 directory, 0
 discordsays.com, 4
@@ -1947,6 +1969,7 @@
 dovre.no, 0
 download, 0
 dp.ua, 0
+dr.in, 0
 dr.na, 0
 dr.tr, 0
 drammen.no, 0
@@ -2238,6 +2261,8 @@
 en-root.fr, 4
 en.it, 0
 ena.gifu.jp, 0
+encoreapi.com, 4
+encr.app, 4
 encyclopedic.museum, 0
 endofinternet.net, 4
 endofinternet.org, 4
@@ -2269,6 +2294,7 @@
 equipment, 0
 equipment.aero, 0
 er, 2
+er.in, 0
 ericsson, 0
 erimo.hokkaido.jp, 0
 erni, 0
@@ -2492,6 +2518,7 @@
 fm.br, 0
 fm.it, 0
 fm.no, 0
+fnc.fr-par.scw.cloud, 4
 fnd.br, 0
 fnwk.site, 4
 fo, 0
@@ -2539,6 +2566,8 @@
 foz.br, 0
 fr, 0
 fr-1.paas.massivegrid.net, 4
+fr-par-1.baremetal.scw.cloud, 4
+fr-par-2.baremetal.scw.cloud, 4
 fr.eu.org, 4
 fr.it, 0
 fra1-de.cloudjiffy.net, 4
@@ -2691,6 +2720,7 @@
 funabashi.chiba.jp, 0
 funagata.yamagata.jp, 0
 funahashi.toyama.jp, 0
+functions.fnc.fr-par.scw.cloud, 4
 fund, 0
 fundacio.museum, 0
 fuoisku.no, 0
@@ -3010,6 +3040,7 @@
 gov.mz, 0
 gov.nc.tr, 0
 gov.ng, 0
+gov.nl, 4
 gov.nr, 0
 gov.om, 0
 gov.ph, 0
@@ -3130,6 +3161,7 @@
 guge, 0
 guide, 0
 guitars, 0
+gujarat.in, 0
 gujo.gifu.jp, 0
 gulen.no, 0
 gunma.jp, 0
@@ -3489,6 +3521,7 @@
 ibestad.no, 0
 ibigawa.gifu.jp, 0
 ibm, 0
+ibxos.it, 4
 ic.gov.pl, 0
 icbc, 0
 ice, 0
@@ -3549,6 +3582,7 @@
 il.eu.org, 4
 il.us, 0
 ilawa.pl, 0
+iliadboxos.it, 4
 illustration.museum, 0
 ilovecollege.info, 4
 im, 0
@@ -3642,6 +3676,7 @@
 info.gu, 0
 info.ht, 0
 info.hu, 0
+info.in, 0
 info.ke, 0
 info.ki, 0
 info.la, 0
@@ -3683,6 +3718,7 @@
 int.co, 0
 int.cv, 0
 int.eu.org, 4
+int.in, 0
 int.is, 0
 int.la, 0
 int.lk, 0
@@ -3699,12 +3735,14 @@
 interactive.museum, 0
 international, 0
 internet-dns.de, 4
+internet.in, 0
 intl.tn, 0
 intuit, 0
 inuyama.aichi.jp, 0
 investments, 0
 inzai.chiba.jp, 0
 io, 0
+io.in, 0
 io.kg, 4
 iobb.net, 4
 iopsys.se, 4
@@ -3810,6 +3848,7 @@
 isen.kagoshima.jp, 0
 isernia.it, 0
 iserv.dev, 4
+iservschule.de, 4
 isesaki.gunma.jp, 0
 ishigaki.okinawa.jp, 0
 ishikari.hokkaido.jp, 0
@@ -4034,6 +4073,10 @@
 k12.wa.us, 0
 k12.wi.us, 0
 k12.wy.us, 0
+k8s.fr-par.scw.cloud, 4
+k8s.nl-ams.scw.cloud, 4
+k8s.pl-waw.scw.cloud, 4
+k8s.scw.cloud, 4
 kaas.gg, 4
 kadena.okinawa.jp, 0
 kadogawa.miyazaki.jp, 0
@@ -4684,6 +4727,7 @@
 lohmus.me, 4
 lol, 0
 lolipop.io, 4
+lolipopmc.jp, 4
 lolitapunk.jp, 4
 lom.it, 0
 lom.no, 0
@@ -4884,6 +4928,7 @@
 md.us, 0
 me, 0
 me.eu.org, 4
+me.in, 0
 me.it, 0
 me.ke, 0
 me.so, 0
@@ -4944,6 +4989,7 @@
 merckmsd, 0
 merseine.nu, 4
 mesaverde.museum, 0
+messerli.app, 4
 messina.it, 0
 messwithdns.com, 4
 meteorapp.com, 4
@@ -5454,6 +5500,7 @@
 name.my, 0
 name.na, 0
 name.ng, 0
+name.pm, 4
 name.pr, 0
 name.qa, 0
 name.tj, 0
@@ -5780,6 +5827,7 @@
 nj.us, 0
 njs.jelastic.vps-host.net, 4
 nl, 0
+nl-ams-1.baremetal.scw.cloud, 4
 nl.ca, 0
 nl.ci, 4
 nl.eu.org, 4
@@ -5802,6 +5850,9 @@
 noda.chiba.jp, 0
 noda.iwate.jp, 0
 nodebalancer.linode.com, 6
+nodes.k8s.fr-par.scw.cloud, 4
+nodes.k8s.nl-ams.scw.cloud, 4
+nodes.k8s.pl-waw.scw.cloud, 4
 nog.community, 4
 nogata.fukuoka.jp, 0
 nogi.tochigi.jp, 0
@@ -6446,6 +6497,7 @@
 pf, 0
 pfizer, 0
 pg, 2
+pg.in, 0
 pg.it, 0
 pgafan.net, 4
 pgfog.com, 4
@@ -6563,6 +6615,7 @@
 portland.museum, 0
 portlligat.museum, 0
 post, 0
+post.in, 0
 postman-echo.com, 4
 posts-and-telecommunications.museum, 0
 potager.org, 4
@@ -6603,6 +6656,7 @@
 principe.st, 0
 priv.at, 4
 priv.hu, 0
+priv.instances.scw.cloud, 4
 priv.me, 0
 priv.no, 0
 priv.pl, 0
@@ -6614,6 +6668,7 @@
 pro.ec, 0
 pro.fj, 0
 pro.ht, 0
+pro.in, 0
 pro.mv, 0
 pro.na, 0
 pro.om, 0
@@ -6651,6 +6706,7 @@
 pt.it, 0
 pu.it, 0
 pub, 0
+pub.instances.scw.cloud, 4
 pub.sa, 0
 publ.pt, 0
 public-inquiry.uk, 4
@@ -6952,6 +7008,9 @@
 s3-website.eu-central-1.amazonaws.com, 4
 s3-website.eu-west-2.amazonaws.com, 4
 s3-website.eu-west-3.amazonaws.com, 4
+s3-website.fr-par.scw.cloud, 4
+s3-website.nl-ams.scw.cloud, 4
+s3-website.pl-waw.scw.cloud, 4
 s3-website.us-east-2.amazonaws.com, 4
 s3.amazonaws.com, 4
 s3.ap-northeast-2.amazonaws.com, 4
@@ -6974,6 +7033,9 @@
 s3.eu-central-1.amazonaws.com, 4
 s3.eu-west-2.amazonaws.com, 4
 s3.eu-west-3.amazonaws.com, 4
+s3.fr-par.scw.cloud, 4
+s3.nl-ams.scw.cloud, 4
+s3.pl-waw.scw.cloud, 4
 s3.teckids.org, 4
 s3.us-east-2.amazonaws.com, 4
 s5y.io, 6
@@ -7117,6 +7179,7 @@
 sc.ug, 0
 sc.us, 0
 sca, 0
+scalebook.scw.cloud, 4
 scb, 0
 sch.ae, 0
 sch.id, 0
@@ -7129,7 +7192,9 @@
 sch.sa, 0
 sch.so, 4
 sch.ss, 0
+sch.tf, 4
 sch.uk, 2
+sch.wf, 4
 sch.zm, 0
 schaeffler, 0
 schlesisches.museum, 0
@@ -7146,6 +7211,7 @@
 schoolbus.jp, 4
 schools.nsw.edu.au, 0
 schule, 0
+schulplattform.de, 4
 schulserver.de, 4
 schwarz, 0
 schweiz.museum, 0
@@ -7462,6 +7528,7 @@
 sm.ua, 0
 small-web.org, 4
 smart, 0
+smartlabeling.scw.cloud, 4
 smile, 0
 smola.no, 0
 smushcdn.com, 4
@@ -7597,6 +7664,7 @@
 steiermark.museum, 0
 steigen.no, 0
 steinkjer.no, 0
+stg-builder.code.com, 6
 stg.dev, 6
 stgstage.dev, 6
 sth.ac.at, 0
@@ -8078,6 +8146,7 @@
 transurl.nl, 6
 trapani.it, 0
 travel, 0
+travel.in, 0
 travel.pl, 0
 travel.tt, 0
 travelchannel, 0
@@ -8186,6 +8255,7 @@
 tv.bo, 0
 tv.br, 0
 tv.im, 0
+tv.in, 0
 tv.it, 0
 tv.kg, 4
 tv.na, 0
@@ -8244,6 +8314,7 @@
 uk, 0
 uk.com, 4
 uk.eu.org, 4
+uk.in, 0
 uk.kg, 4
 uk.net, 4
 uk.oxa.cloud, 4
@@ -8282,6 +8353,7 @@
 uol, 0
 uonuma.niigata.jp, 0
 uozu.toyama.jp, 0
+up.in, 0
 upaas.kazteleport.kz, 4
 upli.io, 4
 upow.gov.pl, 0
@@ -8317,6 +8389,7 @@
 us.com, 4
 us.eu.org, 4
 us.gov.pl, 0
+us.in, 0
 us.kg, 4
 us.na, 0
 us.org, 4
@@ -8330,6 +8403,7 @@
 usculture.museum, 0
 usdecorativearts.museum, 0
 user.aseinet.ne.jp, 4
+user.localcert.dev, 6
 user.party.eus, 4
 user.srcf.net, 4
 usercontent.goog, 6
@@ -8625,6 +8699,8 @@
 wf, 0
 whaling.museum, 0
 whitesnow.jp, 4
+whm.fr-par.scw.cloud, 4
+whm.nl-ams.scw.cloud, 4
 whoswho, 0
 wi.us, 0
 wielun.pl, 0
@@ -8727,6 +8803,8 @@
 xn--45br5cyl, 0
 xn--45brj9c, 0
 xn--45q11c, 0
+xn--4dbgdty6c.xn--4dbrk0ce, 0
+xn--4dbrk0ce, 0
 xn--4gbrim, 0
 xn--4it168d.jp, 0
 xn--4it797k.jp, 0
@@ -8737,6 +8815,7 @@
 xn--55qx5d.cn, 0
 xn--55qx5d.hk, 0
 xn--55qx5d.xn--j6w193g, 0
+xn--5dbhl8d.xn--4dbrk0ce, 0
 xn--5js045d.jp, 0
 xn--5rtp49c.jp, 0
 xn--5rtq34k.jp, 0
@@ -8754,6 +8833,7 @@
 xn--80asehdb, 0
 xn--80aswg, 0
 xn--80au.xn--90a3ac, 0
+xn--8dbq2a.xn--4dbrk0ce, 0
 xn--8ltr62k.jp, 0
 xn--8pvr4u.jp, 0
 xn--8y0a063a, 0
@@ -8875,6 +8955,7 @@
 xn--h3cuzk1di.xn--o3cw4h, 0
 xn--hbmer-xqa.no, 0
 xn--hcesuolo-7ya35b.no, 0
+xn--hebda8b.xn--4dbrk0ce, 0
 xn--hery-ira.nordland.no, 0
 xn--hery-ira.xn--mre-og-romsdal-qqb.no, 0
 xn--hgebostad-g3a.no, 0
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index 405fa57..fc53e0b 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -3304,6 +3304,15 @@
 
 int HttpCache::Transaction::DoConnectedCallbackComplete(int result) {
   if (result != OK) {
+    if (result ==
+        ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY) {
+      DoomInconsistentEntry();
+      UpdateCacheEntryStatus(CacheEntryStatus::ENTRY_OTHER);
+      TransitionToState(reading_ ? STATE_SEND_REQUEST
+                                 : STATE_HEADERS_PHASE_CANNOT_PROCEED);
+      return OK;
+    }
+
     if (result == ERR_INCONSISTENT_IP_ADDRESS_SPACE) {
       DoomInconsistentEntry();
     } else {
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index c26e46d7..931e132 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -1075,6 +1075,73 @@
   }
 }
 
+// This test verifies that when the callback passed to SetConnectedCallback()
+// returns
+// `ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY`, the
+// cache entry is invalidated, and we'll retry the connection from the network.
+TEST_F(
+    HttpCacheTest,
+    SimpleGET_ConnectedCallbackOnCacheHitReturnPrivateNetworkAccessBlockedError) {
+  MockHttpCache cache;
+
+  ScopedMockTransaction mock_transaction(kSimpleGET_Transaction);
+  mock_transaction.transport_info = TestTransportInfo();
+
+  // Populate the cache.
+  RunTransactionTest(cache.http_cache(), mock_transaction);
+
+  MockHttpRequest request(kSimpleGET_Transaction);
+
+  {
+    // Attempt to read from cache entry, but abort transaction due to a
+    // connected callback error.
+    ConnectedHandler connected_handler;
+    connected_handler.set_result(
+        ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY);
+
+    std::unique_ptr<HttpTransaction> transaction;
+    EXPECT_THAT(cache.CreateTransaction(&transaction), IsOk());
+    ASSERT_THAT(transaction, NotNull());
+
+    transaction->SetConnectedCallback(connected_handler.Callback());
+
+    TestCompletionCallback callback;
+    ASSERT_THAT(
+        transaction->Start(&request, callback.callback(), NetLogWithSource()),
+        IsError(ERR_IO_PENDING));
+    EXPECT_THAT(
+        callback.WaitForResult(),
+        IsError(
+            ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY));
+
+    // Used the cache entry only.
+    EXPECT_THAT(connected_handler.transports(),
+                ElementsAre(CachedTestTransportInfo(), TestTransportInfo()));
+  }
+
+  {
+    // Request the same resource once more, observe that it is not read from
+    // cache.
+    ConnectedHandler connected_handler;
+
+    std::unique_ptr<HttpTransaction> transaction;
+    EXPECT_THAT(cache.CreateTransaction(&transaction), IsOk());
+    ASSERT_THAT(transaction, NotNull());
+
+    transaction->SetConnectedCallback(connected_handler.Callback());
+
+    TestCompletionCallback callback;
+    ASSERT_THAT(
+        transaction->Start(&request, callback.callback(), NetLogWithSource()),
+        IsError(ERR_IO_PENDING));
+    EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+    // Used the network only.
+    EXPECT_THAT(connected_handler.transports(),
+                ElementsAre(TestTransportInfo()));
+  }
+}
+
 // This test verifies that the callback passed to SetConnectedCallback() is
 // called with the right transport type when the cached entry was originally
 // fetched via proxy.
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index 0a25b66a..e18f96a5 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-08-21 12:54 UTC
+# Last updated: 2022-08-22 12:54 UTC
 PinsListTimestamp
-1661086448
+1661172885
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/ppapi/proxy/BUILD.gn b/ppapi/proxy/BUILD.gn
index 342c8af6..d6e1b0c 100644
--- a/ppapi/proxy/BUILD.gn
+++ b/ppapi/proxy/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/nacl/config.gni")
+import("//components/nacl/toolchain.gni")
 import("//ppapi/buildflags/buildflags.gni")
 
 assert(enable_ppapi)
@@ -229,6 +230,7 @@
   deps = [
     ":common",
     "//base",
+    "//components/nacl/common:buildflags",
     "//device/base/synchronization",
     "//device/gamepad/public/cpp:shared_with_blink",
     "//gpu/command_buffer/client:client",
@@ -245,7 +247,7 @@
     "//ui/gfx/ipc/geometry",
   ]
 
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     deps += [
       "//base/third_party/dynamic_annotations",
       "//gin",
@@ -320,7 +322,7 @@
 
   public_deps = [ "//ipc" ]
 
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     deps += [ "//skia" ]
   }
 }
diff --git a/ppapi/proxy/DEPS b/ppapi/proxy/DEPS
index 06e0731..50a0dde 100644
--- a/ppapi/proxy/DEPS
+++ b/ppapi/proxy/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+base",
+  "+components/nacl/common/buildflags.h",
   "+device",
   "+gin",
   "+gpu",
diff --git a/ppapi/proxy/ppb_image_data_proxy.cc b/ppapi/proxy/ppb_image_data_proxy.cc
index 30e64f6..da8e3a96 100644
--- a/ppapi/proxy/ppb_image_data_proxy.cc
+++ b/ppapi/proxy/ppb_image_data_proxy.cc
@@ -16,6 +16,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "components/nacl/common/buildflags.h"
 #include "ppapi/c/pp_completion_callback.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/c/pp_resource.h"
@@ -32,9 +33,9 @@
 #include "ppapi/thunk/enter.h"
 #include "ppapi/thunk/thunk.h"
 
-#if !BUILDFLAG(IS_NACL)
-#include "skia/ext/platform_canvas.h"
-#include "ui/surface/transport_dib.h"
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
+#include "skia/ext/platform_canvas.h"  //nogncheck
+#include "ui/surface/transport_dib.h"  //nogncheck
 #endif
 
 using ppapi::thunk::PPB_ImageData_API;
@@ -371,7 +372,7 @@
 
 // PlatformImageData -----------------------------------------------------------
 
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 PlatformImageData::PlatformImageData(
     const HostResource& resource,
     const PP_ImageDataDesc& desc,
@@ -411,7 +412,7 @@
 SkCanvas* PlatformImageData::GetCanvas() {
   return mapped_canvas_.get();
 }
-#endif  // !BUILDFLAG(IS_NACL)
+#endif  // !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 
 // SimpleImageData -------------------------------------------------------------
 
@@ -490,7 +491,7 @@
       break;
     }
     case PPB_ImageData_Shared::PLATFORM: {
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
       ppapi::proxy::SerializedHandle image_handle;
       dispatcher->Send(new PpapiHostMsg_PPBImageData_CreatePlatform(
           kApiID, instance, format, size, init_to_zero, &result, &desc,
@@ -518,7 +519,7 @@
 bool PPB_ImageData_Proxy::OnMessageReceived(const IPC::Message& msg) {
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(PPB_ImageData_Proxy, msg)
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
     IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBImageData_CreatePlatform,
                         OnHostMsgCreatePlatform)
     IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBImageData_CreateSimple,
@@ -532,7 +533,7 @@
   return handled;
 }
 
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 // static
 PP_Resource PPB_ImageData_Proxy::CreateImageData(
     PP_Instance instance,
@@ -640,7 +641,7 @@
     result_image_handle->set_null_shmem_region();
   }
 }
-#endif  // !BUILDFLAG(IS_NACL)
+#endif  // !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 
 void PPB_ImageData_Proxy::OnPluginMsgNotifyUnusedImageData(
     const HostResource& old_image_data) {
diff --git a/ppapi/proxy/ppb_image_data_proxy.h b/ppapi/proxy/ppb_image_data_proxy.h
index 2980dce5..3a331c8d 100644
--- a/ppapi/proxy/ppb_image_data_proxy.h
+++ b/ppapi/proxy/ppb_image_data_proxy.h
@@ -11,6 +11,7 @@
 
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "build/build_config.h"
+#include "components/nacl/common/buildflags.h"
 #include "ipc/ipc_platform_file.h"
 #include "ppapi/c/pp_bool.h"
 #include "ppapi/c/pp_completion_callback.h"
@@ -27,9 +28,9 @@
 #include "ppapi/shared_impl/resource.h"
 #include "ppapi/thunk/ppb_image_data_api.h"
 
-#if !BUILDFLAG(IS_NACL)
-#include "third_party/skia/include/core/SkRefCnt.h"
-#endif  // !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
+#include "third_party/skia/include/core/SkRefCnt.h"  //nogncheck
+#endif  // !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 
 class TransportDIB;
 
@@ -83,7 +84,7 @@
 // PlatformImageData is a full featured image data resource which can access
 // the underlying platform-specific canvas and |image_region|. This can't be
 // used by NaCl apps.
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 class PPAPI_PROXY_EXPORT PlatformImageData : public ImageData {
  public:
   PlatformImageData(const ppapi::HostResource& resource,
@@ -106,7 +107,7 @@
   // Null when the image isn't mapped.
   std::unique_ptr<SkCanvas> mapped_canvas_;
 };
-#endif  // !BUILDFLAG(IS_NACL)
+#endif  // !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 
 // SimpleImageData is a simple, platform-independent image data resource which
 // can be used by NaCl. It can also be used by trusted apps when access to the
diff --git a/ppapi/shared_impl/BUILD.gn b/ppapi/shared_impl/BUILD.gn
index 2d8fedbd..2b8ab18 100644
--- a/ppapi/shared_impl/BUILD.gn
+++ b/ppapi/shared_impl/BUILD.gn
@@ -104,13 +104,14 @@
     "//base",
     "//base:i18n",
     "//build:chromeos_buildflags",
+    "//components/nacl/common:buildflags",
     "//ppapi/c",
     "//ppapi/thunk:headers",
     "//third_party/icu:icuuc",
     "//url",
   ]
 
-  if (!is_nacl) {
+  if (!is_nacl && !is_minimal_toolchain) {
     deps += [ "//skia" ]
   }
 }
@@ -222,6 +223,7 @@
   deps = [
     "//base/third_party/dynamic_annotations",
     "//build:chromeos_buildflags",
+    "//components/nacl/common:buildflags",
     "//device/gamepad/public/cpp:shared_with_blink",
     "//gpu/command_buffer/client",
     "//gpu/command_buffer/client:gles2_cmd_helper",
diff --git a/ppapi/shared_impl/DEPS b/ppapi/shared_impl/DEPS
index d6ff4c0..fd31ac69 100644
--- a/ppapi/shared_impl/DEPS
+++ b/ppapi/shared_impl/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+base",
+  "+components/nacl/common/buildflags.h",
   "+device/gamepad/public/cpp",
   "+gpu",
   "+media/audio",
diff --git a/ppapi/shared_impl/ppb_image_data_shared.cc b/ppapi/shared_impl/ppb_image_data_shared.cc
index b59cb8f..d3e45cc 100644
--- a/ppapi/shared_impl/ppb_image_data_shared.cc
+++ b/ppapi/shared_impl/ppb_image_data_shared.cc
@@ -6,9 +6,11 @@
 
 #include "base/notreached.h"
 #include "build/build_config.h"
+#include "components/nacl/common/buildflags.h"
 
-#if !BUILDFLAG(IS_NACL) && !defined(NACL_WIN64)
-#include "third_party/skia/include/core/SkTypes.h"
+#if !BUILDFLAG(IS_NACL) && !defined(NACL_WIN64) && \
+    !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
+#include "third_party/skia/include/core/SkTypes.h"  //nogncheck
 #endif
 
 namespace ppapi {
@@ -20,7 +22,7 @@
   // later.
   // TODO(dmichael): Really proxy this.
   return PP_IMAGEDATAFORMAT_BGRA_PREMUL;
-#elif defined(NACL_WIN64)
+#elif defined(NACL_WIN64) || BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
   // In the NaCl Win64 helper, this shouldn't be called. If we start building
   // Chrome on Windows 64 for realz, we should really implement this.
   NOTIMPLEMENTED();
diff --git a/ppapi/shared_impl/private/net_address_private_impl.cc b/ppapi/shared_impl/private/net_address_private_impl.cc
index 8930e480..06d1817 100644
--- a/ppapi/shared_impl/private/net_address_private_impl.cc
+++ b/ppapi/shared_impl/private/net_address_private_impl.cc
@@ -12,6 +12,7 @@
 #include "base/check.h"
 #include "base/strings/stringprintf.h"
 #include "build/build_config.h"
+#include "components/nacl/common/buildflags.h"
 #include "ppapi/c/pp_var.h"
 #include "ppapi/c/private/ppb_net_address_private.h"
 #include "ppapi/shared_impl/proxy_lock.h"
@@ -22,7 +23,8 @@
 #include <windows.h>
 #include <winsock2.h>
 #include <ws2tcpip.h>
-#elif BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_NACL)
+#elif BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_NACL) && \
+    !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <sys/socket.h>
@@ -389,7 +391,7 @@
 }  // namespace thunk
 
 // For the NaCl target, all we need are the API functions and the thunk.
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 
 // static
 bool NetAddressPrivateImpl::ValidateNetAddress(
@@ -484,7 +486,7 @@
   address->Assign(net_addr->address, address_size);
   return true;
 }
-#endif  // !BUILDFLAG(IS_NACL)
+#endif  // !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
 
 // static
 std::string NetAddressPrivateImpl::DescribeNetAddress(
diff --git a/ppapi/shared_impl/private/net_address_private_impl.h b/ppapi/shared_impl/private/net_address_private_impl.h
index 5516b40..3009be2 100644
--- a/ppapi/shared_impl/private/net_address_private_impl.h
+++ b/ppapi/shared_impl/private/net_address_private_impl.h
@@ -8,11 +8,16 @@
 #include <stdint.h>
 #include <string>
 
-#include "net/base/ip_address.h"
+#include "build/build_config.h"
+#include "components/nacl/common/buildflags.h"
 #include "ppapi/c/pp_stdint.h"
 #include "ppapi/c/ppb_net_address.h"
 #include "ppapi/shared_impl/ppapi_shared_export.h"
 
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
+#include "net/base/ip_address.h"  //nogncheck
+#endif
+
 struct PP_NetAddress_Private;
 struct sockaddr;
 
@@ -24,6 +29,7 @@
   NetAddressPrivateImpl(const NetAddressPrivateImpl&) = delete;
   NetAddressPrivateImpl& operator=(const NetAddressPrivateImpl&) = delete;
 
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_MINIMAL_TOOLCHAIN)
   static bool ValidateNetAddress(const PP_NetAddress_Private& addr);
 
   static bool SockaddrToNetAddress(const sockaddr* sa,
@@ -37,6 +43,7 @@
   static bool NetAddressToIPEndPoint(const PP_NetAddress_Private& net_addr,
                                      net::IPAddressBytes* address,
                                      uint16_t* port);
+#endif
 
   static std::string DescribeNetAddress(const PP_NetAddress_Private& addr,
                                         bool include_port);
diff --git a/services/network/private_network_access_checker.cc b/services/network/private_network_access_checker.cc
index b7d1cfd..c33dcef 100644
--- a/services/network/private_network_access_checker.cc
+++ b/services/network/private_network_access_checker.cc
@@ -98,7 +98,7 @@
   return result;
 }
 
-void PrivateNetworkAccessChecker::ResetForRedirect() {
+void PrivateNetworkAccessChecker::Reset() {
   // The target IP address space is no longer relevant, it only applied to the
   // URL before the first redirect. Consider the following scenario:
   //
diff --git a/services/network/private_network_access_checker.h b/services/network/private_network_access_checker.h
index 25eb8d039..f1474954 100644
--- a/services/network/private_network_access_checker.h
+++ b/services/network/private_network_access_checker.h
@@ -83,8 +83,9 @@
   // This instance will behave as if newly constructed once more. In addition,
   // resets this instance's target IP address space to `kUnknown.
   //
-  // This should be called upon following a redirect.
-  void ResetForRedirect();
+  // This should be called upon following a redirect or after a cache result
+  // blocked without preflight because we'll try fetching from the network.
+  void Reset();
 
   // Returns the client security state that applies to the current request.
   // May return nullptr.
diff --git a/services/network/private_network_access_checker_unittest.cc b/services/network/private_network_access_checker_unittest.cc
index 7876bebb..60a0b71 100644
--- a/services/network/private_network_access_checker_unittest.cc
+++ b/services/network/private_network_access_checker_unittest.cc
@@ -567,13 +567,13 @@
   PrivateNetworkAccessChecker checker(request, &factory_params,
                                       mojom::kURLLoadOptionNone);
 
-  checker.ResetForRedirect();
+  checker.Reset();
 
   // The target address space has been cleared.
   EXPECT_EQ(checker.TargetAddressSpace(), mojom::IPAddressSpace::kUnknown);
 
   // This succeeds even though the IP address space does not match the target
-  // passed at construction time, thanks to `ResetForRedirect()`.
+  // passed at construction time, thanks to `Reset()`.
   EXPECT_EQ(checker.Check(DirectTransport(PrivateEndpoint())),
             Result::kAllowedNoLessPublic);
 }
@@ -586,7 +586,7 @@
 
   checker.Check(DirectTransport(PrivateEndpoint()));
 
-  checker.ResetForRedirect();
+  checker.Reset();
 
   EXPECT_EQ(checker.ResponseAddressSpace(), absl::nullopt);
 
@@ -643,7 +643,7 @@
                                         mojom::kURLLoadOptionNone);
 
     checker.Check(DirectTransport(PublicEndpoint()));
-    checker.ResetForRedirect();
+    checker.Reset();
     checker.Check(DirectTransport(PrivateEndpoint()));
   }
 
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
index bc7e0a4..2e8a874 100644
--- a/services/network/url_loader.cc
+++ b/services/network/url_loader.cc
@@ -1120,7 +1120,7 @@
 
   // Reset the state of the PNA checker - redirects should be treated like new
   // requests by the same client.
-  private_network_access_checker_.ResetForRedirect();
+  private_network_access_checker_.Reset();
 
   memory_cache_writer_.reset();
 
@@ -1252,6 +1252,16 @@
   absl::optional<mojom::CorsError> cors_error =
       PrivateNetworkAccessCheckResultToCorsError(result);
   if (cors_error.has_value()) {
+    if (result == PrivateNetworkAccessCheckResult::kBlockedByPolicyBlock &&
+        (info.type == net::TransportType::kCached ||
+         info.type == net::TransportType::kCachedFromProxy)) {
+      // If the cached entry was blocked by the private network access check
+      // without a preflight, we'll start over and attempt to request from the
+      // network, so resetting the checker.
+      private_network_access_checker_.Reset();
+      return net::
+          ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY;
+    }
     // Remember the CORS error so we can annotate the URLLoaderCompletionStatus
     // with it later, then fail the request with the same net error code as
     // other CORS errors.
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc
index 590ae44..8a8407a 100644
--- a/services/network/url_loader_unittest.cc
+++ b/services/network/url_loader_unittest.cc
@@ -2024,9 +2024,16 @@
   // Despite its name, IsError(OK) asserts that the matched value is OK.
   EXPECT_THAT(Load(url), IsError(params.expected_result));
   if (params.expected_result != net::OK) {
-    EXPECT_THAT(client()->completion_status().cors_error_status,
-                Optional(InsecurePrivateNetworkCorsErrorStatus(
-                    params.endpoint_address_space)));
+    if (params.expected_result !=
+        net::
+            ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY) {
+      // CORS error status shouldn't be set when the cache entry was blocked by
+      // private network access policy because we'll retry fetching from the
+      // network.
+      EXPECT_THAT(client()->completion_status().cors_error_status,
+                  Optional(InsecurePrivateNetworkCorsErrorStatus(
+                      params.endpoint_address_space)));
+    }
     return;
   }
 
@@ -2196,19 +2203,22 @@
             mojom::IPAddressSpace::kUnknown,
             mojom::IPAddressSpace::kLocal,
             net::TransportType::kCached,
-            net::ERR_FAILED,
+            net::
+                ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY,
         },
         {
             mojom::IPAddressSpace::kPublic,
             mojom::IPAddressSpace::kLocal,
             net::TransportType::kCached,
-            net::ERR_FAILED,
+            net::
+                ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY,
         },
         {
             mojom::IPAddressSpace::kPrivate,
             mojom::IPAddressSpace::kLocal,
             net::TransportType::kCached,
-            net::ERR_FAILED,
+            net::
+                ERR_CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY,
         },
         {
             mojom::IPAddressSpace::kLocal,
diff --git a/testing/chromoting/OWNERS b/testing/chromoting/OWNERS
index 23fd166..989a265 100644
--- a/testing/chromoting/OWNERS
+++ b/testing/chromoting/OWNERS
@@ -1,4 +1,3 @@
-anandc@chromium.org
 jamiewalch@chromium.org
 joedow@chromium.org
 sergeyu@chromium.org
diff --git a/testing/libfuzzer/OWNERS b/testing/libfuzzer/OWNERS
index 4422eda..331e8bc 100644
--- a/testing/libfuzzer/OWNERS
+++ b/testing/libfuzzer/OWNERS
@@ -1,2 +1 @@
-kcc@chromium.org
 metzman@chromium.org
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 99568ba..3212d6a 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -15,6 +15,14 @@
 namespace blink {
 namespace features {
 
+// Gate access to the AnonymousIframe origin trial. This is useful on its own,
+// because the OT infrastructure doesn't check Chrome's version. It means token
+// generated for the OT applies immediately to every Chrome versions. The
+// feature flag allows Chrome developers to restrict the access to the first
+// fully supported version.
+const base::Feature kAnonymousIframeOriginTrial{
+    "AnonymousIframeOriginTrial", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Apply lazy-loading to ad frames which have embeds likely impacting Core Web
 // Vitals.
 const base::Feature kAutomaticLazyFrameLoadingToAds{
diff --git a/third_party/blink/common/permissions_policy/OWNERS b/third_party/blink/common/permissions_policy/OWNERS
index 9f529f4..578de46 100644
--- a/third_party/blink/common/permissions_policy/OWNERS
+++ b/third_party/blink/common/permissions_policy/OWNERS
@@ -1,4 +1,3 @@
-chenleihu@chromium.org
 iclelland@chromium.org
 vogelheim@chromium.org
 
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 9a3b09c..ccf675f 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -17,6 +17,7 @@
 namespace blink {
 namespace features {
 
+BLINK_COMMON_EXPORT extern const base::Feature kAnonymousIframeOriginTrial;
 BLINK_COMMON_EXPORT extern const base::Feature kAutomaticLazyFrameLoadingToAds;
 BLINK_COMMON_EXPORT extern const base::FeatureParam<int>
     kTimeoutMillisForLazyAds;
diff --git a/third_party/blink/public/common/permissions_policy/OWNERS b/third_party/blink/public/common/permissions_policy/OWNERS
index 70ffb20..7f729e8 100644
--- a/third_party/blink/public/common/permissions_policy/OWNERS
+++ b/third_party/blink/public/common/permissions_policy/OWNERS
@@ -1,4 +1,3 @@
-chenleihu@chromium.org
 iclelland@chromium.org
 vogelheim@chromium.org
 
diff --git a/third_party/blink/public/mojom/permissions_policy/OWNERS b/third_party/blink/public/mojom/permissions_policy/OWNERS
index 9736830c..11f73a8 100644
--- a/third_party/blink/public/mojom/permissions_policy/OWNERS
+++ b/third_party/blink/public/mojom/permissions_policy/OWNERS
@@ -1,4 +1,3 @@
-chenleihu@chromium.org
 iclelland@chromium.org
 vogelheim@chromium.org
 
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
index 04e637a..af8953f 100644
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -79,6 +79,7 @@
   BLINK_PLATFORM_EXPORT static void
   EnableAccessibilityUseAXPositionForDocumentMarkers(bool);
   BLINK_PLATFORM_EXPORT static void EnableAdTagging(bool);
+  BLINK_PLATFORM_EXPORT static void EnableAnonymousIframe(bool);
   BLINK_PLATFORM_EXPORT static void EnableBackgroundFetch(bool);
   BLINK_PLATFORM_EXPORT static void EnableBatchFetchRequests(bool);
   BLINK_PLATFORM_EXPORT static void EnableBrowserVerifiedUserActivationKeyboard(
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index d350a3ff..3fd5701d 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -29,6 +29,7 @@
 #include "services/network/public/cpp/web_sandbox_flags.h"
 #include "services/network/public/mojom/trust_tokens.mojom-blink.h"
 #include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
 #include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_html_iframe_element.h"
@@ -66,6 +67,17 @@
   static constexpr size_t kMaxLengthToReport = 1024;
   return value.GetString().Left(kMaxLengthToReport);
 }
+
+bool AnonymousIframeEnabled(const FeatureContext* context) {
+  // AnonymousIframe is enabled via command line flags, or via the Origin Trial.
+  // The origin trial is gated using the `AnonymousIframeOriginTrial` flag until
+  // AnonymousIframe is safe to use. It is useful, because the OT token do not
+  // enforce a specific version.
+  return RuntimeEnabledFeatures::AnonymousIframeEnabled(nullptr) ||
+         (RuntimeEnabledFeatures::AnonymousIframeEnabled(context) &&
+          base::FeatureList::IsEnabled(features::kAnonymousIframeOriginTrial));
+}
+
 };  // namespace
 
 HTMLIFrameElement::HTMLIFrameElement(Document& document)
@@ -257,8 +269,7 @@
       UseCounter::Count(GetDocument(), WebFeature::kIFrameCSPAttribute);
     }
   } else if (name == html_names::kAnonymousAttr &&
-             RuntimeEnabledFeatures::AnonymousIframeEnabled(
-                 GetExecutionContext())) {
+             AnonymousIframeEnabled(GetExecutionContext())) {
     bool new_value = !value.IsNull();
     if (anonymous_ != new_value) {
       anonymous_ = new_value;
diff --git a/third_party/blink/renderer/core/input/mouse_event_manager.cc b/third_party/blink/renderer/core/input/mouse_event_manager.cc
index f86fc1e..c08353d 100644
--- a/third_party/blink/renderer/core/input/mouse_event_manager.cc
+++ b/third_party/blink/renderer/core/input/mouse_event_manager.cc
@@ -772,15 +772,12 @@
   const WebGestureEvent& gesture_event = targeted_event.Event();
   unsigned modifiers = gesture_event.GetModifiers();
 
-  // TODO(mustaq): Suppressing long-tap MouseEvents could break
-  // drag-drop. Will do separately because of the risk. crbug.com/606938.
-  WebMouseEvent mouse_down_event(
-      WebInputEvent::Type::kMouseDown, gesture_event,
-      WebPointerProperties::Button::kLeft, 1,
-      modifiers | WebInputEvent::Modifiers::kLeftButtonDown |
-          WebInputEvent::Modifiers::kIsCompatibilityEventForTouch,
-      base::TimeTicks::Now());
-  mouse_down_ = mouse_down_event;
+  mouse_down_ =
+      WebMouseEvent(WebInputEvent::Type::kMouseDown, gesture_event,
+                    WebPointerProperties::Button::kLeft, 1,
+                    modifiers | WebInputEvent::Modifiers::kLeftButtonDown |
+                        WebInputEvent::Modifiers::kIsCompatibilityEventForTouch,
+                    base::TimeTicks::Now());
 
   WebMouseEvent mouse_drag_event(
       WebInputEvent::Type::kMouseMove, gesture_event,
@@ -959,8 +956,6 @@
               event.Event().TimeStamp()),
           Vector<WebPointerEvent>(), Vector<WebPointerEvent>());
     }
-    // TODO(crbug.com/708278): If the drag starts with touch the touch cancel
-    // should trigger the release of pointer capture.
   }
 
   mouse_down_may_start_drag_ = false;
@@ -985,12 +980,14 @@
 
   DragController& drag_controller = frame_->GetPage()->GetDragController();
   if (!drag_controller.PopulateDragDataTransfer(frame_, GetDragState(),
-                                                mouse_down_pos_))
+                                                mouse_down_pos_)) {
     return false;
+  }
 
   if (DispatchDragSrcEvent(event_type_names::kDragstart, mouse_down_) !=
-      WebInputEventResult::kNotHandled)
+      WebInputEventResult::kNotHandled) {
     return false;
+  }
 
   // Dispatching the event could cause |frame_| to be detached.
   if (!frame_->GetPage())
@@ -1021,8 +1018,9 @@
       DataTransferAccessPolicy::kImageWritable);
 
   if (drag_controller.StartDrag(frame_, GetDragState(), event.Event(),
-                                mouse_down_pos_))
+                                mouse_down_pos_)) {
     return true;
+  }
 
   // Drag was canned at the last minute - we owe m_dragSrc a DRAGEND event
   DispatchDragSrcEvent(event_type_names::kDragend, event.Event());
diff --git a/third_party/blink/renderer/core/input/mouse_event_manager.h b/third_party/blink/renderer/core/input/mouse_event_manager.h
index ba8362c..1ae23fd 100644
--- a/third_party/blink/renderer/core/input/mouse_event_manager.h
+++ b/third_party/blink/renderer/core/input/mouse_event_manager.h
@@ -238,7 +238,7 @@
   // remains unchanged.
   Member<Element> mouse_down_element_;
 
-  gfx::Point mouse_down_pos_;  // In our view's coords.
+  gfx::Point mouse_down_pos_;
   base::TimeTicks mouse_down_timestamp_;
   WebMouseEvent mouse_down_;
 
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
index 23f6be0..bd6c9ec 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
@@ -331,6 +331,11 @@
                          : false;
   }
 
+  bool IsTableCellWithEffectiveRowspan() const {
+    return HasRareData() ? rare_data_->IsTableCellWithEffectiveRowspan()
+                         : false;
+  }
+
   const NGTableConstraintSpaceData* TableData() const {
     return HasRareData() ? rare_data_->TableData() : nullptr;
   }
@@ -1157,6 +1162,15 @@
       EnsureTableCellData()->has_collapsed_borders = has_collapsed_borders;
     }
 
+    bool IsTableCellWithEffectiveRowspan() const {
+      return GetDataUnionType() == DataUnionType::kTableCellData &&
+             table_cell_data_.has_effective_rowspan;
+    }
+
+    void SetIsTableCellWithEffectiveRowspan(bool has_effective_rowspan) {
+      EnsureTableCellData()->has_effective_rowspan = has_effective_rowspan;
+    }
+
     void SetTableRowData(
         scoped_refptr<const NGTableConstraintSpaceData> table_data,
         wtf_size_t row_index) {
@@ -1315,13 +1329,14 @@
         return table_cell_borders == other.table_cell_borders &&
                table_cell_column_index == other.table_cell_column_index &&
                is_hidden_for_paint == other.is_hidden_for_paint &&
-               has_collapsed_borders == other.has_collapsed_borders;
+               has_collapsed_borders == other.has_collapsed_borders &&
+               has_effective_rowspan == other.has_effective_rowspan;
       }
 
       bool IsInitialForMaySkipLayout() const {
         return table_cell_borders == NGBoxStrut() &&
                table_cell_column_index == kNotFound && !is_hidden_for_paint &&
-               !has_collapsed_borders;
+               !has_collapsed_borders && !has_effective_rowspan;
       }
 
       NGBoxStrut table_cell_borders;
@@ -1329,6 +1344,7 @@
       absl::optional<LayoutUnit> table_cell_alignment_baseline;
       bool is_hidden_for_paint = false;
       bool has_collapsed_borders = false;
+      bool has_effective_rowspan = false;
     };
 
     struct TableRowData {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
index fe03cae4..c596a99 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
@@ -410,6 +410,17 @@
     }
   }
 
+  void SetIsTableCellWithEffectiveRowspan(bool has_effective_rowspan) {
+#if DCHECK_IS_ON()
+    DCHECK(!is_table_cell_with_effective_rowspan_set_);
+    is_table_cell_with_effective_rowspan_set_ = true;
+#endif
+    if (has_effective_rowspan) {
+      space_.EnsureRareData()->SetIsTableCellWithEffectiveRowspan(
+          has_effective_rowspan);
+    }
+  }
+
   void SetIsTableCellChild(bool b) {
     space_.bitfields_.is_table_cell_child = b;
   }
@@ -554,6 +565,7 @@
   bool is_table_cell_column_index_set_ = false;
   bool is_table_cell_hidden_for_paint_set_ = false;
   bool is_table_cell_with_collapsed_borders_set_ = false;
+  bool is_table_cell_with_effective_rowspan_set_ = false;
   bool is_custom_layout_data_set_ = false;
   bool is_lines_until_clamp_set_ = false;
   bool is_table_row_data_set_ = false;
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc
index bc1c561..04f68dd 100644
--- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc
@@ -199,6 +199,15 @@
         cell, row_index, colspan_cell_tabulator->CurrentColumn(), section_index,
         table_writing_direction);
 
+    // Clamp the rowspan if it exceeds the total section row-count.
+    wtf_size_t effective_rowspan = cell.TableCellRowspan();
+    if (effective_rowspan > 1) {
+      const wtf_size_t max_rows =
+          row_count_func() - (row_index - start_row_index);
+      effective_rowspan = std::min(max_rows, effective_rowspan);
+    }
+    bool has_effective_rowspan = effective_rowspan > 1;
+
     NGConstraintSpaceBuilder space_builder(
         table_writing_direction.GetWritingMode(), cell_writing_direction,
         /* is_new_fc */ true);
@@ -211,7 +220,7 @@
         colspan_cell_tabulator->CurrentColumn(),
         /* is_initial_block_size_indefinite */ true,
         is_table_block_size_specified, has_collapsed_borders,
-        NGCacheSlot::kMeasure, &space_builder);
+        has_effective_rowspan, NGCacheSlot::kMeasure, &space_builder);
 
     const auto cell_space = space_builder.ToConstraintSpace();
     const NGLayoutResult* layout_result = cell.Layout(cell_space);
@@ -225,14 +234,6 @@
             ? cell_style.LogicalHeight()
             : cell_style.LogicalWidth();
 
-    // Clamp the rowspan if it exceeds the total section row-count.
-    wtf_size_t effective_rowspan = cell.TableCellRowspan();
-    if (effective_rowspan > 1) {
-      const wtf_size_t max_rows =
-          row_count_func() - (row_index - start_row_index);
-      effective_rowspan = std::min(max_rows, effective_rowspan);
-    }
-    bool has_rowspan = effective_rowspan > 1;
     bool has_descendant_that_depends_on_percentage_block_size =
         layout_result->HasDescendantThatDependsOnPercentageBlockSize();
 
@@ -245,10 +246,12 @@
         has_descendant_that_depends_on_percentage_block_size};
     colspan_cell_tabulator->ProcessCell(cell);
     cell_block_constraints->push_back(cell_block_constraint);
-    is_constrained |= cell_block_constraint.is_constrained && !has_rowspan;
+    is_constrained |=
+        cell_block_constraint.is_constrained && !has_effective_rowspan;
     row_baseline_tabulator.ProcessCell(
         fragment, NGTableAlgorithmUtils::IsBaseline(cell_style.VerticalAlign()),
-        has_rowspan, has_descendant_that_depends_on_percentage_block_size);
+        has_effective_rowspan,
+        has_descendant_that_depends_on_percentage_block_size);
 
     // Compute cell's css block size.
     absl::optional<LayoutUnit> cell_css_block_size;
@@ -273,7 +276,7 @@
       }
     }
 
-    if (!has_rowspan) {
+    if (!has_effective_rowspan) {
       if (cell_css_block_size || cell_css_percent)
         is_constrained = true;
       if (cell_css_percent)
@@ -494,6 +497,7 @@
     bool is_initial_block_size_indefinite,
     bool is_table_block_size_specified,
     bool has_collapsed_borders,
+    bool has_effective_rowspan,
     NGCacheSlot cache_slot,
     NGConstraintSpaceBuilder* builder) {
   const auto& cell_style = cell.Style();
@@ -541,6 +545,7 @@
       is_table_block_size_specified || cell_style.LogicalHeight().IsFixed());
   builder->SetIsTableCellHiddenForPaint(is_hidden_for_paint);
   builder->SetIsTableCellWithCollapsedBorders(has_collapsed_borders);
+  builder->SetIsTableCellWithEffectiveRowspan(has_effective_rowspan);
   builder->SetHideTableCellIfEmpty(
       !has_collapsed_borders && cell_style.EmptyCells() == EEmptyCells::kHide);
   builder->SetCacheSlot(cache_slot);
@@ -709,13 +714,20 @@
   builder->SetIsHiddenForPaint(
       space.IsTableCellHiddenForPaint() ||
       (space.HideTableCellIfEmpty() && !has_inflow_children));
-
   builder->SetHasCollapsedBorders(space.IsTableCellWithCollapsedBorders());
-
   builder->SetIsTableNGPart();
-
   builder->SetTableCellColumnIndex(space.TableCellColumnIndex());
 
+  // When fragmentation is present, table-cells with rowspan get complicated.
+  // These cells have layout performed in their originating (first) row. As a
+  // result a subsequent row may cause the rowspan-cell to grow, and we'd need
+  // to backtrack to expand the rowspan-cell. This may then cause a row that it
+  // spans to grow!
+  // As such - we make the rowspan cell unappealing to break within, and always
+  // leave it at the original measured block-size.
+  if (space.IsTableCellWithEffectiveRowspan())
+    builder->ClampBreakAppeal(kBreakAppealViolatingBreakAvoid);
+
   // If we're resuming after a break, there'll be no alignment, since the
   // fragment will start at the block-start edge of the fragmentainer then.
   if (IsResumingLayout(builder->PreviousBreakToken()))
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h
index 0ebddb3c1..5fad788 100644
--- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h
+++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h
@@ -58,6 +58,7 @@
       bool is_initial_block_size_indefinite,
       bool is_restricted_block_size_table,
       bool has_collapsed_borders,
+      bool has_effective_rowspan,
       NGCacheSlot,
       NGConstraintSpaceBuilder*);
 
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc
index ab80ba19..32a92e7 100644
--- a/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc
@@ -43,10 +43,11 @@
           NGBlockNode cell, const NGTableConstraintSpaceData::Cell& cell_data,
           LayoutUnit row_block_size, absl::optional<LayoutUnit> row_baseline,
           bool min_block_size_should_encompass_intrinsic_size) {
-        const LayoutUnit cell_block_size =
-            cell_data.rowspan_block_size != kIndefiniteSize
-                ? cell_data.rowspan_block_size
-                : row_block_size;
+        bool has_effective_rowspan =
+            cell_data.rowspan_block_size != kIndefiniteSize;
+        const LayoutUnit cell_block_size = has_effective_rowspan
+                                               ? cell_data.rowspan_block_size
+                                               : row_block_size;
 
         DCHECK_EQ(table_data.table_writing_direction.GetWritingMode(),
                   ConstraintSpace().GetWritingMode());
@@ -61,7 +62,8 @@
             container_builder_.InlineSize(), row_baseline,
             cell_data.start_column, cell_data.is_initial_block_size_indefinite,
             table_data.is_table_block_size_specified,
-            table_data.has_collapsed_borders, NGCacheSlot::kLayout, &builder);
+            table_data.has_collapsed_borders, has_effective_rowspan,
+            NGCacheSlot::kLayout, &builder);
 
         if (ConstraintSpace().HasBlockFragmentation()) {
           SetupSpaceBuilderForFragmentation(
diff --git a/third_party/blink/renderer/core/page/drag_controller.cc b/third_party/blink/renderer/core/page/drag_controller.cc
index afcd614..3f00603 100644
--- a/third_party/blink/renderer/core/page/drag_controller.cc
+++ b/third_party/blink/renderer/core/page/drag_controller.cc
@@ -1026,42 +1026,30 @@
   return true;
 }
 
-static gfx::Point DragLocationForDHTMLDrag(
-    const gfx::Point& mouse_dragged_point,
-    const gfx::Point& drag_origin,
-    const gfx::Point& drag_image_offset,
-    bool is_link_image) {
-  // dragImageOffset is the cursor position relative to the lower-left corner of
-  // the image.
-  const int y_offset = -drag_image_offset.y();
+namespace {
 
+gfx::Point DragLocationForDHTMLDrag(const gfx::Point& mouse_dragged_point,
+                                    const gfx::Point& drag_initiation_location,
+                                    const gfx::Point& drag_image_offset,
+                                    bool is_link_image) {
   if (is_link_image) {
     return gfx::Point(mouse_dragged_point.x() - drag_image_offset.x(),
-                      mouse_dragged_point.y() + y_offset);
+                      mouse_dragged_point.y() - drag_image_offset.y());
   }
 
-  return gfx::Point(drag_origin.x() - drag_image_offset.x(),
-                    drag_origin.y() + y_offset);
+  return gfx::Point(drag_initiation_location.x() - drag_image_offset.x(),
+                    drag_initiation_location.y() - drag_image_offset.y());
 }
 
-gfx::RectF DragController::ClippedSelection(const LocalFrame& frame) {
-  DCHECK(frame.View());
-  return DataTransfer::ClipByVisualViewport(
-      gfx::RectF(frame.Selection().AbsoluteUnclippedBounds()), frame);
-}
-
-static gfx::Point DragLocationForSelectionDrag(const LocalFrame& frame) {
+gfx::Point DragLocationForSelectionDrag(const LocalFrame& frame) {
   frame.View()->UpdateLifecycleToLayoutClean(DocumentUpdateReason::kSelection);
   gfx::Rect dragging_rect =
       gfx::ToEnclosingRect(DragController::ClippedSelection(frame));
-  int xpos = dragging_rect.right();
-  xpos = dragging_rect.x() < xpos ? dragging_rect.x() : xpos;
-  int ypos = dragging_rect.bottom();
-  ypos = dragging_rect.y() < ypos ? dragging_rect.y() : ypos;
-  return gfx::Point(xpos, ypos);
+  return gfx::Point(std::min(dragging_rect.x(), dragging_rect.right()),
+                    std::min(dragging_rect.y(), dragging_rect.bottom()));
 }
 
-static const gfx::Size MaxDragImageSize(float device_scale_factor) {
+const gfx::Size MaxDragImageSize(float device_scale_factor) {
 #if BUILDFLAG(IS_MAC)
   // Match Safari's drag image size.
   static const gfx::Size kMaxDragImageSize(400, 400);
@@ -1071,7 +1059,7 @@
   return gfx::ScaleToFlooredSize(kMaxDragImageSize, device_scale_factor);
 }
 
-static bool CanDragImage(const Element& element) {
+bool CanDragImage(const Element& element) {
   auto* layout_image = DynamicTo<LayoutImage>(element.GetLayoutObject());
   if (!layout_image)
     return false;
@@ -1089,7 +1077,7 @@
   return true;
 }
 
-static std::unique_ptr<DragImage> DragImageForImage(
+std::unique_ptr<DragImage> DragImageForImage(
     const Element& element,
     float device_scale_factor,
     const gfx::Size& image_element_size_in_pixels) {
@@ -1117,13 +1105,12 @@
                            kDragImageAlpha, image_scale);
 }
 
-static gfx::Point DragLocationForImage(
-    const DragImage* drag_image,
-    const gfx::Point& drag_origin,
-    const gfx::Point& image_element_location,
-    const gfx::Size& image_element_size_in_pixels) {
+gfx::Point DragLocationForImage(const DragImage* drag_image,
+                                const gfx::Point& drag_initiation_location,
+                                const gfx::Point& image_element_location,
+                                const gfx::Size& image_element_size_in_pixels) {
   if (!drag_image)
-    return drag_origin;
+    return drag_initiation_location;
 
   gfx::Size original_size = image_element_size_in_pixels;
   gfx::Size new_size = drag_image->Size();
@@ -1131,15 +1118,15 @@
   // Properly orient the drag image and orient it differently if it's smaller
   // than the original
   float scale = new_size.width() / static_cast<float>(original_size.width());
-  gfx::Vector2dF offset = image_element_location - drag_origin;
-  return drag_origin +
+  gfx::Vector2dF offset = image_element_location - drag_initiation_location;
+  return drag_initiation_location +
          gfx::ToRoundedVector2d(gfx::ScaleVector2d(offset, scale));
 }
 
-static std::unique_ptr<DragImage> DragImageForLink(const KURL& link_url,
-                                                   const String& link_text,
-                                                   float device_scale_factor,
-                                                   const Document* document) {
+std::unique_ptr<DragImage> DragImageForLink(const KURL& link_url,
+                                            const String& link_text,
+                                            float device_scale_factor,
+                                            const Document* document) {
   FontDescription font_description;
   LayoutTheme::GetTheme().SystemFont(blink::CSSValueID::kNone, font_description,
                                      document);
@@ -1147,10 +1134,10 @@
                            device_scale_factor);
 }
 
-static gfx::Point DragLocationForLink(const DragImage* link_image,
-                                      const gfx::Point& origin,
-                                      float device_scale_factor,
-                                      float page_scale_factor) {
+gfx::Point DragLocationForLink(const DragImage* link_image,
+                               const gfx::Point& origin,
+                               float device_scale_factor,
+                               float page_scale_factor) {
   if (!link_image)
     return origin;
 
@@ -1167,6 +1154,15 @@
   return gfx::ToRoundedPoint(image_offset);
 }
 
+}  // namespace
+
+// static
+gfx::RectF DragController::ClippedSelection(const LocalFrame& frame) {
+  DCHECK(frame.View());
+  return DataTransfer::ClipByVisualViewport(
+      gfx::RectF(frame.Selection().AbsoluteUnclippedBounds()), frame);
+}
+
 // static
 std::unique_ptr<DragImage> DragController::DragImageForSelection(
     LocalFrame& frame,
@@ -1178,7 +1174,7 @@
       DocumentUpdateReason::kDragImage);
   DCHECK(frame.GetDocument()->IsActive());
 
-  gfx::RectF painting_rect = ClippedSelection(frame);
+  gfx::RectF painting_rect = DragController::ClippedSelection(frame);
   PaintFlags paint_flags =
       PaintFlag::kSelectionDragImageOnly | PaintFlag::kOmitCompositingInfo;
 
@@ -1200,7 +1196,7 @@
 bool DragController::StartDrag(LocalFrame* src,
                                const DragState& state,
                                const WebMouseEvent& drag_event,
-                               const gfx::Point& drag_origin) {
+                               const gfx::Point& drag_initiation_location) {
 #if DCHECK_IS_ON()
   DCHECK(DragTypeIsValid(state.drag_type_));
 #endif
@@ -1208,7 +1204,7 @@
   if (!src->View() || !src->ContentLayoutObject())
     return false;
 
-  HitTestLocation location(drag_origin);
+  HitTestLocation location(drag_initiation_location);
   HitTestResult hit_test_result =
       src->GetEventHandler().HitTestResultAtLocation(location);
   Node* hit_inner_node = hit_test_result.InnerNode();
@@ -1223,12 +1219,10 @@
   const KURL& link_url = hit_test_result.AbsoluteLinkURL();
   const KURL& image_url = hit_test_result.AbsoluteImageURL();
 
-  // TODO(pdr): This code shouldn't be necessary because drag_origin is already
-  // in the coordinate space of the view's contents.
   gfx::Point mouse_dragged_point = src->View()->ConvertFromRootFrame(
       gfx::ToFlooredPoint(drag_event.PositionInRootFrame()));
 
-  gfx::Point drag_location;
+  gfx::Point drag_obj_location;
   gfx::Point drag_offset;
 
   DataTransfer* data_transfer = state.drag_data_transfer_.Get();
@@ -1238,18 +1232,19 @@
   std::unique_ptr<DragImage> drag_image =
       data_transfer->CreateDragImage(drag_offset, src);
   if (drag_image) {
-    drag_location = DragLocationForDHTMLDrag(mouse_dragged_point, drag_origin,
-                                             drag_offset, !link_url.IsEmpty());
+    drag_obj_location =
+        DragLocationForDHTMLDrag(mouse_dragged_point, drag_initiation_location,
+                                 drag_offset, !link_url.IsEmpty());
   }
 
   Node* node = state.drag_src_.Get();
   if (state.drag_type_ == kDragSourceActionSelection) {
     if (!drag_image) {
-      drag_image = DragImageForSelection(*src, kDragImageAlpha);
-      drag_location = DragLocationForSelectionDrag(*src);
+      drag_image = DragController::DragImageForSelection(*src, kDragImageAlpha);
+      drag_obj_location = DragLocationForSelectionDrag(*src);
     }
-    DoSystemDrag(drag_image.get(), drag_location, drag_origin, data_transfer,
-                 src, false);
+    DoSystemDrag(drag_image.get(), drag_obj_location, drag_initiation_location,
+                 data_transfer, src);
   } else if (state.drag_type_ == kDragSourceActionImage) {
     auto* element = DynamicTo<Element>(node);
     if (image_url.IsEmpty() || !element || !CanDragImage(*element))
@@ -1271,12 +1266,12 @@
       // coordinates to use high resolution image on high DPI screens.
       drag_image = DragImageForImage(*element, screen_device_scale_factor,
                                      image_size_in_pixels);
-      drag_location =
-          DragLocationForImage(drag_image.get(), drag_origin,
+      drag_obj_location =
+          DragLocationForImage(drag_image.get(), drag_initiation_location,
                                image_rect.origin(), image_size_in_pixels);
     }
-    DoSystemDrag(drag_image.get(), drag_location, drag_origin, data_transfer,
-                 src, false);
+    DoSystemDrag(drag_image.get(), drag_obj_location, drag_initiation_location,
+                 data_transfer, src);
   } else if (state.drag_type_ == kDragSourceActionLink) {
     if (link_url.IsEmpty())
       return false;
@@ -1305,15 +1300,15 @@
       drag_image =
           DragImageForLink(link_url, hit_test_result.TextContent(),
                            screen_device_scale_factor, src->GetDocument());
-      drag_location = DragLocationForLink(drag_image.get(), mouse_dragged_point,
-                                          screen_device_scale_factor,
-                                          src->GetPage()->PageScaleFactor());
+      drag_obj_location = DragLocationForLink(
+          drag_image.get(), mouse_dragged_point, screen_device_scale_factor,
+          src->GetPage()->PageScaleFactor());
     }
-    DoSystemDrag(drag_image.get(), drag_location, mouse_dragged_point,
-                 data_transfer, src, true);
+    DoSystemDrag(drag_image.get(), drag_obj_location, mouse_dragged_point,
+                 data_transfer, src);
   } else if (state.drag_type_ == kDragSourceActionDHTML) {
-    DoSystemDrag(drag_image.get(), drag_location, drag_origin, data_transfer,
-                 src, false);
+    DoSystemDrag(drag_image.get(), drag_obj_location, drag_initiation_location,
+                 data_transfer, src);
   } else {
     NOTREACHED();
     return false;
@@ -1322,13 +1317,11 @@
   return true;
 }
 
-// TODO(esprehn): forLink is dead code, what was it for?
 void DragController::DoSystemDrag(DragImage* image,
-                                  const gfx::Point& drag_location,
-                                  const gfx::Point& event_pos,
+                                  const gfx::Point& drag_obj_location,
+                                  const gfx::Point& drag_initiation_location,
                                   DataTransfer* data_transfer,
-                                  LocalFrame* frame,
-                                  bool for_link) {
+                                  LocalFrame* frame) {
   did_initiate_drag_ = true;
   drag_initiator_ = frame->DomWindow();
   SetExecutionContext(frame->DomWindow());
@@ -1337,8 +1330,9 @@
   // FloatPoints and we should calculate these adjusted values in floating
   // point to avoid unnecessary rounding.
   gfx::Point adjusted_drag_location =
-      frame->View()->FrameToViewport(drag_location);
-  gfx::Point adjusted_event_pos = frame->View()->FrameToViewport(event_pos);
+      frame->View()->FrameToViewport(drag_obj_location);
+  gfx::Point adjusted_event_pos =
+      frame->View()->FrameToViewport(drag_initiation_location);
   gfx::Point offset_point =
       adjusted_event_pos - adjusted_drag_location.OffsetFromOrigin();
   WebDragData drag_data = data_transfer->GetDataObject()->ToWebDragData();
diff --git a/third_party/blink/renderer/core/page/drag_controller.h b/third_party/blink/renderer/core/page/drag_controller.h
index f7d98be..ed40ce8 100644
--- a/third_party/blink/renderer/core/page/drag_controller.h
+++ b/third_party/blink/renderer/core/page/drag_controller.h
@@ -81,10 +81,16 @@
   bool PopulateDragDataTransfer(LocalFrame* src,
                                 const DragState&,
                                 const gfx::Point& drag_origin);
+
+  // The parameter `drag_event` is the event that triggered the drag operation,
+  // and `drag_initiation_location` is the where the drag originated.  The
+  // event's location does NOT match the initiation location for a mouse-drag:
+  // the drag is triggered by a mouse-move event but the initiation location is
+  // that of a mouse-down event.
   bool StartDrag(LocalFrame* src,
                  const DragState&,
                  const WebMouseEvent& drag_event,
-                 const gfx::Point& drag_origin);
+                 const gfx::Point& drag_initiation_location);
 
   DragState& GetDragState();
 
@@ -120,14 +126,11 @@
 
   void MouseMovedIntoDocument(Document*);
 
-  // drag_location and drag_origin should be in the coordinate space of the
-  // LocalFrame's contents.
   void DoSystemDrag(DragImage*,
-                    const gfx::Point& drag_location,
-                    const gfx::Point& drag_origin,
+                    const gfx::Point& drag_obj_location,
+                    const gfx::Point& drag_initiation_location,
                     DataTransfer*,
-                    LocalFrame*,
-                    bool for_link);
+                    LocalFrame*);
 
   Member<Page> page_;
 
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index e958c9e..8e9537f 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -295,8 +295,8 @@
   ALWAYS_INLINE void UpdateTransformIsolationNode();
   ALWAYS_INLINE void UpdateEffectIsolationNode();
   ALWAYS_INLINE void UpdateClipIsolationNode();
-  ALWAYS_INLINE void SetTransformNodeStateForSVGChild(
-      TransformPaintPropertyNode::State&);
+  ALWAYS_INLINE TransformPaintPropertyNode::TransformAndOrigin
+  TransformAndOriginForSVGChild() const;
   ALWAYS_INLINE void UpdateLayoutShiftRootChanged(bool is_layout_shift_root);
 
   bool NeedsPaintPropertyUpdate() const {
@@ -845,27 +845,12 @@
   return !object.LocalToSVGParentTransform().IsIdentity();
 }
 
-static void SetTransformNodeStateFromAffineTransform(
-    TransformPaintPropertyNode::State& state,
-    const AffineTransform& transform) {
-  if (transform.IsIdentityOrTranslation())
-    state.transform_and_origin = {gfx::Vector2dF(transform.E(), transform.F())};
-  else
-    state.transform_and_origin = {TransformationMatrix(transform)};
-}
-
-void FragmentPaintPropertyTreeBuilder::SetTransformNodeStateForSVGChild(
-    TransformPaintPropertyNode::State& state) {
+TransformPaintPropertyNode::TransformAndOrigin
+FragmentPaintPropertyTreeBuilder::TransformAndOriginForSVGChild() const {
   if (full_context_.direct_compositing_reasons &
       CompositingReason::kActiveTransformAnimation) {
     if (CompositorAnimations::CanStartTransformAnimationOnCompositorForSVG(
             *To<SVGElement>(object_.GetNode()))) {
-      // For composited transform animation to work, we need to store transform
-      // origin separately. It's baked in object_.LocalToSVGParentTransform().
-      state.transform_and_origin = {
-          TransformationMatrix(TransformHelper::ComputeTransform(
-              object_, ComputedStyle::kExcludeTransformOrigin)),
-          gfx::Point3F(TransformHelper::ComputeTransformOrigin(object_))};
       // Composited transform animation works only if
       // LocalToSVGParentTransform() reflects the CSS transform properties.
       // If this fails, we need to exclude the case in
@@ -873,18 +858,21 @@
       DCHECK_EQ(TransformHelper::ComputeTransform(
                     object_, ComputedStyle::kIncludeTransformOrigin),
                 object_.LocalToSVGParentTransform());
+      // For composited transform animation to work, we need to store transform
+      // origin separately. It's baked in object_.LocalToSVGParentTransform().
+      return {TransformationMatrix(TransformHelper::ComputeTransform(
+                  object_, ComputedStyle::kExcludeTransformOrigin)),
+              gfx::Point3F(TransformHelper::ComputeTransformOrigin(object_))};
     } else {
       // We composite the object but can't start composited animation. Still
       // keep the compositing reason because it still improves performance of
       // main thread animation, but avoid the 2d translation optimization to
       // meet the requirement of TransformPaintPropertyNode.
-      state.transform_and_origin = {
-          TransformationMatrix(object_.LocalToSVGParentTransform())};
+      return {TransformationMatrix(object_.LocalToSVGParentTransform())};
     }
-  } else {
-    SetTransformNodeStateFromAffineTransform(
-        state, object_.LocalToSVGParentTransform());
   }
+  return TransformPaintPropertyNode::TransformAndOrigin(
+      object_.LocalToSVGParentTransform());
 }
 
 // SVG does not use the general transform update of |UpdateTransform|, instead
@@ -903,7 +891,7 @@
     if (NeedsTransformForSVGChild(object_, direct_compositing_reasons)) {
       // The origin is included in the local transform, so leave origin empty.
       TransformPaintPropertyNode::State state;
-      SetTransformNodeStateForSVGChild(state);
+      state.transform_and_origin = TransformAndOriginForSVGChild();
 
       // TODO(pdr): There is additional logic in
       // FragmentPaintPropertyTreeBuilder::UpdateTransform that likely needs to
@@ -2286,7 +2274,9 @@
     }
     if (!content_to_parent_space.IsIdentity()) {
       TransformPaintPropertyNode::State state;
-      SetTransformNodeStateFromAffineTransform(state, content_to_parent_space);
+      state.transform_and_origin =
+          TransformPaintPropertyNode::TransformAndOrigin(
+              content_to_parent_space);
       state.flags.flattens_inherited_transform =
           context_.should_flatten_inherited_transform;
       state.rendering_context_id = context_.rendering_context_id;
diff --git a/third_party/blink/renderer/core/timing/measure_memory/OWNERS b/third_party/blink/renderer/core/timing/measure_memory/OWNERS
deleted file mode 100644
index ccae908..0000000
--- a/third_party/blink/renderer/core/timing/measure_memory/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-ulan@chromium.org
diff --git a/third_party/blink/renderer/modules/battery/battery_manager.idl b/third_party/blink/renderer/modules/battery/battery_manager.idl
index 9628086..1f33498 100644
--- a/third_party/blink/renderer/modules/battery/battery_manager.idl
+++ b/third_party/blink/renderer/modules/battery/battery_manager.idl
@@ -5,7 +5,7 @@
 // https://w3c.github.io/battery/#the-batterymanager-interface
 [
     ActiveScriptWrappable,
-    SecureContext=RestrictBatteryStatusToSecureContexts,
+    SecureContext,
     Exposed=Window
 ] interface BatteryManager : EventTarget {
     [HighEntropy=Direct, Measure] readonly attribute boolean charging;
diff --git a/third_party/blink/renderer/modules/battery/navigator_battery.idl b/third_party/blink/renderer/modules/battery/navigator_battery.idl
index 61ae44f3..303a0c2 100644
--- a/third_party/blink/renderer/modules/battery/navigator_battery.idl
+++ b/third_party/blink/renderer/modules/battery/navigator_battery.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // https://w3c.github.io/battery/#the-navigator-interface
-[SecureContext=RestrictBatteryStatusToSecureContexts, ImplementedAs=BatteryManager]
+[SecureContext, ImplementedAs=BatteryManager]
 partial interface Navigator {
     [CallWith=ScriptState, MeasureAs=BatteryStatusGetBattery] Promise<BatteryManager> getBattery();
 };
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
index 2bf1ae56..bcb8927 100644
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -140,6 +140,10 @@
   RuntimeEnabledFeatures::SetAdTaggingEnabled(enable);
 }
 
+void WebRuntimeFeatures::EnableAnonymousIframe(bool enable) {
+  RuntimeEnabledFeatures::SetAnonymousIframeEnabled(enable);
+}
+
 void WebRuntimeFeatures::EnableBatchFetchRequests(bool enable) {
   RuntimeEnabledFeatures::SetBatchFetchRequestsEnabled(enable);
 }
diff --git a/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.cc b/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.cc
index dc85c48..6f4dda4 100644
--- a/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.cc
@@ -6,9 +6,20 @@
 
 #include "base/memory/values_equivalent.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+#include "third_party/blink/renderer/platform/transforms/affine_transform.h"
 
 namespace blink {
 
+TransformPaintPropertyNode::TransformAndOrigin::TransformAndOrigin(
+    const AffineTransform& transform) {
+  if (transform.IsIdentityOrTranslation()) {
+    translation_2d_ = gfx::Vector2dF(transform.E(), transform.F());
+  } else {
+    matrix_and_origin_ = std::make_unique<MatrixAndOrigin>(
+        TransformationMatrix(transform), gfx::Point3F());
+  }
+}
+
 PaintPropertyChangeType TransformPaintPropertyNode::State::ComputeChange(
     const State& other,
     const AnimationState& animation_state) const {
diff --git a/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h b/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h
index 9a1b83a..65ea494 100644
--- a/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h
+++ b/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h
@@ -24,6 +24,7 @@
 namespace blink {
 
 using CompositorStickyConstraint = cc::StickyPositionConstraint;
+class AffineTransform;
 
 // A transform (e.g., created by css "transform" or "perspective", or for
 // internal positioning such as paint offset or scrolling) along with a
@@ -86,11 +87,12 @@
 
   // Stores a transform and origin with an optimization for the identity and
   // 2d translation cases that avoids allocating a full matrix and origin.
-  class TransformAndOrigin {
+  class PLATFORM_EXPORT TransformAndOrigin {
     DISALLOW_NEW();
 
    public:
     TransformAndOrigin() = default;
+    explicit TransformAndOrigin(const AffineTransform&);
     // These constructors are not explicit so that we can use gfx::Vector2dF or
     // TransformationMatrix directly in the initialization list of State.
     // NOLINTNEXTLINE(google-explicit-constructor)
diff --git a/third_party/blink/renderer/platform/p2p/host_address_request.cc b/third_party/blink/renderer/platform/p2p/host_address_request.cc
index d037455..93ddf21c 100644
--- a/third_party/blink/renderer/platform/p2p/host_address_request.cc
+++ b/third_party/blink/renderer/platform/p2p/host_address_request.cc
@@ -9,6 +9,7 @@
 #include "base/feature_list.h"
 #include "base/location.h"
 #include "components/webrtc/net_address_utils.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
@@ -25,6 +26,7 @@
 }
 
 void P2PAsyncAddressResolver::Start(const rtc::SocketAddress& host_name,
+                                    absl::optional<int> address_family,
                                     DoneCallback done_callback) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(kStateCreated, state_);
@@ -34,10 +36,16 @@
   done_callback_ = std::move(done_callback);
   bool enable_mdns = base::FeatureList::IsEnabled(
       blink::features::kWebRtcHideLocalIpsWithMdns);
-  dispatcher_->GetP2PSocketManager()->GetHostAddress(
-      String(host_name.hostname().data()), enable_mdns,
-      WTF::Bind(&P2PAsyncAddressResolver::OnResponse,
-                scoped_refptr<P2PAsyncAddressResolver>(this)));
+  auto callback = WTF::Bind(&P2PAsyncAddressResolver::OnResponse,
+                            scoped_refptr<P2PAsyncAddressResolver>(this));
+  if (address_family.has_value()) {
+    dispatcher_->GetP2PSocketManager()->GetHostAddressWithFamily(
+        String(host_name.hostname().data()), address_family.value(),
+        enable_mdns, std::move(callback));
+  } else {
+    dispatcher_->GetP2PSocketManager()->GetHostAddress(
+        String(host_name.hostname().data()), enable_mdns, std::move(callback));
+  }
   dispatcher_ = nullptr;
 }
 
diff --git a/third_party/blink/renderer/platform/p2p/host_address_request.h b/third_party/blink/renderer/platform/p2p/host_address_request.h
index 21ea09d..b8f06b01 100644
--- a/third_party/blink/renderer/platform/p2p/host_address_request.h
+++ b/third_party/blink/renderer/platform/p2p/host_address_request.h
@@ -11,6 +11,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
 #include "net/base/ip_address.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/webrtc/rtc_base/async_resolver_interface.h"
@@ -32,7 +33,9 @@
   P2PAsyncAddressResolver& operator=(const P2PAsyncAddressResolver&) = delete;
 
   // Start address resolve process.
-  void Start(const rtc::SocketAddress& addr, DoneCallback done_callback);
+  void Start(const rtc::SocketAddress& addr,
+             absl::optional<int> address_family,
+             DoneCallback done_callback);
   // Clients must unregister before exiting for cleanup.
   void Cancel();
 
diff --git a/third_party/blink/renderer/platform/p2p/ipc_socket_factory.cc b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.cc
index af1e819..dc19122 100644
--- a/third_party/blink/renderer/platform/p2p/ipc_socket_factory.cc
+++ b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.cc
@@ -12,6 +12,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/logging.h"
+#include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_checker.h"
@@ -214,6 +215,7 @@
 
   // rtc::AsyncResolverInterface interface.
   void Start(const rtc::SocketAddress& addr) override;
+  void Start(const rtc::SocketAddress& addr, int address_family) override;
   bool GetResolvedAddress(int family, rtc::SocketAddress* addr) const override;
   int GetError() const override;
   void Destroy(bool wait) override;
@@ -227,6 +229,8 @@
 
   rtc::SocketAddress addr_;                // Address to resolve.
   std::vector<rtc::IPAddress> addresses_;  // Resolved addresses.
+
+  base::WeakPtrFactory<AsyncAddressResolverImpl> weak_factory_{this};
 };
 
 IpcPacketSocket::IpcPacketSocket()
@@ -642,8 +646,21 @@
   // GetResolvedAddress.
   addr_ = addr;
 
-  resolver_->Start(addr, WTF::Bind(&AsyncAddressResolverImpl::OnAddressResolved,
-                                   WTF::Unretained(this)));
+  resolver_->Start(addr, /*address_family=*/absl::nullopt,
+                   WTF::Bind(&AsyncAddressResolverImpl::OnAddressResolved,
+                             weak_factory_.GetWeakPtr()));
+}
+
+void AsyncAddressResolverImpl::Start(const rtc::SocketAddress& addr,
+                                     int address_family) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  // Port and hostname must be copied to the resolved address returned from
+  // GetResolvedAddress.
+  addr_ = addr;
+
+  resolver_->Start(addr, absl::make_optional(address_family),
+                   WTF::Bind(&AsyncAddressResolverImpl::OnAddressResolved,
+                             weak_factory_.GetWeakPtr()));
 }
 
 bool AsyncAddressResolverImpl::GetResolvedAddress(
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 558570e..73a0172 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -180,7 +180,7 @@
     {
       name: "AnonymousIframe",
       origin_trial_allows_third_party: true,
-      origin_trial_feature_name: "AnonymousIframe",
+      origin_trial_feature_name: "AnonymousIframeOriginTrial",
       status: "test",
     },
     {
@@ -1911,10 +1911,6 @@
       name: "RenderPriorityAttribute"
     },
     {
-      name: "RestrictBatteryStatusToSecureContexts",
-      status: "stable",
-    },
-    {
       name: "RestrictGamepadAccess",
       status: "experimental",
     },
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 565e974..6423654 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -1077,6 +1077,8 @@
 # fragmentation/
 crbug.com/1078927 fragmentation/break-in-second-table-section.html [ Failure ]
 crbug.com/1078927 fragmentation/break-in-tbody-after-caption.html [ Failure ]
+crbug.com/1078927 fragmentation/fragmented-rowspan-alignment.html [ Failure ]
+crbug.com/1078927 fragmentation/fragmented-rowspan.html [ Failure ]
 crbug.com/1078927 fragmentation/multi-line-cells.html [ Failure ]
 crbug.com/1078927 fragmentation/repeating-thead-exceeds-page-size.html [ Failure ]
 crbug.com/1078927 fragmentation/repeating-thead-no-room-for-content-row-on-first-page.html [ Failure ]
@@ -1105,6 +1107,7 @@
 crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-with-two-captions.html [ Failure ]
 crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot.html [ Failure ]
 crbug.com/1078927 fragmentation/single-line-cells.html [ Failure ]
+crbug.com/1078927 fragmentation/table-overlapping-rowspan.html [ Failure ]
 crbug.com/1078927 fragmentation/table-row-dimensions-break-freely.html [ Failure ]
 crbug.com/1078927 fragmentation/table-row-dimensions-with-thead.html [ Failure ]
 crbug.com/1078927 fragmentation/table-row-page-break-collapsed-border.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index fa3c6e4a..54626bb7 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1639,11 +1639,8 @@
 crbug.com/1078927 external/wpt/css/css-multicol/table/balance-table-with-border-spacing.html [ Failure ]
 crbug.com/1078927 fast/multicol/table-row-height-increase.html [ Failure ]
 crbug.com/1078927 fragmentation/border-spacing-break-before-unbreakable-row.html [ Failure ]
-crbug.com/1078927 fragmentation/fragmented-rowspan-alignment.html [ Failure ]
-crbug.com/1078927 fragmentation/fragmented-rowspan.html [ Failure ]
 crbug.com/1078927 fragmentation/no-repeating-table-header-after-sections.html [ Failure ]
 crbug.com/1352931 fragmentation/repeating-thead-under-repeating-thead.html [ Failure ]
-crbug.com/1078927 fragmentation/table-overlapping-rowspan.html [ Failure ]
 
 ### With LayoutNGPrinting enabled:
 
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 12c9dce3..e04b8f3 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -5,7 +5,8 @@
     "bases": ["wpt_internal/origin_trials/anonymous-iframe"],
     "args": [
       "--disable-blink-features=AnonymousIframe",
-      "--disable-features=PartitionedCookies"
+      "--disable-features=PartitionedCookies,ThirdPartyStoragePartitioning",
+      "--enable-features=AnonymousIframeOriginTrial"
     ]
   },
   {
@@ -1246,14 +1247,6 @@
     ]
   },
   {
-    "prefix": "insecure-battery-status-api",
-    "platforms": ["Linux", "Mac", "Win"],
-    "bases": [ "http/tests/security/powerfulFeatureRestrictions/" ],
-    "args": [
-      "--disable-blink-features=RestrictBatteryStatusToSecureContexts"
-    ]
-  },
-  {
     "prefix": "force-defer-script",
     "platforms": ["Linux", "Mac", "Win"],
     "bases": ["external/wpt/html/semantics/scripting-1/the-script-element/defer-script/"],
diff --git a/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment-expected.html b/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment-expected.html
index b7eabd0..0373079 100644
--- a/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment-expected.html
+++ b/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment-expected.html
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
 <p>There should be one hotpink and one blue square below.</p>
-<div style="float:left; margin-left:15px; margin-top:80px; width:20px; height:20px; background:hotpink;"></div>
-<div style="float:left; margin-left:15px; margin-top:30px; width:20px; height:20px; background:blue;"></div>
+<div style="float:left; margin-left:50px; margin-top:70px; width:20px; height:20px; background:blue;"></div>
+<div style="float:left; margin-left:-5px; margin-top:0px; width:20px; height:20px; background:hotpink;"></div>
diff --git a/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment.html b/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment.html
index 2c436397..5dd1fa4 100644
--- a/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment.html
+++ b/third_party/blink/web_tests/fragmentation/fragmented-rowspan-alignment.html
@@ -12,7 +12,7 @@
                 <br>
                 <div style="width:20px; height:10px; border-bottom:10px solid blue;"></div>
             </td>
-            <td>
+            <td style="vertical-align: top;">
                 <div style="width:10px; height:20px; background:hotpink;"></div>
             </td>
         </tr>
diff --git a/third_party/blink/web_tests/fragmentation/fragmented-rowspan-expected.html b/third_party/blink/web_tests/fragmentation/fragmented-rowspan-expected.html
index bcc34a1d..8573552 100644
--- a/third_party/blink/web_tests/fragmentation/fragmented-rowspan-expected.html
+++ b/third_party/blink/web_tests/fragmentation/fragmented-rowspan-expected.html
@@ -2,6 +2,7 @@
 <p>The word "PASS" should be fully visible below.</p>
 <div style="margin-left:6em; line-height:20px;">
     <br>
+    <br>
     <div style="margin-left:1px;">PASS</div>
     <div style="width:6em; background:black;">
         <br>
diff --git a/third_party/blink/web_tests/fragmentation/table-overlapping-rowspan.html b/third_party/blink/web_tests/fragmentation/table-overlapping-rowspan.html
index 848d9de..c90402ea 100644
--- a/third_party/blink/web_tests/fragmentation/table-overlapping-rowspan.html
+++ b/third_party/blink/web_tests/fragmentation/table-overlapping-rowspan.html
@@ -13,21 +13,21 @@
 <div id="multicol" style="position:relative; columns:3; column-fill:auto; orphans:1; widows:1; line-height:20px; height:200px;">
     <div style="height:170px;"></div>
     <table cellspacing="0" cellpadding="0">
-        <tr data-expected-height="50">
-            <td rowspan="3" data-expected-height="110">
-                <div data-offset-y="170" style="position:relative; width:50px;"><br></div>
-                <div data-offset-y="0" style="position:relative; width:50px; background:blue;"><br></div>
-                <div data-offset-y="20" style="position:relative; width:50px; background:blue;"><br></div>
+        <tr data-expected-height="40">
+            <td rowspan="3" data-expected-height="140">
+                <div data-offset-y="20" style="position:relative; width:50px;"><br></div>
                 <div data-offset-y="40" style="position:relative; width:50px; background:blue;"><br></div>
                 <div data-offset-y="60" style="position:relative; width:50px; background:blue;"><br></div>
+                <div data-offset-y="80" style="position:relative; width:50px; background:blue;"><br></div>
+                <div data-offset-y="100" style="position:relative; width:50px; background:blue;"><br></div>
             </td>
-            <td data-expected-height="50">
+            <td data-expected-height="40">
                 <br>
-                <div style="width:30px; background:blue;"><br></div>
+                <div style="width:30px;"><br></div>
             </td>
-            <td data-expected-height="50"><br><br></td>
-            <td data-expected-height="50"><br><br></td>
-            <td data-expected-height="50"><br></td>
+            <td data-expected-height="40"><br><br></td>
+            <td data-expected-height="40"><br><br></td>
+            <td data-expected-height="40"><br></td>
         </tr>
         <tr data-expected-height="20">
             <td data-expected-height="20" style="background:blue;"><br></td>
@@ -35,14 +35,14 @@
             <td data-expected-height="20"><br></td>
             <td data-expected-height="20"><br></td>
         </tr>
-        <tr data-expected-height="40">
-            <td data-expected-height="40" style="background:blue;">
-                <br>
+        <tr data-expected-height="80">
+            <td data-expected-height="80" style="position: relative;">
+                <div style="position: absolute; background: blue; width: 100%; height: 60px; top: 0;"></div>
             </td>
-            <td data-expected-height="40">
+            <td data-expected-height="80">
                 <div style="width:50px; height:1px;"></div>
             </td>
-            <td data-expected-height="40" style="background:hotpink;">
+            <td data-expected-height="80" style="background:hotpink;">
                 <div style="width:50px;"><br></div>
             </td>
             <td data-expected-height="120" rowspan="2" style="background:hotpink;">
@@ -54,11 +54,11 @@
                 <div style="width:70px; background:hotpink;"><br></div>
             </td>
         </tr>
-        <tr data-expected-height="80">
-            <td data-expected-height="80"><br></td>
-            <td data-expected-height="80"><br></td>
-            <td data-expected-height="80"><br></td>
-            <td data-expected-height="80" style="background:hotpink;"><br></td>
+        <tr data-expected-height="40">
+            <td data-expected-height="40"><br></td>
+            <td data-expected-height="40"><br></td>
+            <td data-expected-height="40"><br></td>
+            <td data-expected-height="40" style="background:hotpink;"><br></td>
         </tr>
     </table>
 </div>
diff --git a/third_party/blink/web_tests/platform/generic/virtual/insecure-battery-status-api/http/tests/security/powerfulFeatureRestrictions/old-powerful-features-on-insecure-origin-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/insecure-battery-status-api/http/tests/security/powerfulFeatureRestrictions/old-powerful-features-on-insecure-origin-expected.txt
deleted file mode 100644
index d05a835..0000000
--- a/third_party/blink/web_tests/platform/generic/virtual/insecure-battery-status-api/http/tests/security/powerfulFeatureRestrictions/old-powerful-features-on-insecure-origin-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-This is a testharness.js-based test.
-PASS getCurrentPosition
-PASS watchPosition
-PASS Media devices properties
-PASS requestMediaKeySystemAccess
-FAIL Battery Status API assert_false: expected false got true
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/virtual/insecure-battery-status-api/README.md b/third_party/blink/web_tests/virtual/insecure-battery-status-api/README.md
deleted file mode 100644
index e48a218..0000000
--- a/third_party/blink/web_tests/virtual/insecure-battery-status-api/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-This virtual test suite disables the RestrictBatteryStatusToSecureContexts and
-exposes the Battery Status API to insecure origins.
diff --git a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/http-headers.https.window.js.headers b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/http-headers.https.window.js.headers
index ba15a01..88f7059 100644
--- a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/http-headers.https.window.js.headers
+++ b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/http-headers.https.window.js.headers
@@ -1 +1 @@
-Origin-Trial: AwdHTTICbNy8uTXRBoXUyIR2BqCZTs2wEYHEChRfeyzgFI06chb5ud7lfDB3it3gFS5X9z4H/vxF0M58xWmLfwMAAABgeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lIiwgImV4cGlyeSI6IDIwODMzMTQ1MTR9
+Origin-Trial:AzVN7f0pKX7uu6JC1lbQobzbru0oaEd2Dal+dt3kvzKey3XeNKOWComVzS/YmiNHyB456Uq8rcglONySHbU0SwwAAABreyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lT3JpZ2luVHJpYWwiLCAiZXhwaXJ5IjogMjA5MjczNDA4MX0=
diff --git a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/meta-tag.https.window.js b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/meta-tag.https.window.js
index 8885b22..16e8d39 100644
--- a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/meta-tag.https.window.js
+++ b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/meta-tag.https.window.js
@@ -5,12 +5,11 @@
   // ./tools/origin_trials/generate_token.py \
   //  --expire-days 5000 \
   //  --version 3  \
-  //  https://www.web-platform.test:8444/ \
-  //  AnonymousIframe
+  //  https://web-platform.test:8444/ \
+  //  AnonymousIframeOriginTrial
   const meta = document.createElement('meta');
   meta.httpEquiv = 'origin-trial';
-  meta.content =
-      'AwdHTTICbNy8uTXRBoXUyIR2BqCZTs2wEYHEChRfeyzgFI06chb5ud7lfDB3it3gFS5X9z4H/vxF0M58xWmLfwMAAABgeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lIiwgImV4cGlyeSI6IDIwODMzMTQ1MTR9';
+  meta.content = 'A97Jrmm+pQTssprM9VjN36d5QjspaFUk9Wj6EuMtjgCpib5dsTKei/4Z8XZdzF5EJmpGlgIy8cr4x2EBedR7qAIAAACBeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lT3JpZ2luVHJpYWwiLCAiZXhwaXJ5IjogMjA5MjY4Mjc4MiwgImlzVGhpcmRQYXJ0eSI6IHRydWV9';
   document.getElementsByTagName('head')[0].appendChild(meta);
 
   assert_true('anonymouslyFramed' in window);
diff --git a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/common.js b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/common.js
index 2ca2f79a..d06ba78d 100644
--- a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/common.js
+++ b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/common.js
@@ -7,9 +7,9 @@
   // ./tools/origin_trials/generate_token.py \
   //  --expire-days 5000 \
   //  --version 3  \
-  //  https://www.web-platform.test:8444/ \
-  //  AnonymousIframe
-  meta.content = 'AwdHTTICbNy8uTXRBoXUyIR2BqCZTs2wEYHEChRfeyzgFI06chb5ud7lfDB3it3gFS5X9z4H/vxF0M58xWmLfwMAAABgeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lIiwgImV4cGlyeSI6IDIwODMzMTQ1MTR9';
+  //  https://web-platform.test:8444/ \
+  //  AnonymousIframeOriginTrial
+  meta.content = 'A2GNv/0K8qpCxmqQjvwr83zGAFqexdNDFCYsl5QmcJXJrmighEpxp9kazeYJE2vfmF4btL8QOKyjUKv4gXZu4A8AAABreyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lT3JpZ2luVHJpYWwiLCAiZXhwaXJ5IjogMjA5MjczMzQ5OX0=';
   document.getElementsByTagName('head')[0].appendChild(meta);
 };
 
diff --git a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/third_party.js b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/third_party.js
index a07ff5b9..294a4c4 100644
--- a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/third_party.js
+++ b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/resources/third_party.js
@@ -7,11 +7,10 @@
   //  --version 3  \
   //  --is-third-party  \
   //  https://www1.web-platform.test:8444/ \
-  //  AnonymousIframe
+  //  AnonymousIframeOriginTrial
   const meta = document.createElement('meta');
   meta.httpEquiv = 'origin-trial';
-  meta.content =
-      'A+Rv4/kLwNxdRK/vI7CUzO69HFKU5PbhJVsYOm7fqfGe5C1BQBr0UewqwYcKJemwUAqXK2Yowr5N6jMqW+2lygIAAAB7eyJvcmlnaW4iOiAiaHR0cHM6Ly93d3cxLndlYi1wbGF0Zm9ybS50ZXN0Ojg0NDQiLCAiZmVhdHVyZSI6ICJBbm9ueW1vdXNJZnJhbWUiLCAiZXhwaXJ5IjogMjA4MzMyMDEwMiwgImlzVGhpcmRQYXJ0eSI6IHRydWV9';
+  meta.content = 'A8m7AzjLzS+9KpoZAzoG+UbvPeh/DbN0BcSwnW5fjSICjYqqjFUZw5Zgmvru6FQXYLceUgNvwgnMfbinYdMKYgsAAACGeyJvcmlnaW4iOiAiaHR0cHM6Ly93d3cxLndlYi1wbGF0Zm9ybS50ZXN0Ojg0NDQiLCAiZmVhdHVyZSI6ICJBbm9ueW1vdXNJZnJhbWVPcmlnaW5UcmlhbCIsICJleHBpcnkiOiAyMDkyNzMzNjczLCAiaXNUaGlyZFBhcnR5IjogdHJ1ZX0=';
   document.getElementsByTagName('head')[0].appendChild(meta);
 
   assert_true('anonymouslyFramed' in window);
diff --git a/third_party/metrics_proto/PRESUBMIT.py b/third_party/metrics_proto/PRESUBMIT.py
index da049f5..6445c0e 100644
--- a/third_party/metrics_proto/PRESUBMIT.py
+++ b/third_party/metrics_proto/PRESUBMIT.py
@@ -19,21 +19,20 @@
 
 
 def IsReadmeFile(input_api, path):
-  return (input_api.basename(path) == README and
+  return (input_api.os_path.basename(path) == README and
           IsMetricsProtoPath(input_api, path))
 
 
-def IsPresubmitFile(input_api, path):
-  return (input_api.basename(path) == PRESUBMIT and
+def IsImportedFile(input_api, path):
+  return (input_api.os_path.basename(path) != PRESUBMIT and
           IsMetricsProtoPath(input_api, path))
 
 
 def CheckChange(input_api, output_api):
   """Checks that all changes include a README update."""
   paths = [af.AbsoluteLocalPath() for af in input_api.AffectedFiles()]
-  if (any((IsMetricsProtoPath(input_api, p) for p in paths)) and not any(
-      (IsReadmeFile(input_api, p) or IsPresubmitFile(input_api, p)
-       for p in paths))):
+  if (any(IsImportedFile(input_api, p) for p in paths) and not
+      any(IsReadmeFile(input_api, p) for p in paths)):
     return [output_api.PresubmitError(
             'Modifies %s without updating %s. '
             'Changes to these files should originate upstream.' %
diff --git a/third_party/metrics_proto/PRESUBMIT_test.py b/third_party/metrics_proto/PRESUBMIT_test.py
index c5f7c05..d64106c 100755
--- a/third_party/metrics_proto/PRESUBMIT_test.py
+++ b/third_party/metrics_proto/PRESUBMIT_test.py
@@ -14,21 +14,58 @@
 
 from PRESUBMIT_test_mocks import (MockInputApi, MockOutputApi, MockAffectedFile)
 
+
+def FullPath(path):
+  return os.path.join(MockInputApi().PresubmitLocalPath(), path)
+
+
 class MetricsProtoCheckerTest(unittest.TestCase):
 
   def testModifiedWithoutReadme(self):
     input_api = MockInputApi()
-    input_api.files = [MockAffectedFile('somefile.proto', 'some diff')]
+    input_api.files = [MockAffectedFile(FullPath('somefile.proto'), 'some diff')]
     self.assertEqual(1, len(PRESUBMIT.CheckChange(input_api, MockOutputApi())))
 
-
-  def testModifiedWithoutReadme(self):
+  def testModifiedWithReadme(self):
     input_api = MockInputApi()
     input_api.files = [
-      MockAffectedFile('somefile.proto', 'some diff'),
-      MockAffectedFile(PRESUBMIT.README, 'some diff'),
+      MockAffectedFile(FullPath('somefile.proto'), 'some diff'),
+      MockAffectedFile(FullPath(PRESUBMIT.README), 'some diff'),
     ]
     self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi())))
 
+  def testModifiedReadmeOnly(self):
+    input_api = MockInputApi()
+    input_api.files = [
+      MockAffectedFile(FullPath(PRESUBMIT.README), 'some diff'),
+    ]
+    self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi())))
+
+  def testExcludedPaths(self):
+    input_api = MockInputApi()
+    input_api.files = [
+      # Changes to this file don't require README changes.
+      MockAffectedFile(FullPath('PRESUBMIT.py'), 'some diff'),
+    ]
+    self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi())))
+
+  def testIncludedAndExcludedPaths(self):
+    input_api = MockInputApi()
+    input_api.files = [
+      # Changes to this file don't require README changes.
+      MockAffectedFile(FullPath('PRESUBMIT.py'), 'some diff'),
+      # But this one does.
+      MockAffectedFile(FullPath('somefile.proto'), 'some diff'),
+    ]
+    self.assertEqual(1, len(PRESUBMIT.CheckChange(input_api, MockOutputApi())))
+
+  def testPathOutsideLocalDir(self):
+    input_api = MockInputApi()
+    input_api.files = [
+      MockAffectedFile('file_in_root_dir.proto', 'some diff'),
+    ]
+    self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi())))
+
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/third_party/metrics_proto/README.chromium b/third_party/metrics_proto/README.chromium
index d76fa5ff..3035268b 100644
--- a/third_party/metrics_proto/README.chromium
+++ b/third_party/metrics_proto/README.chromium
@@ -2,7 +2,7 @@
 Short Name: metrics_proto
 URL: This is the canonical public repository
 Version: 468293194
-Date: 2022/08/17 UTC
+Date: 2022/08/20 UTC
 License: BSD
 Security Critical: Yes
 
diff --git a/tools/android/audio_focus_grabber/OWNERS b/tools/android/audio_focus_grabber/OWNERS
deleted file mode 100644
index 5ad525b..0000000
--- a/tools/android/audio_focus_grabber/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-zqzhang@chromium.org
diff --git a/tools/android/generate_java_test/OWNERS b/tools/android/generate_java_test/OWNERS
deleted file mode 100644
index 73ec257..0000000
--- a/tools/android/generate_java_test/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-yzjr@chromium.org
diff --git a/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch b/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch
index 9269716..b67024c 100644
--- a/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch
+++ b/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch
@@ -16,10 +16,10 @@
  # =============================================================================
  # TARGET DEFAULTS
 diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
-index 9fbd5db5119a8..0156a05d43c81 100644
+index 0272bf80f31fe..59f24e500f01f 100644
 --- a/build/config/compiler/BUILD.gn
 +++ b/build/config/compiler/BUILD.gn
-@@ -624,6 +624,20 @@ config("compiler") {
+@@ -614,6 +614,20 @@ config("compiler") {
      cflags_cc += [ "-Wno-trigraphs" ]
    }
  
@@ -40,7 +40,7 @@
    # Add flags for link-time optimization. These flags enable
    # optimizations/transformations that require whole-program visibility at link
    # time, so they need to be applied to all translation units, and we may end up
-@@ -744,7 +758,7 @@ config("compiler") {
+@@ -734,7 +748,7 @@ config("compiler") {
    if (use_lld && !enable_call_graph_profile_sort) {
      if (is_win) {
        ldflags += [ "/call-graph-profile-sort:no" ]
@@ -49,16 +49,16 @@
        ldflags += [ "-Wl,--no-call-graph-profile-sort" ]
      }
    }
-@@ -1535,7 +1549,7 @@ config("default_warnings") {
-         "-Wno-ignored-pragma-optimize",
-       ]
+@@ -1532,7 +1546,7 @@ config("default_warnings") {
+         ]
+       }
  
 -      if (!is_nacl) {
 +      if (!is_nacl && !is_wasm) {
          cflags += [
-           # TODO(https://crbug.com/1300731) Clean up and enable.
-           "-Wno-unqualified-std-cast-call",
-@@ -2309,6 +2323,9 @@ config("symbols") {
+           # TODO(crbug.com/1343975) Evaluate and possibly enable.
+           "-Wno-deprecated-builtins",
+@@ -2290,6 +2304,9 @@ config("symbols") {
  
      # All configs using /DEBUG should include this:
      configs = [ ":win_pdbaltpath" ]
@@ -69,7 +69,7 @@
      cflags = []
      if (is_mac && enable_dsyms) {
 diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni
-index 1b97c8fa3eb5c..6ee47ccac4fad 100644
+index 98b23fd705a1b..c6679a89f966a 100644
 --- a/build/toolchain/toolchain.gni
 +++ b/build/toolchain/toolchain.gni
 @@ -47,6 +47,9 @@ if (is_apple) {
diff --git a/tools/cast3p/cast_core.version b/tools/cast3p/cast_core.version
index 7500739..7d05058e 100644
--- a/tools/cast3p/cast_core.version
+++ b/tools/cast3p/cast_core.version
@@ -1 +1 @@
-cast_20220805_0600_RC02
+cast_20220818_0600_RC00
diff --git a/tools/chrome_extensions/open_my_editor/OWNERS b/tools/chrome_extensions/open_my_editor/OWNERS
index 5d64cb0..b0456afa 100644
--- a/tools/chrome_extensions/open_my_editor/OWNERS
+++ b/tools/chrome_extensions/open_my_editor/OWNERS
@@ -1,2 +1 @@
 chaopeng@chromium.org
-watk@chromium.org
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 98f3c3f..a4b0548 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -50384,6 +50384,21 @@
   <int value="4" label="Open()"/>
 </enum>
 
+<enum name="InferredLabelSource">
+  <int value="0" label="No label"/>
+  <int value="1" label="&lt;label&gt; sibling/ancestor"/>
+  <int value="2" label="&lt;p&gt; sibling"/>
+  <int value="3" label="&lt;div&gt; ancestor"/>
+  <int value="4" label="&lt;td&gt; sibling"/>
+  <int value="5" label="&lt;dt&gt; sibling"/>
+  <int value="6" label="&lt;li&gt; ancestor"/>
+  <int value="7" label="placeholder attribute"/>
+  <int value="8" label="aria-label attribute"/>
+  <int value="9" label="Text node sibling (includes &lt;b&gt;, etc)"/>
+  <int value="10" label="value attribute"/>
+  <int value="11" label="&lt;label&gt; for attribute"/>
+</enum>
+
 <enum name="InfoBarClosingStates">
   <int value="0" label="Accepted survey"/>
   <int value="1" label="Tapped close button"/>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index 2208478..9f2cb0dc 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -1944,9 +1944,19 @@
   <owner>fleimgruber@google.com</owner>
   <owner>chrome-autofill-team@google.com</owner>
   <summary>
-    Logs how a label for=x element was assigned to an input. Emitted once per
-    inferred label (and thus potentially multiple times per field) during label
-    inference.
+    Logs how a &lt;label for=x&gt; element was assigned to an input. Emitted
+    once per inferred label (and thus potentially multiple times per field)
+    during label inference.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.LabelInference.InferredLabelSource"
+    enum="InferredLabelSource" expires_after="2023-02-12">
+  <owner>fleimgruber@google.com</owner>
+  <owner>chrome-autofill-team@google.com</owner>
+  <summary>
+    Logs how/if the label of an input was derived. Emitted once per field during
+    label inference.
   </summary>
 </histogram>
 
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml
index 5038c241..8a0c71f 100644
--- a/tools/metrics/histograms/metadata/tab/histograms.xml
+++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -87,7 +87,7 @@
 </variants>
 
 <histogram name="Discarding.DailyDiscards{TabDiscardReason}" units="tabs"
-    expires_after="2022-08-15">
+    expires_after="2023-02-22">
   <owner>vovoy@chromium.org</owner>
   <owner>fdoray@chromium.org</owner>
   <summary>
@@ -99,7 +99,7 @@
 </histogram>
 
 <histogram name="Discarding.DailyReloads{TabDiscardReason}" units="tabs"
-    expires_after="2022-08-15">
+    expires_after="2023-02-22">
   <owner>vovoy@chromium.org</owner>
   <owner>fdoray@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 1c5d58a..996eaa0 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -15275,6 +15275,13 @@
       Set to 1 if the main resource was served from cache.
     </summary>
   </metric>
+  <metric name="WasDiscarded" enum="Boolean">
+    <summary>
+      Records whether the Page Load is the result of the page having previously
+      been discarded because of performance interventions or critical memory
+      pressure.
+    </summary>
+  </metric>
 </event>
 
 <event name="PageLoad.FromGoogleSearch" singular="True">
diff --git a/tools/perf/page_sets/webrtc_cases/OWNERS b/tools/perf/page_sets/webrtc_cases/OWNERS
index ac09fcd..6f54bbe 100644
--- a/tools/perf/page_sets/webrtc_cases/OWNERS
+++ b/tools/perf/page_sets/webrtc_cases/OWNERS
@@ -1,2 +1 @@
 mbonadei@chromium.org
-glahiru@google.com
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
index 44c9e41..e85653b9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Dokumente</translation>
 <translation id="8261506727792406068">Vee uit</translation>
 <translation id="8261561378965667560">Chinees-Array</translation>
+<translation id="8264024885325823677">Jou administrateur bestuur hierdie instelling.</translation>
 <translation id="8269755669432358899">Vou lêersterugvoerpanele in</translation>
 <translation id="8280151743281770066">Armeense Fonetiese</translation>
 <translation id="8294431847097064396">Bron</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
index 4441546..b165919 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">ሰነዶች</translation>
 <translation id="8261506727792406068">ሰርዝ</translation>
 <translation id="8261561378965667560">የቻይንኛ ድርድር</translation>
+<translation id="8264024885325823677">ይህ ቅንብር በአስተዳዳሪዎ የሚቀናበር ነው።</translation>
 <translation id="8269755669432358899">የፋይሎች ግብረመልስ ፓነሎችን ሰብስብ</translation>
 <translation id="8280151743281770066">የአርሜኒያ ፎነቲክ</translation>
 <translation id="8294431847097064396">ምንጭ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
index bb4dfca..27cb5c5d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">المستندات</translation>
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8261561378965667560">‏الصينية باستخدام لوحة مفاتيح Array</translation>
+<translation id="8264024885325823677">يتولى مشرفك إدارة هذا الإعداد.</translation>
 <translation id="8269755669432358899">تصغير لوحات التعليقات على الملفات</translation>
 <translation id="8280151743281770066">أرمينية صوتية</translation>
 <translation id="8294431847097064396">المصدر</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
index 495c0ac8..2980388 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">নথিপত্রসমূহ</translation>
 <translation id="8261506727792406068">মচক</translation>
 <translation id="8261561378965667560">চীনা বিন্যাস</translation>
+<translation id="8264024885325823677">এই ছেটিংটো আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে।</translation>
 <translation id="8269755669432358899">ফাইলসমূহৰ প্ৰতিক্ৰিয়াৰ পেনেলটো সংকোচন কৰক</translation>
 <translation id="8280151743281770066">আৰমেনিয়ান ফ’নেটিক</translation>
 <translation id="8294431847097064396">উৎস</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
index 01b9223..acfb6693 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -857,6 +857,7 @@
 <translation id="8250920743982581267">Sənədlər</translation>
 <translation id="8261506727792406068">Silin</translation>
 <translation id="8261561378965667560">Çin dili (Array)</translation>
+<translation id="8264024885325823677">Bu ayar inzibatçınız tərəfindən idarə edilir.</translation>
 <translation id="8269755669432358899">Faylların rəy panelini yığcamlaşdırın</translation>
 <translation id="8280151743281770066">Ermənistan Fonetikası</translation>
 <translation id="8294431847097064396">Mənbə</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
index 48b65fa..05934ff 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Дакументы</translation>
 <translation id="8261506727792406068">Выдаліць</translation>
 <translation id="8261561378965667560">Кітайская (структурны метад уводу)</translation>
+<translation id="8264024885325823677">Гэта налада знаходзіцца пад кіраваннем адміністратара.</translation>
 <translation id="8269755669432358899">Згарнуць панэлі водгукаў для файлаў</translation>
 <translation id="8280151743281770066">Армянская фанетычная</translation>
 <translation id="8294431847097064396">Крыніца</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
index 6d5c38f3..f701ebb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Копирането не бе успешно. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Добавяне към страничната лента</translation>
 <translation id="4348495354623233847">Кюрдски (сорани) с базирана на арабски клавиатура</translation>
+<translation id="434941167647142660">Оригинално местоположение</translation>
 <translation id="4363958938297989186">Руски с фонетична клавиатура</translation>
 <translation id="4364327530094270451">Пъпеш</translation>
 <translation id="4378551569595875038">Свързване...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Документи</translation>
 <translation id="8261506727792406068">Изтриване</translation>
 <translation id="8261561378965667560">Китайски (табличен метод на въвеждане)</translation>
+<translation id="8264024885325823677">Тази настройка се управлява от администратора ви.</translation>
 <translation id="8269755669432358899">Свиване на панелите с информация за файловете</translation>
 <translation id="8280151743281770066">Арменска фонетична клавиатура</translation>
 <translation id="8294431847097064396">Източник</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index cd27450..a4d5eef 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">দস্তাবেজগুলি</translation>
 <translation id="8261506727792406068">মুছুন</translation>
 <translation id="8261561378965667560">চীনা অ্যারে</translation>
+<translation id="8264024885325823677">এই সেটিং আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে থাকে।</translation>
 <translation id="8269755669432358899">ফাইল ফিডব্যাক প্যানেল আড়াল করুন</translation>
 <translation id="8280151743281770066">আর্মেনিয় ফোনেটিক</translation>
 <translation id="8294431847097064396">উৎস</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
index 8a8b64a..ae6bdab 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenti</translation>
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8261561378965667560">kineski niz</translation>
+<translation id="8264024885325823677">Ovom postavkom upravlja vaš administrator.</translation>
 <translation id="8269755669432358899">Sužavanje ploča za povratne informacije o fajlovima</translation>
 <translation id="8280151743281770066">armenska (fonetska)</translation>
 <translation id="8294431847097064396">Izvor</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
index fee7cb68..5633675 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Documents</translation>
 <translation id="8261506727792406068">Suprimeix</translation>
 <translation id="8261561378965667560">Xinès (matriu)</translation>
+<translation id="8264024885325823677">El teu administrador gestiona aquesta opció de configuració.</translation>
 <translation id="8269755669432358899">Replega els taulers amb informació dels fitxers</translation>
 <translation id="8280151743281770066">Fonètic armeni</translation>
 <translation id="8294431847097064396">Font</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
index c7452117..51205b4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Dokumenty</translation>
 <translation id="8261506727792406068">Smazat</translation>
 <translation id="8261561378965667560">čínština (Array)</translation>
+<translation id="8264024885325823677">Toto nastavení spravuje administrátor.</translation>
 <translation id="8269755669432358899">Sbalit panely zpětné vazby k souborům</translation>
 <translation id="8280151743281770066">Arménská fonetická klávesnice</translation>
 <translation id="8294431847097064396">Zdroj</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
index c5e2eaed..15f6a920 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Dogfennau</translation>
 <translation id="8261506727792406068">Dileu</translation>
 <translation id="8261561378965667560">Trefn Tsieinëeg</translation>
+<translation id="8264024885325823677">Mae'r gosodiad hwn yn cael ei reoli gan eich gweinyddwr.</translation>
 <translation id="8269755669432358899">Crebachu paneli adborth ffeiliau</translation>
 <translation id="8280151743281770066">Seinegol Armeneg</translation>
 <translation id="8294431847097064396">Ffynhonnell</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index ea05e8c..67b1d7c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenter</translation>
 <translation id="8261506727792406068">Slet</translation>
 <translation id="8261561378965667560">Kinesisk array</translation>
+<translation id="8264024885325823677">Denne indstilling administreres af din administrator.</translation>
 <translation id="8269755669432358899">Skjul paneler med feedback til filer</translation>
 <translation id="8280151743281770066">Armensk (fonetisk)</translation>
 <translation id="8294431847097064396">Kilde</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index eca9e86c..452b1a5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Dokumente</translation>
 <translation id="8261506727792406068">Löschen</translation>
 <translation id="8261561378965667560">Chinesisch (Array)</translation>
+<translation id="8264024885325823677">Diese Einstellung wird von deinem Administrator verwaltet.</translation>
 <translation id="8269755669432358899">Erweiterte Dateiinformationen minimieren</translation>
 <translation id="8280151743281770066">Armenisch – phonetisch</translation>
 <translation id="8294431847097064396">Quelle</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
index 6c13cd0d..78fd52e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -878,6 +878,7 @@
 <translation id="8250920743982581267">Έγγραφα</translation>
 <translation id="8261506727792406068">Διαγραφή</translation>
 <translation id="8261561378965667560">Πίνακας Κινεζικών</translation>
+<translation id="8264024885325823677">Η διαχείριση αυτής της ρύθμισης πραγματοποιείται από τον διαχειριστή σας.</translation>
 <translation id="8269755669432358899">Σύμπτυξη πλαισίων σχολίων αρχείων</translation>
 <translation id="8280151743281770066">Φωνητικό Αρμενικά</translation>
 <translation id="8294431847097064396">Πηγή</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
index f9a17a84..24f669f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Documents</translation>
 <translation id="8261506727792406068">Delete</translation>
 <translation id="8261561378965667560">Chinese Array</translation>
+<translation id="8264024885325823677">This setting is managed by your administrator.</translation>
 <translation id="8269755669432358899">Collapse files feedback panels</translation>
 <translation id="8280151743281770066">Armenian Phonetic</translation>
 <translation id="8294431847097064396">Source</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index ba4f926..b2a8a368 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Error al copiar. (<ph name="ERROR_MESSAGE" />).</translation>
 <translation id="4340491671558548972">Agregar a la barra lateral</translation>
 <translation id="4348495354623233847">Kurdo sorani con teclado basado en el árabe</translation>
+<translation id="434941167647142660">Ubicación original</translation>
 <translation id="4363958938297989186">Ruso con teclado fonético</translation>
 <translation id="4364327530094270451">Melón</translation>
 <translation id="4378551569595875038">Conectando…</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Documentos</translation>
 <translation id="8261506727792406068">Borrar</translation>
 <translation id="8261561378965667560">Chino (Array)</translation>
+<translation id="8264024885325823677">El administrador controla esta configuración.</translation>
 <translation id="8269755669432358899">Ocultar paneles de comentarios de archivos</translation>
 <translation id="8280151743281770066">Armenio fonético</translation>
 <translation id="8294431847097064396">Fuente</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
index 99c6ceb3..1226462 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Documentos</translation>
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8261561378965667560">Chino (conjunto)</translation>
+<translation id="8264024885325823677">Este ajuste lo gestiona tu administrador.</translation>
 <translation id="8269755669432358899">Comprimir paneles de comentarios de archivos</translation>
 <translation id="8280151743281770066">Armenio fonético</translation>
 <translation id="8294431847097064396">Origen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
index 4a0a139f..ceee19f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Kopeerimine ebaõnnestus. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Lisa külgribale</translation>
 <translation id="4348495354623233847">sorani kurdi, araabia keele põhise klaviatuuriga</translation>
+<translation id="434941167647142660">Algne asukoht</translation>
 <translation id="4363958938297989186">vene, foneetilise klaviatuuriga</translation>
 <translation id="4364327530094270451">Melon</translation>
 <translation id="4378551569595875038">Ühendamine ...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Dokumendid</translation>
 <translation id="8261506727792406068">Kustuta</translation>
 <translation id="8261561378965667560">hiina, reapõhine sisestus</translation>
+<translation id="8264024885325823677">Seda seadet haldab administraator.</translation>
 <translation id="8269755669432358899">Ahenda failide tagasisidepaneelid</translation>
 <translation id="8280151743281770066">Armeenia foneetiline</translation>
 <translation id="8294431847097064396">Allikas</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
index 43e193f..78d7e99 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Dokumentuak</translation>
 <translation id="8261506727792406068">Ezabatu</translation>
 <translation id="8261561378965667560">Txinatarra (matriziala)</translation>
+<translation id="8264024885325823677">Administratzaileak kudeatzen du ezarpen hau.</translation>
 <translation id="8269755669432358899">Tolestu fitxategien oharren panelak</translation>
 <translation id="8280151743281770066">Armeniar fonetikoa</translation>
 <translation id="8294431847097064396">Iturburua</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index b7b6739c..483e03e8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">اسناد</translation>
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8261561378965667560">چینی (آرای)</translation>
+<translation id="8264024885325823677">این تنظیم را سرپرست شما مدیریت می‌کند.</translation>
 <translation id="8269755669432358899">کوچک کردن پانل بازخورد فایل‌ها</translation>
 <translation id="8280151743281770066">آوایی ارمنی</translation>
 <translation id="8294431847097064396">منبع</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
index d212525..c99505f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Dokumentit</translation>
 <translation id="8261506727792406068">Poista</translation>
 <translation id="8261561378965667560">kiina (array)</translation>
+<translation id="8264024885325823677">Järjestelmänvalvojasi ylläpitää tätä asetusta.</translation>
 <translation id="8269755669432358899">Tiivistä tiedostojen palautepaneelit</translation>
 <translation id="8280151743281770066">armenia (foneettinen)</translation>
 <translation id="8294431847097064396">Lähde</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
index 61574630..819b919b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Nabigo ang pagkopya. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Idagdag sa sidebar</translation>
 <translation id="4348495354623233847">Sorani Kurdish na may Arabic-based keyboard</translation>
+<translation id="434941167647142660">Orihinal na lokasyon</translation>
 <translation id="4363958938297989186">Russian na may Phonetic keyboard</translation>
 <translation id="4364327530094270451">Melon</translation>
 <translation id="4378551569595875038">Kumokonekta...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Mga Dokumento</translation>
 <translation id="8261506727792406068">I-delete</translation>
 <translation id="8261561378965667560">Chinese Array</translation>
+<translation id="8264024885325823677">Pinapamahalaan ng iyong administrator ang setting na ito.</translation>
 <translation id="8269755669432358899">I-collapse ang mga panel ng feedback ng mga file</translation>
 <translation id="8280151743281770066">Armenian Phonetic</translation>
 <translation id="8294431847097064396">Pinagmulan</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
index 857db60..98d5b80b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
@@ -861,6 +861,7 @@
 <translation id="8250920743982581267">Documents</translation>
 <translation id="8261506727792406068">Supprimer</translation>
 <translation id="8261561378965667560">Chinois (tableau)</translation>
+<translation id="8264024885325823677">C'est votre administrateur qui gère ce paramètre.</translation>
 <translation id="8269755669432358899">Réduire les panneaux de commentaires sur les fichiers</translation>
 <translation id="8280151743281770066">Phonétique arménien</translation>
 <translation id="8294431847097064396">Source</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
index 2ec4ea7..7b40252 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Documents</translation>
 <translation id="8261506727792406068">Supprimer</translation>
 <translation id="8261561378965667560">Chinois (tableau)</translation>
+<translation id="8264024885325823677">Ce paramètre est géré par votre administrateur.</translation>
 <translation id="8269755669432358899">Réduire les panneaux de commentaires sur les fichiers</translation>
 <translation id="8280151743281770066">Arménien phonétique</translation>
 <translation id="8294431847097064396">Source</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
index 42298dc0..e692fa8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Documentos</translation>
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8261561378965667560">Chinés (matriz)</translation>
+<translation id="8264024885325823677">O teu administrador xestiona esta opción de configuración.</translation>
 <translation id="8269755669432358899">Contraer paneis de comentarios de ficheiros</translation>
 <translation id="8280151743281770066">Fonética armenia</translation>
 <translation id="8294431847097064396">Fonte</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
index b150ab9c..8483ad0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">દસ્તાવેજો</translation>
 <translation id="8261506727792406068">ડિલીટ કરો</translation>
 <translation id="8261561378965667560">ચાઇનીઝ અરે</translation>
+<translation id="8264024885325823677">આ સેટિંગને તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે.</translation>
 <translation id="8269755669432358899">ફાઇલોના પ્રતિસાદની પૅનલ નાની કરો</translation>
 <translation id="8280151743281770066">આર્મેનિયન ધ્વન્યાત્મક</translation>
 <translation id="8294431847097064396">સ્રોત</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index 690fab21..db16c11 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">दस्तावेज़</translation>
 <translation id="8261506727792406068">मिटाएं</translation>
 <translation id="8261561378965667560">चाइनीज़ अरे</translation>
+<translation id="8264024885325823677">इस सेटिंग को आपका एडमिन मैनेज करता है.</translation>
 <translation id="8269755669432358899">फ़ाइल के लिए सुझाव पैनल को छोटा करें</translation>
 <translation id="8280151743281770066">आर्मेनियाई फ़ोनेटिक</translation>
 <translation id="8294431847097064396">स्रोत</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index ed5253b7..b67144b1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Dokumenti</translation>
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8261561378965667560">niz za kineski</translation>
+<translation id="8264024885325823677">Tom postavkom upravlja vaš administrator.</translation>
 <translation id="8269755669432358899">Sažmi ploče povratnih informacija o datotekama</translation>
 <translation id="8280151743281770066">armenska (fonetska)</translation>
 <translation id="8294431847097064396">Izvor</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
index 3e7b888f..bfe0db5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">A másolási művelet sikertelen. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Felvétel az oldalsávra</translation>
 <translation id="4348495354623233847">szoráni kurd, arabalapú billentyűzettel</translation>
+<translation id="434941167647142660">Eredeti hely</translation>
 <translation id="4363958938297989186">orosz, fonetikus billentyűzettel</translation>
 <translation id="4364327530094270451">Dinnye</translation>
 <translation id="4378551569595875038">Kapcsolódás…</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Dokumentumok</translation>
 <translation id="8261506727792406068">Törlés</translation>
 <translation id="8261561378965667560">kínai, tömb</translation>
+<translation id="8264024885325823677">Ezt a beállítást a rendszergazdája kezeli.</translation>
 <translation id="8269755669432358899">A fájlokhoz tartozó visszajelzési párbeszédpanel összecsukása</translation>
 <translation id="8280151743281770066">örmény fonetikus</translation>
 <translation id="8294431847097064396">Forrás</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
index 46b0745..f159cce8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Փաստաթղթեր</translation>
 <translation id="8261506727792406068">Ջնջել</translation>
 <translation id="8261561378965667560">չինարեն (կառուցվածքային մուտքագրում)</translation>
+<translation id="8264024885325823677">Այս կարգավորումը կառավարվում է ձեր ադմինիստրատորի կողմից։</translation>
 <translation id="8269755669432358899">Ծալել ֆայլերի մասին կարծիք հայտնելու վահանակները</translation>
 <translation id="8280151743281770066">Հայկական հնչյունային</translation>
 <translation id="8294431847097064396">Աղբյուր</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
index 7476d7c..9beb8675 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Operasi penyalinan gagal. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Tambahkan ke sidebar</translation>
 <translation id="4348495354623233847">Kurdi Sorani dengan keyboard berbasis bahasa Arab</translation>
+<translation id="434941167647142660">Lokasi asli</translation>
 <translation id="4363958938297989186">Rusia dengan keyboard Fonetik</translation>
 <translation id="4364327530094270451">Melon</translation>
 <translation id="4378551569595875038">Menghubungkan...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Dokumen</translation>
 <translation id="8261506727792406068">Hapus</translation>
 <translation id="8261561378965667560">Array China</translation>
+<translation id="8264024885325823677">Setelan ini dikelola oleh administrator Anda.</translation>
 <translation id="8269755669432358899">Ciutkan panel masukan file</translation>
 <translation id="8280151743281770066">Fonetik Armenia</translation>
 <translation id="8294431847097064396">Sumber</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
index f6d40f4..e226d73d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Skjöl</translation>
 <translation id="8261506727792406068">Eyða</translation>
 <translation id="8261561378965667560">Kínverska Array</translation>
+<translation id="8264024885325823677">Kerfisstjórinn þinn stjórnar þessari stillingu.</translation>
 <translation id="8269755669432358899">Draga saman svæði með ábendingum fyrir skrár</translation>
 <translation id="8280151743281770066">Armensk hljóðritun</translation>
 <translation id="8294431847097064396">Uppruni</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
index 629e3c3..d812e63 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Documenti</translation>
 <translation id="8261506727792406068">Elimina</translation>
 <translation id="8261561378965667560">Cinese Array</translation>
+<translation id="8264024885325823677">Questa impostazione è gestita dall'amministratore.</translation>
 <translation id="8269755669432358899">Comprimi i riquadri di feedback dei file</translation>
 <translation id="8280151743281770066">Fonetica armena</translation>
 <translation id="8294431847097064396">Origine</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
index cb741e7..2410b6f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">פעולת ההעתקה נכשלה. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">הוספה לסרגל הצד</translation>
 <translation id="4348495354623233847">כורדית סוראנית עם מקלדת המבוססת על ערבית</translation>
+<translation id="434941167647142660">המיקום המקורי</translation>
 <translation id="4363958938297989186">רוסית עם מקלדת פונטית</translation>
 <translation id="4364327530094270451">מלון</translation>
 <translation id="4378551569595875038">התחברות...</translation>
@@ -860,6 +861,7 @@
 <translation id="8250920743982581267">מסמכים</translation>
 <translation id="8261506727792406068">מחיקה</translation>
 <translation id="8261561378965667560">‏סינית Array</translation>
+<translation id="8264024885325823677">ההגדרה הזו מנוהלת על-ידי מנהל המערכת שלך.</translation>
 <translation id="8269755669432358899">כיווץ חלוניות המשוב של הקבצים</translation>
 <translation id="8280151743281770066">ארמנית פונטית</translation>
 <translation id="8294431847097064396">מקור</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
index 1e64ac0..d56299fa 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">ドキュメント</translation>
 <translation id="8261506727792406068">削除</translation>
 <translation id="8261561378965667560">中国語(行列)</translation>
+<translation id="8264024885325823677">この設定は管理者によって管理されています。</translation>
 <translation id="8269755669432358899">ファイルのフィードバック パネルを折りたたみます</translation>
 <translation id="8280151743281770066">アルメニア語(表音)</translation>
 <translation id="8294431847097064396">ソース</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
index 9baa603..39c23e3 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">დოკუმენტები</translation>
 <translation id="8261506727792406068">წაშლა</translation>
 <translation id="8261561378965667560">ჩინური Array</translation>
+<translation id="8264024885325823677">ამ პარამეტრს მართავს თქვენი ადმინისტრატორი.</translation>
 <translation id="8269755669432358899">ფაილების გამოხმაურების არეების ჩაკეცვა</translation>
 <translation id="8280151743281770066">სომხური ფონეტიკური</translation>
 <translation id="8294431847097064396">წყარო</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
index e5e7a6b7..3be2287 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Құжаттар</translation>
 <translation id="8261506727792406068">Жою</translation>
 <translation id="8261561378965667560">Қытай (құрылымдық енгізу)</translation>
+<translation id="8264024885325823677">Бұл параметрді әкімшіңіз басқарады.</translation>
 <translation id="8269755669432358899">Файлдар туралы пікір панельдерін жию</translation>
 <translation id="8280151743281770066">Армян фонетикалық пернетақтасы</translation>
 <translation id="8294431847097064396">Дереккөз</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
index bde1298..06821c7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">ប្រតិបត្តិការចម្លងបានបរាជ័យ។ <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">បញ្ចូលក្នុង​របារចំហៀង</translation>
 <translation id="4348495354623233847">ភាសាសូរ៉ានី​ឃឺដ​ដែលប្រើ​ក្ដារចុច​ផ្អែកលើ​ភាសា​អារ៉ាប់</translation>
+<translation id="434941167647142660">ទីតាំង​ដើម</translation>
 <translation id="4363958938297989186">ភាសារុស្ស៊ី​ដែលប្រើ​ក្ដារចុច​តាម​សូរសព្ទ</translation>
 <translation id="4364327530094270451">ត្រសក់​ផ្អែម</translation>
 <translation id="4378551569595875038">កំពុងភ្ជាប់...</translation>
@@ -858,6 +859,7 @@
 <translation id="8250920743982581267">ឯកសារ</translation>
 <translation id="8261506727792406068">លុប</translation>
 <translation id="8261561378965667560">ភាសាចិន​អារ៉េ</translation>
+<translation id="8264024885325823677">ការកំណត់នេះត្រូវបានគ្រប់គ្រងដោយអ្នកគ្រប់គ្រងរបស់អ្នក។</translation>
 <translation id="8269755669432358899">បង្រួមផ្ទាំង​មតិកែលម្អ​ឯកសារ</translation>
 <translation id="8280151743281770066">សូរស័ព្ទភាសាអាម៉ានី</translation>
 <translation id="8294431847097064396">ប្រភព</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
index df99274..90f5217 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -848,6 +848,7 @@
 <translation id="8250920743982581267">ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳು</translation>
 <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
 <translation id="8261561378965667560">ಚೈನೀಸ್ ಅರೇ</translation>
+<translation id="8264024885325823677">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸುತ್ತಾರೆ.</translation>
 <translation id="8269755669432358899">ಫೈಲ್‌ಗಳ ಪ್ರತಿಕ್ರಿಯೆ ಫಲಕಗಳನ್ನು ಕುಗ್ಗಿಸಿ</translation>
 <translation id="8280151743281770066">ಅರ್ಮೇನಿಯನ್ ಫೊನೆಟಿಕ್</translation>
 <translation id="8294431847097064396">ಮೂಲ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
index 64e8dfc..7b2792fb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">복사 작업에 실패했습니다. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">사이드바에 추가</translation>
 <translation id="4348495354623233847">소라니 쿠르드어(아랍어 기반 키보드)</translation>
+<translation id="434941167647142660">원래 위치</translation>
 <translation id="4363958938297989186">러시아어(표음 키보드)</translation>
 <translation id="4364327530094270451">멜론</translation>
 <translation id="4378551569595875038">연결 중...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">문서</translation>
 <translation id="8261506727792406068">삭제</translation>
 <translation id="8261561378965667560">중국어(행렬수입법)</translation>
+<translation id="8264024885325823677">관리자가 관리하는 설정입니다.</translation>
 <translation id="8269755669432358899">파일 의견 패널 접기</translation>
 <translation id="8280151743281770066">알마니아어 표음</translation>
 <translation id="8294431847097064396">출처</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
index 506754b..c3de2e6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Документтер</translation>
 <translation id="8261506727792406068">Жок кылуу</translation>
 <translation id="8261561378965667560">Кытайча (түзүмдүк)</translation>
+<translation id="8264024885325823677">Бул жөндөөнү администраторуңуз башкарат.</translation>
 <translation id="8269755669432358899">Файлдардын маалымат камтылган панелдерин жыйыштыруу</translation>
 <translation id="8280151743281770066">Армянча фонетикалык</translation>
 <translation id="8294431847097064396">Булак</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
index c454eeb9..77b73f2 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">ກັອບປີ້ການດໍາເນີນການບໍ່ສໍາເລັດ. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">ເພີ່ມໃສ່ແຖບດ້ານຂ້າງ</translation>
 <translation id="4348495354623233847">ພາສາເຄີດໂຊຣານີທີ່ໃຊ້ແປ້ນພິມແບບອາຣັບ</translation>
+<translation id="434941167647142660">ສະຖານທີ່ເດີມ</translation>
 <translation id="4363958938297989186">ພາສາຣັດເຊຍທີ່ໃຊ້ແປ້ນພິມຕາມການອອກສຽງ</translation>
 <translation id="4364327530094270451">ໝາກໂມ</translation>
 <translation id="4378551569595875038">ກໍາລັງ​ເຊື່ອມ​ຕໍ່ ...</translation>
@@ -858,6 +859,7 @@
 <translation id="8250920743982581267">ເອກະສານ</translation>
 <translation id="8261506727792406068">ລຶບ</translation>
 <translation id="8261561378965667560">ອາເຣພາສາຈີນ</translation>
+<translation id="8264024885325823677">ການຕັ້ງຄ່ານີ້ຈັດການໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ.</translation>
 <translation id="8269755669432358899">ຫຍໍ້ແຜງຄຳຕິຊົມໄຟລ໌ລົງ</translation>
 <translation id="8280151743281770066">ການອອກສຽງພາສາອາກເມນີ</translation>
 <translation id="8294431847097064396">ແຫຼ່ງທີ່ມາ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
index 8213f98..99f7412 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Nepavyko įvykdyti kopijavimo operacijos. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Pridėti prie šoninės juostos</translation>
 <translation id="4348495354623233847">Soranių kurdų su arabų k. klaviatūra</translation>
+<translation id="434941167647142660">Pradinė vieta</translation>
 <translation id="4363958938297989186">Rusų k. su fonetine klaviatūra</translation>
 <translation id="4364327530094270451">Melionas</translation>
 <translation id="4378551569595875038">Jungiamasi...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Dokumentai</translation>
 <translation id="8261506727792406068">Ištrinti</translation>
 <translation id="8261561378965667560">Kinų k. masyvas</translation>
+<translation id="8264024885325823677">Šį nustatymą tvarko jūsų administratorius.</translation>
 <translation id="8269755669432358899">Sutraukti failų atsiliepimų skydelius</translation>
 <translation id="8280151743281770066">Fonetinė armėnų</translation>
 <translation id="8294431847097064396">Šaltinis</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
index 031e35cd..b094895 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Dokumenti</translation>
 <translation id="8261506727792406068">Dzēst</translation>
 <translation id="8261561378965667560">Ķīniešu, masīva ievades metode</translation>
+<translation id="8264024885325823677">Šo iestatījumu pārvalda jūsu administrators.</translation>
 <translation id="8269755669432358899">Notiek failu atsauksmju paneļu sakļaušana</translation>
 <translation id="8280151743281770066">Armēņu fonētiskā</translation>
 <translation id="8294431847097064396">Avots</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
index effc109e..ffe779aa 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Документи</translation>
 <translation id="8261506727792406068">Избриши</translation>
 <translation id="8261561378965667560">кинески со низа</translation>
+<translation id="8264024885325823677">Администраторот управува со поставкава.</translation>
 <translation id="8269755669432358899">Соберете ги таблите со повратни информации за датотеките</translation>
 <translation id="8280151743281770066">ерменска фонетска</translation>
 <translation id="8294431847097064396">Извор</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
index 80e3e31..cf45a02c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">ഡോക്യുമെന്റുകൾ</translation>
 <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation>
 <translation id="8261561378965667560">ചൈനീസ് അറേ</translation>
+<translation id="8264024885325823677">ഈ ക്രമീകരണം മാനേജ് ചെയ്യുന്നത് നിങ്ങളുടെ അഡ്‌മിനാണ്.</translation>
 <translation id="8269755669432358899">ഫയലുകളുടെ ഫീഡ്ബാക്ക് പാനലുകൾ ചുരുക്കുക</translation>
 <translation id="8280151743281770066">അർമേനിയൻ സ്വരസൂചകം</translation>
 <translation id="8294431847097064396">ഉറവിടം</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
index 05831bad..697934c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -857,6 +857,7 @@
 <translation id="8250920743982581267">Документ</translation>
 <translation id="8261506727792406068">Устгах</translation>
 <translation id="8261561378965667560">Хятад матрицын арга</translation>
+<translation id="8264024885325823677">Энэ тохиргоог таны администратор удирддаг.</translation>
 <translation id="8269755669432358899">Файлын cанал хүсэлтийн түр зуурын самбарыг буулгах</translation>
 <translation id="8280151743281770066">Армений авиа зүй</translation>
 <translation id="8294431847097064396">Эх сурвалж</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index 6c7401b..78b7158 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">दस्तऐवज</translation>
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8261561378965667560">चीनी ॲरे</translation>
+<translation id="8264024885325823677">हे सेटिंग तुमच्या अ‍ॅडमिनिस्ट्रेटरद्वारे व्यवस्थापित केले जाते.</translation>
 <translation id="8269755669432358899">फाइल फीडबॅक पॅनल कोलॅप्स करा</translation>
 <translation id="8280151743281770066">अर्मेनियन ध्वन्यात्मक</translation>
 <translation id="8294431847097064396">स्रोत</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
index 22702b59..96a15e02 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumen</translation>
 <translation id="8261506727792406068">Padam</translation>
 <translation id="8261561378965667560">Tatasusunan Cina</translation>
+<translation id="8264024885325823677">Tetapan ini diurus oleh pentadbir anda.</translation>
 <translation id="8269755669432358899">Runtuhkan panel maklum balas fail</translation>
 <translation id="8280151743281770066">Fonetik bahasa Armenia</translation>
 <translation id="8294431847097064396">Sumber</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
index 57ba25a..b9d6f42 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">စာရွက်စာတမ်းများ</translation>
 <translation id="8261506727792406068">ဖျက်ရန်</translation>
 <translation id="8261561378965667560">တရုတ်လက်ကွက် အခင်းအကျင်း</translation>
+<translation id="8264024885325823677">ဤဆက်တင်ကို သင့် 'ကြီးကြပ်သူ' က စီမံသည်။</translation>
 <translation id="8269755669432358899">ဖိုင်တုံ့ပြန်မှု အကန့်များ လျှော့ပြရန်</translation>
 <translation id="8280151743281770066">အာမန်းနီးယမ်း အသံထွက်</translation>
 <translation id="8294431847097064396">အရင်းအမြစ်</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
index f525eed..a4abe16a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">कागजातहरू</translation>
 <translation id="8261506727792406068">मेट्नुहोस्</translation>
 <translation id="8261561378965667560">चिनियाँ एरे</translation>
+<translation id="8264024885325823677">तपाईंका प्रशासक यो सेटिङ मिलाउनुहुन्छ।</translation>
 <translation id="8269755669432358899">फाइलका प्रतिक्रियाका प्यानलहरू संक्षिप्त गर्नुहोस्</translation>
 <translation id="8280151743281770066">आर्मेनियाली फोनेटिक</translation>
 <translation id="8294431847097064396">स्रोत</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
index f6a1240..123a0c8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -861,6 +861,7 @@
 <translation id="8250920743982581267">Documenten</translation>
 <translation id="8261506727792406068">Verwijderen</translation>
 <translation id="8261561378965667560">Chinees (Array)</translation>
+<translation id="8264024885325823677">Deze instelling wordt beheerd door je beheerder.</translation>
 <translation id="8269755669432358899">Feedbackvensters voor bestanden samenvouwen</translation>
 <translation id="8280151743281770066">Armeens fonetisch</translation>
 <translation id="8294431847097064396">Bron</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index 16713af..cfd4283 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenter</translation>
 <translation id="8261506727792406068">Slett</translation>
 <translation id="8261561378965667560">Kinesisk array</translation>
+<translation id="8264024885325823677">Denne innstillingen administreres av administratoren.</translation>
 <translation id="8269755669432358899">Skjul tilbakemeldingspaneler på filer</translation>
 <translation id="8280151743281770066">Armensk fonetisk</translation>
 <translation id="8294431847097064396">Kilde</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
index f6e42db..67bd9a4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">କପି କରିବା କାର୍ଯ୍ୟ ବିଫଳ ହେଲା।<ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">ସାଇଡବାରରେ ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="4348495354623233847">ସୋରାନୀ କୁର୍ଦ୍ଦିଶ୍ ଆରବିକ୍-ଆଧାରିତ କୀବୋର୍ଡ</translation>
+<translation id="434941167647142660">ମୂଳ ଲୋକେସନ</translation>
 <translation id="4363958938297989186">ଫୋନେଟିକ୍ କୀବୋର୍ଡ ସହ ଋଷୀୟ</translation>
 <translation id="4364327530094270451">ମେଲୋନ୍</translation>
 <translation id="4378551569595875038">ସଂଯୋଗ କରୁଛି...</translation>
@@ -853,6 +854,7 @@
 <translation id="8250920743982581267">ଡକୁମେଣ୍ଟ</translation>
 <translation id="8261506727792406068">ବିଲୋପ</translation>
 <translation id="8261561378965667560">ଚାଇନିଜ୍ ଆରେ</translation>
+<translation id="8264024885325823677">ଏହି ସେଟିଂ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ହୁଏ।</translation>
 <translation id="8269755669432358899">ଫାଇଲ୍ ମତାମତ ପ୍ୟାନେଲ୍‍ଗୁଡ଼ିକୁ ସଙ୍କୁଚିତ କରନ୍ତୁ</translation>
 <translation id="8280151743281770066">ଆରମେନିଆନ୍ ଫୋନେଟିକ୍</translation>
 <translation id="8294431847097064396">ଉତ୍ସ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
index fc0b20c..104f911 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">ਦਸਤਾਵੇਜ਼</translation>
 <translation id="8261506727792406068">ਮਿਟਾਓ</translation>
 <translation id="8261561378965667560">ਚੀਨੀ ਐਰੇ</translation>
+<translation id="8264024885325823677">ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਇਸ ਸੈਟਿੰਗ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ।</translation>
 <translation id="8269755669432358899">ਫ਼ਾਈਲਾਂ ਦੇ ਪ੍ਰਤੀਕਰਮ ਪੈਨਲਾਂ ਨੂੰ ਸਮੇਟੋ</translation>
 <translation id="8280151743281770066">ਅਰਮੀਨੀਅਨ ਫੋਨੈਟਿਕ</translation>
 <translation id="8294431847097064396">ਸ੍ਰੋਤ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
index 278dfb7..a383d2a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Kopiowanie nie powiodło się: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Dodaj do paska bocznego</translation>
 <translation id="4348495354623233847">Kurdyjski sorani z klawiaturą arabską</translation>
+<translation id="434941167647142660">Pierwotna lokalizacja</translation>
 <translation id="4363958938297989186">Rosyjski z klawiaturą fonetyczną</translation>
 <translation id="4364327530094270451">Melon</translation>
 <translation id="4378551569595875038">Łączę...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenty</translation>
 <translation id="8261506727792406068">Usuń</translation>
 <translation id="8261561378965667560">Chiński array</translation>
+<translation id="8264024885325823677">Tym ustawieniem zarządza Twój administrator.</translation>
 <translation id="8269755669432358899">Zwiń panele informacji zwrotnej o plikach</translation>
 <translation id="8280151743281770066">ormiańska klawiatura fonetyczna</translation>
 <translation id="8294431847097064396">Źródło</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
index 0666e5c..26d1357 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Documentos</translation>
 <translation id="8261506727792406068">Excluir</translation>
 <translation id="8261561378965667560">Chinês (array)</translation>
+<translation id="8264024885325823677">Essas configurações são gerenciadas pelo administrador.</translation>
 <translation id="8269755669432358899">Recolher painéis de feedback de arquivos</translation>
 <translation id="8280151743281770066">Armênio fonético</translation>
 <translation id="8294431847097064396">Origem</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index ce04a1d..4537faa 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Docs</translation>
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8261561378965667560">Matriz chinesa</translation>
+<translation id="8264024885325823677">Esta definição é gerida pelo seu administrador.</translation>
 <translation id="8269755669432358899">Reduzir painéis de comentários dos ficheiros</translation>
 <translation id="8280151743281770066">Fonético arménio</translation>
 <translation id="8294431847097064396">Origem</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
index 261d375..afcd126 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Documente</translation>
 <translation id="8261506727792406068">Șterge</translation>
 <translation id="8261561378965667560">Chineză Array</translation>
+<translation id="8264024885325823677">Această setare este gestionată de administrator.</translation>
 <translation id="8269755669432358899">Restrânge panourile cu feedback privind fișierele</translation>
 <translation id="8280151743281770066">Armeană fonetică</translation>
 <translation id="8294431847097064396">Sursă</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
index faf0f865..b9937646 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Документы</translation>
 <translation id="8261506727792406068">Удалить</translation>
 <translation id="8261561378965667560">Китайский, структурный ввод</translation>
+<translation id="8264024885325823677">Этим параметром управляет администратор.</translation>
 <translation id="8269755669432358899">Свернуть панель с информацией о файлах</translation>
 <translation id="8280151743281770066">Армянская (фонетическая)</translation>
 <translation id="8294431847097064396">Источник</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
index 2ee6b769..2941739 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">පිටපත් කිරීමේ කාර්යය අසාර්ථකයි. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">පැති තීරුව වෙත එක් කරන්න</translation>
 <translation id="4348495354623233847">අරාබි-පාදක යතුරුපුවරුව සමග සෝරානි කුර්දිෂ්</translation>
+<translation id="434941167647142660">මුල් ස්ථානය</translation>
 <translation id="4363958938297989186">ශබ්දිම යතුරුපුවරුව සමග රුසියානු</translation>
 <translation id="4364327530094270451">කොමඩු</translation>
 <translation id="4378551569595875038">සම්බන්ධ වෙමින්...</translation>
@@ -858,6 +859,7 @@
 <translation id="8250920743982581267">ලේඛන</translation>
 <translation id="8261506727792406068">මකන්න</translation>
 <translation id="8261561378965667560">චීන අරාව</translation>
+<translation id="8264024885325823677">මෙම සැකසුම ඔබේ පරිපාලකයා විසින් කළමනා කෙරේ.</translation>
 <translation id="8269755669432358899">ගොනු ප්‍රතිපෝෂණ පැනල හකුළන්න</translation>
 <translation id="8280151743281770066">ආර්මේනියානු ශබ්දානුකූල</translation>
 <translation id="8294431847097064396">මූලාශ්‍රය</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
index 0789da8..891ca3d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenty</translation>
 <translation id="8261506727792406068">Odstrániť</translation>
 <translation id="8261561378965667560">Čínska klávesnica Array</translation>
+<translation id="8264024885325823677">Toto nastavenie ovláda váš správca.</translation>
 <translation id="8269755669432358899">Zbaliť panely so spätnou väzbou týkajúcou sa súborov</translation>
 <translation id="8280151743281770066">Arménska fonetická klávesnica</translation>
 <translation id="8294431847097064396">Zdroj</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index af07bd03..6d8cea0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenti</translation>
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8261561378965667560">kitajščina (način vnosa array)</translation>
+<translation id="8264024885325823677">To nastavitev upravlja skrbnik.</translation>
 <translation id="8269755669432358899">Strnitev datotek podoken povratnih informacij</translation>
 <translation id="8280151743281770066">armenščina (fonetična)</translation>
 <translation id="8294431847097064396">Vir</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
index 2267c8f..b128c29f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -858,6 +858,7 @@
 <translation id="8250920743982581267">Dokumentet</translation>
 <translation id="8261506727792406068">Fshi</translation>
 <translation id="8261561378965667560">Radhitje kinezisht</translation>
+<translation id="8264024885325823677">Ky cilësim menaxhohet nga administratori yt.</translation>
 <translation id="8269755669432358899">Palos panelet e komenteve të skedarëve</translation>
 <translation id="8280151743281770066">Fonetike armeniane</translation>
 <translation id="8294431847097064396">Burimi</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 1e4ba835..8bb0babe 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Dokumenti</translation>
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8261561378965667560">niz za kineski</translation>
+<translation id="8264024885325823677">Ovim podešavanjem upravlja administrator.</translation>
 <translation id="8269755669432358899">Skupi okna za povratne informacije o datotekama</translation>
 <translation id="8280151743281770066">jermenska fonetska</translation>
 <translation id="8294431847097064396">Izvor</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index bb6b679..9da450a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Документи</translation>
 <translation id="8261506727792406068">Избриши</translation>
 <translation id="8261561378965667560">низ за кинески</translation>
+<translation id="8264024885325823677">Овим подешавањем управља администратор.</translation>
 <translation id="8269755669432358899">Скупи окна за повратне информације о датотекама</translation>
 <translation id="8280151743281770066">јерменска фонетска</translation>
 <translation id="8294431847097064396">Извор</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
index 760fd12..206ac54 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Dokument</translation>
 <translation id="8261506727792406068">Radera</translation>
 <translation id="8261561378965667560">kinesiska (array)</translation>
+<translation id="8264024885325823677">Den här inställningen hanteras av administratören.</translation>
 <translation id="8269755669432358899">Komprimera panel med information om filåtgärder</translation>
 <translation id="8280151743281770066">Armeniska (fonetiskt)</translation>
 <translation id="8294431847097064396">Källa</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
index 179d676..71e54be 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Hati</translation>
 <translation id="8261506727792406068">Futa</translation>
 <translation id="8261561378965667560">Mbinu ya Array ya kuingiza data ya Kichina</translation>
+<translation id="8264024885325823677">Mipangilio hii inadhibitiwa na msimamizi wako.</translation>
 <translation id="8269755669432358899">Kunja vidirisha vya maoni ya faili</translation>
 <translation id="8280151743281770066">Fonetiki ya Kiarmenia</translation>
 <translation id="8294431847097064396">Chanzo</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
index 2a37dae..d84e97c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">ஆவணங்கள்</translation>
 <translation id="8261506727792406068">நீக்கு</translation>
 <translation id="8261561378965667560">சீனம் (அரே)</translation>
+<translation id="8264024885325823677">உங்கள் நிர்வாகி இந்த அமைப்பை நிர்வகிக்கிறார்.</translation>
 <translation id="8269755669432358899">ஃபைல்கள்  காட்டப்படும் பேனல்களைச் சுருக்கும்</translation>
 <translation id="8280151743281770066">ஆர்மேனியன் ஒலிப்புமுறை</translation>
 <translation id="8294431847097064396">மூலம்</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index e11ffad..fcce755 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">డాక్యుమెంట్లు</translation>
 <translation id="8261506727792406068">తొలగించు</translation>
 <translation id="8261561378965667560">చైనీస్ శ్రేణి</translation>
+<translation id="8264024885325823677">ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా నిర్వహించబడుతుంది.</translation>
 <translation id="8269755669432358899">అభిప్రాయ ప్యానెల్‌ల ఫైళ్లు కుదించు</translation>
 <translation id="8280151743281770066">ఆర్మేనియన్ ఫోనెటిక్</translation>
 <translation id="8294431847097064396">సోర్స్</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
index 976c1983..ad3b641a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">เอกสาร</translation>
 <translation id="8261506727792406068">ลบ</translation>
 <translation id="8261561378965667560">จีน (Array)</translation>
+<translation id="8264024885325823677">การตั้งค่านี้จัดการโดยผู้ดูแลระบบ</translation>
 <translation id="8269755669432358899">ยุบแผงความคิดเห็นเกี่ยวกับไฟล์</translation>
 <translation id="8280151743281770066">การออกเสียงภาษาอาร์เมเนีย</translation>
 <translation id="8294431847097064396">แหล่งที่มา</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
index a9b8209..b2ba3e1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Kopyalama işlemi başarısız oldu. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Kenar çubuğuna ekle</translation>
 <translation id="4348495354623233847">Arapça tabanlı klavye ile Sorani Kürtçesi</translation>
+<translation id="434941167647142660">Orijinal konum</translation>
 <translation id="4363958938297989186">Fonetik klavye ile Rusça</translation>
 <translation id="4364327530094270451">Kavun</translation>
 <translation id="4378551569595875038">Bağlanıyor...</translation>
@@ -859,6 +860,7 @@
 <translation id="8250920743982581267">Dokümanlar</translation>
 <translation id="8261506727792406068">Sil</translation>
 <translation id="8261561378965667560">Çince Dizi</translation>
+<translation id="8264024885325823677">Bu ayar, yöneticiniz tarafından yönetilir.</translation>
 <translation id="8269755669432358899">Dosyalar geri bildirim panellerini daralt</translation>
 <translation id="8280151743281770066">Ermenice Fonetik</translation>
 <translation id="8294431847097064396">Kaynak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
index b5105c29..6482817e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Документи</translation>
 <translation id="8261506727792406068">Видалити</translation>
 <translation id="8261561378965667560">Китайська, Array</translation>
+<translation id="8264024885325823677">Цим налаштуванням керує адміністратор.</translation>
 <translation id="8269755669432358899">Згортаються панелі відгуків про файли</translation>
 <translation id="8280151743281770066">Вірменська (фонетична)</translation>
 <translation id="8294431847097064396">Джерело</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
index 24eb33d..7959b8e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">دستاویزات</translation>
 <translation id="8261506727792406068">حذف کریں</translation>
 <translation id="8261561378965667560">‏چینی Array</translation>
+<translation id="8264024885325823677">یہ ترتیب آپ کے منتظم کے زیر انتظام ہے۔</translation>
 <translation id="8269755669432358899">فائلز کے تاثرات کے پینلز کو سکیڑیں</translation>
 <translation id="8280151743281770066">آرمینیائی فونیٹک</translation>
 <translation id="8294431847097064396">ماخذ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
index 2fee7a7..d44d8f365 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Hujjatlar</translation>
 <translation id="8261506727792406068">O‘chirish</translation>
 <translation id="8261561378965667560">Xitoy (tuzilmaviy)</translation>
+<translation id="8264024885325823677">Bu sozlama administrator tomonidan boshqariladi.</translation>
 <translation id="8269755669432358899">Fayllar holat panelini kichraytirish</translation>
 <translation id="8280151743281770066">Arman klaviaturasi (Fonetik)</translation>
 <translation id="8294431847097064396">Manba</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
index c8114d0..8f00bcc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">Tài liệu</translation>
 <translation id="8261506727792406068">Xoá</translation>
 <translation id="8261561378965667560">Tiếng Trung (bộ gõ Array)</translation>
+<translation id="8264024885325823677">Quản trị viên của bạn quản lý tùy chọn cài đặt này.</translation>
 <translation id="8269755669432358899">Thu gọn bảng dữ liệu phản hồi về tệp</translation>
 <translation id="8280151743281770066">Phiên âm tiếng Armenia</translation>
 <translation id="8294431847097064396">Nguồn</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
index e9e3fc0..efe05fd 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -854,6 +854,7 @@
 <translation id="8250920743982581267">文档</translation>
 <translation id="8261506727792406068">删除</translation>
 <translation id="8261561378965667560">中文行列</translation>
+<translation id="8264024885325823677">此设置由您的管理员管理。</translation>
 <translation id="8269755669432358899">收起文件反馈面板</translation>
 <translation id="8280151743281770066">亚美尼亚语(注音)</translation>
 <translation id="8294431847097064396">来源</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
index a95f9cd..1357942 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">文件</translation>
 <translation id="8261506727792406068">刪除</translation>
 <translation id="8261561378965667560">中文 (行列)</translation>
+<translation id="8264024885325823677">此設定由管理員管理。</translation>
 <translation id="8269755669432358899">收合檔案意見面板</translation>
 <translation id="8280151743281770066">亞美尼亞文 (拼音)</translation>
 <translation id="8294431847097064396">來源</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
index 0597321..dc89dfe 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -860,6 +860,7 @@
 <translation id="8250920743982581267">文件</translation>
 <translation id="8261506727792406068">刪除</translation>
 <translation id="8261561378965667560">中文 (行列)</translation>
+<translation id="8264024885325823677">這項設定是由系統管理員管理。</translation>
 <translation id="8269755669432358899">收合檔案意見回饋面板</translation>
 <translation id="8280151743281770066">亞美尼亞文 (拼音)</translation>
 <translation id="8294431847097064396">來源</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
index b1bc733d..94486fd3 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -859,6 +859,7 @@
 <translation id="8250920743982581267">Amadokhumenti</translation>
 <translation id="8261506727792406068">Susa</translation>
 <translation id="8261561378965667560">I-Chinese Array</translation>
+<translation id="8264024885325823677">Lesi silungiselelo siphethwe umlawuli wakho.</translation>
 <translation id="8269755669432358899">Goqa amaphaneli empendulo yamafayela</translation>
 <translation id="8280151743281770066">Ifonethikhi yesi-Armenian</translation>
 <translation id="8294431847097064396">Umthombo</translation>
diff --git a/ui/gfx/x/connection.cc b/ui/gfx/x/connection.cc
index 33ca001..8098f3e 100644
--- a/ui/gfx/x/connection.cc
+++ b/ui/gfx/x/connection.cc
@@ -100,11 +100,12 @@
               ? base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
                     switches::kX11Display)
               : address),
+      connection_(xcb_connect(display_string_.empty() ? nullptr
+                                                      : display_string_.c_str(),
+                              &default_screen_id_),
+                  xcb_disconnect),
       error_handler_(base::BindRepeating(DefaultErrorHandler)),
       io_error_handler_(base::BindOnce(DefaultIOErrorHandler)) {
-  connection_ =
-      xcb_connect(display_string_.empty() ? nullptr : display_string_.c_str(),
-                  &default_screen_id_);
   DCHECK(connection_);
   if (Ready()) {
     auto buf = ReadBuffer(base::MakeRefCounted<UnretainedRefCountedMemory>(
@@ -162,7 +163,6 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   platform_event_source.reset();
-  xcb_disconnect(connection_);
 }
 
 size_t Connection::MaxRequestSizeInBytes() const {
@@ -323,12 +323,12 @@
 
 bool Connection::Ready() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return !xcb_connection_has_error(connection_);
+  return !xcb_connection_has_error(connection_.get());
 }
 
 void Connection::Flush() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  xcb_flush(connection_);
+  xcb_flush(connection_.get());
 }
 
 void Connection::Sync() {
@@ -480,9 +480,9 @@
 
 xcb_connection_t* Connection::XcbConnection() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (io_error_handler_ && xcb_connection_has_error(connection_))
+  if (io_error_handler_ && xcb_connection_has_error(connection_.get()))
     std::move(io_error_handler_).Run();
-  return connection_;
+  return connection_.get();
 }
 
 void Connection::InitRootDepthAndVisual() {
@@ -755,7 +755,7 @@
 }
 
 uint32_t Connection::GenerateIdImpl() {
-  return xcb_generate_id(connection_);
+  return xcb_generate_id(connection_.get());
 }
 
 }  // namespace x11
diff --git a/ui/gfx/x/connection.h b/ui/gfx/x/connection.h
index a21e84a..04cbda49 100644
--- a/ui/gfx/x/connection.h
+++ b/ui/gfx/x/connection.h
@@ -326,7 +326,10 @@
 
   uint32_t GenerateIdImpl();
 
-  raw_ptr<xcb_connection_t, DanglingUntriaged> connection_ = nullptr;
+  std::string display_string_;
+  int default_screen_id_ = 0;
+  std::unique_ptr<xcb_connection_t, void (*)(xcb_connection_t*)> connection_ = {
+      nullptr, nullptr};
   std::unique_ptr<XlibDisplay> xlib_display_;
 
   bool synchronous_ = false;
@@ -334,8 +337,6 @@
 
   uint32_t extended_max_request_length_ = 0;
 
-  std::string display_string_;
-  int default_screen_id_ = 0;
   Setup setup_;
   raw_ptr<Screen> default_screen_ = nullptr;
   raw_ptr<Depth> default_root_depth_ = nullptr;
diff --git a/ui/gfx/x/event.cc b/ui/gfx/x/event.cc
index 3d695d1..cd11b32 100644
--- a/ui/gfx/x/event.cc
+++ b/ui/gfx/x/event.cc
@@ -59,25 +59,28 @@
   ReadEvent(this, connection, &buf);
 }
 
-Event::Event(Event&& event) {
-  memcpy(this, &event, sizeof(Event));
+Event::Event(Event&& event)
+    : send_event_(event.send_event_),
+      sequence_(event.sequence_),
+      type_id_(event.type_id_),
+      event_(std::move(event.event_)),
+      window_(event.window_) {
   memset(&event, 0, sizeof(Event));
 }
 
 Event& Event::operator=(Event&& event) {
-  Dealloc();
-  memcpy(this, &event, sizeof(Event));
+  send_event_ = event.send_event_;
+  sequence_ = event.sequence_;
+  type_id_ = event.type_id_;
+  //`window_` is owned by `event_`. Set it to nullptr before calling
+  //`event.reset()` to avoid holding a dangling ptr.
+  window_ = nullptr;
+  event_.reset();
+  event_ = std::move(event.event_);
+  window_ = event.window_;
   memset(&event, 0, sizeof(Event));
   return *this;
 }
 
-Event::~Event() {
-  Dealloc();
-}
-
-void Event::Dealloc() {
-  if (deleter_)
-    deleter_(event_);
-}
-
+Event::~Event() = default;
 }  // namespace x11
diff --git a/ui/gfx/x/event.h b/ui/gfx/x/event.h
index 66e611e..085e769 100644
--- a/ui/gfx/x/event.h
+++ b/ui/gfx/x/event.h
@@ -31,9 +31,12 @@
     send_event_ = send_event;
     sequence_ = xproto_event.sequence;
     type_id_ = DecayT::type_id;
-    deleter_ = [](void* event) { delete reinterpret_cast<DecayT*>(event); };
     auto* event = new DecayT(std::forward<T>(xproto_event));
-    event_ = event;
+    event_ = {event, [](void* e) {
+                if (e) {
+                  delete reinterpret_cast<DecayT*>(e);
+                }
+              }};
     window_ = event->GetWindow();
   }
 
@@ -74,15 +77,13 @@
       *window_ = window;
   }
 
-  bool Initialized() const { return deleter_; }
+  bool Initialized() const { return !!event_; }
 
  private:
   friend void ReadEvent(Event* event,
                         Connection* connection,
                         ReadBuffer* buffer);
 
-  void Dealloc();
-
   // True if this event was sent from another X client.  False if this event
   // was sent by the X server.
   bool send_event_ = false;
@@ -90,12 +91,11 @@
 
   // XProto event state.
   int type_id_ = 0;
-  void (*deleter_)(void*) = nullptr;
-  raw_ptr<void, DanglingUntriaged> event_ = nullptr;
+  std::unique_ptr<void, void (*)(void*)> event_ = {nullptr, nullptr};
 
   // This member points to a field in |event_|, or may be nullptr if there's no
   // associated window for the event.  It's owned by |event_|, not us.
-  raw_ptr<Window, DanglingUntriaged> window_ = nullptr;
+  raw_ptr<Window> window_ = nullptr;
 };
 
 }  // namespace x11
diff --git a/ui/gfx/x/gen_xproto.py b/ui/gfx/x/gen_xproto.py
index f80b2351..aee63e4 100644
--- a/ui/gfx/x/gen_xproto.py
+++ b/ui/gfx/x/gen_xproto.py
@@ -1506,14 +1506,15 @@
         cond, opcode = self.event_condition(event, typename, proto)
         with Indent(self, 'if (%s) {' % cond, '}'):
             self.write('event->type_id_ = %d;' % event.type_id)
-            with Indent(self, 'event->deleter_ = [](void* event) {', '};'):
-                self.write('delete reinterpret_cast<%s*>(event);' % typename)
+            with Indent(self, 'auto deleter_ = [](void* e) {', '};'):
+                self.write('if(e){delete reinterpret_cast<%s*>(e);}' %
+                           typename)
             self.write('auto* event_ = new %s;' % typename)
             self.write('ReadEvent(event_, buffer);')
             if len(event.opcodes) > 1:
                 self.write('{0} = static_cast<decltype({0})>({1});'.format(
                     'event_->opcode', opcode))
-            self.write('event->event_ = event_;')
+            self.write('event->event_ = {event_, deleter_};')
             self.write('event->window_ = event_->GetWindow();')
             self.write('return;')
         self.write()
diff --git a/ui/gfx/x/generated_protos/read_event.cc b/ui/gfx/x/generated_protos/read_event.cc
index ec344cf9..55f8e41 100644
--- a/ui/gfx/x/generated_protos/read_event.cc
+++ b/ui/gfx/x/generated_protos/read_event.cc
@@ -87,12 +87,14 @@
   if (conn->damage().present() &&
       evtype - conn->damage().first_event() == Damage::NotifyEvent::opcode) {
     event->type_id_ = 1;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Damage::NotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Damage::NotifyEvent*>(e);
+      }
     };
     auto* event_ = new Damage::NotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -100,12 +102,14 @@
   if (conn->dri2().present() && evtype - conn->dri2().first_event() ==
                                     Dri2::BufferSwapCompleteEvent::opcode) {
     event->type_id_ = 2;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Dri2::BufferSwapCompleteEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Dri2::BufferSwapCompleteEvent*>(e);
+      }
     };
     auto* event_ = new Dri2::BufferSwapCompleteEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -113,12 +117,14 @@
   if (conn->dri2().present() && evtype - conn->dri2().first_event() ==
                                     Dri2::InvalidateBuffersEvent::opcode) {
     event->type_id_ = 3;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Dri2::InvalidateBuffersEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Dri2::InvalidateBuffersEvent*>(e);
+      }
     };
     auto* event_ = new Dri2::InvalidateBuffersEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -126,12 +132,14 @@
   if (conn->glx().present() &&
       evtype - conn->glx().first_event() == Glx::PbufferClobberEvent::opcode) {
     event->type_id_ = 4;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Glx::PbufferClobberEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Glx::PbufferClobberEvent*>(e);
+      }
     };
     auto* event_ = new Glx::PbufferClobberEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -139,12 +147,14 @@
   if (conn->glx().present() && evtype - conn->glx().first_event() ==
                                    Glx::BufferSwapCompleteEvent::opcode) {
     event->type_id_ = 5;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Glx::BufferSwapCompleteEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Glx::BufferSwapCompleteEvent*>(e);
+      }
     };
     auto* event_ = new Glx::BufferSwapCompleteEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -152,12 +162,14 @@
   if (conn->present().present() &&
       evtype - conn->present().first_event() == Present::GenericEvent::opcode) {
     event->type_id_ = 6;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Present::GenericEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Present::GenericEvent*>(e);
+      }
     };
     auto* event_ = new Present::GenericEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -166,12 +178,14 @@
       ge->extension == conn->present().major_opcode() &&
       ge->event_type == Present::ConfigureNotifyEvent::opcode) {
     event->type_id_ = 7;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Present::ConfigureNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Present::ConfigureNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Present::ConfigureNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -180,12 +194,14 @@
       ge->extension == conn->present().major_opcode() &&
       ge->event_type == Present::CompleteNotifyEvent::opcode) {
     event->type_id_ = 8;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Present::CompleteNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Present::CompleteNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Present::CompleteNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -194,12 +210,14 @@
       ge->extension == conn->present().major_opcode() &&
       ge->event_type == Present::IdleNotifyEvent::opcode) {
     event->type_id_ = 9;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Present::IdleNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Present::IdleNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Present::IdleNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -208,12 +226,14 @@
       ge->extension == conn->present().major_opcode() &&
       ge->event_type == Present::RedirectNotifyEvent::opcode) {
     event->type_id_ = 10;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Present::RedirectNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Present::RedirectNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Present::RedirectNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -221,12 +241,14 @@
   if (conn->randr().present() && evtype - conn->randr().first_event() ==
                                      RandR::ScreenChangeNotifyEvent::opcode) {
     event->type_id_ = 11;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<RandR::ScreenChangeNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<RandR::ScreenChangeNotifyEvent*>(e);
+      }
     };
     auto* event_ = new RandR::ScreenChangeNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -234,12 +256,14 @@
   if (conn->randr().present() &&
       evtype - conn->randr().first_event() == RandR::NotifyEvent::opcode) {
     event->type_id_ = 12;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<RandR::NotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<RandR::NotifyEvent*>(e);
+      }
     };
     auto* event_ = new RandR::NotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -248,12 +272,14 @@
       evtype - conn->screensaver().first_event() ==
           ScreenSaver::NotifyEvent::opcode) {
     event->type_id_ = 13;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ScreenSaver::NotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ScreenSaver::NotifyEvent*>(e);
+      }
     };
     auto* event_ = new ScreenSaver::NotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -261,12 +287,14 @@
   if (conn->shape().present() &&
       evtype - conn->shape().first_event() == Shape::NotifyEvent::opcode) {
     event->type_id_ = 14;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Shape::NotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Shape::NotifyEvent*>(e);
+      }
     };
     auto* event_ = new Shape::NotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -274,12 +302,14 @@
   if (conn->shm().present() &&
       evtype - conn->shm().first_event() == Shm::CompletionEvent::opcode) {
     event->type_id_ = 15;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Shm::CompletionEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Shm::CompletionEvent*>(e);
+      }
     };
     auto* event_ = new Shm::CompletionEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -287,12 +317,14 @@
   if (conn->sync().present() &&
       evtype - conn->sync().first_event() == Sync::CounterNotifyEvent::opcode) {
     event->type_id_ = 16;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Sync::CounterNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Sync::CounterNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Sync::CounterNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -300,12 +332,14 @@
   if (conn->sync().present() &&
       evtype - conn->sync().first_event() == Sync::AlarmNotifyEvent::opcode) {
     event->type_id_ = 17;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Sync::AlarmNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Sync::AlarmNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Sync::AlarmNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -313,12 +347,14 @@
   if (conn->xfixes().present() && evtype - conn->xfixes().first_event() ==
                                       XFixes::SelectionNotifyEvent::opcode) {
     event->type_id_ = 18;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<XFixes::SelectionNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<XFixes::SelectionNotifyEvent*>(e);
+      }
     };
     auto* event_ = new XFixes::SelectionNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -326,12 +362,14 @@
   if (conn->xfixes().present() && evtype - conn->xfixes().first_event() ==
                                       XFixes::CursorNotifyEvent::opcode) {
     event->type_id_ = 19;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<XFixes::CursorNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<XFixes::CursorNotifyEvent*>(e);
+      }
     };
     auto* event_ = new XFixes::CursorNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -339,12 +377,14 @@
   if (conn->xinput().present() && evtype - conn->xinput().first_event() ==
                                       Input::DeviceValuatorEvent::opcode) {
     event->type_id_ = 20;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceValuatorEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceValuatorEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceValuatorEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -365,14 +405,16 @@
        evtype - conn->xinput().first_event() ==
            Input::LegacyDeviceEvent::ProximityOut)) {
     event->type_id_ = 21;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::LegacyDeviceEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::LegacyDeviceEvent*>(e);
+      }
     };
     auto* event_ = new Input::LegacyDeviceEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(
         evtype - conn->xinput().first_event());
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -381,14 +423,16 @@
       (evtype - conn->xinput().first_event() == Input::DeviceFocusEvent::In ||
        evtype - conn->xinput().first_event() == Input::DeviceFocusEvent::Out)) {
     event->type_id_ = 22;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceFocusEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceFocusEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceFocusEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(
         evtype - conn->xinput().first_event());
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -396,12 +440,14 @@
   if (conn->xinput().present() && evtype - conn->xinput().first_event() ==
                                       Input::DeviceStateNotifyEvent::opcode) {
     event->type_id_ = 23;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceStateNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceStateNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceStateNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -409,12 +455,14 @@
   if (conn->xinput().present() && evtype - conn->xinput().first_event() ==
                                       Input::DeviceMappingNotifyEvent::opcode) {
     event->type_id_ = 24;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceMappingNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceMappingNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceMappingNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -422,12 +470,14 @@
   if (conn->xinput().present() && evtype - conn->xinput().first_event() ==
                                       Input::ChangeDeviceNotifyEvent::opcode) {
     event->type_id_ = 25;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::ChangeDeviceNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::ChangeDeviceNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::ChangeDeviceNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -436,12 +486,14 @@
       evtype - conn->xinput().first_event() ==
           Input::DeviceKeyStateNotifyEvent::opcode) {
     event->type_id_ = 26;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceKeyStateNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceKeyStateNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceKeyStateNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -450,12 +502,14 @@
       evtype - conn->xinput().first_event() ==
           Input::DeviceButtonStateNotifyEvent::opcode) {
     event->type_id_ = 27;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceButtonStateNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceButtonStateNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceButtonStateNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -464,12 +518,14 @@
       evtype - conn->xinput().first_event() ==
           Input::DevicePresenceNotifyEvent::opcode) {
     event->type_id_ = 28;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DevicePresenceNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DevicePresenceNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::DevicePresenceNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -478,12 +534,14 @@
       evtype - conn->xinput().first_event() ==
           Input::DevicePropertyNotifyEvent::opcode) {
     event->type_id_ = 29;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DevicePropertyNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DevicePropertyNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Input::DevicePropertyNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -492,12 +550,14 @@
       ge->extension == conn->xinput().major_opcode() &&
       ge->event_type == Input::DeviceChangedEvent::opcode) {
     event->type_id_ = 30;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceChangedEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceChangedEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceChangedEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -513,13 +573,15 @@
        ge->event_type == Input::DeviceEvent::TouchUpdate ||
        ge->event_type == Input::DeviceEvent::TouchEnd)) {
     event->type_id_ = 31;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::DeviceEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::DeviceEvent*>(e);
+      }
     };
     auto* event_ = new Input::DeviceEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(ge->event_type);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -531,13 +593,15 @@
        ge->event_type == Input::CrossingEvent::FocusIn ||
        ge->event_type == Input::CrossingEvent::FocusOut)) {
     event->type_id_ = 32;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::CrossingEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::CrossingEvent*>(e);
+      }
     };
     auto* event_ = new Input::CrossingEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(ge->event_type);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -546,12 +610,14 @@
       ge->extension == conn->xinput().major_opcode() &&
       ge->event_type == Input::HierarchyEvent::opcode) {
     event->type_id_ = 33;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::HierarchyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::HierarchyEvent*>(e);
+      }
     };
     auto* event_ = new Input::HierarchyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -560,12 +626,14 @@
       ge->extension == conn->xinput().major_opcode() &&
       ge->event_type == Input::PropertyEvent::opcode) {
     event->type_id_ = 34;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::PropertyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::PropertyEvent*>(e);
+      }
     };
     auto* event_ = new Input::PropertyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -581,13 +649,15 @@
        ge->event_type == Input::RawDeviceEvent::RawTouchUpdate ||
        ge->event_type == Input::RawDeviceEvent::RawTouchEnd)) {
     event->type_id_ = 35;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::RawDeviceEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::RawDeviceEvent*>(e);
+      }
     };
     auto* event_ = new Input::RawDeviceEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(ge->event_type);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -596,12 +666,14 @@
       ge->extension == conn->xinput().major_opcode() &&
       ge->event_type == Input::TouchOwnershipEvent::opcode) {
     event->type_id_ = 36;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::TouchOwnershipEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::TouchOwnershipEvent*>(e);
+      }
     };
     auto* event_ = new Input::TouchOwnershipEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -611,13 +683,15 @@
       (ge->event_type == Input::BarrierEvent::Hit ||
        ge->event_type == Input::BarrierEvent::Leave)) {
     event->type_id_ = 37;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::BarrierEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::BarrierEvent*>(e);
+      }
     };
     auto* event_ = new Input::BarrierEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(ge->event_type);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -628,13 +702,15 @@
        ge->event_type == Input::GesturePinchEvent::Update ||
        ge->event_type == Input::GesturePinchEvent::End)) {
     event->type_id_ = 38;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::GesturePinchEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::GesturePinchEvent*>(e);
+      }
     };
     auto* event_ = new Input::GesturePinchEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(ge->event_type);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -645,13 +721,15 @@
        ge->event_type == Input::GestureSwipeEvent::Update ||
        ge->event_type == Input::GestureSwipeEvent::End)) {
     event->type_id_ = 39;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Input::GestureSwipeEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Input::GestureSwipeEvent*>(e);
+      }
     };
     auto* event_ = new Input::GestureSwipeEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(ge->event_type);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -659,12 +737,14 @@
   if (conn->xkb().present() && evtype - conn->xkb().first_event() ==
                                    Xkb::NewKeyboardNotifyEvent::opcode) {
     event->type_id_ = 40;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::NewKeyboardNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::NewKeyboardNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::NewKeyboardNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -672,12 +752,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::MapNotifyEvent::opcode) {
     event->type_id_ = 41;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::MapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::MapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::MapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -685,12 +767,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::StateNotifyEvent::opcode) {
     event->type_id_ = 42;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::StateNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::StateNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::StateNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -698,12 +782,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::ControlsNotifyEvent::opcode) {
     event->type_id_ = 43;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::ControlsNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::ControlsNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::ControlsNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -711,12 +797,14 @@
   if (conn->xkb().present() && evtype - conn->xkb().first_event() ==
                                    Xkb::IndicatorStateNotifyEvent::opcode) {
     event->type_id_ = 44;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::IndicatorStateNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::IndicatorStateNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::IndicatorStateNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -724,12 +812,14 @@
   if (conn->xkb().present() && evtype - conn->xkb().first_event() ==
                                    Xkb::IndicatorMapNotifyEvent::opcode) {
     event->type_id_ = 45;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::IndicatorMapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::IndicatorMapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::IndicatorMapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -737,12 +827,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::NamesNotifyEvent::opcode) {
     event->type_id_ = 46;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::NamesNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::NamesNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::NamesNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -750,12 +842,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::CompatMapNotifyEvent::opcode) {
     event->type_id_ = 47;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::CompatMapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::CompatMapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::CompatMapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -763,12 +857,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::BellNotifyEvent::opcode) {
     event->type_id_ = 48;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::BellNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::BellNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::BellNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -776,12 +872,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::ActionMessageEvent::opcode) {
     event->type_id_ = 49;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::ActionMessageEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::ActionMessageEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::ActionMessageEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -789,12 +887,14 @@
   if (conn->xkb().present() &&
       evtype - conn->xkb().first_event() == Xkb::AccessXNotifyEvent::opcode) {
     event->type_id_ = 50;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::AccessXNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::AccessXNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::AccessXNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -802,12 +902,14 @@
   if (conn->xkb().present() && evtype - conn->xkb().first_event() ==
                                    Xkb::ExtensionDeviceNotifyEvent::opcode) {
     event->type_id_ = 51;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xkb::ExtensionDeviceNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xkb::ExtensionDeviceNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xkb::ExtensionDeviceNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -815,12 +917,14 @@
   if (conn->xprint().present() &&
       evtype - conn->xprint().first_event() == XPrint::NotifyEvent::opcode) {
     event->type_id_ = 52;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<XPrint::NotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<XPrint::NotifyEvent*>(e);
+      }
     };
     auto* event_ = new XPrint::NotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -828,50 +932,58 @@
   if (conn->xprint().present() && evtype - conn->xprint().first_event() ==
                                       XPrint::AttributNotifyEvent::opcode) {
     event->type_id_ = 53;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<XPrint::AttributNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<XPrint::AttributNotifyEvent*>(e);
+      }
     };
     auto* event_ = new XPrint::AttributNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if ((evtype == KeyEvent::Press || evtype == KeyEvent::Release)) {
     event->type_id_ = 54;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<KeyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<KeyEvent*>(e);
+      }
     };
     auto* event_ = new KeyEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(evtype);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if ((evtype == ButtonEvent::Press || evtype == ButtonEvent::Release)) {
     event->type_id_ = 55;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ButtonEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ButtonEvent*>(e);
+      }
     };
     auto* event_ = new ButtonEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(evtype);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == MotionNotifyEvent::opcode) {
     event->type_id_ = 56;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<MotionNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<MotionNotifyEvent*>(e);
+      }
     };
     auto* event_ = new MotionNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -879,303 +991,353 @@
   if ((evtype == CrossingEvent::EnterNotify ||
        evtype == CrossingEvent::LeaveNotify)) {
     event->type_id_ = 57;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<CrossingEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<CrossingEvent*>(e);
+      }
     };
     auto* event_ = new CrossingEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(evtype);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if ((evtype == FocusEvent::In || evtype == FocusEvent::Out)) {
     event->type_id_ = 58;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<FocusEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<FocusEvent*>(e);
+      }
     };
     auto* event_ = new FocusEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(evtype);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == KeymapNotifyEvent::opcode) {
     event->type_id_ = 59;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<KeymapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<KeymapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new KeymapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ExposeEvent::opcode) {
     event->type_id_ = 60;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ExposeEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ExposeEvent*>(e);
+      }
     };
     auto* event_ = new ExposeEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == GraphicsExposureEvent::opcode) {
     event->type_id_ = 61;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<GraphicsExposureEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<GraphicsExposureEvent*>(e);
+      }
     };
     auto* event_ = new GraphicsExposureEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == NoExposureEvent::opcode) {
     event->type_id_ = 62;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<NoExposureEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<NoExposureEvent*>(e);
+      }
     };
     auto* event_ = new NoExposureEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == VisibilityNotifyEvent::opcode) {
     event->type_id_ = 63;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<VisibilityNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<VisibilityNotifyEvent*>(e);
+      }
     };
     auto* event_ = new VisibilityNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == CreateNotifyEvent::opcode) {
     event->type_id_ = 64;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<CreateNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<CreateNotifyEvent*>(e);
+      }
     };
     auto* event_ = new CreateNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == DestroyNotifyEvent::opcode) {
     event->type_id_ = 65;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<DestroyNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<DestroyNotifyEvent*>(e);
+      }
     };
     auto* event_ = new DestroyNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == UnmapNotifyEvent::opcode) {
     event->type_id_ = 66;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<UnmapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<UnmapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new UnmapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == MapNotifyEvent::opcode) {
     event->type_id_ = 67;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<MapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<MapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new MapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == MapRequestEvent::opcode) {
     event->type_id_ = 68;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<MapRequestEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<MapRequestEvent*>(e);
+      }
     };
     auto* event_ = new MapRequestEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ReparentNotifyEvent::opcode) {
     event->type_id_ = 69;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ReparentNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ReparentNotifyEvent*>(e);
+      }
     };
     auto* event_ = new ReparentNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ConfigureNotifyEvent::opcode) {
     event->type_id_ = 70;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ConfigureNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ConfigureNotifyEvent*>(e);
+      }
     };
     auto* event_ = new ConfigureNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ConfigureRequestEvent::opcode) {
     event->type_id_ = 71;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ConfigureRequestEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ConfigureRequestEvent*>(e);
+      }
     };
     auto* event_ = new ConfigureRequestEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == GravityNotifyEvent::opcode) {
     event->type_id_ = 72;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<GravityNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<GravityNotifyEvent*>(e);
+      }
     };
     auto* event_ = new GravityNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ResizeRequestEvent::opcode) {
     event->type_id_ = 73;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ResizeRequestEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ResizeRequestEvent*>(e);
+      }
     };
     auto* event_ = new ResizeRequestEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if ((evtype == CirculateEvent::Notify || evtype == CirculateEvent::Request)) {
     event->type_id_ = 74;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<CirculateEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<CirculateEvent*>(e);
+      }
     };
     auto* event_ = new CirculateEvent;
     ReadEvent(event_, buffer);
     event_->opcode = static_cast<decltype(event_->opcode)>(evtype);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == PropertyNotifyEvent::opcode) {
     event->type_id_ = 75;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<PropertyNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<PropertyNotifyEvent*>(e);
+      }
     };
     auto* event_ = new PropertyNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == SelectionClearEvent::opcode) {
     event->type_id_ = 76;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<SelectionClearEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<SelectionClearEvent*>(e);
+      }
     };
     auto* event_ = new SelectionClearEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == SelectionRequestEvent::opcode) {
     event->type_id_ = 77;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<SelectionRequestEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<SelectionRequestEvent*>(e);
+      }
     };
     auto* event_ = new SelectionRequestEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == SelectionNotifyEvent::opcode) {
     event->type_id_ = 78;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<SelectionNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<SelectionNotifyEvent*>(e);
+      }
     };
     auto* event_ = new SelectionNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ColormapNotifyEvent::opcode) {
     event->type_id_ = 79;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ColormapNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ColormapNotifyEvent*>(e);
+      }
     };
     auto* event_ = new ColormapNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == ClientMessageEvent::opcode) {
     event->type_id_ = 80;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<ClientMessageEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<ClientMessageEvent*>(e);
+      }
     };
     auto* event_ = new ClientMessageEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
 
   if (evtype == MappingNotifyEvent::opcode) {
     event->type_id_ = 81;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<MappingNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<MappingNotifyEvent*>(e);
+      }
     };
     auto* event_ = new MappingNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -1183,12 +1345,14 @@
   if (conn->xv().present() &&
       evtype - conn->xv().first_event() == Xv::VideoNotifyEvent::opcode) {
     event->type_id_ = 83;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xv::VideoNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xv::VideoNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xv::VideoNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
@@ -1196,12 +1360,14 @@
   if (conn->xv().present() &&
       evtype - conn->xv().first_event() == Xv::PortNotifyEvent::opcode) {
     event->type_id_ = 84;
-    event->deleter_ = [](void* event) {
-      delete reinterpret_cast<Xv::PortNotifyEvent*>(event);
+    auto deleter_ = [](void* e) {
+      if (e) {
+        delete reinterpret_cast<Xv::PortNotifyEvent*>(e);
+      }
     };
     auto* event_ = new Xv::PortNotifyEvent;
     ReadEvent(event_, buffer);
-    event->event_ = event_;
+    event->event_ = {event_, deleter_};
     event->window_ = event_->GetWindow();
     return;
   }
diff --git a/ui/ozone/platform/cast/OWNERS b/ui/ozone/platform/cast/OWNERS
index 281daa8..e3a9c035 100644
--- a/ui/ozone/platform/cast/OWNERS
+++ b/ui/ozone/platform/cast/OWNERS
@@ -1,2 +1 @@
 halliwell@chromium.org
-lcwu@chromium.org
diff --git a/weblayer/app/content_main_delegate_impl.cc b/weblayer/app/content_main_delegate_impl.cc
index cfc1316..5b195c1 100644
--- a/weblayer/app/content_main_delegate_impl.cc
+++ b/weblayer/app/content_main_delegate_impl.cc
@@ -187,6 +187,9 @@
     ::features::kBackForwardCache,
     // TODO(crbug.com/1247836): Enable TFLite/Optimization Guide on WebLayer.
     translate::kTFLiteLanguageDetectionEnabled,
+    // TODO(crbug.com/1338402): Add support for WebLayer. Disabling autofill is
+    // not yet supported.
+    blink::features::kAnonymousIframeOriginTrial,
 
 #if BUILDFLAG(IS_ANDROID)
     // TODO(crbug.com/1131016): Support Picture in Picture API on WebLayer.
@@ -221,6 +224,10 @@
   // TODO(crbug.com/1097105): Support Web GPU on WebLayer.
   blink::WebRuntimeFeatures::EnableWebGPU(false);
 
+  // TODO(crbug.com/1338402): Add support for WebLayer. Disabling autofill is
+  // not yet supported.
+  blink::WebRuntimeFeatures::EnableAnonymousIframe(false);
+
 #if BUILDFLAG(IS_ANDROID)
   content::Compositor::Initialize();
 #endif
diff --git a/weblayer/test/stub_autofill_provider.cc b/weblayer/test/stub_autofill_provider.cc
index 05c557c..b4e33aa 100644
--- a/weblayer/test/stub_autofill_provider.cc
+++ b/weblayer/test/stub_autofill_provider.cc
@@ -22,7 +22,7 @@
     const gfx::RectF& bounding_box,
     int32_t query_id,
     bool /*unused_autoselect_first_suggestion*/,
-    autofill::TouchToFillEligible /*unused_touch_to_fill_eligible*/) {
+    autofill::FormElementWasClicked /*unused_form_element_was_clicked*/) {
   on_received_form_data_.Run(form);
 }
 
diff --git a/weblayer/test/stub_autofill_provider.h b/weblayer/test/stub_autofill_provider.h
index 87db2be0..1d11609 100644
--- a/weblayer/test/stub_autofill_provider.h
+++ b/weblayer/test/stub_autofill_provider.h
@@ -35,7 +35,8 @@
       const gfx::RectF& bounding_box,
       int32_t query_id,
       bool /*unused_autoselect_first_suggestion*/,
-      autofill::TouchToFillEligible /*unused_touch_to_fill_eligible*/) override;
+      autofill::FormElementWasClicked /*unused_form_element_was_clicked*/)
+      override;
 
  private:
   base::RepeatingCallback<void(const autofill::FormData&)>