diff --git a/DEPS b/DEPS
index 441b2f4..ead8e77 100644
--- a/DEPS
+++ b/DEPS
@@ -280,11 +280,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '361052740f2e87cd9032df5e19d2626c20940b03',
+  'skia_revision': 'b3a5771e987296e9c0191d2f92f5b76be4063303',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'e103082d1e96b2296fbab3a04a2c21d75594e917',
+  'v8_revision': 'd5908b7835ce2be112082dc6b053227ed3373376',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -372,7 +372,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '2b37d5a78000721d748fd0115ff93a8c25151d76',
+  'devtools_frontend_revision': 'afe4e3d12323531919deb89d9ef25e403fc6ee2a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -396,11 +396,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '234aca793b7c6747e0722cc40f928faf18a03b86',
+  'dawn_revision': 'c30d05355f3bc95e19ad57f9a9145953ada11435',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '5ccc379791baf78d5189898929aea9f34f588b21',
+  'quiche_revision': '55decf709d18c34324e6487c678740fe50b32d18',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ink
   # and whatever else without interference from each other.
@@ -496,7 +496,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling llvm-libc
   # and whatever else without interference from each other.
-  'llvm_libc_revision':    '758bbcaa6aac74bab506d56a2db64cc865c04cae',
+  'llvm_libc_revision':    '78e463d935378e41c2d088e3a1dd659998a8c3ac',
 
   # If you change this, also update the libc++ revision in
   # //buildtools/deps_revisions.gni.
@@ -1304,7 +1304,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '451622249a47bb5cc21f0683d39c32fb9f8681c1',
+    '9845416593e4a1738ba740d873a92ebb9b8e0198',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -1979,7 +1979,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'ba7ed88cc5ffa428a82a0f787dd61031aa5ef4ca',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'bbccc2f6efc1b825de5f2c903c48be685cd0cf22',
 
   'src/third_party/icu4j/cipd': {
       'packages': [
@@ -2488,7 +2488,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'j0CWzYzqsndnaKDzw-cLHbbkO-1-KUttLvurGT_Ve-UC',
+              'version': 'lKhbNcMvJ5dFn56zD1r3KUOhXVK3ybW4iS_Ju6ylTBYC',
           },
       ],
       'condition': 'checkout_android and non_git_source',
@@ -2668,13 +2668,13 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '450cceb587613ac1469c5a131fac15935c99e0e7',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '5b26e0e8957b05b2a7ef76448a46b9901073f125',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '64eb522c87efb458b46d84048c3bb4c3c063a21c',
 
   'src/third_party/webpagereplay':
     Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'),
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'adc536af5aa82c6be09600302b4c553c62a792d7',
+    Var('webrtc_git') + '/src.git' + '@' + '575d32367143909e6fe6991e80170e2d44b5a90d',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -2811,7 +2811,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'kYLoSamOu3VPkAvHqg1tD-0VBcks1IAkIzTRqqnuv9sC',
+        'version': 'f6wXvBbNs4qPbY9jdxzS1Z844wnJXYUeDVEOL8SBjNMC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -2855,7 +2855,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'WFDw9N4rc6aa9TvZGSLCMkMSOfuu-GpxIPbkUCI20OEC',
+        'version': 'LOlYO-N-6fD-0PkUgKrKhxh80N-TG1GhYj3_rMLk3X8C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -4391,7 +4391,7 @@
 
   'src/components/autofill/core/browser/form_parsing/internal_resources': {
       'url': Var('chrome_git') + '/chrome/components/autofill_regex_patterns.git' + '@' +
-        '09fb4c501c63ef2f6fbf0630d39e036dd159a2d4',
+        '9efd7cc2c1a908d3a67865003c25cf09bc876257',
       'condition': 'checkout_src_internal',
   },
 
@@ -4450,7 +4450,7 @@
 
   'src/components/test/data/autofill/heuristics-json/internal': {
       'url': Var('chrome_git') + '/chrome/test/autofill/structured_forms.git' + '@' +
-        '52367ad4206058d2830e62fd10b752d95b3618e5',
+        'fa6ad109121e94573274a300139840cea314fac6',
       'condition': 'checkout_chromium_autofill_test_dependencies',
   },
 
@@ -4480,7 +4480,7 @@
 
   'src/ios_internal':  {
       'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' +
-        '4512bf25caa2e1f5156b0fd40999c8fbe1e8fdeb',
+        '137695c44d2331a7395cd7d47cf83987e78bc3d6',
       'condition': 'checkout_ios and checkout_src_internal',
   },
 
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 1c2d7e89..4d1bdc6 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Това може да доведе до разходи за данни.
 <ph name="DEVICECOUNT" /> устройства са свързани.</translation>
 <translation id="2386292613071805067">Избиране на всичко на страницата</translation>
+<translation id="2389423187722941333">Превключване на Gemini</translation>
 <translation id="2392659840443812875">Няма точки за достъп. Уверете се, че устройството ви е в близост и функцията за Bluetooth е включена.</translation>
 <translation id="2397416548179033562">Показване на менюто на Chrome</translation>
 <translation id="240006516586367791">Контроли за мултимедия</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 4608f7e..cbbf2f60 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">এর ফলে ডেটার চার্জ প্রযোজ্য হতে পারে।
 <ph name="DEVICECOUNT" />টি ডিভাইস কানেক্ট করা আছে।</translation>
 <translation id="2386292613071805067">পৃষ্ঠাতে থাকা সবকিছুই বেছে নিন</translation>
+<translation id="2389423187722941333">Gemini টগল করুন</translation>
 <translation id="2392659840443812875">কোনও হটস্পট উপলভ্য নেই। আপনার ডিভাইস হাতের কাছে রাখুন এবং এটিতে ব্লুটুথ চালু আছে কিনা তা দেখে নিন।</translation>
 <translation id="2397416548179033562">Chrome মেনু দেখান</translation>
 <translation id="240006516586367791">মিডিয়া কন্ট্রোল</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index a895531..66d3802 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Això pot comportar costos de dades.
 Hi ha <ph name="DEVICECOUNT" /> dispositius connectats.</translation>
 <translation id="2386292613071805067">Selecciona tots els elements de la pàgina</translation>
+<translation id="2389423187722941333">Activa o desactiva Gemini</translation>
 <translation id="2392659840443812875">No hi ha cap punt d'accés Wi‐Fi disponible. Assegura't que el dispositiu estigui a prop i que el Bluetooth estigui activat.</translation>
 <translation id="2397416548179033562">Mostra el menú de Chrome</translation>
 <translation id="240006516586367791">Controls multimèdia</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 92155eb..9c426a62 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">To může znamenat náklady na data.
 Je připojen tento počet zařízení: <ph name="DEVICECOUNT" />.</translation>
 <translation id="2386292613071805067">Vybrat vše na stránce</translation>
+<translation id="2389423187722941333">Přepnout Gemini</translation>
 <translation id="2392659840443812875">Žádný dostupný hotspot. Zařízení musí být poblíž a musí být zapnutý Bluetooth.</translation>
 <translation id="2397416548179033562">Zobrazit nabídku Chrome</translation>
 <translation id="240006516586367791">Ovládání médií</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb
index e0e08df..8aaa2e1 100644
--- a/ash/strings/ash_strings_cy.xtb
+++ b/ash/strings/ash_strings_cy.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Gall hyn arwain at gost data.
 Mae <ph name="DEVICECOUNT" /> o ddyfeisiau yn gysylltiedig.</translation>
 <translation id="2386292613071805067">Dewis popeth ar y dudalen</translation>
+<translation id="2389423187722941333">Toglo Gemini</translation>
 <translation id="2392659840443812875">Dim poethfan ar gael. Sicrhewch fod eich dyfais gerllaw a bod Bluetooth wedi'i droi ymlaen.</translation>
 <translation id="2397416548179033562">Dangos dewislen Chrome</translation>
 <translation id="240006516586367791">Rheolaethau cyfryngau</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 717a2c14..f5b420a 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Dette kan medføre datagebyrer.
 <ph name="DEVICECOUNT" /> enheder er forbundet.</translation>
 <translation id="2386292613071805067">Markér alt på siden</translation>
+<translation id="2389423187722941333">Slå Gemini til/fra</translation>
 <translation id="2392659840443812875">Der er intet tilgængeligt hotspot. Sørg for, at din enhed er i nærheden, og at Bluetooth er aktiveret.</translation>
 <translation id="2397416548179033562">Vis Chrome-menuen</translation>
 <translation id="240006516586367791">Mediestyring</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 757d370..5c18f42 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Dadurch können Datennutzungskosten anfallen.
 <ph name="DEVICECOUNT" /> Geräte verbunden.</translation>
 <translation id="2386292613071805067">Alles auf Seite auswählen</translation>
+<translation id="2389423187722941333">Gemini ein-/ausschalten</translation>
 <translation id="2392659840443812875">Kein Hotspot verfügbar. Dein Gerät muss sich in der Nähe befinden und Bluetooth muss aktiviert sein.</translation>
 <translation id="2397416548179033562">Chrome-Menü anzeigen</translation>
 <translation id="240006516586367791">Mediensteuerelemente</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 27db0f88..fee27881 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Ενδέχεται να προκύψουν χρεώσεις δεδομένων.
 <ph name="DEVICECOUNT" /> συνδεδεμένες συσκευές.</translation>
 <translation id="2386292613071805067">Επιλογή όλων στη σελίδα</translation>
+<translation id="2389423187722941333">Εναλλαγή Gemini</translation>
 <translation id="2392659840443812875">Δεν υπάρχει διαθέσιμο σημείο πρόσβασης Wi-Fi. Βεβαιωθείτε ότι η συσκευή σας βρίσκεται σε κοντινή απόσταση και ότι το Bluetooth είναι ενεργοποιημένο.</translation>
 <translation id="2397416548179033562">Εμφάνιση του μενού του Chrome</translation>
 <translation id="240006516586367791">Στοιχεία ελέγχου μέσων</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 1c3ffe6c..283e16c 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">See võib põhjustada andmesidekulusid.
 <ph name="DEVICECOUNT" /> seadet on ühendatud.</translation>
 <translation id="2386292613071805067">Lehel kõige valimine</translation>
+<translation id="2389423187722941333">Lülitage Gemini seadete vahel</translation>
 <translation id="2392659840443812875">Ühtegi kuumkohta pole saadaval. Veenduge, et teie seade oleks läheduses ja Bluetooth oleks sisse lülitatud.</translation>
 <translation id="2397416548179033562">Kuva Chrome'i menüü</translation>
 <translation id="240006516586367791">Meedia juhtnupud</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 94b42fff..517c1c9 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Baliteke datu-konexioari dagozkion kostuak ordaindu behar izatea.
 <ph name="DEVICECOUNT" /> gailu daude konektatuta.</translation>
 <translation id="2386292613071805067">Hautatu orriko eduki guztia</translation>
+<translation id="2389423187722941333">Aktibatu/Desaktibatu Gemini</translation>
 <translation id="2392659840443812875">Ez dago wifi-gunerik erabilgarri. Ziurtatu gailua inguruan dagoela eta Bluetootha aktibatuta daukala.</translation>
 <translation id="2397416548179033562">Erakutsi Chrome-ko menua</translation>
 <translation id="240006516586367791">Multimedia-edukia kontrolatzeko aukerak</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 3185ff1..a23582b 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Tästä voidaan periä datansiirtomaksuja.
 <ph name="DEVICECOUNT" /> laitetta yhdistetty.</translation>
 <translation id="2386292613071805067">Valitse kaikki sisältö sivulta</translation>
+<translation id="2389423187722941333">Laita Gemini päälle tai pois päältä</translation>
 <translation id="2392659840443812875">Ei hotspoteja. Varmista, että laite on lähistöllä ja Bluetooth päällä.</translation>
 <translation id="2397416548179033562">Näytä Chrome-valikko</translation>
 <translation id="240006516586367791">Mediaohjaimet</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 8ce4c37f..ed310b5 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Posibleng gumastos sa data.
 <ph name="DEVICECOUNT" /> (na) device ang nakakonekta.</translation>
 <translation id="2386292613071805067">I-highlight ang lahat sa page</translation>
+<translation id="2389423187722941333">I-toggle ang Gemini</translation>
 <translation id="2392659840443812875">Walang available na hotspot. Tiyaking nasa malapit ang iyong device at naka-on ang Bluetooth.</translation>
 <translation id="2397416548179033562">Ipakita ang menu ng Chrome</translation>
 <translation id="240006516586367791">Mga kontrol ng media</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 65eab28..6e608bb 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">La consommation de données peut entraîner des frais.
 <ph name="DEVICECOUNT" /> appareils connectés.</translation>
 <translation id="2386292613071805067">Sélectionner toute la page</translation>
+<translation id="2389423187722941333">Activer/Désactiver Gemini</translation>
 <translation id="2392659840443812875">Aucun point d'accès disponible. Vérifiez que votre appareil est à proximité et que le Bluetooth est activé.</translation>
 <translation id="2397416548179033562">Afficher le menu Chrome</translation>
 <translation id="240006516586367791">Commandes multimédias</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index c859878e..33d05342 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Тариф ақысы алынуы мүмкін.
 <ph name="DEVICECOUNT" /> құрылғы жалғанды.</translation>
 <translation id="2386292613071805067">Беттегі барлығын таңдау</translation>
+<translation id="2389423187722941333">Gemini-ды өшіріп-қосу</translation>
 <translation id="2392659840443812875">Хотспот табылмады. Телефоныңыз жаныңызда болсын. Bluetooth қосылып тұрғанын тексеріңіз.</translation>
 <translation id="2397416548179033562">Chrome мәзірін көрсету</translation>
 <translation id="240006516586367791">Мультимедианы басқару элементтері</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index b74281a..d74d10a 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Дайындарды өткөрүү үчүн акы алынышы мүмкүн.
 <ph name="DEVICECOUNT" /> түзмөк туташты.</translation>
 <translation id="2386292613071805067">Баракчанын баарын тандоо</translation>
+<translation id="2389423187722941333">Gemini'ды өчүрүү/күйгүзүү</translation>
 <translation id="2392659840443812875">Жеткиликтүү хотспот жок. Түзмөгүңүз жаныңызда экенин жана Bluetooth күйгүзүлгөнүн текшериңиз.</translation>
 <translation id="2397416548179033562">Chrome менюсун көрсөтүү</translation>
 <translation id="240006516586367791">Медианы башкаруу элементтери</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 2f8c3b7..6c8a69b 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Tādējādi var rasties izmaksas par datu lietojumu.
 Pievienoto ierīču skaits: <ph name="DEVICECOUNT" />.</translation>
 <translation id="2386292613071805067">Atlasīt visu saturu lapā</translation>
+<translation id="2389423187722941333">Pārslēgt Gemini</translation>
 <translation id="2392659840443812875">Nav pieejams neviens tīklājs. Jūsu ierīcei ir jāatrodas tuvumā, un tajā ir jābūt ieslēgtam Bluetooth savienojumam.</translation>
 <translation id="2397416548179033562">Rādīt Chrome izvēlni</translation>
 <translation id="240006516586367791">Multivides vadīklas</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index be98ad59..91cc6ef 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Може да ви се наплати за мобилен интернет.
 Поврзани се <ph name="DEVICECOUNT" /> уреди.</translation>
 <translation id="2386292613071805067">Избира сѐ на страницата</translation>
+<translation id="2389423187722941333">Вклучување/Исклучување на Gemini</translation>
 <translation id="2392659840443812875">Не е достапна точка на пристап. Погрижете се телефонот да биде во близина и да има вклучено Bluetooth.</translation>
 <translation id="2397416548179033562">Прикажи мени на Chrome</translation>
 <translation id="240006516586367791">Контроли за аудиовизуелни содржини</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 632c3c56..71e16cd 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">ဒေတာခ ပေးရနိုင်သည်။
 စက် <ph name="DEVICECOUNT" /> ခု ချိတ်ဆက်ထားသည်။</translation>
 <translation id="2386292613071805067">စာမျက်နှာပေါ်ရှိ အရာအားလုံးကို ရွေးရန်</translation>
+<translation id="2389423187722941333">Gemini ဖွင့်ရန်</translation>
 <translation id="2392659840443812875">ရနိုင်သော ဟော့စပေါ့ မရှိပါ။ သင့်စက်က အနီးတွင်ရှိပြီး ဘလူးတုသ်ဖွင့်ထားကြောင်း သေချာပါစေ။</translation>
 <translation id="2397416548179033562">Chrome မီနူးကို ပြရန်</translation>
 <translation id="240006516586367791">မီဒီယာ ထိန်းချုပ်မှုများ</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 3531046f..3f23941 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Dette kan medføre datakostnader.
 <ph name="DEVICECOUNT" /> enheter er tilkoblet.</translation>
 <translation id="2386292613071805067">Merk alt på siden</translation>
+<translation id="2389423187722941333">Slå av/på Gemini</translation>
 <translation id="2392659840443812875">Ingen tilgjengelig wifi-sone. Sørg for at enheten er i nærheten og Bluetooth er slått på.</translation>
 <translation id="2397416548179033562">Vis Chrome-menyen</translation>
 <translation id="240006516586367791">Mediekontroller</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index 90d6f85d..5cf4f4c 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">ଏହା କରିବା ଫଳରେ ଡାଟା ମୂଲ୍ୟ ଲାଗୁ ହୋଇପାରେ।
 <ph name="DEVICECOUNT" /> ଡିଭାଇସକୁ କନେକ୍ଟ କରାଯାଇଛି।</translation>
 <translation id="2386292613071805067">ପୃଷ୍ଠାରେ ଥିବା ସବୁକିଛି ଚୟନ କରନ୍ତୁ</translation>
+<translation id="2389423187722941333">Geminiକୁ ଟୋଗଲ କରନ୍ତୁ</translation>
 <translation id="2392659840443812875">କୌଣସି ହଟସ୍ପଟ ଉପଲବ୍ଧ ନାହିଁ। ଆପଣଙ୍କ ଡିଭାଇସ ଆଖପାଖରେ ଅଛି ଏବଂ ବ୍ଲୁଟୁଥ ଚାଲୁ ଅଛି ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ।</translation>
 <translation id="2397416548179033562">Chrome ମେନୁ ଦେଖାନ୍ତୁ</translation>
 <translation id="240006516586367791">ମିଡିଆ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 1a0a3c33..bb37e01 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Может взиматься плата за передачу данных.
 Подключено несколько устройств (<ph name="DEVICECOUNT" />).</translation>
 <translation id="2386292613071805067">Выделить все содержимое страницы</translation>
+<translation id="2389423187722941333">Включить или отключить Gemini</translation>
 <translation id="2392659840443812875">Точки доступа не найдены. Убедитесь, что устройство находится рядом и Bluetooth включен.</translation>
 <translation id="2397416548179033562">Отображение меню Chrome</translation>
 <translation id="240006516586367791">Управление медиаконтентом</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 8497a1f..3c65d62 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">මෙයට දත්ත පිරිවැයක් දැරීමට සිදු වේ.
 උපාංග <ph name="DEVICECOUNT" />ක් සම්බන්ධ කර ඇත.</translation>
 <translation id="2386292613071805067">පිටුවෙහි ඇති සියල්ල තෝරන්න</translation>
+<translation id="2389423187722941333">Gemini ටොගල් කරන්න</translation>
 <translation id="2392659840443812875">ලබා ගත හැකි හොට්ස්පොට් නැත. ඔබේ උපාංගය අවට ඇති බවත් බ්ලූටූත් ක්‍රියාත්මක කර ඇති බවත් සහතික කර ගන්න.</translation>
 <translation id="2397416548179033562">Chrome මෙනුව පෙන්වන්න</translation>
 <translation id="240006516586367791">මාධ්‍ය පාලන</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 863bb61..b2ece36 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Kjo mund të sjellë kosto për të dhënat.
 <ph name="DEVICECOUNT" /> pajisje të lidhura.</translation>
 <translation id="2386292613071805067">Zgjidh gjithçka në faqe</translation>
+<translation id="2389423187722941333">Aktivizo/çaktivizo Gemini</translation>
 <translation id="2392659840443812875">Nuk ka zona të disponueshme të qasjes për internet. Sigurohu që pajisja të jetë në afërsi dhe Bluetooth-i të jetë i aktivizuar.</translation>
 <translation id="2397416548179033562">Shfaq menynë e Chrome</translation>
 <translation id="240006516586367791">Kontrollet e medias</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index e1fabd308..270998d5 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Detta kan innebära datakostnader.
 <ph name="DEVICECOUNT" /> enheter är anslutna.</translation>
 <translation id="2386292613071805067">Markera allt på sidan</translation>
+<translation id="2389423187722941333">Aktivera/inaktivera Gemini</translation>
 <translation id="2392659840443812875">Ingen tillgänglig surfzon. Se till att enheten är i närheten och att Bluetooth har aktiverats.</translation>
 <translation id="2397416548179033562">Visa Chrome-menyn</translation>
 <translation id="240006516586367791">Mediekontroller</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index d36c5525..390b764 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">இதற்கு டேட்டா கட்டணம் விதிக்கப்படலாம்.
 <ph name="DEVICECOUNT" /> சாதனங்கள் இணைக்கப்பட்டுள்ளன.</translation>
 <translation id="2386292613071805067">பக்கத்தில் உள்ள அனைத்தையும் தேர்ந்தெடுக்கும்</translation>
+<translation id="2389423187722941333">Geminiயை இயக்க/முடக்க</translation>
 <translation id="2392659840443812875">ஹாட்ஸ்பாட் எதுவும் கிடைக்கவில்லை. உங்கள் சாதனம் அருகில் இருப்பதையும் புளூடூத் இயக்கப்பட்டுள்ளதையும் உறுதிசெய்துகொள்ளவும்.</translation>
 <translation id="2397416548179033562">Chrome மெனுவைக் காட்டு</translation>
 <translation id="240006516586367791">மீடியா கட்டுப்பாடுகள்</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 87ab4bb..5f04557 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Bu işlem için veri ücreti ödemeniz gerekebilir.
 <ph name="DEVICECOUNT" /> cihaz bağlı.</translation>
 <translation id="2386292613071805067">Sayfadaki her şeyi seç</translation>
+<translation id="2389423187722941333">Gemini'ı aç/kapat</translation>
 <translation id="2392659840443812875">Kullanılabilir hotspot yok. Cihazınızın yakında ve Bluetooth'un açık olduğundan emin olun.</translation>
 <translation id="2397416548179033562">Chrome menüsünü göster</translation>
 <translation id="240006516586367791">Medya denetimleri</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 44f3cb2..b6f3576 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">За передавання даних може стягуватися плата.
 Підключено пристроїв: <ph name="DEVICECOUNT" />.</translation>
 <translation id="2386292613071805067">Вибрати все на сторінці</translation>
+<translation id="2389423187722941333">Увімкнути або вимкнути Gemini</translation>
 <translation id="2392659840443812875">Немає точок доступу. Переконайтеся, що ваш пристрій поблизу, а Bluetooth увімкнено.</translation>
 <translation id="2397416548179033562">Показати меню Chrome</translation>
 <translation id="240006516586367791">Елементи керування медіа</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 49a1939d..08a06331 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">这可能会产生流量费用。
 已连接 <ph name="DEVICECOUNT" /> 部设备。</translation>
 <translation id="2386292613071805067">选择网页上的全部内容</translation>
+<translation id="2389423187722941333">切换 Gemini</translation>
 <translation id="2392659840443812875">没有可用的热点。确保您的设备就在附近且已开启蓝牙。</translation>
 <translation id="2397416548179033562">显示 Chrome 菜单</translation>
 <translation id="240006516586367791">媒体控件</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 9c85cd8c..42067cd 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -387,6 +387,7 @@
 <translation id="2370971919968699910">Lokhu kungathola izindleko zedatha.
 Kuxhunywe amadivayisi angu-<ph name="DEVICECOUNT" /></translation>
 <translation id="2386292613071805067">Khetha yonke into ekhasini</translation>
+<translation id="2389423187722941333">Guqula IGemini</translation>
 <translation id="2392659840443812875">Ayikho i-hotspot etholakalayo Qiniseka ukuthi idivayisi yakho iseduze futhi i-Bluetooth ivuliwe.</translation>
 <translation id="2397416548179033562">Bonisa imenyu ye-Chrome</translation>
 <translation id="240006516586367791">Izilawuli zemidiya</translation>
diff --git a/base/check_unittest.cc b/base/check_unittest.cc
index ed8d7305..bb23f5d 100644
--- a/base/check_unittest.cc
+++ b/base/check_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <array>
 #include <string>
 #include <string_view>
 #include <tuple>
@@ -257,7 +258,7 @@
 }
 
 TEST(CheckDeathTest, CheckOpPointers) {
-  uint8_t arr[] = {3, 2, 1, 0};
+  auto arr = std::to_array<uint8_t>({3, 2, 1, 0});
   uint8_t* arr_start = &arr[0];
   // Print pointers and not the binary data in `arr`.
 #if BUILDFLAG(IS_WIN)
diff --git a/base/command_line_unittest.cc b/base/command_line_unittest.cc
index 36619e02..afef652 100644
--- a/base/command_line_unittest.cc
+++ b/base/command_line_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/command_line.h"
 
+#include <array>
 #include <memory>
 #include <string>
 #include <string_view>
@@ -563,10 +564,11 @@
       "bbbbbbbbb",
       "c",
   };
-  static constexpr CommandLine::StringViewType kArgs[] = {
-      FILE_PATH_LITERAL("beebop"),
-      FILE_PATH_LITERAL("alouie"),
-  };
+  constexpr static const auto kArgs =
+      std::to_array<CommandLine::StringViewType>({
+          FILE_PATH_LITERAL("beebop"),
+          FILE_PATH_LITERAL("alouie"),
+      });
   CommandLine initial(CommandLine::NO_PROGRAM);
   for (auto a_switch : kSwitches) {
     initial.AppendSwitch(a_switch);
diff --git a/base/containers/adapters_unittest.cc b/base/containers/adapters_unittest.cc
index d0cb9fc5..ca58242 100644
--- a/base/containers/adapters_unittest.cc
+++ b/base/containers/adapters_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/containers/adapters.h"
 
+#include <array>
 #include <ranges>
 #include <utility>
 #include <vector>
@@ -126,7 +127,7 @@
 }
 
 TEST(AdaptersTest, ReversedArray) {
-  int v[3] = {3, 2, 1};
+  std::array<int, 3> v = {3, 2, 1};
   int j = 0;
   for (int& i : base::Reversed(v)) {
     EXPECT_EQ(++j, i);
diff --git a/base/containers/id_map_unittest.cc b/base/containers/id_map_unittest.cc
index 65236bd..1392f4a 100644
--- a/base/containers/id_map_unittest.cc
+++ b/base/containers/id_map_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/containers/id_map.h"
 
 #include <stdint.h>
 
+#include <array>
 #include <functional>
 #include <memory>
 
@@ -144,8 +140,8 @@
   }
 
   // IDMap has no predictable iteration order.
-  int32_t ids_in_iteration_order[kCount];
-  const TestObject* objs_in_iteration_order[kCount];
+  std::array<int32_t, kCount> ids_in_iteration_order;
+  std::array<const TestObject*, kCount> objs_in_iteration_order;
   int counter = 0;
   for (IDMap<TestObject*>::const_iterator iter(&map); !iter.IsAtEnd();
        iter.Advance()) {
@@ -254,8 +250,8 @@
   }
 
   // IDMap has no predictable iteration order.
-  int32_t ids_in_iteration_order[kCount];
-  const TestObject* objs_in_iteration_order[kCount];
+  std::array<int32_t, kCount> ids_in_iteration_order;
+  std::array<const TestObject*, kCount> objs_in_iteration_order;
   int counter = 0;
   for (IDMap<TestObject*>::const_iterator iter(&map); !iter.IsAtEnd();
        iter.Advance()) {
@@ -293,11 +289,11 @@
   const int kCount = 3;
 
   int external_del_count = 0;
-  DestructorCounter* external_obj[kCount];
-  int map_external_ids[kCount];
+  std::array<DestructorCounter*, kCount> external_obj;
+  std::array<int, kCount> map_external_ids;
 
   int owned_del_count = 0;
-  int map_owned_ids[kCount];
+  std::array<int, kCount> map_owned_ids;
 
   IDMap<DestructorCounter*> map_external;
   IDMap<std::unique_ptr<DestructorCounter>> map_owned;
diff --git a/base/debug/proc_maps_linux_unittest.cc b/base/debug/proc_maps_linux_unittest.cc
index ba0658c..326b06c8 100644
--- a/base/debug/proc_maps_linux_unittest.cc
+++ b/base/debug/proc_maps_linux_unittest.cc
@@ -2,17 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/debug/proc_maps_linux.h"
 
 #include <stddef.h>
 #include <stdint.h>
 #include <sys/utsname.h>
 
+#include <array>
+
 #include "base/files/file_path.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
@@ -177,33 +174,34 @@
 }
 
 TEST(ProcMapsTest, Permissions) {
-  static struct {
+  struct TestCases {
     const char* input;
     uint8_t permissions;
-  } kTestCases[] = {
-    {"00400000-0040b000 ---s 00000000 fc:00 794418 /bin/cat\n", 0},
-    {"00400000-0040b000 ---S 00000000 fc:00 794418 /bin/cat\n", 0},
-    {"00400000-0040b000 r--s 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::READ},
-    {"00400000-0040b000 -w-s 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::WRITE},
-    {"00400000-0040b000 --xs 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::EXECUTE},
-    {"00400000-0040b000 rwxs 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::READ | MappedMemoryRegion::WRITE |
-         MappedMemoryRegion::EXECUTE},
-    {"00400000-0040b000 ---p 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::PRIVATE},
-    {"00400000-0040b000 r--p 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::READ | MappedMemoryRegion::PRIVATE},
-    {"00400000-0040b000 -w-p 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::WRITE | MappedMemoryRegion::PRIVATE},
-    {"00400000-0040b000 --xp 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::EXECUTE | MappedMemoryRegion::PRIVATE},
-    {"00400000-0040b000 rwxp 00000000 fc:00 794418 /bin/cat\n",
-     MappedMemoryRegion::READ | MappedMemoryRegion::WRITE |
-         MappedMemoryRegion::EXECUTE | MappedMemoryRegion::PRIVATE},
   };
+  static auto kTestCases = std::to_array<TestCases>({
+      {"00400000-0040b000 ---s 00000000 fc:00 794418 /bin/cat\n", 0},
+      {"00400000-0040b000 ---S 00000000 fc:00 794418 /bin/cat\n", 0},
+      {"00400000-0040b000 r--s 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::READ},
+      {"00400000-0040b000 -w-s 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::WRITE},
+      {"00400000-0040b000 --xs 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::EXECUTE},
+      {"00400000-0040b000 rwxs 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::READ | MappedMemoryRegion::WRITE |
+           MappedMemoryRegion::EXECUTE},
+      {"00400000-0040b000 ---p 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::PRIVATE},
+      {"00400000-0040b000 r--p 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::READ | MappedMemoryRegion::PRIVATE},
+      {"00400000-0040b000 -w-p 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::WRITE | MappedMemoryRegion::PRIVATE},
+      {"00400000-0040b000 --xp 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::EXECUTE | MappedMemoryRegion::PRIVATE},
+      {"00400000-0040b000 rwxp 00000000 fc:00 794418 /bin/cat\n",
+       MappedMemoryRegion::READ | MappedMemoryRegion::WRITE |
+           MappedMemoryRegion::EXECUTE | MappedMemoryRegion::PRIVATE},
+  });
 
   for (size_t i = 0; i < std::size(kTestCases); ++i) {
     SCOPED_TRACE(
@@ -288,19 +286,19 @@
 }
 
 TEST(ProcMapsTest, MissingFields) {
-  static const char* const kTestCases[] = {
-    "00400000\n",                               // Missing end + beyond.
-    "00400000-0040b000\n",                      // Missing perms + beyond.
-    "00400000-0040b000 r-xp\n",                 // Missing offset + beyond.
-    "00400000-0040b000 r-xp 00000000\n",        // Missing device + beyond.
-    "00400000-0040b000 r-xp 00000000 fc:00\n",  // Missing inode + beyond.
-    "00400000-0040b000 00000000 fc:00 794418 /bin/cat\n",  // Missing perms.
-    "00400000-0040b000 r-xp fc:00 794418 /bin/cat\n",      // Missing offset.
-    "00400000-0040b000 r-xp 00000000 fc:00 /bin/cat\n",    // Missing inode.
-    "00400000 r-xp 00000000 fc:00 794418 /bin/cat\n",      // Missing end.
-    "-0040b000 r-xp 00000000 fc:00 794418 /bin/cat\n",     // Missing start.
-    "00400000-0040b000 r-xp 00000000 794418 /bin/cat\n",   // Missing device.
-  };
+  static const auto kTestCases = std::to_array<const char*>({
+      "00400000\n",                               // Missing end + beyond.
+      "00400000-0040b000\n",                      // Missing perms + beyond.
+      "00400000-0040b000 r-xp\n",                 // Missing offset + beyond.
+      "00400000-0040b000 r-xp 00000000\n",        // Missing device + beyond.
+      "00400000-0040b000 r-xp 00000000 fc:00\n",  // Missing inode + beyond.
+      "00400000-0040b000 00000000 fc:00 794418 /bin/cat\n",  // Missing perms.
+      "00400000-0040b000 r-xp fc:00 794418 /bin/cat\n",      // Missing offset.
+      "00400000-0040b000 r-xp 00000000 fc:00 /bin/cat\n",    // Missing inode.
+      "00400000 r-xp 00000000 fc:00 794418 /bin/cat\n",      // Missing end.
+      "-0040b000 r-xp 00000000 fc:00 794418 /bin/cat\n",     // Missing start.
+      "00400000-0040b000 r-xp 00000000 794418 /bin/cat\n",   // Missing device.
+  });
 
   for (size_t i = 0; i < std::size(kTestCases); ++i) {
     SCOPED_TRACE(base::StringPrintf("kTestCases[%zu] = %s", i, kTestCases[i]));
@@ -310,14 +308,14 @@
 }
 
 TEST(ProcMapsTest, InvalidInput) {
-  static const char* const kTestCases[] = {
-    "thisisal-0040b000 rwxp 00000000 fc:00 794418 /bin/cat\n",
-    "0040000d-linvalid rwxp 00000000 fc:00 794418 /bin/cat\n",
-    "00400000-0040b000 inpu 00000000 fc:00 794418 /bin/cat\n",
-    "00400000-0040b000 rwxp tforproc fc:00 794418 /bin/cat\n",
-    "00400000-0040b000 rwxp 00000000 ma:ps 794418 /bin/cat\n",
-    "00400000-0040b000 rwxp 00000000 fc:00 parse! /bin/cat\n",
-  };
+  static const auto kTestCases = std::to_array<const char*>({
+      "thisisal-0040b000 rwxp 00000000 fc:00 794418 /bin/cat\n",
+      "0040000d-linvalid rwxp 00000000 fc:00 794418 /bin/cat\n",
+      "00400000-0040b000 inpu 00000000 fc:00 794418 /bin/cat\n",
+      "00400000-0040b000 rwxp tforproc fc:00 794418 /bin/cat\n",
+      "00400000-0040b000 rwxp 00000000 ma:ps 794418 /bin/cat\n",
+      "00400000-0040b000 rwxp 00000000 fc:00 parse! /bin/cat\n",
+  });
 
   for (size_t i = 0; i < std::size(kTestCases); ++i) {
     SCOPED_TRACE(base::StringPrintf("kTestCases[%zu] = %s", i, kTestCases[i]));
diff --git a/base/feature_list_unittest.cc b/base/feature_list_unittest.cc
index 652911f4..9470cad0 100644
--- a/base/feature_list_unittest.cc
+++ b/base/feature_list_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/feature_list.h"
 
 #include <stddef.h>
 
+#include <array>
 #include <ostream>
 #include <set>
 #include <string>
@@ -76,12 +72,13 @@
 }
 
 TEST_F(FeatureListTest, InitFromCommandLine) {
-  struct {
+  struct TestCases {
     const char* enable_features;
     const char* disable_features;
     bool expected_feature_on_state;
     bool expected_feature_off_state;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       {"", "", true, false},
       {"OffByDefault", "", true, true},
       {"OffByDefault", "OnByDefault", false, true},
@@ -89,7 +86,7 @@
       {"", "OnByDefault,OffByDefault", false, false},
       // In the case an entry is both, disable takes precedence.
       {"OnByDefault", "OnByDefault,OffByDefault", false, false},
-  };
+  });
 
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     const auto& test_case = test_cases[i];
@@ -181,19 +178,20 @@
 }
 
 TEST_F(FeatureListTest, FieldTrialOverrides) {
-  struct {
+  struct TestCases {
     FeatureList::OverrideState trial1_state;
     FeatureList::OverrideState trial2_state;
-  } test_cases[] = {
-      {FeatureList::OVERRIDE_DISABLE_FEATURE,
-       FeatureList::OVERRIDE_DISABLE_FEATURE},
-      {FeatureList::OVERRIDE_DISABLE_FEATURE,
-       FeatureList::OVERRIDE_ENABLE_FEATURE},
-      {FeatureList::OVERRIDE_ENABLE_FEATURE,
-       FeatureList::OVERRIDE_DISABLE_FEATURE},
-      {FeatureList::OVERRIDE_ENABLE_FEATURE,
-       FeatureList::OVERRIDE_ENABLE_FEATURE},
   };
+  auto test_cases = std::to_array<TestCases>({
+      {FeatureList::OVERRIDE_DISABLE_FEATURE,
+       FeatureList::OVERRIDE_DISABLE_FEATURE},
+      {FeatureList::OVERRIDE_DISABLE_FEATURE,
+       FeatureList::OVERRIDE_ENABLE_FEATURE},
+      {FeatureList::OVERRIDE_ENABLE_FEATURE,
+       FeatureList::OVERRIDE_DISABLE_FEATURE},
+      {FeatureList::OVERRIDE_ENABLE_FEATURE,
+       FeatureList::OVERRIDE_ENABLE_FEATURE},
+  });
 
   FieldTrial::ActiveGroup active_group;
   for (size_t i = 0; i < std::size(test_cases); ++i) {
@@ -397,19 +395,20 @@
 }
 
 TEST_F(FeatureListTest, AssociateReportingFieldTrial) {
-  struct {
+  struct TestCases {
     const char* enable_features;
     const char* disable_features;
     bool expected_enable_trial_created;
     bool expected_disable_trial_created;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       // If no enable/disable flags are specified, no trials should be created.
       {"", "", false, false},
       // Enabling the feature should result in the enable trial created.
       {kFeatureOffByDefaultName, "", true, false},
       // Disabling the feature should result in the disable trial created.
       {"", kFeatureOffByDefaultName, false, true},
-  };
+  });
 
   const char kTrialName[] = "ForcingTrial";
   const char kForcedOnGroupName[] = "ForcedOn";
@@ -801,12 +800,13 @@
 }
 
 TEST(FeatureListAccessorTest, InitFromCommandLine) {
-  struct {
+  struct TestCases {
     const char* enable_features;
     const char* disable_features;
     FeatureList::OverrideState expected_feature_on_state;
     FeatureList::OverrideState expected_feature_off_state;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       {"", "", FeatureList::OVERRIDE_USE_DEFAULT,
        FeatureList::OVERRIDE_USE_DEFAULT},
       {"OffByDefault", "", FeatureList::OVERRIDE_USE_DEFAULT,
@@ -821,7 +821,7 @@
       {"OnByDefault", "OnByDefault,OffByDefault",
        FeatureList::OVERRIDE_DISABLE_FEATURE,
        FeatureList::OVERRIDE_DISABLE_FEATURE},
-  };
+  });
 
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     const auto& test_case = test_cases[i];
@@ -848,13 +848,14 @@
 }
 
 TEST(FeatureListAccessorTest, InitFromCommandLineWithFeatureParams) {
-  struct {
+  struct TestCases {
     const std::string enable_features;
     const std::map<std::string, std::string> expected_feature_params;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       {"Feature:x/100/y/test", {{"x", "100"}, {"y", "test"}}},
       {"Feature<Trial:asdf/ghjkl/y/123", {{"asdf", "ghjkl"}, {"y", "123"}}},
-  };
+  });
 
   // Clear global state so that repeated runs of this test don't flake.
   // When https://crrev.com/c/3694674 is submitted, we should be able to remove
diff --git a/base/files/file_path_unittest.cc b/base/files/file_path_unittest.cc
index 9c50ba6..6562e489 100644
--- a/base/files/file_path_unittest.cc
+++ b/base/files/file_path_unittest.cc
@@ -11,6 +11,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <sstream>
 #include <string_view>
 
@@ -76,92 +77,92 @@
 typedef PlatformTest FilePathTest;
 
 TEST_F(FilePathTest, DirName) {
-  const struct UnaryTestData cases[] = {
-    {FPL(""), FPL(".")},
-    {FPL("aa"), FPL(".")},
-    {FPL("/aa/bb"), FPL("/aa")},
-    {FPL("/aa/bb/"), FPL("/aa")},
-    {FPL("/aa/bb//"), FPL("/aa")},
-    {FPL("/aa/bb/ccc"), FPL("/aa/bb")},
-    {FPL("/aa"), FPL("/")},
-    {FPL("/aa/"), FPL("/")},
-    {FPL("/"), FPL("/")},
-    {FPL("//"), FPL("//")},
-    {FPL("///"), FPL("/")},
-    {FPL("aa/"), FPL(".")},
-    {FPL("aa/bb"), FPL("aa")},
-    {FPL("aa/bb/"), FPL("aa")},
-    {FPL("aa/bb//"), FPL("aa")},
-    {FPL("aa//bb//"), FPL("aa")},
-    {FPL("aa//bb/"), FPL("aa")},
-    {FPL("aa//bb"), FPL("aa")},
-    {FPL("//aa/bb"), FPL("//aa")},
-    {FPL("//aa/"), FPL("//")},
-    {FPL("//aa"), FPL("//")},
+  const auto cases = std::to_array<UnaryTestData>({
+      {FPL(""), FPL(".")},
+      {FPL("aa"), FPL(".")},
+      {FPL("/aa/bb"), FPL("/aa")},
+      {FPL("/aa/bb/"), FPL("/aa")},
+      {FPL("/aa/bb//"), FPL("/aa")},
+      {FPL("/aa/bb/ccc"), FPL("/aa/bb")},
+      {FPL("/aa"), FPL("/")},
+      {FPL("/aa/"), FPL("/")},
+      {FPL("/"), FPL("/")},
+      {FPL("//"), FPL("//")},
+      {FPL("///"), FPL("/")},
+      {FPL("aa/"), FPL(".")},
+      {FPL("aa/bb"), FPL("aa")},
+      {FPL("aa/bb/"), FPL("aa")},
+      {FPL("aa/bb//"), FPL("aa")},
+      {FPL("aa//bb//"), FPL("aa")},
+      {FPL("aa//bb/"), FPL("aa")},
+      {FPL("aa//bb"), FPL("aa")},
+      {FPL("//aa/bb"), FPL("//aa")},
+      {FPL("//aa/"), FPL("//")},
+      {FPL("//aa"), FPL("//")},
 #if BUILDFLAG(IS_POSIX)
-    {FPL("///aa/"), FPL("/")},
-    {FPL("///aa"), FPL("/")},
-    {FPL("///"), FPL("/")},
+      {FPL("///aa/"), FPL("/")},
+      {FPL("///aa"), FPL("/")},
+      {FPL("///"), FPL("/")},
 #endif  // BUILDFLAG(IS_POSIX)
-    {FPL("0:"), FPL(".")},
-    {FPL("@:"), FPL(".")},
-    {FPL("[:"), FPL(".")},
-    {FPL("`:"), FPL(".")},
-    {FPL("{:"), FPL(".")},
-    {FPL("\xB3:"), FPL(".")},
-    {FPL("\xC5:"), FPL(".")},
-    {FPL("/aa/../bb/cc"), FPL("/aa/../bb")},
+      {FPL("0:"), FPL(".")},
+      {FPL("@:"), FPL(".")},
+      {FPL("[:"), FPL(".")},
+      {FPL("`:"), FPL(".")},
+      {FPL("{:"), FPL(".")},
+      {FPL("\xB3:"), FPL(".")},
+      {FPL("\xC5:"), FPL(".")},
+      {FPL("/aa/../bb/cc"), FPL("/aa/../bb")},
 #if BUILDFLAG(IS_WIN)
-    {FPL("\x0143:"), FPL(".")},
+      {FPL("\x0143:"), FPL(".")},
 #endif  // BUILDFLAG(IS_WIN)
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    {FPL("c:"), FPL("c:")},
-    {FPL("C:"), FPL("C:")},
-    {FPL("A:"), FPL("A:")},
-    {FPL("Z:"), FPL("Z:")},
-    {FPL("a:"), FPL("a:")},
-    {FPL("z:"), FPL("z:")},
-    {FPL("c:aa"), FPL("c:")},
-    {FPL("c:/"), FPL("c:/")},
-    {FPL("c://"), FPL("c://")},
-    {FPL("c:///"), FPL("c:/")},
-    {FPL("c:/aa"), FPL("c:/")},
-    {FPL("c:/aa/"), FPL("c:/")},
-    {FPL("c:/aa/bb"), FPL("c:/aa")},
-    {FPL("c:aa/bb"), FPL("c:aa")},
+      {FPL("c:"), FPL("c:")},
+      {FPL("C:"), FPL("C:")},
+      {FPL("A:"), FPL("A:")},
+      {FPL("Z:"), FPL("Z:")},
+      {FPL("a:"), FPL("a:")},
+      {FPL("z:"), FPL("z:")},
+      {FPL("c:aa"), FPL("c:")},
+      {FPL("c:/"), FPL("c:/")},
+      {FPL("c://"), FPL("c://")},
+      {FPL("c:///"), FPL("c:/")},
+      {FPL("c:/aa"), FPL("c:/")},
+      {FPL("c:/aa/"), FPL("c:/")},
+      {FPL("c:/aa/bb"), FPL("c:/aa")},
+      {FPL("c:aa/bb"), FPL("c:aa")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    {FPL("\\aa\\bb"), FPL("\\aa")},
-    {FPL("\\aa\\bb\\"), FPL("\\aa")},
-    {FPL("\\aa\\bb\\\\"), FPL("\\aa")},
-    {FPL("\\aa\\bb\\ccc"), FPL("\\aa\\bb")},
-    {FPL("\\aa"), FPL("\\")},
-    {FPL("\\aa\\"), FPL("\\")},
-    {FPL("\\"), FPL("\\")},
-    {FPL("\\\\"), FPL("\\\\")},
-    {FPL("\\\\\\"), FPL("\\")},
-    {FPL("aa\\"), FPL(".")},
-    {FPL("aa\\bb"), FPL("aa")},
-    {FPL("aa\\bb\\"), FPL("aa")},
-    {FPL("aa\\bb\\\\"), FPL("aa")},
-    {FPL("aa\\\\bb\\\\"), FPL("aa")},
-    {FPL("aa\\\\bb\\"), FPL("aa")},
-    {FPL("aa\\\\bb"), FPL("aa")},
-    {FPL("\\\\aa\\bb"), FPL("\\\\aa")},
-    {FPL("\\\\aa\\"), FPL("\\\\")},
-    {FPL("\\\\aa"), FPL("\\\\")},
-    {FPL("aa\\..\\bb\\c"), FPL("aa\\..\\bb")},
+      {FPL("\\aa\\bb"), FPL("\\aa")},
+      {FPL("\\aa\\bb\\"), FPL("\\aa")},
+      {FPL("\\aa\\bb\\\\"), FPL("\\aa")},
+      {FPL("\\aa\\bb\\ccc"), FPL("\\aa\\bb")},
+      {FPL("\\aa"), FPL("\\")},
+      {FPL("\\aa\\"), FPL("\\")},
+      {FPL("\\"), FPL("\\")},
+      {FPL("\\\\"), FPL("\\\\")},
+      {FPL("\\\\\\"), FPL("\\")},
+      {FPL("aa\\"), FPL(".")},
+      {FPL("aa\\bb"), FPL("aa")},
+      {FPL("aa\\bb\\"), FPL("aa")},
+      {FPL("aa\\bb\\\\"), FPL("aa")},
+      {FPL("aa\\\\bb\\\\"), FPL("aa")},
+      {FPL("aa\\\\bb\\"), FPL("aa")},
+      {FPL("aa\\\\bb"), FPL("aa")},
+      {FPL("\\\\aa\\bb"), FPL("\\\\aa")},
+      {FPL("\\\\aa\\"), FPL("\\\\")},
+      {FPL("\\\\aa"), FPL("\\\\")},
+      {FPL("aa\\..\\bb\\c"), FPL("aa\\..\\bb")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    {FPL("c:\\"), FPL("c:\\")},
-    {FPL("c:\\\\"), FPL("c:\\\\")},
-    {FPL("c:\\\\\\"), FPL("c:\\")},
-    {FPL("c:\\aa"), FPL("c:\\")},
-    {FPL("c:\\aa\\"), FPL("c:\\")},
-    {FPL("c:\\aa\\bb"), FPL("c:\\aa")},
-    {FPL("c:aa\\bb"), FPL("c:aa")},
+      {FPL("c:\\"), FPL("c:\\")},
+      {FPL("c:\\\\"), FPL("c:\\\\")},
+      {FPL("c:\\\\\\"), FPL("c:\\")},
+      {FPL("c:\\aa"), FPL("c:\\")},
+      {FPL("c:\\aa\\"), FPL("c:\\")},
+      {FPL("c:\\aa\\bb"), FPL("c:\\aa")},
+      {FPL("c:aa\\bb"), FPL("c:aa")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath input(cases[i].input);
@@ -172,83 +173,83 @@
 }
 
 TEST_F(FilePathTest, BaseName) {
-  const struct UnaryTestData cases[] = {
-    {FPL(""), FPL("")},
-    {FPL("aa"), FPL("aa")},
-    {FPL("/aa/bb"), FPL("bb")},
-    {FPL("/aa/bb/"), FPL("bb")},
-    {FPL("/aa/bb//"), FPL("bb")},
-    {FPL("/aa/bb/ccc"), FPL("ccc")},
-    {FPL("/aa"), FPL("aa")},
-    {FPL("/"), FPL("/")},
-    {FPL("//"), FPL("//")},
-    {FPL("///"), FPL("/")},
-    {FPL("aa/"), FPL("aa")},
-    {FPL("aa/bb"), FPL("bb")},
-    {FPL("aa/bb/"), FPL("bb")},
-    {FPL("aa/bb//"), FPL("bb")},
-    {FPL("aa//bb//"), FPL("bb")},
-    {FPL("aa//bb/"), FPL("bb")},
-    {FPL("aa//bb"), FPL("bb")},
-    {FPL("//aa/bb"), FPL("bb")},
-    {FPL("//aa/"), FPL("aa")},
-    {FPL("//aa"), FPL("aa")},
-    {FPL("0:"), FPL("0:")},
-    {FPL("@:"), FPL("@:")},
-    {FPL("[:"), FPL("[:")},
-    {FPL("`:"), FPL("`:")},
-    {FPL("{:"), FPL("{:")},
-    {FPL("\xB3:"), FPL("\xB3:")},
-    {FPL("\xC5:"), FPL("\xC5:")},
+  const auto cases = std::to_array<UnaryTestData>({
+      {FPL(""), FPL("")},
+      {FPL("aa"), FPL("aa")},
+      {FPL("/aa/bb"), FPL("bb")},
+      {FPL("/aa/bb/"), FPL("bb")},
+      {FPL("/aa/bb//"), FPL("bb")},
+      {FPL("/aa/bb/ccc"), FPL("ccc")},
+      {FPL("/aa"), FPL("aa")},
+      {FPL("/"), FPL("/")},
+      {FPL("//"), FPL("//")},
+      {FPL("///"), FPL("/")},
+      {FPL("aa/"), FPL("aa")},
+      {FPL("aa/bb"), FPL("bb")},
+      {FPL("aa/bb/"), FPL("bb")},
+      {FPL("aa/bb//"), FPL("bb")},
+      {FPL("aa//bb//"), FPL("bb")},
+      {FPL("aa//bb/"), FPL("bb")},
+      {FPL("aa//bb"), FPL("bb")},
+      {FPL("//aa/bb"), FPL("bb")},
+      {FPL("//aa/"), FPL("aa")},
+      {FPL("//aa"), FPL("aa")},
+      {FPL("0:"), FPL("0:")},
+      {FPL("@:"), FPL("@:")},
+      {FPL("[:"), FPL("[:")},
+      {FPL("`:"), FPL("`:")},
+      {FPL("{:"), FPL("{:")},
+      {FPL("\xB3:"), FPL("\xB3:")},
+      {FPL("\xC5:"), FPL("\xC5:")},
 #if BUILDFLAG(IS_WIN)
-    {FPL("\x0143:"), FPL("\x0143:")},
+      {FPL("\x0143:"), FPL("\x0143:")},
 #endif  // BUILDFLAG(IS_WIN)
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    {FPL("c:"), FPL("")},
-    {FPL("C:"), FPL("")},
-    {FPL("A:"), FPL("")},
-    {FPL("Z:"), FPL("")},
-    {FPL("a:"), FPL("")},
-    {FPL("z:"), FPL("")},
-    {FPL("c:aa"), FPL("aa")},
-    {FPL("c:/"), FPL("/")},
-    {FPL("c://"), FPL("//")},
-    {FPL("c:///"), FPL("/")},
-    {FPL("c:/aa"), FPL("aa")},
-    {FPL("c:/aa/"), FPL("aa")},
-    {FPL("c:/aa/bb"), FPL("bb")},
-    {FPL("c:aa/bb"), FPL("bb")},
+      {FPL("c:"), FPL("")},
+      {FPL("C:"), FPL("")},
+      {FPL("A:"), FPL("")},
+      {FPL("Z:"), FPL("")},
+      {FPL("a:"), FPL("")},
+      {FPL("z:"), FPL("")},
+      {FPL("c:aa"), FPL("aa")},
+      {FPL("c:/"), FPL("/")},
+      {FPL("c://"), FPL("//")},
+      {FPL("c:///"), FPL("/")},
+      {FPL("c:/aa"), FPL("aa")},
+      {FPL("c:/aa/"), FPL("aa")},
+      {FPL("c:/aa/bb"), FPL("bb")},
+      {FPL("c:aa/bb"), FPL("bb")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    {FPL("\\aa\\bb"), FPL("bb")},
-    {FPL("\\aa\\bb\\"), FPL("bb")},
-    {FPL("\\aa\\bb\\\\"), FPL("bb")},
-    {FPL("\\aa\\bb\\ccc"), FPL("ccc")},
-    {FPL("\\aa"), FPL("aa")},
-    {FPL("\\"), FPL("\\")},
-    {FPL("\\\\"), FPL("\\\\")},
-    {FPL("\\\\\\"), FPL("\\")},
-    {FPL("aa\\"), FPL("aa")},
-    {FPL("aa\\bb"), FPL("bb")},
-    {FPL("aa\\bb\\"), FPL("bb")},
-    {FPL("aa\\bb\\\\"), FPL("bb")},
-    {FPL("aa\\\\bb\\\\"), FPL("bb")},
-    {FPL("aa\\\\bb\\"), FPL("bb")},
-    {FPL("aa\\\\bb"), FPL("bb")},
-    {FPL("\\\\aa\\bb"), FPL("bb")},
-    {FPL("\\\\aa\\"), FPL("aa")},
-    {FPL("\\\\aa"), FPL("aa")},
+      {FPL("\\aa\\bb"), FPL("bb")},
+      {FPL("\\aa\\bb\\"), FPL("bb")},
+      {FPL("\\aa\\bb\\\\"), FPL("bb")},
+      {FPL("\\aa\\bb\\ccc"), FPL("ccc")},
+      {FPL("\\aa"), FPL("aa")},
+      {FPL("\\"), FPL("\\")},
+      {FPL("\\\\"), FPL("\\\\")},
+      {FPL("\\\\\\"), FPL("\\")},
+      {FPL("aa\\"), FPL("aa")},
+      {FPL("aa\\bb"), FPL("bb")},
+      {FPL("aa\\bb\\"), FPL("bb")},
+      {FPL("aa\\bb\\\\"), FPL("bb")},
+      {FPL("aa\\\\bb\\\\"), FPL("bb")},
+      {FPL("aa\\\\bb\\"), FPL("bb")},
+      {FPL("aa\\\\bb"), FPL("bb")},
+      {FPL("\\\\aa\\bb"), FPL("bb")},
+      {FPL("\\\\aa\\"), FPL("aa")},
+      {FPL("\\\\aa"), FPL("aa")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    {FPL("c:\\"), FPL("\\")},
-    {FPL("c:\\\\"), FPL("\\\\")},
-    {FPL("c:\\\\\\"), FPL("\\")},
-    {FPL("c:\\aa"), FPL("aa")},
-    {FPL("c:\\aa\\"), FPL("aa")},
-    {FPL("c:\\aa\\bb"), FPL("bb")},
-    {FPL("c:aa\\bb"), FPL("bb")},
+      {FPL("c:\\"), FPL("\\")},
+      {FPL("c:\\\\"), FPL("\\\\")},
+      {FPL("c:\\\\\\"), FPL("\\")},
+      {FPL("c:\\aa"), FPL("aa")},
+      {FPL("c:\\aa\\"), FPL("aa")},
+      {FPL("c:\\aa\\bb"), FPL("bb")},
+      {FPL("c:aa\\bb"), FPL("bb")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath input(cases[i].input);
@@ -259,74 +260,74 @@
 }
 
 TEST_F(FilePathTest, Append) {
-  const struct BinaryTestData cases[] = {
-    { { FPL(""),           FPL("cc") }, FPL("cc") },
-    { { FPL("."),          FPL("ff") }, FPL("ff") },
-    { { FPL("."),          FPL("") },   FPL(".") },
-    { { FPL("/"),          FPL("cc") }, FPL("/cc") },
-    { { FPL("/aa"),        FPL("") },   FPL("/aa") },
-    { { FPL("/aa/"),       FPL("") },   FPL("/aa") },
-    { { FPL("//aa"),       FPL("") },   FPL("//aa") },
-    { { FPL("//aa/"),      FPL("") },   FPL("//aa") },
-    { { FPL("//"),         FPL("aa") }, FPL("//aa") },
+  const auto cases = std::to_array<BinaryTestData>({
+      {{FPL(""), FPL("cc")}, FPL("cc")},
+      {{FPL("."), FPL("ff")}, FPL("ff")},
+      {{FPL("."), FPL("")}, FPL(".")},
+      {{FPL("/"), FPL("cc")}, FPL("/cc")},
+      {{FPL("/aa"), FPL("")}, FPL("/aa")},
+      {{FPL("/aa/"), FPL("")}, FPL("/aa")},
+      {{FPL("//aa"), FPL("")}, FPL("//aa")},
+      {{FPL("//aa/"), FPL("")}, FPL("//aa")},
+      {{FPL("//"), FPL("aa")}, FPL("//aa")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:"),         FPL("a") },  FPL("c:a") },
-    { { FPL("c:"),         FPL("") },   FPL("c:") },
-    { { FPL("c:/"),        FPL("a") },  FPL("c:/a") },
-    { { FPL("c://"),       FPL("a") },  FPL("c://a") },
-    { { FPL("c:///"),      FPL("a") },  FPL("c:/a") },
+      {{FPL("c:"), FPL("a")}, FPL("c:a")},
+      {{FPL("c:"), FPL("")}, FPL("c:")},
+      {{FPL("c:/"), FPL("a")}, FPL("c:/a")},
+      {{FPL("c://"), FPL("a")}, FPL("c://a")},
+      {{FPL("c:///"), FPL("a")}, FPL("c:/a")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    // Append introduces the default separator character, so these test cases
-    // need to be defined with different expected results on platforms that use
-    // different default separator characters.
-    { { FPL("\\"),         FPL("cc") }, FPL("\\cc") },
-    { { FPL("\\aa"),       FPL("") },   FPL("\\aa") },
-    { { FPL("\\aa\\"),     FPL("") },   FPL("\\aa") },
-    { { FPL("\\\\aa"),     FPL("") },   FPL("\\\\aa") },
-    { { FPL("\\\\aa\\"),   FPL("") },   FPL("\\\\aa") },
-    { { FPL("\\\\"),       FPL("aa") }, FPL("\\\\aa") },
-    { { FPL("/aa/bb"),     FPL("cc") }, FPL("/aa/bb\\cc") },
-    { { FPL("/aa/bb/"),    FPL("cc") }, FPL("/aa/bb\\cc") },
-    { { FPL("aa/bb/"),     FPL("cc") }, FPL("aa/bb\\cc") },
-    { { FPL("aa/bb"),      FPL("cc") }, FPL("aa/bb\\cc") },
-    { { FPL("a/b"),        FPL("c") },  FPL("a/b\\c") },
-    { { FPL("a/b/"),       FPL("c") },  FPL("a/b\\c") },
-    { { FPL("//aa"),       FPL("bb") }, FPL("//aa\\bb") },
-    { { FPL("//aa/"),      FPL("bb") }, FPL("//aa\\bb") },
-    { { FPL("\\aa\\bb"),   FPL("cc") }, FPL("\\aa\\bb\\cc") },
-    { { FPL("\\aa\\bb\\"), FPL("cc") }, FPL("\\aa\\bb\\cc") },
-    { { FPL("aa\\bb\\"),   FPL("cc") }, FPL("aa\\bb\\cc") },
-    { { FPL("aa\\bb"),     FPL("cc") }, FPL("aa\\bb\\cc") },
-    { { FPL("a\\b"),       FPL("c") },  FPL("a\\b\\c") },
-    { { FPL("a\\b\\"),     FPL("c") },  FPL("a\\b\\c") },
-    { { FPL("\\\\aa"),     FPL("bb") }, FPL("\\\\aa\\bb") },
-    { { FPL("\\\\aa\\"),   FPL("bb") }, FPL("\\\\aa\\bb") },
+      // Append introduces the default separator character, so these test cases
+      // need to be defined with different expected results on platforms that
+      // use different default separator characters.
+      {{FPL("\\"), FPL("cc")}, FPL("\\cc")},
+      {{FPL("\\aa"), FPL("")}, FPL("\\aa")},
+      {{FPL("\\aa\\"), FPL("")}, FPL("\\aa")},
+      {{FPL("\\\\aa"), FPL("")}, FPL("\\\\aa")},
+      {{FPL("\\\\aa\\"), FPL("")}, FPL("\\\\aa")},
+      {{FPL("\\\\"), FPL("aa")}, FPL("\\\\aa")},
+      {{FPL("/aa/bb"), FPL("cc")}, FPL("/aa/bb\\cc")},
+      {{FPL("/aa/bb/"), FPL("cc")}, FPL("/aa/bb\\cc")},
+      {{FPL("aa/bb/"), FPL("cc")}, FPL("aa/bb\\cc")},
+      {{FPL("aa/bb"), FPL("cc")}, FPL("aa/bb\\cc")},
+      {{FPL("a/b"), FPL("c")}, FPL("a/b\\c")},
+      {{FPL("a/b/"), FPL("c")}, FPL("a/b\\c")},
+      {{FPL("//aa"), FPL("bb")}, FPL("//aa\\bb")},
+      {{FPL("//aa/"), FPL("bb")}, FPL("//aa\\bb")},
+      {{FPL("\\aa\\bb"), FPL("cc")}, FPL("\\aa\\bb\\cc")},
+      {{FPL("\\aa\\bb\\"), FPL("cc")}, FPL("\\aa\\bb\\cc")},
+      {{FPL("aa\\bb\\"), FPL("cc")}, FPL("aa\\bb\\cc")},
+      {{FPL("aa\\bb"), FPL("cc")}, FPL("aa\\bb\\cc")},
+      {{FPL("a\\b"), FPL("c")}, FPL("a\\b\\c")},
+      {{FPL("a\\b\\"), FPL("c")}, FPL("a\\b\\c")},
+      {{FPL("\\\\aa"), FPL("bb")}, FPL("\\\\aa\\bb")},
+      {{FPL("\\\\aa\\"), FPL("bb")}, FPL("\\\\aa\\bb")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:\\"),       FPL("a") },  FPL("c:\\a") },
-    { { FPL("c:\\\\"),     FPL("a") },  FPL("c:\\\\a") },
-    { { FPL("c:\\\\\\"),   FPL("a") },  FPL("c:\\a") },
-    { { FPL("c:\\"),       FPL("") },   FPL("c:\\") },
-    { { FPL("c:\\a"),      FPL("b") },  FPL("c:\\a\\b") },
-    { { FPL("c:\\a\\"),    FPL("b") },  FPL("c:\\a\\b") },
+      {{FPL("c:\\"), FPL("a")}, FPL("c:\\a")},
+      {{FPL("c:\\\\"), FPL("a")}, FPL("c:\\\\a")},
+      {{FPL("c:\\\\\\"), FPL("a")}, FPL("c:\\a")},
+      {{FPL("c:\\"), FPL("")}, FPL("c:\\")},
+      {{FPL("c:\\a"), FPL("b")}, FPL("c:\\a\\b")},
+      {{FPL("c:\\a\\"), FPL("b")}, FPL("c:\\a\\b")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #else  // FILE_PATH_USES_WIN_SEPARATORS
-    { { FPL("/aa/bb"),     FPL("cc") }, FPL("/aa/bb/cc") },
-    { { FPL("/aa/bb/"),    FPL("cc") }, FPL("/aa/bb/cc") },
-    { { FPL("aa/bb/"),     FPL("cc") }, FPL("aa/bb/cc") },
-    { { FPL("aa/bb"),      FPL("cc") }, FPL("aa/bb/cc") },
-    { { FPL("a/b"),        FPL("c") },  FPL("a/b/c") },
-    { { FPL("a/b/"),       FPL("c") },  FPL("a/b/c") },
-    { { FPL("//aa"),       FPL("bb") }, FPL("//aa/bb") },
-    { { FPL("//aa/"),      FPL("bb") }, FPL("//aa/bb") },
+      {{FPL("/aa/bb"), FPL("cc")}, FPL("/aa/bb/cc")},
+      {{FPL("/aa/bb/"), FPL("cc")}, FPL("/aa/bb/cc")},
+      {{FPL("aa/bb/"), FPL("cc")}, FPL("aa/bb/cc")},
+      {{FPL("aa/bb"), FPL("cc")}, FPL("aa/bb/cc")},
+      {{FPL("a/b"), FPL("c")}, FPL("a/b/c")},
+      {{FPL("a/b/"), FPL("c")}, FPL("a/b/c")},
+      {{FPL("//aa"), FPL("bb")}, FPL("//aa/bb")},
+      {{FPL("//aa/"), FPL("bb")}, FPL("//aa/bb")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:/"),        FPL("a") },  FPL("c:/a") },
-    { { FPL("c:/"),        FPL("") },   FPL("c:/") },
-    { { FPL("c:/a"),       FPL("b") },  FPL("c:/a/b") },
-    { { FPL("c:/a/"),      FPL("b") },  FPL("c:/a/b") },
+      {{FPL("c:/"), FPL("a")}, FPL("c:/a")},
+      {{FPL("c:/"), FPL("")}, FPL("c:/")},
+      {{FPL("c:/a"), FPL("b")}, FPL("c:/a/b")},
+      {{FPL("c:/a/"), FPL("b")}, FPL("c:/a/b")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath root(cases[i].inputs[0]);
@@ -352,60 +353,60 @@
 }
 
 TEST_F(FilePathTest, StripTrailingSeparators) {
-  const struct UnaryTestData cases[] = {
-    { FPL(""),              FPL("") },
-    { FPL("/"),             FPL("/") },
-    { FPL("//"),            FPL("//") },
-    { FPL("///"),           FPL("/") },
-    { FPL("////"),          FPL("/") },
-    { FPL("a/"),            FPL("a") },
-    { FPL("a//"),           FPL("a") },
-    { FPL("a///"),          FPL("a") },
-    { FPL("a////"),         FPL("a") },
-    { FPL("/a"),            FPL("/a") },
-    { FPL("/a/"),           FPL("/a") },
-    { FPL("/a//"),          FPL("/a") },
-    { FPL("/a///"),         FPL("/a") },
-    { FPL("/a////"),        FPL("/a") },
+  const auto cases = std::to_array<UnaryTestData>({
+      {FPL(""), FPL("")},
+      {FPL("/"), FPL("/")},
+      {FPL("//"), FPL("//")},
+      {FPL("///"), FPL("/")},
+      {FPL("////"), FPL("/")},
+      {FPL("a/"), FPL("a")},
+      {FPL("a//"), FPL("a")},
+      {FPL("a///"), FPL("a")},
+      {FPL("a////"), FPL("a")},
+      {FPL("/a"), FPL("/a")},
+      {FPL("/a/"), FPL("/a")},
+      {FPL("/a//"), FPL("/a")},
+      {FPL("/a///"), FPL("/a")},
+      {FPL("/a////"), FPL("/a")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { FPL("c:"),            FPL("c:") },
-    { FPL("c:/"),           FPL("c:/") },
-    { FPL("c://"),          FPL("c://") },
-    { FPL("c:///"),         FPL("c:/") },
-    { FPL("c:////"),        FPL("c:/") },
-    { FPL("c:/a"),          FPL("c:/a") },
-    { FPL("c:/a/"),         FPL("c:/a") },
-    { FPL("c:/a//"),        FPL("c:/a") },
-    { FPL("c:/a///"),       FPL("c:/a") },
-    { FPL("c:/a////"),      FPL("c:/a") },
+      {FPL("c:"), FPL("c:")},
+      {FPL("c:/"), FPL("c:/")},
+      {FPL("c://"), FPL("c://")},
+      {FPL("c:///"), FPL("c:/")},
+      {FPL("c:////"), FPL("c:/")},
+      {FPL("c:/a"), FPL("c:/a")},
+      {FPL("c:/a/"), FPL("c:/a")},
+      {FPL("c:/a//"), FPL("c:/a")},
+      {FPL("c:/a///"), FPL("c:/a")},
+      {FPL("c:/a////"), FPL("c:/a")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { FPL("\\"),            FPL("\\") },
-    { FPL("\\\\"),          FPL("\\\\") },
-    { FPL("\\\\\\"),        FPL("\\") },
-    { FPL("\\\\\\\\"),      FPL("\\") },
-    { FPL("a\\"),           FPL("a") },
-    { FPL("a\\\\"),         FPL("a") },
-    { FPL("a\\\\\\"),       FPL("a") },
-    { FPL("a\\\\\\\\"),     FPL("a") },
-    { FPL("\\a"),           FPL("\\a") },
-    { FPL("\\a\\"),         FPL("\\a") },
-    { FPL("\\a\\\\"),       FPL("\\a") },
-    { FPL("\\a\\\\\\"),     FPL("\\a") },
-    { FPL("\\a\\\\\\\\"),   FPL("\\a") },
+      {FPL("\\"), FPL("\\")},
+      {FPL("\\\\"), FPL("\\\\")},
+      {FPL("\\\\\\"), FPL("\\")},
+      {FPL("\\\\\\\\"), FPL("\\")},
+      {FPL("a\\"), FPL("a")},
+      {FPL("a\\\\"), FPL("a")},
+      {FPL("a\\\\\\"), FPL("a")},
+      {FPL("a\\\\\\\\"), FPL("a")},
+      {FPL("\\a"), FPL("\\a")},
+      {FPL("\\a\\"), FPL("\\a")},
+      {FPL("\\a\\\\"), FPL("\\a")},
+      {FPL("\\a\\\\\\"), FPL("\\a")},
+      {FPL("\\a\\\\\\\\"), FPL("\\a")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { FPL("c:\\"),          FPL("c:\\") },
-    { FPL("c:\\\\"),        FPL("c:\\\\") },
-    { FPL("c:\\\\\\"),      FPL("c:\\") },
-    { FPL("c:\\\\\\\\"),    FPL("c:\\") },
-    { FPL("c:\\a"),         FPL("c:\\a") },
-    { FPL("c:\\a\\"),       FPL("c:\\a") },
-    { FPL("c:\\a\\\\"),     FPL("c:\\a") },
-    { FPL("c:\\a\\\\\\"),   FPL("c:\\a") },
-    { FPL("c:\\a\\\\\\\\"), FPL("c:\\a") },
+      {FPL("c:\\"), FPL("c:\\")},
+      {FPL("c:\\\\"), FPL("c:\\\\")},
+      {FPL("c:\\\\\\"), FPL("c:\\")},
+      {FPL("c:\\\\\\\\"), FPL("c:\\")},
+      {FPL("c:\\a"), FPL("c:\\a")},
+      {FPL("c:\\a\\"), FPL("c:\\a")},
+      {FPL("c:\\a\\\\"), FPL("c:\\a")},
+      {FPL("c:\\a\\\\\\"), FPL("c:\\a")},
+      {FPL("c:\\a\\\\\\\\"), FPL("c:\\a")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath input(cases[i].input);
@@ -416,31 +417,23 @@
 }
 
 TEST_F(FilePathTest, IsAbsoluteOrNetwork) {
-  const struct {
+  struct Cases {
     FilePath::StringPieceType input;
     bool expected_is_absolute;
     bool expected_is_network;
-  } cases[] = {
-    { FPL(""),       false, false },
-    { FPL("a"),      false, false },
-    { FPL("c:"),     false, false },
-    { FPL("c:a"),    false, false },
-    { FPL("a/b"),    false, false },
-    { FPL("//"),     true,  true },
-    { FPL("//a"),    true,  true },
-    { FPL("c:a/b"),  false, false },
-    { FPL("?:/a"),   false, false },
+  };
+  const auto cases = std::to_array<Cases>({
+      {FPL(""), false, false},       {FPL("a"), false, false},
+      {FPL("c:"), false, false},     {FPL("c:a"), false, false},
+      {FPL("a/b"), false, false},    {FPL("//"), true, true},
+      {FPL("//a"), true, true},      {FPL("c:a/b"), false, false},
+      {FPL("?:/a"), false, false},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { FPL("/"),      false, false },
-    { FPL("/a"),     false, false },
-    { FPL("/."),     false, false },
-    { FPL("/.."),    false, false },
-    { FPL("c:/"),    true,  false },
-    { FPL("c:/a"),   true,  false },
-    { FPL("c:/."),   true,  false },
-    { FPL("c:/.."),  true,  false },
-    { FPL("C:/a"),   true,  false },
-    { FPL("d:/a"),   true,  false },
+      {FPL("/"), false, false},      {FPL("/a"), false, false},
+      {FPL("/."), false, false},     {FPL("/.."), false, false},
+      {FPL("c:/"), true, false},     {FPL("c:/a"), true, false},
+      {FPL("c:/."), true, false},    {FPL("c:/.."), true, false},
+      {FPL("C:/a"), true, false},    {FPL("d:/a"), true, false},
 #else  // FILE_PATH_USES_DRIVE_LETTERS
     { FPL("/"),      true,  false },
     { FPL("/a"),     true,  false },
@@ -449,35 +442,24 @@
     { FPL("c:/"),    false, false },
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { FPL("a\\b"),   false, false },
-    { FPL("\\\\"),   true,  true },
-    { FPL("\\\\a"),  true,  true },
-    { FPL("a\\b"),   false, false },
-    { FPL("\\\\"),   true,  true },
-    { FPL("//a"),    true,  true },
-    { FPL("c:a\\b"), false, false },
-    { FPL("?:\\a"),  false, false },
+      {FPL("a\\b"), false, false},   {FPL("\\\\"), true, true},
+      {FPL("\\\\a"), true, true},    {FPL("a\\b"), false, false},
+      {FPL("\\\\"), true, true},     {FPL("//a"), true, true},
+      {FPL("c:a\\b"), false, false}, {FPL("?:\\a"), false, false},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { FPL("\\"),     false, false },
-    { FPL("\\a"),    false, false },
-    { FPL("\\."),    false, false },
-    { FPL("\\.."),   false, false },
-    { FPL("c:\\"),   true,  false },
-    { FPL("c:\\"),   true,  false },
-    { FPL("c:\\a"),  true,  false },
-    { FPL("c:\\."),  true,  false },
-    { FPL("c:\\.."), true,  false },
-    { FPL("C:\\a"),  true,  false },
-    { FPL("d:\\a"),  true,  false },
+      {FPL("\\"), false, false},     {FPL("\\a"), false, false},
+      {FPL("\\."), false, false},    {FPL("\\.."), false, false},
+      {FPL("c:\\"), true, false},    {FPL("c:\\"), true, false},
+      {FPL("c:\\a"), true, false},   {FPL("c:\\."), true, false},
+      {FPL("c:\\.."), true, false},  {FPL("C:\\a"), true, false},
+      {FPL("d:\\a"), true, false},
 #else  // FILE_PATH_USES_DRIVE_LETTERS
-    { FPL("\\"),     true,  false },
-    { FPL("\\a"),    true,  false },
-    { FPL("\\."),    true,  false },
-    { FPL("\\.."),   true,  false },
-    { FPL("c:\\"),   false, false },
+      {FPL("\\"), true, false},      {FPL("\\a"), true, false},
+      {FPL("\\."), true, false},     {FPL("\\.."), true, false},
+      {FPL("c:\\"), false, false},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath input(cases[i].input);
@@ -491,45 +473,45 @@
 }
 
 TEST_F(FilePathTest, PathComponentsTest) {
-  const struct UnaryTestData cases[] = {
-    { FPL("//foo/bar/baz/"),          FPL("|//|foo|bar|baz")},
-    { FPL("///"),                     FPL("|/")},
+  const auto cases = std::to_array<UnaryTestData>({
+      {FPL("//foo/bar/baz/"), FPL("|//|foo|bar|baz")},
+      {FPL("///"), FPL("|/")},
 #if BUILDFLAG(IS_POSIX)
-    {FPL("///foo//bar/baz"),          FPL("|/|foo|bar|baz")},
+      {FPL("///foo//bar/baz"), FPL("|/|foo|bar|baz")},
 #endif  // BUILDFLAG(IS_POSIX)
-    { FPL("/foo//bar//baz/"),         FPL("|/|foo|bar|baz")},
-    { FPL("/foo/bar/baz/"),           FPL("|/|foo|bar|baz")},
-    { FPL("/foo/bar/baz//"),          FPL("|/|foo|bar|baz")},
-    { FPL("/foo/bar/baz///"),         FPL("|/|foo|bar|baz")},
-    { FPL("/foo/bar/baz"),            FPL("|/|foo|bar|baz")},
-    { FPL("/foo/bar.bot/baz.txt"),    FPL("|/|foo|bar.bot|baz.txt")},
-    { FPL("//foo//bar/baz"),          FPL("|//|foo|bar|baz")},
-    { FPL("/"),                       FPL("|/")},
-    { FPL("foo"),                     FPL("|foo")},
-    { FPL(""),                        FPL("")},
+      {FPL("/foo//bar//baz/"), FPL("|/|foo|bar|baz")},
+      {FPL("/foo/bar/baz/"), FPL("|/|foo|bar|baz")},
+      {FPL("/foo/bar/baz//"), FPL("|/|foo|bar|baz")},
+      {FPL("/foo/bar/baz///"), FPL("|/|foo|bar|baz")},
+      {FPL("/foo/bar/baz"), FPL("|/|foo|bar|baz")},
+      {FPL("/foo/bar.bot/baz.txt"), FPL("|/|foo|bar.bot|baz.txt")},
+      {FPL("//foo//bar/baz"), FPL("|//|foo|bar|baz")},
+      {FPL("/"), FPL("|/")},
+      {FPL("foo"), FPL("|foo")},
+      {FPL(""), FPL("")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { FPL("e:/foo"),                  FPL("|e:|/|foo")},
-    { FPL("e:/"),                     FPL("|e:|/")},
-    { FPL("e:"),                      FPL("|e:")},
+      {FPL("e:/foo"), FPL("|e:|/|foo")},
+      {FPL("e:/"), FPL("|e:|/")},
+      {FPL("e:"), FPL("|e:")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { FPL("../foo"),                  FPL("|..|foo")},
-    { FPL("./foo"),                   FPL("|foo")},
-    { FPL("../foo/bar/"),             FPL("|..|foo|bar") },
-    { FPL("\\\\foo\\bar\\baz\\"),     FPL("|\\\\|foo|bar|baz")},
-    { FPL("\\\\\\"),                  FPL("|\\")},
-    { FPL("\\foo\\\\bar\\\\baz\\"),   FPL("|\\|foo|bar|baz")},
-    { FPL("\\foo\\bar\\baz\\"),       FPL("|\\|foo|bar|baz")},
-    { FPL("\\foo\\bar\\baz\\\\"),     FPL("|\\|foo|bar|baz")},
-    { FPL("\\foo\\bar\\baz\\\\\\"),   FPL("|\\|foo|bar|baz")},
-    { FPL("\\foo\\bar\\baz"),         FPL("|\\|foo|bar|baz")},
-    { FPL("\\foo\\bar/baz\\\\\\"),    FPL("|\\|foo|bar|baz")},
-    { FPL("/foo\\bar\\baz"),          FPL("|/|foo|bar|baz")},
-    { FPL("\\foo\\bar.bot\\baz.txt"), FPL("|\\|foo|bar.bot|baz.txt")},
-    { FPL("\\\\foo\\\\bar\\baz"),     FPL("|\\\\|foo|bar|baz")},
-    { FPL("\\"),                      FPL("|\\")},
+      {FPL("../foo"), FPL("|..|foo")},
+      {FPL("./foo"), FPL("|foo")},
+      {FPL("../foo/bar/"), FPL("|..|foo|bar")},
+      {FPL("\\\\foo\\bar\\baz\\"), FPL("|\\\\|foo|bar|baz")},
+      {FPL("\\\\\\"), FPL("|\\")},
+      {FPL("\\foo\\\\bar\\\\baz\\"), FPL("|\\|foo|bar|baz")},
+      {FPL("\\foo\\bar\\baz\\"), FPL("|\\|foo|bar|baz")},
+      {FPL("\\foo\\bar\\baz\\\\"), FPL("|\\|foo|bar|baz")},
+      {FPL("\\foo\\bar\\baz\\\\\\"), FPL("|\\|foo|bar|baz")},
+      {FPL("\\foo\\bar\\baz"), FPL("|\\|foo|bar|baz")},
+      {FPL("\\foo\\bar/baz\\\\\\"), FPL("|\\|foo|bar|baz")},
+      {FPL("/foo\\bar\\baz"), FPL("|/|foo|bar|baz")},
+      {FPL("\\foo\\bar.bot\\baz.txt"), FPL("|\\|foo|bar.bot|baz.txt")},
+      {FPL("\\\\foo\\\\bar\\baz"), FPL("|\\\\|foo|bar|baz")},
+      {FPL("\\"), FPL("|\\")},
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath input(cases[i].input);
@@ -546,48 +528,48 @@
 }
 
 TEST_F(FilePathTest, IsParentTest) {
-  const struct BinaryBooleanTestData cases[] = {
-    { { FPL("/"),             FPL("/foo/bar/baz") },      true},
-    { { FPL("/foo"),          FPL("/foo/bar/baz") },      true},
-    { { FPL("/foo/bar"),      FPL("/foo/bar/baz") },      true},
-    { { FPL("/foo/bar/"),     FPL("/foo/bar/baz") },      true},
-    { { FPL("//foo/bar/"),    FPL("//foo/bar/baz") },     true},
-    { { FPL("/foo/bar"),      FPL("/foo2/bar/baz") },     false},
-    { { FPL("/foo/bar.txt"),  FPL("/foo/bar/baz") },      false},
-    { { FPL("/foo/bar"),      FPL("/foo/bar2/baz") },     false},
-    { { FPL("/foo/bar"),      FPL("/foo/bar") },          false},
-    { { FPL("/foo/bar/baz"),  FPL("/foo/bar") },          false},
-    { { FPL("foo"),           FPL("foo/bar/baz") },       true},
-    { { FPL("foo/bar"),       FPL("foo/bar/baz") },       true},
-    { { FPL("foo/bar"),       FPL("foo2/bar/baz") },      false},
-    { { FPL("foo/bar"),       FPL("foo/bar2/baz") },      false},
-    { { FPL(""),              FPL("foo") },               false},
+  const auto cases = std::to_array<BinaryBooleanTestData>({
+      {{FPL("/"), FPL("/foo/bar/baz")}, true},
+      {{FPL("/foo"), FPL("/foo/bar/baz")}, true},
+      {{FPL("/foo/bar"), FPL("/foo/bar/baz")}, true},
+      {{FPL("/foo/bar/"), FPL("/foo/bar/baz")}, true},
+      {{FPL("//foo/bar/"), FPL("//foo/bar/baz")}, true},
+      {{FPL("/foo/bar"), FPL("/foo2/bar/baz")}, false},
+      {{FPL("/foo/bar.txt"), FPL("/foo/bar/baz")}, false},
+      {{FPL("/foo/bar"), FPL("/foo/bar2/baz")}, false},
+      {{FPL("/foo/bar"), FPL("/foo/bar")}, false},
+      {{FPL("/foo/bar/baz"), FPL("/foo/bar")}, false},
+      {{FPL("foo"), FPL("foo/bar/baz")}, true},
+      {{FPL("foo/bar"), FPL("foo/bar/baz")}, true},
+      {{FPL("foo/bar"), FPL("foo2/bar/baz")}, false},
+      {{FPL("foo/bar"), FPL("foo/bar2/baz")}, false},
+      {{FPL(""), FPL("foo")}, false},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:/foo/bar"),    FPL("c:/foo/bar/baz") },    true},
-    { { FPL("E:/foo/bar"),    FPL("e:/foo/bar/baz") },    true},
-    { { FPL("f:/foo/bar"),    FPL("F:/foo/bar/baz") },    true},
-    { { FPL("E:/Foo/bar"),    FPL("e:/foo/bar/baz") },    false},
-    { { FPL("f:/foo/bar"),    FPL("F:/foo/Bar/baz") },    false},
-    { { FPL("c:/"),           FPL("c:/foo/bar/baz") },    true},
-    { { FPL("c:"),            FPL("c:/foo/bar/baz") },    true},
-    { { FPL("c:/foo/bar"),    FPL("d:/foo/bar/baz") },    false},
-    { { FPL("c:/foo/bar"),    FPL("D:/foo/bar/baz") },    false},
-    { { FPL("C:/foo/bar"),    FPL("d:/foo/bar/baz") },    false},
-    { { FPL("c:/foo/bar"),    FPL("c:/foo2/bar/baz") },   false},
-    { { FPL("e:/foo/bar"),    FPL("E:/foo2/bar/baz") },   false},
-    { { FPL("F:/foo/bar"),    FPL("f:/foo2/bar/baz") },   false},
-    { { FPL("c:/foo/bar"),    FPL("c:/foo/bar2/baz") },   false},
+      {{FPL("c:/foo/bar"), FPL("c:/foo/bar/baz")}, true},
+      {{FPL("E:/foo/bar"), FPL("e:/foo/bar/baz")}, true},
+      {{FPL("f:/foo/bar"), FPL("F:/foo/bar/baz")}, true},
+      {{FPL("E:/Foo/bar"), FPL("e:/foo/bar/baz")}, false},
+      {{FPL("f:/foo/bar"), FPL("F:/foo/Bar/baz")}, false},
+      {{FPL("c:/"), FPL("c:/foo/bar/baz")}, true},
+      {{FPL("c:"), FPL("c:/foo/bar/baz")}, true},
+      {{FPL("c:/foo/bar"), FPL("d:/foo/bar/baz")}, false},
+      {{FPL("c:/foo/bar"), FPL("D:/foo/bar/baz")}, false},
+      {{FPL("C:/foo/bar"), FPL("d:/foo/bar/baz")}, false},
+      {{FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz")}, false},
+      {{FPL("e:/foo/bar"), FPL("E:/foo2/bar/baz")}, false},
+      {{FPL("F:/foo/bar"), FPL("f:/foo2/bar/baz")}, false},
+      {{FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz")}, false},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("\\foo\\bar"),    FPL("\\foo\\bar\\baz") },   true},
-    { { FPL("\\foo/bar"),     FPL("\\foo\\bar\\baz") },   true},
-    { { FPL("\\foo/bar"),     FPL("\\foo/bar/baz") },     true},
-    { { FPL("\\"),            FPL("\\foo\\bar\\baz") },   true},
-    { { FPL(""),              FPL("\\foo\\bar\\baz") },   false},
-    { { FPL("\\foo\\bar"),    FPL("\\foo2\\bar\\baz") },  false},
-    { { FPL("\\foo\\bar"),    FPL("\\foo\\bar2\\baz") },  false},
+      {{FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz")}, true},
+      {{FPL("\\foo/bar"), FPL("\\foo\\bar\\baz")}, true},
+      {{FPL("\\foo/bar"), FPL("\\foo/bar/baz")}, true},
+      {{FPL("\\"), FPL("\\foo\\bar\\baz")}, true},
+      {{FPL(""), FPL("\\foo\\bar\\baz")}, false},
+      {{FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz")}, false},
+      {{FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz")}, false},
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath parent(cases[i].inputs[0]);
@@ -600,74 +582,74 @@
 }
 
 TEST_F(FilePathTest, AppendRelativePathTest) {
-  const struct BinaryTestData cases[] = {
+  const auto cases = std::to_array<BinaryTestData>({
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("/"),             FPL("/foo/bar/baz") },      FPL("foo\\bar\\baz")},
+      {{FPL("/"), FPL("/foo/bar/baz")}, FPL("foo\\bar\\baz")},
 #else  // FILE_PATH_USES_WIN_SEPARATORS
-    { { FPL("/"),             FPL("/foo/bar/baz") },      FPL("foo/bar/baz")},
+      {{FPL("/"), FPL("/foo/bar/baz")}, FPL("foo/bar/baz")},
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-    { { FPL("/foo/bar"),      FPL("/foo/bar/baz") },      FPL("baz")},
-    { { FPL("/foo/bar/"),     FPL("/foo/bar/baz") },      FPL("baz")},
-    { { FPL("//foo/bar/"),    FPL("//foo/bar/baz") },     FPL("baz")},
-    { { FPL("/foo/bar"),      FPL("/foo2/bar/baz") },     FPL("")},
-    { { FPL("/foo/bar.txt"),  FPL("/foo/bar/baz") },      FPL("")},
-    { { FPL("/foo/bar"),      FPL("/foo/bar2/baz") },     FPL("")},
-    { { FPL("/foo/bar"),      FPL("/foo/bar") },          FPL("")},
-    { { FPL("/foo/bar/baz"),  FPL("/foo/bar") },          FPL("")},
-    { { FPL("foo/bar"),       FPL("foo/bar/baz") },       FPL("baz")},
-    { { FPL("foo/bar"),       FPL("foo2/bar/baz") },      FPL("")},
-    { { FPL("foo/bar"),       FPL("foo/bar2/baz") },      FPL("")},
-    { { FPL(""),              FPL("foo") },               FPL("")},
+      {{FPL("/foo/bar"), FPL("/foo/bar/baz")}, FPL("baz")},
+      {{FPL("/foo/bar/"), FPL("/foo/bar/baz")}, FPL("baz")},
+      {{FPL("//foo/bar/"), FPL("//foo/bar/baz")}, FPL("baz")},
+      {{FPL("/foo/bar"), FPL("/foo2/bar/baz")}, FPL("")},
+      {{FPL("/foo/bar.txt"), FPL("/foo/bar/baz")}, FPL("")},
+      {{FPL("/foo/bar"), FPL("/foo/bar2/baz")}, FPL("")},
+      {{FPL("/foo/bar"), FPL("/foo/bar")}, FPL("")},
+      {{FPL("/foo/bar/baz"), FPL("/foo/bar")}, FPL("")},
+      {{FPL("foo/bar"), FPL("foo/bar/baz")}, FPL("baz")},
+      {{FPL("foo/bar"), FPL("foo2/bar/baz")}, FPL("")},
+      {{FPL("foo/bar"), FPL("foo/bar2/baz")}, FPL("")},
+      {{FPL(""), FPL("foo")}, FPL("")},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:/foo/bar"),    FPL("c:/foo/bar/baz") },    FPL("baz")},
-    { { FPL("E:/foo/bar"),    FPL("e:/foo/bar/baz") },    FPL("baz")},
-    { { FPL("f:/foo/bar"),    FPL("F:/foo/bar/baz") },    FPL("baz")},
-    { { FPL("E:/Foo/bar"),    FPL("e:/foo/bar/baz") },    FPL("")},
-    { { FPL("f:/foo/bar"),    FPL("F:/foo/Bar/baz") },    FPL("")},
+      {{FPL("c:/foo/bar"), FPL("c:/foo/bar/baz")}, FPL("baz")},
+      {{FPL("E:/foo/bar"), FPL("e:/foo/bar/baz")}, FPL("baz")},
+      {{FPL("f:/foo/bar"), FPL("F:/foo/bar/baz")}, FPL("baz")},
+      {{FPL("E:/Foo/bar"), FPL("e:/foo/bar/baz")}, FPL("")},
+      {{FPL("f:/foo/bar"), FPL("F:/foo/Bar/baz")}, FPL("")},
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("c:/"),           FPL("c:/foo/bar/baz") },    FPL("foo\\bar\\baz")},
+      {{FPL("c:/"), FPL("c:/foo/bar/baz")}, FPL("foo\\bar\\baz")},
     // TODO(akalin): Figure out how to handle the corner case in the
     // commented-out test case below.  Appending to an empty path gives
     // /foo\bar\baz but appending to a nonempty path "blah" gives
     // blah\foo\bar\baz.
     // { { FPL("c:"),            FPL("c:/foo/bar/baz") }, FPL("foo\\bar\\baz")},
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-    { { FPL("c:/foo/bar"),    FPL("d:/foo/bar/baz") },    FPL("")},
-    { { FPL("c:/foo/bar"),    FPL("D:/foo/bar/baz") },    FPL("")},
-    { { FPL("C:/foo/bar"),    FPL("d:/foo/bar/baz") },    FPL("")},
-    { { FPL("c:/foo/bar"),    FPL("c:/foo2/bar/baz") },   FPL("")},
-    { { FPL("e:/foo/bar"),    FPL("E:/foo2/bar/baz") },   FPL("")},
-    { { FPL("F:/foo/bar"),    FPL("f:/foo2/bar/baz") },   FPL("")},
-    { { FPL("c:/foo/bar"),    FPL("c:/foo/bar2/baz") },   FPL("")},
+      {{FPL("c:/foo/bar"), FPL("d:/foo/bar/baz")}, FPL("")},
+      {{FPL("c:/foo/bar"), FPL("D:/foo/bar/baz")}, FPL("")},
+      {{FPL("C:/foo/bar"), FPL("d:/foo/bar/baz")}, FPL("")},
+      {{FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz")}, FPL("")},
+      {{FPL("e:/foo/bar"), FPL("E:/foo2/bar/baz")}, FPL("")},
+      {{FPL("F:/foo/bar"), FPL("f:/foo2/bar/baz")}, FPL("")},
+      {{FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz")}, FPL("")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("\\foo\\bar"),    FPL("\\foo\\bar\\baz") },   FPL("baz")},
-    { { FPL("\\foo/bar"),     FPL("\\foo\\bar\\baz") },   FPL("baz")},
-    { { FPL("\\foo/bar"),     FPL("\\foo/bar/baz") },     FPL("baz")},
-    { { FPL("\\"),            FPL("\\foo\\bar\\baz") },   FPL("foo\\bar\\baz")},
-    { { FPL(""),              FPL("\\foo\\bar\\baz") },   FPL("")},
-    { { FPL("\\foo\\bar"),    FPL("\\foo2\\bar\\baz") },  FPL("")},
-    { { FPL("\\foo\\bar"),    FPL("\\foo\\bar2\\baz") },  FPL("")},
+      {{FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz")}, FPL("baz")},
+      {{FPL("\\foo/bar"), FPL("\\foo\\bar\\baz")}, FPL("baz")},
+      {{FPL("\\foo/bar"), FPL("\\foo/bar/baz")}, FPL("baz")},
+      {{FPL("\\"), FPL("\\foo\\bar\\baz")}, FPL("foo\\bar\\baz")},
+      {{FPL(""), FPL("\\foo\\bar\\baz")}, FPL("")},
+      {{FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz")}, FPL("")},
+      {{FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz")}, FPL("")},
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
 
-    // For network paths, the hosts are compared ignoring case, while the rest
-    // of the path is compared using case.
-    { { FPL("//FOO/bar/"),    FPL("//foo/bar/baz") },     FPL("baz")},
-    { { FPL("//foo/BAR/"),    FPL("//foo/bar/baz") },     FPL("")},
-    // For non-network paths, the first component is not a host and should be
-    // compared using case.
-    { { FPL("/FOO/bar/"),     FPL("/foo/bar/baz") },      FPL("")},
-    // Degenerate case when parent has no hostname.
-    { { FPL("//"),            FPL("//foo") },             FPL("foo")},
+      // For network paths, the hosts are compared ignoring case, while the rest
+      // of the path is compared using case.
+      {{FPL("//FOO/bar/"), FPL("//foo/bar/baz")}, FPL("baz")},
+      {{FPL("//foo/BAR/"), FPL("//foo/bar/baz")}, FPL("")},
+      // For non-network paths, the first component is not a host and should be
+      // compared using case.
+      {{FPL("/FOO/bar/"), FPL("/foo/bar/baz")}, FPL("")},
+      // Degenerate case when parent has no hostname.
+      {{FPL("//"), FPL("//foo")}, FPL("foo")},
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    // Network path tests but using Windows path separators.
-    { { FPL("\\\\FOO\\bar"),  FPL("\\\\foo\\bar\\baz") }, FPL("baz")},
-    { { FPL("\\\\fOO\\Bar"),  FPL("\\\\foo\\bar\\baz") }, FPL("")},
-    { { FPL("\\FOO\\bar"),    FPL("\\foo\\bar\\baz") },   FPL("")},
-    { { FPL("\\\\"),          FPL("\\\\foo") },           FPL("foo")},
+      // Network path tests but using Windows path separators.
+      {{FPL("\\\\FOO\\bar"), FPL("\\\\foo\\bar\\baz")}, FPL("baz")},
+      {{FPL("\\\\fOO\\Bar"), FPL("\\\\foo\\bar\\baz")}, FPL("")},
+      {{FPL("\\FOO\\bar"), FPL("\\foo\\bar\\baz")}, FPL("")},
+      {{FPL("\\\\"), FPL("\\\\foo")}, FPL("foo")},
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
 
-  };
+  });
 
   const FilePath base(FPL("blah"));
 
@@ -698,45 +680,45 @@
 }
 
 TEST_F(FilePathTest, EqualityTest) {
-  const struct BinaryBooleanTestData cases[] = {
-    { { FPL("/foo/bar/baz"),  FPL("/foo/bar/baz") },      true},
-    { { FPL("/foo/bar"),      FPL("/foo/bar/baz") },      false},
-    { { FPL("/foo/bar/baz"),  FPL("/foo/bar") },          false},
-    { { FPL("//foo/bar/"),    FPL("//foo/bar/") },        true},
-    { { FPL("/foo/bar"),      FPL("/foo2/bar") },         false},
-    { { FPL("/foo/bar.txt"),  FPL("/foo/bar") },          false},
-    { { FPL("foo/bar"),       FPL("foo/bar") },           true},
-    { { FPL("foo/bar"),       FPL("foo/bar/baz") },       false},
-    { { FPL(""),              FPL("foo") },               false},
+  const auto cases = std::to_array<BinaryBooleanTestData>({
+      {{FPL("/foo/bar/baz"), FPL("/foo/bar/baz")}, true},
+      {{FPL("/foo/bar"), FPL("/foo/bar/baz")}, false},
+      {{FPL("/foo/bar/baz"), FPL("/foo/bar")}, false},
+      {{FPL("//foo/bar/"), FPL("//foo/bar/")}, true},
+      {{FPL("/foo/bar"), FPL("/foo2/bar")}, false},
+      {{FPL("/foo/bar.txt"), FPL("/foo/bar")}, false},
+      {{FPL("foo/bar"), FPL("foo/bar")}, true},
+      {{FPL("foo/bar"), FPL("foo/bar/baz")}, false},
+      {{FPL(""), FPL("foo")}, false},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:/foo/bar"),    FPL("c:/foo/bar") },        true},
-    { { FPL("E:/foo/bar"),    FPL("e:/foo/bar") },        true},
-    { { FPL("f:/foo/bar"),    FPL("F:/foo/bar") },        true},
-    { { FPL("E:/Foo/bar"),    FPL("e:/foo/bar") },        false},
-    { { FPL("f:/foo/bar"),    FPL("F:/foo/Bar") },        false},
-    { { FPL("c:/"),           FPL("c:/") },               true},
-    { { FPL("c:"),            FPL("c:") },                true},
-    { { FPL("c:/foo/bar"),    FPL("d:/foo/bar") },        false},
-    { { FPL("c:/foo/bar"),    FPL("D:/foo/bar") },        false},
-    { { FPL("C:/foo/bar"),    FPL("d:/foo/bar") },        false},
-    { { FPL("c:/foo/bar"),    FPL("c:/foo2/bar") },       false},
+      {{FPL("c:/foo/bar"), FPL("c:/foo/bar")}, true},
+      {{FPL("E:/foo/bar"), FPL("e:/foo/bar")}, true},
+      {{FPL("f:/foo/bar"), FPL("F:/foo/bar")}, true},
+      {{FPL("E:/Foo/bar"), FPL("e:/foo/bar")}, false},
+      {{FPL("f:/foo/bar"), FPL("F:/foo/Bar")}, false},
+      {{FPL("c:/"), FPL("c:/")}, true},
+      {{FPL("c:"), FPL("c:")}, true},
+      {{FPL("c:/foo/bar"), FPL("d:/foo/bar")}, false},
+      {{FPL("c:/foo/bar"), FPL("D:/foo/bar")}, false},
+      {{FPL("C:/foo/bar"), FPL("d:/foo/bar")}, false},
+      {{FPL("c:/foo/bar"), FPL("c:/foo2/bar")}, false},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("\\foo\\bar"),    FPL("\\foo\\bar") },        true},
-    { { FPL("\\foo/bar"),     FPL("\\foo/bar") },         true},
-    { { FPL("\\foo/bar"),     FPL("\\foo\\bar") },        false},
-    { { FPL("\\"),            FPL("\\") },                true},
-    { { FPL("\\"),            FPL("/") },                 false},
-    { { FPL(""),              FPL("\\") },                false},
-    { { FPL("\\foo\\bar"),    FPL("\\foo2\\bar") },       false},
-    { { FPL("\\foo\\bar"),    FPL("\\foo\\bar2") },       false},
+      {{FPL("\\foo\\bar"), FPL("\\foo\\bar")}, true},
+      {{FPL("\\foo/bar"), FPL("\\foo/bar")}, true},
+      {{FPL("\\foo/bar"), FPL("\\foo\\bar")}, false},
+      {{FPL("\\"), FPL("\\")}, true},
+      {{FPL("\\"), FPL("/")}, false},
+      {{FPL(""), FPL("\\")}, false},
+      {{FPL("\\foo\\bar"), FPL("\\foo2\\bar")}, false},
+      {{FPL("\\foo\\bar"), FPL("\\foo\\bar2")}, false},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    { { FPL("c:\\foo\\bar"),    FPL("c:\\foo\\bar") },    true},
-    { { FPL("E:\\foo\\bar"),    FPL("e:\\foo\\bar") },    true},
-    { { FPL("f:\\foo\\bar"),    FPL("F:\\foo/bar") },     false},
+      {{FPL("c:\\foo\\bar"), FPL("c:\\foo\\bar")}, true},
+      {{FPL("E:\\foo\\bar"), FPL("e:\\foo\\bar")}, true},
+      {{FPL("f:\\foo\\bar"), FPL("F:\\foo/bar")}, false},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #endif  // FILE_PATH_USES_WIN_SEPARATORS
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath a(cases[i].inputs[0]);
@@ -781,7 +763,7 @@
 
 TEST_F(FilePathTest, Extension2) {
   // clang-format off
-  const struct UnaryTestData cases[] = {
+  const auto cases = std::to_array<UnaryTestData>({
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
     { FPL("C:\\a\\b\\c.ext"),        FPL(".ext") },
     { FPL("C:\\a\\b\\c."),           FPL(".") },
@@ -815,8 +797,8 @@
     { FPL("/foo.bar/..////"),        FPL("") },
     { FPL("/foo.1234.luser.js"),     FPL(".js") },
     { FPL("/user.js"),               FPL(".js") },
-  };
-  const struct UnaryTestData double_extension_cases[] = {
+  });
+  const auto double_extension_cases = std::to_array<UnaryTestData>({
     // `kCommonDoubleExtensionSuffixes` cases. Blah is not on that allow-list.
     // Membership is (ASCII) case-insensitive: both ".Z" and ".z" match.
     { FPL("/foo.TAR.bz2"),           FPL(".TAR.bz2") },
@@ -840,7 +822,7 @@
     { FPL("/foo.1234.tar.gz"),       FPL(".tar.gz") },
     { FPL("/foo.tar.tar.gz"),        FPL(".tar.gz") },
     { FPL("/foo.tar.gz.gz"),         FPL(".gz.gz") },
-  };
+  });
   // clang-format on
 
   for (size_t i = 0; i < std::size(cases); ++i) {
@@ -862,65 +844,61 @@
 }
 
 TEST_F(FilePathTest, InsertBeforeExtension) {
-  const struct BinaryTestData cases[] = {
-    { { FPL(""),                FPL("") },        FPL("") },
-    { { FPL(""),                FPL("txt") },     FPL("") },
-    { { FPL("."),               FPL("txt") },     FPL("") },
-    { { FPL(".."),              FPL("txt") },     FPL("") },
-    { { FPL("foo.dll"),         FPL("txt") },     FPL("footxt.dll") },
-    { { FPL("."),               FPL("") },        FPL(".") },
-    { { FPL("foo.dll"),         FPL(".txt") },    FPL("foo.txt.dll") },
-    { { FPL("foo"),             FPL("txt") },     FPL("footxt") },
-    { { FPL("foo"),             FPL(".txt") },    FPL("foo.txt") },
-    { { FPL("foo.baz.dll"),     FPL("txt") },     FPL("foo.baztxt.dll") },
-    { { FPL("foo.baz.dll"),     FPL(".txt") },    FPL("foo.baz.txt.dll") },
-    { { FPL("foo.dll"),         FPL("") },        FPL("foo.dll") },
-    { { FPL("foo.dll"),         FPL(".") },       FPL("foo..dll") },
-    { { FPL("foo"),             FPL("") },        FPL("foo") },
-    { { FPL("foo"),             FPL(".") },       FPL("foo.") },
-    { { FPL("foo.baz.dll"),     FPL("") },        FPL("foo.baz.dll") },
-    { { FPL("foo.baz.dll"),     FPL(".") },       FPL("foo.baz..dll") },
+  const auto cases = std::to_array<BinaryTestData>({
+      {{FPL(""), FPL("")}, FPL("")},
+      {{FPL(""), FPL("txt")}, FPL("")},
+      {{FPL("."), FPL("txt")}, FPL("")},
+      {{FPL(".."), FPL("txt")}, FPL("")},
+      {{FPL("foo.dll"), FPL("txt")}, FPL("footxt.dll")},
+      {{FPL("."), FPL("")}, FPL(".")},
+      {{FPL("foo.dll"), FPL(".txt")}, FPL("foo.txt.dll")},
+      {{FPL("foo"), FPL("txt")}, FPL("footxt")},
+      {{FPL("foo"), FPL(".txt")}, FPL("foo.txt")},
+      {{FPL("foo.baz.dll"), FPL("txt")}, FPL("foo.baztxt.dll")},
+      {{FPL("foo.baz.dll"), FPL(".txt")}, FPL("foo.baz.txt.dll")},
+      {{FPL("foo.dll"), FPL("")}, FPL("foo.dll")},
+      {{FPL("foo.dll"), FPL(".")}, FPL("foo..dll")},
+      {{FPL("foo"), FPL("")}, FPL("foo")},
+      {{FPL("foo"), FPL(".")}, FPL("foo.")},
+      {{FPL("foo.baz.dll"), FPL("")}, FPL("foo.baz.dll")},
+      {{FPL("foo.baz.dll"), FPL(".")}, FPL("foo.baz..dll")},
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("\\"),              FPL("") },        FPL("\\") },
-    { { FPL("\\"),              FPL("txt") },     FPL("\\txt") },
-    { { FPL("\\."),             FPL("txt") },     FPL("") },
-    { { FPL("\\.."),            FPL("txt") },     FPL("") },
-    { { FPL("\\."),             FPL("") },        FPL("\\.") },
-    { { FPL("C:\\bar\\foo.dll"), FPL("txt") },
-        FPL("C:\\bar\\footxt.dll") },
-    { { FPL("C:\\bar.baz\\foodll"), FPL("txt") },
-        FPL("C:\\bar.baz\\foodlltxt") },
-    { { FPL("C:\\bar.baz\\foo.dll"), FPL("txt") },
-        FPL("C:\\bar.baz\\footxt.dll") },
-    { { FPL("C:\\bar.baz\\foo.dll.exe"), FPL("txt") },
-        FPL("C:\\bar.baz\\foo.dlltxt.exe") },
-    { { FPL("C:\\bar.baz\\foo"), FPL("") },
-        FPL("C:\\bar.baz\\foo") },
-    { { FPL("C:\\bar.baz\\foo.exe"), FPL("") },
-        FPL("C:\\bar.baz\\foo.exe") },
-    { { FPL("C:\\bar.baz\\foo.dll.exe"), FPL("") },
-        FPL("C:\\bar.baz\\foo.dll.exe") },
-    { { FPL("C:\\bar\\baz\\foo.exe"), FPL(" (1)") },
-        FPL("C:\\bar\\baz\\foo (1).exe") },
-    { { FPL("C:\\foo.baz\\\\"), FPL(" (1)") },    FPL("C:\\foo (1).baz") },
-    { { FPL("C:\\foo.baz\\..\\"), FPL(" (1)") },  FPL("") },
+      {{FPL("\\"), FPL("")}, FPL("\\")},
+      {{FPL("\\"), FPL("txt")}, FPL("\\txt")},
+      {{FPL("\\."), FPL("txt")}, FPL("")},
+      {{FPL("\\.."), FPL("txt")}, FPL("")},
+      {{FPL("\\."), FPL("")}, FPL("\\.")},
+      {{FPL("C:\\bar\\foo.dll"), FPL("txt")}, FPL("C:\\bar\\footxt.dll")},
+      {{FPL("C:\\bar.baz\\foodll"), FPL("txt")}, FPL("C:\\bar.baz\\foodlltxt")},
+      {{FPL("C:\\bar.baz\\foo.dll"), FPL("txt")},
+       FPL("C:\\bar.baz\\footxt.dll")},
+      {{FPL("C:\\bar.baz\\foo.dll.exe"), FPL("txt")},
+       FPL("C:\\bar.baz\\foo.dlltxt.exe")},
+      {{FPL("C:\\bar.baz\\foo"), FPL("")}, FPL("C:\\bar.baz\\foo")},
+      {{FPL("C:\\bar.baz\\foo.exe"), FPL("")}, FPL("C:\\bar.baz\\foo.exe")},
+      {{FPL("C:\\bar.baz\\foo.dll.exe"), FPL("")},
+       FPL("C:\\bar.baz\\foo.dll.exe")},
+      {{FPL("C:\\bar\\baz\\foo.exe"), FPL(" (1)")},
+       FPL("C:\\bar\\baz\\foo (1).exe")},
+      {{FPL("C:\\foo.baz\\\\"), FPL(" (1)")}, FPL("C:\\foo (1).baz")},
+      {{FPL("C:\\foo.baz\\..\\"), FPL(" (1)")}, FPL("")},
 #endif
-    { { FPL("/"),               FPL("") },        FPL("/") },
-    { { FPL("/"),               FPL("txt") },     FPL("/txt") },
-    { { FPL("/."),              FPL("txt") },     FPL("") },
-    { { FPL("/.."),             FPL("txt") },     FPL("") },
-    { { FPL("/."),              FPL("") },        FPL("/.") },
-    { { FPL("/bar/foo.dll"),    FPL("txt") },     FPL("/bar/footxt.dll") },
-    { { FPL("/bar.baz/foodll"), FPL("txt") },     FPL("/bar.baz/foodlltxt") },
-    { { FPL("/bar.baz/foo.dll"), FPL("txt") },    FPL("/bar.baz/footxt.dll") },
-    { { FPL("/bar.baz/foo.dll.exe"), FPL("txt") },
-        FPL("/bar.baz/foo.dlltxt.exe") },
-    { { FPL("/bar.baz/foo"),    FPL("") },        FPL("/bar.baz/foo") },
-    { { FPL("/bar.baz/foo.exe"), FPL("") },       FPL("/bar.baz/foo.exe") },
-    { { FPL("/bar.baz/foo.dll.exe"), FPL("") },   FPL("/bar.baz/foo.dll.exe") },
-    { { FPL("/bar/baz/foo.exe"), FPL(" (1)") },   FPL("/bar/baz/foo (1).exe") },
-    { { FPL("/bar/baz/..////"), FPL(" (1)") },    FPL("") },
-  };
+      {{FPL("/"), FPL("")}, FPL("/")},
+      {{FPL("/"), FPL("txt")}, FPL("/txt")},
+      {{FPL("/."), FPL("txt")}, FPL("")},
+      {{FPL("/.."), FPL("txt")}, FPL("")},
+      {{FPL("/."), FPL("")}, FPL("/.")},
+      {{FPL("/bar/foo.dll"), FPL("txt")}, FPL("/bar/footxt.dll")},
+      {{FPL("/bar.baz/foodll"), FPL("txt")}, FPL("/bar.baz/foodlltxt")},
+      {{FPL("/bar.baz/foo.dll"), FPL("txt")}, FPL("/bar.baz/footxt.dll")},
+      {{FPL("/bar.baz/foo.dll.exe"), FPL("txt")},
+       FPL("/bar.baz/foo.dlltxt.exe")},
+      {{FPL("/bar.baz/foo"), FPL("")}, FPL("/bar.baz/foo")},
+      {{FPL("/bar.baz/foo.exe"), FPL("")}, FPL("/bar.baz/foo.exe")},
+      {{FPL("/bar.baz/foo.dll.exe"), FPL("")}, FPL("/bar.baz/foo.dll.exe")},
+      {{FPL("/bar/baz/foo.exe"), FPL(" (1)")}, FPL("/bar/baz/foo (1).exe")},
+      {{FPL("/bar/baz/..////"), FPL(" (1)")}, FPL("")},
+  });
   for (unsigned int i = 0; i < std::size(cases); ++i) {
     FilePath path(cases[i].inputs[0]);
     FilePath result = path.InsertBeforeExtension(cases[i].inputs[1]);
@@ -931,24 +909,24 @@
 }
 
 TEST_F(FilePathTest, RemoveExtension) {
-  const struct UnaryTestData cases[] = {
-    { FPL(""),                    FPL("") },
-    { FPL("."),                   FPL(".") },
-    { FPL(".."),                  FPL("..") },
-    { FPL("foo.dll"),             FPL("foo") },
-    { FPL("./foo.dll"),           FPL("./foo") },
-    { FPL("foo..dll"),            FPL("foo.") },
-    { FPL("foo"),                 FPL("foo") },
-    { FPL("foo."),                FPL("foo") },
-    { FPL("foo.."),               FPL("foo.") },
-    { FPL("foo.baz.dll"),         FPL("foo.baz") },
+  const auto cases = std::to_array<UnaryTestData>({
+      {FPL(""), FPL("")},
+      {FPL("."), FPL(".")},
+      {FPL(".."), FPL("..")},
+      {FPL("foo.dll"), FPL("foo")},
+      {FPL("./foo.dll"), FPL("./foo")},
+      {FPL("foo..dll"), FPL("foo.")},
+      {FPL("foo"), FPL("foo")},
+      {FPL("foo."), FPL("foo")},
+      {FPL("foo.."), FPL("foo.")},
+      {FPL("foo.baz.dll"), FPL("foo.baz")},
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { FPL("C:\\foo.bar\\foo"),    FPL("C:\\foo.bar\\foo") },
-    { FPL("C:\\foo.bar\\..\\\\"), FPL("C:\\foo.bar\\..\\\\") },
+      {FPL("C:\\foo.bar\\foo"), FPL("C:\\foo.bar\\foo")},
+      {FPL("C:\\foo.bar\\..\\\\"), FPL("C:\\foo.bar\\..\\\\")},
 #endif
-    { FPL("/foo.bar/foo"),        FPL("/foo.bar/foo") },
-    { FPL("/foo.bar/..////"),     FPL("/foo.bar/..////") },
-  };
+      {FPL("/foo.bar/foo"), FPL("/foo.bar/foo")},
+      {FPL("/foo.bar/..////"), FPL("/foo.bar/..////")},
+  });
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath path(cases[i].input);
     FilePath removed = path.RemoveExtension();
@@ -974,35 +952,35 @@
 }
 
 TEST_F(FilePathTest, ReplaceExtension) {
-  const struct BinaryTestData cases[] = {
-    { { FPL(""),              FPL("") },      FPL("") },
-    { { FPL(""),              FPL("txt") },   FPL("") },
-    { { FPL("."),             FPL("txt") },   FPL("") },
-    { { FPL(".."),            FPL("txt") },   FPL("") },
-    { { FPL("."),             FPL("") },      FPL("") },
-    { { FPL("foo.dll"),       FPL("txt") },   FPL("foo.txt") },
-    { { FPL("./foo.dll"),     FPL("txt") },   FPL("./foo.txt") },
-    { { FPL("foo..dll"),      FPL("txt") },   FPL("foo..txt") },
-    { { FPL("foo.dll"),       FPL(".txt") },  FPL("foo.txt") },
-    { { FPL("foo"),           FPL("txt") },   FPL("foo.txt") },
-    { { FPL("foo."),          FPL("txt") },   FPL("foo.txt") },
-    { { FPL("foo.."),         FPL("txt") },   FPL("foo..txt") },
-    { { FPL("foo"),           FPL(".txt") },  FPL("foo.txt") },
-    { { FPL("foo.baz.dll"),   FPL("txt") },   FPL("foo.baz.txt") },
-    { { FPL("foo.baz.dll"),   FPL(".txt") },  FPL("foo.baz.txt") },
-    { { FPL("foo.dll"),       FPL("") },      FPL("foo") },
-    { { FPL("foo.dll"),       FPL(".") },     FPL("foo") },
-    { { FPL("foo"),           FPL("") },      FPL("foo") },
-    { { FPL("foo"),           FPL(".") },     FPL("foo") },
-    { { FPL("foo.baz.dll"),   FPL("") },      FPL("foo.baz") },
-    { { FPL("foo.baz.dll"),   FPL(".") },     FPL("foo.baz") },
+  const auto cases = std::to_array<BinaryTestData>({
+      {{FPL(""), FPL("")}, FPL("")},
+      {{FPL(""), FPL("txt")}, FPL("")},
+      {{FPL("."), FPL("txt")}, FPL("")},
+      {{FPL(".."), FPL("txt")}, FPL("")},
+      {{FPL("."), FPL("")}, FPL("")},
+      {{FPL("foo.dll"), FPL("txt")}, FPL("foo.txt")},
+      {{FPL("./foo.dll"), FPL("txt")}, FPL("./foo.txt")},
+      {{FPL("foo..dll"), FPL("txt")}, FPL("foo..txt")},
+      {{FPL("foo.dll"), FPL(".txt")}, FPL("foo.txt")},
+      {{FPL("foo"), FPL("txt")}, FPL("foo.txt")},
+      {{FPL("foo."), FPL("txt")}, FPL("foo.txt")},
+      {{FPL("foo.."), FPL("txt")}, FPL("foo..txt")},
+      {{FPL("foo"), FPL(".txt")}, FPL("foo.txt")},
+      {{FPL("foo.baz.dll"), FPL("txt")}, FPL("foo.baz.txt")},
+      {{FPL("foo.baz.dll"), FPL(".txt")}, FPL("foo.baz.txt")},
+      {{FPL("foo.dll"), FPL("")}, FPL("foo")},
+      {{FPL("foo.dll"), FPL(".")}, FPL("foo")},
+      {{FPL("foo"), FPL("")}, FPL("foo")},
+      {{FPL("foo"), FPL(".")}, FPL("foo")},
+      {{FPL("foo.baz.dll"), FPL("")}, FPL("foo.baz")},
+      {{FPL("foo.baz.dll"), FPL(".")}, FPL("foo.baz")},
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("C:\\foo.bar\\foo"),    FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") },
-    { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") },
+      {{FPL("C:\\foo.bar\\foo"), FPL("baz")}, FPL("C:\\foo.bar\\foo.baz")},
+      {{FPL("C:\\foo.bar\\..\\\\"), FPL("baz")}, FPL("")},
 #endif
-    { { FPL("/foo.bar/foo"),        FPL("baz") }, FPL("/foo.bar/foo.baz") },
-    { { FPL("/foo.bar/..////"),     FPL("baz") }, FPL("") },
-  };
+      {{FPL("/foo.bar/foo"), FPL("baz")}, FPL("/foo.bar/foo.baz")},
+      {{FPL("/foo.bar/..////"), FPL("baz")}, FPL("")},
+  });
   for (unsigned int i = 0; i < std::size(cases); ++i) {
     FilePath path(cases[i].inputs[0]);
     FilePath replaced = path.ReplaceExtension(cases[i].inputs[1]);
@@ -1012,35 +990,35 @@
 }
 
 TEST_F(FilePathTest, AddExtension) {
-  const struct BinaryTestData cases[] = {
-    { { FPL(""),              FPL("") },      FPL("") },
-    { { FPL(""),              FPL("txt") },   FPL("") },
-    { { FPL("."),             FPL("txt") },   FPL("") },
-    { { FPL(".."),            FPL("txt") },   FPL("") },
-    { { FPL("."),             FPL("") },      FPL("") },
-    { { FPL("foo.dll"),       FPL("txt") },   FPL("foo.dll.txt") },
-    { { FPL("./foo.dll"),     FPL("txt") },   FPL("./foo.dll.txt") },
-    { { FPL("foo..dll"),      FPL("txt") },   FPL("foo..dll.txt") },
-    { { FPL("foo.dll"),       FPL(".txt") },  FPL("foo.dll.txt") },
-    { { FPL("foo"),           FPL("txt") },   FPL("foo.txt") },
-    { { FPL("foo."),          FPL("txt") },   FPL("foo.txt") },
-    { { FPL("foo.."),         FPL("txt") },   FPL("foo..txt") },
-    { { FPL("foo"),           FPL(".txt") },  FPL("foo.txt") },
-    { { FPL("foo.baz.dll"),   FPL("txt") },   FPL("foo.baz.dll.txt") },
-    { { FPL("foo.baz.dll"),   FPL(".txt") },  FPL("foo.baz.dll.txt") },
-    { { FPL("foo.dll"),       FPL("") },      FPL("foo.dll") },
-    { { FPL("foo.dll"),       FPL(".") },     FPL("foo.dll") },
-    { { FPL("foo"),           FPL("") },      FPL("foo") },
-    { { FPL("foo"),           FPL(".") },     FPL("foo") },
-    { { FPL("foo.baz.dll"),   FPL("") },      FPL("foo.baz.dll") },
-    { { FPL("foo.baz.dll"),   FPL(".") },     FPL("foo.baz.dll") },
+  const auto cases = std::to_array<BinaryTestData>({
+      {{FPL(""), FPL("")}, FPL("")},
+      {{FPL(""), FPL("txt")}, FPL("")},
+      {{FPL("."), FPL("txt")}, FPL("")},
+      {{FPL(".."), FPL("txt")}, FPL("")},
+      {{FPL("."), FPL("")}, FPL("")},
+      {{FPL("foo.dll"), FPL("txt")}, FPL("foo.dll.txt")},
+      {{FPL("./foo.dll"), FPL("txt")}, FPL("./foo.dll.txt")},
+      {{FPL("foo..dll"), FPL("txt")}, FPL("foo..dll.txt")},
+      {{FPL("foo.dll"), FPL(".txt")}, FPL("foo.dll.txt")},
+      {{FPL("foo"), FPL("txt")}, FPL("foo.txt")},
+      {{FPL("foo."), FPL("txt")}, FPL("foo.txt")},
+      {{FPL("foo.."), FPL("txt")}, FPL("foo..txt")},
+      {{FPL("foo"), FPL(".txt")}, FPL("foo.txt")},
+      {{FPL("foo.baz.dll"), FPL("txt")}, FPL("foo.baz.dll.txt")},
+      {{FPL("foo.baz.dll"), FPL(".txt")}, FPL("foo.baz.dll.txt")},
+      {{FPL("foo.dll"), FPL("")}, FPL("foo.dll")},
+      {{FPL("foo.dll"), FPL(".")}, FPL("foo.dll")},
+      {{FPL("foo"), FPL("")}, FPL("foo")},
+      {{FPL("foo"), FPL(".")}, FPL("foo")},
+      {{FPL("foo.baz.dll"), FPL("")}, FPL("foo.baz.dll")},
+      {{FPL("foo.baz.dll"), FPL(".")}, FPL("foo.baz.dll")},
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    { { FPL("C:\\foo.bar\\foo"),    FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") },
-    { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") },
+      {{FPL("C:\\foo.bar\\foo"), FPL("baz")}, FPL("C:\\foo.bar\\foo.baz")},
+      {{FPL("C:\\foo.bar\\..\\\\"), FPL("baz")}, FPL("")},
 #endif
-    { { FPL("/foo.bar/foo"),        FPL("baz") }, FPL("/foo.bar/foo.baz") },
-    { { FPL("/foo.bar/..////"),     FPL("baz") }, FPL("") },
-  };
+      {{FPL("/foo.bar/foo"), FPL("baz")}, FPL("/foo.bar/foo.baz")},
+      {{FPL("/foo.bar/..////"), FPL("baz")}, FPL("")},
+  });
   for (unsigned int i = 0; i < std::size(cases); ++i) {
     FilePath path(cases[i].inputs[0]);
     FilePath added = path.AddExtension(cases[i].inputs[1]);
@@ -1050,42 +1028,42 @@
 }
 
 TEST_F(FilePathTest, MatchesExtension) {
-  const struct BinaryBooleanTestData cases[] = {
-    {{FPL("foo"), FPL("")}, true},
-    {{FPL("foo"), FPL(".")}, false},
-    {{FPL("foo."), FPL("")}, false},
-    {{FPL("foo."), FPL(".")}, true},
-    {{FPL("foo.txt"), FPL(".dll")}, false},
-    {{FPL("foo.txt"), FPL(".txt")}, true},
-    {{FPL("foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("foo.txt.dll"), FPL(".dll")}, true},
-    {{FPL("foo.tar.gz"), FPL(".gz")}, false},
-    {{FPL("foo.tar.lzma"), FPL(".tar.lzma")}, true},
-    {{FPL("foo.TXT"), FPL(".txt")}, true},
-    {{FPL("foo.txt"), FPL(".TXT")}, true},
-    {{FPL("foo.tXt"), FPL(".txt")}, true},
-    {{FPL("foo.txt"), FPL(".tXt")}, true},
-    {{FPL("foo.tXt"), FPL(".TXT")}, true},
-    {{FPL("foo.tXt"), FPL(".tXt")}, true},
+  const auto cases = std::to_array<BinaryBooleanTestData>({
+      {{FPL("foo"), FPL("")}, true},
+      {{FPL("foo"), FPL(".")}, false},
+      {{FPL("foo."), FPL("")}, false},
+      {{FPL("foo."), FPL(".")}, true},
+      {{FPL("foo.txt"), FPL(".dll")}, false},
+      {{FPL("foo.txt"), FPL(".txt")}, true},
+      {{FPL("foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("foo.txt.dll"), FPL(".dll")}, true},
+      {{FPL("foo.tar.gz"), FPL(".gz")}, false},
+      {{FPL("foo.tar.lzma"), FPL(".tar.lzma")}, true},
+      {{FPL("foo.TXT"), FPL(".txt")}, true},
+      {{FPL("foo.txt"), FPL(".TXT")}, true},
+      {{FPL("foo.tXt"), FPL(".txt")}, true},
+      {{FPL("foo.txt"), FPL(".tXt")}, true},
+      {{FPL("foo.tXt"), FPL(".TXT")}, true},
+      {{FPL("foo.tXt"), FPL(".tXt")}, true},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    {{FPL("c:/foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("c:/foo.txt"), FPL(".txt")}, true},
+      {{FPL("c:/foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("c:/foo.txt"), FPL(".txt")}, true},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    {{FPL("c:\\bar\\foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("c:\\bar\\foo.txt"), FPL(".txt")}, true},
+      {{FPL("c:\\bar\\foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("c:\\bar\\foo.txt"), FPL(".txt")}, true},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-    {{FPL("/bar/foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("/bar/foo.txt"), FPL(".txt")}, true},
+      {{FPL("/bar/foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("/bar/foo.txt"), FPL(".txt")}, true},
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
-    // Umlauts A, O, U: direct comparison, and upper case vs. lower case
-    {{FPL("foo.\u00E4\u00F6\u00FC"), FPL(".\u00E4\u00F6\u00FC")}, true},
-    {{FPL("foo.\u00C4\u00D6\u00DC"), FPL(".\u00E4\u00F6\u00FC")}, true},
-    // C with circumflex: direct comparison, and upper case vs. lower case
-    {{FPL("foo.\u0109"), FPL(".\u0109")}, true},
-    {{FPL("foo.\u0108"), FPL(".\u0109")}, true},
+      // Umlauts A, O, U: direct comparison, and upper case vs. lower case
+      {{FPL("foo.\u00E4\u00F6\u00FC"), FPL(".\u00E4\u00F6\u00FC")}, true},
+      {{FPL("foo.\u00C4\u00D6\u00DC"), FPL(".\u00E4\u00F6\u00FC")}, true},
+      // C with circumflex: direct comparison, and upper case vs. lower case
+      {{FPL("foo.\u0109"), FPL(".\u0109")}, true},
+      {{FPL("foo.\u0108"), FPL(".\u0109")}, true},
 #endif
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath path(cases[i].inputs[0]);
@@ -1097,44 +1075,44 @@
 }
 
 TEST_F(FilePathTest, MatchesFinalExtension) {
-  const struct BinaryBooleanTestData cases[] = {
-    {{FPL("foo"), FPL("")}, true},
-    {{FPL("foo"), FPL(".")}, false},
-    {{FPL("foo."), FPL("")}, false},
-    {{FPL("foo."), FPL(".")}, true},
-    {{FPL("foo.txt"), FPL(".dll")}, false},
-    {{FPL("foo.txt"), FPL(".txt")}, true},
-    {{FPL("foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("foo.txt.dll"), FPL(".dll")}, true},
-    {{FPL("foo.tar.gz"), FPL(".gz")}, true},
-    {{FPL("foo.tar.lzma"), FPL(".lzma")}, true},
-    {{FPL("foo.tar.lzma"), FPL(".tar.lzma")}, false},
-    {{FPL("foo.tlzma"), FPL(".tlzma")}, true},
-    {{FPL("foo.TXT"), FPL(".txt")}, true},
-    {{FPL("foo.txt"), FPL(".TXT")}, true},
-    {{FPL("foo.tXt"), FPL(".txt")}, true},
-    {{FPL("foo.txt"), FPL(".tXt")}, true},
-    {{FPL("foo.tXt"), FPL(".TXT")}, true},
-    {{FPL("foo.tXt"), FPL(".tXt")}, true},
+  const auto cases = std::to_array<BinaryBooleanTestData>({
+      {{FPL("foo"), FPL("")}, true},
+      {{FPL("foo"), FPL(".")}, false},
+      {{FPL("foo."), FPL("")}, false},
+      {{FPL("foo."), FPL(".")}, true},
+      {{FPL("foo.txt"), FPL(".dll")}, false},
+      {{FPL("foo.txt"), FPL(".txt")}, true},
+      {{FPL("foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("foo.txt.dll"), FPL(".dll")}, true},
+      {{FPL("foo.tar.gz"), FPL(".gz")}, true},
+      {{FPL("foo.tar.lzma"), FPL(".lzma")}, true},
+      {{FPL("foo.tar.lzma"), FPL(".tar.lzma")}, false},
+      {{FPL("foo.tlzma"), FPL(".tlzma")}, true},
+      {{FPL("foo.TXT"), FPL(".txt")}, true},
+      {{FPL("foo.txt"), FPL(".TXT")}, true},
+      {{FPL("foo.tXt"), FPL(".txt")}, true},
+      {{FPL("foo.txt"), FPL(".tXt")}, true},
+      {{FPL("foo.tXt"), FPL(".TXT")}, true},
+      {{FPL("foo.tXt"), FPL(".tXt")}, true},
 #if defined(FILE_PATH_USES_DRIVE_LETTERS)
-    {{FPL("c:/foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("c:/foo.txt"), FPL(".txt")}, true},
+      {{FPL("c:/foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("c:/foo.txt"), FPL(".txt")}, true},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
-    {{FPL("c:\\bar\\foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("c:\\bar\\foo.txt"), FPL(".txt")}, true},
+      {{FPL("c:\\bar\\foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("c:\\bar\\foo.txt"), FPL(".txt")}, true},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-    {{FPL("/bar/foo.txt.dll"), FPL(".txt")}, false},
-    {{FPL("/bar/foo.txt"), FPL(".txt")}, true},
+      {{FPL("/bar/foo.txt.dll"), FPL(".txt")}, false},
+      {{FPL("/bar/foo.txt"), FPL(".txt")}, true},
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
-    // Umlauts A, O, U: direct comparison, and upper case vs. lower case
-    {{FPL("foo.\u00E4\u00F6\u00FC"), FPL(".\u00E4\u00F6\u00FC")}, true},
-    {{FPL("foo.\u00C4\u00D6\u00DC"), FPL(".\u00E4\u00F6\u00FC")}, true},
-    // C with circumflex: direct comparison, and upper case vs. lower case
-    {{FPL("foo.\u0109"), FPL(".\u0109")}, true},
-    {{FPL("foo.\u0108"), FPL(".\u0109")}, true},
+      // Umlauts A, O, U: direct comparison, and upper case vs. lower case
+      {{FPL("foo.\u00E4\u00F6\u00FC"), FPL(".\u00E4\u00F6\u00FC")}, true},
+      {{FPL("foo.\u00C4\u00D6\u00DC"), FPL(".\u00E4\u00F6\u00FC")}, true},
+      // C with circumflex: direct comparison, and upper case vs. lower case
+      {{FPL("foo.\u0109"), FPL(".\u0109")}, true},
+      {{FPL("foo.\u0108"), FPL(".\u0109")}, true},
 #endif
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath path(cases[i].inputs[0]);
@@ -1146,79 +1124,80 @@
 }
 
 TEST_F(FilePathTest, CompareIgnoreCase) {
-  const struct BinaryIntTestData cases[] = {
-    {{FPL("foo"), FPL("foo")}, 0},
-    {{FPL("FOO"), FPL("foo")}, 0},
-    {{FPL("foo.ext"), FPL("foo.ext")}, 0},
-    {{FPL("FOO.EXT"), FPL("foo.ext")}, 0},
-    {{FPL("Foo.Ext"), FPL("foo.ext")}, 0},
-    {{FPL("foO"), FPL("foo")}, 0},
-    {{FPL("foo"), FPL("foO")}, 0},
-    {{FPL("fOo"), FPL("foo")}, 0},
-    {{FPL("foo"), FPL("fOo")}, 0},
-    {{FPL("bar"), FPL("foo")}, -1},
-    {{FPL("foo"), FPL("bar")}, 1},
-    {{FPL("BAR"), FPL("foo")}, -1},
-    {{FPL("FOO"), FPL("bar")}, 1},
-    {{FPL("bar"), FPL("FOO")}, -1},
-    {{FPL("foo"), FPL("BAR")}, 1},
-    {{FPL("BAR"), FPL("FOO")}, -1},
-    {{FPL("FOO"), FPL("BAR")}, 1},
-    // German "Eszett" (lower case and the new-fangled upper case)
-    // Note that uc(<lowercase eszett>) => "SS", NOT <uppercase eszett>!
-    // However, neither Windows nor Mac OSX converts these.
-    // (or even have glyphs for <uppercase eszett>)
-    {{FPL("\u00DF"), FPL("\u00DF")}, 0},
-    {{FPL("\u1E9E"), FPL("\u1E9E")}, 0},
-    {{FPL("\u00DF"), FPL("\u1E9E")}, -1},
-    {{FPL("SS"), FPL("\u00DF")}, -1},
-    {{FPL("SS"), FPL("\u1E9E")}, -1},
+  const auto cases = std::to_array<BinaryIntTestData>({
+      {{FPL("foo"), FPL("foo")}, 0},
+      {{FPL("FOO"), FPL("foo")}, 0},
+      {{FPL("foo.ext"), FPL("foo.ext")}, 0},
+      {{FPL("FOO.EXT"), FPL("foo.ext")}, 0},
+      {{FPL("Foo.Ext"), FPL("foo.ext")}, 0},
+      {{FPL("foO"), FPL("foo")}, 0},
+      {{FPL("foo"), FPL("foO")}, 0},
+      {{FPL("fOo"), FPL("foo")}, 0},
+      {{FPL("foo"), FPL("fOo")}, 0},
+      {{FPL("bar"), FPL("foo")}, -1},
+      {{FPL("foo"), FPL("bar")}, 1},
+      {{FPL("BAR"), FPL("foo")}, -1},
+      {{FPL("FOO"), FPL("bar")}, 1},
+      {{FPL("bar"), FPL("FOO")}, -1},
+      {{FPL("foo"), FPL("BAR")}, 1},
+      {{FPL("BAR"), FPL("FOO")}, -1},
+      {{FPL("FOO"), FPL("BAR")}, 1},
+      // German "Eszett" (lower case and the new-fangled upper case)
+      // Note that uc(<lowercase eszett>) => "SS", NOT <uppercase eszett>!
+      // However, neither Windows nor Mac OSX converts these.
+      // (or even have glyphs for <uppercase eszett>)
+      {{FPL("\u00DF"), FPL("\u00DF")}, 0},
+      {{FPL("\u1E9E"), FPL("\u1E9E")}, 0},
+      {{FPL("\u00DF"), FPL("\u1E9E")}, -1},
+      {{FPL("SS"), FPL("\u00DF")}, -1},
+      {{FPL("SS"), FPL("\u1E9E")}, -1},
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
-    // Umlauts A, O, U: direct comparison, and upper case vs. lower case
-    {{FPL("\u00E4\u00F6\u00FC"), FPL("\u00E4\u00F6\u00FC")}, 0},
-    {{FPL("\u00C4\u00D6\u00DC"), FPL("\u00E4\u00F6\u00FC")}, 0},
-    // C with circumflex: direct comparison, and upper case vs. lower case
-    {{FPL("\u0109"), FPL("\u0109")}, 0},
-    {{FPL("\u0108"), FPL("\u0109")}, 0},
-    // Cyrillic letter SHA: direct comparison, and upper case vs. lower case
-    {{FPL("\u0428"), FPL("\u0428")}, 0},
-    {{FPL("\u0428"), FPL("\u0448")}, 0},
-    // Greek letter DELTA: direct comparison, and upper case vs. lower case
-    {{FPL("\u0394"), FPL("\u0394")}, 0},
-    {{FPL("\u0394"), FPL("\u03B4")}, 0},
-    // Japanese full-width A: direct comparison, and upper case vs. lower case
-    // Note that full-width and standard characters are considered different.
-    {{FPL("\uFF21"), FPL("\uFF21")}, 0},
-    {{FPL("\uFF21"), FPL("\uFF41")}, 0},
-    {{FPL("A"), FPL("\uFF21")}, -1},
-    {{FPL("A"), FPL("\uFF41")}, -1},
-    {{FPL("a"), FPL("\uFF21")}, -1},
-    {{FPL("a"), FPL("\uFF41")}, -1},
+      // Umlauts A, O, U: direct comparison, and upper case vs. lower case
+      {{FPL("\u00E4\u00F6\u00FC"), FPL("\u00E4\u00F6\u00FC")}, 0},
+      {{FPL("\u00C4\u00D6\u00DC"), FPL("\u00E4\u00F6\u00FC")}, 0},
+      // C with circumflex: direct comparison, and upper case vs. lower case
+      {{FPL("\u0109"), FPL("\u0109")}, 0},
+      {{FPL("\u0108"), FPL("\u0109")}, 0},
+      // Cyrillic letter SHA: direct comparison, and upper case vs. lower case
+      {{FPL("\u0428"), FPL("\u0428")}, 0},
+      {{FPL("\u0428"), FPL("\u0448")}, 0},
+      // Greek letter DELTA: direct comparison, and upper case vs. lower case
+      {{FPL("\u0394"), FPL("\u0394")}, 0},
+      {{FPL("\u0394"), FPL("\u03B4")}, 0},
+      // Japanese full-width A: direct comparison, and upper case vs. lower case
+      // Note that full-width and standard characters are considered different.
+      {{FPL("\uFF21"), FPL("\uFF21")}, 0},
+      {{FPL("\uFF21"), FPL("\uFF41")}, 0},
+      {{FPL("A"), FPL("\uFF21")}, -1},
+      {{FPL("A"), FPL("\uFF41")}, -1},
+      {{FPL("a"), FPL("\uFF21")}, -1},
+      {{FPL("a"), FPL("\uFF41")}, -1},
 #endif
 #if BUILDFLAG(IS_APPLE)
-    // Codepoints > 0x1000
-    // Georgian letter DON: direct comparison, and upper case vs. lower case
-    {{FPL("\u10A3"), FPL("\u10A3")}, 0},
-    {{FPL("\u10A3"), FPL("\u10D3")}, 0},
-    // Combining characters vs. pre-composed characters, upper and lower case
-    {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E31\u1E77\u1E53n")}, 0},
-    {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("kuon")}, 1},
-    {{FPL("kuon"), FPL("k\u0301u\u032Do\u0304\u0301n")}, -1},
-    {{FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("KUON")}, 1},
-    {{FPL("KUON"), FPL("K\u0301U\u032DO\u0304\u0301N")}, -1},
-    {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("KUON")}, 1},
-    {{FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("\u1E31\u1E77\u1E53n")}, 0},
-    {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E30\u1E76\u1E52n")}, 0},
-    {{FPL("k\u0301u\u032Do\u0304\u0302n"), FPL("\u1E30\u1E76\u1E52n")}, 1},
+      // Codepoints > 0x1000
+      // Georgian letter DON: direct comparison, and upper case vs. lower case
+      {{FPL("\u10A3"), FPL("\u10A3")}, 0},
+      {{FPL("\u10A3"), FPL("\u10D3")}, 0},
+      // Combining characters vs. pre-composed characters, upper and lower case
+      {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E31\u1E77\u1E53n")}, 0},
+      {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("kuon")}, 1},
+      {{FPL("kuon"), FPL("k\u0301u\u032Do\u0304\u0301n")}, -1},
+      {{FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("KUON")}, 1},
+      {{FPL("KUON"), FPL("K\u0301U\u032DO\u0304\u0301N")}, -1},
+      {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("KUON")}, 1},
+      {{FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("\u1E31\u1E77\u1E53n")}, 0},
+      {{FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E30\u1E76\u1E52n")}, 0},
+      {{FPL("k\u0301u\u032Do\u0304\u0302n"), FPL("\u1E30\u1E76\u1E52n")}, 1},
 
-    // Codepoints > 0xFFFF
-    // Here, we compare the `Adlam Letter Shu` in its capital and small version.
-    {{FPL("\U0001E921"), FPL("\U0001E943")}, -1},
-    {{FPL("\U0001E943"), FPL("\U0001E921")}, 1},
-    {{FPL("\U0001E921"), FPL("\U0001E921")}, 0},
-    {{FPL("\U0001E943"), FPL("\U0001E943")}, 0},
+      // Codepoints > 0xFFFF
+      // Here, we compare the `Adlam Letter Shu` in its capital and small
+      // version.
+      {{FPL("\U0001E921"), FPL("\U0001E943")}, -1},
+      {{FPL("\U0001E943"), FPL("\U0001E921")}, 1},
+      {{FPL("\U0001E921"), FPL("\U0001E921")}, 0},
+      {{FPL("\U0001E943"), FPL("\U0001E943")}, 0},
 #endif
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath::StringType s1(cases[i].inputs[0]);
@@ -1231,7 +1210,7 @@
 
 TEST_F(FilePathTest, ReferencesParent) {
   // clang-format off
-  const struct UnaryBooleanTestData cases[] = {
+  const auto cases = std::to_array<UnaryBooleanTestData>({
     { FPL("."),        false },
     { FPL(".."),       true },
 #if BUILDFLAG(IS_WIN)
@@ -1260,7 +1239,7 @@
     { FPL("a/b/../"),  true },
     { FPL("a/../c"),   true },
     { FPL("a/b/c"),    false },
-  };
+  });
   // clang-format on
 
   for (size_t i = 0; i < std::size(cases); ++i) {
@@ -1272,10 +1251,10 @@
 }
 
 TEST_F(FilePathTest, FromASCII) {
-  const struct UTF8TestData cases[] = {
+  const auto cases = std::to_array<UTF8TestData>({
       {FPL("foo.txt"), "foo.txt"},
       {FPL("!#$%&'()"), "!#$%&'()"},
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     FilePath from_ascii = FilePath::FromASCII(cases[i].utf8);
@@ -1285,14 +1264,14 @@
 }
 
 TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe) {
-  const struct UTF8TestData cases[] = {
-    { FPL("foo.txt"), "foo.txt" },
-    // "aeo" with accents. Use http://0xcc.net/jsescape/ to decode them.
-    { FPL("\u00E0\u00E8\u00F2.txt"), "\xC3\xA0\xC3\xA8\xC3\xB2.txt" },
-    // Full-width "ABC".
-    { FPL("\uFF21\uFF22\uFF23.txt"),
-      "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" },
-  };
+  const auto cases = std::to_array<UTF8TestData>({
+      {FPL("foo.txt"), "foo.txt"},
+      // "aeo" with accents. Use http://0xcc.net/jsescape/ to decode them.
+      {FPL("\u00E0\u00E8\u00F2.txt"), "\xC3\xA0\xC3\xA8\xC3\xB2.txt"},
+      // Full-width "ABC".
+      {FPL("\uFF21\uFF22\uFF23.txt"),
+       "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt"},
+  });
 
 #if !defined(SYSTEM_NATIVE_UTF8) && \
     (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
diff --git a/base/files/file_proxy_unittest.cc b/base/files/file_proxy_unittest.cc
index 1650682..707c1e477 100644
--- a/base/files/file_proxy_unittest.cc
+++ b/base/files/file_proxy_unittest.cc
@@ -12,6 +12,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <array>
 #include <string_view>
 #include <utility>
 
@@ -349,7 +350,7 @@
   EXPECT_EQ(File::FILE_OK, error_);
 
   // Verify the written data.
-  char read_buffer[10];
+  std::array<char, 10> read_buffer;
   EXPECT_GE(std::size(read_buffer), write_span.size());
   EXPECT_EQ(write_span.size(), base::ReadFile(TestPath(), read_buffer));
   for (size_t i = 0; i < write_span.size(); ++i) {
@@ -415,7 +416,7 @@
   GetFileInfo(TestPath(), &info);
   ASSERT_EQ(7, info.size);
 
-  char buffer[7];
+  std::array<char, 7> buffer;
   EXPECT_EQ(7, base::ReadFile(TestPath(), buffer));
   int i = 0;
   for (; i < 7; ++i)
@@ -443,7 +444,7 @@
   GetFileInfo(TestPath(), &info);
   ASSERT_EQ(53, info.size);
 
-  char buffer[53];
+  std::array<char, 53> buffer;
   EXPECT_EQ(53, base::ReadFile(TestPath(), buffer));
   int i = 0;
   for (; i < 10; ++i)
diff --git a/base/i18n/icu_string_conversions_unittest.cc b/base/i18n/icu_string_conversions_unittest.cc
index 29b0470..9294e31b 100644
--- a/base/i18n/icu_string_conversions_unittest.cc
+++ b/base/i18n/icu_string_conversions_unittest.cc
@@ -13,6 +13,7 @@
 #include <stdarg.h>
 #include <stddef.h>
 
+#include <array>
 #include <limits>
 #include <sstream>
 
@@ -69,14 +70,15 @@
 // To avoid the clutter, |u16_wide| will be set to NULL
 // if it's identical to |wide| on *all* platforms.
 
-static const struct {
+struct ConvertCodepageCases {
   const char* codepage_name;
   const char* encoded;
   OnStringConversionError::Type on_error;
   bool success;
   const wchar_t* wide;
   const wchar_t* u16_wide;
-} kConvertCodepageCases[] = {
+};
+static const auto kConvertCodepageCases = std::to_array<ConvertCodepageCases>({
     // Test a case where the input cannot be decoded, using SKIP, FAIL
     // and SUBSTITUTE error handling rules. "A7 41" is valid, but "A6" isn't.
     {"big5", "\xA7\x41\xA6", OnStringConversionError::FAIL, false, L"",
@@ -164,7 +166,7 @@
      L"\x0E2A\x0E27\x0E31\x0E2A\x0E14\x0E35"
      L"\x0E04\x0E23\x0e31\x0E1A",
      nullptr},
-};
+});
 
 TEST(ICUStringConversionsTest, ConvertBetweenCodepageAndUTF16) {
   for (size_t i = 0; i < std::size(kConvertCodepageCases); ++i) {
@@ -200,26 +202,28 @@
   }
 }
 
-static const struct {
+struct ConvertAndNormalizeCases {
   const char* encoded;
   const char* codepage_name;
   bool expected_success;
   const char* expected_value;
-} kConvertAndNormalizeCases[] = {
-  {"foo-\xe4.html", "iso-8859-1", true, "foo-\xc3\xa4.html"},
-  {"foo-\xe4.html", "iso-8859-7", true, "foo-\xce\xb4.html"},
-  {"foo-\xe4.html", "foo-bar", false, ""},
-  // HTML Encoding spec treats US-ASCII as synonymous with windows-1252
-  {"foo-\xff.html", "ascii", true, "foo-\xc3\xbf.html"},
-  {"foo.html", "ascii", true, "foo.html"},
-  {"foo-a\xcc\x88.html", "utf-8", true, "foo-\xc3\xa4.html"},
-  {"\x95\x32\x82\x36\xD2\xBB", "gb18030", true, "\xF0\xA0\x80\x80\xE4\xB8\x80"},
-  {"\xA7\x41\xA6\x6E", "big5", true, "\xE4\xBD\xA0\xE5\xA5\xBD"},
-  // Windows-1258 does have a combining character at xD2 (which is U+0309).
-  // The sequence of (U+00E2, U+0309) is also encoded as U+1EA9.
-  {"foo\xE2\xD2", "windows-1258", true, "foo\xE1\xBA\xA9"},
-  {"", "iso-8859-1", true, ""},
 };
+const auto kConvertAndNormalizeCases = std::to_array<ConvertAndNormalizeCases>({
+    {"foo-\xe4.html", "iso-8859-1", true, "foo-\xc3\xa4.html"},
+    {"foo-\xe4.html", "iso-8859-7", true, "foo-\xce\xb4.html"},
+    {"foo-\xe4.html", "foo-bar", false, ""},
+    // HTML Encoding spec treats US-ASCII as synonymous with windows-1252
+    {"foo-\xff.html", "ascii", true, "foo-\xc3\xbf.html"},
+    {"foo.html", "ascii", true, "foo.html"},
+    {"foo-a\xcc\x88.html", "utf-8", true, "foo-\xc3\xa4.html"},
+    {"\x95\x32\x82\x36\xD2\xBB", "gb18030", true,
+     "\xF0\xA0\x80\x80\xE4\xB8\x80"},
+    {"\xA7\x41\xA6\x6E", "big5", true, "\xE4\xBD\xA0\xE5\xA5\xBD"},
+    // Windows-1258 does have a combining character at xD2 (which is U+0309).
+    // The sequence of (U+00E2, U+0309) is also encoded as U+1EA9.
+    {"foo\xE2\xD2", "windows-1258", true, "foo\xE1\xBA\xA9"},
+    {"", "iso-8859-1", true, ""},
+});
 TEST(ICUStringConversionsTest, ConvertToUtf8AndNormalize) {
   std::string result;
   for (size_t i = 0; i < std::size(kConvertAndNormalizeCases); ++i) {
diff --git a/base/i18n/string_search_unittest.cc b/base/i18n/string_search_unittest.cc
index 0e3a95d..9f9aeed 100644
--- a/base/i18n/string_search_unittest.cc
+++ b/base/i18n/string_search_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/i18n/string_search.h"
 
 #include <stddef.h>
 
+#include <array>
 #include <string>
 #include <vector>
 
@@ -355,7 +351,7 @@
 
   // Case sensitive.
   {
-    const MatchResult kExpectation[] = {{16, 3}};
+    const auto kExpectation = std::to_array<MatchResult>({{16, 3}});
 
     RepeatingStringSearch searcher(kPattern, kTarget, /*case_sensitive=*/true);
     std::vector<MatchResult> results;
@@ -375,7 +371,7 @@
 
   // Case insensitive.
   {
-    const MatchResult kExpectation[] = {{16, 3}, {41, 3}};
+    const auto kExpectation = std::to_array<MatchResult>({{16, 3}, {41, 3}});
 
     RepeatingStringSearch searcher(kPattern, kTarget, /*case_sensitive=*/false);
     std::vector<MatchResult> results;
diff --git a/base/json/json_reader_unittest.cc b/base/json/json_reader_unittest.cc
index 9fcb497..e0cfdd9 100644
--- a/base/json/json_reader_unittest.cc
+++ b/base/json/json_reader_unittest.cc
@@ -11,6 +11,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <cmath>
 #include <string_view>
 #include <utility>
@@ -827,9 +828,14 @@
 // parser implementation against buffer overflow. Best run with DCHECKs so
 // that the one in NextChar fires.
 TEST_P(JSONReaderTest, InvalidSanity) {
-  const char* const kInvalidJson[] = {
-      "/* test *", "{\"foo\"", "{\"foo\":", "  [", "\"\\u123g\"", "{\n\"eh:\n}",
-  };
+  const auto kInvalidJson = std::to_array<const char*>({
+      "/* test *",
+      "{\"foo\"",
+      "{\"foo\":",
+      "  [",
+      "\"\\u123g\"",
+      "{\n\"eh:\n}",
+  });
 
   for (size_t i = 0; i < std::size(kInvalidJson); ++i) {
     LOG(INFO) << "Sanity test " << i << ": <" << kInvalidJson[i] << ">";
@@ -840,8 +846,8 @@
 }
 
 TEST_P(JSONReaderTest, IllegalTrailingNull) {
-  const char json[] = {'"', 'n', 'u', 'l', 'l', '"', '\0'};
-  std::string json_string(json, sizeof(json));
+  const auto json = std::to_array<char>({'"', 'n', 'u', 'l', 'l', '"', '\0'});
+  std::string json_string(json.data(), sizeof(json));
   auto root = JSONReader::ReadAndReturnValueWithError(json_string);
   EXPECT_FALSE(root.has_value());
   EXPECT_NE("", root.error().message);
@@ -995,11 +1001,12 @@
 }
 
 TEST_P(JSONReaderTest, ParseNumberErrors) {
-  const struct {
+  struct Cases {
     const char* input;
     bool parse_success;
     double value;
-  } kCases[] = {
+  };
+  const auto kCases = std::to_array<Cases>({
       // clang-format off
       {"1", true, 1},
       {"2.", false, 0},
@@ -1011,7 +1018,7 @@
       {"2e+", false, 0},
       {"2e+2", true, 200},
       // clang-format on
-  };
+  });
 
   for (unsigned int i = 0; i < std::size(kCases); ++i) {
     auto test_case = kCases[i];
@@ -1033,7 +1040,7 @@
 }
 
 TEST_P(JSONReaderTest, UnterminatedInputs) {
-  const char* const kCases[] = {
+  const auto kCases = std::to_array<const char*>({
       // clang-format off
       "/",
       "//",
@@ -1052,7 +1059,7 @@
       "\"\\",
       "\"\\/",
       // clang-format on
-  };
+  });
 
   for (unsigned int i = 0; i < std::size(kCases); ++i) {
     auto* test_case = kCases[i];
@@ -1067,11 +1074,12 @@
 }
 
 TEST_P(JSONReaderTest, LineColumnCounting) {
-  const struct {
+  struct Cases {
     const char* input;
     int error_line;
     int error_column;
-  } kCases[] = {
+  };
+  const auto kCases = std::to_array<Cases>({
       // For all but the "q_is_not_etc" case, the error (indicated by ^ in the
       // comments) is seeing a digit when expecting ',' or ']'.
       {
@@ -1125,7 +1133,7 @@
           2,
           4,
       },
-  };
+  });
 
   for (unsigned int i = 0; i < std::size(kCases); ++i) {
     auto test_case = kCases[i];
@@ -1142,18 +1150,19 @@
 TEST_P(JSONReaderTest, ChromiumExtensions) {
   // All of these cases should parse with JSON_PARSE_CHROMIUM_EXTENSIONS but
   // fail with JSON_PARSE_RFC.
-  const struct {
+  struct Cases {
     // The JSON input.
     const char* input;
     // What JSON_* option permits this extension.
     int option;
-  } kCases[] = {
+  };
+  const auto kCases = std::to_array<Cases>({
       {"{ /* comment */ \"foo\": 3 }", JSON_ALLOW_COMMENTS},
       {"{ // comment\n \"foo\": 3 }", JSON_ALLOW_COMMENTS},
       {"[\"\\xAB\"]", JSON_ALLOW_X_ESCAPES},
       {"[\"\n\"]", JSON_ALLOW_NEWLINES_IN_STRINGS},
       {"[\"\r\"]", JSON_ALLOW_NEWLINES_IN_STRINGS},
-  };
+  });
 
   for (size_t i = 0; i < std::size(kCases); ++i) {
     SCOPED_TRACE(testing::Message() << "case " << i);
diff --git a/base/json/string_escape_unittest.cc b/base/json/string_escape_unittest.cc
index 0a4106e4..d5e3f19 100644
--- a/base/json/string_escape_unittest.cc
+++ b/base/json/string_escape_unittest.cc
@@ -6,6 +6,8 @@
 
 #include <stddef.h>
 
+#include <array>
+
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -13,10 +15,11 @@
 namespace base {
 
 TEST(JSONStringEscapeTest, EscapeUTF8) {
-  const struct {
+  struct Cases {
     const char* to_escape;
     const char* escaped;
-  } cases[] = {
+  };
+  const auto cases = std::to_array<Cases>({
       {"\b\001aZ\"\\wee", "\\b\\u0001aZ\\\"\\\\wee"},
       {"a\b\f\n\r\t\v\1\\.\"z", "a\\b\\f\\n\\r\\t\\u000B\\u0001\\\\.\\\"z"},
       {"b\x0f\x7f\xf0\xff!",  // \xf0\xff is not a valid UTF-8 unit.
@@ -62,7 +65,7 @@
       {"\xF3\xBF\xBF\xBF", "\xF3\xBF\xBF\xBF"},  // U+0FFFFF
       {"\xF4\x8F\xBF\xBE", "\xF4\x8F\xBF\xBE"},  // U+10FFFE
       {"\xF4\x8F\xBF\xBF", "\xF4\x8F\xBF\xBF"},  // U+10FFFF
-  };
+  });
 
   for (const auto& i : cases) {
     const char* in_ptr = i.to_escape;
@@ -108,10 +111,11 @@
 }
 
 TEST(JSONStringEscapeTest, EscapeUTF16) {
-  const struct {
+  struct Cases {
     const wchar_t* to_escape;
     const char* escaped;
-  } cases[] = {
+  };
+  const auto cases = std::to_array<Cases>({
       {L"b\uffb1\u00ff", "b\xEF\xBE\xB1\xC3\xBF"},
       {L"\b\001aZ\"\\wee", "\\b\\u0001aZ\\\"\\\\wee"},
       {L"a\b\f\n\r\t\v\1\\.\"z", "a\\b\\f\\n\\r\\t\\u000B\\u0001\\\\.\\\"z"},
@@ -157,7 +161,7 @@
       {L"\U000FFFFF", "\xF3\xBF\xBF\xBF"},  // U+0FFFFF
       {L"\U0010FFFE", "\xF4\x8F\xBF\xBE"},  // U+10FFFE
       {L"\U0010FFFF", "\xF4\x8F\xBF\xBF"},  // U+10FFFF
-  };
+  });
 
   for (const auto& i : cases) {
     std::u16string in = WideToUTF16(i.to_escape);
diff --git a/base/metrics/histogram_threadsafe_unittest.cc b/base/metrics/histogram_threadsafe_unittest.cc
index e4d8f52e..d04c89a 100644
--- a/base/metrics/histogram_threadsafe_unittest.cc
+++ b/base/metrics/histogram_threadsafe_unittest.cc
@@ -1,11 +1,8 @@
 // Copyright 2023 The Chromium Authors
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
 
+#include <array>
 #include <memory>
 #include <set>
 #include <string>
@@ -399,7 +396,7 @@
     std::vector<subtle::Atomic32> real_bucket_counts(kHistogramMax, 0);
     subtle::Atomic32 snapshots_total_samples_count = 0;
     std::vector<subtle::Atomic32> snapshots_bucket_counts(kHistogramMax, 0);
-    std::unique_ptr<SnapshotDeltaThread> threads[kNumThreads];
+    std::array<std::unique_ptr<SnapshotDeltaThread>, kNumThreads> threads;
     for (size_t i = 0; i < kNumThreads; ++i) {
       threads[i] = std::make_unique<SnapshotDeltaThread>(
           StringPrintf("SnapshotDeltaThread.%zu.%zu", iteration, i),
diff --git a/base/metrics/metrics_hashes_unittest.cc b/base/metrics/metrics_hashes_unittest.cc
index f7500638..93da35a 100644
--- a/base/metrics/metrics_hashes_unittest.cc
+++ b/base/metrics/metrics_hashes_unittest.cc
@@ -2,16 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/metrics/metrics_hashes.h"
 
 #include <stddef.h>
 #include <stdint.h>
 
+#include <array>
+
 #include "base/format_macros.h"
 #include "base/strings/stringprintf.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -21,14 +18,15 @@
 // Make sure our ID hashes are the same as what we see on the server side.
 TEST(MetricsHashesTest, HashMetricName) {
   // The cases must match those in //tools/metrics/ukm/codegen_test.py.
-  static const struct {
+  struct Cases {
     std::string input;
     std::string output;
-  } cases[] = {
+  };
+  static const auto cases = std::to_array<Cases>({
       {"Back", "0x0557fa923dcee4d0"},
       {"NewTab", "0x290eb683f96572f1"},
       {"Forward", "0x67d2f6740a8eaebf"},
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     uint64_t hash = HashMetricName(cases[i].input);
@@ -39,14 +37,15 @@
 
 TEST(MetricsHashesTest, HashMetricNameAs32Bits) {
   // The cases must match those in //tools/metrics/ukm/codegen_test.py.
-  static const struct {
+  struct Cases {
     std::string input;
     std::string output;
-  } cases[] = {
+  };
+  static const auto cases = std::to_array<Cases>({
       {"Back", "0x0557fa92"},
       {"NewTab", "0x290eb683"},
       {"Forward", "0x67d2f674"},
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     uint32_t hash = HashMetricNameAs32Bits(cases[i].input);
diff --git a/base/metrics/sparse_histogram_unittest.cc b/base/metrics/sparse_histogram_unittest.cc
index 20f6ac1..cd7c289 100644
--- a/base/metrics/sparse_histogram_unittest.cc
+++ b/base/metrics/sparse_histogram_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/metrics/sparse_histogram.h"
 
+#include <array>
 #include <memory>
 #include <string>
 #include <string_view>
@@ -430,17 +426,18 @@
 }
 
 TEST_P(SparseHistogramTest, ExtremeValues) {
-  static const struct {
+  struct Cases {
     Histogram::Sample sample;
     int64_t expected_max;
-  } cases[] = {
+  };
+  static const auto cases = std::to_array<Cases>({
       // Note: We use -2147483647 - 1 rather than -2147483648 because the later
       // is interpreted as - operator applied to 2147483648 and the latter can't
       // be represented as an int32 and causes a warning.
       {-2147483647 - 1, -2147483647LL},
       {0, 1},
       {2147483647, 2147483648LL},
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     HistogramBase* histogram =
diff --git a/base/moving_window_unittest.cc b/base/moving_window_unittest.cc
index a99745e0..36532b8 100644
--- a/base/moving_window_unittest.cc
+++ b/base/moving_window_unittest.cc
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/moving_window.h"
 
+#include <array>
+
 #include "base/time/time.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -16,10 +13,11 @@
 
 namespace {
 
-constexpr int kTestValues[] = {
+constexpr auto kTestValues = std::to_array<int>({
     33, 1, 2, 7, 5, 2, 4, 45, 1000, 1, 100, 2, 200, 2,  2, 2, 300, 4, 1,
     2,  3, 4, 5, 6, 7, 8, 9,  10,   9, 8,   7, 6,   5,  4, 3, 2,   1, 1,
-    2,  1, 4, 2, 1, 8, 1, 2,  1,    4, 1,   2, 1,   16, 1, 2, 1};
+    2,  1, 4, 2, 1, 8, 1, 2,  1,    4, 1,   2, 1,   16, 1, 2, 1,
+});
 
 }  // namespace
 
diff --git a/base/observer_list_perftest.cc b/base/observer_list_perftest.cc
index 49271604..978ddb0e 100644
--- a/base/observer_list_perftest.cc
+++ b/base/observer_list_perftest.cc
@@ -87,31 +87,42 @@
 
   for (int observer_count = 0; observer_count <= kMaxObservers;
        observer_count = observer_count ? observer_count * 2 : 1) {
-    typename TestFixture::ObserverListType list;
-    for (int i = 0; i < observer_count; ++i)
-      observers.push_back(std::make_unique<TypeParam>());
-    for (auto& o : observers)
-      list.AddObserver(o.get());
-
-    for (int i = 0; i < kWarmupLaps; ++i) {
-      for (auto& o : list)
-        o.Observe();
-    }
-    g_observer_list_perf_test_counter = 0;
     const int weighted_laps = kLaps / (observer_count + 1);
+    TimeDelta duration;
+    {
+      TimeTicks start;
+      typename TestFixture::ObserverListType list;
+      for (int i = 0; i < observer_count; ++i) {
+        observers.push_back(std::make_unique<TypeParam>());
+      }
+      for (auto& o : observers) {
+        list.AddObserver(o.get());
+      }
 
-    TimeTicks start = TimeTicks::Now();
-    for (int i = 0; i < weighted_laps; ++i) {
-      for (auto& o : list)
-        o.Observe();
+      for (int i = 0; i < kWarmupLaps; ++i) {
+        for (auto& o : list) {
+          o.Observe();
+        }
+      }
+      g_observer_list_perf_test_counter = 0;
+
+      start = TimeTicks::Now();
+      for (int i = 0; i < weighted_laps; ++i) {
+        for (auto& o : list) {
+          o.Observe();
+        }
+      }
+      duration = TimeTicks::Now() - start;
     }
-    TimeDelta duration = TimeTicks::Now() - start;
 
+    // The observers are no longer needed in this iteration, so reset the list
+    // to get ready for the next iteration. Be careful. We cannot invoke
+    // `observers.clear()` before destructing the `list`. Otherwise, we will
+    // see crashes caused by dangling pointers.
     observers.clear();
 
     EXPECT_EQ(observer_count * weighted_laps,
               g_observer_list_perf_test_counter);
-    EXPECT_TRUE(observer_count == 0 || !list.empty());
 
     std::string story_name =
         base::StringPrintf("%s_%d", Pick<TypeParam>::GetName(), observer_count);
diff --git a/base/observer_list_unittest.cc b/base/observer_list_unittest.cc
index 1e13c4e..3b15870 100644
--- a/base/observer_list_unittest.cc
+++ b/base/observer_list_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/observer_list.h"
 
+#include <array>
 #include <memory>
 #include <optional>
 #include <string_view>
@@ -1035,7 +1036,7 @@
 
   ObserverList<UncheckedBase>::Unchecked unsafe_list;
 
-  int counts[2] = {};
+  std::array<int, 2> counts = {};
 
   auto multi_observer = std::make_unique<MultiObserver>(&counts[0], &counts[1]);
   two_list.AddObserver(multi_observer.get());
diff --git a/base/power_monitor/power_monitor_unittest.cc b/base/power_monitor/power_monitor_unittest.cc
index bef5e2c..d7270afb 100644
--- a/base/power_monitor/power_monitor_unittest.cc
+++ b/base/power_monitor/power_monitor_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/power_monitor/power_monitor.h"
 
+#include <array>
 #include <optional>
 
 #include "base/test/power_monitor_test.h"
@@ -40,7 +41,7 @@
 
   PowerMonitorInitialize();
 
-  PowerMonitorTestObserver observers[kObservers];
+  std::array<PowerMonitorTestObserver, kObservers> observers;
   auto* power_monitor = PowerMonitor::GetInstance();
   for (auto& index : observers) {
     power_monitor->AddPowerSuspendObserver(&index);
diff --git a/base/process/process_metrics_unittest.cc b/base/process/process_metrics_unittest.cc
index eb45247..ee3ad126 100644
--- a/base/process/process_metrics_unittest.cc
+++ b/base/process/process_metrics_unittest.cc
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/process/process_metrics.h"
 
 #include <stddef.h>
 #include <stdint.h>
 
+#include <array>
 #include <memory>
 #include <sstream>
 #include <string>
@@ -895,7 +891,7 @@
   ASSERT_GT(initial_threads, 0);
   const int kNumAdditionalThreads = 10;
   {
-    std::unique_ptr<Thread> my_threads[kNumAdditionalThreads];
+    std::array<std::unique_ptr<Thread>, kNumAdditionalThreads> my_threads;
     for (int i = 0; i < kNumAdditionalThreads; ++i) {
       my_threads[i] = std::make_unique<Thread>("GetNumberOfThreadsTest");
       my_threads[i]->Start();
diff --git a/base/profiler/stack_copier_unittest.cc b/base/profiler/stack_copier_unittest.cc
index ee9f2f8..beab359 100644
--- a/base/profiler/stack_copier_unittest.cc
+++ b/base/profiler/stack_copier_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/profiler/stack_copier.h"
 
+#include <array>
 #include <cstring>
 #include <iterator>
 #include <memory>
@@ -53,8 +54,8 @@
 }  // namespace
 
 TEST(StackCopierTest, RewritePointerIfInOriginalStack_InStack) {
-  uintptr_t original_stack[4];
-  uintptr_t stack_copy[4];
+  std::array<uintptr_t, 4> original_stack;
+  std::array<uintptr_t, 4> stack_copy;
   EXPECT_EQ(reinterpret_cast<uintptr_t>(&stack_copy[2]),
             CopyFunctions::RewritePointerIfInOriginalStack(
                 reinterpret_cast<uint8_t*>(&original_stack[0]),
@@ -67,8 +68,8 @@
   // We use this variable only for its address, which is outside of
   // original_stack.
   uintptr_t non_stack_location;
-  uintptr_t original_stack[4];
-  uintptr_t stack_copy[4];
+  std::array<uintptr_t, 4> original_stack;
+  std::array<uintptr_t, 4> stack_copy;
 
   EXPECT_EQ(reinterpret_cast<uintptr_t>(&non_stack_location),
             CopyFunctions::RewritePointerIfInOriginalStack(
diff --git a/base/profiler/stack_sampling_profiler_unittest.cc b/base/profiler/stack_sampling_profiler_unittest.cc
index 820d305..0c13760 100644
--- a/base/profiler/stack_sampling_profiler_unittest.cc
+++ b/base/profiler/stack_sampling_profiler_unittest.cc
@@ -7,6 +7,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <array>
 #include <cstdlib>
 #include <memory>
 #include <set>
@@ -665,7 +666,7 @@
 
   WithTargetThread(
       BindLambdaForTesting([](SamplingProfilerThreadToken target_thread_token) {
-        SamplingParams params[2];
+        std::array<SamplingParams, 2> params;
 
         // Providing an initial delay makes it more likely that both will be
         // scheduled before either starts to run. Once started, samples will
@@ -679,7 +680,7 @@
         params[1].sampling_interval = Milliseconds(1);
         params[1].samples_per_profile = 100000;
 
-        SampleRecordedCounter samples_recorded[std::size(params)];
+        std::array<SampleRecordedCounter, std::size(params)> samples_recorded;
         ModuleCache module_cache1, module_cache2;
         TestProfilerInfo profiler_info0(target_thread_token, params[0],
                                         &module_cache1, &samples_recorded[0]);
diff --git a/base/strings/string_number_conversions_unittest.cc b/base/strings/string_number_conversions_unittest.cc
index 4665bbe..f1e8cd69 100644
--- a/base/strings/string_number_conversions_unittest.cc
+++ b/base/strings/string_number_conversions_unittest.cc
@@ -15,6 +15,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
+#include <array>
 #include <cmath>
 #include <limits>
 #include <string_view>
@@ -702,12 +703,13 @@
 
 // Tests for HexStringToBytes, HexStringToString, HexStringToSpan.
 TEST(StringNumberConversionsTest, HexStringToBytesStringSpan) {
-  static const struct {
+  struct Cases {
     const std::string input;
     const char* output;
     size_t output_len;
     bool success;
-  } cases[] = {
+  };
+  static const auto cases = std::to_array<Cases>({
       {"0", "", 0, false},  // odd number of characters fails
       {"00", "\0", 1, true},
       {"42", "\x42", 1, true},
@@ -725,7 +727,7 @@
       {"0123456789ABCDEF", "\x01\x23\x45\x67\x89\xAB\xCD\xEF", 8, true},
       {"0123456789ABCDEF012345", "\x01\x23\x45\x67\x89\xAB\xCD\xEF\x01\x23\x45",
        11, true},
-  };
+  });
 
   for (size_t test_i = 0; test_i < std::size(cases); ++test_i) {
     const auto& test = cases[test_i];
@@ -790,11 +792,12 @@
 }
 
 TEST(StringNumberConversionsTest, StringToDouble) {
-  static const struct {
+  struct Cases {
     std::string input;
     double output;
     bool success;
-  } cases[] = {
+  };
+  static const auto cases = std::to_array<Cases>({
       // Test different forms of zero.
       {"0", 0.0, true},
       {"+0", 0.0, true},
@@ -868,7 +871,7 @@
       // crbug.org/588726
       {"-0.0010000000000000000000000000000000000000001e-256",
        -1.0000000000000001e-259, true},
-  };
+  });
 
   for (size_t i = 0; i < std::size(cases); ++i) {
     SCOPED_TRACE(
@@ -947,8 +950,16 @@
   EXPECT_EQ(HexEncode(base::span<uint8_t>()), "");
   EXPECT_EQ(HexEncode(std::string()), "");
 
-  const uint8_t kBytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81};
-  EXPECT_EQ(HexEncode(kBytes, sizeof(kBytes)), "01FF02FE038081");
+  const auto kBytes = std::to_array<uint8_t>({
+      0x01,
+      0xff,
+      0x02,
+      0xfe,
+      0x03,
+      0x80,
+      0x81,
+  });
+  EXPECT_EQ(HexEncode(kBytes.data(), sizeof(kBytes)), "01FF02FE038081");
   EXPECT_EQ(HexEncode(kBytes), "01FF02FE038081");  // Implicit span conversion.
 
   const std::string kString = "\x01\xff";
diff --git a/base/strings/utf_offset_string_conversions_unittest.cc b/base/strings/utf_offset_string_conversions_unittest.cc
index de618d2..4fcecb48 100644
--- a/base/strings/utf_offset_string_conversions_unittest.cc
+++ b/base/strings/utf_offset_string_conversions_unittest.cc
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/strings/utf_offset_string_conversions.h"
 
 #include <stddef.h>
 
 #include <algorithm>
+#include <array>
 
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -52,7 +48,8 @@
     char16_t utf16[10];
     size_t input_offset;
     size_t output_offset;
-  } utf16_to_utf8_cases[] = {
+  };
+  auto utf16_to_utf8_cases = std::to_array<UTF16ToUTF8Case>({
       {{}, 0, 0},
       // Converted to 3-byte utf-8 sequences
       {{0x5909, 0x63DB}, 3, kNpos},
@@ -69,7 +66,7 @@
       {{'A', 0xd800, 0xdf00, 'z'}, 2, kNpos},
       {{'A', 0xd800, 0xdf00, 'z'}, 3, 5},
       {{'A', 0xd800, 0xdf00, 'z'}, 4, 6},
-  };
+  });
   for (size_t i = 0; i < std::size(utf16_to_utf8_cases); ++i) {
     size_t offset = utf16_to_utf8_cases[i].input_offset;
     std::vector<size_t> offsets;
@@ -120,7 +117,8 @@
     OffsetAdjuster::Adjustments adjustments;
     adjustments.push_back(OffsetAdjuster::Adjustment(3, 3, 1));
     OffsetAdjuster::AdjustOffsets(adjustments, &offsets);
-    size_t expected_1[] = {0, 1, 2, 3, kNpos, kNpos, 4, 5, 6, 7};
+    auto expected_1 =
+        std::to_array<size_t>({0, 1, 2, 3, kNpos, kNpos, 4, 5, 6, 7});
     EXPECT_EQ(offsets.size(), std::size(expected_1));
     for (size_t i = 0; i < std::size(expected_1); ++i)
       EXPECT_EQ(expected_1[i], offsets[i]);
@@ -137,10 +135,11 @@
     adjustments.push_back(OffsetAdjuster::Adjustment(10, 7, 4));
     adjustments.push_back(OffsetAdjuster::Adjustment(20, 3, 1));
     OffsetAdjuster::AdjustOffsets(adjustments, &offsets);
-    size_t expected_2[] = {
-      0, kNpos, kNpos, 1, 2, kNpos, kNpos, kNpos, 4, 5, 6, kNpos, kNpos, kNpos,
-      kNpos, kNpos, kNpos, 10, 11, 12, 13, kNpos, kNpos, 14
-    };
+    auto expected_2 = std::to_array<size_t>({
+        0,     kNpos, kNpos, 1,     2,     kNpos, kNpos, kNpos,
+        4,     5,     6,     kNpos, kNpos, kNpos, kNpos, kNpos,
+        kNpos, 10,    11,    12,    13,    kNpos, kNpos, 14,
+    });
     EXPECT_EQ(offsets.size(), std::size(expected_2));
     for (size_t i = 0; i < std::size(expected_2); ++i)
       EXPECT_EQ(expected_2[i], offsets[i]);
@@ -157,10 +156,26 @@
     adjustments.push_back(OffsetAdjuster::Adjustment(11, 3, 3));
     adjustments.push_back(OffsetAdjuster::Adjustment(15, 2, 0));
     OffsetAdjuster::AdjustOffsets(adjustments, &offsets);
-    size_t expected_3[] = {
-      0, kNpos, kNpos, 0, 1, kNpos, kNpos, kNpos, 5, 6, 7, 8, kNpos, kNpos, 11,
-      12, kNpos, 12
-    };
+    auto expected_3 = std::to_array<size_t>({
+        0,
+        kNpos,
+        kNpos,
+        0,
+        1,
+        kNpos,
+        kNpos,
+        kNpos,
+        5,
+        6,
+        7,
+        8,
+        kNpos,
+        kNpos,
+        11,
+        12,
+        kNpos,
+        12,
+    });
     EXPECT_EQ(offsets.size(), std::size(expected_3));
     for (size_t i = 0; i < std::size(expected_3); ++i)
       EXPECT_EQ(expected_3[i], offsets[i]);
@@ -178,7 +193,7 @@
     OffsetAdjuster::Adjustments adjustments;
     adjustments.push_back(OffsetAdjuster::Adjustment(3, 3, 1));
     OffsetAdjuster::UnadjustOffsets(adjustments, &offsets);
-    size_t expected_1[] = {0, 1, 2, 3, 6, 7, 8, 9};
+    auto expected_1 = std::to_array<size_t>({0, 1, 2, 3, 6, 7, 8, 9});
     EXPECT_EQ(offsets.size(), std::size(expected_1));
     for (size_t i = 0; i < std::size(expected_1); ++i)
       EXPECT_EQ(expected_1[i], offsets[i]);
@@ -195,9 +210,23 @@
     adjustments.push_back(OffsetAdjuster::Adjustment(10, 7, 4));
     adjustments.push_back(OffsetAdjuster::Adjustment(20, 3, 1));
     OffsetAdjuster::UnadjustOffsets(adjustments, &offsets);
-    size_t expected_2[] = {
-      0, 3, 4, kNpos, 8, 9, 10, kNpos, kNpos, kNpos, 17, 18, 19, 20, 23
-    };
+    auto expected_2 = std::to_array<size_t>({
+        0,
+        3,
+        4,
+        kNpos,
+        8,
+        9,
+        10,
+        kNpos,
+        kNpos,
+        kNpos,
+        17,
+        18,
+        19,
+        20,
+        23,
+    });
     EXPECT_EQ(offsets.size(), std::size(expected_2));
     for (size_t i = 0; i < std::size(expected_2); ++i)
       EXPECT_EQ(expected_2[i], offsets[i]);
@@ -214,11 +243,11 @@
     adjustments.push_back(OffsetAdjuster::Adjustment(11, 3, 3));
     adjustments.push_back(OffsetAdjuster::Adjustment(15, 2, 0));
     OffsetAdjuster::UnadjustOffsets(adjustments, &offsets);
-    size_t expected_3[] = {
-      0,  // this could just as easily be 3
-      4, kNpos, kNpos, kNpos, 8, 9, 10, 11, kNpos, kNpos, 14,
-      15  // this could just as easily be 17
-    };
+    auto expected_3 = std::to_array<size_t>({
+        0,  // this could just as easily be 3
+        4, kNpos, kNpos, kNpos, 8, 9, 10, 11, kNpos, kNpos, 14,
+        15,  // this could just as easily be 17
+    });
     EXPECT_EQ(offsets.size(), std::size(expected_3));
     for (size_t i = 0; i < std::size(expected_3); ++i)
       EXPECT_EQ(expected_3[i], offsets[i]);
diff --git a/base/system/system_monitor_unittest.cc b/base/system/system_monitor_unittest.cc
index 30913a8d..d6d85f6 100644
--- a/base/system/system_monitor_unittest.cc
+++ b/base/system/system_monitor_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
-#include <memory>
-
 #include "base/system/system_monitor.h"
 
+#include <array>
+#include <memory>
+
 #include "base/run_loop.h"
 #include "base/test/mock_devices_changed_observer.h"
 #include "base/test/task_environment.h"
@@ -36,8 +32,8 @@
 TEST_F(SystemMonitorTest, DeviceChangeNotifications) {
   const int kObservers = 5;
 
-  testing::Sequence mock_sequencer[kObservers];
-  MockDevicesChangedObserver observers[kObservers];
+  std::array<testing::Sequence, kObservers> mock_sequencer;
+  std::array<MockDevicesChangedObserver, kObservers> observers;
   for (int index = 0; index < kObservers; ++index) {
     system_monitor_->AddDevicesChangedObserver(&observers[index]);
 
diff --git a/base/task/post_job_unittest.cc b/base/task/post_job_unittest.cc
index a13ec90..a5e1b69 100644
--- a/base/task/post_job_unittest.cc
+++ b/base/task/post_job_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/task/post_job.h"
 
+#include <array>
 #include <atomic>
 #include <iterator>
 #include <numeric>
@@ -71,7 +67,7 @@
   static constexpr size_t kNumTasksToRun = 1000;
   base::test::TaskEnvironment task_environment;
 
-  size_t concurrent_array[kNumConcurrentThreads] = {};
+  std::array<size_t, kNumConcurrentThreads> concurrent_array = {};
   std::atomic_size_t remaining_tasks{kNumTasksToRun};
   base::JobHandle handle = base::PostJob(
       FROM_HERE, {}, BindLambdaForTesting([&](base::JobDelegate* job) {
diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc b/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc
index c8b88de..0c44e60 100644
--- a/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc
+++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc
@@ -598,7 +598,7 @@
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
         clock_.Advance(Seconds(5));
-        MockCallback<OnceClosure> tasks[5];
+        std::array<MockCallback<OnceClosure>, 5> tasks;
 
         // A: Post 5 application tasks, 4 immediate 1 delayed.
         // B: Run one of them (enter active)
@@ -1168,7 +1168,7 @@
               OnThreadControllerActiveBegin);
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
-        MockCallback<OnceClosure> tasks[5];
+        std::array<MockCallback<OnceClosure>, 5> tasks;
 
         // A: Post 2 tasks
         // B: Run one of them (enter active)
@@ -1317,7 +1317,7 @@
               OnThreadControllerActiveBegin);
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
-        MockCallback<OnceClosure> tasks[2];
+        std::array<MockCallback<OnceClosure>, 2> tasks;
         size_t run_level_depth = delegate->RunDepth();
 
         // A: Post 2 application tasks
@@ -1435,7 +1435,7 @@
               OnThreadControllerActiveBegin);
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
-        MockCallback<OnceClosure> tasks[2];
+        std::array<MockCallback<OnceClosure>, 2> tasks;
 
         // A: Post 2 application tasks
         // B: Run one of them (enter active)
@@ -1519,7 +1519,7 @@
               OnThreadControllerActiveBegin);
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
-        MockCallback<OnceClosure> tasks[2];
+        std::array<MockCallback<OnceClosure>, 2> tasks;
         size_t run_level_depth = delegate->RunDepth();
 
         // A: Post 2 application tasks
@@ -1612,7 +1612,7 @@
               OnThreadControllerActiveBegin);
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
-        MockCallback<OnceClosure> tasks[2];
+        std::array<MockCallback<OnceClosure>, 2> tasks;
         size_t run_level_depth = delegate->RunDepth();
 
         // A: Post 1 application task
@@ -1821,7 +1821,7 @@
               OnThreadControllerActiveBegin);
   EXPECT_CALL(*message_pump_, Run(_))
       .WillOnce(Invoke([&](MessagePump::Delegate* delegate) {
-        MockCallback<OnceClosure> tasks[2];
+        std::array<MockCallback<OnceClosure>, 2> tasks;
 
         // A: Post 2 application tasks
         // B: Run the first task
diff --git a/base/task/sequence_manager/work_queue_sets_unittest.cc b/base/task/sequence_manager/work_queue_sets_unittest.cc
index c7968c72..a94f7cc 100644
--- a/base/task/sequence_manager/work_queue_sets_unittest.cc
+++ b/base/task/sequence_manager/work_queue_sets_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/task/sequence_manager/work_queue_sets.h"
 
 #include <stddef.h>
 
+#include <array>
 #include <memory>
 #include <optional>
 
@@ -406,14 +402,14 @@
 TEST_F(WorkQueueSetsTest, CompareDelayedTasksWithSameEnqueueOrder) {
   constexpr int kNumQueues = 3;
 
-  WorkQueue* queues[kNumQueues] = {
+  std::array<WorkQueue*, kNumQueues> queues = {
       NewTaskQueue("queue0", WorkQueue::QueueType::kDelayed),
       NewTaskQueue("queue1", WorkQueue::QueueType::kDelayed),
       NewTaskQueue("queue2", WorkQueue::QueueType::kDelayed),
   };
 
   const EnqueueOrder kEnqueueOrder = EnqueueOrder::FromIntForTesting(5);
-  TaskOrder task_orders[kNumQueues] = {
+  std::array<TaskOrder, kNumQueues> task_orders = {
       TaskOrder::CreateForTesting(kEnqueueOrder, TimeTicks() + Seconds(1),
                                   /*sequence_num=*/4),
       TaskOrder::CreateForTesting(kEnqueueOrder, TimeTicks() + Seconds(2),
@@ -439,7 +435,7 @@
 TEST_F(WorkQueueSetsTest, CompareDelayedTasksWithSameEnqueueOrderAndRunTime) {
   constexpr int kNumQueues = 3;
 
-  WorkQueue* queues[kNumQueues] = {
+  std::array<WorkQueue*, kNumQueues> queues = {
       NewTaskQueue("queue0", WorkQueue::QueueType::kDelayed),
       NewTaskQueue("queue1", WorkQueue::QueueType::kDelayed),
       NewTaskQueue("queue2", WorkQueue::QueueType::kDelayed),
@@ -447,7 +443,7 @@
 
   const EnqueueOrder kEnqueueOrder = EnqueueOrder::FromIntForTesting(5);
   constexpr TimeTicks delayed_run_time = TimeTicks() + Seconds(1);
-  TaskOrder task_orders[kNumQueues] = {
+  std::array<TaskOrder, kNumQueues> task_orders = {
       TaskOrder::CreateForTesting(kEnqueueOrder, delayed_run_time,
                                   /*sequence_num=*/2),
       TaskOrder::CreateForTesting(kEnqueueOrder, delayed_run_time,
@@ -472,7 +468,7 @@
 
 TEST_F(WorkQueueSetsTest, CompareDelayedAndImmediateTasks) {
   constexpr int kNumQueues = 5;
-  WorkQueue* queues[kNumQueues] = {
+  std::array<WorkQueue*, kNumQueues> queues = {
       NewTaskQueue("queue0", WorkQueue::QueueType::kImmediate),
       NewTaskQueue("queue1", WorkQueue::QueueType::kDelayed),
       NewTaskQueue("queue2", WorkQueue::QueueType::kDelayed),
@@ -481,7 +477,7 @@
   };
 
   // TaskOrders in increasing order.
-  TaskOrder task_orders[kNumQueues] = {
+  std::array<TaskOrder, kNumQueues> task_orders = {
       // Immediate.
       TaskOrder::CreateForTesting(EnqueueOrder::FromIntForTesting(10),
                                   TimeTicks(),
diff --git a/base/task/thread_pool/task_source_sort_key_unittest.cc b/base/task/thread_pool/task_source_sort_key_unittest.cc
index 4572267..b154405 100644
--- a/base/task/thread_pool/task_source_sort_key_unittest.cc
+++ b/base/task/thread_pool/task_source_sort_key_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/task/thread_pool/task_source_sort_key.h"
 
+#include <array>
 #include <iterator>
 
 #include "base/task/task_traits.h"
@@ -21,7 +17,7 @@
 namespace {
 
 // Keys are manually ordered from the least important to the most important.
-const TaskSourceSortKey kTestKeys[] = {
+const auto kTestKeys = std::to_array<TaskSourceSortKey>({
     {TaskPriority::BEST_EFFORT, TimeTicks() + Seconds(2000)},
     {TaskPriority::BEST_EFFORT, TimeTicks() + Seconds(1000)},
     {TaskPriority::USER_VISIBLE, TimeTicks() + Seconds(2000), 1},
@@ -30,7 +26,7 @@
     {TaskPriority::USER_VISIBLE, TimeTicks() + Seconds(1000)},
     {TaskPriority::USER_BLOCKING, TimeTicks() + Seconds(2000)},
     {TaskPriority::USER_BLOCKING, TimeTicks() + Seconds(1000)},
-};
+});
 
 }  // namespace
 
diff --git a/base/threading/platform_thread_unittest.cc b/base/threading/platform_thread_unittest.cc
index 9e6080d..e118cff0 100644
--- a/base/threading/platform_thread_unittest.cc
+++ b/base/threading/platform_thread_unittest.cc
@@ -2,15 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/threading/platform_thread.h"
 
 #include <stddef.h>
 
+#include <array>
+
 #include "base/compiler_specific.h"
 #include "base/process/process.h"
 #include "base/synchronization/waitable_event.h"
@@ -81,8 +78,8 @@
 }
 
 TEST(PlatformThreadTest, TrivialJoinTimesTen) {
-  TrivialThread thread[10];
-  PlatformThreadHandle handle[std::size(thread)];
+  std::array<TrivialThread, 10> thread;
+  std::array<PlatformThreadHandle, std::size(thread)> handle;
 
   for (auto& n : thread)
     ASSERT_FALSE(n.run_event().IsSignaled());
@@ -108,8 +105,8 @@
 }
 
 TEST(PlatformThreadTest, TrivialDetachTimesTen) {
-  TrivialThread thread[10];
-  PlatformThreadHandle handle[std::size(thread)];
+  std::array<TrivialThread, 10> thread;
+  std::array<PlatformThreadHandle, std::size(thread)> handle;
 
   for (auto& n : thread)
     ASSERT_FALSE(n.run_event().IsSignaled());
@@ -216,8 +213,8 @@
 TEST(PlatformThreadTest, FunctionTimesTen) {
   PlatformThreadId main_thread_id = PlatformThread::CurrentId();
 
-  FunctionTestThread thread[10];
-  PlatformThreadHandle handle[std::size(thread)];
+  std::array<FunctionTestThread, 10> thread;
+  std::array<PlatformThreadHandle, std::size(thread)> handle;
 
   for (const auto& n : thread)
     ASSERT_FALSE(n.IsRunning());
diff --git a/base/threading/sequence_local_storage_slot_unittest.cc b/base/threading/sequence_local_storage_slot_unittest.cc
index 3410319..a6d447ab 100644
--- a/base/threading/sequence_local_storage_slot_unittest.cc
+++ b/base/threading/sequence_local_storage_slot_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "base/threading/sequence_local_storage_slot.h"
 
+#include <array>
 #include <utility>
 
 #include "base/memory/ptr_util.h"
@@ -162,7 +158,7 @@
 // Verify that the value of a slot is specific to a SequenceLocalStorageMap
 TEST(SequenceLocalStorageSlotMultipleMapTest, EmplaceGetMultipleMapsOneSlot) {
   SequenceLocalStorageSlot<unsigned int> slot;
-  internal::SequenceLocalStorageMap sequence_local_storage_maps[5];
+  std::array<internal::SequenceLocalStorageMap, 5> sequence_local_storage_maps;
 
   // Set the value of the slot to be the index of the current
   // SequenceLocalStorageMaps in the vector
diff --git a/base/threading/thread_local_storage_unittest.cc b/base/threading/thread_local_storage_unittest.cc
index 8a65ac80..0a780500 100644
--- a/base/threading/thread_local_storage_unittest.cc
+++ b/base/threading/thread_local_storage_unittest.cc
@@ -9,6 +9,8 @@
 
 #include "base/threading/thread_local_storage.h"
 
+#include <array>
+
 #include "base/memory/raw_ptr.h"
 #include "base/no_destructor.h"
 #include "base/threading/simple_thread.h"
@@ -289,9 +291,9 @@
   // threads that set the TLS, while the destructor cleans it up.
   // After the threads finish, verify that the value is cleaned up.
   const int kNumThreads = 5;
-  int values[kNumThreads];
-  ThreadLocalStorageRunner* thread_delegates[kNumThreads];
-  DelegateSimpleThread* threads[kNumThreads];
+  std::array<int, kNumThreads> values;
+  std::array<ThreadLocalStorageRunner*, kNumThreads> thread_delegates;
+  std::array<DelegateSimpleThread*, kNumThreads> threads;
 
   // Spawn the threads.
   for (int index = 0; index < kNumThreads; index++) {
diff --git a/base/tools_sanity_unittest.cc b/base/tools_sanity_unittest.cc
index 8b012a02..5aaf695 100644
--- a/base/tools_sanity_unittest.cc
+++ b/base/tools_sanity_unittest.cc
@@ -7,6 +7,8 @@
 #pragma allow_unsafe_buffers
 #endif
 
+#include <array>
+
 // This file contains intentional memory errors, some of which may lead to
 // crashes if the test is ran without special memory testing tools. We use these
 // errors to verify the sanity of the tools.
@@ -234,7 +236,7 @@
   // Intentionally crash to make sure AddressSanitizer is instrumenting
   // the local variables.
   // This test should not be ran on bots.
-  int array[5];
+  std::array<int, 5> array;
   // Work around the OOB warning reported by Clang.
   int* volatile access = &array[5];
   *access = 43;
diff --git a/base/trace_event/process_memory_dump_unittest.cc b/base/trace_event/process_memory_dump_unittest.cc
index d8c69682..dd68a101 100644
--- a/base/trace_event/process_memory_dump_unittest.cc
+++ b/base/trace_event/process_memory_dump_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <memory>
 #include <optional>
 #include <string_view>
@@ -322,7 +323,7 @@
 
   // Finally check that AddSuballocation() has created also the
   // edges between the pictures and the anonymous allocator child dumps.
-  bool found_edge[2]{false, false};
+  std::array<bool, 2> found_edge = {false, false};
   for (const auto& e : pmd->allocator_dumps_edges()) {
     found_edge[0] |= (e.first == pic1_dump->guid() &&
                       e.second.target == anon_node_1_it->second->guid());
diff --git a/base/trace_event/trace_category_unittest.cc b/base/trace_event/trace_category_unittest.cc
index f2ac51f..8663f90 100644
--- a/base/trace_event/trace_category_unittest.cc
+++ b/base/trace_event/trace_category_unittest.cc
@@ -2,13 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
+#include "base/trace_event/trace_category.h"
 
 #include <string.h>
 
+#include <array>
 #include <memory>
 
 #include "base/containers/span.h"
@@ -18,7 +16,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
 #include "base/trace_event/category_registry.h"
-#include "base/trace_event/trace_category.h"
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -133,7 +130,7 @@
 // simultaneously. Should never end up with distinct entries with the same name.
 TEST_F(TraceCategoryTest, ThreadRaces) {
   const int kNumThreads = 32;
-  std::unique_ptr<Thread> threads[kNumThreads];
+  std::array<std::unique_ptr<Thread>, kNumThreads> threads;
   for (int i = 0; i < kNumThreads; i++) {
     threads[i] = std::make_unique<Thread>("test thread");
     threads[i]->Start();
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc
index b27ea94e..45955e73 100644
--- a/base/trace_event/trace_event_unittest.cc
+++ b/base/trace_event/trace_event_unittest.cc
@@ -14,6 +14,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <array>
 #include <cstdlib>
 #include <limits>
 #include <map>
@@ -47,7 +48,6 @@
 #include "build/build_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-
 #include "third_party/perfetto/protos/perfetto/config/chrome/chrome_config.gen.h"  // nogncheck
 
 namespace base::trace_event {
@@ -1197,8 +1197,8 @@
 
   const int num_threads = 4;
   const int num_events = 4000;
-  Thread* threads[num_threads];
-  WaitableEvent* task_complete_events[num_threads];
+  std::array<Thread*, num_threads> threads;
+  std::array<WaitableEvent*, num_threads> task_complete_events;
   for (int i = 0; i < num_threads; i++) {
     threads[i] = new Thread(StringPrintf("Thread %d", i));
     task_complete_events[i] =
diff --git a/base/uuid_unittest.cc b/base/uuid_unittest.cc
index d9b04ca..b6d4771 100644
--- a/base/uuid_unittest.cc
+++ b/base/uuid_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <stdint.h>
 
+#include <array>
 #include <limits>
 #include <set>
 #include <string_view>
@@ -189,8 +190,8 @@
 }
 
 TEST(UuidTest, FormatRandomDataAsV4) {
-  static constexpr uint64_t bytes1a[] = {0x0123456789abcdefull,
-                                         0x5a5a5a5aa5a5a5a5ull};
+  constexpr static const auto bytes1a =
+      std::to_array<uint64_t>({0x0123456789abcdefull, 0x5a5a5a5aa5a5a5a5ull});
   static constexpr uint64_t bytes1b[] = {bytes1a[0], bytes1a[1]};
   static constexpr uint64_t bytes2[] = {0xfffffffffffffffdull,
                                         0xfffffffffffffffeull};
diff --git a/build/config/unsafe_buffers_paths.txt b/build/config/unsafe_buffers_paths.txt
index 2798808..b8676ac 100644
--- a/build/config/unsafe_buffers_paths.txt
+++ b/build/config/unsafe_buffers_paths.txt
@@ -51,15 +51,15 @@
 # See `docs/unsafe_buffers.md`.
 
 -android_webview/
--base/allocator
--base/third_party
+-base/allocator/
+-base/third_party/
 -chrome/browser/ash/chromebox_for_meetings/
 -chrome/browser/ash/policy/
 -chrome/browser/component_updater/
 -chrome/browser/extensions/api/messaging/
 -chrome/browser/extensions/api/printing/
 -chrome/browser/local_discovery/
--chrome/browser/media/webrtc
+-chrome/browser/media/webrtc/
 -chrome/browser/platform_experience/win/
 -chrome/browser/thumbnail/
 -chrome/browser/ui/android/hats/
@@ -79,10 +79,10 @@
 -chromeos/ash/components/memory/userspace_swap/
 -chromeos/ash/components/system/
 -chromeos/ash/services/libassistant/
--chromeos/components/kcer/kcer_nss
+-chromeos/components/kcer/kcer_nss/
 -clank/
 -components/allocation_recorder/
--components/chromeos_camera
+-components/chromeos_camera/
 -components/commerce/
 -components/crash/
 -components/cronet/
@@ -114,13 +114,13 @@
 -testing/iossim/
 -third_party/
 +third_party/blink/
-+third_party/pdfium/core
-+third_party/pdfium/fpdfsdk
-+third_party/pdfium/fxbarcode
-+third_party/pdfium/fxjs
-+third_party/pdfium/xfa
++third_party/pdfium/core/
++third_party/pdfium/fpdfsdk/
++third_party/pdfium/fxbarcode/
++third_party/pdfium/fxjs/
++third_party/pdfium/xfa/
 -tools/
--url/third_party
+-url/third_party/
 -v8/
 
 # Before clearing this directory, make sure to run against a bot running
diff --git a/chrome/VERSION b/chrome/VERSION
index cf100f5..ad41f29 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=133
 MINOR=0
-BUILD=6892
+BUILD=6893
 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/res/layout/dynamic_bottom_tab_strip_toolbar.xml b/chrome/android/features/tab_ui/java/res/layout/dynamic_bottom_tab_strip_toolbar.xml
index d7efcd775..c7a6fe77 100644
--- a/chrome/android/features/tab_ui/java/res/layout/dynamic_bottom_tab_strip_toolbar.xml
+++ b/chrome/android/features/tab_ui/java/res/layout/dynamic_bottom_tab_strip_toolbar.xml
@@ -100,6 +100,7 @@
             android:id="@+id/toolbar_image_tiles_container"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
+            android:paddingEnd="12dp"
             android:minWidth="@dimen/min_touch_target_size"
             android:visibility="gone"
             app:layout_constraintBottom_toBottomOf="parent"
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerUtils.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerUtils.java
index f5b20a3..acc068d5 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerUtils.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerUtils.java
@@ -19,27 +19,9 @@
 import org.chromium.components.tab_groups.TabGroupColorId;
 import org.chromium.ui.util.ColorUtils;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /** Helper class to handle color picker related utilities. */
 public class ColorPickerUtils {
     /**
-     * This method returns the color id list attributed to tab groups specifically.
-     *
-     * @return An array list of ids from 0 to n representing all colors in the palette
-     */
-    public static List<Integer> getTabGroupColorIdList() {
-        // The color ids used here can be found in {@link TabGroupColorId}. Note that it is assumed
-        // the id list is contiguous from 0 to size-1.
-        List<Integer> colors = new ArrayList<>();
-        for (int i = 0; i < TabGroupColorId.NUM_ENTRIES; i++) {
-            colors.add(i);
-        }
-        return colors;
-    }
-
-    /**
      * Get the color corresponding to the color id that is passed in. Adjust the color depending on
      * light/dark/incognito mode as well as dynamic color themes. This function should only be used
      * for retrieving items from the tab group color picker.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
index e8fa35d..4288eb2 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
@@ -38,6 +38,7 @@
 import org.chromium.chrome.browser.tab_ui.RecyclerViewPosition;
 import org.chromium.chrome.browser.tab_ui.TabContentManager;
 import org.chromium.chrome.browser.tab_ui.TabContentManagerThumbnailProvider;
+import org.chromium.chrome.browser.tabmodel.TabGroupColorUtils;
 import org.chromium.chrome.browser.tabmodel.TabGroupModelFilter;
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerCoordinator.ColorPickerLayoutType;
 import org.chromium.chrome.browser.tasks.tab_management.MessageService.MessageType;
@@ -358,7 +359,7 @@
                     }
                 };
 
-        List<Integer> colors = ColorPickerUtils.getTabGroupColorIdList();
+        List<Integer> colors = TabGroupColorUtils.getTabGroupColorIdList();
         mColorPickerCoordinator =
                 new ColorPickerCoordinator(
                         mActivity,
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupVisualDataDialogManager.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupVisualDataDialogManager.java
index 0ab5cf7b..71fcb25 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupVisualDataDialogManager.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupVisualDataDialogManager.java
@@ -23,6 +23,7 @@
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.sync.SyncServiceFactory;
 import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncFeatures;
+import org.chromium.chrome.browser.tabmodel.TabGroupColorUtils;
 import org.chromium.chrome.browser.tabmodel.TabGroupModelFilter;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerCoordinator.ColorPickerLayoutType;
@@ -123,7 +124,7 @@
         AppCompatEditText editTextView = mCustomView.findViewById(R.id.title_input_text);
         editTextView.setText(mDefaultGroupTitle);
 
-        List<Integer> colors = ColorPickerUtils.getTabGroupColorIdList();
+        List<Integer> colors = TabGroupColorUtils.getTabGroupColorIdList();
         // TODO(b/330597857): Allow a dynamic incognito setting for the color picker.
         // Force a false incognito value for the color picker as this modal dialog does not
         // support incognito color themes and should just follow the system theme.
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerMediatorUnitTest.java
index 5208a01..644ab81 100644
--- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerMediatorUnitTest.java
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/ColorPickerMediatorUnitTest.java
@@ -20,6 +20,7 @@
 import org.robolectric.annotation.Config;
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.browser.tabmodel.TabGroupColorUtils;
 import org.chromium.ui.modelutil.PropertyModel;
 
 import java.util.ArrayList;
@@ -39,7 +40,7 @@
     @Before
     public void setUp() {
         mActivity = Robolectric.buildActivity(Activity.class).setup().get();
-        mColorIds = ColorPickerUtils.getTabGroupColorIdList();
+        mColorIds = TabGroupColorUtils.getTabGroupColorIdList();
 
         for (int color : mColorIds) {
             PropertyModel model =
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
index be00a4c79..d434722 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -1047,8 +1047,13 @@
         return mSectionHeaderModel;
     }
 
-    /** @return The {@link View} for this class. */
+    /**
+     * @return The {@link View} for this class.
+     */
+    // TODO(crbug.com/327387704): Remove after uno phase 2 follow-up launch.
+    @Deprecated
     View getSigninPromoView() {
+        assert !ChromeFeatureList.isEnabled(ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP);
         if (mSigninPromoView == null) {
             LayoutInflater inflater = LayoutInflater.from(mRootView.getContext());
             mSigninPromoView =
@@ -1059,7 +1064,7 @@
     }
 
     /** Update header views in the Feed. */
-    void updateHeaderViews(boolean isSignInPromoVisible) {
+    void updateHeaderViews(@Nullable View signinPromoView) {
         if (!mMediator.hasStreams()) return;
 
         List<View> headers = new ArrayList<>();
@@ -1069,8 +1074,9 @@
 
         headers.add(mSectionHeaderView);
 
-        if (isSignInPromoVisible) {
-            headers.add(getSigninPromoView());
+        if (signinPromoView != null) {
+            mSigninPromoView = signinPromoView;
+            headers.add(signinPromoView);
         }
         setHeaders(headers);
     }
@@ -1083,10 +1089,6 @@
         mMediator = mediator;
     }
 
-    public View getSignInPromoViewForTesting() {
-        return getSigninPromoView();
-    }
-
     public View getSectionHeaderViewForTesting() {
         return mSectionHeaderView;
     }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
index b2689c0..6002cfdb 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
@@ -11,6 +11,7 @@
 import android.content.res.Resources;
 import android.os.Handler;
 import android.view.View;
+import android.view.ViewGroup;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -52,6 +53,8 @@
 import org.chromium.chrome.browser.ui.signin.PersonalizedSigninPromoView;
 import org.chromium.chrome.browser.ui.signin.SyncPromoController;
 import org.chromium.chrome.browser.ui.signin.account_picker.AccountPickerBottomSheetStrings;
+import org.chromium.chrome.browser.ui.signin.signin_promo.NtpSigninPromoDelegate;
+import org.chromium.chrome.browser.ui.signin.signin_promo.SigninPromoCoordinator;
 import org.chromium.chrome.browser.xsurface.ListLayoutHelper;
 import org.chromium.chrome.browser.xsurface.feed.FeedUserInteractionReliabilityLogger.ClosedReason;
 import org.chromium.chrome.browser.xsurface.feed.StreamType;
@@ -134,11 +137,12 @@
     }
 
     /**
-     * The {@link SignInPromo} for the Feed.
-     * TODO(huayinz): Update content and visibility through a ModelChangeProcessor.
+     * The {@link SignInPromo} for the Feed. TODO(huayinz): Update content and visibility through a
+     * ModelChangeProcessor.
      */
-    private class FeedSignInPromo extends SignInPromo {
-        FeedSignInPromo(SigninManager signinManager, SyncPromoController syncPromoController) {
+    private class LegacyFeedSignInPromo extends SignInPromo {
+        LegacyFeedSignInPromo(
+                SigninManager signinManager, SyncPromoController syncPromoController) {
             super(signinManager, syncPromoController);
             maybeUpdateSignInPromo();
         }
@@ -148,7 +152,7 @@
             if (isVisible() == visible) return;
 
             super.setVisibilityInternal(visible);
-            mCoordinator.updateHeaderViews(visible);
+            mCoordinator.updateHeaderViews(visible ? mCoordinator.getSigninPromoView() : null);
             maybeUpdateSignInPromo();
         }
 
@@ -175,7 +179,65 @@
         @Override
         public void onDismissPromo() {
             super.onDismissPromo();
-            mCoordinator.updateHeaderViews(false);
+            mCoordinator.updateHeaderViews(/* signinPromoView= */ null);
+        }
+    }
+
+    /**
+     * Wrapper class on top of {@link SigninPromoCoordinator} to also account for suggestions
+     * available signal.
+     */
+    private class FeedSigninPromo {
+        private final SigninPromoCoordinator mSigninPromoCoordinator;
+        private final View mPromoView;
+        private boolean mCanShowPersonalizedSuggestions;
+        private boolean mCanShowPromo;
+
+        FeedSigninPromo(boolean canShowPersonalizedSuggestions) {
+            mSigninPromoCoordinator =
+                    new SigninPromoCoordinator(
+                            mContext,
+                            mProfile,
+                            new NtpSigninPromoDelegate(
+                                    mContext,
+                                    mProfile,
+                                    SigninAndHistorySyncActivityLauncherImpl.get(),
+                                    this::onPromoStateChange));
+            mCanShowPersonalizedSuggestions = canShowPersonalizedSuggestions;
+            mCanShowPromo =
+                    mSigninPromoCoordinator.canShowPromo() && mCanShowPersonalizedSuggestions;
+
+            mPromoView = mSigninPromoCoordinator.buildPromoView((ViewGroup) mCoordinator.getView());
+            mSigninPromoCoordinator.setView(mPromoView);
+        }
+
+        boolean canShowPromo() {
+            return mCanShowPromo;
+        }
+
+        View getPromoView() {
+            return mPromoView;
+        }
+
+        void setCanShowPersonalizedSuggestions(boolean canShow) {
+            mCanShowPersonalizedSuggestions = canShow;
+            onPromoStateChange();
+        }
+
+        void destroy() {
+            mSigninPromoCoordinator.destroy();
+            mCoordinator.updateHeaderViews(/* signinPromoView= */ null);
+        }
+
+        void onPromoStateChange() {
+            boolean canShowPromo =
+                    mSigninPromoCoordinator.canShowPromo() && mCanShowPersonalizedSuggestions;
+            if (mCanShowPromo == canShowPromo) {
+                return;
+            }
+
+            mCanShowPromo = canShowPromo;
+            mCoordinator.updateHeaderViews(mCanShowPromo ? mPromoView : null);
         }
     }
 
@@ -229,7 +291,8 @@
     private HasContentListener mHasContentListener;
     private ContentChangedListener mStreamContentChangedListener;
     private MemoryPressureCallback mMemoryPressureCallback;
-    private @Nullable SignInPromo mSignInPromo;
+    private @Nullable FeedSigninPromo mSigninPromo;
+    private @Nullable SignInPromo mLegacySignInPromo;
     private RecyclerViewAnimationFinishDetector mRecyclerViewAnimationFinishDetector =
             new RecyclerViewAnimationFinishDetector();
 
@@ -803,7 +866,13 @@
 
     private void initStreamHeaderViews() {
         boolean signInPromoVisible = shouldShowSigninPromo();
-        mCoordinator.updateHeaderViews(signInPromoVisible);
+        if (signInPromoVisible && mSigninPromo != null) {
+            mCoordinator.updateHeaderViews(mSigninPromo.getPromoView());
+        } else if (signInPromoVisible && mLegacySignInPromo != null) {
+            mCoordinator.updateHeaderViews(mCoordinator.getSigninPromoView());
+        } else {
+            mCoordinator.updateHeaderViews(/* signinPromoView= */ null);
+        }
     }
 
     /**
@@ -812,26 +881,38 @@
      * @return Whether the SignPromo should be visible.
      */
     private boolean shouldShowSigninPromo() {
-        SyncPromoController.resetNtpSyncPromoLimitsIfHiddenForTooLong();
-        AccountPickerBottomSheetStrings bottomSheetStrings =
-                new AccountPickerBottomSheetStrings.Builder(
-                                R.string.signin_account_picker_bottom_sheet_title)
-                        .build();
-        SyncPromoController promoController =
-                new SyncPromoController(
-                        mProfile,
-                        bottomSheetStrings,
-                        SigninAccessPoint.NTP_FEED_TOP_PROMO,
-                        SyncConsentActivityLauncherImpl.get(),
-                        SigninAndHistorySyncActivityLauncherImpl.get());
-        if (!SignInPromo.shouldCreatePromo() || !promoController.canShowSyncPromo()) {
-            return false;
+        // TODO(crbug.com/327387704): Move SignInPromo.shouldCreatePromo inside FeedSigninPromo
+        //  after phase 2 follow-up launch.
+        boolean shouldCreatePromo = SignInPromo.shouldCreatePromo();
+        if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP)) {
+            if (!shouldCreatePromo) {
+                return false;
+            }
+            if (mSigninPromo == null) {
+                mSigninPromo = new FeedSigninPromo(isSuggestionsVisible());
+            }
+            return mSigninPromo.canShowPromo();
+        } else {
+            AccountPickerBottomSheetStrings bottomSheetStrings =
+                    new AccountPickerBottomSheetStrings.Builder(
+                                    R.string.signin_account_picker_bottom_sheet_title)
+                            .build();
+            SyncPromoController promoController =
+                    new SyncPromoController(
+                            mProfile,
+                            bottomSheetStrings,
+                            SigninAccessPoint.NTP_FEED_TOP_PROMO,
+                            SyncConsentActivityLauncherImpl.get(),
+                            SigninAndHistorySyncActivityLauncherImpl.get());
+            if (!shouldCreatePromo || !promoController.canShowSyncPromo()) {
+                return false;
+            }
+            if (mLegacySignInPromo == null) {
+                mLegacySignInPromo = new LegacyFeedSignInPromo(mSigninManager, promoController);
+                mLegacySignInPromo.setCanShowPersonalizedSuggestions(isSuggestionsVisible());
+            }
+            return mLegacySignInPromo.isVisible();
         }
-        if (mSignInPromo == null) {
-            mSignInPromo = new FeedSignInPromo(mSigninManager, promoController);
-            mSignInPromo.setCanShowPersonalizedSuggestions(isSuggestionsVisible());
-        }
-        return mSignInPromo.isVisible();
     }
 
     /** Clear any dependencies related to the {@link Stream}. */
@@ -847,9 +928,13 @@
         MemoryPressureListener.removeCallback(mMemoryPressureCallback);
         mMemoryPressureCallback = null;
 
-        if (mSignInPromo != null) {
-            mSignInPromo.destroy();
-            mSignInPromo = null;
+        if (mLegacySignInPromo != null) {
+            mLegacySignInPromo.destroy();
+            mLegacySignInPromo = null;
+        }
+        if (mSigninPromo != null) {
+            mSigninPromo.destroy();
+            mSigninPromo = null;
         }
 
         unbindStream();
@@ -948,8 +1033,11 @@
         // Update toggleswitch item, which is last item in list.
         mSectionHeaderModel.set(SectionHeaderListProperties.MENU_MODEL_LIST_KEY, buildMenuItems());
 
-        if (mSignInPromo != null) {
-            mSignInPromo.setCanShowPersonalizedSuggestions(suggestionsVisible);
+        if (mLegacySignInPromo != null) {
+            mLegacySignInPromo.setCanShowPersonalizedSuggestions(suggestionsVisible);
+        }
+        if (mSigninPromo != null) {
+            mSigninPromo.setCanShowPersonalizedSuggestions(suggestionsVisible);
         }
         if (suggestionsVisible) mCoordinator.getSurfaceLifecycleManager().show();
         mStreamContentChanged = true;
@@ -1285,7 +1373,7 @@
     }
 
     public SignInPromo getSignInPromoForTesting() {
-        return mSignInPromo;
+        return mLegacySignInPromo;
     }
 
     void manualRefresh(Callback<Boolean> callback) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java
index e046213d..3702614 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java
@@ -32,6 +32,7 @@
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncServiceFactory;
+import org.chromium.chrome.browser.tabmodel.TabGroupColorUtils;
 import org.chromium.chrome.browser.tabmodel.TabGroupModelFilter;
 import org.chromium.chrome.browser.tabmodel.TabGroupModelFilterObserver;
 import org.chromium.chrome.browser.tabmodel.TabGroupTitleUtils;
@@ -41,7 +42,6 @@
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerCoordinator;
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerCoordinator.ColorPickerLayoutType;
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerType;
-import org.chromium.chrome.browser.tasks.tab_management.ColorPickerUtils;
 import org.chromium.chrome.browser.tasks.tab_management.TabGroupOverflowMenuCoordinator;
 import org.chromium.chrome.browser.tasks.tab_management.TabUiUtils;
 import org.chromium.chrome.tab_ui.R;
@@ -533,7 +533,7 @@
         mColorPickerCoordinator =
                 new ColorPickerCoordinator(
                         mContext,
-                        ColorPickerUtils.getTabGroupColorIdList(),
+                        TabGroupColorUtils.getTabGroupColorIdList(),
                         ((ViewStub) mContentView.findViewById(R.id.color_picker_stub)).inflate(),
                         ColorPickerType.TAB_GROUP,
                         isIncognito,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncher.java
index 70dea85502..5284b22 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncher.java
@@ -105,9 +105,7 @@
     /** Returns whether the omnibox should be focused after launching the incognito tab. */
     public static boolean shouldFocusOmnibox(Intent intent) {
         assert didCreateIntent(intent);
-        return isVerifiedFirstPartyIntent(intent)
-                && ChromeFeatureList.isEnabled(
-                        ChromeFeatureList.FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS);
+        return isVerifiedFirstPartyIntent(intent);
     }
 
     /** Returns if the intent is from a verified first party app. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
index 8b8aa986..3d8884c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
@@ -18,6 +18,7 @@
 import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver;
 import org.chromium.chrome.browser.signin.services.SigninPreferencesManager;
 import org.chromium.chrome.browser.ui.signin.SyncPromoController;
+import org.chromium.chrome.browser.ui.signin.signin_promo.NtpSigninPromoDelegate;
 import org.chromium.components.signin.AccountManagerFacade;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
 import org.chromium.components.signin.AccountsChangeObserver;
@@ -27,8 +28,9 @@
 /**
  * Superclass tracking whether a signin card could be shown.
  *
- * Subclasses are notified when relevant signin status changes.
+ * <p>Subclasses are notified when relevant signin status changes.
  */
+// TODO(crbug.com/327387704): Remove after uno phase 2 follow-up launch.
 public abstract class SignInPromo {
     /** Period for which promos are suppressed if signin is refused in FRE. */
     @VisibleForTesting static final long SUPPRESSION_PERIOD_MS = DateUtils.DAY_IN_MILLIS;
@@ -77,6 +79,7 @@
      * @return Whether the {@link SignInPromo} should be created.
      */
     public static boolean shouldCreatePromo() {
+        NtpSigninPromoDelegate.resetNtpSyncPromoLimitsIfHiddenForTooLong();
         return !sDisablePromoForTests
                 && !ChromeSharedPreferences.getInstance()
                         .readBoolean(ChromePreferenceKeys.SIGNIN_PROMO_NTP_PROMO_DISMISSED, false)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncherTest.java
index 3486dbf..c857f14b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncherTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncherTest.java
@@ -30,7 +30,6 @@
 import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
-import org.chromium.base.test.util.Features.DisableFeatures;
 import org.chromium.base.test.util.Features.EnableFeatures;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.customtabs.CustomTabsConnection;
@@ -87,29 +86,6 @@
     @Feature("Incognito")
     @MediumTest
     @DisabledTest(message = "crbug.com/1237504")
-    @DisableFeatures({ChromeFeatureList.FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS})
-    public void testLaunchIncognitoNewTab_omniboxFocused_disabled_firstParty()
-            throws TimeoutException {
-        ChromeTabbedActivity activity = launchIncognitoTab(true);
-        assertIncognitoTabLaunched(activity, false);
-    }
-
-    @Test
-    @Feature("Incognito")
-    @MediumTest
-    @DisabledTest(message = "crbug.com/1237504")
-    @DisableFeatures({ChromeFeatureList.FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS})
-    public void testLaunchIncognitoNewTab_omniboxFocused_disabled_thirdParty()
-            throws TimeoutException {
-        ChromeTabbedActivity activity = launchIncognitoTab(false);
-        assertIncognitoTabLaunched(activity, false);
-    }
-
-    @Test
-    @Feature("Incognito")
-    @MediumTest
-    @DisabledTest(message = "crbug.com/1237504")
-    @EnableFeatures({ChromeFeatureList.FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS})
     public void testLaunchIncognitoNewTab_omniboxFocused_enabled_thirdParty()
             throws TimeoutException {
         ChromeTabbedActivity activity = launchIncognitoTab(false);
@@ -120,7 +96,6 @@
     @Feature("Incognito")
     @MediumTest
     @DisabledTest(message = "crbug.com/1237504")
-    @EnableFeatures({ChromeFeatureList.FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS})
     public void testLaunchIncognitoNewTab_omniboxFocused_enabled_firstParty()
             throws TimeoutException {
         ChromeTabbedActivity activity = launchIncognitoTab(true);
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 6d0cb47..cadcb54 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
@@ -686,11 +686,13 @@
             sdk_is_greater_than = Build.VERSION_CODES.S_V2,
             message = "https://crbug.com/339896162")
     public void testContinueButtonWithAnAccountOtherThanTheSignedInAccount() {
-        mSigninTestRule.addAccount(TestAccounts.ACCOUNT2);
-        final CoreAccountInfo primaryAccount = mSigninTestRule.addTestAccountThenSignin();
+        final AccountInfo targetPrimaryAccount = TestAccounts.ACCOUNT1;
+        final AccountInfo primaryAccount = TestAccounts.ACCOUNT2;
+        mSigninTestRule.addAccount(targetPrimaryAccount);
+        mSigninTestRule.addAccountThenSignin(primaryAccount);
         Assert.assertNotEquals(
                 "The primary account should be a different account!",
-                TestAccounts.ACCOUNT2.getEmail(),
+                targetPrimaryAccount.getEmail(),
                 primaryAccount.getEmail());
         launchActivityWithFragment();
 
@@ -699,13 +701,13 @@
                         .getActivity()
                         .getString(
                                 R.string.sync_promo_continue_as,
-                                TestAccounts.ACCOUNT2.getGivenName());
+                                targetPrimaryAccount.getGivenName());
         onView(withText(continueAsText)).perform(click());
 
         verify(mFirstRunPageDelegateMock).acceptTermsOfService(true);
         CriteriaHelper.pollUiThread(
                 () -> {
-                    return TestAccounts.ACCOUNT2.equals(
+                    return targetPrimaryAccount.equals(
                             IdentityServicesProvider.get()
                                     .getIdentityManager(ProfileManager.getLastUsedRegularProfile())
                                     .getPrimaryAccountInfo(ConsentLevel.SIGNIN));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java
index 454cbe49..e52f195 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java
@@ -116,6 +116,7 @@
 @EnableFeatures({
     ChromeFeatureList.KID_FRIENDLY_CONTENT_FEED,
     ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS,
+    ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP,
     ChromeFeatureList.FEED_LOW_MEMORY_IMPROVEMENT
 })
 public class FeedSurfaceCoordinatorTest {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java
index f23cf39..d97ae26 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java
@@ -87,7 +87,8 @@
 @EnableFeatures({
     ChromeFeatureList.INTEREST_FEED_V2_HEARTS,
     ChromeFeatureList.WEB_FEED_SORT,
-    ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS
+    ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS,
+    ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP
 })
 public class FeedSurfaceMediatorTest {
     static final @Px int TOOLBAR_HEIGHT = 10;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java
index abc4f8e..fbe5de9 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java
@@ -43,9 +43,7 @@
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.base.test.BaseRobolectricTestRunner;
-import org.chromium.base.test.util.Features.EnableFeatures;
 import org.chromium.chrome.browser.IntentHandler;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.lifecycle.InflationObserver;
 import org.chromium.chrome.browser.lifecycle.LifecycleObserver;
@@ -278,7 +276,6 @@
     }
 
     @Test
-    @EnableFeatures({ChromeFeatureList.FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS})
     public void testLastTabNtp_phone_searchEngineHasLogo_withIntent_incognito() {
         ChromeSharedPreferences.getInstance()
                 .writeInt(
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb
index 7b82f2a7..e8a694a8 100644
--- a/chrome/app/resources/chromium_strings_bg.xtb
+++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Премахване на профила от Chromium</translation>
 <translation id="2210682093923538346">Опасен сайт. Chromium премахна разрешението за известията.</translation>
 <translation id="2236949375853147973">Моята активност</translation>
+<translation id="2238130810669087193">Влезте в Chromium, за да получите адресите си и др. на всичките си устройства. Този адрес ще бъде запазен в профила ви в Google, след като влезете в него.</translation>
 <translation id="2240214816234246077">Не сте посещавали този сайт наскоро. Chromium премахна разрешенията „<ph name="PERMISSION_1" />“ и „<ph name="PERMISSION_2" />“</translation>
 <translation id="2241627712206172106">Ако споделяте компютър, близките и приятелите ви могат да сърфират отделно и да настроят Chromium точно така, както искат.</translation>
 <translation id="2313870531055795960">Проверка на URL адресите в съхраняван в Chromium списък с опасни сайтове. Ако сайт се опита да открадне паролата ви или изтеглите опасен файл от сайт, Chromium може също така да изпрати до „Безопасно сърфиране“ URL адресите и част от съдържанието на страницата.</translation>
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb
index e3500896..c1a6f9d 100644
--- a/chrome/app/resources/chromium_strings_bn.xtb
+++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Chromium থেকে অ্যাকাউন্ট সরান</translation>
 <translation id="2210682093923538346">বিপজ্জনক সাইট। Chromium বিজ্ঞপ্তি পাওয়ার অনুমতি সরিয়ে দিয়েছে।</translation>
 <translation id="2236949375853147973">আমার অ্যাক্টিভিটি</translation>
+<translation id="2238130810669087193">নিজের সব ডিভাইসে ঠিকানা ও আরও অনেক কিছু পেতে, Chromium-এ সাইন-ইন করুন। সাইন-ইন করার পরে, আপনার Google অ্যাকাউন্টে এই ঠিকানা সেভ করা হবে।</translation>
 <translation id="2240214816234246077">আপনি সম্প্রতি ভিজিট করেননি। Chromium <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> সম্পর্কিত অনুমতি সরিয়ে দিয়েছে</translation>
 <translation id="2241627712206172106">যদি আপনি একটি কম্পিউটার শেয়ার করেন, তাহলে বন্ধু ও পরিবারের লোকজন পৃথকভাবে ব্রাউজ করতে পারবেন এবং তাদের ইচ্ছা অনুযায়ী Chromium-এর সেট-আপ করতে পারবেন৷</translation>
 <translation id="2313870531055795960">Chromium-এ স্টোর করা নিরাপদ নয় এমন সাইটের তালিকা থেকে সেগুলির URL গুলি পরীক্ষা করে দেখে। যদি কোনও সাইট আপনার পাসওয়ার্ড চুরি করার চেষ্টা করে বা আপনি কোনও ক্ষতিকারক ফাইল ডাউনলোড করলে, Safe Browsing-এ Chromium পৃষ্ঠার কিছু কন্টেন্ট সহ URL গুলিও হয়ত পাঠাতে পারে।</translation>
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb
index a5b5330..92e3f2a7 100644
--- a/chrome/app/resources/chromium_strings_bs.xtb
+++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -96,7 +96,7 @@
 <translation id="2199210295479376551">Ukloni račun iz Chromiuma</translation>
 <translation id="2210682093923538346">Opasna web lokacija. Chromium je uklonio obavještenja.</translation>
 <translation id="2236949375853147973">Moja aktivnost</translation>
-<translation id="2238130810669087193">Da biste mogli pristupati svojim adresama i drugim podacima na svim svojim uređajima, prijavite se na Chromium. Adresa će se spremiti na vaš Google račun nakon što se prijavite.</translation>
+<translation id="2238130810669087193">Da dobijate adrese i druge stavke na svim svojim uređajima, prijavite se u Chromium. Ova adresa će se sačuvati na Google račun nakon što se prijavite.</translation>
 <translation id="2240214816234246077">Niste je posjetili već neko vrijeme. Chromium je uklonio odobrenja "<ph name="PERMISSION_1" />" i "<ph name="PERMISSION_2" />"</translation>
 <translation id="2241627712206172106">Ako dijelite računar, prijatelji i porodica mogu odvojeno pretraživati i postaviti Chromium na način koji njima odgovara.</translation>
 <translation id="2313870531055795960">Provjerava URL-ove s listom nesigurnih web lokacija pohranjenih u Chromiumu. Ako web lokacija pokuša ukrasti vašu lozinku ili kada preuzimate štetan fajl, Chromium može slati i URL-ove, uključujući dijelove sadržaja stranice, u Sigurno pregledanje.</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb
index a68619bc..b88630d 100644
--- a/chrome/app/resources/chromium_strings_ca.xtb
+++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Suprimeix el compte de Chromium</translation>
 <translation id="2210682093923538346">Lloc web perillós. Chromium ha suprimit les notificacions.</translation>
 <translation id="2236949375853147973">La meva activitat</translation>
+<translation id="2238130810669087193">Per obtenir les teves adreces i altres dades en tots els dispositius, inicia la sessió a Chromium. Aquesta adreça es desarà al teu Compte de Google després d'iniciar-hi la sessió.</translation>
 <translation id="2240214816234246077">No l'has visitat recentment. Chromium ha suprimit <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" />.</translation>
 <translation id="2241627712206172106">Si compartiu un ordinador, els amics i els familiars poden navegar de manera independent i configurar Chromium com vulguin.</translation>
 <translation id="2313870531055795960">Compara els URL amb una llista de llocs web no segurs emmagatzemada a Chromium. Si un lloc web prova de robar-te la contrasenya o si baixes un fitxer maliciós, és possible que Chromium també n'enviï els URL, inclosos fragments de contingut de les pàgines, a Navegació segura.</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb
index 133c77c9..4bd8463 100644
--- a/chrome/app/resources/chromium_strings_cs.xtb
+++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Odstranit účet z prohlížeče Chromium</translation>
 <translation id="2210682093923538346">Nebezpečný web. Prohlížeč Chromium odebral oprávnění zobrazovat oznámení.</translation>
 <translation id="2236949375853147973">Moje aktivita</translation>
+<translation id="2238130810669087193">Pokud své adresy a další položky chcete mít na všech svých zařízeních, přihlaste se do prohlížeče Chromium Tato adresa se po přihlášení uloží do vašeho účtu Google.</translation>
 <translation id="2240214816234246077">V poslední době jste nenavštívili. Prohlížeč Chromium odebral tato oprávnění: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Pokud počítač sdílíte s kamarády a členy rodiny, každý může web procházet samostatně a nastavit si Chromium podle svých požadavků.</translation>
 <translation id="2313870531055795960">Kontroluje adresy URL oproti seznamu nebezpečných webů uloženému v prohlížeči Chromium. Pokud se web pokusí odcizit vám heslo nebo když stáhnete škodlivý soubor, může Chromium Bezpečnému prohlížení odeslat také adresy URL, včetně částí obsahu stránky.</translation>
diff --git a/chrome/app/resources/chromium_strings_cy.xtb b/chrome/app/resources/chromium_strings_cy.xtb
index 8bfb7616..2b2d8528 100644
--- a/chrome/app/resources/chromium_strings_cy.xtb
+++ b/chrome/app/resources/chromium_strings_cy.xtb
@@ -96,6 +96,7 @@
 <translation id="2199210295479376551">Tynnu cyfrif o Chromium</translation>
 <translation id="2210682093923538346">Gwefan beryglus. Mae Chromium wedi tynnu hysbysiadau.</translation>
 <translation id="2236949375853147973">Fy Ngweithgarwch</translation>
+<translation id="2238130810669087193">I gael eich cyfeiriadau a rhagor ar eich holl ddyfeisiau, mewngofnodwch i Chromium. Bydd y cyfeiriad hwn yn cael ei gadw yn eich Cyfrif Google ar ôl i chi fewngofnodi.</translation>
 <translation id="2240214816234246077">Nid ydych wedi ymweld yn ddiweddar. Mae Chromium wedi tynnu <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Os ydych yn rhannu cyfrifiadur, gall ffrindiau a theulu bori ar wahân a gosod Chromium yn yr union ffordd y maent eisiau.</translation>
 <translation id="2313870531055795960">Yn gwirio URL gyda rhestr o wefannau anniogel sydd wedi'u storio yn Chromium. Os yw gwefan yn ceisio dwyn eich cyfrinair, neu pan fyddwch yn lawrlwytho ffeil niweidiol, gall Chromium hefyd anfon URL, gan gynnwys darnau o gynnwys tudalen, i Pori'n Ddiogel.</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb
index 043807e..4dacd85 100644
--- a/chrome/app/resources/chromium_strings_da.xtb
+++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Fjern kontoen fra Chromium</translation>
 <translation id="2210682093923538346">Farligt website. Chromium har fjernet notifikationer.</translation>
 <translation id="2236949375853147973">Min aktivitet</translation>
+<translation id="2238130810669087193">For at kunne se dine adresser m.m. på alle dine enheder skal du logge ind i Chromium. Denne adresse gemmes på din Google-konto, når du er logget ind.</translation>
 <translation id="2240214816234246077">Du har ikke besøgt websitet for nylig. Chromium har fjernet <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Hvis du deler en computer, kan venner og familie browse individuelt og konfigurere Chromium, som de ønsker hver især.</translation>
 <translation id="2313870531055795960">Tjekker webadresser ift. en liste over usikre websites, der er gemt i Chromium. Hvis et website forsøger at stjæle din adgangskode, eller hvis du downloader en skadelig fil, sender Chromium muligvis også webadresser og bl.a. mindre mængder sideindhold til Beskyttet browsing.</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index b981f64..127d796 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -93,6 +93,7 @@
 <translation id="2199210295479376551">Konto aus Chromium entfernen</translation>
 <translation id="2210682093923538346">Gefährliche Website. Chromium hat Berechtigungen für Benachrichtigungen entfernt.</translation>
 <translation id="2236949375853147973">Meine Aktivitäten</translation>
+<translation id="2238130810669087193">Wenn du auf allen deinen Geräten auf deine Adressen und andere Daten zugreifen möchtest, melde dich in Chromium an. Diese Adresse wird in deinem Google-Konto gespeichert, nachdem du dich angemeldet hast.</translation>
 <translation id="2240214816234246077">Du hast diese Website in letzter Zeit nicht besucht. Chromium hat „<ph name="PERMISSION_1" />“ und „<ph name="PERMISSION_2" />“ entfernt.</translation>
 <translation id="2241627712206172106">Bei gemeinsam genutzten Computern können die verschiedenen Personen separat surfen und Chromium jeweils nach ihren Wünschen einrichten.</translation>
 <translation id="2313870531055795960">Prüft URLs anhand einer Liste unsicherer Websites, die in Chromium gespeichert ist. Wenn eine Website versucht, dein Passwort zu stehlen, oder wenn du eine schädliche Datei herunterlädst, kann Chromium auch URLs, einschließlich Teile von Seiteninhalten, an Safe Browsing senden.</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb
index 15f075d..06dc7d8 100644
--- a/chrome/app/resources/chromium_strings_el.xtb
+++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Κατάργηση λογαριασμού από το Chromium</translation>
 <translation id="2210682093923538346">Επικίνδυνος ιστότοπος. Το Chromium κατάργησε ειδοποιήσεις.</translation>
 <translation id="2236949375853147973">Η δραστηριότητά μου</translation>
+<translation id="2238130810669087193">Για να έχετε πρόσβαση στις διευθύνσεις σας και σε άλλα στοιχεία σε όλες τις συσκευές σας, συνδεθείτε στο Chromium. Αυτή η διεύθυνση θα αποθηκευτεί στον Λογαριασμό σας Google μετά τη σύνδεσή σας.</translation>
 <translation id="2240214816234246077">Δεν έχετε επισκεφτεί πρόσφατα τον ιστότοπο. Το Chromium κατάργησε τις άδειες <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Αν χρησιμοποιείτε έναν υπολογιστή από κοινού με άλλα άτομα, οι φίλοι και τα μέλη της οικογένειάς σας μπορούν να περιηγούνται αυτόνομα και να ρυθμίζουν το Chromium ακριβώς όπως θέλουν.</translation>
 <translation id="2313870531055795960">Ελέγχει εάν τα URL περιλαμβάνονται στη λίστα μη ασφαλών ιστοτόπων που είναι αποθηκευμένη στο Chromium. Εάν ένας ιστότοπος προσπαθήσει να υποκλέψει τον κωδικό πρόσβασής σας ή όταν κατεβάζετε ένα επιβλαβές αρχείο, το Chromium μπορεί επίσης να στείλει URL, καθώς και τμήματα του περιεχομένου της σελίδας, στην Ασφαλή περιήγηση.</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb
index 8f7378b..ca5f1c6 100644
--- a/chrome/app/resources/chromium_strings_et.xtb
+++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Eemalda konto Chromiumist</translation>
 <translation id="2210682093923538346">Ohtlik sait. Chromium eemaldas märguanded.</translation>
 <translation id="2236949375853147973">Minu tegevused</translation>
+<translation id="2238130810669087193">Kõigis seadmetes aadresside ja muude võimaluste kasutamiseks logige sisse Chromiumi. See aadress salvestatakse pärast sisselogimist teie Google’i kontole.</translation>
 <translation id="2240214816234246077">Te pole hiljuti külastanud. Chromium eemaldas <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Kui jagate arvutit, saavad sõbrad ja pereliikmed eraldi sirvida ning seadistada Chromiumi just nii, nagu neile meeldib.</translation>
 <translation id="2313870531055795960">Kontrollib URL-e Chromiumi talletatud ohtlike saitide loendi alusel. Kui sait üritab teie parooli varastada või laadite alla kahjuliku faili, võib Chromium saata URL-id ja lehe sisu osad teenusesse Google'i ohutu sirvimine.</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb
index 3078957d..f25a782 100644
--- a/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Kendu kontua Chromium-etik</translation>
 <translation id="2210682093923538346">Webgune arriskutsua. Chromium-ek jakinarazpenak erabiltzeko baimena kendu dio.</translation>
 <translation id="2236949375853147973">Nire jarduerak</translation>
+<translation id="2238130810669087193">Helbideak eta bestelako datuak zure gailu guztietan gordeta edukitzeko, hasi saioa Chromium-en. Saioa hasi ondoren, helbide hau zure Google-ko kontuan gordeko da.</translation>
 <translation id="2240214816234246077">Azkenaldian ez duzu bisitatu webgune hau. Chromium-ek <ph name="PERMISSION_1" /> eta <ph name="PERMISSION_2" /> erabiltzeko baimenak kendu dizkio.</translation>
 <translation id="2241627712206172106">Ordenagailua partekatzen baduzu, lagunek eta familiako kideek euren kontuak erabilita ibil daitezke Interneten, nahi duten moduan.</translation>
 <translation id="2313870531055795960">URLak Chromium-en gordetako webgune ez-seguruen zerrendan dauden ala ez egiaztatzen du. Webguneren bat pasahitza lapurtzen saiatzen bada, edo fitxategi kaltegarriren bat deskargatzen baduzu, baliteke Chromium-ek URLak ere bidaltzea (orriko edukiaren zati batzuk barne) Arakatze segurua eginbideari.</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index 83691b7c..ba4ef81 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Poista tili Chromiumista</translation>
 <translation id="2210682093923538346">Vaarallinen sivusto. Chromium poisti ilmoitukset.</translation>
 <translation id="2236949375853147973">Omat tapahtumat</translation>
+<translation id="2238130810669087193">Kirjaudu sisään Chromiumiin, niin voit käyttää osoitteita ja muita tietoja kaikilla laitteillasi Tämä osoite tallennetaan Google-tilillesi kirjautumisen jälkeen.</translation>
 <translation id="2240214816234246077">Sivut, joilla et ole käynyt viime aikoina. Chromium poisti luvat: <ph name="PERMISSION_1" /> ja <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Jos käytät jaettua tietokonetta, kaverisi ja perheenjäsenesi voivat selata verkkoa omista profiileistaan käsin ja muokata Chromiumista juuri itselleen sopivan.</translation>
 <translation id="2313870531055795960">Tarkistaa URL-osoitteet Chromiumiin tallennetun vaarallisten sivustojen luettelon avulla. Jos sivusto yrittää varastaa salasanaasi tai jos lataat haitallisen tiedoston, Chromium voi myös lähettää Selaussuojan tarkistettavaksi URL-osoitteita, myös osia sivujen sisällöstä.</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb
index 5e07edd..91b8721 100644
--- a/chrome/app/resources/chromium_strings_fil.xtb
+++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -96,6 +96,7 @@
 <translation id="2199210295479376551">Alisin ang account sa Chromium</translation>
 <translation id="2210682093923538346">Mapanganib na site. Inalis ng Chromium ang mga notification.</translation>
 <translation id="2236949375853147973">Aking Aktibidad</translation>
+<translation id="2238130810669087193">Para makuha ang iyong mga address at higit pa sa lahat ng device mo, mag-sign in sa Chromium. Mase-save ang address na ito sa iyong Google Account pagkatapos mong mag-sign in.</translation>
 <translation id="2240214816234246077">Hindi mo ito binisita kamakailan. Inalis ng Chromium ang <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Kung nagpapahiram ka ng computer, ang mga kaibigan at kapamilya ay maaaring mag-browse nang hiwalay at i-set up ang Chromium sa paraang gusto nila.</translation>
 <translation id="2313870531055795960">Sinusuri ang mga URL sa pamamagitan ng listahan ng mga hindi ligtas na site na naka-store sa Chromium. Kung susubukan ng site na nakawin ang iyong password, o kapag nag-download ka ng mapaminsalang file, posible ring magpadala ang Chromium sa Ligtas na Pag-browse ng mga URL, kabilang ang ilang content ng page.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb
index 64788e3..85287754 100644
--- a/chrome/app/resources/chromium_strings_fr.xtb
+++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Retirer le compte de Chromium</translation>
 <translation id="2210682093923538346">Site dangereux. Chromium a supprimé l'autorisation de notification.</translation>
 <translation id="2236949375853147973">Mon activité</translation>
+<translation id="2238130810669087193">Pour accéder à vos adresses et plus encore sur tous vos appareils, connectez-vous à Chromium. Cette adresse sera enregistrée dans votre compte Google une fois que vous vous serez connecté.</translation>
 <translation id="2240214816234246077">Vous n'avez pas consulté le site récemment. Chromium a supprimé les autorisations de <ph name="PERMISSION_2" /> et d'accéder à la <ph name="PERMISSION_1" />.</translation>
 <translation id="2241627712206172106">Si vous partagez un ordinateur avec vos proches, ceux-ci peuvent configurer Chromium comme bon leur semble et naviguer sur le Web à leur manière.</translation>
 <translation id="2313870531055795960">Il vérifie les URL d'après une liste de sites dangereux stockée dans Chromium. Si un site tente de voler votre mot de passe ou si vous téléchargez un fichier dangereux, Chromium peut également envoyer les URL concernées, y compris des extraits du contenu de pages, à la fonctionnalité de navigation sécurisée.</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb
index 2d6ff5c..595ace52 100644
--- a/chrome/app/resources/chromium_strings_it.xtb
+++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -543,7 +543,7 @@
 <translation id="8357820681460164151">Per accedere ai tuoi contenuti del browser Chromium su tutti i tuoi dispositivi, accedi e attiva la sincronizzazione</translation>
 <translation id="8360718212975266891">Per ricevere gli aggiornamenti futuri di Chromium, devi avere Windows 10 o versioni successive. Su questo computer è installato Windows 8.</translation>
 <translation id="8362914115861174987">Traduci in</translation>
-<translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC Tutti i diritti riservati.</translation>
+<translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Tutti i diritti riservati.</translation>
 <translation id="8372327902843331129">Accedi a Chromium per trovare le password e altri dati su tutti i dispositivi. Questa password verrà salvata nel tuo Account Google dopo l'accesso.</translation>
 <translation id="837460953767177950">Dovrai quindi riavviare Chromium.</translation>
 <translation id="8397248745433792218">Chromium consiglia di rimuoverla. <ph name="BEGIN_LINK" />Scopri di più sulle estensioni supportate<ph name="END_LINK" /></translation>
diff --git a/chrome/app/resources/chromium_strings_kk.xtb b/chrome/app/resources/chromium_strings_kk.xtb
index 59afdb02..4b9c4e34 100644
--- a/chrome/app/resources/chromium_strings_kk.xtb
+++ b/chrome/app/resources/chromium_strings_kk.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Аккаунтты Chromium-нен өшіру</translation>
 <translation id="2210682093923538346">Сайт қауіпті. Chromium хабарландыруларды өшірді.</translation>
 <translation id="2236949375853147973">Әрекеттерім</translation>
+<translation id="2238130810669087193">Мекенжайлар мен басқа ақпаратты барлық құрылғыдан алу үшін Chromium аккаунтына кіріңіз. Аккаунтқа кіргеннен кейін, бұл мекенжай Google аккаунтыңызға сақталады.</translation>
 <translation id="2240214816234246077">Жақында кірмедіңіз. Chromium <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> рұқсаттарын өшірді.</translation>
 <translation id="2241627712206172106">Компьютерді бөлісетін болсаңыз, достарыңыз интернетке бөлек кіріп, Chromium жүйесін қалауынша орната алады.</translation>
 <translation id="2313870531055795960">URL мекенжайларын Chromium браузерінде сақталған қауіпсіз емес сайттар тізімімен салыстырып тексереді. Егер сайт құпия сөзіңізді ұрлағысы келсе немесе зиянды файлды жүктеп алсаңыз, Chromium браузері URL мекенжайларын, сондай-ақ бет контенті бөліктерін Safe Browsing қызметіне жіберуі мүмкін.</translation>
diff --git a/chrome/app/resources/chromium_strings_ky.xtb b/chrome/app/resources/chromium_strings_ky.xtb
index 8629934..c3374a2a 100644
--- a/chrome/app/resources/chromium_strings_ky.xtb
+++ b/chrome/app/resources/chromium_strings_ky.xtb
@@ -96,6 +96,7 @@
 <translation id="2199210295479376551">Аккаунтту Chromium'дан өчүрүү</translation>
 <translation id="2210682093923538346">Кооптуу сайт. Chromium билдирмелерди өчүрдү.</translation>
 <translation id="2236949375853147973">Менин аракеттерим</translation>
+<translation id="2238130810669087193">Бардык түзмөктөрүңүздө даректерди жана башка нерселерди алуу үчүн Chromium'га кириңиз. Киргенден кийин бул дарек Google аккаунтуңузда сакталат.</translation>
 <translation id="2240214816234246077">Акыркы убакта кирген жоксуз. Chromium <ph name="PERMISSION_1" /> жана <ph name="PERMISSION_2" /> өчүрдү</translation>
 <translation id="2241627712206172106">Компьютерди бөлүшсөңүз, жакындарыңыз өзүнчө серептеп, Chromium'ду өзүлөрү каалагандай орнотуп алышат.</translation>
 <translation id="2313870531055795960">Chromium'дагы кооптуу сайттардын тизмесиндеги URL даректерин текшерет. Эгер сайт сырсөзүңүздү уурдоого аракет кылса же кооптуу файлды жүктөп алсаңыз, Chromium URL даректерди, анын ичинде барактардагы мазмунду Коопсуз серептөөгө жөнөтүшү мүмкүн.</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb
index c5c83aa..bc6e1c0 100644
--- a/chrome/app/resources/chromium_strings_lv.xtb
+++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -93,6 +93,7 @@
 <translation id="2199210295479376551">Noņemt kontu no pārlūka Chromium</translation>
 <translation id="2210682093923538346">Bīstama vietne. Pārlūkā Chromium tika noņemti paziņojumi.</translation>
 <translation id="2236949375853147973">Manas darbības</translation>
+<translation id="2238130810669087193">Pierakstieties pārlūkā Chromium, lai varētu piekļūt adresēm un citiem datiem visās savās ierīcēs. Šī adrese tiks saglabāta jūsu Google kontā pēc pierakstīšanās.</translation>
 <translation id="2240214816234246077">Pēdējā laikā neesat apmeklējis šo vietni. Pārlūkā Chromium tika noņemtas šādas atļaujas: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Ja jūsu datoru izmanto arī jūsu draugi un ģimenes locekļi, viņi var iestatīt pārlūku Chromium atbilstoši savām vēlmēm un pārlūkot saturu atsevišķos kontos.</translation>
 <translation id="2313870531055795960">Vietrāži URL tiek pārbaudīti, salīdzinot ar nedrošo vietņu sarakstu, kas ir saglabāts pārlūkprogrammā Chromium. Ja kādā vietnē tiek mēģināts nozagt jūsu paroli vai ja jūs lejupielādējat kaitīgu failu, Chromium var arī nosūtīt attiecīgos URL, tostarp lapas satura fragmentus, uz funkciju Droša pārlūkošana.</translation>
diff --git a/chrome/app/resources/chromium_strings_mk.xtb b/chrome/app/resources/chromium_strings_mk.xtb
index 6999458..473fb4e1 100644
--- a/chrome/app/resources/chromium_strings_mk.xtb
+++ b/chrome/app/resources/chromium_strings_mk.xtb
@@ -96,6 +96,7 @@
 <translation id="2199210295479376551">Отстранете ја сметката од Chromium</translation>
 <translation id="2210682093923538346">Опасен сајт. Chromium ги отстрани известувањата.</translation>
 <translation id="2236949375853147973">Моја активност</translation>
+<translation id="2238130810669087193">За да ги добиете адресите и друго на сите ваши уреди, најавете се на Chromium. Откако ќе се најавите, адресава ќе се зачува во вашата сметка на Google.</translation>
 <translation id="2240214816234246077">Не сте отвориле одамна. Chromium ги отстрани следниве дозволи: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Ако го делите компјутерот, пријателите и семејството може одделно да прелистуваат и да го поставуваат Chromium токму како што сакаат.</translation>
 <translation id="2313870531055795960">Ги проверува URL-адресите во список со небезбедни сајтови меморирани во Chromium. Ако некој сајт се обиде да ви ја украде лозинката или кога ќе преземете штетна датотека, Chromium може да испрати и URL-адреси, вклучувајќи и делови од содржините на страницата, во „Безбедно прелистување“.</translation>
diff --git a/chrome/app/resources/chromium_strings_my.xtb b/chrome/app/resources/chromium_strings_my.xtb
index 8d5fa01..58a2120 100644
--- a/chrome/app/resources/chromium_strings_my.xtb
+++ b/chrome/app/resources/chromium_strings_my.xtb
@@ -97,6 +97,7 @@
 <translation id="2199210295479376551">Chromium မှ အကောင့်ကို ဖယ်ရှားရန်</translation>
 <translation id="2210682093923538346">အန္တရာယ်ရှိသည့် ဝဘ်ဆိုက်။ Chromium သည် အကြောင်းကြားချက်များကို ဖယ်ရှားလိုက်သည်။</translation>
 <translation id="2236949375853147973">ကျွန်ုပ်၏လုပ်ဆောင်ချက်</translation>
+<translation id="2238130810669087193">သင့်စက်အားလုံးတွင် လိပ်စာနှင့် အခြားအရာများရယူရန် Chromium သို့ လက်မှတ်ထိုးဝင်ပါ။ လက်မှတ်ထိုးဝင်ပြီးနောက် ဤလိပ်စာကို သင့် Google Account တွင် သိမ်းပါမည်။</translation>
 <translation id="2240214816234246077">လတ်တလော ဝင်ကြည့်ထားခြင်း မရှိပါ။ Chromium သည် <ph name="PERMISSION_1" />၊ <ph name="PERMISSION_2" /> တို့ကို ဖယ်ရှားလိုက်သည်</translation>
 <translation id="2241627712206172106">သင်သည် ကွန်ပျူတာကို မျှသုံးနေသည် ဆိုလျှင်၊ မိတ်ဆွေများ နှင့် မိသားစုသည် သီးခြားစီ ဝင်ကြည့်နိုင်ကြကာ သူတို့ စိတ်ကြိုက် ပုံစံဖြင့် Chromium ကို သတ်မှတ်ပေးနိုင်ကြသည်။</translation>
 <translation id="2313870531055795960">Chromium တွင် သိမ်းဆည်းထားသော လုံခြုံမှုမရှိသည့် ဝဘ်ဆိုက်များ၏ URL များကို စစ်ဆေးပေးသည်။ ဝဘ်ဆိုက်တစ်ခုက သင့်စကားဝှက်ကို ခိုးယူရန် ကြိုးပမ်းလာပါက သို့မဟုတ် အန္တရာယ်ရှိသည့်ဖိုင်တစ်ခုကို သင်ဒေါင်းလုဒ်လုပ်သည့်အခါ Chromium သည် Safe Browsing သို့ URL များအပြင် ဝဘ်ဆိုက်ပါ အကြောင်းအရာအချို့ကို ပို့နိုင်သည်။</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb
index 0311dd34..96d42b3 100644
--- a/chrome/app/resources/chromium_strings_no.xtb
+++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Fjern kontoen fra Chromium</translation>
 <translation id="2210682093923538346">Farlig nettsted. Chromium har fjernet varsler.</translation>
 <translation id="2236949375853147973">Min aktivitet</translation>
+<translation id="2238130810669087193">For å få adressene dine med mer på alle enhetene dine, logg på Chromium. Denne adressen blir lagret i Google-kontoen din når du logger på.</translation>
 <translation id="2240214816234246077">Du har ikke vært her i det siste. Chromium har fjernet <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Hvis du deler en datamaskin med andre, kan venner og familie surfe hver for seg og konfigurere Chromium akkurat slik de vil.</translation>
 <translation id="2313870531055795960">Kontrollerer nettadresser opp mot en liste i Chromium over utrygge nettsteder. Hvis nettsteder prøver å stjele passordet ditt, eller når du laster ned skadelige filer, kan Chromium også sende nettadresser, inkludert deler av sideinnholdet, til Safe Browsing.</translation>
diff --git a/chrome/app/resources/chromium_strings_or.xtb b/chrome/app/resources/chromium_strings_or.xtb
index 5686a7f..c95130a 100644
--- a/chrome/app/resources/chromium_strings_or.xtb
+++ b/chrome/app/resources/chromium_strings_or.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Chromiumରୁ ଆକାଉଣ୍ଟକୁ କାଢ଼ି ଦିଅନ୍ତୁ</translation>
 <translation id="2210682093923538346">ବିପଦଜନକ ସାଇଟ। Chromium ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ କାଢ଼ି ଦେଇଛି</translation>
 <translation id="2236949375853147973">ମୋ କାର୍ଯ୍ୟକଳାପ</translation>
+<translation id="2238130810669087193">ଆପଣଙ୍କର ସମସ୍ତ ଡିଭାଇସରେ ଆପଣଙ୍କ ଠିକଣା ଏବଂ ଆହୁରି ଅନେକ କିଛି ପାଇବାକୁ Chromiumରେ ସାଇନ ଇନ କରନ୍ତୁ। ଆପଣ ସାଇନ ଇନ କରିବା ପରେ ଏହି ଠିକଣା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ ହେବ।</translation>
 <translation id="2240214816234246077">ଆପଣ ବର୍ତ୍ତମାନ ଭିଜିଟ କରିନାହାଁନ୍ତି। Chromium <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />କୁ କାଢ଼ି ଦେଇଛି</translation>
 <translation id="2241627712206172106">ଯଦି ଆପଣ ଗୋଟିଏ କମ୍ପ୍ୟୁଟର୍‍କୁ ସେୟାର୍ କରିବେ, ବନ୍ଧୁମାନେ ଓ ପରିବାର ଲୋକେ ଅଲଗା ଭାବେ ବ୍ରାଉଜ୍ କରିପାରିବେ ଏବଂ ସେମାନଙ୍କ ପସନ୍ଦ ଅନୁସରେ Chromiumକୁ ସେଟ୍-ଅପ୍ କରନ୍ତୁ।</translation>
 <translation id="2313870531055795960">Chromiumରେ ଷ୍ଟୋର କରାଯାଇଥିବା ଅସୁରକ୍ଷିତ ସାଇଟଗୁଡ଼ିକର ଏକ ତାଲିକା ସହିତ URLଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରେ। ଯଦି କୌଣସି ସାଇଟ ଆପଣଙ୍କ ପାସୱାର୍ଡ ଚୋରି କରିବାକୁ ଚେଷ୍ଟା କରେ କିମ୍ବା ଆପଣ ଏକ କ୍ଷତିକାରକ ଫାଇଲ ଡାଉନଲୋଡ କଲେ, ପୃଷ୍ଠାର କିଛି ବିଷୟବସ୍ତୁ ସହିତ URLଗୁଡ଼ିକୁ ମଧ୍ୟ Chromium ସୁରକ୍ଷିତ ବ୍ରାଉଜିଂକୁ ପଠାଇପାରେ।</translation>
@@ -259,7 +260,7 @@
 <translation id="4510853178268397146">ଏହି ଏକ୍ସଟେନସନ ଏହା କିପରି ଡାଟା ସଂଗ୍ରହ ଏବଂ ବ୍ୟବହାର କରେ ପରି ଗୋପନୀୟତା କାର୍ଯ୍ୟଗୁଡ଼ିକ ପବ୍ଲିସ କରିନାହିଁ। ଆପଣ ଏହାକୁ କାଢ଼ି ଦିଅନ୍ତୁ ବୋଲି Chromium ସୁପାରିଶ କରେ।</translation>
 <translation id="452711251841752011">Chromiumକୁ ସ୍ୱାଗତ; ନୂଆ ବ୍ରାଉଜର୍ ୱିଣ୍ଡୋ ଖୋଲାଯାଇଛି</translation>
 <translation id="4531137820806573936">ଆପଣଙ୍କ ପରିପାର୍ଶ୍ୱକୁ ମେପ କରି ଆପଣଙ୍କ ହାତକୁ ଟ୍ରାକ କରିବା ପାଇଁ Chromium ଅନୁମତି ଆବଶ୍ୟକ କରେ</translation>
-<translation id="4534145890176164066">Chromium ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝିପାରେ ଏବଂ ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରିବ</translation>
+<translation id="4534145890176164066">Chromium ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝି ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରେ</translation>
 <translation id="4536805923587466102">ଆପଣ ପୂର୍ବରୁ ଅନ୍ୟ ଏକ Chromium ପ୍ରୋଫାଇଲରେ <ph name="USER_EMAIL_ADDRESS" /> ଭାବେ ସାଇନ ଇନ କରିଛନ୍ତି</translation>
 <translation id="4545268686623374213">ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଅନୁଭୂତିକୁ ଉନ୍ନତ କରିବା ଏବଂ ଜିନିଷଗୁଡ଼ିକୁ ଦ୍ରୁତ କରିବା ପାଇଁ Chromium ଏହି ଟାବକୁ ନିଷ୍କ୍ରିୟ କରିପାରେ।</translation>
 <translation id="454579500955453258">ଏକ ନୂଆ Chromium ପ୍ରୋଫାଇଲରେ ଜାରି ରଖିବେ?</translation>
@@ -475,7 +476,7 @@
 <translation id="7349591376906416160"><ph name="TARGET_URL_HOSTNAME" /> ଆକ୍ସେସ କରିବା ପାଇଁ <ph name="ALTERNATIVE_BROWSER_NAME" />ଖୋଲିବାକୁ ଆପଣଙ୍କର ସିଷ୍ଟମ୍ ଆଡ୍‌ମିନିଷ୍ଟ୍ରେଟର୍ Chromium କନ୍‌ଫିଗର୍ କରିଛନ୍ତି।</translation>
 <translation id="7355355292030546812">ଏହି ଫାଇଲଟି <ph name="USER_EMAIL" /> ସମେତ ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ଏବଂ ସୋସିଆଲ ନେଟୱାର୍କ ଆକାଉଣ୍ଟଗୁଡ଼ିକୁ କ୍ଷତି କରିପାରୁଥିବା ଯୋଗୁଁ Chromium ଏହି ଡାଉନଲୋଡକୁ ବ୍ଲକ କରିଛି</translation>
 <translation id="7384121030444253939">ଏହି ଏକ୍ସଟେନସନ ଆଉ ସପୋର୍ଟ କରୁନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣ ଏହାକୁ କାଢ଼ି ଦେବା ପାଇଁ Chromium ସୁପାରିଶ କରେ।</translation>
-<translation id="7389750180956889333">Chromium ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝିପାରେ ଏବଂ ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରିବ। <ph name="BEGIN_LINK" />Chrome ଅଟୋଫିଲ<ph name="END_LINK" /> ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation>
+<translation id="7389750180956889333">Chromium ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝି ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରେ। <ph name="BEGIN_LINK" />Chrome ଅଟୋଫିଲ<ph name="END_LINK" /> ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation>
 <translation id="7398989605938454041">Chromium ପ୍ରୋଫାଇଲଗୁଡ଼ିକ ସାହାଯ୍ୟରେ ଆପଣ ଆପଣଙ୍କ ସମସ୍ତ Chromium ଷ୍ଟଫକୁ ଅଲଗା କରିପାରିବେ। କାର୍ଯ୍ୟ ଏବଂ ମଜା ମଧ୍ୟରେ ସ୍ପ୍ଲିଟ କରିବାକୁ ଏହା ସହଜ କରିଥାଏ।</translation>
 <translation id="7449453770951226939"><ph name="PAGE_TITLE" /> - Chromium ଡେଭ୍‌ଲପର୍‌</translation>
 <translation id="7450541714075000668">ଟେକ୍ସଟ୍ କପି କରାଯାଇଛି</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb
index cce52db..266556c 100644
--- a/chrome/app/resources/chromium_strings_ru.xtb
+++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -93,6 +93,7 @@
 <translation id="2199210295479376551">Удалить аккаунт из Chromium</translation>
 <translation id="2210682093923538346">Опасный сайт. Браузер Chromium отозвал разрешение на показ уведомлений.</translation>
 <translation id="2236949375853147973">Мои действия</translation>
+<translation id="2238130810669087193">Чтобы синхронизировать адреса и другие данные на всех своих устройствах, войдите в Chromium. Затем этот адрес будет сохранен в аккаунте Google.</translation>
 <translation id="2240214816234246077">Вы давно не посещали сайт. Браузер Chromium отозвал разрешения "<ph name="PERMISSION_1" />" и "<ph name="PERMISSION_2" />".</translation>
 <translation id="2241627712206172106">Если, кроме вас, компьютером пользуется кто-то ещё, например родные или друзья, они тоже смогут настроить Chromium на свой вкус.</translation>
 <translation id="2313870531055795960">Сверяет URL со списком небезопасных сайтов в Chromium. Если вы скачаете вредоносный файл или сайт попытается похитить ваш пароль, Chromium может отправить URL с образцами контента на проверку с помощью Безопасного просмотра.</translation>
diff --git a/chrome/app/resources/chromium_strings_si.xtb b/chrome/app/resources/chromium_strings_si.xtb
index 7fc3de2..e82296d 100644
--- a/chrome/app/resources/chromium_strings_si.xtb
+++ b/chrome/app/resources/chromium_strings_si.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Chromium වෙතින් ගිණුම ඉවත් කරන්න</translation>
 <translation id="2210682093923538346">භයානක අඩවිය. Chromium දැනුම්දීම් ඉවත් කළා.</translation>
 <translation id="2236949375853147973">මගේ ක්‍රියාකාරකම්</translation>
+<translation id="2238130810669087193">ඔබේ සියලු උපාංග මත ඔබේ ලිපින සහ තවත් දේ ලබා ගැනීමට, Chromium වෙත පුරන්න. ඔබ පුරනය වූ පසු මෙම ලිපිනය ඔබේ Google ගිණුම තුළ සුරකිනු ලැබේ.</translation>
 <translation id="2240214816234246077">ඔබ මෑත පැමිණ නැත. Chromium <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ඉවත් කළා</translation>
 <translation id="2241627712206172106">ඔබ පරිගණකයක් හුවමාරු කරන්නේ නම්, මිතුරන්ට සහ පවුලේ අයට වෙනමම බ්‍රව්ස් කළ හැකි අතර ඔවුනට අවශ්‍ය ආකාරයට Chromium සකසා ගත හැකිය.</translation>
 <translation id="2313870531055795960">Chromium තුළ ගබඩා කර ඇති අනාරක්ෂිත වෙබ් අඩවි ලැයිස්තුවක් සමඟ URL පරීක්ෂා කරයි. අඩවියක් ඔබගේ මුරපදය සොරා ගැනීමට උත්සාහ කරන්නේ නම්, හෝ ඔබ හානිකර ගොනුවක් බාගන්නා විට, Chromium පිටු අන්තර්ගතයේ කැබලි ඇතුළුව, URL සුරක්ෂිත බ්‍රවුස් කිරීම වෙත යැවීමටද හැකිය.</translation>
diff --git a/chrome/app/resources/chromium_strings_sq.xtb b/chrome/app/resources/chromium_strings_sq.xtb
index 90d5ca9..29031889 100644
--- a/chrome/app/resources/chromium_strings_sq.xtb
+++ b/chrome/app/resources/chromium_strings_sq.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Hiqe llogarinë nga Chromium</translation>
 <translation id="2210682093923538346">Sajt i rrezikshëm. Chromium ka hequr njoftimet.</translation>
 <translation id="2236949375853147973">Aktiviteti im</translation>
+<translation id="2238130810669087193">Për të marrë adresat etj. në të gjitha pajisjet e tua, identifikohu në Chromium. Kjo adresë do të ruhet në "Llogarinë tënde të Google" pasi të identifikohesh.</translation>
 <translation id="2240214816234246077">Nuk ke vizituar së fundi. Chromium ke hequr lejet (<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />)</translation>
 <translation id="2241627712206172106">Nëse e ndan një kompjuter, miqtë dhe familja mund të shfletojnë veçmas dhe ta konfigurojnë Chromium pikërisht ashtu si dëshirojnë.</translation>
 <translation id="2313870531055795960">Kontrollon URL-të kundrejt një liste sajtesh të pasigurta të ruajtur në Chromium. Nëse një sajt përpiqet të vjedhë fjalëkalimin tënd ose kur shkarkon një skedar të dëmshëm, Chromium mund t'i dërgojë gjithashtu URL-të, duke përfshirë pjesë të përmbajtjes së faqes, te "Shfletimi i sigurt".</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb
index 2c56f7a..64e608cd 100644
--- a/chrome/app/resources/chromium_strings_sr-Latn.xtb
+++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -515,6 +515,7 @@
 <translation id="7877292582355102282"><ph name="BEGIN_BOLD" />Kako možete da upravljate podacima:<ph name="END_BOLD" /> Radi zaštite privatnosti automatski brišemo interesovanja starija od 4 nedelje. Kada nastavite da pregledate, interesovanje će se možda ponovo pojaviti na listi. Možete i da uklanjate interesovanja za koja ne želite da ih Chromium uzima u obzir.</translation>
 <translation id="7888981273428720788">Podesite Chromium kao podrazumevani pregledač</translation>
 <translation id="7934340546140346950">Chromium automatski nadograđuje nebezbedne veze na HTTPS kada je to moguće</translation>
+<translation id="7935734571048689933">Chromium-om se upravlja</translation>
 <translation id="7937630085815544518">Bili ste prijavljeni na Chromium kao <ph name="USER_EMAIL_ADDRESS" />. Koristite isti nalog da biste se ponovo prijavili.</translation>
 <translation id="7975919845073681630">Ovo je sekundarna instalacija Chromium-a pa ne možete da ga podesite kao podrazumevani pregledač.</translation>
 <translation id="7997934263947464652">Dodaci, aplikacije i teme iz nepoznatih izvora mogu da naškode uređaju. Chromium preporučuje da ih instalirate samo iz: <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index 6f8f920..1b1b427 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -515,6 +515,7 @@
 <translation id="7877292582355102282"><ph name="BEGIN_BOLD" />Како можете да управљате подацима:<ph name="END_BOLD" /> Ради заштите приватности аутоматски бришемо интересовања старија од 4 недеље. Када наставите да прегледате, интересовање ће се можда поново појавити на листи. Можете и да уклањате интересовања за која не желите да их Chromium узима у обзир.</translation>
 <translation id="7888981273428720788">Подесите Chromium као подразумевани прегледач</translation>
 <translation id="7934340546140346950">Chromium аутоматски надограђује небезбедне везе на HTTPS када је то могуће</translation>
+<translation id="7935734571048689933">Chromium-ом се управља</translation>
 <translation id="7937630085815544518">Били сте пријављени на Chromium као <ph name="USER_EMAIL_ADDRESS" />. Користите исти налог да бисте се поново пријавили.</translation>
 <translation id="7975919845073681630">Ово је секундарна инсталација Chromium-а па не можете да га подесите као подразумевани прегледач.</translation>
 <translation id="7997934263947464652">Додаци, апликације и теме из непознатих извора могу да нашкоде уређају. Chromium препоручује да их инсталирате само из: <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb
index cf6bfb24..59f4dcc 100644
--- a/chrome/app/resources/chromium_strings_sv.xtb
+++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -96,6 +96,7 @@
 <translation id="2199210295479376551">Ta bort kontot från Chromium</translation>
 <translation id="2210682093923538346">Farlig webbplats. Chromium har tagit bort aviseringar.</translation>
 <translation id="2236949375853147973">Min aktivitet</translation>
+<translation id="2238130810669087193">Logga in i Chromium om du vill få tillgång till dina adresser med mera på alla dina enheter. Adressen sparas i ditt Google-konto när du har loggat in.</translation>
 <translation id="2240214816234246077">Du har inte besökt webbplatsen nyligen. Chromium har tagit bort <ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Om du delar en dator med vänner och familj kan de konfigurera Chromium precis som de vill och surfa separat.</translation>
 <translation id="2313870531055795960">Kontrollera webbadresser mot en lista över osäkra webbplatser i Chromium. Om du utsätts för försök att kapa ditt lösenord på en webbplats eller om du laddar ned en skadlig fil kan webbadresserna skickas från Chromium till Säker webbsökning tillsammans med delar av sidinnehållet.</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb
index 27c2504..605f26df 100644
--- a/chrome/app/resources/chromium_strings_ta.xtb
+++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Chromiumமில் இருந்து கணக்கை அகற்று</translation>
 <translation id="2210682093923538346">ஆபத்தான தளம். அறிவிப்புகள் அனுமதியை Chromium அகற்றிவிட்டது.</translation>
 <translation id="2236949375853147973">எனது செயல்பாடுகள்</translation>
+<translation id="2238130810669087193">முகவரிகள் மற்றும் பலவற்றை உங்கள் சாதனங்கள் எல்லாவற்றிலும் பெற Chromiumமில் உள்நுழையுங்கள். நீங்கள் உள்நுழைந்த பிறகு உங்கள் Google கணக்கில் இந்த முகவரி சேமிக்கப்படும்.</translation>
 <translation id="2240214816234246077">இந்தத் தளத்தை நீங்கள் சமீபத்தில் பார்க்கவில்லை. <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ஆகிய அனுமதிகளை Chromium அகற்றிவிட்டது</translation>
 <translation id="2241627712206172106">நீங்கள் கம்ப்யூட்டரைப் பகிர்ந்தால், நண்பர்களும் குடும்பத்தினரும் தனிப்பட்ட முறையில் உலாவலாம், மேலும் Chromiumமை அவர்கள் விருப்பத்திற்கு ஏற்ப அமைத்துக்கொள்ளலாம்.</translation>
 <translation id="2313870531055795960">Chromiumமில் சேமிக்கப்பட்டுள்ள பாதுகாப்பில்லாத தளங்களின் பட்டியலைப் பயன்படுத்தி URLகளைச் சரிபார்க்கும். ஏதாவதொரு தளம் உங்கள் கடவுச்சொல்லைத் திருட முயன்றாலோ தீங்குவிளைவிக்கும் ஃபைலை நீங்கள் பதிவிறக்கினாலோ Chromium, பாதுகாப்பு உலாவல் விழிப்பூட்டல்களில் பக்க உள்ளடக்கத்தின் சிறிய பகுதிகள் உட்பட URLகளையும் அனுப்பக்கூடும்.</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb
index 1d0ffe0..c57894a 100644
--- a/chrome/app/resources/chromium_strings_tr.xtb
+++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -93,6 +93,7 @@
 <translation id="2199210295479376551">Hesabı Chromium'dan kaldır</translation>
 <translation id="2210682093923538346">Tehlikeli site. Chromium, bildirimleri kaldırdı.</translation>
 <translation id="2236949375853147973">Etkinliğim</translation>
+<translation id="2238130810669087193">Adreslerinizi ve diğer öğelerinizi tüm cihazlarınızda kullanmak için Chromium'da oturum açın. Bu adres, oturum açtıktan sonra Google Hesabınıza kaydedilir.</translation>
 <translation id="2240214816234246077">Son zamanlarda ziyaret etmediniz. Chromium; <ph name="PERMISSION_1" /> ve <ph name="PERMISSION_2" /> iznini kaldırdı.</translation>
 <translation id="2241627712206172106">Bir bilgisayarı paylaşıyorsanız arkadaşlarınız ve aileniz ayrı olarak göz atabilir ve Chromium'u tam olarak istedikleri şekilde ayarlayabilir.</translation>
 <translation id="2313870531055795960">URL'leri, Chromium'da kayıtlı güvenli olmayan siteler listesine göre kontrol eder. Chromium, bir sitenin şifrenizi çalmaya çalışması veya zararlı bir dosya indirmeniz halinde de Güvenli Tarama'ya sayfa içeriğinden parçalarla birlikte URL'ler gönderebilir.</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb
index ba4729f..6204a133 100644
--- a/chrome/app/resources/chromium_strings_uk.xtb
+++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -94,6 +94,7 @@
 <translation id="2199210295479376551">Вилучити обліковий запис із Chromium</translation>
 <translation id="2210682093923538346">Небезпечний сайт. Вебпереглядач Chromium скасував дозвіл показувати сповіщення.</translation>
 <translation id="2236949375853147973">Мої дії</translation>
+<translation id="2238130810669087193">Щоб отримати доступ до адрес і інших даних на всіх пристроях, увійдіть у Chromium. Після входу цю адресу буде збережено в обліковому записі Google.</translation>
 <translation id="2240214816234246077">Останнім часом ви не відвідували цей сайт. Вебпереглядач Chromium скасував такі дозволи: <ph name="PERMISSION_1" /> і <ph name="PERMISSION_2" />.</translation>
 <translation id="2241627712206172106">Якщо вашим комп’ютером користуєтесь не лише ви, а й ваші друзі чи сім’я, вони можуть налаштувати Chromium на свій смак.</translation>
 <translation id="2313870531055795960">Перевіряє URL-адреси за списком шкідливих сайтів, що зберігаються в Chromium. Якщо сайт намагається викрасти ваш пароль або ви завантажуєте шкідливий файл, Chromium також може надсилати в Безпечний перегляд URL-адреси, зокрема уривки контенту сторінки.</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb
index 448a2175..4815d36 100644
--- a/chrome/app/resources/chromium_strings_zh-CN.xtb
+++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -93,6 +93,7 @@
 <translation id="2199210295479376551">从 Chromium 中移除账号</translation>
 <translation id="2210682093923538346">危险网站。Chromium 移除了通知权限。</translation>
 <translation id="2236949375853147973">我的活动记录</translation>
+<translation id="2238130810669087193">如需将您的地址等信息同步到您的所有设备上,请登录 Chromium。登录后,该地址将保存到您的 Google 账号。</translation>
 <translation id="2240214816234246077">您近期未访问过该网站。Chromium 移除了<ph name="PERMISSION_1" />和<ph name="PERMISSION_2" />权限</translation>
 <translation id="2241627712206172106">如果您与亲朋好友共用计算机,他们将能够使用单独的账号进行浏览,并可随心所欲地设置Chromium。</translation>
 <translation id="2313870531055795960">将网址与存储在 Chromium 中的不安全网站列表进行比对。如果某个网站企图窃取您的密码,或者您下载了有害的文件,Chromium 可能还会将相应网址连同少量网页内容发送给“安全浏览”功能。</translation>
diff --git a/chrome/app/resources/chromium_strings_zu.xtb b/chrome/app/resources/chromium_strings_zu.xtb
index 3de998e..981c420 100644
--- a/chrome/app/resources/chromium_strings_zu.xtb
+++ b/chrome/app/resources/chromium_strings_zu.xtb
@@ -95,6 +95,7 @@
 <translation id="2199210295479376551">Susa i-akhawunti kuChromium</translation>
 <translation id="2210682093923538346">Isayithi eyingozi. I-Chromium isuse izaziso.</translation>
 <translation id="2236949375853147973">Umsebenzi Wami</translation>
+<translation id="2238130810669087193">Ukuze uthole amakheli akho nokuningi kuwo wonke amadivayisi akho, ngena ngemvume kuChromium. Leli kheli lizolondolozwa kuGoogle Account yakho ngemva kokungena ngemvume.</translation>
 <translation id="2240214816234246077">Awukavakashi kamuva nje. I-Chromium isuse i-<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
 <translation id="2241627712206172106">Uma wabelana ngekhompyutha, abangani nomndeni bangadlulisa amehlo ngokuhlukile baphinde basethe i-Chrome ngendlela abafuna ngayo nje.</translation>
 <translation id="2313870531055795960">Kuhlola ama-URL anohlu lwamasayithi angaphephile agcinwe ku-Chromium. Uma isayithi lizama ukuntshontsha iphasiwedi yakho, noma uma ulanda ifayela eliyingozi, i-Chromium ingathumela nama-URL, kuhlanganise nokuthile okuqukethwe kulelo khasi, Ekuphequluleni Okuphephile.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 37f593c3..a1ba8496 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -7222,6 +7222,7 @@
 <translation id="6122831415929794347">Skakel Veiligblaai af?</translation>
 <translation id="6124650939968185064">Die volgende uitbreidings is afhanklik van hierdie uitbreiding:</translation>
 <translation id="6124698108608891449">Hierdie werf benodig nog toestemmings.</translation>
+<translation id="6125202119952209826">Sluit aan by oortjiegroep met <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Ongelukkig moet jy weer jou rekening by hierdie <ph name="DEVICE_TYPE" /> voeg.</translation>
 <translation id="6125639926370653692">Maan</translation>
 <translation id="6126601353087978360">Voer asseblief jou terugvoer hier in:</translation>
@@ -7872,6 +7873,7 @@
 <translation id="6607831829715835317">Meer nutsgoed</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> word reeds deur <ph name="DOMAIN" /> bestuur. Om ouerkontroles met 'n ander Google-rekening te gebruik, moet jy ná opstelling afmeld, en dan "Voeg persoon by" op die aanmeldskerm kies.</translation>
 <translation id="6608166463665411119">Stel e-SIM terug</translation>
+<translation id="660846213831377756">Muissleutels</translation>
 <translation id="6608773371844092260">Laat jou kind aan die vingerafdruksensor aan die regterkant van hierdie <ph name="DEVICE_TYPE" /> raak om hul vingerafdruk op te stel. Jou kind se vingerafdrukdata word veilig geberg en verlaat nooit hierdie <ph name="DEVICE_TYPE" /> nie.</translation>
 <translation id="6609478180749378879">Aanmelddata sal op hierdie toestel geberg word nadat jy Incognitomodus verlaat het. Jy sal later weer met jou toestel by hierdie werf kan aanmeld.</translation>
 <translation id="6610002944194042868">Vertaalopsies</translation>
@@ -8677,6 +8679,7 @@
 <translation id="7189451821249468368">Jy het nie genoeg opgraderings om hierdie toestel in te skryf nie. Kontak asseblief die verkoopsafdeling om meer te koop. As jy meen dis 'n fout dat jy hierdie boodskap sien, moet jy asseblief steundienste kontak.</translation>
 <translation id="7189965711416741966">Vingerafdruk is bygevoeg.</translation>
 <translation id="7190883804815364931">Jongste opdatering vir hierdie groep</translation>
+<translation id="7190921792980745354">Blokkeer <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Sommige gesteunde skakels sal steeds in <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> en <ph name="NUMBER_OF_OTHER_APPS" /> ander programme oopmaak.</translation>
 <translation id="7191159667348037">Onbekende drukker (USB)</translation>
 <translation id="7191631508323321927">Voorportaal</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 8d28ee4..8ec3c5b5 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -7215,6 +7215,7 @@
 <translation id="6122831415929794347">የጥንቃቄ አሰሳ ይጥፋ?</translation>
 <translation id="6124650939968185064">የሚከተሉት ቅጥያዎች በዚህ ቅጥያ ላይ ይወሰናሉ፦</translation>
 <translation id="6124698108608891449">ይህ ጣቢያ ተጨማሪ ፈቃዶችን ይፈልጋል።</translation>
+<translation id="6125202119952209826">ከ<ph name="OWNER_FIRST_NAME" /> ጋር የትር ቡድን ይቀላቀላሉ</translation>
 <translation id="6125479973208104919">የአጋጣሚ ነገር ሆኖ መለያዎን እንደገና ወደዚህ <ph name="DEVICE_TYPE" /> ማከል አለብዎት።</translation>
 <translation id="6125639926370653692">ጨረቃ</translation>
 <translation id="6126601353087978360">እባክዎ የእርስዎን ግብረመልስ እዚህ ያስገቡ፦</translation>
@@ -7867,6 +7868,7 @@
 <translation id="6607831829715835317">&amp;ተጨማሪ መሣሪያዎች</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> አስቀድሞ በ<ph name="DOMAIN" /> የሚተዳደር ነው በተለየ የGoogle መለያ የወላጅ መቆጣጠሪያዎችን ለመጠቀም ከቅንብር በኋላ ዘግተው ይውጡ፣ ከዚያ በመለያ መግቢያ ገጹ ላይ «ሰው አክል» የሚለውን ይምረጡ።</translation>
 <translation id="6608166463665411119">ኢሲምን ዳግም አስጀምር</translation>
+<translation id="660846213831377756">የመዳፊት ቁልፎች</translation>
 <translation id="6608773371844092260">የጣት አሻራን ለማዋቀር ከዚህ <ph name="DEVICE_TYPE" /> በቀኝ-እጅ በኩል የሚገኘውን የጣት አሻራ ዳሳሽ ልጅዎ እንዲነካው ያድርጉ። የልጅዎ የጣት አሻራ ውሂብ ደህንነቱ በተጠበቀ ሁኔታ ይከማቻል እና በጭራሽ ከዚህ <ph name="DEVICE_TYPE" /> አይወጣም።</translation>
 <translation id="6609478180749378879">ከማንነትን የማያሳውቅ ሁነታ ከወጡ በኋላ በዚህ መሣሪያ ውስጥ የመለያ መግቢያ ውሂብ ይከማቻል። ቆይተው እንደገና በመሣሪያዎ ወደዚህ ድር ጣቢያ ለመግባት ይችላሉ።</translation>
 <translation id="6610002944194042868">የትርጉም አማራጮች</translation>
@@ -8673,6 +8675,7 @@
 <translation id="7189451821249468368">ይህን መሣሪያ ለማስመዝገብ በቂ ማላቂያዎች የለዎትም። ተጨማሪ ለመግዛት እባክዎ ሽያጭን ያነጋግሩ። ይህን መልዕክት የሚያዩት በስህተት ነው ብለው ካመኑ እባክዎ ድጋፍን ያነጋግሩ።</translation>
 <translation id="7189965711416741966">የጣት አሻራ ታክሏል።</translation>
 <translation id="7190883804815364931">የዚህ ትር የመጨረሻ ዝማኔ</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> ይታገድ?</translation>
 <translation id="7191063546666816478">አንዳንድ የሚደገፉ አገናኞች አሁንም በ<ph name="APP_NAME" />፣ <ph name="APP_NAME_2" />፣ <ph name="APP_NAME_3" /> እና በ<ph name="NUMBER_OF_OTHER_APPS" /> ሌሎች መተግበሪያዎች ውስጥ ይከፈታሉ።</translation>
 <translation id="7191159667348037">ያልታወቀ አታሚ (ዩኤስቢ)</translation>
 <translation id="7191631508323321927">ኮሪደር</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index c0f2c43..a9bbc971 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -7211,6 +7211,7 @@
 <translation id="6122831415929794347">هل المطلوب إيقاف "التصفُّح الآمن"؟</translation>
 <translation id="6124650939968185064">تعتمد الإضافات التالية على هذه الإضافة:</translation>
 <translation id="6124698108608891449">يحتاج هذا الموقع الإلكتروني إلى مزيد من الأذونات.</translation>
+<translation id="6125202119952209826">الانضمام إلى مجموعة علامات التبويب التي تضمّ "<ph name="OWNER_FIRST_NAME" />"</translation>
 <translation id="6125479973208104919">عذرًا، ستحتاج إلى إضافة حسابك إلى جهاز <ph name="DEVICE_TYPE" /> هذا مرة أخرى.</translation>
 <translation id="6125639926370653692">قمر</translation>
 <translation id="6126601353087978360">يُرجى إدخال ملاحظاتك هنا:</translation>
@@ -7869,6 +7870,7 @@
 <translation id="6607831829715835317">المزيد من &amp;الأدوات</translation>
 <translation id="6607890859198268021">‏تتم إدارة حساب <ph name="USER_EMAIL" /> حاليًا من خلال <ph name="DOMAIN" />. لاستخدام أدوات رقابة الأهل مع حساب آخر على Google، يجب تسجيل الخروج من الحساب بعد الانتهاء من الإعداد ثم اختيار "إضافة شخص" على شاشة تسجيل الدخول.</translation>
 <translation id="6608166463665411119">‏إعادة ضبط شريحة eSIM</translation>
+<translation id="660846213831377756">مفاتيح الماوس</translation>
 <translation id="6608773371844092260">لضبط إعدادات بصمة الإصبع، اطلب من طفلك لمس أداة استشعار بصمة الإصبع في الجانب الأيمن من جهاز <ph name="DEVICE_TYPE" /> هذا. يتم تخزين بيانات بصمة إصبع طفلك بشكل آمن وتظلّ محفوظة على جهاز <ph name="DEVICE_TYPE" /> هذا فقط.</translation>
 <translation id="6609478180749378879">سيتم حفظ بيانات تسجيل الدخول على هذا الجهاز بعد الخروج من "وضع التصفُّح المتخفي". وستتمكّن من تسجيل الدخول إلى هذا الموقع الإلكتروني باستخدام جهازك مرة أخرى لاحقًا.</translation>
 <translation id="6610002944194042868">خيارات الترجمة</translation>
@@ -8676,6 +8678,7 @@
 <translation id="7189451821249468368">ليست لديك ترقيات كافية لتسجيل هذا الجهاز. يُرجى التواصل مع قسم المبيعات لشراء المزيد من الترقيات. في حال كنت تعتقد أنك تلقّيت هذه الرسالة عن طريق الخطأ، يُرجى التواصل مع فريق الدعم.</translation>
 <translation id="7189965711416741966">تمت إضافة بصمة إصبع.</translation>
 <translation id="7190883804815364931">آخر تعديل على علامة التبويب هذه</translation>
+<translation id="7190921792980745354">هل تريد حظر "<ph name="MEMBER_FULL_NAME" />"؟</translation>
 <translation id="7191063546666816478">ستظل بعض الروابط المتوافقة مفتوحة في تطبيقات <ph name="APP_NAME" /> و<ph name="APP_NAME_2" /> و<ph name="APP_NAME_3" /> وتطبيقات أخرى يبلغ عددها <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">‏طابعة غير معروفة (USB)</translation>
 <translation id="7191631508323321927">ردهة</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index c707d48..61727d9 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -7218,6 +7218,7 @@
 <translation id="6122831415929794347">সুৰক্ষিত ব্ৰাউজিং অফ কৰিবনে?</translation>
 <translation id="6124650939968185064">তলত উল্লেখ কৰা এক্সটেনশ্বনসমূহে এই এক্সটেনশ্বনৰ ওপৰত নির্ভৰ কৰে :</translation>
 <translation id="6124698108608891449">এই ছাইটটোৰ বাবে অধিক অনুমতিৰ আৱশ্যক।</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" />ৰ সৈতে টেবৰ গোটত যোগদান কৰক</translation>
 <translation id="6125479973208104919">দুৰ্ভাগ্যবশতঃ, আপুনি নিজৰ একাউণ্ট <ph name="DEVICE_TYPE" />ত পুনৰ যোগ কৰিব লাগিব।</translation>
 <translation id="6125639926370653692">চন্দ্ৰ</translation>
 <translation id="6126601353087978360">অনুগ্ৰহ কৰি ইয়াত আপোনাৰ মতামত দিয়ক:</translation>
@@ -7870,6 +7871,7 @@
 <translation id="6607831829715835317">অধিক সঁজু&amp;লি</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" />এ ইতিমধ্যে <ph name="USER_EMAIL" /> পৰিচালনা কৰি আছে। এটা বেলেগ Google একাউণ্টৰ জৰিয়তে অভিভাৱকীয় নিয়ন্ত্ৰণসমূহ ব্যৱহাৰ কৰিবলৈ ছেটআপ কৰাৰ পাছত ছাইন আউট কৰক, তাৰ পাছত ছাইন-ইন স্ক্ৰীনখনত "ব্যক্তি যোগ দিয়ক" বাছনি কৰক।</translation>
 <translation id="6608166463665411119">ই-ছিম ৰিছেট কৰক</translation>
+<translation id="660846213831377756">মাউছ কীসমূহ</translation>
 <translation id="6608773371844092260">ফিংগাৰপ্ৰিণ্ট ছেট আপ কৰিবলৈ আপোনাৰ শিশুক এই <ph name="DEVICE_TYPE" />ৰ সোঁফালে থকা ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো স্পৰ্শ কৰিবলৈ দিয়ক। আপোনাৰ শিশুৰ ফিংগাৰপ্ৰিণ্টৰ ডেটা সুৰক্ষিতভাৱে ষ্ট’ৰ কৰা হয় আৰু সেইখিনি সদায় এই <ph name="DEVICE_TYPE" />ত থাকে।</translation>
 <translation id="6609478180749378879">আপুনি ইনক’গনিট’ ম’ডৰ পৰা বাহিৰ ওলোৱাৰ পাছত এই ডিভাইচটোত ছাইন-ইনৰ ডেটা ষ্ট’ৰ কৰা হ’ব। আপুনি নিজৰ ডিভাইচটোৰ জৰিয়তে এই ৱেবছাইটটোত পাছত পুনৰ ছাইন ইন কৰিব পাৰিব।</translation>
 <translation id="6610002944194042868">অনুবাদৰ বিকল্প</translation>
@@ -8675,6 +8677,7 @@
 <translation id="7189451821249468368">এই ডিভাইচটো পঞ্জীয়ন কৰিবলৈ আপোনাৰ পৰ্যাপ্ত আপগ্ৰে’ড নাই। অধিক ক্ৰয় কৰিবলৈ অনুগ্ৰহ কৰি ক্ৰয় বিভাগৰ সৈতে যোগাযোগ কৰক। আপুনি যদি এই বাৰ্তাটো কোনো আসোঁৱাহৰ বাবে দেখা পাইছে বুলি বিশ্বাস কৰে, তেন্তে অনুগ্ৰহ কৰি সহায় কেন্দ্ৰৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="7189965711416741966">ফিংগাৰপ্ৰিণ্ট যোগ কৰা হ’ল।</translation>
 <translation id="7190883804815364931">এই টেবটোৰ অন্তিম আপডে’ট</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> অৱৰোধ কৰিবনে?</translation>
 <translation id="7191063546666816478"><ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> আৰু অন্য <ph name="NUMBER_OF_OTHER_APPS" /> টা এপত কিছুমান সমৰ্থিত লিংক তথাপিও খুলিব।</translation>
 <translation id="7191159667348037">অজ্ঞাত প্ৰিণ্টাৰ (ইউএছবি)</translation>
 <translation id="7191631508323321927">কৰিড’ৰ</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index d27e81c..3deb36b 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -7203,6 +7203,7 @@
 <translation id="6122831415929794347">Təhlükəsiz Baxış deaktiv edilsin?</translation>
 <translation id="6124650939968185064">Aşağıdakı artırmalar bu artırmadan asılıdır:</translation>
 <translation id="6124698108608891449">Bu sayt daha çox icazə tələb edir.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> ilə tab qrupuna qoşulun</translation>
 <translation id="6125479973208104919">Təəssüf ki, hesabı <ph name="DEVICE_TYPE" /> cihazına yenidən əlavə etməlisiniz.</translation>
 <translation id="6125639926370653692">Ay</translation>
 <translation id="6126601353087978360">Rəyinizi bura daxil edin:</translation>
@@ -7853,6 +7854,7 @@
 <translation id="6607831829715835317">Daha çox alətlər</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> hazırda <ph name="DOMAIN" /> tərəfindən idarə olunur. Başqa Google Hesabı ilə valideyn nəzarətini istifadə etmək üçün ayarlamadan sonra çıxın, sonra giriş ekranında "Şəxs əlavə edin" seçin.</translation>
 <translation id="6608166463665411119">eSIM'i sıfırlayın</translation>
+<translation id="660846213831377756">Maus düymələri</translation>
 <translation id="6608773371844092260">Barmaq izini ayarlamaq üçün uşağınızdan bu <ph name="DEVICE_TYPE" /> cihazının sağ tərəfində olan barmaq izi sensoruna toxunmasını istəyin. Övladınızın barmaq izi datası təhlükəsiz şəkildə saxlanılır və heç vaxt <ph name="DEVICE_TYPE" /> cihazından kənara ötürülmür.</translation>
 <translation id="6609478180749378879">Anonim rejimdən çıxdıqdan sonra giriş datası bu cihazda saxlanılacaq. Bu veb sayta daha sonra cihazınızla yenidən daxil ola biləcəksiniz.</translation>
 <translation id="6610002944194042868">Tərcümə Seçimləri</translation>
@@ -8658,6 +8660,7 @@
 <translation id="7189451821249468368">Bu cihazı qeydiyyata almaq üçün yetərincə güncəlləməniz yoxdur. Daha çoxunu almaq üçün satış şöbəsi ilə əlaqə saxlayın. Bu mesajın səhvən göndərildiyini düünürsünüzsə, dəstək xidməti ilə əlaqə saxlayın.</translation>
 <translation id="7189965711416741966">Barmaq izi əlavə edildi.</translation>
 <translation id="7190883804815364931">Bu tabdakı son yenilik</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> blok edilsin?</translation>
 <translation id="7191063546666816478">Bəzi dəstəklənən keçidlər hələ də <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> və digər <ph name="NUMBER_OF_OTHER_APPS" /> tətbiqdə açılacaq.</translation>
 <translation id="7191159667348037">Naməlum Printer (USB)</translation>
 <translation id="7191631508323321927">Dəhliz</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 2d59fd7..cbc2d58 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -7206,6 +7206,7 @@
 <translation id="6122831415929794347">Выключыць Бяспечны прагляд?</translation>
 <translation id="6124650939968185064">Наступныя пашырэнні залежаць ад гэтага пашырэння:</translation>
 <translation id="6124698108608891449">Гэтаму сайту патрэбны дадатковыя дазволы.</translation>
+<translation id="6125202119952209826">Далучэнне да групы ўкладак, у якой удзельнічае <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">На жаль, вам трэба зноў дадаць ваш уліковы запіс на <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Месяц</translation>
 <translation id="6126601353087978360">Увядзіце свой водгук тут:</translation>
@@ -7862,6 +7863,7 @@
 <translation id="6607831829715835317">Больш &amp;інструментаў</translation>
 <translation id="6607890859198268021">Уліковым запісам <ph name="USER_EMAIL" /> ужо кіруе <ph name="DOMAIN" />. Для выкарыстання функцыі бацькоўскага кантролю ў іншым Уліковым запісе Google, пасля наладкі выканайце выхад і выберыце "Дадаць карыстальніка" на экране ўваходу.</translation>
 <translation id="6608166463665411119">Скінуць налады eSIM-карты</translation>
+<translation id="660846213831377756">Клавішы кіравання мышшу</translation>
 <translation id="6608773371844092260">Каб наладзіць выкарыстанне адбітка пальца, папрасіце дзіця дакрануцца да сканера адбіткаў пальцаў на правай бакавой частцы прылады <ph name="DEVICE_TYPE" />. Даныя адбіткаў пальцаў дзіцяці надзейна захоўваюцца на прыладзе <ph name="DEVICE_TYPE" /> і нікуды не перадаюцца.</translation>
 <translation id="6609478180749378879">Даныя ўваходу будуць захаваны на гэтай прыладзе пасля выхаду з рэжыму інкогніта. Пазней вы зможаце зноў выкарыстаць іх для ўваходу на гэты вэб-сайт з дадзенай прылады.</translation>
 <translation id="6610002944194042868">Параметры перакладу</translation>
@@ -8667,6 +8669,7 @@
 <translation id="7189451821249468368">У вас недастаткова ліцэнзій, каб зарэгістраваць гэту прыладу. Каб купіць дадатковыя ліцэнзіі, звярніцеся ў аддзел продажу. Калі вы лічыце, што гэта паведамленне паказваецца вам памылкова, звярніцеся ў службу падтрымкі.</translation>
 <translation id="7189965711416741966">Адбітак пальца дададзены.</translation>
 <translation id="7190883804815364931">Апошняе змяненне на гэтай укладцы</translation>
+<translation id="7190921792980745354">Заблакіраваць карыстальніка <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Некаторыя спасылкі, якія падтрымліваюцца, па-ранейшаму будуць адкрывацца ў праграмах "<ph name="APP_NAME" />", "<ph name="APP_NAME_2" />", "<ph name="APP_NAME_3" />" і некалькіх іншых (<ph name="NUMBER_OF_OTHER_APPS" />).</translation>
 <translation id="7191159667348037">Невядомы прынтар (USB)</translation>
 <translation id="7191631508323321927">Калідор</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 0756f1e..b73f7d4 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -5121,6 +5121,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> не можа да се отвори в алтернативен браузър. Моля, свържете се със системния си администратор.</translation>
 <translation id="4587589328781138893">Сайтове</translation>
 <translation id="4588749726511456218">Ускоряване на превъртането. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Изглежда, че <ph name="PASSWORD_DOMAIN" /> и <ph name="DOMAIN" /> са свързани. Уверете се, че имате доверие на <ph name="DOMAIN" />, преди да използвате паролата си.</translation>
 <translation id="4589713469967853491">Регистрационните файлове бяха записани успешно в директорията „Изтегляния“.</translation>
 <translation id="4590785647529325123">За да изтриете историята на сърфиране в режим „инкогнито“ на устройството си, затворете всички раздели в този режим.</translation>
 <translation id="459204634473266369">Няма запазени устройства в(ъв) <ph name="PRIMARY_EMAIL" /></translation>
@@ -5627,6 +5628,7 @@
 <translation id="4946998421534856407">клавиша „стартов панел“ + стрелката за нагоре</translation>
 <translation id="4947376546135294974">Данни от сайта, който посещавате</translation>
 <translation id="4950100687509657457">Създаване на потребителски профил</translation>
+<translation id="4950360215042327246">[Заместващ низ]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}other{# файла}}</translation>
 <translation id="495170559598752135">Действия</translation>
 <translation id="4951966678293618079">Без запазване на паролите за този сайт</translation>
@@ -5765,6 +5767,7 @@
 <translation id="5061531353537614467">Тундра</translation>
 <translation id="5062930723426326933">Влизането не бе успешно. Моля, свържете се с интернет и опитайте отново.</translation>
 <translation id="5063480226653192405">Употреба</translation>
+<translation id="5064921774605267982">Отваряне на потребителския профил <ph name="PROFILE_NAME" />. Той се управлява от родителя ви.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Управление на опциите за сигурен DNS в настройките на Chrome OS</translation>
 <translation id="5066534201484101197">Продължаващо превъртане за навигиране между страниците</translation>
@@ -7216,6 +7219,7 @@
 <translation id="6122831415929794347">Да се изключи ли „Безопасно сърфиране“?</translation>
 <translation id="6124650939968185064">От това разширение зависят следните разширения:</translation>
 <translation id="6124698108608891449">За този сайт са необходими още разрешения.</translation>
+<translation id="6125202119952209826">Присъединяване към групата раздели с(ъс) <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">За съжаление, трябва отново да добавите профила си към това устройство <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Луна</translation>
 <translation id="6126601353087978360">Моля, въведете отзивите си тук:</translation>
@@ -7423,6 +7427,7 @@
 <translation id="6266984048393265562">Персонализиране на потребителския профил</translation>
 <translation id="6267166720438879315">Изберете сертификат, за удостоверите самоличността си пред <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Отваряне чрез <ph name="APP" /></translation>
+<translation id="6269050081341530851">Най-старото копие се запазва, когато затворите дубликатите</translation>
 <translation id="6270309713620950855">Спиране на подсещането</translation>
 <translation id="6270391203985052864">Сайтовете могат да извеждат подкани за изпращане на известия</translation>
 <translation id="6270486800167535228">Разширението е фиксирано. Изберете, за да видите още опции</translation>
@@ -7865,6 +7870,7 @@
 <translation id="6607831829715835317">Още инструме&amp;нти</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> вече се управлява от <ph name="DOMAIN" />. За да използвате родителски контроли с друг профил в Google, излезте от този след настройването и изберете „Добавяне на човек“ на екрана за вход.</translation>
 <translation id="6608166463665411119">Нулиране на електронната SIM карта</translation>
+<translation id="660846213831377756">Бутони на мишката</translation>
 <translation id="6608773371844092260">За да настрои отпечатък, детето ви трябва да докосне сензора за отпечатъци от дясната страна на устройството <ph name="DEVICE_TYPE" />. Данните за отпечатъка му се съхраняват надеждно и никога не напускат устройството <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Данните за вход в профила ще бъдат съхранени на това устройство, след като излезете от режим „инкогнито“. По-късно ще можете отново да влезете в профила си в този уебсайт от устройството си.</translation>
 <translation id="6610002944194042868">Опции за превод</translation>
@@ -7964,6 +7970,7 @@
 <translation id="6679947539429331601">Скриване за 12 часа</translation>
 <translation id="6680442031740878064">Свободно място: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Скорост</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [Заместващ низ]</translation>
 <translation id="6683022854667115063">Слушалки</translation>
 <translation id="6683087162435654533">Възстановяване на всички раздели</translation>
 <translation id="6683433919380522900">Разрешението е „<ph name="PERMISSION_STATE" />“</translation>
@@ -8670,6 +8677,7 @@
 <translation id="7189451821249468368">Нямате достатъчно надстройки, за да запишете това устройство. Моля, свържете се с екипа за продажби, за да купите още. Ако смятате, че виждате това съобщение по погрешка, обърнете се към екипа за поддръжка.</translation>
 <translation id="7189965711416741966">Отпечатъкът е добавен.</translation>
 <translation id="7190883804815364931">Последна актуализация на този раздел</translation>
+<translation id="7190921792980745354">Да се блокира ли <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Някои поддържани връзки ще продължат да се отварят в(ъв) <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> и още <ph name="NUMBER_OF_OTHER_APPS" /> приложения.</translation>
 <translation id="7191159667348037">Неизвестен принтер (USB)</translation>
 <translation id="7191631508323321927">Коридор</translation>
@@ -8857,6 +8865,7 @@
 <translation id="7330533963640151632">Настройки за функцията „<ph name="FEATURE_NAME" />“ за устройството на <ph name="USER_NAME" />, което споделя чрез профила <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt + стрелката за надолу</translation>
 <translation id="7332053360324989309">Специализиран изпълнител: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Дублирани раздели</translation>
 <translation id="7333388112938984914">Не можете да качвате файлове, докато използвате връзка с отчитане.</translation>
 <translation id="7333669215417470379">Създаване на резервно копие и възстановяване на приложенията и настройките ви</translation>
 <translation id="7335974957018254119">Проверка на правописа за</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 2baccd2..013fd79 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -5125,6 +5125,7 @@
 <translation id="4586275095964870617">অন্য ব্রাউজারে <ph name="URL" /> খোলা যায়নি। আপনার সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation>
 <translation id="4587589328781138893">সাইট</translation>
 <translation id="4588749726511456218">অ্যাক্সিলারেশন স্ক্রল করুন <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> ও <ph name="DOMAIN" /> একই বলে মনে হচ্ছে। আপনার পাসওয়ার্ড ব্যবহার করার আগে নিশ্চিত করুন যে আপনি <ph name="DOMAIN" />-কে বিশ্বাস করেন।</translation>
 <translation id="4589713469967853491">ডাউনলোড ডিরেক্টরিতে লগ সেভ করা হয়েছে।</translation>
 <translation id="4590785647529325123">আপনার ডিভাইস থেকে 'ছদ্মবেশী মোড'-এ করা ব্রাউজিংয়ের ইতিহাস মুছে ফেলতে, সব 'ছদ্মবেশী ট্যাব' বন্ধ করুন</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" />-এ কোনও ডিভাইস সেভ করা নেই</translation>
@@ -5631,6 +5632,7 @@
 <translation id="4946998421534856407">launcher + up arrow</translation>
 <translation id="4947376546135294974">আপনি ভিজিট করছেন এমন সাইট থেকে পাওয়া ডেটা</translation>
 <translation id="4950100687509657457">প্রোফাইল তৈরি করুন</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{একটি ফাইল}one{#টি ফাইল}other{#টি ফাইল}}</translation>
 <translation id="495170559598752135">ক্রিয়াসমূহ</translation>
 <translation id="4951966678293618079">এই সাইটের জন্য কখনও পাসওয়ার্ড সেভ করবেন না</translation>
@@ -5769,6 +5771,7 @@
 <translation id="5061531353537614467">তুন্দ্রা</translation>
 <translation id="5062930723426326933">সাইন-ইন করা যায়নি, অনুগ্রহ করে ইন্টারনেটে কানেক্ট করে আবার চেষ্টা করুন৷</translation>
 <translation id="5063480226653192405">ব্যবহার</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> প্রোফাইল খুলুন। এই প্রোফাইল আপনার অভিভাবক ম্যানেজ করেন।</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS সেটিংসে নিরাপদ ডিএনএস ম্যানেজ করুন</translation>
 <translation id="5066534201484101197">একটি পৃষ্ঠা থেকে অন্য পৃষ্ঠাতে নেভিগেট করতে ওভারস্ক্রল করুন</translation>
@@ -7220,6 +7223,7 @@
 <translation id="6122831415929794347">Safe Browsing বন্ধ করতে চান?</translation>
 <translation id="6124650939968185064">নিম্নলিখিত এক্সটেনশনগুলি এই এক্সটেনশনটির উপর নির্ভর করে:</translation>
 <translation id="6124698108608891449">এই সাইটকে আরও অনুমতি দিতে হবে।</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" />-এর সাথে ট্যাব গ্রুপে যোগ দিন</translation>
 <translation id="6125479973208104919">দুর্ভাগ্যবশত, আপনাকে এই <ph name="DEVICE_TYPE" />এ আবার অ্যাকাউন্ট তৈরি করতে হবে।</translation>
 <translation id="6125639926370653692">চাঁদ</translation>
 <translation id="6126601353087978360">এখানে আপনার মতামত লিখুন:</translation>
@@ -7427,6 +7431,7 @@
 <translation id="6266984048393265562">প্রোফাইল কাস্টমাইজ করুন</translation>
 <translation id="6267166720438879315">নিজেকে <ph name="HOST_NAME" /> এ প্রমাণীকৃত করতে একটি সার্টিফিকেট বেছে নিন</translation>
 <translation id="6268252012308737255"><ph name="APP" /> দিয়ে খুলুন</translation>
+<translation id="6269050081341530851">আপনি ডুপ্লিকেট বন্ধ করলে, সবথেকে পুরনো কপি রেখে দেওয়া হয়</translation>
 <translation id="6270309713620950855">মিউট নাজ</translation>
 <translation id="6270391203985052864">সাইট আপনাকে বিজ্ঞপ্তি পাঠানোর আগে অনুমতি চাইতে পারে</translation>
 <translation id="6270486800167535228">এক্সটেনশন পিন করা হয়েছে। আরও বিকল্প দেখতে, বেছে নিন</translation>
@@ -7871,6 +7876,7 @@
 <translation id="6607831829715835317">আরও সরঞ্জা&amp;ম</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> আগে থেকেই <ph name="USER_EMAIL" /> ম্যানেজ করছে। অন্য Google অ্যাকাউন্ট থেকে অভিভাবকীয় নিয়ন্ত্রণ ব্যবহার করতে চাইলে, সেট আপ করার পরে সাইন-আউট করুন এবং সাইন-ইন স্ক্রিনে "ব্যক্তিকে যোগ করুন" বিকল্প বেছে নিন।</translation>
 <translation id="6608166463665411119">ই-সিম রিসেট করুন</translation>
+<translation id="660846213831377756">মাউস কী</translation>
 <translation id="6608773371844092260">ফিঙ্গারপ্রিন্ট সেট-আপ সেট করার জন্য, আপনার সন্তানকে <ph name="DEVICE_TYPE" />-এর ডানদিকে থাকা ফিঙ্গারপ্রিন্ট সেন্সর টাচ করতে বলুন। আপনার সন্তানের ফিঙ্গারপ্রিন্ট ডেটা নিরাপদে সেভ করা হয় এবং সবসময় <ph name="DEVICE_TYPE" />-এ থাকে।</translation>
 <translation id="6609478180749378879">আপনি 'ছদ্মবেশী মোড' থেকে বেরিয়ে আসার পরেই সাইন-ইন সংক্রান্ত ডেটা এই ডিভাইসে স্টোর করা হবে। আপনি আবার পরে এই ওয়েবসাইটে আপনার ডিভাইস দিয়ে সাইন-ইন করতে পারবেন।</translation>
 <translation id="6610002944194042868">অনুবাদের বিকল্প</translation>
@@ -7970,6 +7976,7 @@
 <translation id="6679947539429331601">১২ ঘণ্টার জন্য লুকান</translation>
 <translation id="6680442031740878064">খালি জায়গা: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">দ্রুততা</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">হেডফোন</translation>
 <translation id="6683087162435654533">'সব ট্যাব' রিস্টোর করুন</translation>
 <translation id="6683433919380522900">অনুমতি <ph name="PERMISSION_STATE" />-এ সেট আছে</translation>
@@ -8676,6 +8683,7 @@
 <translation id="7189451821249468368">এই ডিভাইসটি এনরোল করার জন্য প্রয়োজনীয় আপগ্রেড আপনার কাছে নেই। আরও কেনাকাটা করার জন্য, সেলস টিমের সাথে যোগাযোগ করুন। আপনার যদি মনে হয়, কোনও সমস্যার কারণে আপনি এই মেসেজটি দেখতে পাচ্ছেন, তাহলে সহায়তা টিমের সাথে যোগাযোগ করুন।</translation>
 <translation id="7189965711416741966">আঙ্গুলের ছাপ যোগ করা হয়েছে।</translation>
 <translation id="7190883804815364931">এই ট্যাবে শেষ আপডেট</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" />-কে ব্লক করতে চান?</translation>
 <translation id="7191063546666816478">কিছু সহায়তা প্রদান করার লিঙ্ক <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> এবং অন্য <ph name="NUMBER_OF_OTHER_APPS" />টি অ্যাপে এখনও খুলবে।</translation>
 <translation id="7191159667348037">অজানা প্রিন্টার (USB)</translation>
 <translation id="7191631508323321927">হলওয়ে</translation>
@@ -8863,6 +8871,7 @@
 <translation id="7330533963640151632"><ph name="USER_NAME" />-এর ডিভাইসের জন্য <ph name="FEATURE_NAME" /> সেটিংস, <ph name="USER_EMAIL" /> অ্যাকাউন্টের অধীনে শেয়ার করা হচ্ছে।</translation>
 <translation id="7331646370422660166">alt + নিম্নমুখী তীরচিহ্ন</translation>
 <translation id="7332053360324989309">ডেডিকেটেড ওয়ার্কার: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">ডুপ্লিকেট ট্যাব</translation>
 <translation id="7333388112938984914">মিটারড কানেকশনে ফাইল আপলোড করা যাচ্ছে না।</translation>
 <translation id="7333669215417470379">আপনার অ্যাপ এবং সেটিংসের ব্যাক-আপ নিয়ে সেগুলি রিস্টোর করুন</translation>
 <translation id="7335974957018254119">এই ভাষাগুলির জন্য বানান পরীক্ষা করা যায়</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 5692cbe..5d0a0046 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -5123,7 +5123,7 @@
 <translation id="4586275095964870617">Otvaranje web lokacije <ph name="URL" /> u alternativnom pregledniku nije uspjelo. Kontaktirajte administratora sistema.</translation>
 <translation id="4587589328781138893">Web lokacije</translation>
 <translation id="4588749726511456218">Ubrzanje klizanja <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
-<translation id="4589197033939192905">Čini se da su domene <ph name="PASSWORD_DOMAIN" /> i <ph name="DOMAIN" /> povezane. Prije nego što upotrijebite zaporku, provjerite je li domena <ph name="DOMAIN" /> pouzdana.</translation>
+<translation id="4589197033939192905">Izgleda da su <ph name="PASSWORD_DOMAIN" /> i <ph name="DOMAIN" /> povezani. Provjerite je li <ph name="DOMAIN" /> pouzdana web lokacija prije korištenja lozinke.</translation>
 <translation id="4589713469967853491">Zapisnici su uspješno ispisani u direktorij Preuzimanja.</translation>
 <translation id="4590785647529325123">Da s uređaja izbrišete historiju pregledanja u anonimnom načinu rada, zatvorite sve anonimne kartice</translation>
 <translation id="459204634473266369">Nema sačuvanih uređaja na <ph name="PRIMARY_EMAIL" /></translation>
@@ -5769,7 +5769,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Prijava nije uspjela. Povežite se na internet i pokušajte ponovo.</translation>
 <translation id="5063480226653192405">Korištenje</translation>
-<translation id="5064921774605267982">Otvori profil <ph name="PROFILE_NAME" />. Ovim profilom upravlja tvoj roditelj.</translation>
+<translation id="5064921774605267982">Otvaranje profila <ph name="PROFILE_NAME" />. Profilom upravlja roditelj.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Upravljajte sigurnim DNS-om u postavkama ChromeOS-a</translation>
 <translation id="5066534201484101197">Kliznite do kraja da se krećete između stranica</translation>
@@ -7220,6 +7220,7 @@
 <translation id="6122831415929794347">Isključiti Sigurno pregledanje?</translation>
 <translation id="6124650939968185064">Sljedeće ekstenzije ovise o ovoj ekstenziji:</translation>
 <translation id="6124698108608891449">Ovoj web lokaciji je potrebno više odobrenja.</translation>
+<translation id="6125202119952209826">Pridružite se grupi kartica koju koristi <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Nažalost, morat ćete ponovo dodati svoj račun na ovaj uređaj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Mjesec</translation>
 <translation id="6126601353087978360">Ovdje unesite povratne informacije:</translation>
@@ -7427,7 +7428,7 @@
 <translation id="6266984048393265562">Prilagodite profil</translation>
 <translation id="6267166720438879315">Odaberite potvrdu da autentificirate svoj identitet na <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Otvori koristeći aplikaciju <ph name="APP" /></translation>
-<translation id="6269050081341530851">Kada zatvorite duplikate zadržava se najstarija kopija</translation>
+<translation id="6269050081341530851">Najstarija kopija se zadržava kada zatvorite duplikate</translation>
 <translation id="6270309713620950855">Isključi zvuk podsjećanja</translation>
 <translation id="6270391203985052864">Web lokacije mogu tražiti da šalju obavještenja</translation>
 <translation id="6270486800167535228">Ekstenzija je zakačena. Prikaz više opcija odabirom</translation>
@@ -7874,6 +7875,7 @@
 <translation id="6607831829715835317">Više ala&amp;ta</translation>
 <translation id="6607890859198268021">Adresom e-pošte <ph name="USER_EMAIL" /> već upravlja domena <ph name="DOMAIN" />. Da koristite roditeljski nadzor s drugim Google računom, odjavite se nakon postavljanja, a zatim odaberite "Dodaj osobu" na ekranu za prijavu.</translation>
 <translation id="6608166463665411119">Poništi eSIM</translation>
+<translation id="660846213831377756">Tipke miša</translation>
 <translation id="6608773371844092260">Da postavite otisak prsta, dijete treba dodirnuti senzor za otisak prsta na desnoj strani uređaja <ph name="DEVICE_TYPE" />. Podaci otiska prsta vašeg djeteta se sigurno pohranjuju i nikada ne napuštaju uređaj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Podaci za prijavu će se pohraniti na ovom uređaju nakon što izađete iz anonimnog načina rada. Moći ćete se ponovo prijaviti na ovu web lokaciju svojim uređajem kasnije.</translation>
 <translation id="6610002944194042868">Opcije za prevođenje</translation>
@@ -7973,7 +7975,7 @@
 <translation id="6679947539429331601">Sakrij na 12 sati</translation>
 <translation id="6680442031740878064">Dostupno: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Brzina</translation>
-<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [niz rezerviranog mjesta]</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [niz rezerviranog mjesta]</translation>
 <translation id="6683022854667115063">Slušalice</translation>
 <translation id="6683087162435654533">V&amp;rati sve kartice</translation>
 <translation id="6683433919380522900">Odobrenje je <ph name="PERMISSION_STATE" /></translation>
@@ -8680,6 +8682,7 @@
 <translation id="7189451821249468368">Nemate dovoljno nadogradnji da prijavite ovaj uređaj. Kontaktirajte prodaju da kupite još licenci. Ako mislite da vam se ova poruka prikazuje greškom, kontaktirajte podršku.</translation>
 <translation id="7189965711416741966">Otisak prsta je dodan.</translation>
 <translation id="7190883804815364931">Posljednje ažuriranje kartice</translation>
+<translation id="7190921792980745354">Blokirati kontakt <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Neki podržani linkovi će se i dalje otvarati u aplikacijama <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> i njih još <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Nepoznati štampač (USB)</translation>
 <translation id="7191631508323321927">Hodnik</translation>
@@ -8867,7 +8870,7 @@
 <translation id="7330533963640151632">Postavke funkcije <ph name="FEATURE_NAME" /> za uređaj koji koristi <ph name="USER_NAME" />, koji dijeli putem računa <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt i strelica nadolje</translation>
 <translation id="7332053360324989309">Namjenski radnik: <ph name="SCRIPT_URL" /></translation>
-<translation id="7332138995369063163">Dupliciranje kartica</translation>
+<translation id="7332138995369063163">Duplikati kartica</translation>
 <translation id="7333388112938984914">Nije moguće otpremiti fajlove na vezi s naplatom.</translation>
 <translation id="7333669215417470379">Napravite sigurnosnu kopiju i vratite aplikacije i postavke</translation>
 <translation id="7335974957018254119">Koristite provjeru pravopisa za</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 3452f82..4bc5af7 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -5108,6 +5108,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> no s'ha pogut obrir en un navegador alternatiu. Contacta amb l'administrador del sistema.</translation>
 <translation id="4587589328781138893">Llocs web</translation>
 <translation id="4588749726511456218">Acceleració del desplaçament <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Sembla que <ph name="PASSWORD_DOMAIN" /> i <ph name="DOMAIN" /> estan relacionats. Assegura't que confies en <ph name="DOMAIN" /> abans d'utilitzar la teva contrasenya.</translation>
 <translation id="4589713469967853491">Els registres s'han escrit correctament al directori Baixades.</translation>
 <translation id="4590785647529325123">Per suprimir l'historial de navegació d'incògnit del dispositiu, tanca totes les pestanyes d'incògnit</translation>
 <translation id="459204634473266369">No hi ha cap dispositiu desat a <ph name="PRIMARY_EMAIL" /></translation>
@@ -5613,6 +5614,7 @@
 <translation id="4946998421534856407">menú d'aplicacions+fletxa amunt</translation>
 <translation id="4947376546135294974">Dades del lloc web que estàs visitant</translation>
 <translation id="4950100687509657457">Creació d'un perfil</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 fitxer}other{# fitxers}}</translation>
 <translation id="495170559598752135">Accions</translation>
 <translation id="4951966678293618079">No desis mai les contrasenyes d'aquest lloc web</translation>
@@ -5751,6 +5753,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Hi ha hagut un error en iniciar la sessió; connecteu-vos a Internet i torneu-ho a provar.</translation>
 <translation id="5063480226653192405">Ús</translation>
+<translation id="5064921774605267982">Obre el perfil de <ph name="PROFILE_NAME" />. El teu pare o mare gestiona aquest perfil.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Gestiona el DNS segur a la configuració de Chrome OS</translation>
 <translation id="5066534201484101197">Fes overscroll per navegar entre les pàgines</translation>
@@ -7199,6 +7202,7 @@
 <translation id="6122831415929794347">Vols desactivar Navegació segura?</translation>
 <translation id="6124650939968185064">D'aquesta extensió en depenen les extensions següents:</translation>
 <translation id="6124698108608891449">Aquest lloc web necessita més permisos.</translation>
+<translation id="6125202119952209826">Uneix-te al grup de pestanyes amb <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Cal que tornis a afegir el teu compte en aquest <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Lluna</translation>
 <translation id="6126601353087978360">Introdueix el suggeriment aquí:</translation>
@@ -7406,6 +7410,7 @@
 <translation id="6266984048393265562">Personalitza el perfil</translation>
 <translation id="6267166720438879315">Seleccioneu un certificat per autenticar-vos a <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Obre amb <ph name="APP" /></translation>
+<translation id="6269050081341530851">Quan tanquis les pestanyes duplicades, se'n conservarà la còpia més antiga</translation>
 <translation id="6270309713620950855">Toc de micròfon silenciat</translation>
 <translation id="6270391203985052864">Els llocs web poden demanar-te permís per enviar-te notificacions</translation>
 <translation id="6270486800167535228">L'extensió s'ha fixat. Selecciona per veure més opcions.</translation>
@@ -7848,6 +7853,7 @@
 <translation id="6607831829715835317">Més eine&amp;s</translation>
 <translation id="6607890859198268021">El compte <ph name="USER_EMAIL" /> ja està gestionat per <ph name="DOMAIN" />. Per utilitzar controls parentals amb un Compte de Google diferent, has de tancar la sessió quan acabis la configuració i, a continuació, a la pantalla d'inici de sessió selecciona Afegeix una persona.</translation>
 <translation id="6608166463665411119">Restableix l'eSIM</translation>
+<translation id="660846213831377756">Tecles del ratolí</translation>
 <translation id="6608773371844092260">Per configurar una impremta digital, fes que el teu fill o filla toqui el sensor d'empremtes digitals que hi ha a la part dreta d'aquest <ph name="DEVICE_TYPE" />. Les dades de la seva empremta digital s'emmagatzemen de manera segura i no surten mai del <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Les dades d'inici de sessió s'emmagatzemaran en aquest dispositiu quan surtis del mode d'incògnit. Podràs tornar a iniciar la sessió en aquest lloc web amb el teu dispositiu més endavant.</translation>
 <translation id="6610002944194042868">Opcions del Traductor</translation>
@@ -7947,6 +7953,7 @@
 <translation id="6679947539429331601">Amaga durant 12 hores</translation>
 <translation id="6680442031740878064">Disponible: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Velocitat</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">Auriculars</translation>
 <translation id="6683087162435654533">R&amp;estaura totes les pestanyes</translation>
 <translation id="6683433919380522900">El permís és <ph name="PERMISSION_STATE" /></translation>
@@ -8653,6 +8660,7 @@
 <translation id="7189451821249468368">No tens prou actualitzacions per inscriure aquest dispositiu. Contacta amb l'equip de vendes per comprar-ne més. Si creus que veus aquest missatge per error, posa't en contacte amb el servei d'assistència.</translation>
 <translation id="7189965711416741966">S'ha afegit l'empremta digital.</translation>
 <translation id="7190883804815364931">Darrera actualització d'aquesta pestanya</translation>
+<translation id="7190921792980745354">Vols bloquejar <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Alguns enllaços admesos es continuaran obrint a <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> i en <ph name="NUMBER_OF_OTHER_APPS" /> aplicacions més.</translation>
 <translation id="7191159667348037">Impressora desconeguda (USB)</translation>
 <translation id="7191631508323321927">Passadís</translation>
@@ -8840,6 +8848,7 @@
 <translation id="7330533963640151632">Configuració de <ph name="FEATURE_NAME" /> per al dispositiu de <ph name="USER_NAME" />, amb el compte <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt+fletxa avall</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Pestanyes duplicades</translation>
 <translation id="7333388112938984914">No es poden penjar fitxers mentre s'utilitza una connexió mesurada.</translation>
 <translation id="7333669215417470379">Crea una còpia de seguretat i restaura les aplicacions i la configuració</translation>
 <translation id="7335974957018254119">Fes servir el corrector ortogràfic per a</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 571b5db..e4530a2c 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -4907,7 +4907,7 @@
 <translation id="4434611816075088065">Nic jiného teď vaši pozornost nevyžaduje</translation>
 <translation id="443475966875174318">Aktualizovat nebo odstranit nekompatibilní aplikace</translation>
 <translation id="443503224864902151">Budete odhlášeni z většiny webů. Zůstanete přihlášeni k účtu Google, aby bylo možné vymazat synchronizovaná data.</translation>
-<translation id="4437879751057074691">Nabídka k uložení hesel a přístupových klíčů</translation>
+<translation id="4437879751057074691">Nabízet ukládání hesel a přístupových klíčů</translation>
 <translation id="4437947179446780764">Přidat vlastního poskytovatele služby DNS</translation>
 <translation id="4438043733494739848">Průhledné</translation>
 <translation id="4441124369922430666">Chcete tuto aplikaci automaticky spustit, když se zařízení zapne?</translation>
@@ -5110,6 +5110,7 @@
 <translation id="4586275095964870617">Adresu <ph name="URL" /> se v alternativním prohlížeči nepodařilo otevřít. Kontaktujte svého administrátora systému.</translation>
 <translation id="4587589328781138893">Weby</translation>
 <translation id="4588749726511456218">Zrychlení posouvání <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Weby <ph name="PASSWORD_DOMAIN" /> a <ph name="DOMAIN" /> spolu pravděpodobně souvisejí. Před použitím hesla zvažte, zda webu <ph name="DOMAIN" /> důvěřujete.</translation>
 <translation id="4589713469967853491">Protokoly byly úspěšně zaznamenány do složky Stažené soubory.</translation>
 <translation id="4590785647529325123">Pokud ze zařízení chcete vymazat historii anonymního prohlížení, zavřete všechny anonymní karty</translation>
 <translation id="459204634473266369">Do účtu <ph name="PRIMARY_EMAIL" /> nejsou uložena žádná zařízení</translation>
@@ -5615,6 +5616,7 @@
 <translation id="4946998421534856407">spouštěč + šipka nahoru</translation>
 <translation id="4947376546135294974">Data z navštíveného webu</translation>
 <translation id="4950100687509657457">Vytvořit profil</translation>
+<translation id="4950360215042327246">[Zástupný řetězec]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{soubor}few{# soubory}many{# souboru}other{# souborů}}</translation>
 <translation id="495170559598752135">Akce</translation>
 <translation id="4951966678293618079">Pro tento web hesla nikdy neukládat</translation>
@@ -5753,6 +5755,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Přihlášení se nezdařilo. Připojte se prosím k internetu a zkuste to znovu.</translation>
 <translation id="5063480226653192405">Použití</translation>
+<translation id="5064921774605267982">Otevřít profil <ph name="PROFILE_NAME" />. Tenhle profil spravuje tvůj rodič.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Spravovat zabezpečené DNS v nastavení systému ChromeOS</translation>
 <translation id="5066534201484101197">Přecházení mezi stránkami přílišným posunutím</translation>
@@ -7199,6 +7202,7 @@
 <translation id="6122831415929794347">Vypnout Bezpečné prohlížení?</translation>
 <translation id="6124650939968185064">Na tomto rozšíření závisejí následující rozšíření:</translation>
 <translation id="6124698108608891449">Web potřebuje další oprávnění.</translation>
+<translation id="6125202119952209826">Přidat se ke skupině karet s uživatelem <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Do zařízení <ph name="DEVICE_TYPE" /> je nutné znovu přidat účet.</translation>
 <translation id="6125639926370653692">Měsíc</translation>
 <translation id="6126601353087978360">Sem zadejte svoji zpětnou vazbu:</translation>
@@ -7406,6 +7410,7 @@
 <translation id="6266984048393265562">Upravit profil</translation>
 <translation id="6267166720438879315">Vyberte certifikát pro ověření na serveru <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Otevřít v aplikaci <ph name="APP" /></translation>
+<translation id="6269050081341530851">Když zavřete duplicitní karty, zůstane vám nejstarší kopie</translation>
 <translation id="6270309713620950855">Připomenutí ztlumení</translation>
 <translation id="6270391203985052864">Weby mohou žádat o oprávnění zasílat vám oznámení</translation>
 <translation id="6270486800167535228">Rozšíření je připnuto. Výběrem zobrazíte další možnosti</translation>
@@ -7852,6 +7857,7 @@
 <translation id="6607831829715835317">Další nástro&amp;je</translation>
 <translation id="6607890859198268021">Účet <ph name="USER_EMAIL" /> už spravuje doména <ph name="DOMAIN" />. Pokud chcete rodičovskou kontrolu použít s jiným účtem Google, po dokončení nastavení se odhlaste a potom na přihlašovací obrazovce vyberte Přidat uživatele.</translation>
 <translation id="6608166463665411119">Resetovat eSIM kartu</translation>
+<translation id="660846213831377756">Klávesy myši</translation>
 <translation id="6608773371844092260">Pokud chcete nastavit otisk prstu, nechte dítě dotknout se snímače otisků prstů na pravé straně zařízení <ph name="DEVICE_TYPE" />. Otisk prstu dítěte je bezpečně uložen a nikdy neopouští <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Přihlašovací údaje zůstanou v tomto zařízení uložené i po ukončení anonymního režimu. Pomocí zařízení se k těmto webovým stránkám budete moci později opět přihlásit.</translation>
 <translation id="6610002944194042868">Možnosti Překladače</translation>
@@ -7951,6 +7957,7 @@
 <translation id="6679947539429331601">Na 12 hodin skrýt</translation>
 <translation id="6680442031740878064">Volné místo: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Ohodnotit</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [zástupný řetězec]</translation>
 <translation id="6683022854667115063">Sluchátka</translation>
 <translation id="6683087162435654533">&amp;Obnovit všechny karty</translation>
 <translation id="6683433919380522900">Oprávnění je <ph name="PERMISSION_STATE" /></translation>
@@ -8657,6 +8664,7 @@
 <translation id="7189451821249468368">Nemáte dostatečný počet upgradů k registraci tohoto zařízení. Kontaktujte obchodní oddělení a kupte si další. Pokud se domníváte, že se jedná o chybu, kontaktujte podporu.</translation>
 <translation id="7189965711416741966">Otisk byl přidán.</translation>
 <translation id="7190883804815364931">Poslední aktualizace této karty</translation>
+<translation id="7190921792980745354">Blokovat uživatele <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Některé podporované odkazy se budou nadále otevírat v aplikaci <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> a dalších aplikacích (<ph name="NUMBER_OF_OTHER_APPS" />).</translation>
 <translation id="7191159667348037">Neznámá tiskárna (USB)</translation>
 <translation id="7191631508323321927">Chodba</translation>
@@ -8844,6 +8852,7 @@
 <translation id="7330533963640151632">Nastavení funkce <ph name="FEATURE_NAME" /> pro zařízení uživatele <ph name="USER_NAME" />. Sdílení bude probíhat pod e‑mailem <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + šipka dolů</translation>
 <translation id="7332053360324989309">Vyhrazený pracovník: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Duplicitní karty</translation>
 <translation id="7333388112938984914">Při měřeném připojení nelze nahrávat soubory.</translation>
 <translation id="7333669215417470379">Zálohujte a obnovte své aplikace a nastavení</translation>
 <translation id="7335974957018254119">Používat kontrolu pravopisu pro</translation>
@@ -9260,7 +9269,7 @@
 <translation id="7634337648687970851">Obnovení místních dat aktuálně není podporováno.</translation>
 <translation id="7634566076839829401">Něco se pokazilo. Zkuste to znovu.</translation>
 <translation id="7635048370253485243">Připnuto administrátorem</translation>
-<translation id="7636346903338549690">Povolení používat soubory cookie třetích stran</translation>
+<translation id="7636346903338549690">Weby s povolením používat soubory cookie třetích stran</translation>
 <translation id="7636919061354591437">Nainstalovat na toto zařízení</translation>
 <translation id="7637253234491814483">Dotkněte se snímače otisků prstů v pravém horním rohu klávesnice vedle vypínače. Váš otisk prstu je bezpečně uložen a nikdy neopouští <ph name="DEVICE_TYPE" />.</translation>
 <translation id="7637593984496473097">Nedostatek místa na disku</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index efa421d..6755237 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -5127,6 +5127,7 @@
 <translation id="4586275095964870617">Ni allai <ph name="URL" /> fod ar agor mewn porwr amgen. Cysylltwch â gweinyddwr eich system.</translation>
 <translation id="4587589328781138893">Gwefannau</translation>
 <translation id="4588749726511456218">Cyflymydd sgrolio <ph name="LINK_BEGIN" />Dysgu rhagor<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Mae'n ymddangos bod <ph name="PASSWORD_DOMAIN" /> a <ph name="DOMAIN" /> yn gysylltiedig. Gwnewch yn siŵr eich bod yn ymddiried yn <ph name="DOMAIN" /> cyn defnyddio'ch cyfrinair.</translation>
 <translation id="4589713469967853491">Mae logiau wedi'u hysgrifennu'n llwyddiannus i'r cyfeiriadur Lawrlwythiadau.</translation>
 <translation id="4590785647529325123">I ddileu hanes pori Anhysbys o'ch dyfais, caewch bob tab Anhysbys</translation>
 <translation id="459204634473266369">Nid oes unrhyw ddyfeisiau wedi'u cadw yn <ph name="PRIMARY_EMAIL" /></translation>
@@ -5633,6 +5634,7 @@
 <translation id="4946998421534856407">launcher + saeth i fyny</translation>
 <translation id="4947376546135294974">Data o'r wefan rydych yn ymweld â hi</translation>
 <translation id="4950100687509657457">Creu proffil</translation>
+<translation id="4950360215042327246">[Llinyn Dalfan]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ffeil}zero{# ffeil}two{# ffeil}few{# ffeil}many{# ffeil}other{# ffeil}}</translation>
 <translation id="495170559598752135">Gweithrediadau</translation>
 <translation id="4951966678293618079">Peidio byth â chadw cyfrineiriau ar gyfer y wefan hon</translation>
@@ -5771,6 +5773,7 @@
 <translation id="5061531353537614467">Twndra</translation>
 <translation id="5062930723426326933">Methwyd â mewngofnodi, cysylltwch i'r we a rhowch gynnig arall arni.</translation>
 <translation id="5063480226653192405">Defnydd</translation>
+<translation id="5064921774605267982">Agor proffil <ph name="PROFILE_NAME" />. Mae eich proffil yn cael ei reoli gan eich sefydliad.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Rheoli DNS diogel yng ngosodiadau ChromeOS</translation>
 <translation id="5066534201484101197">Trosgroliwch i lywio rhwng tudalennau</translation>
@@ -7221,6 +7224,7 @@
 <translation id="6122831415929794347">Diffodd Pori'n Ddiogel?</translation>
 <translation id="6124650939968185064">Mae'r estyniadau canlynol yn dibynnu ar yr estyniad hwn:</translation>
 <translation id="6124698108608891449">Mae angen rhagor o hawliau ar y wefan hon.</translation>
+<translation id="6125202119952209826">Ymuno â grŵp tabiau gyda <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Yn anffodus, bydd angen i chi ychwanegu eich cyfrif at y <ph name="DEVICE_TYPE" /> hwn eto.</translation>
 <translation id="6125639926370653692">Lleuad</translation>
 <translation id="6126601353087978360">Rhowch eich adborth yma:</translation>
@@ -7428,6 +7432,7 @@
 <translation id="6266984048393265562">Addasu Proffil</translation>
 <translation id="6267166720438879315">Dewiswch dystysgrif i ddilysu'ch hun i <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Agor gyda <ph name="APP" /></translation>
+<translation id="6269050081341530851">Y copi hynaf a gedwir pan fyddwch yn cau copïau dyblyg</translation>
 <translation id="6270309713620950855">Distewi'r ysgogiad</translation>
 <translation id="6270391203985052864">Gall gwefannau ofyn am anfon hysbysiadau</translation>
 <translation id="6270486800167535228">Estyniad wedi'i binio. Dewiswch i weld rhagor o opsiynau</translation>
@@ -7878,6 +7883,7 @@
 <translation id="6607831829715835317">Rhagor o offe&amp;r</translation>
 <translation id="6607890859198268021">Mae <ph name="USER_EMAIL" /> eisoes yn cael ei reoli gan <ph name="DOMAIN" />. I ddefnyddio rheolaethau rhieni gyda Chyfrif Google gwahanol, allgofnodwch ar ôl gosod, yna dewiswch "Ychwanegu person" ar y sgrîn mewngofnodi.</translation>
 <translation id="6608166463665411119">Ailosod eSIM</translation>
+<translation id="660846213831377756">Bysellau'r llygoden</translation>
 <translation id="6608773371844092260">I osod olion bysedd, gofynnwch i'ch plentyn gyffwrdd â'r synhwyrydd olion bysedd ar ochr dde'r <ph name="DEVICE_TYPE" /> hwn. Mae data olion bysedd eich plentyn yn cael eu storio'n ddiogel a byth yn gadael y <ph name="DEVICE_TYPE" /> hwn.</translation>
 <translation id="6609478180749378879">Bydd data mewngofnodi'n cael eu storio ar y ddyfais hon ar ôl i chi adael y Modd Anhysbys. Byddwch yn gallu mewngofnodi i'r wefan hon gyda'ch dyfais eto yn nes ymlaen.</translation>
 <translation id="6610002944194042868">Opsiynau cyfieithu</translation>
@@ -7977,6 +7983,7 @@
 <translation id="6679947539429331601">Cuddio am 12 awr</translation>
 <translation id="6680442031740878064">Ar gael: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Cyfradd</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Llinyn Dalfan]</translation>
 <translation id="6683022854667115063">Clustffonau</translation>
 <translation id="6683087162435654533">A&amp;dfer Pob Tab</translation>
 <translation id="6683433919380522900">Caniatâd yw <ph name="PERMISSION_STATE" /></translation>
@@ -8682,6 +8689,7 @@
 <translation id="7189451821249468368">Nid oes gennych ddigon o uwchraddiadau i gofrestru'r ddyfais hon. Cysylltwch â'r tîm gwerthu i brynu rhagor. Os ydych yn credu eich bod yn gweld y neges hon drwy gamgymeriad, cysylltwch â'r tîm cymorth.</translation>
 <translation id="7189965711416741966">Wedi ychwanegu'r ôl bys.</translation>
 <translation id="7190883804815364931">Diweddariad Diwethaf i'r Tab hwn</translation>
+<translation id="7190921792980745354">Rhwystro <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Bydd rhai dolenni a gefnogir yn dal i agor yn <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> a <ph name="NUMBER_OF_OTHER_APPS" /> ap arall.</translation>
 <translation id="7191159667348037">Argraffydd Anhysbys (USB)</translation>
 <translation id="7191631508323321927">Cyntedd</translation>
@@ -8869,6 +8877,7 @@
 <translation id="7330533963640151632">Gosodiadau <ph name="FEATURE_NAME" /> ar gyfer dyfais <ph name="USER_NAME" />, sy'n rhannu o dan y cyfrif <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + saeth i lawr</translation>
 <translation id="7332053360324989309">Gweithiwr Un Pwrpas: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Tabiau dyblyg</translation>
 <translation id="7333388112938984914">Methu ag uwchlwytho ffeiliau tra eich bod ar gysylltiad mesuredig.</translation>
 <translation id="7333669215417470379">Gwneud copïau wrth gefn ac adfer eich apiau a'ch gosodiadau</translation>
 <translation id="7335974957018254119">Defnyddio'r nodwedd gwirio sillafu ar gyfer</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index fc5786b..a9754ad 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -5125,6 +5125,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> kunne ikke åbnes i en alternativ browser. Kontakt din systemadministrator.</translation>
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4588749726511456218">Acceleration ved rulning <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> og <ph name="DOMAIN" /> ser ud til at være relateret. Det er vigtigt, at du har tillid til <ph name="DOMAIN" />, før du bruger din adgangskode.</translation>
 <translation id="4589713469967853491">Logs blev skrevet til mappen Downloads.</translation>
 <translation id="4590785647529325123">Luk alle inkognitofaner for at slette browserhistorikken for inkognitovinduet fra din enhed</translation>
 <translation id="459204634473266369">Ingen enheder er gemt på <ph name="PRIMARY_EMAIL" /></translation>
@@ -5631,6 +5632,7 @@
 <translation id="4946998421534856407">appliste + pil op</translation>
 <translation id="4947376546135294974">Data fra det website, du besøger</translation>
 <translation id="4950100687509657457">Opret profil</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{en fil}one{# fil}other{# filer}}</translation>
 <translation id="495170559598752135">Handlinger</translation>
 <translation id="4951966678293618079">Gem aldrig adgangskoder til dette website</translation>
@@ -5769,6 +5771,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Login mislykkedes. Opret forbindelse til internettet, og prøv igen.</translation>
 <translation id="5063480226653192405">Databrug</translation>
+<translation id="5064921774605267982">Åbn profilen <ph name="PROFILE_NAME" />. Denne profil administreres af din forælder.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Administrer Sikkert DNS i indstillingerne for ChromeOS</translation>
 <translation id="5066534201484101197">Brug overscroll til at navigere mellem sider</translation>
@@ -7219,6 +7222,7 @@
 <translation id="6122831415929794347">Vil du deaktivere Beskyttet browsing?</translation>
 <translation id="6124650939968185064">Følgende udvidelser er afhængige af denne udvidelse:</translation>
 <translation id="6124698108608891449">Dette website kræver flere tilladelser.</translation>
+<translation id="6125202119952209826">Deltag i fanegruppen med <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Du skal desværre føje din konto til denne <ph name="DEVICE_TYPE" /> igen.</translation>
 <translation id="6125639926370653692">Måne</translation>
 <translation id="6126601353087978360">Angiv din feedback her:</translation>
@@ -7426,6 +7430,7 @@
 <translation id="6266984048393265562">Tilpas profil</translation>
 <translation id="6267166720438879315">Vælg et certifikat til at bekræfte dig selv over for <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Åbn med <ph name="APP" /></translation>
+<translation id="6269050081341530851">Den ældste kopi gemmes, når du lukker dubletter</translation>
 <translation id="6270309713620950855">Slå lyden for påmindelser fra</translation>
 <translation id="6270391203985052864">Websites kan spørge dig, om de må sende dig notifikationer</translation>
 <translation id="6270486800167535228">Udvidelsen er fastgjort. Vælg for at se flere muligheder</translation>
@@ -7870,6 +7875,7 @@
 <translation id="6607831829715835317">F&amp;lere værktøjer</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> administreres allerede af <ph name="DOMAIN" />. Hvis du vil bruge indstillinger for børnesikring med en anden Google-konto, skal du logge ud efter konfigurationen og derefter vælge "Tilføj person" på loginskærmen.</translation>
 <translation id="6608166463665411119">Nulstil eSIM</translation>
+<translation id="660846213831377756">Musetaster</translation>
 <translation id="6608773371844092260">Du kan konfigurere et fingeraftryk ved at få dit barn til at sætte fingeren på fingeraftrykssensoren til højre på denne <ph name="DEVICE_TYPE" />. Dit barns fingeraftryksdata gemmes sikkert og forlader aldrig denne <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Dine logindata gemmes på denne enhed, når du afslutter inkognitotilstand. Det betyder, at du kan logge ind på dette website med din enhed igen på et senere tidspunkt.</translation>
 <translation id="6610002944194042868">Valgmuligheder for oversættelse</translation>
@@ -7969,6 +7975,7 @@
 <translation id="6679947539429331601">Skjul i 12 timer</translation>
 <translation id="6680442031740878064">Tilgængelig: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Talehastighed</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [Placeholder String]</translation>
 <translation id="6683022854667115063">Høretelefoner</translation>
 <translation id="6683087162435654533">G&amp;endan alle faner</translation>
 <translation id="6683433919380522900">Tilladelsen er <ph name="PERMISSION_STATE" /></translation>
@@ -8675,6 +8682,7 @@
 <translation id="7189451821249468368">Du har ikke nok opgraderinger til at tilmelde denne enhed. Kontakt salgsafdelingen for at købe flere. Hvis du mener, at du får denne meddelelse ved en fejl, skal du kontakte support.</translation>
 <translation id="7189965711416741966">Fingeraftrykket er tilføjet.</translation>
 <translation id="7190883804815364931">Seneste opdatering af denne fane</translation>
+<translation id="7190921792980745354">Vil du blokere <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Nogle understøttede links åbnes fortsat i <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> og <ph name="NUMBER_OF_OTHER_APPS" /> andre apps.</translation>
 <translation id="7191159667348037">Ukendt printer (USB)</translation>
 <translation id="7191631508323321927">Gang</translation>
@@ -8862,6 +8870,7 @@
 <translation id="7330533963640151632">Indstillinger for <ph name="FEATURE_NAME" /> på enheden, der tilhører <ph name="USER_NAME" />. Deles under kontoen <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt + pil ned</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Dubletter af faner</translation>
 <translation id="7333388112938984914">Du kan ikke uploade filer, når du benytter en forbrugsbaseret forbindelse.</translation>
 <translation id="7333669215417470379">Sikkerhedskopiér og gendan dine apps og indstillinger</translation>
 <translation id="7335974957018254119">Brug stavekontrol for</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 42b863a4..bec8ad1 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -5106,6 +5106,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> konnte nicht in einem alternativen Browser geöffnet werden. Bitte setze dich mit dem Systemadministrator in Verbindung.</translation>
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4588749726511456218">Beschleunigtes Scrollen <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> und <ph name="DOMAIN" /> scheinen zusammenzuhängen. Du solltest dein Passwort nur dann verwenden, wenn du <ph name="DOMAIN" /> vertraust.</translation>
 <translation id="4589713469967853491">Protokolle erfolgreich in Downloadverzeichnis geschrieben.</translation>
 <translation id="4590785647529325123">Schließe alle Inkognitotabs, um den Inkognito-Browserverlauf vom Gerät zu löschen</translation>
 <translation id="459204634473266369">Keine Geräte in <ph name="PRIMARY_EMAIL" /> gespeichert</translation>
@@ -5611,6 +5612,7 @@
 <translation id="4946998421534856407">Launcher-Taste + Aufwärtspfeil</translation>
 <translation id="4947376546135294974">Daten von der Website, die du besuchst</translation>
 <translation id="4950100687509657457">Profil erstellen</translation>
+<translation id="4950360215042327246">[Platzhalterstring]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{eine Datei}other{# Dateien}}</translation>
 <translation id="495170559598752135">Aktionen</translation>
 <translation id="4951966678293618079">Passwörter für diese Website niemals speichern</translation>
@@ -5749,6 +5751,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Fehler bei der Anmeldung. Bitte stelle eine Internetverbindung her und versuche es erneut.</translation>
 <translation id="5063480226653192405">Verwendung</translation>
+<translation id="5064921774605267982">Profil „<ph name="PROFILE_NAME" />“ öffnen. Dieses Profil wird von deinen Eltern verwaltet.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Sicheres DNS in den Chrome OS-Einstellungen verwalten</translation>
 <translation id="5066534201484101197">Zum Wechseln zwischen Seiten Overscroll verwenden</translation>
@@ -7195,6 +7198,7 @@
 <translation id="6122831415929794347">Safe Browsing deaktivieren?</translation>
 <translation id="6124650939968185064">Die folgenden Erweiterungen hängen von dieser Erweiterung ab:</translation>
 <translation id="6124698108608891449">Diese Website benötigt weitere Berechtigungen.</translation>
+<translation id="6125202119952209826">Tabgruppe mit <ph name="OWNER_FIRST_NAME" /> beitreten</translation>
 <translation id="6125479973208104919">Du musst dein Konto dem <ph name="DEVICE_TYPE" /> erneut hinzufügen.</translation>
 <translation id="6125639926370653692">Mond</translation>
 <translation id="6126601353087978360">Bitte gib dein Feedback hier ein:</translation>
@@ -7402,6 +7406,7 @@
 <translation id="6266984048393265562">Profil anpassen</translation>
 <translation id="6267166720438879315">Wähle ein Zertifikat für die Authentifizierung bei <ph name="HOST_NAME" /> aus.</translation>
 <translation id="6268252012308737255">Öffnen mit <ph name="APP" /></translation>
+<translation id="6269050081341530851">Älteste Kopie wird beim Schließen von Duplikaten beibehalten</translation>
 <translation id="6270309713620950855">Automatische Erinnerung bei Stummschaltung</translation>
 <translation id="6270391203985052864">Websites können fragen, ob du Benachrichtigungen erhalten möchtest</translation>
 <translation id="6270486800167535228">Erweiterung ist angepinnt. Auswählen, um weitere Optionen zu sehen</translation>
@@ -7844,6 +7849,7 @@
 <translation id="6607831829715835317">Weitere Too&amp;ls</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> wird schon von <ph name="DOMAIN" /> verwaltet. Wenn du die Jugendschutzeinstellungen auf ein anderes Google-Konto anwenden möchtest, melde dich nach der Einrichtung ab und wähle auf dem Anmeldebildschirm "Person hinzufügen" aus.</translation>
 <translation id="6608166463665411119">eSIM zurücksetzen</translation>
+<translation id="660846213831377756">Tastaturmaus</translation>
 <translation id="6608773371844092260">Bitte dein Kind, seinen Finger auf den Fingerabdrucksensor rechts an diesem <ph name="DEVICE_TYPE" /> zu legen, um den Fingerabdruck einzurichten. Sein Fingerabdruck wird sicher gespeichert und verlässt dieses <ph name="DEVICE_TYPE" /> nie.</translation>
 <translation id="6609478180749378879">Nach dem Verlassen des Inkognitomodus werden Anmeldedaten auf diesem Gerät gespeichert. Du kannst dich später erneut mit deinem Gerät auf dieser Website anmelden.</translation>
 <translation id="6610002944194042868">Übersetzungsoptionen</translation>
@@ -7943,6 +7949,7 @@
 <translation id="6679947539429331601">12 Stunden lang ausblenden</translation>
 <translation id="6680442031740878064">Verfügbar: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Geschwindigkeit</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [Platzhalterstring]</translation>
 <translation id="6683022854667115063">Kopfhörer</translation>
 <translation id="6683087162435654533">Alle Tabs wi&amp;ederherstellen</translation>
 <translation id="6683433919380522900">Aktivierte Berechtigung: <ph name="PERMISSION_STATE" /></translation>
@@ -8649,6 +8656,7 @@
 <translation id="7189451821249468368">Du hast nicht genügend Upgrades zum Anmelden dieses Geräts. Weitere Upgrades kannst du beim Vertrieb erwerben. Wenn du glaubst, dass du diese Meldung fälschlicherweise erhalten hast, kontaktiere bitte den Support.</translation>
 <translation id="7189965711416741966">Fingerabdruck hinzugefügt.</translation>
 <translation id="7190883804815364931">Letzte Aktualisierung dieses Tabs</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> blockieren?</translation>
 <translation id="7191063546666816478">Einige unterstützte Links werden weiterhin in <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> und <ph name="NUMBER_OF_OTHER_APPS" /> anderen Apps geöffnet.</translation>
 <translation id="7191159667348037">Unbekannter Drucker (USB)</translation>
 <translation id="7191631508323321927">Flur</translation>
@@ -8836,6 +8844,7 @@
 <translation id="7330533963640151632"><ph name="FEATURE_NAME" />-Einstellungen für das Gerät von <ph name="USER_NAME" />. Die Freigabe erfolgt unter dem Konto <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt + Abwärtspfeil</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Tab-Duplikate</translation>
 <translation id="7333388112938984914">Dateien können nicht hochgeladen werden, wenn eine getaktete Verbindung verwendet wird.</translation>
 <translation id="7333669215417470379">Apps und Einstellungen sichern und wiederherstellen</translation>
 <translation id="7335974957018254119">Rechtschreibprüfung verwenden für</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 9c170182..e2f3755 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -5124,6 +5124,7 @@
 <translation id="4586275095964870617">Δεν ήταν δυνατό το άνοιγμα του <ph name="URL" />σε εναλλακτικό πρόγραμμα περιήγησης. Επικοινωνήστε με τον διαχειριστή του συστήματός σας.</translation>
 <translation id="4587589328781138893">Ιστότοποι</translation>
 <translation id="4588749726511456218">Επιτάχυνση κύλισης <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Φαίνεται ότι οι τομείς <ph name="PASSWORD_DOMAIN" /> και <ph name="DOMAIN" /> σχετίζονται. Βεβαιωθείτε ότι εμπιστεύεστε τον τομέα <ph name="DOMAIN" />, προτού χρησιμοποιήσετε τον κωδικό πρόσβασής σας.</translation>
 <translation id="4589713469967853491">Επιτυχής εγγραφή των αρχείων καταγραφής στον κατάλογο Λήψεις.</translation>
 <translation id="4590785647529325123">Για να διαγράψετε το ιστορικό ανώνυμης περιήγησης από τη συσκευή σας, κλείστε όλες τις καρτέλες ανώνυμης περιήγησης</translation>
 <translation id="459204634473266369">Δεν υπάρχουν αποθηκευμένες συσκευές στον λογαριασμό <ph name="PRIMARY_EMAIL" /></translation>
@@ -5630,6 +5631,7 @@
 <translation id="4946998421534856407">λειτουργία εκκίνησης εφαρμογών + πάνω βέλος</translation>
 <translation id="4947376546135294974">Δεδομένα από τον ιστότοπο που επισκέπτεστε</translation>
 <translation id="4950100687509657457">Δημιουργία προφίλ</translation>
+<translation id="4950360215042327246">[Συμβολοσειρά placeholder]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ένα αρχείο}other{# αρχεία}}</translation>
 <translation id="495170559598752135">Ενέργειες</translation>
 <translation id="4951966678293618079">Να μην γίνεται ποτέ αποθήκευση των κωδικών πρόσβασης για αυτόν τον ιστότοπο</translation>
@@ -5768,6 +5770,7 @@
 <translation id="5061531353537614467">Τούνδρα</translation>
 <translation id="5062930723426326933">Αποτυχία σύνδεσης, συνδεθείτε στο διαδίκτυο και δοκιμάστε ξανά.</translation>
 <translation id="5063480226653192405">Χρήση</translation>
+<translation id="5064921774605267982">Άνοιγμα προφίλ <ph name="PROFILE_NAME" />. Η διαχείριση αυτού του προφίλ γίνεται από τον γονέα σου.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Διαχείριση ασφαλούς DNS στις ρυθμίσεις του Chrome OS</translation>
 <translation id="5066534201484101197">Overscroll για πλοήγηση μεταξύ σελίδων</translation>
@@ -7219,6 +7222,7 @@
 <translation id="6122831415929794347">Απενεργοποίηση Ασφαλούς περιήγησης;</translation>
 <translation id="6124650939968185064">Οι ακόλουθες επεκτάσεις εξαρτώνται από αυτή την επέκταση:</translation>
 <translation id="6124698108608891449">Αυτός ο ιστότοπος χρειάζεται περισσότερες άδειες.</translation>
+<translation id="6125202119952209826">Συμμετοχή στην ομάδα καρτελών με τον χρήστη <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Δυστυχώς, θα πρέπει να προσθέσετε ξανά τον λογαριασμό σας σε αυτήν τη συσκευή <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Σελήνη</translation>
 <translation id="6126601353087978360">Εισαγάγετε τα σχόλιά σας εδώ:</translation>
@@ -7426,6 +7430,7 @@
 <translation id="6266984048393265562">Εξατομίκευση προφίλ</translation>
 <translation id="6267166720438879315">Επιλέξτε ένα πιστοποιητικό για την επαλήθευση της ταυτότητάς σας στον κεντρικό υπολογιστή <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Άνοιγμα με <ph name="APP" /></translation>
+<translation id="6269050081341530851">Όταν κλείνετε τα διπλότυπα, διατηρείται το παλαιότερο αντίγραφο</translation>
 <translation id="6270309713620950855">Υπενθύμιση σίγασης</translation>
 <translation id="6270391203985052864">Οι ιστότοποι μπορούν να ζητούν να στέλνουν ειδοποιήσεις.</translation>
 <translation id="6270486800167535228">Η επέκταση είναι καρφιτσωμένη. Επιλέξτε για να δείτε περισσότερες επιλογές</translation>
@@ -7868,6 +7873,7 @@
 <translation id="6607831829715835317">Περισσότερα εργαλεία</translation>
 <translation id="6607890859198268021">Η διαχείριση του <ph name="USER_EMAIL" /> γίνεται ήδη από τον οργανισμό <ph name="DOMAIN" />. Για να χρησιμοποιήσετε γονικούς ελέγχους με διαφορετικό Λογαριασμό Google, αποσυνδεθείτε μετά τη ρύθμιση και έπειτα επιλέξτε "Προσθήκη ατόμου" στην οθόνη σύνδεσης.</translation>
 <translation id="6608166463665411119">Επαναφορά eSIM</translation>
+<translation id="660846213831377756">Πλήκτρα ποντικιού</translation>
 <translation id="6608773371844092260">Για τη ρύθμιση του δακτυλικού αποτυπώματος, ζητήστε από το παιδί σας να αγγίξει τον αισθητήρα δακτυλικών αποτυπωμάτων στη δεξιά πλευρά της συσκευής <ph name="DEVICE_TYPE" />. Τα δεδομένα δακτυλικού αποτυπώματος του παιδιού σας αποθηκεύονται με ασφάλεια και δεν αποστέλλονται ποτέ εκτός της συσκευής <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Τα δεδομένα σύνδεσης θα αποθηκευτούν σε αυτήν τη συσκευή αφού εξέλθετε από την κατάσταση ανώνυμης περιήγησης. Θα μπορείτε να συνδεθείτε σε αυτόν τον ιστότοπο ξανά με τη συσκευή σας αργότερα.</translation>
 <translation id="6610002944194042868">Μετάφραση επιλογών</translation>
@@ -7967,6 +7973,7 @@
 <translation id="6679947539429331601">Απόκρυψη για 12 ώρες</translation>
 <translation id="6680442031740878064">Διαθέσιμος χώρος: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Βαθμολόγηση</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Συμβολοσειρά placeholder]</translation>
 <translation id="6683022854667115063">Ακουστικά</translation>
 <translation id="6683087162435654533">Επαναφορά όλων των καρτελών</translation>
 <translation id="6683433919380522900">Έχει οριστεί η επιλογή <ph name="PERMISSION_STATE" /> για την άδεια</translation>
@@ -8673,6 +8680,7 @@
 <translation id="7189451821249468368">Δεν διαθέτετε αρκετές αναβαθμίσεις για την εγγραφή αυτής της συσκευής. Επικοινωνήστε με το τμήμα πωλήσεων για να αγοράσετε περισσότερες. Εάν πιστεύετε ότι αυτό το μήνυμα εμφανίζεται κατά λάθος, επικοινωνήστε με την υποστήριξη πελατών.</translation>
 <translation id="7189965711416741966">Προστέθηκε δακτυλικό αποτύπωμα.</translation>
 <translation id="7190883804815364931">Τελευταία ενημέρωση σε αυτή την καρτέλα</translation>
+<translation id="7190921792980745354">Αποκλεισμός του χρήστη <ph name="MEMBER_FULL_NAME" />;</translation>
 <translation id="7191063546666816478">Ορισμένοι υποστηριζόμενοι σύνδεσμοι θα εξακολουθούν να ανοίγουν στις εφαρμογές <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> και σε <ph name="NUMBER_OF_OTHER_APPS" /> ακόμη εφαρμογές.</translation>
 <translation id="7191159667348037">Άγνωστος εκτυπωτής (USB)</translation>
 <translation id="7191631508323321927">Διάδρομος</translation>
@@ -8860,6 +8868,7 @@
 <translation id="7330533963640151632">Ρυθμίσεις της λειτουργίας <ph name="FEATURE_NAME" /> για τη συσκευή του χρήστη <ph name="USER_NAME" /> που κάνει κοινοποίηση με τον λογαριασμό <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + κάτω βέλος</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Διπλότυπες καρτέλες</translation>
 <translation id="7333388112938984914">Δεν είναι δυνατή η μεταφόρτωση αρχείων κατά τη χρήση μιας σύνδεσης με ογκοχρέωση.</translation>
 <translation id="7333669215417470379">Δημιουργία αντιγράφων ασφαλείας και επαναφορά εφαρμογών και ρυθμίσεων</translation>
 <translation id="7335974957018254119">Χρήση ορθογραφικού ελέγχου για</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 9712e65c..ec12df18 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -7221,6 +7221,7 @@
 <translation id="6122831415929794347">Turn off Safe Browsing?</translation>
 <translation id="6124650939968185064">The following extensions depend on this extension:</translation>
 <translation id="6124698108608891449">This site needs more permissions.</translation>
+<translation id="6125202119952209826">Join tab group with <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Unfortunately, you'll need to add your account to this <ph name="DEVICE_TYPE" /> again.</translation>
 <translation id="6125639926370653692">Moon</translation>
 <translation id="6126601353087978360">Please enter your feedback here:</translation>
@@ -7871,6 +7872,7 @@
 <translation id="6607831829715835317">More too&amp;ls</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> is already being managed by <ph name="DOMAIN" />. To use parental controls with a different Google Account, sign out after setup, then select 'Add person' on the sign-in screen.</translation>
 <translation id="6608166463665411119">Reset eSIM</translation>
+<translation id="660846213831377756">Mouse keys</translation>
 <translation id="6608773371844092260">To set up fingerprint, have your child touch the fingerprint sensor at the right hand side of this <ph name="DEVICE_TYPE" />. Your child's fingerprint data is stored securely and never leaves this <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Sign-in data will be stored on this device after you exit Incognito mode. You'll be able to sign in to this website with your device again later.</translation>
 <translation id="6610002944194042868">Translate Options</translation>
@@ -8677,6 +8679,7 @@
 <translation id="7189451821249468368">You do not have enough upgrades to enrol this device. Please contact sales to purchase more. If you believe that you're seeing this message in error, please contact support.</translation>
 <translation id="7189965711416741966">Fingerprint added.</translation>
 <translation id="7190883804815364931">Last update to this tab</translation>
+<translation id="7190921792980745354">Block <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Some supported links will still open in <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> and <ph name="NUMBER_OF_OTHER_APPS" /> other apps.</translation>
 <translation id="7191159667348037">Unknown printer (USB)</translation>
 <translation id="7191631508323321927">Hallway</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index eaa83ba..322172e 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -7205,6 +7205,7 @@
 <translation id="6122831415929794347">¿Quieres desactivar la Navegación segura?</translation>
 <translation id="6124650939968185064">Las siguientes extensiones dependen de esta extensión:</translation>
 <translation id="6124698108608891449">Este sitio necesita más permisos.</translation>
+<translation id="6125202119952209826">Únete al grupo de pestañas con <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Lamentablemente, debes volver a agregar tu cuenta a este dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Luna</translation>
 <translation id="6126601353087978360">Ingresa tus comentarios aquí:</translation>
@@ -7855,6 +7856,7 @@
 <translation id="6607831829715835317">Más herramientas</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> ya administra <ph name="USER_EMAIL" />. Para usar los controles parentales con otra Cuenta de Google, sal de tu cuenta después de finalizar la configuración y, luego, selecciona "Agregar persona" en la pantalla de acceso.</translation>
 <translation id="6608166463665411119">Restablecer eSIM</translation>
+<translation id="660846213831377756">Teclas del mouse</translation>
 <translation id="6608773371844092260">Para configurar una huella dactilar, haz que tu hijo toque el sensor de huellas dactilares en el lado derecho del dispositivo <ph name="DEVICE_TYPE" />. Los datos de la huella dactilar de tu hijo se almacenan de forma segura y no salen nunca de este dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Los datos de acceso se almacenarán en este dispositivo cuando salgas del modo Incógnito. Más tarde, podrás volver a acceder a este sitio web con tu dispositivo.</translation>
 <translation id="6610002944194042868">Opciones de traducción</translation>
@@ -8661,6 +8663,7 @@
 <translation id="7189451821249468368">No tienes suficientes actualizaciones para inscribir este dispositivo; comunícate con el vendedor para adquirir más. Si crees que recibiste este mensaje por error, comunícate con el servicio de asistencia.</translation>
 <translation id="7189965711416741966">Se agregó la huella digital.</translation>
 <translation id="7190883804815364931">Última actualización de esta pestaña</translation>
+<translation id="7190921792980745354">¿Quieres bloquear a <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Algunos vínculos compatibles se seguirán abriendo en <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> y otras <ph name="NUMBER_OF_OTHER_APPS" /> apps.</translation>
 <translation id="7191159667348037">Impresora desconocida (USB)</translation>
 <translation id="7191631508323321927">Pasillo</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index c50a51b2..f5e35606 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -7206,6 +7206,7 @@
 <translation id="6122831415929794347">¿Desactivar Navegación segura?</translation>
 <translation id="6124650939968185064">Las siguientes extensiones dependen de esta extensión:</translation>
 <translation id="6124698108608891449">Este sitio web necesita más permisos.</translation>
+<translation id="6125202119952209826">Unirte al grupo de pestañas con <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Debes volver a añadir una cuenta a este <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Luna</translation>
 <translation id="6126601353087978360">Escribe tus comentarios aquí:</translation>
@@ -7856,6 +7857,7 @@
 <translation id="6607831829715835317">Más herramientas</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ya lo gestiona <ph name="DOMAIN" />. Para usar el control parental con otra cuenta de Google, cierra sesión después de completar la configuración y selecciona "Añadir perfil" en la pantalla de inicio de sesión.</translation>
 <translation id="6608166463665411119">Restablecer eSIM</translation>
+<translation id="660846213831377756">Teclas del ratón</translation>
 <translation id="6608773371844092260">Para configurar la huella digital, pídele a tu hijo/a que toque el sensor de huellas digitales, que está en el lado derecho de este <ph name="DEVICE_TYPE" />. Los datos de la huella digital de tu hijo/a se almacenan de forma segura y nunca salen de este <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Los datos de inicio de sesión se almacenarán en este dispositivo cuando salgas del modo Incógnito. Podrás volver a iniciar sesión en este sitio web con tu dispositivo más tarde.</translation>
 <translation id="6610002944194042868">Opciones del Traductor</translation>
@@ -8662,6 +8664,7 @@
 <translation id="7189451821249468368">No tienes las licencias necesarias para registrar este dispositivo. Ponte en contacto con el departamento de ventas para comprar más. Si crees que este mensaje ha aparecido por error, ponte en contacto con el servicio de asistencia.</translation>
 <translation id="7189965711416741966">Huella digital añadida.</translation>
 <translation id="7190883804815364931">Última actualización de esta pestaña</translation>
+<translation id="7190921792980745354">¿Bloquear a <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Algunos enlaces compatibles se seguirán abriendo en <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> y en otras <ph name="NUMBER_OF_OTHER_APPS" /> aplicaciones.</translation>
 <translation id="7191159667348037">Impresora desconocida (USB)</translation>
 <translation id="7191631508323321927">Pasillo</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 43d829d..19aeb55 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -5115,6 +5115,7 @@
 <translation id="4586275095964870617">URL-i <ph name="URL" /> ei saanud alternatiivses brauseris avada. Võtke ühendust süsteemiadministraatoriga.</translation>
 <translation id="4587589328781138893">Saidid</translation>
 <translation id="4588749726511456218">Kerimise kiirendus. <ph name="LINK_BEGIN" />Lugege lisateavet<ph name="LINK_END" />.</translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> ja <ph name="DOMAIN" /> tunduvad olema seotud. Enne oma parooli kasutamist veenduge, et usaldaksite saiti <ph name="DOMAIN" />.</translation>
 <translation id="4589713469967853491">Logide kirjutamine kataloogi Allalaadimised õnnestus.</translation>
 <translation id="4590785647529325123">Inkognito režiimi sirvimisajaloo kustutamiseks seadmest sulgege kõik inkognito vahelehed</translation>
 <translation id="459204634473266369">Ühtegi seadet pole kontole <ph name="PRIMARY_EMAIL" /> salvestatud</translation>
@@ -5621,6 +5622,7 @@
 <translation id="4946998421534856407">käivitaja + ülesnool</translation>
 <translation id="4947376546135294974">Andmed saidilt, mida külastate</translation>
 <translation id="4950100687509657457">Profiili loomine</translation>
+<translation id="4950360215042327246">[Kohatäite string]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fail}other{# faili}}</translation>
 <translation id="495170559598752135">Toimingud</translation>
 <translation id="4951966678293618079">Ära kunagi salvesta sellel saidil paroole</translation>
@@ -5759,6 +5761,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Sisselogimine ebaõnnestus. Looge ühendus Internetiga ja proovige uuesti.</translation>
 <translation id="5063480226653192405">Kasutus</translation>
+<translation id="5064921774605267982">Ava profiil <ph name="PROFILE_NAME" />. Seda profiili haldab sinu vanem.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Hallake turvalist DNS-i Chrome OS-i seadetes</translation>
 <translation id="5066534201484101197">Ülekerimine lehtede vahel liikumiseks</translation>
@@ -7209,6 +7212,7 @@
 <translation id="6122831415929794347">Kas lülitada Google'i ohutu sirvimine välja?</translation>
 <translation id="6124650939968185064">Sellest laiendusest sõltuvad järgmised laiendused:</translation>
 <translation id="6124698108608891449">See sait vajab rohkem lube.</translation>
+<translation id="6125202119952209826">Liituge vahelehegrupiga, kus on <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Kahjuks peate oma konto seadmesse <ph name="DEVICE_TYPE" /> uuesti lisama.</translation>
 <translation id="6125639926370653692">Kuu</translation>
 <translation id="6126601353087978360">Sisestage tagasiside siia:</translation>
@@ -7416,6 +7420,7 @@
 <translation id="6266984048393265562">Profiili kohandamine</translation>
 <translation id="6267166720438879315">Valige sertifikaat, et tuvastada ennast hostile <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Ava rakendusega <ph name="APP" /></translation>
+<translation id="6269050081341530851">Duplikaatide sulgemisel säilitatakse vanim koopia</translation>
 <translation id="6270309713620950855">Müksamise tühistamine</translation>
 <translation id="6270391203985052864">Saidid saavad küsida luba märguannete saatmiseks</translation>
 <translation id="6270486800167535228">Laiendus on kinnitatud. Valige see rohkemate valikute nägemiseks</translation>
@@ -7858,6 +7863,7 @@
 <translation id="6607831829715835317">Rohkem töö&amp;riistu</translation>
 <translation id="6607890859198268021">Kontot <ph name="USER_EMAIL" /> haldab juba domeen <ph name="DOMAIN" />. Kui soovite vanemlikku järelevalvet kasutada mõne teise Google'i kontoga, logige pärast seadistamist välja ja tehke siis sisselogimiskuval valik „Lisa inimene”.</translation>
 <translation id="6608166463665411119">eSIM-i lähtestamine</translation>
+<translation id="660846213831377756">Hiireklahvid</translation>
 <translation id="6608773371844092260">Sõrmejälje seadistamiseks paluge lapsel puudutada seadme <ph name="DEVICE_TYPE" /> paremas servas olevat sõrmejäljeandurit. Teie lapse sõrmejäljeandmed talletatakse turvaliselt ja neid ei edastata kunagi seadmest <ph name="DEVICE_TYPE" /> väljapoole.</translation>
 <translation id="6609478180749378879">Sisselogimisandmed salvestatakse sellesse seadmesse pärast inkognito režiimist väljumist. Hiljem saate oma seadmega sellele veebisaidile uuesti sisse logida.</translation>
 <translation id="6610002944194042868">Tõlkimise valikud</translation>
@@ -7957,6 +7963,7 @@
 <translation id="6679947539429331601">Peida 12 tunniks</translation>
 <translation id="6680442031740878064">Saadaval: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Kiirus</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Kohatäite string]</translation>
 <translation id="6683022854667115063">Kõrvaklapid</translation>
 <translation id="6683087162435654533">T&amp;aasta kõik vahelehed</translation>
 <translation id="6683433919380522900">Luba on <ph name="PERMISSION_STATE" /></translation>
@@ -8663,6 +8670,7 @@
 <translation id="7189451821249468368">Teil ei ole piisavalt täiendusi selle seadme registreerimiseks. Täienduste ostmiseks võtke ühendust müügiosakonnaga. Kui arvate, et saite selle sõnumi ekslikult, võtke ühendust toega.</translation>
 <translation id="7189965711416741966">Sõrmejälg lisati.</translation>
 <translation id="7190883804815364931">Selle vahelehe viimane värskendus</translation>
+<translation id="7190921792980745354">Kas blokeerida <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Mõned toetatud lingid avanevad endiselt rakendustes <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ja veel <ph name="NUMBER_OF_OTHER_APPS" /> rakenduses.</translation>
 <translation id="7191159667348037">Tundmatu printer (USB)</translation>
 <translation id="7191631508323321927">Koridor</translation>
@@ -8850,6 +8858,7 @@
 <translation id="7330533963640151632">Funktsiooni <ph name="FEATURE_NAME" /> seaded kasutaja <ph name="USER_NAME" /> seadmele, jagatakse kontol <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + allanool</translation>
 <translation id="7332053360324989309">Spetsiaalne töötaja: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Vahelehtede duplikaadid</translation>
 <translation id="7333388112938984914">Faile ei saa mahupõhise ühenduse kasutamise ajal üles laadida.</translation>
 <translation id="7333669215417470379">Rakenduste ja seadete varundamine ja taastamine</translation>
 <translation id="7335974957018254119">Kasuta õigekirjakontrolli:</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index d451af3d..248c9c4 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -5109,6 +5109,7 @@
 <translation id="4586275095964870617">Ezin izan da ireki <ph name="URL" /> beste arakatzaile batean. Jarri sistemaren administratzailearekin harremanetan.</translation>
 <translation id="4587589328781138893">Webguneak</translation>
 <translation id="4588749726511456218">Gora/Behera egiteko moduaren azelerazioa <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> eta <ph name="DOMAIN" /> erlazionatuta daude. Ziurtatu <ph name="DOMAIN" /> fidagarritzat jotzen duzula pasahitza erabili baino lehen.</translation>
 <translation id="4589713469967853491">Idatzi dira erregistroak Deskargak direktorioan.</translation>
 <translation id="4590785647529325123">Gailuan gordetako ezkutuko moduko arakatze-historia ezabatzeko, itxi ezkutuko moduko fitxa guztiak</translation>
 <translation id="459204634473266369">Ez dago gailurik gordeta <ph name="PRIMARY_EMAIL" /> kontuan</translation>
@@ -5614,6 +5615,7 @@
 <translation id="4946998421534856407">Exekutatzeko tresnaren tekla + gora egiteko gezi-tekla</translation>
 <translation id="4947376546135294974">Bisitatzen ari zaren webguneko datuak</translation>
 <translation id="4950100687509657457">Sortu profil bat</translation>
+<translation id="4950360215042327246">[Leku-markaren katea]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fitxategi bat}other{# fitxategi}}</translation>
 <translation id="495170559598752135">Ekintzak</translation>
 <translation id="4951966678293618079">Ez gorde webgune honetako pasahitzak inoiz</translation>
@@ -5752,6 +5754,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Ezin izan da saioa hasi. Konektatu Internetera eta saiatu berriro.</translation>
 <translation id="5063480226653192405">Erabilera</translation>
+<translation id="5064921774605267982">Ireki <ph name="PROFILE_NAME" /> profila. Gurasoak kudeatzen du profila.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Kudeatu DNS segurua Chrome OS-ren ezarpenetan</translation>
 <translation id="5066534201484101197">Pasatu hatza amaiera-puntutik orrietan zehar nabigatzeko</translation>
@@ -7198,6 +7201,7 @@
 <translation id="6122831415929794347">Arakatze segurua desaktibatu nahi duzu?</translation>
 <translation id="6124650939968185064">Luzapen hauek beste honen menpe daude:</translation>
 <translation id="6124698108608891449">Webgune honek baimen gehiago behar ditu.</translation>
+<translation id="6125202119952209826">Sartu fitxa taldean <ph name="OWNER_FIRST_NAME" /> erabiltzailearekin</translation>
 <translation id="6125479973208104919">Kontua berriro gehitu beharko duzu <ph name="DEVICE_TYPE" /> gailuan.</translation>
 <translation id="6125639926370653692">Ilargia</translation>
 <translation id="6126601353087978360">Idatzi iritzia hemen:</translation>
@@ -7405,6 +7409,7 @@
 <translation id="6266984048393265562">Pertsonalizatu profila</translation>
 <translation id="6267166720438879315">Hautatu ziurtagiria zeure burua <ph name="HOST_NAME" /> ostalarian egiaztatzeko</translation>
 <translation id="6268252012308737255">Ireki <ph name="APP" /> aplikazioan</translation>
+<translation id="6269050081341530851">Fitxa bikoiztuak ixten dituzunean, kopia zaharrena mantenduko da</translation>
 <translation id="6270309713620950855">Audioa desaktibatuaren abisua</translation>
 <translation id="6270391203985052864">Webguneek jakinarazpenak bidaltzea eska dezakete</translation>
 <translation id="6270486800167535228">Luzapena ainguratuta dago. Aukera gehiago ikusteko, hautatu hau</translation>
@@ -7847,6 +7852,7 @@
 <translation id="6607831829715835317">&amp;Tresna gehiago</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> da <ph name="USER_EMAIL" /> kontuaren kudeatzailea. Google-ko beste kontu batekin guraso-murriztapenak erabiltzeko, amaitu saioa konfigurazioa osatu ondoren. Gero, hautatu "Gehitu pertsona bat" saioa hasteko pantailan.</translation>
 <translation id="6608166463665411119">Berrezarri eSIMa</translation>
+<translation id="660846213831377756">Saguaren teklak</translation>
 <translation id="6608773371844092260">Hatz-marka konfiguratzeko, eskatu haurrari <ph name="DEVICE_TYPE" /> honen eskuinaldean dagoen hatz-marken sentsorea sakatzeko. Haurraren hatz-markaren datuak modu seguruan gordeko dira eta ez dira inoiz aterako <ph name="DEVICE_TYPE" /> gailutik.</translation>
 <translation id="6609478180749378879">Ezkutuko modutik irteten zarenean, saioa hasteko datuak gailu honetan gordeko dira. Horrela, gailu honekin webgune honetan saioa hasi ahalko duzu berriro.</translation>
 <translation id="6610002944194042868">Itzultzeko aukerak</translation>
@@ -7946,6 +7952,7 @@
 <translation id="6679947539429331601">Ezkutatu 12 orduz</translation>
 <translation id="6680442031740878064">Libre: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Abiadura</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Leku-markaren katea]</translation>
 <translation id="6683022854667115063">Entzungailuak</translation>
 <translation id="6683087162435654533">&amp;Leheneratu fitxa guztiak</translation>
 <translation id="6683433919380522900">Baimena hau da: <ph name="PERMISSION_STATE" /></translation>
@@ -8651,6 +8658,7 @@
 <translation id="7189451821249468368">Ez dituzu behar adina lizentzia gailua erregistratzeko. Gehiago erosteko, jarri salmenta sailarekin harremanetan. Mezu hau ikusi beharko ez zenukeela uste baduzu, jarri laguntza-zerbitzuarekin harremanetan.</translation>
 <translation id="7189965711416741966">Gehitu da hatz-marka.</translation>
 <translation id="7190883804815364931">Fitxa honetako azken eguneratzea</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> blokeatu nahi duzu?</translation>
 <translation id="7191063546666816478">Laguntza emateko esteka batzuek <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> eta beste <ph name="NUMBER_OF_OTHER_APPS" /> aplikaziotan irekitzen jarraituko dute.</translation>
 <translation id="7191159667348037">Inprimagailu ezezaguna (USB)</translation>
 <translation id="7191631508323321927">Korridorea</translation>
@@ -8838,6 +8846,7 @@
 <translation id="7330533963640151632"><ph name="FEATURE_NAME" /> eginbidearen ezarpenak <ph name="USER_NAME" /> erabiltzailearen gailurako; <ph name="USER_EMAIL" /> kontuaren bidez partekatzen dira.</translation>
 <translation id="7331646370422660166">Alt + behera egiteko gezi-tekla</translation>
 <translation id="7332053360324989309">Langile espezifikoa: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Fitxa bikoiztuak</translation>
 <translation id="7333388112938984914">Ezin da kargatu fitxategirik konexio neurtu batean.</translation>
 <translation id="7333669215417470379">Egin babeskopiak, eta leheneratu aplikazioak eta ezarpenak</translation>
 <translation id="7335974957018254119">Erabili ortografia-zuzentzailea hizkuntza hauetan:</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index c9a5fb8..8da68945 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -7218,6 +7218,7 @@
 <translation id="6122831415929794347">«مرور ایمن» خاموش شود؟</translation>
 <translation id="6124650939968185064">افزودنه‌های زیر به این برنامه افزودنی وابسته هستند:</translation>
 <translation id="6124698108608891449">این سایت به مجوزهای بیشتری نیاز دارد.</translation>
+<translation id="6125202119952209826">به گروه برگه با <ph name="OWNER_FIRST_NAME" /> بپیوندید</translation>
 <translation id="6125479973208104919">متأسفانه دوباره باید حسابتان را به این <ph name="DEVICE_TYPE" /> اضافه کنید.</translation>
 <translation id="6125639926370653692">ماه</translation>
 <translation id="6126601353087978360">لطفاً بازخوردتان را اینجا وارد کنید:</translation>
@@ -7870,6 +7871,7 @@
 <translation id="6607831829715835317">ا&amp;بزارهای بیشتر</translation>
 <translation id="6607890859198268021">‏درحال‌حاضر <ph name="DOMAIN" /> <ph name="USER_EMAIL" /> را مدیریت می‌کند. برای استفاده از کنترل‌های والدین با «حساب Google» دیگر، بعد از راه‌اندازی از سیستم خارج شوید و سپس «افزودن فرد» را در صفحه ورود به سیستم انتخاب کنید.</translation>
 <translation id="6608166463665411119">بازنشانی سیم‌کارت داخلی</translation>
+<translation id="660846213831377756">کلیدهای موشواره</translation>
 <translation id="6608773371844092260">برای تنظیم اثر انگشت، از فرزندتان بخواهید حسگر اثر انگشت را در سمت راست این <ph name="DEVICE_TYPE" /> لمس کند. داده‌های اثر انگشت فرزندتان به‌صورت ایمن ذخیره می‌شود و هرگز از این <ph name="DEVICE_TYPE" /> خارج نمی‌شود.</translation>
 <translation id="6609478180749378879">پس‌از خروج از «حالت ناشناس»، داده‌های ورود به سیستم در این دستگاه ذخیره خواهد شد. بعداً می‌توانید با دستگاهتان دوباره به سیستم این وب‌سایت وارد شوید.</translation>
 <translation id="6610002944194042868">گزینه‌های ترجمه</translation>
@@ -8676,6 +8678,7 @@
 <translation id="7189451821249468368">برای ثبت‌نام این دستگاه، به ‌اندازه کافی ارتقا ندارید. لطفاً برای خرید بیشتر با مرکز فروش تماس بگیرید. اگر فکر می‌کنید این پیام به اشتباه به شما نشان داده شده است، لطفاً با مرکز پشتیبانی تماس بگیرید.</translation>
 <translation id="7189965711416741966">اثرانگشت اضافه شد.</translation>
 <translation id="7190883804815364931">آخرین به‌روزرسانی این برگه</translation>
+<translation id="7190921792980745354">‫<ph name="MEMBER_FULL_NAME" /> مسدود شود؟</translation>
 <translation id="7191063546666816478">برخی‌از پیوندهای پشتیبانی‌شده همچنان در <ph name="APP_NAME" />، <ph name="APP_NAME_2" />، <ph name="APP_NAME_3" />، و <ph name="NUMBER_OF_OTHER_APPS" /> برنامه دیگر باز خواهد شد.</translation>
 <translation id="7191159667348037">‏چاپگر ناشناس (USB)</translation>
 <translation id="7191631508323321927">کریدور</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 622dab6..da39d29 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -328,7 +328,7 @@
 <translation id="1217114730239853757">Haluatko aktivoida ChromeVoxin, ChromeOS Flexin sisäänrakennetun näytönlukijan? Jos haluat, paina välilyöntiä.</translation>
 <translation id="1217117837721346030">Lataa epäilyttävä tiedosto</translation>
 <translation id="1217483152325416304">Paikallinen datasi poistetaan pian</translation>
-<translation id="1217668622537098248">Palaa ykkösklikkaukseen toiminnon jälkeen</translation>
+<translation id="1217668622537098248">Palaa ykköspainikkeen klikkaukseen toiminnon jälkeen</translation>
 <translation id="1218015446623563536">Poista Linux</translation>
 <translation id="1218839827383191197"><ph name="BEGIN_PARAGRAPH1" />Googlen sijaintipalvelu pyrkii arvioimaan laitteen sijaintia esimerkiksi Wi-Fin, mobiiliverkkojen ja anturien avulla.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />Voit poistaa palvelun käytöstä poistamalla laitteen sijainnin pääasetuksen käytöstä. Sijaintiasetuksissa voit myös estää Wi-Fin, mobiiliverkkojen ja anturien käytön sijainnin määrityksessä.<ph name="END_PARAGRAPH2" /></translation>
@@ -5120,6 +5120,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> ei ollut avattavissa toisessa selaimessa. Ota yhteyttä tilisi järjestelmänvalvojaan.</translation>
 <translation id="4587589328781138893">Sivustot</translation>
 <translation id="4588749726511456218">Vierityksen nopeuttaminen <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> ja <ph name="DOMAIN" /> vaikuttavat liittyvän toisiinsa. Ennen kuin käytät salasanaa, varmista että <ph name="DOMAIN" /> on luotettava.</translation>
 <translation id="4589713469967853491">Lokit tallennettu onnistuneesti Lataukset-hakemistoon</translation>
 <translation id="4590785647529325123">Poista laitteen incognito-selaushistoria sulkemalla kaikki incognito-välilehdet</translation>
 <translation id="459204634473266369">Osoitteeseen <ph name="PRIMARY_EMAIL" /> ei tallennettu laitteita</translation>
@@ -5626,6 +5627,7 @@
 <translation id="4946998421534856407">käynnistysohjelma + ylänuoli</translation>
 <translation id="4947376546135294974">Data sivustolta, jolla olet</translation>
 <translation id="4950100687509657457">Luo profiili</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{tiedosto}other{# tiedostoa}}</translation>
 <translation id="495170559598752135">Toiminnot</translation>
 <translation id="4951966678293618079">Älä koskaan tallenna tämän sivuston salasanoja</translation>
@@ -5764,6 +5766,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Kirjautuminen epäonnistui. Muodosta verkkoyhteys ja yritä uudelleen.</translation>
 <translation id="5063480226653192405">Käyttö</translation>
+<translation id="5064921774605267982">Avaa profiili: <ph name="PROFILE_NAME" /> Vanhempasi hallinnoi tätä käyttäjäprofiilia.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Ylläpidä suojattua DNS:ää Chrome-käyttöjärjestelmän asetuksissa</translation>
 <translation id="5066534201484101197">Siirry sivujen välillä loppuunvierittämällä</translation>
@@ -7214,6 +7217,7 @@
 <translation id="6122831415929794347">Laitetaanko Selaussuoja pois päältä?</translation>
 <translation id="6124650939968185064">Seuraavat laajennukset ovat riippuvaisia tästä laajennuksesta:</translation>
 <translation id="6124698108608891449">Tämä sivusto tarvitsee lisää käyttöoikeuksia.</translation>
+<translation id="6125202119952209826">Liity välilehtiryhmään, jossa <ph name="OWNER_FIRST_NAME" /> on</translation>
 <translation id="6125479973208104919">Sinun on lisättävä tilisi laitteelle <ph name="DEVICE_TYPE" /> uudelleen.</translation>
 <translation id="6125639926370653692">Kuu</translation>
 <translation id="6126601353087978360">Lisää palautteesi tähän:</translation>
@@ -7421,6 +7425,7 @@
 <translation id="6266984048393265562">Muokkaa profiilia</translation>
 <translation id="6267166720438879315">Valitse varmenne, jolla todennat itsesi kohteelle <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Avaa sovelluksella <ph name="APP" /></translation>
+<translation id="6269050081341530851">Vanhin kopio säilytetään, kun suljet päällekkäiset kopiot</translation>
 <translation id="6270309713620950855">Muistutus mykistyksestä</translation>
 <translation id="6270391203985052864">Sivustot saavat pyytää lupaa lähettää ilmoituksia</translation>
 <translation id="6270486800167535228">Laajennus on kiinnitetty. Katso lisää klikkaamalla tästä</translation>
@@ -7863,6 +7868,7 @@
 <translation id="6607831829715835317">&amp;Lisää työkaluja</translation>
 <translation id="6607890859198268021">Tiliä (<ph name="USER_EMAIL" />) hallinnoi jo <ph name="DOMAIN" />. Jos haluat käyttää lapsilukkoa eri Google-tilillä, kirjaudu ulos käyttöönoton jälkeen, ja valitse sitten kirjautumisnäytöltä Lisää henkilö.</translation>
 <translation id="6608166463665411119">Nollaa eSIM</translation>
+<translation id="660846213831377756">Hiiren painikkeet</translation>
 <translation id="6608773371844092260">Ota sormenjälki käyttöön pyytämällä lasta koskettamaan sormenjälkitunnistinta, joka on laitteen (<ph name="DEVICE_TYPE" />) oikeassa reunassa. Lapsen sormenjälkidata tallennetaan turvallisesti vain tälle laitteelle (<ph name="DEVICE_TYPE" />).</translation>
 <translation id="6609478180749378879">Kirjautumisdata pysyy tällä laitteella incognito-tilan sulkemisen jälkeen. Voit myöhemmin kirjautua tälle sivustolle uudelleen laitteellasi.</translation>
 <translation id="6610002944194042868">Käännösasetukset</translation>
@@ -7962,6 +7968,7 @@
 <translation id="6679947539429331601">Piilota 12 tunnin ajaksi</translation>
 <translation id="6680442031740878064">Käytettävissä: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Nopeus</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [Placeholder String]</translation>
 <translation id="6683022854667115063">Kuulokkeet</translation>
 <translation id="6683087162435654533">Palauta kaikki välilehdet</translation>
 <translation id="6683433919380522900">Lupa: <ph name="PERMISSION_STATE" /></translation>
@@ -8668,6 +8675,7 @@
 <translation id="7189451821249468368">Sinulla ei ole tarpeeksi päivityksiä tämän laitteen rekisteröintiä varten. Osta niitä lisää ottamalla yhteyttä myyntitiimiin. Jos sinun ei mielestäsi pitäisi nähdä tätä viestiä, ota yhteyttä tukeen.</translation>
 <translation id="7189965711416741966">Sormenjälki lisätty</translation>
 <translation id="7190883804815364931">Viimeisin päivitys tähän välilehteen</translation>
+<translation id="7190921792980745354">Estetäänkö <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Jotkin tuetut linkit avautuvat edelleen näissä sovelluksissa: <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ja <ph name="NUMBER_OF_OTHER_APPS" /> muussa sovelluksessa.</translation>
 <translation id="7191159667348037">Tuntematon tulostin (USB)</translation>
 <translation id="7191631508323321927">Käytävä</translation>
@@ -8855,6 +8863,7 @@
 <translation id="7330533963640151632">Käyttäjän <ph name="USER_NAME" /> <ph name="FEATURE_NAME" /> ‑asetukset, jaetaan tilillä <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + alanuoli</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Välilehtien kopiot</translation>
 <translation id="7333388112938984914">Tiedostoja ei voi ladata käytön mukaan veloitettavalla yhteydellä.</translation>
 <translation id="7333669215417470379">Sovellusten ja asetusten varmuuskopiointi ja palauttaminen</translation>
 <translation id="7335974957018254119">Tarkista oikeinkirjoitus:</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 922e949d..fa75017 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -5125,6 +5125,7 @@
 <translation id="4586275095964870617">Hindi mabuksan ang <ph name="URL" /> sa isang alternatibong browser. Mangyaring makipag-ugnayan sa iyong system administrator.</translation>
 <translation id="4587589328781138893">Mga Site</translation>
 <translation id="4588749726511456218">Acceleration ng pag-scroll <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Mukhang magkaugnay ang <ph name="PASSWORD_DOMAIN" /> at <ph name="DOMAIN" />. Tiyaking pinagkakatiwalaan mo ang <ph name="DOMAIN" /> bago mo gamitin ang iyong password.</translation>
 <translation id="4589713469967853491">Na-write na ang mga log sa directory na Mga Download.</translation>
 <translation id="4590785647529325123">Para ma-delete ang history ng pag-browse sa Incognito mula sa iyong device, isara ang lahat ng tab na Incognito</translation>
 <translation id="459204634473266369">Walang device na naka-save sa <ph name="PRIMARY_EMAIL" /></translation>
@@ -5631,6 +5632,7 @@
 <translation id="4946998421534856407">launcher + pataas na arrow</translation>
 <translation id="4947376546135294974">Data mula sa site na binibisita mo</translation>
 <translation id="4950100687509657457">Lumikha ng profile</translation>
+<translation id="4950360215042327246">[String ng Placeholder]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{isang file}one{# file}other{# na file}}</translation>
 <translation id="495170559598752135">Mga Pagkilos</translation>
 <translation id="4951966678293618079">Huwag kailanman mag-save ng mga password para sa site na ito</translation>
@@ -5769,6 +5771,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Nabigo ang pag-sign in, mangyaring kumonekta sa internet at subukan ulit.</translation>
 <translation id="5063480226653192405">Paggamit</translation>
+<translation id="5064921774605267982">Buksan ang profile na <ph name="PROFILE_NAME" />. Pinapamahalaan ng iyong magulang ang profile na ito.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Pamahalaan ang secure na DNS sa mga setting ng ChromeOS</translation>
 <translation id="5066534201484101197">Mag-overscroll para mag-navigate sa mga page</translation>
@@ -7219,6 +7222,7 @@
 <translation id="6122831415929794347">I-off ang Ligtas na Pag-browse?</translation>
 <translation id="6124650939968185064">Nakadepende ang mga sumusunod na extension sa extension na ito:</translation>
 <translation id="6124698108608891449">Kailangan ng site na ito ng higit pang pahintulot.</translation>
+<translation id="6125202119952209826">Sumali sa grupo ng tab kasama ni <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Sa kasamaang-palad, kakailanganin mong idagdag muli ang iyong account sa <ph name="DEVICE_TYPE" /> na ito.</translation>
 <translation id="6125639926370653692">Buwan</translation>
 <translation id="6126601353087978360">Pakilagay dito ang iyong feedback:</translation>
@@ -7426,6 +7430,7 @@
 <translation id="6266984048393265562">I-customize ang Profile</translation>
 <translation id="6267166720438879315">Pumili ng certificate upang patunayan ang iyong sarili sa <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Buksan sa <ph name="APP" /></translation>
+<translation id="6269050081341530851">Itinatabi ang pinakalumang kopya kapag isinasara mo ang mga duplicate</translation>
 <translation id="6270309713620950855">Nudge sa pag-mute</translation>
 <translation id="6270391203985052864">Puwedeng humiling ang mga site na magpadala ng mga notification</translation>
 <translation id="6270486800167535228">Na-pin na ang extension. Piliin para makita ang higit pang opsyon</translation>
@@ -7870,6 +7875,7 @@
 <translation id="6607831829715835317">Higit pang mga too&amp;l</translation>
 <translation id="6607890859198268021">Pinapamahalaan ng <ph name="DOMAIN" /> ang <ph name="USER_EMAIL" />. Para makagamit ng parental controls sa ibang Google Account, mag-sign out pagkatapos ng pag-set up, at piliin ang "Magdagdag ng tao" sa screen sa pag-sign in.</translation>
 <translation id="6608166463665411119">I-reset ang eSIM</translation>
+<translation id="660846213831377756">Mga mouse key</translation>
 <translation id="6608773371844092260">Para i-set up ang fingerprint, ipapindot sa iyong anak ang sensor para sa fingerprint sa kanang bahagi ng <ph name="DEVICE_TYPE" /> na ito. Secure na sino-store ang data ng fingerprint ng iyong anak at hindi ito kailanman lalabas sa <ph name="DEVICE_TYPE" /> na ito.</translation>
 <translation id="6609478180749378879">Iso-store ang data ng pag-sign in sa device na ito pagkatapos mong lumabas sa Incognito mode. Makakapag-sign in ka ulit sa website na ito gamit ang iyong device sa ibang pagkakataon.</translation>
 <translation id="6610002944194042868">Mga Opsyon sa Pagsasalin</translation>
@@ -7969,6 +7975,7 @@
 <translation id="6679947539429331601">I-hide sa loob ng 12 oras</translation>
 <translation id="6680442031740878064">Available: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">I-rate</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [String ng Placeholder]</translation>
 <translation id="6683022854667115063">Headphones</translation>
 <translation id="6683087162435654533">I-restore ang Lahat ng Tab</translation>
 <translation id="6683433919380522900"><ph name="PERMISSION_STATE" /> ang pahintulot</translation>
@@ -8675,6 +8682,7 @@
 <translation id="7189451821249468368">Wala kang sapat na mga upgrade para i-enroll ang device na ito. Makipag-ugnayan sa sales para bumili ng higit pa. Kung naniniwala kang nakikita mo ang mensaheng ito dahil sa error, makipag-ugnayan sa suporta.</translation>
 <translation id="7189965711416741966">Naidagdag ang fingerprint.</translation>
 <translation id="7190883804815364931">Huling Update sa Tab na ito</translation>
+<translation id="7190921792980745354">I-block si <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Bubukas pa rin ang ilang sinusuportahang link sa <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, at <ph name="NUMBER_OF_OTHER_APPS" /> pang app.</translation>
 <translation id="7191159667348037">Hindi Alam na Printer (USB)</translation>
 <translation id="7191631508323321927">Pasilyo</translation>
@@ -8862,6 +8870,7 @@
 <translation id="7330533963640151632">Mga setting ng <ph name="FEATURE_NAME" /> para sa device ni <ph name="USER_NAME" />, na nagshe-share sa ilalim ng account na <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + pababang arrow</translation>
 <translation id="7332053360324989309">Nakalaang Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Mga duplicate na tab</translation>
 <translation id="7333388112938984914">Hindi makakapag-upload ng mga file habang gumagamit ng metered connection.</translation>
 <translation id="7333669215417470379">I-back up at i-restore ang iyong mga app at setting</translation>
 <translation id="7335974957018254119">Gumamit ng pang-check ng pagbabaybay para sa</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index b7de827aa..878e5ce 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -7209,6 +7209,7 @@
 <translation id="6122831415929794347">Désactiver la navigation sécurisée?</translation>
 <translation id="6124650939968185064">Les extensions suivantes dépendent de cette extension :</translation>
 <translation id="6124698108608891449">Ce site a besoin d'autorisations supplémentaires.</translation>
+<translation id="6125202119952209826">Se joindre au groupe d'onglets avec <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Malheureusement, vous devez ajouter à nouveau votre compte à ce <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Lune</translation>
 <translation id="6126601353087978360">Veuillez entrer vos commentaires ici :</translation>
@@ -7861,6 +7862,7 @@
 <translation id="6607831829715835317">Autres outi&amp;ls</translation>
 <translation id="6607890859198268021">L'adresse <ph name="USER_EMAIL" /> est déjà gérée par <ph name="DOMAIN" />. Pour utiliser les contrôles parentaux avec un autre compte Google, déconnectez-vous après la configuration, puis sélectionnez « Ajouter une personne » à l'écran de connexion.</translation>
 <translation id="6608166463665411119">Réinitialiser la carte eSIM</translation>
+<translation id="660846213831377756">Touches de la souris</translation>
 <translation id="6608773371844092260">Pour configurer l'empreinte digitale, demandez à votre enfant de toucher le capteur d'empreintes digitales sur le côté droit de ce <ph name="DEVICE_TYPE" />. Les données liées à l'empreinte digitale de votre enfant sont stockées de façon sécurisée et ne quittent jamais ce <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Les données de connexion seront stockées sur cet appareil lorsque vous quitterez le mode de navigation privée. Vous pourrez vous reconnecter à ce site Web avec votre appareil plus tard.</translation>
 <translation id="6610002944194042868">Options de traduction</translation>
@@ -8666,6 +8668,7 @@
 <translation id="7189451821249468368">Vous n'avez pas suffisamment de mises à niveau pour inscrire cet appareil. Veuillez communiquer avec le service commercial pour en acheter d'autres. Si vous pensez que ce message s'affiche par erreur, veuillez communiquer avec l'assistance technique.</translation>
 <translation id="7189965711416741966">Empreinte digitale ajoutée.</translation>
 <translation id="7190883804815364931">Dernière mise à jour de cet onglet</translation>
+<translation id="7190921792980745354">Bloquer <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Certains liens pris en charge continueront de s'ouvrir dans <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> et <ph name="NUMBER_OF_OTHER_APPS" /> autres applications.</translation>
 <translation id="7191159667348037">Imprimante inconnue (USB)</translation>
 <translation id="7191631508323321927">Vestibule</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 95b6db0..81c5e09 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -5110,6 +5110,7 @@
 <translation id="4586275095964870617">Impossible d'ouvrir <ph name="URL" /> dans le navigateur secondaire. Veuillez contacter votre administrateur système.</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4588749726511456218">Accélération du défilement <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> et <ph name="DOMAIN" /> semblent liés. Assurez-vous de pouvoir faire confiance à <ph name="DOMAIN" /> avant d'utiliser votre mot de passe.</translation>
 <translation id="4589713469967853491">Les journaux ont bien été écrits dans le répertoire des téléchargements.</translation>
 <translation id="4590785647529325123">Pour supprimer l'historique de navigation privée de votre appareil, fermez tous les onglets de navigation privée</translation>
 <translation id="459204634473266369">Aucun appareil enregistré sur <ph name="PRIMARY_EMAIL" /></translation>
@@ -5615,6 +5616,7 @@
 <translation id="4946998421534856407">Lanceur d'applications+Flèche vers le haut</translation>
 <translation id="4947376546135294974">Données du site que vous consultez</translation>
 <translation id="4950100687509657457">Créer un profil</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{un fichier}one{# fichier}other{# fichiers}}</translation>
 <translation id="495170559598752135">Actions</translation>
 <translation id="4951966678293618079">Ne jamais enregistrer les mots de passe pour ce site</translation>
@@ -5753,6 +5755,7 @@
 <translation id="5061531353537614467">Toundra</translation>
 <translation id="5062930723426326933">Échec de la connexion. Veuillez vous connecter à Internet, puis réessayer.</translation>
 <translation id="5063480226653192405">Utilisation</translation>
+<translation id="5064921774605267982">Ouvrir le profil <ph name="PROFILE_NAME" />. Ce profil est géré par ton parent.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Gérer le DNS sécurisé dans les paramètres Chrome OS</translation>
 <translation id="5066534201484101197">Utiliser le défilement hors limites pour changer de page</translation>
@@ -7203,6 +7206,7 @@
 <translation id="6122831415929794347">Désactiver la navigation sécurisée ?</translation>
 <translation id="6124650939968185064">Les extensions suivantes dépendent de cette extension :</translation>
 <translation id="6124698108608891449">Ce site a besoin d'autres autorisations.</translation>
+<translation id="6125202119952209826">Rejoindre le groupe d'onglets avec <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Malheureusement, vous devrez ajouter à nouveau votre compte sur cet appareil <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Lune</translation>
 <translation id="6126601353087978360">Veuillez saisir vos commentaires ici :</translation>
@@ -7410,6 +7414,7 @@
 <translation id="6266984048393265562">Personnaliser le profil</translation>
 <translation id="6267166720438879315">Sélectionnez un certificat pour vous authentifier sur <ph name="HOST_NAME" />.</translation>
 <translation id="6268252012308737255">Ouvrir avec <ph name="APP" /></translation>
+<translation id="6269050081341530851">La copie la plus ancienne est conservée lorsque vous fermez les doublons</translation>
 <translation id="6270309713620950855">Rappel micro</translation>
 <translation id="6270391203985052864">Les sites peuvent vous demander l'autorisation d'envoyer des notifications</translation>
 <translation id="6270486800167535228">L'extension est épinglée. Sélectionner pour afficher plus d'options</translation>
@@ -7854,6 +7859,7 @@
 <translation id="6607831829715835317">Plus d'outi&amp;ls</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> est déjà géré par <ph name="DOMAIN" />. Pour utiliser le contrôle parental avec un autre compte Google, déconnectez-vous une fois la configuration terminée, puis sélectionnez "Ajouter une personne" sur l'écran de connexion.</translation>
 <translation id="6608166463665411119">Réinitialiser l'eSIM</translation>
+<translation id="660846213831377756">Touches pour la souris</translation>
 <translation id="6608773371844092260">Pour configurer l'empreinte de votre enfant, demandez-lui d'appuyer sur le lecteur d'empreinte digitale sur le côté droit de ce <ph name="DEVICE_TYPE" />. Les données liées à son empreinte sont stockées de façon sécurisée et ne quittent jamais ce <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Les données de connexion seront stockées sur l'appareil lorsque vous quitterez le mode navigation privée. Vous pourrez vous reconnecter à ce site Web avec votre appareil plus tard.</translation>
 <translation id="6610002944194042868">Options de traduction</translation>
@@ -7953,6 +7959,7 @@
 <translation id="6679947539429331601">Masquer pendant 12 heures</translation>
 <translation id="6680442031740878064">Espace disponible : <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Cadence</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">Casque audio</translation>
 <translation id="6683087162435654533">R&amp;estaurer tous les onglets</translation>
 <translation id="6683433919380522900">L'autorisation est définie sur : <ph name="PERMISSION_STATE" /></translation>
@@ -8659,6 +8666,7 @@
 <translation id="7189451821249468368">Vous n'avez pas suffisamment de licences de mise à niveau pour enregistrer cet appareil. Veuillez contacter le service commercial pour en acheter d'autres. Si vous pensez que ce message s'affiche par erreur, veuillez contacter l'assistance technique.</translation>
 <translation id="7189965711416741966">Empreinte digitale ajoutée.</translation>
 <translation id="7190883804815364931">Dernière modification apportée à cet onglet</translation>
+<translation id="7190921792980745354">Bloquer <ph name="MEMBER_FULL_NAME" /> ?</translation>
 <translation id="7191063546666816478">Certains liens compatibles continueront à s'ouvrir dans <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> et <ph name="NUMBER_OF_OTHER_APPS" /> autres applis.</translation>
 <translation id="7191159667348037">Imprimante inconnue (USB)</translation>
 <translation id="7191631508323321927">Couloir</translation>
@@ -8846,6 +8854,7 @@
 <translation id="7330533963640151632">Paramètres de <ph name="FEATURE_NAME" /> pour l'appareil de <ph name="USER_NAME" /> dans le compte <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt+Flèche vers le bas</translation>
 <translation id="7332053360324989309">Nœud de calcul dédié : <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Onglets en double</translation>
 <translation id="7333388112938984914">Impossible d'importer des fichiers lorsque la connexion est limitée.</translation>
 <translation id="7333669215417470379">Sauvegarder et restaurer vos applis et paramètres</translation>
 <translation id="7335974957018254119">Utiliser le correcteur orthographique</translation>
@@ -10293,7 +10302,7 @@
 <translation id="8342861492835240085">Sélectionner une collection</translation>
 <translation id="8345848587667658367">Vous pouvez désormais afficher les photos, notifications, applis et contenus multimédias récents de votre téléphone</translation>
 <translation id="8347227221149377169">Tâches d'impression</translation>
-<translation id="8348430946834215779">Utilisez HTTPS autant que possible et recevez un avertissement avant de charger des sites qui ne le prennent pas en charge</translation>
+<translation id="8348430946834215779">Utiliser HTTPS autant que possible et recevoir un avertissement avant de charger des sites qui ne le prennent pas en charge</translation>
 <translation id="8348896480272971199">Vérifiez votre connexion Internet, puis réessayez.</translation>
 <translation id="8349325309815489209">Extensions autorisées sur ce site</translation>
 <translation id="8349826889576450703">lanceur d'applications</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 0a04e6fb..7c5cd0f 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -7207,6 +7207,7 @@
 <translation id="6122831415929794347">Queres desactivar a función Navegación segura?</translation>
 <translation id="6124650939968185064">As seguintes extensións dependen desta extensión:</translation>
 <translation id="6124698108608891449">Este sitio necesita máis permisos.</translation>
+<translation id="6125202119952209826">Unirte ao grupo de pestanas con <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Terás que engadir a túa conta a este dispositivo <ph name="DEVICE_TYPE" /> de novo.</translation>
 <translation id="6125639926370653692">Lúa</translation>
 <translation id="6126601353087978360">Pon aquí o teu comentario:</translation>
@@ -7857,6 +7858,7 @@
 <translation id="6607831829715835317">Máis &amp;ferramentas</translation>
 <translation id="6607890859198268021">O enderezo <ph name="USER_EMAIL" /> xa está xestionado por <ph name="DOMAIN" />. Para usar os controis parentais cunha Conta de Google diferente, pecha sesión ao rematar a configuración. A continuación, vai á páxina de inicio de sesión e selecciona Engadir persoa.</translation>
 <translation id="6608166463665411119">Restablecer eSIM</translation>
+<translation id="660846213831377756">Teclas do rato</translation>
 <translation id="6608773371844092260">Para configurar a impresión dixital, pídelle ao teu fillo ou filla que toque o sensor correspondente situado na parte dereita deste dispositivo (<ph name="DEVICE_TYPE" />). Os datos da súa impresión dixital almacenaranse de maneira segura neste dispositivo (<ph name="DEVICE_TYPE" />) e nunca sairán del.</translation>
 <translation id="6609478180749378879">Os datos de inicio de sesión almacenaranse neste dispositivo cando saias do modo de incógnito. Poderás iniciar sesión de novo neste sitio web desde o teu dispositivo máis tarde.</translation>
 <translation id="6610002944194042868">Opcións de tradución</translation>
@@ -8662,6 +8664,7 @@
 <translation id="7189451821249468368">Non tes licenzas suficientes para inscribir este dispositivo. Ponte en contacto co departamento de vendas para comprar máis. Se cres que esta mensaxe apareceu por erro, ponte en contacto co servizo de asistencia.</translation>
 <translation id="7189965711416741966">Engadiuse a impresión dixital.</translation>
 <translation id="7190883804815364931">Última actualización desta pestana</translation>
+<translation id="7190921792980745354">Queres bloquear a <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Algunhas ligazóns compatibles seguirán abríndose nas aplicacións <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> e <ph name="NUMBER_OF_OTHER_APPS" /> máis.</translation>
 <translation id="7191159667348037">Impresora descoñecida (USB)</translation>
 <translation id="7191631508323321927">Corredor</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 3bbc57d..7557aa5 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -7208,6 +7208,7 @@
 <translation id="6122831415929794347">Safe Browsing બંધ કરીએ?</translation>
 <translation id="6124650939968185064">નીચેના એક્સ્ટેન્શન્સ આ એક્સ્ટેન્શન પર નિર્ભર કરે છે:</translation>
 <translation id="6124698108608891449">આ સાઇટ માટે વધુ પરવાનગીઓની જરૂર છે.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> સાથે ટૅબના ગ્રૂપમાં જોડાઓ</translation>
 <translation id="6125479973208104919">કમનસીબે, તમને આ <ph name="DEVICE_TYPE" />માં તમારું એકાઉન્ટ ઉમેરવાની જરૂર પડશે.</translation>
 <translation id="6125639926370653692">ચંદ્ર</translation>
 <translation id="6126601353087978360">કૃપા કરીને અહીં તમારો પ્રતિસાદ દાખલ કરો:</translation>
@@ -7860,6 +7861,7 @@
 <translation id="6607831829715835317">વધુ સા&amp;ધનો</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> પહેલેથી જ <ph name="DOMAIN" /> દ્વારા મેનેજ કરવામાં આવી રહ્યું છે. કોઈ અલગ Google એકાઉન્ટ વડે માતાપિતાના યોગ્ય નિયંત્રણોનો ઉપયોગ કરવા માટે, સેટઅપ કર્યા પછી સાઇન આઉટ કરો અને પછી સાઇન ઇન કરવાની સ્ક્રીન પર "વ્યક્તિ ઉમેરો" પસંદ કરો.</translation>
 <translation id="6608166463665411119">ઇ-સિમને રીસેટ કરો</translation>
+<translation id="660846213831377756">માઉસ કી</translation>
 <translation id="6608773371844092260">ફિંગરપ્રિન્ટનું સેટઅપ કરવા માટે, તમારા બાળકને આ <ph name="DEVICE_TYPE" />ની જમણી બાજુના ફિંગરપ્રિન્ટ સેન્સરને ટચ કરવાનું કહો. તમારા બાળકની ફિંગરપ્રિન્ટનો ડેટા સુરક્ષિત રીતે સ્ટોર કરવામાં આવે છે અને તે હંમેશાં આ <ph name="DEVICE_TYPE" />માં જ રહે છે.</translation>
 <translation id="6609478180749378879">તમે 'છૂપા મોડ'થી બહાર નીકળો, તે પછી સાઇન-ઇન ડેટા આ ડિવાઇસ પર સ્ટોર કરવામાં આવશે. તમે તમારા ડિવાઇસ વડે આ વેબસાઇટમાં થોડા સમય પછી સાઇન ઇન કરી શકશો.</translation>
 <translation id="6610002944194042868">અનુવાદ માટેના વિકલ્પો</translation>
@@ -8666,6 +8668,7 @@
 <translation id="7189451821249468368">આ ડિવાઇસની નોંધણી કરવા માટે તમે પૂરતા અપગ્રેડ ધરાવતા નથી. વધુ અપગ્રેડ ખરીદવા માટે કૃપા કરીને વેચાણ સંબંધિત ટીમનો સંપર્ક કરો. જો તમે માનતા હો કે તમને આ મેસેજ ભૂલથી દેખાઈ રહ્યો છે, તો કૃપા કરીને સપોર્ટ ટીમનો સંપર્ક કરો.</translation>
 <translation id="7189965711416741966">ફિંગરપ્રિન્ટ ઉમેરી.</translation>
 <translation id="7190883804815364931">આ ટૅબની છેલ્લી અપડેટ</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" />ને બ્લૉક કરીએ?</translation>
 <translation id="7191063546666816478">અમુક સપોર્ટેડ લિંક હજી પણ <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> અને અન્ય <ph name="NUMBER_OF_OTHER_APPS" /> ઍપમાં ખૂલશે.</translation>
 <translation id="7191159667348037">અજાણ્યું પ્રિન્ટર (USB)</translation>
 <translation id="7191631508323321927">હોલવે</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 175ad15..3bcbd3d 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -7219,6 +7219,7 @@
 <translation id="6122831415929794347">क्या आप सुरक्षित ब्राउज़िंग की सुविधा का इस्तेमाल बंद करना चाहते हैं?</translation>
 <translation id="6124650939968185064">निम्न एक्सटेंशन इस एक्सटेंशन पर निर्भर हैं:</translation>
 <translation id="6124698108608891449">इस साइट को ज़्यादा अनुमतियां चाहिए.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> के साथ टैब ग्रुप में शामिल हों</translation>
 <translation id="6125479973208104919">दुर्भाग्यवश, आपको इस <ph name="DEVICE_TYPE" /> में अपना खाता फिर से जोड़ना होगा.</translation>
 <translation id="6125639926370653692">चंद्रमा</translation>
 <translation id="6126601353087978360">कृपया अपना फ़ीडबैक (सुझाव, शिकायत या राय) यहां दर्ज करें:</translation>
@@ -7871,6 +7872,7 @@
 <translation id="6607831829715835317">ज़्यादा टू&amp;ल</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> पहले ही <ph name="USER_EMAIL" /> को प्रबंधित कर रहा है. दूसरे Google खाते पर माता-पिता के कंट्रोल की सुविधा इस्तेमाल करने के लिए, सेट अप करने के बाद साइन आउट करें. फिर, साइन इन वाली स्क्रीन पर "व्यक्ति जोड़ें" को चुनें.</translation>
 <translation id="6608166463665411119">ई-सिम को रीसेट करें</translation>
+<translation id="660846213831377756">माउस का काम करने वाले बटन</translation>
 <translation id="6608773371844092260">फ़िंगरप्रिंट सेट अप करने के लिए, अपने बच्चे से इस <ph name="DEVICE_TYPE" /> की दाईं ओर मौजूद, फ़िंगरप्रिंट सेंसर को छूने के लिए कहें. आपके बच्चे के फ़िंगरप्रिंट का डेटा सुरक्षित तरीके से सेव किया जाता है. साथ ही, यह हमेशा इस <ph name="DEVICE_TYPE" /> में ही रहता है.</translation>
 <translation id="6609478180749378879">जब आप गुप्त मोड से बाहर निकल जाएंगे, तब साइन इन करने का डेटा इस डिवाइस में सेव किया जाएगा. अपने डिवाइस की मदद से, आप बाद में इस वेबसाइट पर साइन इन कर पाएंगे.</translation>
 <translation id="6610002944194042868">अनुवाद के विकल्प</translation>
@@ -8677,6 +8679,7 @@
 <translation id="7189451821249468368">आपके सॉफ़्टवेयर लाइसेंस अपग्रेड नहीं हैं, इसलिए आप इस डिवाइस का नाम दर्ज नहीं कर सकते. कृपया सॉफ़्टवेयर लाइसेंस खरीदने के लिए, सेल्स टीम से संपर्क करें. अगर आपको लगता है कि आप यह मैसेज किसी गड़बड़ी की वजह से देख रहे हैं, तो सहायता टीम से संपर्क करें.</translation>
 <translation id="7189965711416741966">फ़िंगरप्रिंट जोड़ा गया.</translation>
 <translation id="7190883804815364931">इस टैब से जुड़ा पिछला अपडेट</translation>
+<translation id="7190921792980745354">क्या आपको <ph name="MEMBER_FULL_NAME" /> को ब्लॉक करना है?</translation>
 <translation id="7191063546666816478">कुछ सहायता लिंक <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, और <ph name="NUMBER_OF_OTHER_APPS" /> अन्य ऐप्लिकेशन में अब भी खुलेंगे.</translation>
 <translation id="7191159667348037">अज्ञात प्रिंटर (USB)</translation>
 <translation id="7191631508323321927">गलियारा</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 1b87be3..21969ed 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1053,7 +1053,7 @@
 <translation id="1714644264617423774">Omogućite značajke pristupačnosti radi jednostavnije upotrebe uređaja. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="1716034099915639464">Želite li izbrisati podatke web-lokacije i dopuštenja za web-lokaciju <ph name="SITE_NAME" /> i njezinu instaliranu aplikaciju?</translation>
 <translation id="171826447717908393">Izolirane web-aplikacije (beta)</translation>
-<translation id="1718835860248848330">Posljednji sat</translation>
+<translation id="1718835860248848330">Prethodni sat</translation>
 <translation id="1719312230114180055">Napomena: otisak prsta može biti manje siguran od snažne zaporke ili PIN-a.</translation>
 <translation id="1720244237656138008">Impresionizam</translation>
 <translation id="1720318856472900922">Autentifikacija TLS WWW poslužitelja</translation>
@@ -3266,7 +3266,7 @@
 <translation id="3284050785966252943">Pregled metapodataka o automatskom popunjavanju</translation>
 <translation id="3285322247471302225">Nova &amp;kartica</translation>
 <translation id="3285465040399788513">Nema dovoljno pohrane za dovršetak postavljanja. Oslobodite prostor i pokušajte ponovo.</translation>
-<translation id="3285500645985761267">Dopustite povezanim web-lokacijama da vide vaše aktivnosti u grupi</translation>
+<translation id="3285500645985761267">Dopusti povezanim web-lokacijama da vide vaše aktivnosti u grupi</translation>
 <translation id="328571385944182268">Spremiti zaporke?</translation>
 <translation id="3289668031376215426">Automatsko veliko početno slovo</translation>
 <translation id="3289856944988573801">Da biste provjerili ima li ažuriranja, upotrijebite Ethernet ili Wi-Fi.</translation>
@@ -3847,7 +3847,7 @@
 <translation id="3700888195348409686">Prikazivanje (<ph name="PAGE_ORIGIN" />)</translation>
 <translation id="3700993174159313525">Ne dopuštaj web-lokacijama praćenje položaja fotoaparata</translation>
 <translation id="3701167022068948696">Ispravi odmah</translation>
-<translation id="3701515417135397388">Upozori ako je zaporka ugrožena zbog povrede podataka</translation>
+<translation id="3701515417135397388">Upozori ako je zaporka ugrožena zbog neovlaštenog pristupa podacima</translation>
 <translation id="3702797829026927713"><ph name="BEGIN_PARAGRAPH1" />Unesite naziv prodavača i broj trgovine za koji se konfigurira demo-uređaj*. <ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />Ako ne znate broj trgovine, možete unijeti 0000 da biste nastavili s instaliranjem demo načina. <ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />*Napomena: Google upotrebljava te podatke za prepoznavanje verzije demo načina koju uređaj treba primiti i za mjerenje upotrebe demo načina.<ph name="END_PARAGRAPH3" /></translation>
@@ -6341,7 +6341,7 @@
 <translation id="5477089831058413614">Konfiguriraj žarišnu točku uređaja <ph name="DEVICE_TYPE" /></translation>
 <translation id="5481273127572794904">Nije dopušteno automatsko preuzimanje više datoteka</translation>
 <translation id="5481682542063333508">Ponuda pomoći pri pisanju</translation>
-<translation id="5481876918948762495">Uvoz zaporki</translation>
+<translation id="5481876918948762495">Uvezite zaporke</translation>
 <translation id="5481941284378890518">Dodaj pisače u blizini</translation>
 <translation id="5482417738572414119">prijaviti se da bi Chrome mogao predlagati grupe kartica i organizirati vaše kartice</translation>
 <translation id="5483005706243021437">Ostajem ovdje</translation>
@@ -7205,6 +7205,7 @@
 <translation id="6122831415929794347">Želite li isključiti Sigurno pregledavanje?</translation>
 <translation id="6124650939968185064">O tom proširenju ovise sljedeća proširenja:</translation>
 <translation id="6124698108608891449">Ovoj web-lokaciji potrebno je više dopuštenja.</translation>
+<translation id="6125202119952209826">Pridružite se grupi kartica s korisnikom <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Nažalost, morat ćete ponovo dodati svoj račun na ovaj uređaj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Mjesec</translation>
 <translation id="6126601353087978360">Povratne informacije unesite ovdje:</translation>
@@ -7859,6 +7860,7 @@
 <translation id="6607831829715835317">Više a&amp;lata</translation>
 <translation id="6607890859198268021">Računom <ph name="USER_EMAIL" /> već upravlja <ph name="DOMAIN" />. Da biste koristili roditeljski nadzor s nekim drugim Google računom, odjavite se nakon postavljanja, a zatim na zaslonu za prijavu odaberite "Dodaj osobu".</translation>
 <translation id="6608166463665411119">Poništi eSIM</translation>
+<translation id="660846213831377756">Tipke miša</translation>
 <translation id="6608773371844092260">Da biste postavili otisak prsta, neka vaše dijete dodirne senzor otiska prsta s desne strane uređaja <ph name="DEVICE_TYPE" />. Podaci o otisku prsta vašeg djeteta sigurno se pohranjuju i nikamo se ne šalju s uređaja <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Podaci za prijavu pohranit će se na ovom uređaju nakon što izađete iz anonimnog načina. Kasnije ćete se pomoću svojeg uređaja ponovno moći prijaviti na ovu web-lokaciju.</translation>
 <translation id="6610002944194042868">Opcije Prevoditelja</translation>
@@ -8665,6 +8667,7 @@
 <translation id="7189451821249468368">Nemate dovoljno nadogradnji za prijavu ovog uređaja. Obratite se prodaji da biste kupili više. Ako smatrate da vam se ova poruka prikazuje pogreškom, obratite se podršci.</translation>
 <translation id="7189965711416741966">Otisak prsta je dodan.</translation>
 <translation id="7190883804815364931">Posljednje ažuriranje ove kartice</translation>
+<translation id="7190921792980745354">Želite li blokirati korisnika <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Neke podržane veze i dalje će se otvarati u aplikacijama <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> i njih još <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Nepoznati pisač (USB)</translation>
 <translation id="7191631508323321927">Hodnik</translation>
@@ -8695,7 +8698,7 @@
 <translation id="7211783048245131419">Još nije dodijeljen nijedan prekidač</translation>
 <translation id="7212097698621322584">Unesite svoj trenutačni PIN da biste ga promijenili. Ako ne znate PIN, vratite sigurnosni ključ na zadano, a zatim izradite novi PIN.</translation>
 <translation id="7214047272988222011">Dopušteno – <ph name="PERMISSION_DETAILS" />. Uključite <ph name="LINK_BEGIN" />pristup kameri sustava<ph name="LINK_END" />.</translation>
-<translation id="721490496276866468">Uvoz zaporki</translation>
+<translation id="721490496276866468">Uvezite zaporke</translation>
 <translation id="7217208603285112910">Jezik odabira nije <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">Želite li izbrisati podatke web-lokacije?</translation>
 <translation id="7219473482981809164">Pronašli smo više profila dostupnih za preuzimanje. Prije nego što nastavite, odaberite one koje želite preuzeti.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 7f4bba2..204dd762 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -7220,6 +7220,7 @@
 <translation id="6122831415929794347">Kikapcsolja a Biztonságos Böngészést?</translation>
 <translation id="6124650939968185064">Ettől a bővítménytől a következő bővítmények függnek:</translation>
 <translation id="6124698108608891449">A webhelynek több engedélyre van szüksége.</translation>
+<translation id="6125202119952209826">Csatlakozás <ph name="OWNER_FIRST_NAME" /> lapcsoportjához</translation>
 <translation id="6125479973208104919">Sajnos ismét hozzá kell adnia fiókját a(z) <ph name="DEVICE_TYPE" /> eszközhöz.</translation>
 <translation id="6125639926370653692">Hold</translation>
 <translation id="6126601353087978360">Kérjük, itt adja meg visszajelzését:</translation>
@@ -7870,6 +7871,7 @@
 <translation id="6607831829715835317">További eszközök</translation>
 <translation id="6607890859198268021">A(z) <ph name="USER_EMAIL" /> fiókot már a(z) <ph name="DOMAIN" /> kezeli. Ha a szülői felügyeletet másik Google-fiókhoz szeretné beállítani, jelentkezzen ki a beállítás után, majd a bejelentkezési képernyőn válassza a „Személy hozzáadása” lehetőséget.</translation>
 <translation id="6608166463665411119">eSIM visszaállítása</translation>
+<translation id="660846213831377756">Egérgombok</translation>
 <translation id="6608773371844092260">Az ujjlenyomat beállításához gyermekének meg kell érintenie a(z) <ph name="DEVICE_TYPE" /> eszköz jobb oldalán található ujjlenyomat-érzékelőt. Gyermeke ujjlenyomatadatait a(z) <ph name="DEVICE_TYPE" /> biztonságosan tárolja, és soha nem kerülnek ki az eszközről.</translation>
 <translation id="6609478180749378879">Az inkognitó mód elhagyása után ez az eszköz tárolja a bejelentkezési adatokat. Eszközével később újra be tud jelentkezni ezen a webhelyen.</translation>
 <translation id="6610002944194042868">Fordítási beállítások</translation>
@@ -8676,6 +8678,7 @@
 <translation id="7189451821249468368">Ön nem rendelkezik elegendő bővítéssel az eszköz regisztrálásához. Kérjük, vegye fel a kapcsolatot az értékesítéssel továbbiak vásárlásához. Ha úgy gondolja, ezt az üzenetet tévesen kapta meg, forduljon az ügyfélszolgálathoz.</translation>
 <translation id="7189965711416741966">Ujjlenyomat hozzáadva.</translation>
 <translation id="7190883804815364931">Ennek a lapnak a legutóbbi frissítése</translation>
+<translation id="7190921792980745354">Letiltja a következőt: <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Egyes támogatott linkek továbbra is a(z) <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> és <ph name="NUMBER_OF_OTHER_APPS" /> további alkalmazásban nyílnak meg.</translation>
 <translation id="7191159667348037">Ismeretlen nyomtató (USB)</translation>
 <translation id="7191631508323321927">Hall</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 6ac6be2..b63e716 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -7202,6 +7202,7 @@
 <translation id="6122831415929794347">Անջատե՞լ ապահով դիտարկումը</translation>
 <translation id="6124650939968185064">Հետևյալ ընդլայնումները կախված են այս ընդլայնումից՝</translation>
 <translation id="6124698108608891449">Այս կայքին անհրաժեշտ են լրացուցիչ թույլտվություններ։</translation>
+<translation id="6125202119952209826">Միացեք ներդիրների խմբին, որում <ph name="OWNER_FIRST_NAME" />-ն է</translation>
 <translation id="6125479973208104919">Հարկավոր է նորից ավելացնել հաշիվը <ph name="DEVICE_TYPE" /> սարքում:</translation>
 <translation id="6125639926370653692">Լուսին</translation>
 <translation id="6126601353087978360">Մուտքագրեք ձեր կարծիքն այստեղ՝</translation>
@@ -7854,6 +7855,7 @@
 <translation id="6607831829715835317">Լրացուցիչ գոր&amp;ծիքներ</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> հաշիվն արդեն կառավարվում է <ph name="DOMAIN" /> տիրույթի կողմից։ Այլ Google հաշվի միջոցով ծնողական վերահսկողությունն օգտագործելու համար կարգավորումն ավարտելուց հետո դուրս եկեք հաշվից, ապա մուտքի էկրանին ընտրեք «Ավելացնել օգտատեր»։</translation>
 <translation id="6608166463665411119">Վերակայել eSIM-ը</translation>
+<translation id="660846213831377756">Մկնիկի ստեղներ</translation>
 <translation id="6608773371844092260">Մատնահետքը կարգավորելու համար ձեր երեխան պետք է հպի մատնահետքերի սկաներին, որն այս <ph name="DEVICE_TYPE" /> սարքի աջ կողմում է։ Երեխայի մատնահետքի տվյալները ապահով պահվում են այս <ph name="DEVICE_TYPE" /> սարքում և երբեք չեն փոխանցվում այլ անձանց։</translation>
 <translation id="6609478180749378879">Մուտքի տվյալները կպահվեն այս սարքում, երբ դուք դուրս գաք ինկոգնիտո ռեժիմից։ Ձեր սարքով դուք նորից կկարողանաք մտնել հաշիվ այս կայքում։</translation>
 <translation id="6610002944194042868">Թարգմանության կարգավորումներ</translation>
@@ -8659,6 +8661,7 @@
 <translation id="7189451821249468368">Ձեր լիցենզիաները բավարար չեն այս սարքը գրանցելու համար։ Լրացուցիչ լիցենզիաներ գնելու համար դիմեք վաճառքների բաժին։ Եթե կարծում եք, որ այս հաղորդագրությունը սխալմամբ է ձեզ ուղարկվել, դիմեք աջակցման կենտրոն։</translation>
 <translation id="7189965711416741966">Մատնահետքն ավելացված է:</translation>
 <translation id="7190883804815364931">Այս ներդիրում կատարված վերջին փոփոխությունը</translation>
+<translation id="7190921792980745354">Արգելափակե՞լ <ph name="MEMBER_FULL_NAME" />-ին</translation>
 <translation id="7191063546666816478">Որոշ աջակցվող հղումներ նախկինի պես կբացվեն <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ու ևս <ph name="NUMBER_OF_OTHER_APPS" /> հավելվածում։</translation>
 <translation id="7191159667348037">Անհայտ տպիչ (USB)</translation>
 <translation id="7191631508323321927">Միջանցք</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index bfe9fe404..8a41b2d0 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -7221,6 +7221,7 @@
 <translation id="6122831415929794347">Nonaktifkan Safe Browsing?</translation>
 <translation id="6124650939968185064">Ekstensi berikut bergantung pada ekstensi ini:</translation>
 <translation id="6124698108608891449">Situs ini memerlukan izin lainnya.</translation>
+<translation id="6125202119952209826">Bergabung ke grup tab dengan <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Sayangnya, Anda harus menambahkan akun ke perangkat <ph name="DEVICE_TYPE" /> ini lagi.</translation>
 <translation id="6125639926370653692">Bulan</translation>
 <translation id="6126601353087978360">Berikan masukan Anda di sini:</translation>
@@ -7871,6 +7872,7 @@
 <translation id="6607831829715835317">Fitur &amp;lainnya</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> telah dikelola oleh <ph name="DOMAIN" />. Untuk menggunakan kontrol orang tua dengan Akun Google lain, logout setelah penyiapan selesai, lalu pilih "Tambahkan pengguna" di layar login.</translation>
 <translation id="6608166463665411119">Reset eSIM</translation>
+<translation id="660846213831377756">Tombol mouse</translation>
 <translation id="6608773371844092260">Untuk menyiapkan sidik jari, minta anak Anda menyentuh sensor sidik jari di sisi kanan <ph name="DEVICE_TYPE" /> ini. Data sidik jari anak Anda disimpan dengan aman dan tidak pernah dikirim ke luar <ph name="DEVICE_TYPE" /> ini.</translation>
 <translation id="6609478180749378879">Data login akan disimpan di perangkat ini setelah Anda keluar dari mode Samaran. Anda dapat login ke situs ini dengan perangkat Anda lagi nanti.</translation>
 <translation id="6610002944194042868">Opsi Terjemahan</translation>
@@ -8677,6 +8679,7 @@
 <translation id="7189451821249468368">Anda tidak memiliki cukup upgrade untuk mendaftarkan perangkat ini. Hubungi pihak penjualan untuk membeli yang lainnya. Jika Anda yakin Anda tidak seharusnya mendapatkan pesan ini, hubungi dukungan.</translation>
 <translation id="7189965711416741966">Sidik jari ditambahkan.</translation>
 <translation id="7190883804815364931">Pembaruan Terakhir untuk Tab ini</translation>
+<translation id="7190921792980745354">Blokir <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Beberapa link yang didukung akan tetap dibuka di <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, dan <ph name="NUMBER_OF_OTHER_APPS" /> aplikasi lainnya.</translation>
 <translation id="7191159667348037">Printer Tidak Dikenal (USB)</translation>
 <translation id="7191631508323321927">Lorong</translation>
@@ -9015,7 +9018,7 @@
 <translation id="7429415133937917139">Menyimulasikan keluaran penampil braille yang dapat diperbarui di panel ChromeVox pada bagian atas layar.</translation>
 <translation id="7429568074268678162"><ph name="FILENAME" /> mungkin berbahaya. Tambahkan sandi jika Anda ingin Chrome memverifikasinya atau Anda dapat mendownloadnya langsung.</translation>
 <translation id="7431719494109538750">Tidak ditemukan perangkat HID</translation>
-<translation id="7431991332293347422">Kontrol cara histori browsing digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
+<translation id="7431991332293347422">Kontrol cara histori penjelajahan digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
 <translation id="7432200167665670017">Admin Anda telah memblokir "<ph name="EXTENSION_NAME" />" - ID Aplikasi <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Pasang kartu smart agar tetap menggunakan <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">Simpan</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index c793876..baace3b 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -7222,6 +7222,7 @@
 <translation id="6122831415929794347">Viltu slökkva á öruggri vefnotkun?</translation>
 <translation id="6124650939968185064">Eftirfarandi viðbætur reiða sig á þessa viðbót:</translation>
 <translation id="6124698108608891449">Þetta vefsvæði þarf fleiri heimildir.</translation>
+<translation id="6125202119952209826">Taktu þátt í flipahópnum sem <ph name="OWNER_FIRST_NAME" /> er í</translation>
 <translation id="6125479973208104919">Þú mun því miður þurfa að bæta reikningnum þínum aftur við þetta <ph name="DEVICE_TYPE" /> tæki.</translation>
 <translation id="6125639926370653692">Tungl</translation>
 <translation id="6126601353087978360">Sláðu ábendinguna inn hér:</translation>
@@ -7874,6 +7875,7 @@
 <translation id="6607831829715835317">F&amp;leiri verkfæri</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> er þegar stjórnað af <ph name="DOMAIN" />. Skráðu þig út eftir uppsetningu og veldu „Bæta notanda við“ á innskráningarskjánum til að nota barnalæsingar á öðrum Google reikningi.</translation>
 <translation id="6608166463665411119">Endurstilla eSIM</translation>
+<translation id="660846213831377756">Músarhnappar</translation>
 <translation id="6608773371844092260">Til að skrá fingrafar skaltu láta barnið snerta fingrafaralesarann hægra megin í <ph name="DEVICE_TYPE" />. Fingrafaragögn barnsins eru í öruggri geymslu og fara aldrei út fyrir þetta <ph name="DEVICE_TYPE" />-tæki.</translation>
 <translation id="6609478180749378879">Innskráningargögn verða geymd í þessu tæki eftir að þú lokar huliðsstillingu. Þú getur skráð þig aftur inn á þetta vefsvæði með tækinu þínu síðar.</translation>
 <translation id="6610002944194042868">Valkostir þýðinga</translation>
@@ -8679,6 +8681,7 @@
 <translation id="7189451821249468368">Þú ert ekki með tilskildar uppfærslur til að skrá þetta tæki. Hafðu samband við söludeild til að kaupa uppfærslur. Ef þú telur að þessi villuboð ættu ekki að birtast þér skaltu hafa samband við þjónustudeild.</translation>
 <translation id="7189965711416741966">Fingrafari bætt við.</translation>
 <translation id="7190883804815364931">Síðasta breyting á þessum flipa</translation>
+<translation id="7190921792980745354">Setja <ph name="MEMBER_FULL_NAME" /> á bannlista?</translation>
 <translation id="7191063546666816478">Sumir studdir tenglar munu áfram opnast í <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> og <ph name="NUMBER_OF_OTHER_APPS" /> forritum í viðbót.</translation>
 <translation id="7191159667348037">Óþekktur prentari (USB)</translation>
 <translation id="7191631508323321927">Gangur</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index a666448..9ef0edd 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -7204,6 +7204,7 @@
 <translation id="6122831415929794347">Disattivare la Navigazione sicura?</translation>
 <translation id="6124650939968185064">Le seguenti estensioni dipendono da questa estensione:</translation>
 <translation id="6124698108608891449">Questo sito richiede altre autorizzazioni.</translation>
+<translation id="6125202119952209826">Partecipa al gruppo di schede con <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Purtroppo devi aggiungere nuovamente il tuo account al dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Luna</translation>
 <translation id="6126601353087978360">Inserisci qui il tuo feedback:</translation>
@@ -7854,6 +7855,7 @@
 <translation id="6607831829715835317">A&amp;ltri strumenti</translation>
 <translation id="6607890859198268021">L'indirizzo <ph name="USER_EMAIL" /> è già gestito da <ph name="DOMAIN" />. Per utilizzare la funzionalità Controllo genitori con un altro Account Google, esci dopo la configurazione, quindi seleziona "Aggiungi persona" nella schermata di accesso.</translation>
 <translation id="6608166463665411119">Reimposta eSIM</translation>
+<translation id="660846213831377756">Tasti del mouse</translation>
 <translation id="6608773371844092260">Per configurare l'impronta, chiedi a tuo figlio di toccare il sensore di impronte digitali sul lato destro di questo <ph name="DEVICE_TYPE" />. I dati relativi all'impronta di tuo figlio vengono memorizzati in modo sicuro e non possono essere trasferiti in alcun modo da questo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">I dati di accesso verranno memorizzati su questo dispositivo quando uscirai dalla modalità di navigazione in incognito. Potrai accedere di nuovo a questo sito web con il tuo dispositivo in un secondo momento.</translation>
 <translation id="6610002944194042868">Opzioni di Traduttore</translation>
@@ -8660,6 +8662,7 @@
 <translation id="7189451821249468368">Non disponi di licenze Upgrade sufficienti per registrare questo dispositivo. Contatta l'ufficio vendite per acquistarne altre. Se ritieni che questo messaggio sia stato visualizzato per sbaglio, contatta l'assistenza.</translation>
 <translation id="7189965711416741966">Impronta digitale aggiunta.</translation>
 <translation id="7190883804815364931">Ultimo aggiornamento a questa scheda</translation>
+<translation id="7190921792980745354">Bloccare <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Alcuni link supportati saranno comunque aperti in <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> e altre <ph name="NUMBER_OF_OTHER_APPS" /> app.</translation>
 <translation id="7191159667348037">Stampante sconosciuta (USB)</translation>
 <translation id="7191631508323321927">Corridoio</translation>
@@ -8999,7 +9002,7 @@
     nel riquadro ChromeVox nella parte superiore dello schermo</translation>
 <translation id="7429568074268678162">Il file <ph name="FILENAME" /> potrebbe essere pericoloso. Aggiungi una password se vuoi che Chrome lo controlli oppure puoi scaricarlo direttamente.</translation>
 <translation id="7431719494109538750">Nessun dispositivo HID trovato</translation>
-<translation id="7431991332293347422">Controlla la modalità di utilizzo della cronologia di navigazione per personalizzare la Ricerca e non solo</translation>
+<translation id="7431991332293347422">Controlla come la cronologia di navigazione viene utilizzata per personalizzare la Ricerca e altro</translation>
 <translation id="7432200167665670017">Il tuo amministratore ha bloccato "<ph name="EXTENSION_NAME" />" - ID app <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Inserisci la smart card per continuare a utilizzare il tuo <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">Mantieni</translation>
@@ -10210,7 +10213,7 @@
 <translation id="828180235270931531">Altre stampanti disponibili</translation>
 <translation id="8281886186245836920">Salta</translation>
 <translation id="8284279544186306258">tutti i siti <ph name="WEBSITE_1" /></translation>
-<translation id="8284326494547611709">Sottotitoli</translation>
+<translation id="8284326494547611709">Sottotitoli codificati</translation>
 <translation id="8286036467436129157">Accedi</translation>
 <translation id="8286227656784970313">Utilizza dizionario di sistema</translation>
 <translation id="828642162569365647">La password o il PIN protegge i tuoi dati memorizzati su questo <ph name="DEVICE_TYPE" /> e qualsiasi informazione a cui accedi dal telefono. Dovrai sbloccare il tuo <ph name="DEVICE_TYPE" /> ogni volta che si riattiva dalla sospensione.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index f40e8d6..6e4dbe3 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -7221,6 +7221,7 @@
 <translation id="6122831415929794347">להשבית את 'גלישה בטוחה'?</translation>
 <translation id="6124650939968185064">התוספים הבאים תלויים בתוסף הזה:</translation>
 <translation id="6124698108608891449">האתר הזה צריך הרשאות נוספות.</translation>
+<translation id="6125202119952209826">הצטרפות לקבוצת כרטיסיות עם <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">יהיה עליך להוסיף את החשבון שלך ב-<ph name="DEVICE_TYPE" /> פעם נוספת.</translation>
 <translation id="6125639926370653692">ירח</translation>
 <translation id="6126601353087978360">יש להזין את המשוב שלך כאן:</translation>
@@ -7875,6 +7876,7 @@
 <translation id="6607831829715835317">כלים &amp;נוספים</translation>
 <translation id="6607890859198268021">‏החשבון <ph name="USER_EMAIL" /> כבר מנוהל על ידי <ph name="DOMAIN" />. כדי להשתמש בבקרת הורים בחשבון Google אחר, יש לצאת לאחר ההגדרה ולבחור באפשרות "הוספת משתמש" במסך הכניסה.</translation>
 <translation id="6608166463665411119">‏איפוס ה-eSIM</translation>
+<translation id="660846213831377756">מקשי העכבר</translation>
 <translation id="6608773371844092260">כדי להגדיר טביעת אצבע, על הילד או הילדה לגעת בחיישן טביעות האצבע שבצד ימין של מכשיר <ph name="DEVICE_TYPE" /> הזה. נתוני טביעות האצבע של הילד או הילדה נשמרים באופן מאובטח ואף פעם לא נשלחים ממכשיר <ph name="DEVICE_TYPE" /> הזה.</translation>
 <translation id="6609478180749378879">פרטי הכניסה יאוחסנו במכשיר הזה אחרי היציאה ממצב אנונימי. מאוחר יותר תהיה לך אפשרות להיכנס שוב לחשבון באתר הזה באמצעות המכשיר.</translation>
 <translation id="6610002944194042868">אפשרויות תרגום</translation>
@@ -8681,6 +8683,7 @@
 <translation id="7189451821249468368">אין לך מספיק שדרוגים כדי לרשום את המכשיר הזה. ניתן לרכוש עוד שדרוגים דרך מחלקת המכירות. אם לדעתך ההודעה הזו מוצגת לך בטעות, אפשר לפנות לתמיכה.</translation>
 <translation id="7189965711416741966">טביעת האצבע נוספה.</translation>
 <translation id="7190883804815364931">העדכון האחרון לכרטיסייה הזו</translation>
+<translation id="7190921792980745354">לחסום את <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">חלק מהקישורים הנתמכים ימשיכו להיפתח באפליקציות <ph name="APP_NAME" />,‏ <ph name="APP_NAME_2" />,‏ <ph name="APP_NAME_3" /> ובעוד <ph name="NUMBER_OF_OTHER_APPS" /> אפליקציות.</translation>
 <translation id="7191159667348037">‏מדפסת לא ידועה (USB)</translation>
 <translation id="7191631508323321927">מסדרון</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index daf20195..3f302aa 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -4674,7 +4674,7 @@
 <translation id="4276856098224910511">インストールできません。OS のアップデートが保留中です。保留中の OS アップデートをすべて適用し、再起動してからもう一度お試しください。エラーコード: <ph name="ERROR" />。</translation>
 <translation id="4277434192562187284">XML 構成の参照元</translation>
 <translation id="4278348589087554892">{NUM_SITES,plural, =1{1 件のサイトから権限を削除しました}other{{NUM_SITES} 件のサイトから権限を削除しました}}</translation>
-<translation id="4278390842282768270">許可</translation>
+<translation id="4278390842282768270">許可されています</translation>
 <translation id="4278498748067682896">キオスクおよびサイネージ アップグレードを使用します。これにより、デバイスはキオスクまたはサイネージ モードでのみ実行できるようになります。ユーザーがデバイスにログインできるようにするには、前の画面に戻り、Chrome Enterprise Upgrade を使用して登録してください。</translation>
 <translation id="4278779213160967034">この処理には数分かかることがあります。ファイルをダウンロードしています。</translation>
 <translation id="4279129444466079448">このデバイスにインストールできる eSIM プロファイルは <ph name="PROFILE_LIMIT" /> 個までです。さらにプロファイルを追加するには、その前にいずれかの既存のプロファイルを削除してください。</translation>
@@ -7192,6 +7192,7 @@
 <translation id="6122831415929794347">セーフ ブラウジングをオフにしますか?</translation>
 <translation id="6124650939968185064">次の拡張機能は、この拡張機能に依存しています:</translation>
 <translation id="6124698108608891449">このサイトが追加の権限をリクエストしています。</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> さんのタブグループに参加</translation>
 <translation id="6125479973208104919">アカウントをもう一度この <ph name="DEVICE_TYPE" /> に追加する必要があります。</translation>
 <translation id="6125639926370653692">月</translation>
 <translation id="6126601353087978360">フィードバックの内容をご記入ください。</translation>
@@ -7841,6 +7842,7 @@
 <translation id="6607831829715835317">その他のツール(&amp;L)</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> はすでに <ph name="DOMAIN" /> によって管理されています。別の Google アカウントで保護者による使用制限を設定するには、セットアップ後にログアウトしてから、ログイン画面で [ユーザーを追加] を選択します。</translation>
 <translation id="6608166463665411119">eSIM をリセット</translation>
+<translation id="660846213831377756">マウスキー</translation>
 <translation id="6608773371844092260">指紋を設定するには、この <ph name="DEVICE_TYPE" /> の右側にある指紋認証センサーをお子様にタップしてもらってください。お子様の指紋データはこの <ph name="DEVICE_TYPE" /> にのみ安全に保存されます。</translation>
 <translation id="6609478180749378879">ログインデータはシークレット モードの終了後にこのデバイスに保存されます。今後、このデバイスからこのウェブサイトにログインできるようになります。</translation>
 <translation id="6610002944194042868">翻訳オプション</translation>
@@ -8646,6 +8648,7 @@
 <translation id="7189451821249468368">このデバイスの登録に必要なアップグレード ライセンスを持っていません。さらに購入するには、販売担当者にお問い合わせください。このメッセージが間違って表示されていると思われる場合は、サポートにお問い合わせください。</translation>
 <translation id="7189965711416741966">指紋の登録が完了しました。</translation>
 <translation id="7190883804815364931">このタブの最終更新</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> さんをブロックしますか?</translation>
 <translation id="7191063546666816478">サポートされているリンクの一部は、引き続き <ph name="APP_NAME" />、<ph name="APP_NAME_2" />、<ph name="APP_NAME_3" />、その他 <ph name="NUMBER_OF_OTHER_APPS" /> 件のアプリで開かれます。</translation>
 <translation id="7191159667348037">不明なプリンタ(USB)</translation>
 <translation id="7191631508323321927">廊下</translation>
@@ -8985,7 +8988,7 @@
     画面上部の ChromeVox パネルにシミュレートします</translation>
 <translation id="7429568074268678162"><ph name="FILENAME" /> は危害を及ぼす可能性があります。Chrome でこのファイルをチェックする、もしくは直接ダウンロードするには、パスワードを追加してください。</translation>
 <translation id="7431719494109538750">HID デバイスは見つかりませんでした</translation>
-<translation id="7431991332293347422">検索などのカスタマイズに閲覧履歴がどのように使われるかを管理します</translation>
+<translation id="7431991332293347422">検索などのパーソナライズに閲覧履歴がどのように使われるかを管理します</translation>
 <translation id="7432200167665670017">「<ph name="EXTENSION_NAME" />」(アプリ ID: <ph name="EXTENSION_ID" />)は管理者によってブロックされています</translation>
 <translation id="7433708794692032816"><ph name="DEVICE_TYPE" /> を引き続き使用するにはスマートカードを挿入してください</translation>
 <translation id="7433957986129316853">そのままにする</translation>
@@ -11151,7 +11154,7 @@
 <translation id="8962083179518285172">詳細を非表示</translation>
 <translation id="8962863356073277855">URL は https://www.example.com の形式で入力してください</translation>
 <translation id="8962918469425892674">このサイトはモーション センサーまたは光センサーを使用しています。</translation>
-<translation id="8963117664422609631">サイトの設定に移動します</translation>
+<translation id="8963117664422609631">サイトの設定に移動</translation>
 <translation id="8965037249707889821">古いパスワードを入力</translation>
 <translation id="8966809848145604011">他のプロファイル</translation>
 <translation id="8967427617812342790">リーディング リストに追加</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 604e85e..2613c7d4 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -7208,6 +7208,7 @@
 <translation id="6122831415929794347">გსურთ Safe Browsing-ის გამორთვა?</translation>
 <translation id="6124650939968185064">შემდეგი გავრცობა ეხება აღნიშნულის გავრცობას:</translation>
 <translation id="6124698108608891449">ამ საიტს სჭირდება მეტი ნებართვა.</translation>
+<translation id="6125202119952209826">შეუერთდით ჩანართების ჯგუფს <ph name="OWNER_FIRST_NAME" />-სთან ერთად</translation>
 <translation id="6125479973208104919">სამწუხაროდ, თქვენ  ხელახლა მოგიწევთ ამ <ph name="DEVICE_TYPE" />-ზე თქვენი ანგარიშის დამატება.</translation>
 <translation id="6125639926370653692">მთვარე</translation>
 <translation id="6126601353087978360">გთხოვთ, აკრიფოთ თქვენი გამოხმაურება აქ:</translation>
@@ -7858,6 +7859,7 @@
 <translation id="6607831829715835317">დამატებითი ხე&amp;ლსაწყოები</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" />-ს უკვე მართავს <ph name="DOMAIN" />. მშობელთა მიერ კონტროლის სხვა Google ანგარიშისთვის გამოსაყენებლად გამოდით სისტემიდან დაყენების დასრულების შემდეგ, შესვლის ეკრანზე კი აირჩიეთ „ადამიანის დამატება“.</translation>
 <translation id="6608166463665411119">eSIM-ის გადაყენება</translation>
+<translation id="660846213831377756">მაუსის კლავიშები</translation>
 <translation id="6608773371844092260">თითის ანაბეჭდის დასაყენებლად სთხოვეთ თქვენს ბავშვს, შეეხოს თითის ანაბეჭდის სენსორს, რომელიც მდებარეობს ამ <ph name="DEVICE_TYPE" />-ის მარჯვენა მხარეს. თქვენი ბავშვის თითის ანაბეჭდის მონაცემები უსაფრთხოდ შეინახება მხოლოდ და მხოლოდ ამ <ph name="DEVICE_TYPE" />-ზე.</translation>
 <translation id="6609478180749378879">ინკოგნიტო რეჟიმიდან გასვლის შემდეგ სისტემაში შესვლის მონაცემები ამ მოწყობილობაზე შეინახება. მოგვიანებით თქვენი მოწყობილობის მეშვეობით ამ ვებსაიტზე შესვლას შეძლებთ.</translation>
 <translation id="6610002944194042868">თარგმნის ვარიანტები</translation>
@@ -8663,6 +8665,7 @@
 <translation id="7189451821249468368">ამ მოწყობილობის რეგისტრაციისთვის საკმარისად განახლებული ვერსია არ გაქვთ. დამატებითი განახლებების შესაძენად დაუკავშირდით გაყიდვების სამსახურს. თუ თვლით, რომ ეს შეტყობინება შეცდომით მიიღეთ, დაუკავშირდით მხარდაჭერის სამსახურს.</translation>
 <translation id="7189965711416741966">თითის ანაბეჭდი დამატებულია.</translation>
 <translation id="7190883804815364931">ამ ჩანართში ბოლო სიახლე</translation>
+<translation id="7190921792980745354">გსურთ, დაბლოკოთ <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">ზოგიერთი მხარდაჭერილი ბმული კვლავ გაიხსნება <ph name="APP_NAME" />-ში, <ph name="APP_NAME_2" />-ში, <ph name="APP_NAME_3" />-სა და <ph name="NUMBER_OF_OTHER_APPS" /> სხვა აპში.</translation>
 <translation id="7191159667348037">უცნობი პრინტერი (USB)</translation>
 <translation id="7191631508323321927">დერეფანი</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 5631a0b..0c78581 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -5106,6 +5106,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> сілтемесін балама браузерде ашу мүмкін болмады. Жүйе әкімшісіне хабарласыңыз.</translation>
 <translation id="4587589328781138893">Сайттар</translation>
 <translation id="4588749726511456218">Айналдыруды үдету <ph name="LINK_BEGIN" />Толық ақпарат<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> және <ph name="DOMAIN" /> бір-бірімен байланысты сияқты. Құпия сөзді <ph name="DOMAIN" /> сайтына сенсеңіз ғана пайдаланыңыз.</translation>
 <translation id="4589713469967853491">Журналдар "Жүктеп алынғандар" каталогіне жазылды.</translation>
 <translation id="4590785647529325123">Құрылғыңыздан инкогнито режиміндегі браузерді қолдану тарихын жою үшін барлық инкогнито қойындысын жабыңыз.</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> электрондық поштасына ешбір құрылғы сақталмаған.</translation>
@@ -5611,6 +5612,7 @@
 <translation id="4946998421534856407">іске қосу тақтасы пернесі + жоғары бағыт пернесі</translation>
 <translation id="4947376546135294974">Сіз кіретін сайт деректері</translation>
 <translation id="4950100687509657457">Профиль жасау</translation>
+<translation id="4950360215042327246">[Плейсхолдер жолы]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}other{# файл}}</translation>
 <translation id="495170559598752135">Әрекеттер</translation>
 <translation id="4951966678293618079">Бұл сайт үшін құпия сөздерді ешқашан сақтамау</translation>
@@ -5749,6 +5751,7 @@
 <translation id="5061531353537614467">Тундра</translation>
 <translation id="5062930723426326933">Кіру сәтсіз аяқталды, интернетке қосылып, әрекетті қайталаңыз.</translation>
 <translation id="5063480226653192405">Пайдалану</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> профилін ашыңыз. Бұл профильді ата-анаңыз басқарады.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS параметрлерінде қауіпсіз DNS функциясын басқару</translation>
 <translation id="5066534201484101197">Беттен бетке өту үшін соңына дейін айналдырыңыз.</translation>
@@ -7195,6 +7198,7 @@
 <translation id="6122831415929794347">"Қауіпсіз шолу" функциясы өшірілсін бе?</translation>
 <translation id="6124650939968185064">Келесі кеңейтімдер осы кеңейтімге байланысты:</translation>
 <translation id="6124698108608891449">Сайтқа қосымша рұқсаттар қажет.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> қосылған қойындылар тобына қосылыңыз</translation>
 <translation id="6125479973208104919">Өкінішке қарай, аккаунтты <ph name="DEVICE_TYPE" /> құрылғысына қайта енгізу қажет.</translation>
 <translation id="6125639926370653692">Ай</translation>
 <translation id="6126601353087978360">Пікіріңізді мына жерге енгізіңіз:</translation>
@@ -7402,6 +7406,7 @@
 <translation id="6266984048393265562">Профильді бейімдеу</translation>
 <translation id="6267166720438879315">Өзіңізді <ph name="HOST_NAME" /> хостына аутентификациялау үшін сертификат таңдаңыз</translation>
 <translation id="6268252012308737255"><ph name="APP" /> қолданбасымен ашу</translation>
+<translation id="6269050081341530851">Көшірмелерді жапқан кезде, ең ескі көшірме сақталады.</translation>
 <translation id="6270309713620950855">Еске салғыш дыбысын өшіру</translation>
 <translation id="6270391203985052864">Сайттар хабарландырулар жіберу рұқсатын сұрай алады</translation>
 <translation id="6270486800167535228">Кеңейтім бекітілді. Қосымша опцияларды көру үшін таңдаңыз</translation>
@@ -7844,6 +7849,7 @@
 <translation id="6607831829715835317">Қосымша құралд&amp;ар</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> электрондық мекенжайын <ph name="DOMAIN" /> домені басқарып жатыр. Ата-ана бақылауын басқа Google аккаунтымен пайдалану үшін реттеуден кейін аккаунттан шығып, аккаунтқа кіру терезесінен "Адамды қосу" опциясын таңдаңыз.</translation>
 <translation id="6608166463665411119">eSIM картасын бастапқы күйге қайтару</translation>
+<translation id="660846213831377756">Тінтуір пернелері</translation>
 <translation id="6608773371844092260">Саусақ ізін реттеу үшін балаңыз осы <ph name="DEVICE_TYPE" /> оң жағындағы саусақ ізін оқу сканерін түртуі керек. Бала саусағының ізі туралы деректер қауіпсіз сақталған және <ph name="DEVICE_TYPE" /> құрылғысынан басқа ешқайда жіберілмейді.</translation>
 <translation id="6609478180749378879">Сіз инкогнито режимінен шыққаннан кейін де, аккаунтқа кіру деректері осы құрылғыда сақталады. Кейінірек құрылғыңызбен бұл веб-сайтқа қайта кіре аласыз.</translation>
 <translation id="6610002944194042868">Аудару опциялары</translation>
@@ -7943,6 +7949,7 @@
 <translation id="6679947539429331601">12 сағат жасыру</translation>
 <translation id="6680442031740878064">Бос: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Жылдамдық</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [плейсхолдер жолы]</translation>
 <translation id="6683022854667115063">Құлақаспап</translation>
 <translation id="6683087162435654533">Барлық қойындыны қалпына келтіру</translation>
 <translation id="6683433919380522900">Рұқсат күйі: <ph name="PERMISSION_STATE" /></translation>
@@ -8648,6 +8655,7 @@
 <translation id="7189451821249468368">Бұл құрылғыны тіркеу үшін сізде жаңа нұсқалар жеткіліксіз. Қосымша сатып алу үшін сатылымдар бөліміне хабарласыңыз. Бұл хабар сізге қателікпен жіберілген болса, қолдау қызметіне хабарласыңыз.</translation>
 <translation id="7189965711416741966">Саусақ ізі енгізілді.</translation>
 <translation id="7190883804815364931">Бұл қойындыдағы соңғы өзгеріс</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> блокталсын ба?</translation>
 <translation id="7191063546666816478">Кейбір қолдау көрсету сілтемелері <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> қолданбаларында және тағы <ph name="NUMBER_OF_OTHER_APPS" /> қолданбада ашық болады.</translation>
 <translation id="7191159667348037">Белгісіз принтер (USB)</translation>
 <translation id="7191631508323321927">Дәліз</translation>
@@ -8835,6 +8843,7 @@
 <translation id="7330533963640151632"><ph name="USER_NAME" /> құрылғысына арналған, <ph name="USER_EMAIL" /> аккаунтында ортақ қолданылып жатқан <ph name="FEATURE_NAME" /> параметрлері.</translation>
 <translation id="7331646370422660166">alt + төмен бағыт пернесі</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Көшірме қойындылар</translation>
 <translation id="7333388112938984914">Трафик саналатын байланыста файлдар жүктеп салу мүмкін емес.</translation>
 <translation id="7333669215417470379">Қолданбалар мен параметрлердің сақтық көшірмесін жасау және қалпына келтіру</translation>
 <translation id="7335974957018254119">Емлені тексеруді пайдалану</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 02e3909..5f04124 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -7218,6 +7218,7 @@
 <translation id="6122831415929794347">បិទការរុករក​ដោយសុវត្ថិភាពឬ?</translation>
 <translation id="6124650939968185064">កម្មវិធីបន្ថែមខាងក្រោមអាស្រ័យលើកម្មវិធីបន្ថែមនេះ៖</translation>
 <translation id="6124698108608891449">គេហទំព័រ​នេះ​ត្រូវការ​ការអនុញ្ញាត​បន្ថែមទៀត។</translation>
+<translation id="6125202119952209826">ចូលរួម​ក្រុមផ្ទាំង​ជាមួយ <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">គួរឲ្យសោកស្តាយ ដែលអ្នកនឹងត្រូវបញ្ចូលគណនីរបស់អ្នកនៅលើឧបករណ៍នេះ <ph name="DEVICE_TYPE" /> ម្តងទៀត។</translation>
 <translation id="6125639926370653692">ព្រះចន្ទ</translation>
 <translation id="6126601353087978360">សូមបញ្ចូលមតិកែលម្អរបស់អ្នកនៅទីនេះ៖</translation>
@@ -7868,6 +7869,7 @@
 <translation id="6607831829715835317">ឧបករណ៍ច្រើនទៀត</translation>
 <translation id="6607890859198268021">កំពុងគ្រប់គ្រង <ph name="USER_EMAIL" /> ដោយ <ph name="DOMAIN" /> ស្រាប់ហើយ។ ដើម្បីប្រើការគ្រប់គ្រង​ដោយមាតាបិតាជាមួយគណនី Google ផ្សេង សូមចេញពីគណនី​បន្ទាប់ពីរៀបចំ រួចជ្រើសរើស "បញ្ចូលមនុស្ស" នៅលើអេក្រង់ចូលគណនី។</translation>
 <translation id="6608166463665411119">កំណត់ eSIM ឡើងវិញ</translation>
+<translation id="660846213831377756">គ្រាប់ចុច​ម៉ៅស៍</translation>
 <translation id="6608773371844092260">ដើម្បីរៀបចំ​ស្នាម​ម្រាមដៃ សូម​ឱ្យ​កូន​របស់អ្នក​ប៉ះ​សេនស័រចាប់ស្នាមម្រាមដៃនៅ​ខាងស្ដាំ​ដៃនៃ <ph name="DEVICE_TYPE" /> នេះ។ ទិន្នន័យ​ស្នាម​ម្រាមដៃរបស់កូនអ្នកត្រូវបាន​រក្សាទុកយ៉ាង​មានសុវត្ថិភាព និងមិនចេញពី <ph name="DEVICE_TYPE" /> នេះឡើយ។</translation>
 <translation id="6609478180749378879">ទិន្នន័យ​សម្រាប់​ចូលគណនី​នឹងត្រូវបាន​រក្សាទុកនៅលើ​ឧបករណ៍នេះ បន្ទាប់ពីអ្នក​ចាកចេញពី​មុខងារឯកជន។ អ្នកនឹងអាច​ចូលគេហទំព័រនេះ​តាមរយៈ​ឧបករណ៍របស់អ្នក​បានម្ដងទៀត​នៅពេលក្រោយ។</translation>
 <translation id="6610002944194042868">ជម្រើស​បកប្រែ</translation>
@@ -8673,6 +8675,7 @@
 <translation id="7189451821249468368">អ្នកមិនមាន​កំណែថ្មី​គ្រប់គ្រាន់ ដើម្បី​ចុះឈ្មោះ​ឧបករណ៍​នេះទេ។ សូមទាក់ទង​ផ្នែកលក់ ដើម្បី​ទិញបន្ថែម​ទៀត។ ប្រសិនបើអ្នក​ជឿជាក់ថា អ្នកឃើញ​សារនេះ​ដោយសារ​មានការ​ភាន់ច្រឡំ សូម​ទាក់ទង​ផ្នែកជំនួយ។</translation>
 <translation id="7189965711416741966">បាន​បញ្ចូល​ស្នាម​ម្រាមដៃ​រួច​ហើយ។</translation>
 <translation id="7190883804815364931">ការធ្វើបច្ចុប្បន្នភាព​ចុងក្រោយ​ចំពោះ​ផ្ទាំងនេះ</translation>
+<translation id="7190921792980745354">ទប់ស្កាត់ <ph name="MEMBER_FULL_NAME" /> ឬ?</translation>
 <translation id="7191063546666816478">តំណដែលអាចប្រើបាន​មួយចំនួននឹងនៅ​តែបើកនៅក្នុង <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> និងកម្មវិធី <ph name="NUMBER_OF_OTHER_APPS" /> ទៀតដដែល។</translation>
 <translation id="7191159667348037">មិនស្គាល់​ម៉ាស៊ីន​បោះពុម្ពទេ (USB)</translation>
 <translation id="7191631508323321927">ផ្លូវដើរ</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 466d249..a18cacc 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -7213,6 +7213,7 @@
 <translation id="6122831415929794347">ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಆಫ್ ಮಾಡಬೇಕೆ?</translation>
 <translation id="6124650939968185064">ಕೆಳಗಿನ ಎಕ್ಸ್‌ಟೆನ್ಷನ್‌‌ಗಳು ಈ ಎಕ್ಸ್‌ಟೆನ್ಷನ್‌‌ನ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿವೆ:</translation>
 <translation id="6124698108608891449">ಈ ಸೈಟ್‌ಗೆ ಇನ್ನಷ್ಟು ಅನುಮತಿಗಳ ಅಗತ್ಯವಿದೆ.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> ಅವರೊಂದಿಗೆ ಟ್ಯಾಬ್ ಗುಂಪಿಗೆ ಸೇರಿಕೊಳ್ಳಿ</translation>
 <translation id="6125479973208104919">ದುರದೃಷ್ಟವಶಾತ್, ನಿಮ್ಮ ಖಾತೆಯನ್ನು ನೀವು ಮತ್ತೆ ಈ <ph name="DEVICE_TYPE" /> ಗೆ ಸೇರಿಸುವ ಅಗತ್ಯವಿದೆ.</translation>
 <translation id="6125639926370653692">ಚಂದ್ರ</translation>
 <translation id="6126601353087978360">ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಇಲ್ಲಿ ನಮೂದಿಸಿ:</translation>
@@ -7865,6 +7866,7 @@
 <translation id="6607831829715835317">ಹೆಚ್ಚಿನ ಪರಿ&amp;ಕರಗಳು</translation>
 <translation id="6607890859198268021">ಈ <ph name="USER_EMAIL" /> ಅನ್ನು ಈಗಾಗಲೇ <ph name="DOMAIN" /> ಇಂದ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತಿದೆ. ಬೇರೊಂದು Google ಖಾತೆಯ ಮೂಲಕ ಪೋಷಕ ನಿಯಂತ್ರಣಗಳನ್ನು ಬಳಸಲು, ಸೆಟಪ್‌ನ ನಂತರ ಸೈನ್ ಔಟ್ ಮಾಡಿ ಹಾಗೂ ಸೈನ್ ಇನ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ "ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸಿ" ಆಯ್ಕೆಮಾಡಿ.</translation>
 <translation id="6608166463665411119">eSIM ರೀಸೆಟ್ ಮಾಡಿ</translation>
+<translation id="660846213831377756">ಮೌಸ್ ಕೀಗಳು</translation>
 <translation id="6608773371844092260">ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆಟ್ ಮಾಡಲು, ಈ <ph name="DEVICE_TYPE" /> ರ ಬಲಭಾಗದಲ್ಲಿರುವ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್‌‌ ಅನ್ನು ನಿಮ್ಮ ಮಗು ಸ್ಪರ್ಶಿಸುವಂತೆ ಮಾಡಿ. ನಿಮ್ಮ ಮಗುವಿನ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಡೇಟಾವನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಸಂಗ್ರಹಣೆ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಇದು ಎಂದೂ ಈ <ph name="DEVICE_TYPE" /> ನಿಂದ ಹೊರಗೆ ಹೋಗುವುದಿಲ್ಲ.</translation>
 <translation id="6609478180749378879">ನೀವು ಅಜ್ಞಾತ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿದ ಬಳಿಕ, ಸೈನ್ ಇನ್ ಡೇಟಾವನ್ನು ಈ ಸಾಧನದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ನಂತರ ಮತ್ತೆ ನಿಮ್ಮ ಸಾಧನದ ಮೂಲಕ ಈ ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="6610002944194042868">ಅನುವಾದ ಆಯ್ಕೆಗಳು</translation>
@@ -8672,6 +8674,7 @@
 <translation id="7189451821249468368">ಈ ಸಾಧನವನ್ನು ನೋಂದಣಿ ಮಾಡಲು ನೀವು ಸಾಕಷ್ಟು ಅಪ್‌ಗ್ರೇಡ್‌ಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ಇನ್ನಷ್ಟು ಖರೀದಿಸಲು ಮಾರಾಟ ವಿಭಾಗವನ್ನು ಸಂಪರ್ಕಿಸಿ. ಈ ಸಂದೇಶವನ್ನು ನೀವು ದೋಷದಲ್ಲಿ ನೋಡುತ್ತಿರುವಿರಿ ಎಂದು ಭಾವಿಸುವುದಾದರೆ, ಬೆಂಬಲವನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="7189965711416741966">ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೇರಿಸಲಾಗಿದೆ.</translation>
 <translation id="7190883804815364931">ಈ ಟ್ಯಾಬ್‌ಗೆ ಮಾಡಿರುವ ಕೊನೆಯ ಅಪ್‌ಡೇಟ್</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> ಅವರನ್ನು ನಿರ್ಬಂಧಿಸಬೇಕೇ?</translation>
 <translation id="7191063546666816478">ಕೆಲವು ಬೆಂಬಲಿಸಿದ ಲಿಂಕ್‌ಗಳು ಈಗಲೂ <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ಮತ್ತು ಇನ್ನೂ <ph name="NUMBER_OF_OTHER_APPS" /> ಇತರ ಆ್ಯಪ್‌ಗಳಲ್ಲಿ ತೆರೆದುಕೊಳ್ಳುತ್ತವೆ.</translation>
 <translation id="7191159667348037">ಅಪರಿಚಿತ ಪ್ರಿಂಟರ್ (USB)</translation>
 <translation id="7191631508323321927">ಹಾಲ್‌ವೇ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 477b070..f117cb9 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -7222,6 +7222,7 @@
 <translation id="6122831415929794347">세이프 브라우징을 사용 중지하시겠습니까?</translation>
 <translation id="6124650939968185064">이 확장 프로그램에 종속되는 확장 프로그램:</translation>
 <translation id="6124698108608891449">추가 권한이 필요한 사이트입니다.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" />님이 있는 탭 그룹에 참여</translation>
 <translation id="6125479973208104919">이 <ph name="DEVICE_TYPE" />에 계정을 다시 추가해야 합니다.</translation>
 <translation id="6125639926370653692">달</translation>
 <translation id="6126601353087978360">여기에 의견을 입력해 주세요.</translation>
@@ -7872,6 +7873,7 @@
 <translation id="6607831829715835317">도구 더보기</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> 계정은 이미 <ph name="DOMAIN" />에서 관리하고 있습니다. 다른 Google 계정에 자녀 보호 기능을 사용하려면 설정이 완료된 후 로그아웃하고 로그인 화면에서 '사용자 추가'를 선택하세요.</translation>
 <translation id="6608166463665411119">eSIM 재설정</translation>
+<translation id="660846213831377756">마우스 키</translation>
 <translation id="6608773371844092260">지문을 설정하려면 자녀가 <ph name="DEVICE_TYPE" /> 오른쪽에 있는 지문 센서를 터치하게 하세요. 자녀의 지문 데이터는 안전하게 저장되며 절대 <ph name="DEVICE_TYPE" /> 외부로 유출되지 않습니다.</translation>
 <translation id="6609478180749378879">시크릿 모드를 종료한 후 로그인 데이터가 기기에 저장됩니다. 나중에 다시 기기에서 이 웹사이트에 로그인할 수 있습니다.</translation>
 <translation id="6610002944194042868">번역 옵션</translation>
@@ -8678,6 +8680,7 @@
 <translation id="7189451821249468368">기기를 등록하는 데 필요한 업그레이드가 부족합니다. 판매처에 문의하여 추가로 구매하시기 바랍니다. 이 메시지가 잘못 표시되었다고 판단되는 경우 지원팀에 문의하세요.</translation>
 <translation id="7189965711416741966">지문이 추가되었습니다.</translation>
 <translation id="7190883804815364931">이 탭의 최종 업데이트</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" />님을 차단하시겠습니까?</translation>
 <translation id="7191063546666816478">지원되는 링크 일부는 <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> 외 <ph name="NUMBER_OF_OTHER_APPS" />개의 다른 앱에서 계속 열 수 있습니다.</translation>
 <translation id="7191159667348037">알 수 없는 프린터(USB)</translation>
 <translation id="7191631508323321927">복도</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index bb116f6..e153d4b 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -5124,6 +5124,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> шилтемеси кошумча серепчиде ачылган жок. Система администраторуңузга кайрылыңыз.</translation>
 <translation id="4587589328781138893">Сайттар</translation>
 <translation id="4588749726511456218">Сыдырууну ылдамдатуу. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> менен <ph name="DOMAIN" /> бири-бирине байланышкан окшойт. Cырсөзүңүздү <ph name="DOMAIN" /> сайтына ишенсеңиз гана колдонуңуз.</translation>
 <translation id="4589713469967853491">Таржымалдар "Жүктөлүп алынгандар" каталогуна ийгиликтүү жазылды.</translation>
 <translation id="4590785647529325123">Түзмөгүңүздөн жашыруун көрүлгөн вебсайттарды өчүрүү үчүн бардык жашыруун өтмөктөрдү жабыңыз</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> аккаунтунда сакталган түзмөктөр жок</translation>
@@ -5630,6 +5631,7 @@
 <translation id="4946998421534856407">жүргүзгүч + өйдө жебе</translation>
 <translation id="4947376546135294974">Сиз кирип турган сайттагы маалымат</translation>
 <translation id="4950100687509657457">Профиль түзүү</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}other{# файл}}</translation>
 <translation id="495170559598752135">Аракеттер</translation>
 <translation id="4951966678293618079">Бул сайттагы сырсөздөр эч качан сакталбасын</translation>
@@ -5768,6 +5770,7 @@
 <translation id="5061531353537614467">Тундра</translation>
 <translation id="5062930723426326933">Кирбей калдыңыз, Интернетке туташып, кайра аракет кылып көрүңүз.</translation>
 <translation id="5063480226653192405">Колдонулушу</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> профилин ачуу. Бул профилди ата-энең тескейт.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS параметрлеринен Коопсуз DNS'ти башкаруу</translation>
 <translation id="5066534201484101197">Барактан баракка өтүү үчүн ашыкча сыдырыңыз</translation>
@@ -7218,6 +7221,7 @@
 <translation id="6122831415929794347">Коопсуз серептөө өчүрүлсүнбү?</translation>
 <translation id="6124650939968185064">Бул кеңейтүүгө төмөнкү кеңейтүүлөр көз каранды:</translation>
 <translation id="6124698108608891449">Бул сайт көбүрөөк уруксаттарды талап кылат.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> бар өтмөктөр тобуна кошулуңуз</translation>
 <translation id="6125479973208104919">Тилекке каршы, аккаунтуңузду бул <ph name="DEVICE_TYPE" /> түзмөгүнө кайра кошушуңуз керек.</translation>
 <translation id="6125639926370653692">Ай</translation>
 <translation id="6126601353087978360">Пикириңизди бул жерге жазыңыз:</translation>
@@ -7425,6 +7429,7 @@
 <translation id="6266984048393265562">Профилди ыңгайлаштыруу</translation>
 <translation id="6267166720438879315">Бул жерде <ph name="HOST_NAME" /> аныктыгыңызды текшерүү үчүн тастыктама тандаңыз</translation>
 <translation id="6268252012308737255"><ph name="APP" /> менен ачуу</translation>
+<translation id="6269050081341530851">Кайталанма өтмөктөрдү жапканда эң эскиси сакталат</translation>
 <translation id="6270309713620950855">Үнү басылып турганын эстетүү</translation>
 <translation id="6270391203985052864">Сайттар билдирмелерди жөнөтүүнү сурана алышат</translation>
 <translation id="6270486800167535228">Кеңейтүү кадалган. Көбүрөөк параметрлерди көрүү үчүн тандаңыз</translation>
@@ -7867,6 +7872,7 @@
 <translation id="6607831829715835317">Көбүрөөк кура&amp;л</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> мурунтан эле <ph name="DOMAIN" /> тарабынан башкарылып жатат. Ата-эненин көзөмөлүн башка Google аккаунту менен колдонуу үчүн жөндөп бүткөндөн кийин аккаунттан чыгып, андан соң аккаунтка кирүү экранында "Адам кошуу" баскычын басыңыз.</translation>
 <translation id="6608166463665411119">eSIM картаны баштапкы абалга келтирүү</translation>
+<translation id="660846213831377756">Чычкандын баскычтары</translation>
 <translation id="6608773371844092260">Манжа изин коюу үчүн балаңыз <ph name="DEVICE_TYPE" /> баскычтобунун оң жагындагы манжа изинин сенсоруна тийип коюшу керек. Балаңыздын манжасынын изи <ph name="DEVICE_TYPE" /> түзмөгүндө коопсуз сакталат.</translation>
 <translation id="6609478180749378879">Жашыруун режимден чыккандан кийин, аккаунтка кирүү дайындары бул түзмөктө сакталат. Кийинчерээк бул вебсайтка түзмөгүңүздөн кайра кире аласыз.</translation>
 <translation id="6610002944194042868">Которуу параметрлери</translation>
@@ -7966,6 +7972,7 @@
 <translation id="6679947539429331601">12 саатка жашыруу</translation>
 <translation id="6680442031740878064">Бош орун: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Баалоо</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">Гарнитура</translation>
 <translation id="6683087162435654533">Бардык өтмөктөрдү калыбына келтирүү</translation>
 <translation id="6683433919380522900">Уруксат абалы: <ph name="PERMISSION_STATE" /></translation>
@@ -8671,6 +8678,7 @@
 <translation id="7189451821249468368">Бул түзмөктү каттоо үчүн жаңыртууларыңыз жетишсиз. Көбүрөөк уруксаттама сатып алуу үчүн сатык бөлүмүнө, ал эми бул билдирүү жаңылыш көрсөтүлүп жатат десеңиз, колдоо кызматына кайрылыңыз.</translation>
 <translation id="7189965711416741966">Манжа изи кошулду.</translation>
 <translation id="7190883804815364931">Бул өтмөккө киргизилген акыркы жаңыртуулар</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> бөгөттөлсүнбү?</translation>
 <translation id="7191063546666816478">Колдоого алынган айрым шилтемелер <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> жана дагы <ph name="NUMBER_OF_OTHER_APPS" /> колдонмодо ачыла берет.</translation>
 <translation id="7191159667348037">Белгисиз принтер (USB)</translation>
 <translation id="7191631508323321927">Кире бериш</translation>
@@ -8858,6 +8866,7 @@
 <translation id="7330533963640151632"><ph name="USER_NAME" /> түзмөгүнүн <ph name="FEATURE_NAME" /> параметрлерине ылайык файлдар <ph name="USER_EMAIL" /> аккаунту аркылуу бөлүшүлөт.</translation>
 <translation id="7331646370422660166">alt + ылдый жебе</translation>
 <translation id="7332053360324989309">Дайындалган жумушчу: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Кайталанма өтмөктөр</translation>
 <translation id="7333388112938984914">Өлчөнгөн байланыш менен файлдарды жүктөп бере албайсыз.</translation>
 <translation id="7333669215417470379">Колдонмолор менен параметрлердин камдык көчүрмөсүн сактап, калыбына келтириңиз</translation>
 <translation id="7335974957018254119">Төмөнкүнүн орфографиясын текшерүү</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 9c00ad9..3a87213 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -7219,6 +7219,7 @@
 <translation id="6122831415929794347">ປິດ Safe Browsing ບໍ?</translation>
 <translation id="6124650939968185064">ສ່ວນຂະຫຍາຍຕໍ່ໄປນີ້ຂຶ້ນກັບສ່ວນຂະຫຍາຍນີ້:</translation>
 <translation id="6124698108608891449">ເວັບໄຊນີ້ຕ້ອງການມີການອະນຸຍາດເພີ່ມເຕີມ.</translation>
+<translation id="6125202119952209826">ເຂົ້າຮ່ວມກຸ່ມແຖບກັບ <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">ແນວໃດກໍຕາມ, ທ່ານຈະຈຳເປັນຕ້ອງເພີ່ມບັນຊີຂອງທ່ານໃສ່ <ph name="DEVICE_TYPE" /> ນີ້ອີກຄັ້ງ.</translation>
 <translation id="6125639926370653692">ດວງເດືອນ</translation>
 <translation id="6126601353087978360">ກະລຸນາລະບຸຄຳຕິຊົມຂອງທ່ານຢູ່ບ່ອນນີ້:</translation>
@@ -7869,6 +7870,7 @@
 <translation id="6607831829715835317">ເຄື່ອງມືເພີ່ມເຕີມ</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ຖືກຈັດການໂດຍ <ph name="DOMAIN" /> ຢູ່ແລ້ວ. ເພື່ອໃຊ້ການຄວບຄຸມຂອງພໍ່ແມ່ດ້ວຍບັນຊີ Google ອື່ນ, ກະລຸນາອອກຈາກລະບົບຫຼັງຈາກຕັ້ງຄ່າແລ້ວ, ຈາກນັ້ນເລືອກ "ເພີ່ມຄົນ" ໃນໜ້າຈໍເຂົ້າສູ່ລະບົບ.</translation>
 <translation id="6608166463665411119">ຣີເຊັດ eSIM</translation>
+<translation id="660846213831377756">ແປ້ນເມົ້າ</translation>
 <translation id="6608773371844092260">ເພື່ອຕັ້ງຄ່າລາຍນິ້ວມື, ກະລຸນາໃຫ້ລູກຂອງທ່ານແຕະໃສ່ເຊັນເຊີລາຍນິ້ວມືຢູ່ເບື້ອງຂວາຂອງ <ph name="DEVICE_TYPE" /> ນີ້. ຂໍ້ມູນລາຍນິ້ວມືຂອງລູກທ່ານແມ່ນຖືກເກັບໄວ້ຢ່າງປອດໄພ ແລະ ຢູ່ໃນ <ph name="DEVICE_TYPE" /> ນີ້ສະເໝີ.</translation>
 <translation id="6609478180749378879">ລະບົບຈະເກັບຂໍ້ມູນເຂົ້າສູ່ລະບົບໄວ້ໃນອຸປະກອນນີ້ຫຼັງຈາກທີ່ທ່ານອອກຈາກໂໝດທີ່ບໍ່ເຜີຍຕົວຕົນ. ທ່ານຈະສາມາດເຂົ້າສູ່ລະບົບເວັບໄຊນີ້ໄດ້ອີກຄັ້ງໃນພາຍຫຼັງດ້ວຍອຸປະກອນຂອງທ່ານ.</translation>
 <translation id="6610002944194042868">ຕົວເລືອກແປພາສາ</translation>
@@ -8674,6 +8676,7 @@
 <translation id="7189451821249468368">ທ່ານບໍ່ມີການອັບເກຣດທີ່ພຽງພໍເພື່ອລົງທະບຽນອຸປະກອນນີ້. ກະລຸນາຕິດຕໍ່ຝ່າຍຂາຍເພື່ອຊື້ຕື່ມອີກ. ຖ້າທ່ານເຊື່ອວ່າທ່ານກຳລັງເຫັນຂໍ້ຄວາມນີ້ຢ່າງບໍ່ຖືກຕ້ອງ, ກະລຸນາຕິດຕໍ່ຝ່າຍຊ່ວຍເຫຼືອ.</translation>
 <translation id="7189965711416741966">ເພີ່ມລາຍນິ້ວມືແລ້ວ.</translation>
 <translation id="7190883804815364931">ອັບເດດຫຼ້າສຸດໃສ່ແຖບນີ້</translation>
+<translation id="7190921792980745354">ບລັອກ <ph name="MEMBER_FULL_NAME" /> ບໍ?</translation>
 <translation id="7191063546666816478">ລິ້ງທີ່ຮອງຮັບບາງຢ່າງຈະຍັງຄົງເປີດໃນ <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ແລະ ອີກ <ph name="NUMBER_OF_OTHER_APPS" /> ແອັບ.</translation>
 <translation id="7191159667348037">ເຄື່ອງພິມທີ່ບໍ່ຮູ້ຈັກ (USB)</translation>
 <translation id="7191631508323321927">ຫ້ອງໂຖງ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 78177a5d..21da52f0 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -7225,6 +7225,7 @@
 <translation id="6122831415929794347">Išjungti saugų naršymą?</translation>
 <translation id="6124650939968185064">Toliau pateikti plėtiniai priklauso nuo šio plėtinio:</translation>
 <translation id="6124698108608891449">Šiai svetainei reikia daugiau leidimų.</translation>
+<translation id="6125202119952209826">Prisijungimas prie skirtukų grupės su <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Deja, reikės vėl pridėti paskyrą šiame „<ph name="DEVICE_TYPE" />“.</translation>
 <translation id="6125639926370653692">Mėnulis</translation>
 <translation id="6126601353087978360">Atsiliepimą įveskite čia:</translation>
@@ -7881,6 +7882,7 @@
 <translation id="6607831829715835317">Daugiau įrank&amp;ių</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> jau valdo <ph name="USER_EMAIL" />. Norėdami naudoti tėvų kontrolę kitoje „Google“ paskyroje, baigę sąranką atsijunkite ir prisijungimo ekrane pasirinkite „Pridėti asmenį“.</translation>
 <translation id="6608166463665411119">Nustatyti „eSIM“ kortelę iš naujo</translation>
+<translation id="660846213831377756">Pelės klavišai</translation>
 <translation id="6608773371844092260">Jei norite nustatyti piršto atspaudą, paprašykite, kad vaikas paliestų piršto atspaudo jutiklį dešinėje šio „<ph name="DEVICE_TYPE" />“ pusėje. Vaiko piršto atspaudo duomenys patikimai saugomi ir niekada nepatenka už „<ph name="DEVICE_TYPE" />“ ribų.</translation>
 <translation id="6609478180749378879">Prisijungimo duomenys bus saugomi šiame įrenginyje, kai išjungsite inkognito režimą. Vėl galėsite prisijungti prie šios svetainės naudodami savo įrenginį vėliau.</translation>
 <translation id="6610002944194042868">Vertimo parinktys</translation>
@@ -8687,6 +8689,7 @@
 <translation id="7189451821249468368">Neturite pakankamai licencijų naujovinimų, kad galėtumėte užregistruoti šį įrenginį. Susisiekite su pardavimo atstovu, kad įsigytumėte daugiau. Jei manote, kad šį pranešimą gavote per klaidą, susisiekite su palaikymo komanda.</translation>
 <translation id="7189965711416741966">Piršto antspaudas pridėtas.</translation>
 <translation id="7190883804815364931">Paskutinis šio skirtuko atnaujinimas</translation>
+<translation id="7190921792980745354">Blokuoti <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Kai kurios palaikomos nuorodos vis tiek bus atidarytos „<ph name="APP_NAME" />“, „<ph name="APP_NAME_2" />“, „<ph name="APP_NAME_3" />“ ir dar tiek programų: <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Nežinomas spausdintuvas (USB)</translation>
 <translation id="7191631508323321927">Koridorius</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 981d8dce..56a19735 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -5111,6 +5111,7 @@
 <translation id="4586275095964870617">Nevarēja atvērt vietni <ph name="URL" /> citā pārlūkprogrammā. Lūdzu, sazinieties ar sistēmas administratoru.</translation>
 <translation id="4587589328781138893">Vietnes</translation>
 <translation id="4588749726511456218">Ritināšanas paātrināšana. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Šķiet, ka domēni <ph name="PASSWORD_DOMAIN" /> un <ph name="DOMAIN" /> ir saistīti. Pirms paroles izmantošanas pārliecinieties, vai domēns <ph name="DOMAIN" /> ir uzticams.</translation>
 <translation id="4589713469967853491">Žurnāli ir sekmīgi ierakstīti katalogā Lejupielādes.</translation>
 <translation id="4590785647529325123">Lai ierīcē dzēstu inkognito režīma pārlūkošanas vēsturi, aizveriet visas inkognito cilnes.</translation>
 <translation id="459204634473266369">Kontā <ph name="PRIMARY_EMAIL" /> nav saglabāta neviena ierīce.</translation>
@@ -5617,6 +5618,7 @@
 <translation id="4946998421534856407">palaidēja taustiņš + augšupvērstās bultiņas taustiņš</translation>
 <translation id="4947376546135294974">Dati no jūsu apmeklētās vietnes</translation>
 <translation id="4950100687509657457">Profila izveide</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fails}zero{# failu}one{# fails}other{# faili}}</translation>
 <translation id="495170559598752135">Darbības</translation>
 <translation id="4951966678293618079">Nekad nesaglabāt šīs vietnes paroles</translation>
@@ -5755,6 +5757,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Pierakstīšanās neizdevās. Lūdzu, izveidojiet savienojumu ar internetu un mēģiniet vēlreiz.</translation>
 <translation id="5063480226653192405">Lietojums</translation>
+<translation id="5064921774605267982">Atvērt profilu “<ph name="PROFILE_NAME" />”. Šo profilu pārvalda viens no jūsu vecākiem.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Drošas DNS pārvaldība Chrome OS iestatījumos</translation>
 <translation id="5066534201484101197">Pārritināšana, lai pārietu uz citām lapām</translation>
@@ -7201,6 +7204,7 @@
 <translation id="6122831415929794347">Vai vēlaties izslēgt drošu pārlūkošanu?</translation>
 <translation id="6124650939968185064">Tālāk norādītie paplašinājumi ir atkarīgi no šī paplašinājuma:</translation>
 <translation id="6124698108608891449">Šai vietnei ir nepieciešamas citas atļaujas.</translation>
+<translation id="6125202119952209826">Pievienošanās ciļņu grupai, ko izmanto <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Diemžēl jums būs atkārtoti jāpievieno savs konts šajā <ph name="DEVICE_TYPE" /> ierīcē.</translation>
 <translation id="6125639926370653692">Mēness</translation>
 <translation id="6126601353087978360">Ievadiet atsauksmes šeit.</translation>
@@ -7408,6 +7412,7 @@
 <translation id="6266984048393265562">Pielāgot profilu</translation>
 <translation id="6267166720438879315">Atlasiet sertifikātu, lai autentificētu sevi vietnē <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Atvērt lietotnē <ph name="APP" /></translation>
+<translation id="6269050081341530851">Kad aizverat dublikātus, tiek saglabāta vecākā kopija.</translation>
 <translation id="6270309713620950855">Atgādinājums par izslēgtu skaņu</translation>
 <translation id="6270391203985052864">Vietnēs var lūgt atļauju sūtīt paziņojumus</translation>
 <translation id="6270486800167535228">Paplašinājums ir piesprausts. Atlasiet, lai skatītu vairāk opciju.</translation>
@@ -7854,6 +7859,7 @@
 <translation id="6607831829715835317">Vairā&amp;k rīku</translation>
 <translation id="6607890859198268021">Konts <ph name="USER_EMAIL" /> jau tiek pārvaldīts domēnā <ph name="DOMAIN" />. Lai izmantotu vecāku kontroli citā Google kontā, pēc iestatīšanas izrakstieties un pierakstīšanās ekrānā atlasiet “Pievienot personu”.</translation>
 <translation id="6608166463665411119">Atiestatīt eSIM</translation>
+<translation id="660846213831377756">Peles taustiņi</translation>
 <translation id="6608773371844092260">Lai iestatītu pirksta nospiedumu, bērnam ir jāpieskaras pirksta nospieduma sensoram ierīces <ph name="DEVICE_TYPE" /> labajā pusē. Bērna pirksta nospieduma dati tiek glabāti drošībā un vienmēr atrodas tikai šajā ierīcē (<ph name="DEVICE_TYPE" />).</translation>
 <translation id="6609478180749378879">Pēc tam, kad iziesiet no inkognito režīma, pierakstīšanās dati tiks glabāti šajā ierīcē. Ierīcē varēsiet vēlāk atkal pierakstīties šajā tīmekļa vietnē.</translation>
 <translation id="6610002944194042868">Tulkošanas opcijas</translation>
@@ -7953,6 +7959,7 @@
 <translation id="6679947539429331601">Paslēpt uz 12 stundām</translation>
 <translation id="6680442031740878064">Pieejamā vieta: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Ātrums</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> — [Placeholder String]</translation>
 <translation id="6683022854667115063">Austiņas</translation>
 <translation id="6683087162435654533">Atjaunot visas cilnes</translation>
 <translation id="6683433919380522900">Atļaujas statuss: <ph name="PERMISSION_STATE" /></translation>
@@ -8659,6 +8666,7 @@
 <translation id="7189451821249468368">Jums nav pietiekami daudz jauninātu licenču, lai reģistrētu šo ierīci. Lūdzu, sazinieties ar tirdzniecības nodaļu, lai iegādātos vairāk licenču. Ja uzskatāt, ka šis ziņojums tiek rādīts kļūdas dēļ, lūdzu, sazinieties ar atbalsta dienestu.</translation>
 <translation id="7189965711416741966">Pirksta nospiedums tika pievienots.</translation>
 <translation id="7190883804815364931">Jaunākā izmaiņa šajā cilnē</translation>
+<translation id="7190921792980745354">Vai bloķēt lietotāju <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Dažas atbalstītas saites joprojām tiks atvērtas lietotnē <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> un citās lietotnēs (vēl <ph name="NUMBER_OF_OTHER_APPS" />).</translation>
 <translation id="7191159667348037">Nezināms printeris (USB)</translation>
 <translation id="7191631508323321927">Gaitenis</translation>
@@ -8846,6 +8854,7 @@
 <translation id="7330533963640151632">Funkcijas “<ph name="FEATURE_NAME" />” iestatījumi ierīcei, kuru izmanto <ph name="USER_NAME" />; kopīgošanai tiek izmantots konts <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt + lejupvērstā bultiņa</translation>
 <translation id="7332053360324989309">Atvēlētais skripts: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Ciļņu dublikāti</translation>
 <translation id="7333388112938984914">Kamēr ir izveidots uzskaitītais savienojums, nevar augšupielādēt failus.</translation>
 <translation id="7333669215417470379">Lietotņu un iestatījumu dublēšana un atjaunošana</translation>
 <translation id="7335974957018254119">Izmantot pareizrakstības pārbaudītāju šīm valodām:</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 98a4255..0d334370 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -5125,6 +5125,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> не може да се отвори во алтернативен прелистувач. Контактирајте со администраторот на системот.</translation>
 <translation id="4587589328781138893">Сајтови</translation>
 <translation id="4588749726511456218">Забрзување на лизгањето <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Се чини дека <ph name="PASSWORD_DOMAIN" /> и <ph name="DOMAIN" /> се поврзани. Погрижете се да имате доверба во <ph name="DOMAIN" /> пред да ја искористите лозинката.</translation>
 <translation id="4589713469967853491">Евиденцијата е успешно запишана во директориумот „Преземања“.</translation>
 <translation id="4590785647529325123">Затворете ги сите картички „Инкогнито“ за да се избрише историјата на прелистувањето во режимот „Инкогнито“ од уредот</translation>
 <translation id="459204634473266369">Нема зачувани уреди во <ph name="PRIMARY_EMAIL" /></translation>
@@ -5631,6 +5632,7 @@
 <translation id="4946998421534856407">стартер + стрелка нагоре</translation>
 <translation id="4947376546135294974">Податоци од сајтот што го посетувате</translation>
 <translation id="4950100687509657457">Создајте профил</translation>
+<translation id="4950360215042327246">[Низа за резервирано место]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{датотека}one{# датотека}other{# датотеки}}</translation>
 <translation id="495170559598752135">Дејства</translation>
 <translation id="4951966678293618079">Никогаш не зачувувај лозинки за сајтов</translation>
@@ -5769,6 +5771,7 @@
 <translation id="5061531353537614467">Тундра</translation>
 <translation id="5062930723426326933">Пријавувањето не успеа, поврзете се на интернет и обидете се повторно.</translation>
 <translation id="5063480226653192405">Користење</translation>
+<translation id="5064921774605267982">Отвори го профилот <ph name="PROFILE_NAME" />. Со овој профил управува твојот родител.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Управувајте со функцијата „Безбеден DNS“ во поставките за Chrome OS</translation>
 <translation id="5066534201484101197">Лизгајте до крај за да се движите низ страниците</translation>
@@ -7219,6 +7222,7 @@
 <translation id="6122831415929794347">Да се исклучи „Безбедно прелистување“?</translation>
 <translation id="6124650939968185064">Следните наставки зависат од оваа наставка:</translation>
 <translation id="6124698108608891449">Сајтов има потреба од повеќе дозволи.</translation>
+<translation id="6125202119952209826">Придружете се во групата картички со <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">За жал, ќе треба да ја додадете сметката на овој <ph name="DEVICE_TYPE" /> повторно.</translation>
 <translation id="6125639926370653692">Месечина</translation>
 <translation id="6126601353087978360">Внесете ги повратните информации тука:</translation>
@@ -7426,6 +7430,7 @@
 <translation id="6266984048393265562">Приспособете го профилот</translation>
 <translation id="6267166720438879315">Изберете сертификат за да се автентицирате на <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Отвори со <ph name="APP" /></translation>
+<translation id="6269050081341530851">Се задржува најстарата копија кога ќе ги затворите дупликатите</translation>
 <translation id="6270309713620950855">Исклучи звук на потсетувањето</translation>
 <translation id="6270391203985052864">Сајтовите можат да прашуваат дали да испраќаат известувања</translation>
 <translation id="6270486800167535228">Екстензијата е закачена. Изберете за да видите повеќе опции</translation>
@@ -7870,6 +7875,7 @@
 <translation id="6607831829715835317">Повеќе алат&amp;ки</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> веќе управува со <ph name="USER_EMAIL" />. За да користите родителски контроли со друга сметка на Google, одјавете се по поставувањето, а потоа изберете „Додајте лице“ на екранот за најавување.</translation>
 <translation id="6608166463665411119">Ресетирај ја eSIM-картичката</translation>
+<translation id="660846213831377756">Копчиња за глувче</translation>
 <translation id="6608773371844092260">За да поставите отпечаток, детето треба да го допре сензорот за отпечатоци најгоре десно на овој <ph name="DEVICE_TYPE" />. Податоците за отпечатокот на детето безбедно се складираат и никогаш не го напуштаат <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Податоците за најавување ќе се складираат во уредов откако ќе излезете од режимот „Инкогнито“. Подоцна ќе може повторно да се најавите на овој веб-сајт со уредот.</translation>
 <translation id="6610002944194042868">Опции за „Преведи“</translation>
@@ -7969,6 +7975,7 @@
 <translation id="6679947539429331601">Криј 12 часа</translation>
 <translation id="6680442031740878064">Слободен простор: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Брзина</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Низа за резервирано место]</translation>
 <translation id="6683022854667115063">Слушалки</translation>
 <translation id="6683087162435654533">&amp;Врати ги сите картички</translation>
 <translation id="6683433919380522900">Дозвола: <ph name="PERMISSION_STATE" /></translation>
@@ -8674,6 +8681,7 @@
 <translation id="7189451821249468368">Немате доволно надградби за да го регистрирате уредов. Контактирајте со службата за продажбата за да купите уште. Ако сметате дека сте ја добиле поракава по грешка, контактирајте со службата за поддршка.</translation>
 <translation id="7189965711416741966">Отпечатокот е додаден.</translation>
 <translation id="7190883804815364931">Последна промена на картичкава</translation>
+<translation id="7190921792980745354">Да се блокира <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Некои поддржани линкови сѐ уште ќе се отвораат во <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> и <ph name="NUMBER_OF_OTHER_APPS" /> други апликации.</translation>
 <translation id="7191159667348037">Непознат печатач (USB)</translation>
 <translation id="7191631508323321927">Ходник</translation>
@@ -8861,6 +8869,7 @@
 <translation id="7330533963640151632">Поставки за <ph name="FEATURE_NAME" /> за уредот на <ph name="USER_NAME" />, што се споделува со сметката <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + стрелка надолу</translation>
 <translation id="7332053360324989309">Доделен работник: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Дупликат картички</translation>
 <translation id="7333388112938984914">Не може да се прикачат датотеки додека сте на врска што се плаќа.</translation>
 <translation id="7333669215417470379">Бекап и враќање на вашите апликации и поставки</translation>
 <translation id="7335974957018254119">Користете проверка на правопис за</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 9a53888..9cf54ab 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -7204,6 +7204,7 @@
 <translation id="6122831415929794347">സുരക്ഷിത ബ്രൗസിംഗ് ഓഫാക്കണോ?</translation>
 <translation id="6124650939968185064">ഇനിപ്പറയുന്ന വിപുലീകരണങ്ങൾ ഈ വിപുലീകരണത്തെ ആശ്രയിച്ചിരിക്കുന്നു:</translation>
 <translation id="6124698108608891449">ഈ സൈറ്റിന് കൂടുതൽ അനുമതികൾ ആവശ്യമുണ്ട്.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> എന്നയാൾക്കൊപ്പം ടാബ് ഗ്രൂപ്പിൽ ചേരുക</translation>
 <translation id="6125479973208104919">നിർഭാഗ്യവശാൽ ഈ <ph name="DEVICE_TYPE" /> ഉപകരണത്തിൽ വീണ്ടും നിങ്ങളുടെ അക്കൗണ്ട് ചേർക്കേണ്ടതുണ്ട്.</translation>
 <translation id="6125639926370653692">ചന്ദ്രൻ</translation>
 <translation id="6126601353087978360">നിങ്ങളുടെ ഫീഡ്‌ബാക്ക് ഇവിടെ നൽകുക:</translation>
@@ -7854,6 +7855,7 @@
 <translation id="6607831829715835317">കൂടുതൽ ഉപക&amp;രണങ്ങൾ</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ഇപ്പോൾ തന്നെ <ph name="DOMAIN" /> മാനേജ് ചെയ്യുന്നുണ്ട്. മറ്റൊരു അക്കൗണ്ടിൽ രക്ഷാകർതൃ നിയന്ത്രണങ്ങൾ ഉപയോഗിക്കാൻ, സജ്ജീകരിച്ചതിനുശേഷം സൈൻ ഔട്ട് ചെയ്യുക, തുടർന്ന് സൈൻ-ഇൻ സ്ക്രീനിൽ "വ്യക്തിയെ ചേർക്കുക" തിരഞ്ഞെടുക്കുക.</translation>
 <translation id="6608166463665411119">ഇ-സിം റീസെറ്റ് ചെയ്യുക</translation>
+<translation id="660846213831377756">മൗസ് കീകൾ</translation>
 <translation id="6608773371844092260">ഫിംഗർപ്രിന്റ് സജ്ജീകരിക്കാൻ, ഈ <ph name="DEVICE_TYPE" /> എന്നതിൽ വലത് മൂലയിലുള്ള ഫിംഗർപ്രിന്റ് സെൻസറിൽ സ്‌പർശിക്കാൻ നിങ്ങളുടെ കുട്ടിയോട് ആവശ്യപ്പെടുക. നിങ്ങളുടെ കുട്ടിയുടെ ഫിംഗർപ്രിന്റ് ഡാറ്റ <ph name="DEVICE_TYPE" /> എന്നതിൽ സുരക്ഷിതമായി സംഭരിക്കുന്നു, ഒരിക്കലും അതിൽ നിന്ന് പുറത്ത് പോകില്ല.</translation>
 <translation id="6609478180749378879">നിങ്ങൾ അദൃശ്യ മോഡിൽ നിന്ന് പുറത്തുകടന്ന ശേഷം സൈൻ ഇൻ ഡാറ്റ ഈ ഉപകരണത്തിൽ സംഭരിക്കും. നിങ്ങളുടെ ഉപകരണത്തിലൂടെ പിന്നീട് വീണ്ടും ഈ വെബ്‌സൈറ്റിൽ സൈൻ ഇൻ ചെയ്യാനാകും.</translation>
 <translation id="6610002944194042868">വിവർത്തന ഓപ്‌ഷനുകൾ</translation>
@@ -8660,6 +8662,7 @@
 <translation id="7189451821249468368">നിങ്ങൾക്ക് ഈ ഉപകരണം ചേർക്കുന്നതിനാവശ്യമായ അപ്ഗ്രേഡുകൾ ഇല്ല. കൂടുതൽ വാങ്ങുന്നതിന് വിൽപ്പനയുമായി ബന്ധപ്പെടുക. ഈ സന്ദേശം പിശക് കാരണമാണെന്ന് നിങ്ങൾ കരുതുന്നുവെങ്കിൽ പിന്തുണയുമായി ബന്ധപ്പെടുക.</translation>
 <translation id="7189965711416741966">ഫിംഗർപ്രിന്റ് ചേർത്തു.</translation>
 <translation id="7190883804815364931">ഈ ടാബിനുള്ള അവസാന അപ്‌ഡേറ്റ്</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> ബ്ലോക്ക് ചെയ്യണോ?</translation>
 <translation id="7191063546666816478"><ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> എന്നിവയിലും മറ്റ് <ph name="NUMBER_OF_OTHER_APPS" /> ആപ്പുകളിലും ചില പിന്തുണാ ലിങ്കുകൾ തുടർന്നും തുറക്കാനാകും.</translation>
 <translation id="7191159667348037">അജ്ഞാത പ്രിന്‍റർ (USB)</translation>
 <translation id="7191631508323321927">ഹോൾവേ</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index df16aba..7ce22a3d 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -7216,6 +7216,7 @@
 <translation id="6122831415929794347">Аюулгүй үзэх онцлогийг унтраах уу?</translation>
 <translation id="6124650939968185064">Дараах өргөтгөлүүд нь энэ өргөтгөлөөс хамаардаг:</translation>
 <translation id="6124698108608891449">Энэ сайтад илүү зөвшөөрөл шаардлагатай.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" />-н байгаа табын бүлэгт нэгдэх</translation>
 <translation id="6125479973208104919">Харамсалтай нь та бүртгэлээ <ph name="DEVICE_TYPE" />-д дахин нэмэх шаардлагатай болно.</translation>
 <translation id="6125639926370653692">Сар</translation>
 <translation id="6126601353087978360">Санал хүсэлтээ энд оруулна уу:</translation>
@@ -7866,6 +7867,7 @@
 <translation id="6607831829715835317">Илүү их хэрэгслүүд</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> аль хэдийнээ <ph name="USER_EMAIL" />-г удирдаж байна. Эцэг эхийн хяналтыг өөр Google Бүртгэлээр ашиглахын тулд тохируулгын дараа гарч, нэвтрэх дэлгэц дээрх "Хүн нэмэх"-ийг сонгоно уу.</translation>
 <translation id="6608166463665411119">eSIM-г шинэчлэх</translation>
+<translation id="660846213831377756">Хулганын товч</translation>
 <translation id="6608773371844092260">Хурууны хээ тохируулахын тулд хүүхдээрээ энэ <ph name="DEVICE_TYPE" />-н баруун гар талд байх хурууны хээ мэдрэгчид хурууг нь хүргүүлнэ үү. Таны хүүхдийн хурууны хээний өгөгдлийг аюулгүй хадгалдаг бөгөөд энэ өгөгдөл энэ <ph name="DEVICE_TYPE" />-с гадагш хэзээ ч гарахгүй.</translation>
 <translation id="6609478180749378879">Таныг Нууцлалын горимоос гарсны дараа нэвтрэх өгөгдлийг энэ төхөөрөмж дээр хадгална. Та энэ вебсайтад дараа нь төхөөрөмжөөрөө нэвтрэх боломжтой болно.</translation>
 <translation id="6610002944194042868">Орчуулах сонголт</translation>
@@ -8671,6 +8673,7 @@
 <translation id="7189451821249468368">Танд энэ төхөөрөмжийг бүртгүүлэх хангалттай дэвшүүлэлт байхгүй байна. Нэмж худалдан авах бол борлуулалтын хэсэгтэй холбогдоно уу. Хэрэв та алдаа гарсны улмаас энэ мессежийг харж байна гэж бодож байвал тусламжтай холбогдоно уу.</translation>
 <translation id="7189965711416741966">Хурууны хээг нэмсэн</translation>
 <translation id="7190883804815364931">Энэ табын сүүлийн шинэчлэлт</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" />-г блоклох уу?</translation>
 <translation id="7191063546666816478">Зарим дэмжигдсэн холбоосыг <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> болон өөр <ph name="NUMBER_OF_OTHER_APPS" /> аппад нээх боломжтой хэвээр байна.</translation>
 <translation id="7191159667348037">Тодорхойгүй хэвлэгч (USB)</translation>
 <translation id="7191631508323321927">Үүдний өрөө</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index da234a35..8203a76 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -7221,6 +7221,7 @@
 <translation id="6122831415929794347">सुरक्षित ब्राउझिंग बंद करायचे का?</translation>
 <translation id="6124650939968185064">या एक्स्टेंशनवर अवलंबून असलेले खालील एक्स्टेंशन:</translation>
 <translation id="6124698108608891449">या साइटला आणखी परवानग्यांची आवश्यकता आहे.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> सोबत टॅब गटामध्ये सामील व्हा</translation>
 <translation id="6125479973208104919">दुर्दैवाने, तुम्हाला या <ph name="DEVICE_TYPE" /> वर तुमचे खाते पुन्हा जोडावे लागेल.</translation>
 <translation id="6125639926370653692">चंद्र</translation>
 <translation id="6126601353087978360">कृपया तुमचा फीडबॅक येथे एंटर करा:</translation>
@@ -7871,6 +7872,7 @@
 <translation id="6607831829715835317">अधिक साध&amp;ने</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> हा आधीपासून <ph name="DOMAIN" /> यांच्‍याकडून व्यवस्थापित केला जात आहे. वेगळे Google खाते यासह पालक नियंत्रणे वापरायची असल्‍यास, सेटअप केल्‍यानंतर साइन आउट करा, त्‍यानंतर साइन इन स्क्रीनवर "व्‍यक्‍ती जोडा" असे निवडा.</translation>
 <translation id="6608166463665411119">eSIM रीसेट करा</translation>
+<translation id="660846213831377756">माउस की</translation>
 <translation id="6608773371844092260">फिंगरप्रिंट सेट करण्यासाठी, तुमच्या लहान मुलाला या <ph name="DEVICE_TYPE" /> च्या उजव्या बाजूला असलेल्या फिंगरप्रिंट सेन्सरला स्पर्श करण्यास सांगा. तुमच्या लहान मुलाचा फिंगरप्रिंट डेटा सुरक्षितपणे स्टोअर केला जातो आणि तो या <ph name="DEVICE_TYPE" /> मध्येच राहतो.</translation>
 <translation id="6609478180749378879">तुम्ही गुप्त मोड यामधून बाहेर पडल्यानंतर साइन इन डेटा या डिव्हाइसवर सेव्ह केला जाईल. तुम्हाला नंतर पुन्हा तुमचे डिव्हाइस वापरून या वेबसाइटवर साइन करता येईल.</translation>
 <translation id="6610002944194042868">भाषांतराचे पर्याय</translation>
@@ -8677,6 +8679,7 @@
 <translation id="7189451821249468368">तुमच्याकडे या डिव्हाइसची नोंदणी करण्यासाठी पुरेसे अपग्रेड नाहीत. कृपया आणखी खरेदी करण्यासाठी विक्रीशी विभागाशी संपर्क साधा. हा मेसेज एररमुळे दिसत आहे असे वाटत असल्यास, कृपया सपोर्टशी संपर्क साधा.</translation>
 <translation id="7189965711416741966">फिंगरप्रिंट जोडले.</translation>
 <translation id="7190883804815364931">हा टॅब यासंबंधित शेवटचे अपडेट</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> यांना ब्लॉक करायचे आहे का?</translation>
 <translation id="7191063546666816478">सपोर्ट असलेल्या काही लिंक तरीही <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> आणि आणखी <ph name="NUMBER_OF_OTHER_APPS" /> अ‍ॅप्स मध्ये उघडतील.</translation>
 <translation id="7191159667348037">अज्ञात मुद्रक (USB)</translation>
 <translation id="7191631508323321927">हॉलवे</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 6f5e78a5..3d4d2e2 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -7221,6 +7221,7 @@
 <translation id="6122831415929794347">Matikan Penyemakan Imbas Selamat?</translation>
 <translation id="6124650939968185064">Sambungan berikut bergantung kepada sambungan ini:</translation>
 <translation id="6124698108608891449">Tapak ini memerlukan kebenaran lagi.</translation>
+<translation id="6125202119952209826">Sertai kumpulan tab dengan <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Malangnya, anda perlu menambahkan akaun pada <ph name="DEVICE_TYPE" /> ini sekali lagi.</translation>
 <translation id="6125639926370653692">Bulan</translation>
 <translation id="6126601353087978360">Sila masukkan maklum balas anda di sini:</translation>
@@ -7871,6 +7872,7 @@
 <translation id="6607831829715835317">Lagi al&amp;at</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> sudah diurus oleh <ph name="DOMAIN" />. Untuk menggunakan kawalan ibu bapa dengan Google Account yang berbeza, log keluar selepas persediaan, kemudian pilih "Tambah orang" pada skrin log masuk.</translation>
 <translation id="6608166463665411119">Tetapkan semula eSIM</translation>
+<translation id="660846213831377756">Kekunci tetikus</translation>
 <translation id="6608773371844092260">Untuk menyediakan cap jari, minta anak anda menyentuh penderia cap jari di sebelah kanan <ph name="DEVICE_TYPE" /> ini. Data cap jari anak anda disimpan dengan selamat dan tidak sekali-kali dihantar keluar daripada <ph name="DEVICE_TYPE" /> ini.</translation>
 <translation id="6609478180749378879">Data log masuk akan disimpan pada peranti ini selepas anda keluar daripada mod Inkognito. Anda akan dapat log masuk ke laman web ini menggunakan peranti anda kemudian.</translation>
 <translation id="6610002944194042868">Pilihan Terjemahan</translation>
@@ -8677,6 +8679,7 @@
 <translation id="7189451821249468368">Anda tidak mempunyai peningkatan yang mencukupi untuk mendaftarkan peranti ini. Sila hubungi bahagian jualan untuk membeli lagi. Jika anda percaya mesej ini merupakan satu kesilapan, sila hubungi sokongan.</translation>
 <translation id="7189965711416741966">Cap jari ditambahkan.</translation>
 <translation id="7190883804815364931">Kemaskinian Terakhir Tab ini</translation>
+<translation id="7190921792980745354">Sekat <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Sesetengah pautan yang disokong masih akan dibuka dalam <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> dan <ph name="NUMBER_OF_OTHER_APPS" /> apl lain.</translation>
 <translation id="7191159667348037">Pencetak Tidak Diketahui (USB)</translation>
 <translation id="7191631508323321927">Koridor</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 351f898b5..ddc78a57a 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -5122,6 +5122,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> ကို အရန်ဘရောင်ဇာတွင် ဖွင့်၍မရပါ။ သင်၏ စနစ်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။</translation>
 <translation id="4587589328781138893">ဝဘ်ဆိုက်များ</translation>
 <translation id="4588749726511456218">လှိမ့်သည့် အရှိန်မြှင့်ခြင်း <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> နှင့် <ph name="DOMAIN" /> တို့ ဆက်စပ်ပုံရသည်။ သင့်စကားဝှက်မသုံးမီ <ph name="DOMAIN" /> ကို ယုံကြည်ကြောင်း သေချာပါစေ။</translation>
 <translation id="4589713469967853491">'ဒေါင်းလုဒ်များ' ဖိုင်လမ်းညွှန်သို့ မှတ်တမ်းများ ရေးထည့်ပြီးပါပြီ။</translation>
 <translation id="4590785647529325123">သင်၏စက်မှ ရုပ်ဖျက် ကြည့်ရှုမှုမှတ်တမ်းကို ဖျက်ရန် ရုပ်ဖျက်တဘ်အားလုံး ပိတ်ပါ</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> တွင် သိမ်းထားသောစက်များ မရှိပါ</translation>
@@ -5628,6 +5629,7 @@
 <translation id="4946998421534856407">Launcher + အပေါ်ညွှန်မြား</translation>
 <translation id="4947376546135294974">သင်ဝင်ကြည့်နေသော ဝဘ်ဆိုက်မှဒေတာ</translation>
 <translation id="4950100687509657457">ပရိုဖိုင် ပြုလုပ်ရန်</translation>
+<translation id="4950360215042327246">[နေရာအစားထိုး အက္ခရာတွဲ]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ဖိုင်တစ်ဖိုင်}other{ဖိုင် # ဖိုင်}}</translation>
 <translation id="495170559598752135">လုပ်ဆောင်ချက်များ</translation>
 <translation id="4951966678293618079">ဤဝဘ်ဆိုက်အတွက် စကားဝှက်များ ဘယ်တော့မှ မသိမ်းပါနှင့်</translation>
@@ -5766,6 +5768,7 @@
 <translation id="5061531353537614467">တန်ဒြာ</translation>
 <translation id="5062930723426326933">လက်မှတ်ထိုး ဝင်မှု မအောင်မြင်ခဲ့ပါ၊ ကျေးဇူးပြုပြီး အင်တာနက်သို့ ဆက်ပြီး ထပ်စမ်းပါ။</translation>
 <translation id="5063480226653192405">အသုံးပြုပုံ</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> ပရိုဖိုင် ဖွင့်ပါ။ ဤပရိုဖိုင်ကို သင့်မိဘက စီမံသည်။</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS ဆက်တင်များတွင် လုံခြုံသည့် DNS ကို စီမံရန်</translation>
 <translation id="5066534201484101197">စာမျက်နှာများအကြား ရွှေ့ကြည့်ရန် အဆုံးအထိလှိမ့်ပါ</translation>
@@ -7215,6 +7218,7 @@
 <translation id="6122831415929794347">'ဘေးကင်းစွာ အသုံးပြုခြင်း' ကို ပိတ်လိုသလား။</translation>
 <translation id="6124650939968185064">အောက်ပါ တိုးချဲ့မှုများသည် ဒီတိုးချဲ့မှု အပေါ်မှာ မူတည်နေ:</translation>
 <translation id="6124698108608891449">ဤဝဘ်ဆိုက်အတွက် နောက်ထပ်ခွင့်ပြုချက်များ လိုအပ်သည်။</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> နှင့်အတူ တဘ်အုပ်စုတွင် ပါဝင်ခြင်း</translation>
 <translation id="6125479973208104919">ဝမ်းနည်းပါသည်။ သင်၏အကောင့်ကို ဤ <ph name="DEVICE_TYPE" /> သို့ ထပ်မံထည့်သွင်းရပါမည်။</translation>
 <translation id="6125639926370653692">လ</translation>
 <translation id="6126601353087978360">သင့်အကြံပြုချက်ကို ဤနေရာတွင် ထည့်ပါ-</translation>
@@ -7423,6 +7427,7 @@
 <translation id="6266984048393265562">ပရိုဖိုင်ကို စိတ်ကြိုက်လုပ်ရန်</translation>
 <translation id="6267166720438879315"><ph name="HOST_NAME" /> သို့သင်ကိုယ်တိုင် စစ်မှန်ကြောင်း သက်သေပြရန် အသိမှတ်ပြုလက်မှတ် ရွေးပါ</translation>
 <translation id="6268252012308737255"><ph name="APP" />ဖြင့် ဖွင့်ရန်</translation>
+<translation id="6269050081341530851">မိတ္တူပွားများကို ပိတ်သောအခါ အဟောင်းဆုံးမိတ္တူကို သိမ်းထားသည်</translation>
 <translation id="6270309713620950855">သတိပေးနှိုးဆော်ချက် အသံပိတ်ရန်</translation>
 <translation id="6270391203985052864">ဝဘ်ဆိုက်များက အကြောင်းကြားချက်များပို့ရန် တောင်းဆိုနိုင်သည်</translation>
 <translation id="6270486800167535228">နောက်ဆက်တွဲကို ပင်ထိုးထားသည်။ နောက်ထပ်နည်းလမ်းများ မြင်ရရန် ရွေးပါ</translation>
@@ -7863,6 +7868,7 @@
 <translation id="6607831829715835317">နောက်ထပ် ကိရိ&amp;ယာများ</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ကို <ph name="DOMAIN" /> က စီမံနေပါသည်။ မတူညီသော Google Account ဖြင့် မိဘ အထိန်းအချုပ်များကိုသုံးရန် စနစ်ထည့်သွင်းပြီးပါက ထွက်ပါ၊ ထို့နောက် လက်မှတ်ထိုး ဝင်သည့်ဖန်သားပြင်ရှိ "လူထည့်ရန်" ကို ရွေးပါ။</translation>
 <translation id="6608166463665411119">eSIM ပြင်ဆင်သတ်မှတ်ရန်</translation>
+<translation id="660846213831377756">မောက်စ်ကီးများ</translation>
 <translation id="6608773371844092260">လက်ဗွေစနစ်ထည့်သွင်းရန် ဤ <ph name="DEVICE_TYPE" /> ၏ ညာဘက်ရှိ လက်ဗွေအာရုံခံကိရိယာအား သင့်ကလေးကို ထိခိုင်းပါ။ သင့်ကလေး၏လက်ဗွေဒေတာကို ဤ <ph name="DEVICE_TYPE" /> တွင်သာ လုံခြုံစွာ သိမ်းထားသည်။</translation>
 <translation id="6609478180749378879">'ရုပ်ဖျက်မုဒ်' မှထွက်ပြီးသောအခါ လက်မှတ်ထိုးဝင်ခြင်းဆိုင်ရာ ဒေတာကို ဤစက်တွင် သိမ်းထားပါမည်။ ဤဝဘ်ဆိုက်သို့ နောင်တွင် သင့်စက်ဖြင့် ထပ်မံလက်မှတ်ထိုးဝင်နိုင်ပါမည်။</translation>
 <translation id="6610002944194042868">ဘာသာပြန်ရန် ရွေးစရာများ</translation>
@@ -7962,6 +7968,7 @@
 <translation id="6679947539429331601">၁၂ နာရီကြာ ဖျောက်ရန်</translation>
 <translation id="6680442031740878064">ရနိုင်သည့် နေရာလွတ်− <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">အဆင့်သတ်မှတ်ရန်</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [နေရာအစားထိုး အက္ခရာတွဲ]</translation>
 <translation id="6683022854667115063">နားကြပ်</translation>
 <translation id="6683087162435654533">တဘ်အားလုံး ပြန်&amp;ယူရန်</translation>
 <translation id="6683433919380522900">ခွင့်ပြုချက်မှာ <ph name="PERMISSION_STATE" /> ဖြစ်သည်</translation>
@@ -8667,6 +8674,7 @@
 <translation id="7189451821249468368">ဤစက်ကို စာရင်းသွင်းရန် လုံလောက်သည့် အဆင့်မြှင့်တင်မှုများ မရှိပါ။ နောက်ထပ်ဝယ်ယူရန် ရောင်းချသူထံ ဆက်သွယ်ပါ။ ဤမက်ဆေ့ဂျ်ကို မှားယွင်း၍ မြင်ရခြင်းဖြစ်သည်ဟု ယူဆပါက အကူအညီရယူရန် ဆက်သွယ်ပါ။</translation>
 <translation id="7189965711416741966">လက်ဗွေကို ထည့်ပြီးပြီ။</translation>
 <translation id="7190883804815364931">ဤတဘ်သို့ နောက်ဆုံးအပ်ဒိတ်</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> ကို ပိတ်ထားမလား။</translation>
 <translation id="7191063546666816478">ပံ့ပိုးထားသောလင့်ခ်အချို့ကို <ph name="APP_NAME" />၊ <ph name="APP_NAME_2" />၊ <ph name="APP_NAME_3" /> နှင့် အခြားအက်ပ် <ph name="NUMBER_OF_OTHER_APPS" /> ခုတွင် ဖွင့်နိုင်ပါဦးမည်။</translation>
 <translation id="7191159667348037">အမျိုးအမည်မသိ ပရင်တာ (USB)</translation>
 <translation id="7191631508323321927">စင်္ကြံ</translation>
@@ -8854,6 +8862,7 @@
 <translation id="7330533963640151632"><ph name="USER_EMAIL" /> ဖြင့် မျှဝေသည့်<ph name="USER_NAME" /> ၏ စက်အတွက် <ph name="FEATURE_NAME" /> ဆက်တင်များ။</translation>
 <translation id="7331646370422660166">Alt + အောက်ညွှန်မြား</translation>
 <translation id="7332053360324989309">သီးသန့် ဆောင်ရွက်စနစ်- <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">မိတ္တူပွားတဘ်များ</translation>
 <translation id="7333388112938984914">အခပေးဒေတာ ချိတ်ဆက်မှုသုံးနေစဉ် ဖိုင်အပ်လုဒ်လုပ်၍ မရပါ။</translation>
 <translation id="7333669215417470379">သင့်အက်ပ်နှင့် ဆက်တင်များ အရန်သိမ်းခြင်းနှင့် ပြန်ယူခြင်း</translation>
 <translation id="7335974957018254119">အောက်ပါအတွက် စာလုံးပေါင်းစစ်ဆေးခြင်း အသုံးပြုပါ−</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index b81d308..bf93a48 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -7202,6 +7202,7 @@
 <translation id="6122831415929794347">सुरक्षित ब्राउजिङ निष्क्रिय पार्ने हो?</translation>
 <translation id="6124650939968185064">निम्न एक्सटेन्सनहरू यो एक्सटेन्सनमा निर्भर छ:</translation>
 <translation id="6124698108608891449">यो साइटलाई थप अनुमति चाहिन्छ।</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> सामेल हुनुभएको ट्याब समूहमा सामेल हुनुहोस्</translation>
 <translation id="6125479973208104919">दुर्भाग्यवश, तपाईंले यो <ph name="DEVICE_TYPE" /> मा आफ्नो खाता फेरि थप्नु पर्नेछ।</translation>
 <translation id="6125639926370653692">चन्द्रमा</translation>
 <translation id="6126601353087978360">कृपया आफ्नो प्रतिक्रिया यहाँ हाल्नुहोस्:</translation>
@@ -7852,6 +7853,7 @@
 <translation id="6607831829715835317">थप उपक&amp;रणहरू</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> ले पहिल्यैदेखि <ph name="USER_EMAIL" /> व्यवस्थापन गरिरहेको छ। कुनै अर्को Google खातामार्फत अभिभावकीय नियन्त्रणहरू प्रयोग गर्न सेटअप गरिसकेपछि साइन आउट गर्नुहोस् त्यसपछि साइन इन गर्ने स्क्रिनमा "व्यक्ति थप्नुहोस्" बटन चयन गर्नुहोस्।</translation>
 <translation id="6608166463665411119">eSIM रिसेट गर्नुहोस्</translation>
+<translation id="660846213831377756">माउस की सुविधा</translation>
 <translation id="6608773371844092260">तपाईं आफ्ना बच्चाको फिंगरप्रिन्ट सेटअप गर्न चाहनुहुन्छ भने उनलाई यो <ph name="DEVICE_TYPE" /> को दायाँतिर रहेको फिंगरप्रिन्ट सेन्सरमा छुन लगाउनुहोस्। तपाईंका बच्चाको फिंगरप्रिन्ट डेटा सुरक्षित रूपमा भण्डारण गरिन्छ र यो डेटा कहिल्यै पनि यस <ph name="DEVICE_TYPE" /> बाट अन्यत्र पठाइँदैन।</translation>
 <translation id="6609478180749378879">तपाईं इन्कोग्निटो मोडबाट बाहिरिएपछि साइन इन गर्न चाहिने डेटा यो डिभाइसमा भण्डारण गरिने छ। तपाईं पछि आफ्नो यन्त्रमार्फत यो वेबसाइटमा फेरि साइन इन गर्न सक्नु हुने छ।</translation>
 <translation id="6610002944194042868">अनुवादसम्बन्धी विकल्पहरू</translation>
@@ -8657,6 +8659,7 @@
 <translation id="7189451821249468368">तपाईंले यो डिभाइस दर्ता गर्नका निम्ति पर्याप्त स्तरवृद्धि गर्नुभएको छैन। कृपया थप स्तरवृद्धि खरिद गर्न बिक्री प्रतिनिधिसँग सम्पर्क गर्नुहोस्। तपाईंलाई यो सन्देश त्रुटिपूर्ण हिसाबले देख्नु हुँदैछ जस्तो लाग्छ भने कृपया ग्राहक सेवा विभागमा सम्पर्क गर्नुहोस्।</translation>
 <translation id="7189965711416741966">फिंगरप्रिन्ट हालियो।</translation>
 <translation id="7190883804815364931">यो ट्याबमा गरिएको पछिल्लो परिवर्तन</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> लाई ब्लक गर्ने हो?</translation>
 <translation id="7191063546666816478">खोल्न मिल्ने केही लिंकहरू अझै पनि <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> र अन्य <ph name="NUMBER_OF_OTHER_APPS" /> वटा एपमा खुल्ने छन्।</translation>
 <translation id="7191159667348037">अज्ञात प्रिन्टर (USB)</translation>
 <translation id="7191631508323321927">हलवे</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 04736fb..b11c7aef 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -7200,6 +7200,7 @@
 <translation id="6122831415929794347">Safe Browsing uitzetten?</translation>
 <translation id="6124650939968185064">De volgende extensies zijn afhankelijk van deze extensie:</translation>
 <translation id="6124698108608891449">Deze site heeft meer rechten nodig.</translation>
+<translation id="6125202119952209826">Lid worden van tabbladgroep met <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Je moet je account opnieuw toevoegen aan deze <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Maan</translation>
 <translation id="6126601353087978360">Geef hieronder je feedback op:</translation>
@@ -7850,6 +7851,7 @@
 <translation id="6607831829715835317">Meer hu&amp;lpprogramma's</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> wordt al beheerd door <ph name="DOMAIN" />. Als je ouderlijk toezicht wilt gebruiken met een ander Google-account, log je uit na het instellen en selecteer je 'Persoon toevoegen' op het inlogscherm.</translation>
 <translation id="6608166463665411119">E-simkaart resetten</translation>
+<translation id="660846213831377756">Muisknoppen</translation>
 <translation id="6608773371844092260">Als je een vingerafdruk wilt instellen, laat je je kind de vingerafdruksensor aan de rechterkant van deze <ph name="DEVICE_TYPE" /> aanraken. De vingerafdrukgegevens van je kind worden beveiligd opgeslagen en blijven uitsluitend op deze <ph name="DEVICE_TYPE" /> staan.</translation>
 <translation id="6609478180749378879">Nadat je de incognitomodus hebt afgesloten, worden de inloggegevens opgeslagen op dit apparaat. Je kunt later weer inloggen bij deze website met je apparaat.</translation>
 <translation id="6610002944194042868">Opties voor vertalen</translation>
@@ -8656,6 +8658,7 @@
 <translation id="7189451821249468368">Je hebt niet voldoende upgrades om dit apparaat in te schrijven. Neem contact op met de salesafdeling om meer upgrades te kopen. Als je denkt dat dit bericht ten onrechte wordt weergegeven, neem je contact op met support.</translation>
 <translation id="7189965711416741966">Vingerafdruk is toegevoegd.</translation>
 <translation id="7190883804815364931">Nieuwste update voor dit tabblad</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> blokkeren?</translation>
 <translation id="7191063546666816478">Bepaalde ondersteunde links worden nog steeds geopend in <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> en <ph name="NUMBER_OF_OTHER_APPS" /> andere apps.</translation>
 <translation id="7191159667348037">Onbekende printer (USB)</translation>
 <translation id="7191631508323321927">Gang</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 10264b45..fd783725 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -5116,6 +5116,7 @@
 <translation id="4586275095964870617">Kunne ikke åpne <ph name="URL" /> i en alternativ nettleser. Kontakt systemadministrator.</translation>
 <translation id="4587589328781138893">Nettsteder</translation>
 <translation id="4588749726511456218">Rulleakselerasjon <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> og <ph name="DOMAIN" /> ser ut til å være relatert. Forsikre deg om at du stoler på <ph name="DOMAIN" />, før du bruker passordet ditt.</translation>
 <translation id="4589713469967853491">Loggene er skrevet til Nedlastinger-katalogen.</translation>
 <translation id="4590785647529325123">For å fjerne Inkognito-nettleserloggen fra enheten, lukk alle inkognitofaner</translation>
 <translation id="459204634473266369">Ingen enheter er lagret i <ph name="PRIMARY_EMAIL" /></translation>
@@ -5621,6 +5622,7 @@
 <translation id="4946998421534856407">Appoversikt-tasten + oppoverpil</translation>
 <translation id="4947376546135294974">Data fra nettstedet du besøker</translation>
 <translation id="4950100687509657457">Opprett profil</translation>
+<translation id="4950360215042327246">[plassholderstreng]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{en fil}other{# filer}}</translation>
 <translation id="495170559598752135">Handlinger</translation>
 <translation id="4951966678293618079">Lagre aldri passord for dette nettstedet</translation>
@@ -5759,6 +5761,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Påloggingen mislyktes. Koble til Internett og prøv på nytt.</translation>
 <translation id="5063480226653192405">Bruk</translation>
+<translation id="5064921774605267982">Åpne <ph name="PROFILE_NAME" />-profilen. Denne profilen administreres av forelderen din.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Administrer sikker DNS i ChromeOS-innstillingene</translation>
 <translation id="5066534201484101197">Overrull for å navigere mellom sider</translation>
@@ -7207,6 +7210,7 @@
 <translation id="6122831415929794347">Vil du slå av Safe Browsing?</translation>
 <translation id="6124650939968185064">Disse utvidelsene er avhengige av denne utvidelsen:</translation>
 <translation id="6124698108608891449">Dette nettstedet trenger flere tillatelser.</translation>
+<translation id="6125202119952209826">Bli med i fanegruppen med <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Du må dessverre legge til kontoen din på denne <ph name="DEVICE_TYPE" />-enheten på nytt.</translation>
 <translation id="6125639926370653692">Måne</translation>
 <translation id="6126601353087978360">Skriv inn tilbakemeldingen din her:</translation>
@@ -7414,6 +7418,7 @@
 <translation id="6266984048393265562">Tilpass profil</translation>
 <translation id="6267166720438879315">Velg sertifikat for å autentisere deg selv til <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Åpne med <ph name="APP" /></translation>
+<translation id="6269050081341530851">Den eldste kopien beholdes når du lukker duplikater</translation>
 <translation id="6270309713620950855">Påminnelse om at mikrofonen er av</translation>
 <translation id="6270391203985052864">Nettsteder kan be om å få sende deg varsler</translation>
 <translation id="6270486800167535228">Utvidelsen er festet. Velg for å se flere alternativer</translation>
@@ -7856,6 +7861,7 @@
 <translation id="6607831829715835317">Flere verktøy</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> administreres allerede av <ph name="DOMAIN" />. For å bruke foreldrekontroll med en annen Google-konto, logg ut etter konfigureringen og velg «Legg til person» på påloggingsskjermen.</translation>
 <translation id="6608166463665411119">Tilbakestill eSIM-kortet</translation>
+<translation id="660846213831377756">Musetaster</translation>
 <translation id="6608773371844092260">For å konfigurere fingeravtrykk, få barnet ditt til å trykke på fingeravtrykkssensoren på høyre side av <ph name="DEVICE_TYPE" />. Barnets fingeravtrykksdata lagres sikkert og sendes aldri fra <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Påloggingsdata blir lagret på denne enheten når du går ut av Inkognitomodus. Du kan logge på dette nettstedet med enheten din igjen senere.</translation>
 <translation id="6610002944194042868">Alternativer for oversettelse</translation>
@@ -7955,6 +7961,7 @@
 <translation id="6679947539429331601">Skjul i 12 timer</translation>
 <translation id="6680442031740878064">Tilgjengelig: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Hastighet</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [plassholderstreng]</translation>
 <translation id="6683022854667115063">Hodetelefoner</translation>
 <translation id="6683087162435654533">Gjenopprett alle faner</translation>
 <translation id="6683433919380522900">Tillatelsen er <ph name="PERMISSION_STATE" /></translation>
@@ -8661,6 +8668,7 @@
 <translation id="7189451821249468368">Du har ikke tilstrekkelige oppgraderinger for å registrere denne enheten. Ta kontakt med salgsavdelingen for å kjøpe flere. Hvis du tror dette er en feil, kan du ta kontakt med brukerstøtten.</translation>
 <translation id="7189965711416741966">Fingeravtrykket er lagt til.</translation>
 <translation id="7190883804815364931">Nyeste oppdatering av denne fanen</translation>
+<translation id="7190921792980745354">Vil du blokkere <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Noen støttede linker åpnes fremdeles i <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> og <ph name="NUMBER_OF_OTHER_APPS" /> apper til.</translation>
 <translation id="7191159667348037">Ukjent skriver (USB)</translation>
 <translation id="7191631508323321927">Gang</translation>
@@ -8848,6 +8856,7 @@
 <translation id="7330533963640151632">Innstillinger for <ph name="FEATURE_NAME" /> for enheten til <ph name="USER_NAME" />, som deler via kontoen <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + nedoverpil</translation>
 <translation id="7332053360324989309">Dedikert arbeider: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Dupliserte faner</translation>
 <translation id="7333388112938984914">Du kan ikke laste opp filer via tilkoblinger med datamåling.</translation>
 <translation id="7333669215417470379">Sikkerhetskopier og gjenopprett appene og innstillingene dine</translation>
 <translation id="7335974957018254119">Bruk stavekontroll for</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index d8b37099..b94af69 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -5106,6 +5106,7 @@
 <translation id="4586275095964870617"><ph name="URL" />,ଏକ ବୈକଳ୍ପିକ ବ୍ରାଉଜର୍‌ରେ ଖୋଲି ହେଲା ନାହିଁ। ଦୟାକରି ଆପଣଙ୍କର ସିଷ୍ଟମ୍ ଆଡ୍‌ମିନିଷ୍ଟ୍ରେଟର୍‌ଙ୍କୁ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="4587589328781138893">ସାଇଟଗୁଡ଼ିକ</translation>
 <translation id="4588749726511456218">ସ୍କ୍ରୋଲ ଆକ୍ସିଲିରେସନ <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> ଏବଂ <ph name="DOMAIN" /> ସମ୍ବନ୍ଧିତ ଥିବା ପରି ଜଣାପଡ଼ୁଛି। ଆପଣଙ୍କ ପାସୱାର୍ଡ ବ୍ୟବହାର କରିବା ପୂର୍ବରୁ ଆପଣ <ph name="DOMAIN" />କୁ ବିଶ୍ୱାସ କରୁଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ।</translation>
 <translation id="4589713469967853491">ଡାଉନଲୋଡ୍ ଡିରେକ୍ଟୋରୀରେ ଲଗଗୁଡ଼ିକ ସଫଳତାର ସହ ଲେଖାଯାଇଛି।</translation>
 <translation id="4590785647529325123">ଆପଣଙ୍କ ଡିଭାଇସରୁ ଇନକଗ୍ନିଟୋ ବ୍ରାଉଜିଂ ଇତିହାସକୁ ଡିଲିଟ କରିବା ପାଇଁ, ସମସ୍ତ ଇନକଗ୍ନିଟୋ ଟାବକୁ ଡିଲିଟ କରନ୍ତୁ</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" />ରେ କୌଣସି ଡିଭାଇସ ସେଭ ହୋଇନାହିଁ</translation>
@@ -5611,6 +5612,7 @@
 <translation id="4946998421534856407">ଲଞ୍ଚର + ଉପର ତୀର</translation>
 <translation id="4947376546135294974">ଆପଣ ଭିଜିଟ କରୁଥିବା ସାଇଟରୁ ଡାଟା</translation>
 <translation id="4950100687509657457">ପ୍ରୋଫାଇଲ ତିଆରି କରନ୍ତୁ</translation>
+<translation id="4950360215042327246">[ପ୍ଲେସହୋଲ୍ଡର ଷ୍ଟ୍ରିଂ]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ଏକ ଫାଇଲ୍}other{#ଟି ଫାଇଲ୍}}</translation>
 <translation id="495170559598752135">କାର୍ଯ୍ୟ</translation>
 <translation id="4951966678293618079">ଏହି ସାଇଟ ପାଇଁ କେବେ ବି ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସେଭ କରନ୍ତୁ ନାହିଁ</translation>
@@ -5749,6 +5751,7 @@
 <translation id="5061531353537614467">ତୁନ୍ଦ୍ରା</translation>
 <translation id="5062930723426326933">ସାଇନ୍‌-ଇନ୍‍ କରିବା ବିଫଳ ହେଲା, ଦୟାକରି ଇଣ୍ଟର୍ନେଟ୍‌କୁ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="5063480226653192405">ବ୍ୟବହାର</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> ପ୍ରୋଫାଇଲ ଖୋଲନ୍ତୁ। ଏହି ପ୍ରୋଫାଇଲ ତୁମ ବାପାମାଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ।</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS ସେଟିଂସରେ ସୁରକ୍ଷିତ DNSକୁ ପରିଚାଳନା କରନ୍ତୁ</translation>
 <translation id="5066534201484101197">ପୃଷ୍ଠାଗୁଡ଼ିକ ମଧ୍ୟରେ ନାଭିଗେଟ କରିବାକୁ ଓଭରସ୍କ୍ରୋଲ କରନ୍ତୁ</translation>
@@ -7196,6 +7199,7 @@
 <translation id="6122831415929794347">ସେଫ୍ ବ୍ରାଉଜିଂ ବନ୍ଦ କରିବେ?</translation>
 <translation id="6124650939968185064">ନିମ୍ନୋକ୍ତ ଏକ୍ସଟେନ୍‌ସନ୍‌ଗୁଡ଼ିକ ଏହି ଏକ୍ସଟେନ୍‌ସନ୍ ଉପରେ ନିର୍ଭରଶୀଳ ଅଟେ:</translation>
 <translation id="6124698108608891449">ଏହି ସାଇଟ୍‍ର ଅଧିକ ଅନୁମତି ଆବଶ୍ୟକ।</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" />ଙ୍କ ସହ ଟାବ ଗ୍ରୁପରେ ଯୋଗ ଦିଅନ୍ତୁ</translation>
 <translation id="6125479973208104919">ଦୁର୍ଭାଗ୍ୟବଶତଃ, ଆପଣଙ୍କୁ ଆପଣଙ୍କର ଆକାଉଣ୍ଟକୁ ଏହି <ph name="DEVICE_TYPE" />ରେ ପୁଣିଥରେ ଯୋଗ କରିବା ଦରକାର।</translation>
 <translation id="6125639926370653692">ଚନ୍ଦ୍ର</translation>
 <translation id="6126601353087978360">ଦୟାକରି ଆପଣଙ୍କ ମତାମତ ଏଠାରେ ଲେଖନ୍ତୁ:</translation>
@@ -7403,6 +7407,7 @@
 <translation id="6266984048393265562">ପ୍ରୋଫାଇଲକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ</translation>
 <translation id="6267166720438879315"><ph name="HOST_NAME" /> କୁ ନିଜକୁ ପ୍ରାମାଣିକରଣ କରିବାକୁ ଏକ ସାର୍ଟିଫିକେଟ୍ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="6268252012308737255"><ph name="APP" />ରେ ଖୋଲନ୍ତୁ</translation>
+<translation id="6269050081341530851">ଆପଣ ଡୁପ୍ଲିକେଟଗୁଡ଼ିକୁ ବନ୍ଦ କରିବା ସମୟରେ ସବୁଠାରୁ ପୁରୁଣା କପି ରଖାଯାଇଥାଏ</translation>
 <translation id="6270309713620950855">ନଜକୁ ମ୍ୟୁଟ କରନ୍ତୁ</translation>
 <translation id="6270391203985052864">ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ପଠାଇବାକୁ ସାଇଟ୍‌ଗୁଡ଼ିକ ପଚାରିପାରିବେ</translation>
 <translation id="6270486800167535228">ଏକ୍ସଟେନସନକୁ ପିନ କରାଯାଇଛି। ଅଧିକ ବିକଳ୍ପ ଦେଖିବା ପାଇଁ ଚୟନ କରନ୍ତୁ</translation>
@@ -7846,6 +7851,7 @@
 <translation id="6607831829715835317">ଅଧିକ ଟୁ&amp;ଲ୍</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ପୂର୍ବରୁ <ph name="DOMAIN" /> ଦ୍ୱାରା ପରିଚାଳିତ ହେଉଛି। ଏକ ଭିନ୍ନ Google ଆକାଉଣ୍ଟ ସହ ବାପାମାଙ୍କ ନିୟନ୍ତ୍ରଣ ବ୍ୟବହାର କରିବା ପାଇଁ, ସେଟଅପ୍ କରିବା ପରେ ସାଇନ୍ ଆଉଟ୍ କରନ୍ତୁ, ତା'ପରେ ସାଇନ୍-ଇନ୍ ସ୍କ୍ରିନରେ "ବ୍ୟକ୍ତିଙ୍କୁ ଯୋଗ କରନ୍ତୁ"କୁ ଚୟନ କରନ୍ତୁ।</translation>
 <translation id="6608166463665411119">eSIMକୁ ରିସେଟ କରନ୍ତୁ</translation>
+<translation id="660846213831377756">ମାଉସ କୀଗୁଡ଼ିକ</translation>
 <translation id="6608773371844092260">ଟିପଚିହ୍ନ ସେଟ ଅପ କରିବା ପାଇଁ ଆପଣଙ୍କ ପିଲାକୁ ଏହି <ph name="DEVICE_TYPE" />ର ଡାହାଣ ପାର୍ଶ୍ୱରେ ଥିବା ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରିବା ପାଇଁ ଦିଅନ୍ତୁ। ଆପଣଙ୍କ ପିଲାର ଟିପଚିହ୍ନ ଡାଟାକୁ ସୁରକ୍ଷିତ ଭାବେ ଷ୍ଟୋର କରାଯାଇଛି ଏବଂ ଏହାକୁ କେବେ ବି ଏହି <ph name="DEVICE_TYPE" />ରୁ କାଢ଼ି ଦିଆଯାଏ ନାହିଁ।</translation>
 <translation id="6609478180749378879">ଆପଣ ଇନକଗ୍ନିଟୋ ମୋଡରୁ ବାହାରି ଯିବା ପରେ ସାଇନ୍-ଇନ୍ ଡାଟା ଏହି ଡିଭାଇସରେ ଷ୍ଟୋର୍ କରାଯିବ। ଆପଣ ଆପଣଙ୍କ ଡିଭାଇସ୍ ମାଧ୍ୟମରେ ଏହି ୱେବସାଇଟରେ ପରେ ପୁଣି ସାଇନ୍ ଇନ୍ କରିବାକୁ ସକ୍ଷମ ହେବେ।</translation>
 <translation id="6610002944194042868">ଅନୁବାଦର ବିକଳ୍ପଗୁଡ଼ିକ</translation>
@@ -7946,6 +7952,7 @@
 <translation id="6679947539429331601">12 ଘଣ୍ଟା ପାଇଁ ଲୁଚାନ୍ତୁ</translation>
 <translation id="6680442031740878064"><ph name="AVAILABLE_SPACE" />: ଉପଲବ୍ଧ ଅଛି</translation>
 <translation id="6680650203439190394">କେତେ ଶିଘ୍ର</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [ପ୍ଲେସହୋଲ୍ଡର ଷ୍ଟ୍ରିଂ]</translation>
 <translation id="6683022854667115063">ହେଡଫୋନଗୁଡ଼ିକ</translation>
 <translation id="6683087162435654533">ସମସ୍ତ ଟାବ୍ ରିଷ୍ଟୋର କରନ୍ତୁ</translation>
 <translation id="6683433919380522900">ଅନୁମତି <ph name="PERMISSION_STATE" /> ଅଟେ</translation>
@@ -8651,6 +8658,7 @@
 <translation id="7189451821249468368">ଏହି ଡିଭାଇସକୁ ପଞ୍ଜିକରଣ କରିବା ପାଇଁ ଆପଣଙ୍କ ପାଖରେ ପର୍ଯ୍ୟାପ୍ତ ଅପଗ୍ରେଡ୍ ନାହିଁ। ଅଧିକ କ୍ରୟ କରିବା ପାଇଁ, ଦୟାକରି ବିକ୍ରୟ ବିଭାଗ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁ। ଯଦି ଆପଣ ଏହି ମେସେଜକୁ ଭୁଲବଶତଃ ଦେଖିଛନ୍ତି ବୋଲି ଭାବୁଛନ୍ତି, ତେବେ ସହାୟତା କେନ୍ଦ୍ର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="7189965711416741966">ଟିପଚିହ୍ନ ଯୋଗ କରାଯାଇଛି।</translation>
 <translation id="7190883804815364931">ଏହି ଟାବରେ ଗତ ଅପଡେଟ</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" />ଙ୍କୁ ବ୍ଲକ କରିବେ?</translation>
 <translation id="7191063546666816478">କିଛି ସମର୍ଥିତ ଲିଙ୍କ ଏବେ ବି <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ଏବଂ ଅନ୍ୟ <ph name="NUMBER_OF_OTHER_APPS" />ଟି ଆପରେ ଖୋଲିବ।</translation>
 <translation id="7191159667348037">ଅଜଣା ପ୍ରିଣ୍ଟର୍ (USB)</translation>
 <translation id="7191631508323321927">ହଲଓ୍ଵେ</translation>
@@ -8838,6 +8846,7 @@
 <translation id="7330533963640151632"><ph name="USER_NAME" />ର ଡିଭାଇସ ପାଇଁ <ph name="FEATURE_NAME" /> ସେଟିଂସ <ph name="USER_EMAIL" /> ଆକାଉଣ୍ଟ ଅଧୀନରେ ସେୟାର କରାଯାଉଛି।</translation>
 <translation id="7331646370422660166">alt + ଡାଉନ ତୀର</translation>
 <translation id="7332053360324989309">ଉତ୍ସର୍ଗୀକୃତ କର୍ମଚାରୀ: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">ଡୁପ୍ଲିକେଟ ଟାବ</translation>
 <translation id="7333388112938984914">ଏକ ମିଟରଯୁକ୍ତ କନେକ୍ସନରେ ଥିବା ସମୟରେ ଫାଇଲଗୁଡ଼ିକୁ ଅପଲୋଡ କରାଯାଇପାରିବ ନାହିଁ।</translation>
 <translation id="7333669215417470379">ଆପଣଙ୍କ ଆପ୍ସ ଏବଂ ସେଟିଂସର ବେକଅପ ନେଇ ରିଷ୍ଟୋର କରନ୍ତୁ</translation>
 <translation id="7335974957018254119">ଏହା ପାଇଁ ବନାନ ଯାଞ୍ଚ ବ୍ୟବହାର କରନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 5500b69..f353fa10 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -7222,6 +7222,7 @@
 <translation id="6122831415929794347">ਕੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਬੰਦ ਕਰਨਾ ਹੈ?</translation>
 <translation id="6124650939968185064">ਅਨੁਸਰਣ ਐਕਸਟੈਂਸ਼ਨਾਂ ਇਸ ਐਕਸਟੈਂਸ਼ਨਾਂ 'ਤੇ ਨਿਰਭਰ ਹਨ:</translation>
 <translation id="6124698108608891449">ਇਸ ਸਾਈਟ ਨੂੰ ਹੋਰ ਇਜਾਜ਼ਤਾਂ ਦੀ ਲੋੜ ਹੈ।</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> ਨਾਲ ਟੈਬ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ</translation>
 <translation id="6125479973208104919">ਬਦਕਿਸਮਤੀ ਨਾਲ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਖਾਤੇ ਨੂੰ ਦੁਬਾਰਾ ਇਸ <ph name="DEVICE_TYPE" /> ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਲੋੜ ਪਵੇਗੀ।</translation>
 <translation id="6125639926370653692">ਚੰਦ</translation>
 <translation id="6126601353087978360">ਕਿਰਪਾ ਕਰਕੇ ਇੱਥੇ ਆਪਣਾ ਵਿਚਾਰ ਦਾਖਲ ਕਰੋ:</translation>
@@ -7874,6 +7875,7 @@
 <translation id="6607831829715835317">ਹੋਰ ਟੂ&amp;ਲਸ</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ਦਾ ਪਹਿਲਾਂ ਤੋਂ ਹੀ <ph name="DOMAIN" /> ਵੱਲੋਂ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਕਿਸੇ ਵੱਖਰੇ Google ਖਾਤੇ ਨਾਲ ਮਾਪਿਆਂ ਦੇ ਕੰਟਰੋਲ ਵਰਤਣ ਲਈ, ਸੈੱਟਅੱਪ ਕਰਨ ਤੋਂ ਬਾਅਦ ਸਾਈਨ-ਆਊਟ ਕਰੋ, ਫਿਰ ਸਾਈਨ-ਇਨ ਸਕ੍ਰੀਨ 'ਤੇ "ਵਿਅਕਤੀ ਸ਼ਾਮਲ ਕਰੋ" ਨੂੰ ਚੁਣੋ।</translation>
 <translation id="6608166463665411119">ਈ-ਸਿਮ ਰੀਸੈੱਟ ਕਰੋ</translation>
+<translation id="660846213831377756">ਮਾਊਸ ਕੁੰਜੀਆਂ</translation>
 <translation id="6608773371844092260">ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ, ਆਪਣੇ ਬੱਚੇ ਨੂੰ ਇਸ <ph name="DEVICE_TYPE" /> ਦੇ ਸੱਜੇ ਪਾਸੇ 'ਤੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ 'ਤੇ ਸਪਰਸ਼ ਕਰਨ ਲਈ ਕਹੋ। ਤੁਹਾਡੇ ਬੱਚੇ ਦਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਡਾਟਾ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਕਦੇ ਵੀ ਇਸ <ph name="DEVICE_TYPE" /> ਤੋਂ ਬਾਹਰ ਨਹੀਂ ਜਾਂਦਾ।</translation>
 <translation id="6609478180749378879">ਇਨਕੋਗਨਿਟੋ ਮੋਡ ਤੋਂ ਬਾਹਰ ਨਿਕਲਣ ਦੇ ਬਾਅਦ ਸਾਈਨ-ਇਨ ਡਾਟਾ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਸਟੋਰ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਆਪਣੇ ਡੀਵਾਈਸ ਨਾਲ ਇਸ ਵੈੱਬਸਾਈਟ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰ ਸਕੋਗੋ।</translation>
 <translation id="6610002944194042868">ਅਨੁਵਾਦ ਵਿਕਲਪ</translation>
@@ -8680,6 +8682,7 @@
 <translation id="7189451821249468368">ਤੁਹਾਡੇ ਕੋਲ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਦਰਜ ਕਰਨ ਲਈ ਲੋੜੀਂਦੇ ਅੱਪਗ੍ਰੇਡ ਨਹੀਂ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਹੋਰ ਖਰੀਦ ਲਈ ਵਿਕਰੀ ਵਿਭਾਗ ਨੂੰ ਸੰਪਰਕ ਕਰੋ। ਜੇ ਤੁਸੀਂ ਮੰਨਦੇ ਹੋ ਕਿ ਤੁਹਾਨੂੰ ਇਸ ਸੁਨੇਹ ਗਲਤੀ ਨਾਲ ਦਿਖਾਇਆ ਜਾ ਰਿਹਾ ਹੈ, ਤਾਂ ਕਿਰਪਾ ਕਰਕੇ ਸਹਾਇਤਾ ਟੀਮ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation>
 <translation id="7189965711416741966">ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।</translation>
 <translation id="7190883804815364931">ਇਸ ਟੈਬ ਵਿੱਚ ਕੀਤਾ ਗਿਆ ਪਿਛਲਾ ਅੱਪਡੇਟ</translation>
+<translation id="7190921792980745354">ਕੀ <ph name="MEMBER_FULL_NAME" /> ਨੂੰ ਬਲਾਕ ਕਰਨਾ ਹੈ?</translation>
 <translation id="7191063546666816478">ਕੁਝ ਸਮਰਥਿਤ ਲਿੰਕ ਹਾਲੇ ਵੀ <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ਅਤੇ <ph name="NUMBER_OF_OTHER_APPS" /> ਹੋਰ ਐਪਾਂ ਵਿੱਚ ਖੁੱਲ੍ਹਣਗੇ।</translation>
 <translation id="7191159667348037">ਅਗਿਆਤ ਪ੍ਰਿੰਟਰ (USB)</translation>
 <translation id="7191631508323321927">ਗਲਿਆਰਾ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 43df630..c0e41dd 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -7185,6 +7185,7 @@
 <translation id="6122831415929794347">Wyłączyć Bezpieczne przeglądanie?</translation>
 <translation id="6124650939968185064">To rozszerzenie jest wymagane przez następujące rozszerzenia:</translation>
 <translation id="6124698108608891449">Ta strona potrzebuje większych uprawnień.</translation>
+<translation id="6125202119952209826">Dołącz do grupy kart, w której jest już <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Musisz jeszcze raz dodać swoje konto na tym urządzeniu <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Księżyc</translation>
 <translation id="6126601353087978360">Wpisz swoją opinię tutaj:</translation>
@@ -7839,6 +7840,7 @@
 <translation id="6607831829715835317">Więcej narzę&amp;dzi</translation>
 <translation id="6607890859198268021">Konto <ph name="USER_EMAIL" /> jest już zarządzane przez domenę <ph name="DOMAIN" />. Aby korzystać z kontroli rodzicielskiej na innym koncie Google, wyloguj się po konfiguracji, a potem wybierz „Dodaj osobę” na ekranie logowania.</translation>
 <translation id="6608166463665411119">Zresetuj kartę eSIM</translation>
+<translation id="660846213831377756">Klawisze myszy</translation>
 <translation id="6608773371844092260">Aby skonfigurować odcisk palca, poproś dziecko, aby dotknęło czytnika linii papilarnych po prawej stronie tego urządzenia <ph name="DEVICE_TYPE" />. Odciski palców Twojego dziecka są przechowywane w bezpieczny sposób i wyłącznie na tym urządzeniu <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Dane logowania pozostaną zapisane na tym urządzeniu po wyjściu z trybu incognito. Da Ci to później możliwość zalogowania się w witrynie za pomocą tego urządzenia.</translation>
 <translation id="6610002944194042868">Opcje tłumaczenia</translation>
@@ -8643,6 +8645,7 @@
 <translation id="7189451821249468368">Nie masz wystarczającej liczby licencji, by zarejestrować to urządzenie. Aby dokupić licencje, skontaktuj się z działem sprzedaży. Jeśli uważasz, że widzisz tę wiadomość z powodu błędu, skontaktuj się z zespołem pomocy.</translation>
 <translation id="7189965711416741966">Odcisk palca dodany.</translation>
 <translation id="7190883804815364931">Ostatnia aktualizacja tej karty</translation>
+<translation id="7190921792980745354">Zablokować użytkownika <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Niektóre obsługiwane linki nadal będą się otwierać w aplikacjach <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> i <ph name="NUMBER_OF_OTHER_APPS" /> innych.</translation>
 <translation id="7191159667348037">Nieznana drukarka (USB)</translation>
 <translation id="7191631508323321927">Korytarz</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 7ab4e06..ac8d5b95 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1461,7 +1461,7 @@
 <translation id="199191324030140441">Desativar o Não perturbe</translation>
 <translation id="1992397118740194946">Não definido</translation>
 <translation id="1994173015038366702">URL do site</translation>
-<translation id="1995916364271252349">Controla quais informações os sites podem usar e mostrar (local, câmera, pop-ups, entre outros)</translation>
+<translation id="1995916364271252349">Controla quais informações os sites podem usar e mostrar (local, câmera, pop-ups, entre outras)</translation>
 <translation id="199610894463449797">{0,plural, =1{Fechar este perfil}one{Fechar este perfil (# janela)}other{Fechar este perfil (# janelas)}}</translation>
 <translation id="1997433994358798851">O Chrome precisa de permissão para usar o Bluetooth para se conectar ao dispositivo</translation>
 <translation id="1997616988432401742">Seus certificados</translation>
@@ -3326,7 +3326,7 @@
 <translation id="3319306431415395200">Traduzir texto na imagem com o <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="3319863571062685443">Seu endereço foi salvo</translation>
 <translation id="3320271870899888245">Não é possível se conectar ao OneDrive. Tente de novo.</translation>
-<translation id="3320630259304269485">"Navegação segura" (proteção contra sites perigosos) e outras configurações de segurança</translation>
+<translation id="3320630259304269485">Navegação segura (proteção contra sites perigosos) e outras configurações de segurança</translation>
 <translation id="3320957378743864387">Não pode oferecer ajuda para escrever</translation>
 <translation id="3321460131042519426">Ativar quebra de palavra</translation>
 <translation id="3321494112580110651">Sua impressora não está listada?</translation>
@@ -4157,7 +4157,7 @@
 <translation id="3877209288227498506">Escolha mostrar o uso da memória e as imagens no card de visualização ao passar o cursor sobre a guia</translation>
 <translation id="3878445208930547646">Não é permitido copiar o conteúdo desse site</translation>
 <translation id="3879748587602334249">Gerenciador de downloads</translation>
-<translation id="3880513902716032002">Algumas das páginas que você visita serão pré-carregadas.</translation>
+<translation id="3880513902716032002">Algumas das páginas que você visita são pré-carregadas.</translation>
 <translation id="3884152383786131369">Conteúdos da Web disponíveis em vários idiomas usarão o primeiro idioma compatível desta lista. Estas preferências são sincronizadas com as configurações do navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Saiba mais<ph name="END_LINK_LEARN_MORE" /></translation>
 <translation id="3885112598747515383">As atualizações são gerenciadas pelo administrador</translation>
 <translation id="3887022758415973389">Mostrar a lista de dispositivos</translation>
@@ -4921,7 +4921,7 @@
 <translation id="4432621511648257259">Senha incorreta</translation>
 <translation id="4434611816075088065">Não há mais nada que precise da sua atenção no momento</translation>
 <translation id="443475966875174318">Atualizar ou remover aplicativos incompatíveis</translation>
-<translation id="443503224864902151">Desconecta você da maioria dos sites. Sua Conta do Google continuará conectada para que possa excluir seus dados sincronizados.</translation>
+<translation id="443503224864902151">Desconecta você da maioria dos sites. Sua Conta do Google continuará conectada para que seja possível excluir seus dados sincronizados.</translation>
 <translation id="4437879751057074691">Oferecer para salvar senhas e chaves de acesso</translation>
 <translation id="4437947179446780764">Adicionar provedor de serviços de DNS personalizado</translation>
 <translation id="4438043733494739848">Transparente</translation>
@@ -7223,6 +7223,7 @@
 <translation id="6122831415929794347">Desativar a Navegação segura?</translation>
 <translation id="6124650939968185064">As extensões a seguir dependem desta extensão:</translation>
 <translation id="6124698108608891449">Este site precisa de outras permissões.</translation>
+<translation id="6125202119952209826">Participe do grupo de guias com <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Adicione sua conta a esse <ph name="DEVICE_TYPE" /> novamente.</translation>
 <translation id="6125639926370653692">Lua</translation>
 <translation id="6126601353087978360">Digite seu feedback aqui:</translation>
@@ -7406,7 +7407,7 @@
 <translation id="6249200942125593849">Gerenciar recursos de acessibilidade</translation>
 <translation id="6250186368828697007">Os detalhes são ocultados quando você compartilha a tela</translation>
 <translation id="6251870443722440887">Processamentos de GDI</translation>
-<translation id="6251924700383757765">Política de Privacidade</translation>
+<translation id="6251924700383757765">Política de privacidade</translation>
 <translation id="625369703868467034">Integridade da rede</translation>
 <translation id="6253801023880399036">As senhas estão salvas no <ph name="GOOGLE_PASSWORD_MANAGER" />.</translation>
 <translation id="6254503684448816922">Compromisso da chave</translation>
@@ -7875,6 +7876,7 @@
 <translation id="6607831829715835317">Mais ferramen&amp;tas</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> já é gerenciado por <ph name="DOMAIN" />. Para usar o controle dos pais com uma Conta do Google diferente, saia da conta depois da configuração e selecione "Adicionar pessoa" na tela de login.</translation>
 <translation id="6608166463665411119">Redefinir eSIM</translation>
+<translation id="660846213831377756">Teclas do mouse</translation>
 <translation id="6608773371844092260">Para configurar a impressão digital, peça para a criança tocar no sensor no lado direito do <ph name="DEVICE_TYPE" />. Os dados de impressão digital dela são armazenados de forma segura e nunca saem do <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Depois que você sair do modo de navegação anônima, os dados de login serão armazenados no dispositivo. Você poderá usar o dispositivo para fazer login nesse site novamente mais tarde.</translation>
 <translation id="6610002944194042868">Opções de tradução</translation>
@@ -8681,6 +8683,7 @@
 <translation id="7189451821249468368">Você não tem upgrades suficientes para registrar esse dispositivo. Fale com o departamento de vendas para adquirir mais. Se acredita que recebeu esta mensagem por engano, entre em contato com o suporte.</translation>
 <translation id="7189965711416741966">Impressão digital registrada.</translation>
 <translation id="7190883804815364931">Última atualização desta guia</translation>
+<translation id="7190921792980745354">Bloquear <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Alguns links com suporte ainda serão abertos no app <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> e em <ph name="NUMBER_OF_OTHER_APPS" /> outros apps.</translation>
 <translation id="7191159667348037">Impressora desconhecida (USB)</translation>
 <translation id="7191631508323321927">Corredor</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 0890bcef..52b1596e 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -7210,6 +7210,7 @@
 <translation id="6122831415929794347">Desativar a Navegação segura?</translation>
 <translation id="6124650939968185064">As seguintes extensões dependem desta extensão:</translation>
 <translation id="6124698108608891449">Este site precisa de mais autorizações.</translation>
+<translation id="6125202119952209826">Adira ao grupo de separadores com <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Infelizmente, tem de adicionar novamente a sua conta a este <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Lua</translation>
 <translation id="6126601353087978360">Introduza o seu feedback aqui:</translation>
@@ -7860,6 +7861,7 @@
 <translation id="6607831829715835317">Mais ferrament&amp;as</translation>
 <translation id="6607890859198268021">O endereço <ph name="USER_EMAIL" /> já está a ser gerido pelo domínio <ph name="DOMAIN" />. Para utilizar o controlo parental com uma Conta Google diferente, termine sessão após a configuração e, em seguida, selecione "Adicionar pessoa" no ecrã de início de sessão.</translation>
 <translation id="6608166463665411119">Repor eSIM</translation>
+<translation id="660846213831377756">Teclas do rato</translation>
 <translation id="6608773371844092260">Para configurar a impressão digital, peça à criança para tocar no sensor de impressões digitais no lado direito deste dispositivo <ph name="DEVICE_TYPE" />. Os dados de impressões digitais da criança são armazenados em segurança e nunca saem do <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Os dados de início de sessão são armazenados neste dispositivo depois de sair do Modo de navegação anónima. Poderá iniciar sessão neste Website com o seu dispositivo novamente mais tarde.</translation>
 <translation id="6610002944194042868">Opções de tradução</translation>
@@ -8666,6 +8668,7 @@
 <translation id="7189451821249468368">Não tem atualizações suficientes para inscrever este dispositivo. Entre em contacto com as vendas para comprar mais. Se considera que recebeu esta mensagem por engano, contacte o apoio técnico.</translation>
 <translation id="7189965711416741966">Impressão digital adicionada.</translation>
 <translation id="7190883804815364931">Atualização mais recente relativa a este separador</translation>
+<translation id="7190921792980745354">Quer bloquear <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Alguns links suportados continuarão a ser abertos nas apps <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> e mais <ph name="NUMBER_OF_OTHER_APPS" /> apps.</translation>
 <translation id="7191159667348037">Impressora desconhecida (USB)</translation>
 <translation id="7191631508323321927">Corredor</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 380eec46..fb5bed6a 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -4006,7 +4006,7 @@
 <translation id="3794792524918736965">Activează Windows Hello</translation>
 <translation id="379509625511193653">Dezactivat</translation>
 <translation id="3796215473395753611">alt + săgeată în sus</translation>
-<translation id="3796421550129770366"><ph name="LANGUAGE" />, folosește tasta săgeată spre dreapta pentru a previzualiza vocea</translation>
+<translation id="3796421550129770366"><ph name="LANGUAGE" />, folosește tasta săgeată spre dreapta pentru a asculta o mostră a vocii selectate</translation>
 <translation id="3796648294839530037">Rețele preferate:</translation>
 <translation id="3797739167230984533"><ph name="BEGIN_LINK" /><ph name="DEVICE_TYPE" /> este gestionat<ph name="END_LINK" /> de organizația ta</translation>
 <translation id="3797900183766075808">&amp;Caută „<ph name="SEARCH_TERMS" />” pe <ph name="SEARCH_ENGINE" /></translation>
@@ -7206,6 +7206,7 @@
 <translation id="6122831415929794347">Dezactivezi Navigarea sigură?</translation>
 <translation id="6124650939968185064">De această extensie depind următoarele extensii:</translation>
 <translation id="6124698108608891449">Acest site are nevoie de mai multe permisiuni.</translation>
+<translation id="6125202119952209826">Alătură-te grupului de file cu <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Din păcate, va trebui să îți adaugi din nou contul pe acest dispozitiv <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Lună</translation>
 <translation id="6126601353087978360">Introdu feedbackul aici:</translation>
@@ -7858,6 +7859,7 @@
 <translation id="6607831829715835317">Mai multe instru&amp;mente</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> este deja gestionat de <ph name="DOMAIN" />. Pentru a folosi controlul parental cu alt Cont Google, deconectează-te după configurare, apoi selectează „Adaugă o persoană” în ecranul de conectare.</translation>
 <translation id="6608166463665411119">Resetează profilul eSIM</translation>
+<translation id="660846213831377756">Tastele mouse-ului</translation>
 <translation id="6608773371844092260">Pentru a configura amprenta, solicită-i copilului tău să atingă senzorul de amprentă în partea dreaptă a acestui <ph name="DEVICE_TYPE" />. Datele privind amprentele copilului sunt stocate în siguranță și nu părăsesc niciodată dispozitivul <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Datele de conectare vor fi stocate pe acest dispozitiv după ce ieși din modul incognito. Vei putea să te reconectezi la site folosind dispozitivul.</translation>
 <translation id="6610002944194042868">Opțiuni de traducere</translation>
@@ -8664,6 +8666,7 @@
 <translation id="7189451821249468368">Nu deții suficiente upgrade-uri pentru a înscrie acest dispozitiv. Contactează departamentul de vânzări pentru a achiziționa upgrade-uri suplimentare. În cazul în care consideri că acest mesaj este afișat din greșeală, contactează serviciul de asistență.</translation>
 <translation id="7189965711416741966">Amprentă adăugată.</translation>
 <translation id="7190883804815364931">Ultima modificare a acestei file</translation>
+<translation id="7190921792980745354">Blochezi pe <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Unele linkuri acceptate se vor deschide în continuare în <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> și alte <ph name="NUMBER_OF_OTHER_APPS" /> aplicații.</translation>
 <translation id="7191159667348037">Imprimantă necunoscută (USB)</translation>
 <translation id="7191631508323321927">Hol</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 8736a925..40d186e 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -5113,6 +5113,7 @@
 <translation id="4586275095964870617">Не удалось открыть страницу <ph name="URL" /> в альтернативном браузере. Обратитесь к системному администратору.</translation>
 <translation id="4587589328781138893">Сайты</translation>
 <translation id="4588749726511456218">Ускорение прокрутки (<ph name="LINK_BEGIN" />узнать больше<ph name="LINK_END" />)</translation>
+<translation id="4589197033939192905">Похоже, ресурсы <ph name="PASSWORD_DOMAIN" /> и <ph name="DOMAIN" /> связаны. Используйте свой пароль, только если доверяете домену <ph name="DOMAIN" />.</translation>
 <translation id="4589713469967853491">Журналы записаны в каталоге "Скачанные файлы".</translation>
 <translation id="4590785647529325123">Чтобы удалить с устройства историю браузера в режиме инкогнито, закройте все вкладки инкогнито</translation>
 <translation id="459204634473266369">В аккаунте <ph name="PRIMARY_EMAIL" /> нет сохраненных устройств.</translation>
@@ -5618,6 +5619,7 @@
 <translation id="4946998421534856407">Клавиша панели запуска + Стрелка вверх</translation>
 <translation id="4947376546135294974">Данные с сайта, на котором вы находитесь</translation>
 <translation id="4950100687509657457">Создание профиля</translation>
+<translation id="4950360215042327246">[Строка-плейсхолдер]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}one{# файл}few{# файла}many{# файлов}other{# файла}}</translation>
 <translation id="495170559598752135">Действия</translation>
 <translation id="4951966678293618079">Никогда не сохранять пароли для этого сайта</translation>
@@ -5756,6 +5758,7 @@
 <translation id="5061531353537614467">Тундра</translation>
 <translation id="5062930723426326933">Вход не выполнен. Подключитесь к Интернету и повторите попытку.</translation>
 <translation id="5063480226653192405">Использование</translation>
+<translation id="5064921774605267982">Открыть профиль "<ph name="PROFILE_NAME" />". Профилем управляет один из родителей.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Управление безопасным DNS-сервером в настройках Chrome OS</translation>
 <translation id="5066534201484101197">Перемещение между страницами при достижении конца прокрутки</translation>
@@ -7206,6 +7209,7 @@
 <translation id="6122831415929794347">Отключить Безопасный просмотр?</translation>
 <translation id="6124650939968185064">От этих расширений зависят следующие:</translation>
 <translation id="6124698108608891449">Для работы этого сайта требуются дополнительные разрешения.</translation>
+<translation id="6125202119952209826">Присоединитесь к группе, в которой состоит <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Необходимо заново добавить аккаунт на <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Луна</translation>
 <translation id="6126601353087978360">Оставьте отзыв в поле ниже.</translation>
@@ -7413,6 +7417,7 @@
 <translation id="6266984048393265562">Настроить профиль</translation>
 <translation id="6267166720438879315">Выберите сертификат для аутентификации на <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Открыть в приложении <ph name="APP" /></translation>
+<translation id="6269050081341530851">Если закрыть одинаковые вкладки, останется самая старая из них.</translation>
 <translation id="6270309713620950855">Напоминать включить микрофон</translation>
 <translation id="6270391203985052864">Сайты могут запрашивать разрешения на отправку уведомлений</translation>
 <translation id="6270486800167535228">Расширение закреплено. Выберите, чтобы увидеть больше вариантов</translation>
@@ -7861,6 +7866,7 @@
 <translation id="6607831829715835317">Дополнительные инстру&amp;менты</translation>
 <translation id="6607890859198268021">Аккаунт <ph name="USER_EMAIL" /> уже находится в домене <ph name="DOMAIN" />. Чтобы использовать родительский контроль в другом аккаунте Google, выйдите после настройки и на экране входа выберите "Добавить пользователя".</translation>
 <translation id="6608166463665411119">Сбросить eSIM</translation>
+<translation id="660846213831377756">Кнопки мыши</translation>
 <translation id="6608773371844092260">Чтобы настроить разблокировку по отпечатку, попросите ребенка приложить палец к сканеру отпечатков на правой боковой части устройства <ph name="DEVICE_TYPE" />. Данные отпечатков пальцев ребенка надежно защищены и хранятся только на устройстве <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">После выхода из режима инкогнито учетные данные сохранятся на устройстве. Вы сможете снова использовать их на этом сайте в будущем.</translation>
 <translation id="6610002944194042868">Параметры перевода</translation>
@@ -7960,6 +7966,7 @@
 <translation id="6679947539429331601">Скрыть на 12 часов</translation>
 <translation id="6680442031740878064">Доступно: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Скорость речи</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [Строка-плейсхолдер]</translation>
 <translation id="6683022854667115063">Наушники</translation>
 <translation id="6683087162435654533">Восстановить все вкладки</translation>
 <translation id="6683433919380522900">Статус разрешения: "<ph name="PERMISSION_STATE" />"</translation>
@@ -8666,6 +8673,7 @@
 <translation id="7189451821249468368">Недостаточно лицензий для регистрации устройства. Чтобы решить эту проблему, свяжитесь с отделом продаж. Если вы считаете, что произошла ошибка, обратитесь в службу поддержки.</translation>
 <translation id="7189965711416741966">Отпечаток добавлен.</translation>
 <translation id="7190883804815364931">Последнее обновление вкладки</translation>
+<translation id="7190921792980745354">Заблокировать пользователя <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Некоторые поддерживаемые ссылки будут по-прежнему открываться в приложениях "<ph name="APP_NAME" />", "<ph name="APP_NAME_2" />", "<ph name="APP_NAME_3" />" и ещё в нескольких сервисах (<ph name="NUMBER_OF_OTHER_APPS" />).</translation>
 <translation id="7191159667348037">Неизвестный принтер (USB)</translation>
 <translation id="7191631508323321927">Коридор</translation>
@@ -8853,6 +8861,7 @@
 <translation id="7330533963640151632">Настройки функции "<ph name="FEATURE_NAME" />" для устройства пользователя <ph name="USER_NAME" /> с аккаунтом <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">Alt + Стрелка вниз</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Одинаковые вкладки</translation>
 <translation id="7333388112938984914">Загрузка файлов недоступна, когда используется подключение с тарификацией.</translation>
 <translation id="7333669215417470379">Резервное копирование и восстановление приложений и настроек</translation>
 <translation id="7335974957018254119">Для каких языков применяется проверка правописания</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 78d6526..55fa7d1 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -5112,6 +5112,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> වෛකල්පික බ්‍රවුසරයක් තුළ විවෘත කළ නොහැකි විය. ඔබේ පද්ධති පරිපාලකයා සම්බන්ධ කර ගන්න.</translation>
 <translation id="4587589328781138893">අඩවි</translation>
 <translation id="4588749726511456218">අනුචලන ත්වරණය <ph name="LINK_BEGIN" />තව දැන ගන්න<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> සහ <ph name="DOMAIN" /> සම්බන්ධ බව පෙනේ. ඔබ ඔබේ මුරපදය භාවිතා කිරීමට පෙර <ph name="DOMAIN" /> විශ්වාස කරන බව සහතික කර ගන්න.</translation>
 <translation id="4589713469967853491">ලොග බාගැනීම් නාමාවලියට සාර්ථකව ලියන ලදි</translation>
 <translation id="4590785647529325123">ඔබේ උපාංගයෙන් අප්‍රකට බ්‍රවුස් කිරීමේ ඉතිහාසය මැකීමට, සියලු අප්‍රකට පටිති වසන්න</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> වෙත උපාංග කිසිවක් සුරැක නැත</translation>
@@ -5618,6 +5619,7 @@
 <translation id="4946998421534856407">දියත්කරණය + ඉහළ ඊතලය</translation>
 <translation id="4947376546135294974">ඔබ පිවිසෙන අඩවියෙන් දත්ත</translation>
 <translation id="4950100687509657457">පැතිකඩ සාදන්න</translation>
+<translation id="4950360215042327246">[තැන් දරණු තන්තුව]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ගොනුවක්}one{ගොනු #}other{ගොනු #}}</translation>
 <translation id="495170559598752135">ක්‍රියාමාර්ග</translation>
 <translation id="4951966678293618079">මෙම අඩවිය සඳහා කිසිවිටක මුරපද නොසුරකින්න</translation>
@@ -5756,6 +5758,7 @@
 <translation id="5061531353537614467">තුන්ද්‍රා</translation>
 <translation id="5062930723426326933">පිවිසීම අසාර්ථකයි. කරුණාකර අන්තර්ජාලයට සබඳ වී නැවත උත්සහ කරන්න.</translation>
 <translation id="5063480226653192405">භාවිතය</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> පැතිකඩ විවෘත කරන්න. මෙම පැතිකඩ කළමනාකරණය කරනු ලබන්නේ ඔබේ මාපියන් විසිනි.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS සැකසීම් තුළ සුරක්ෂිත DNS කළමනාකරණය කරන්න</translation>
 <translation id="5066534201484101197">පිටු අතර සංචලන කිරීමට උඩින් අනුචලන කරන්න</translation>
@@ -7206,6 +7209,7 @@
 <translation id="6122831415929794347">ආරක්‍ෂිත බ්‍රවුස් කිරීම අක්‍රිය කරන්නේද?</translation>
 <translation id="6124650939968185064">පහත දිගු මෙම දිගුව මත රඳා පවතී:</translation>
 <translation id="6124698108608891449">මෙම වෙබ් අඩවියට තවත් අවසර අවශ්‍යයි.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> සමග පටිති සමූහයට එකතු වන්න</translation>
 <translation id="6125479973208104919">අවාසනාවකට, ඔබ ඔබේ ගිණුම නැවත මෙම <ph name="DEVICE_TYPE" /> වෙත එක් කිරීම අවශ්‍ය වනු ඇත.</translation>
 <translation id="6125639926370653692">සඳ</translation>
 <translation id="6126601353087978360">කරුණාකර ඔබගේ ප්‍රතිපෝෂණය මෙහි ඇතුළු කරන්න:</translation>
@@ -7413,6 +7417,7 @@
 <translation id="6266984048393265562">පැතිකඩ අභිරුචි කරන්න</translation>
 <translation id="6267166720438879315"><ph name="HOST_NAME" /> වෙත ඔබව සත්‍යාපනය කිරීමට සහතිකයක් තෝරන්න</translation>
 <translation id="6268252012308737255"><ph name="APP" /> සමගින් විවෘත කරන්න</translation>
+<translation id="6269050081341530851">ඔබ අනුපත් වසා දැමූ විට තබා ඇති පැරණිතම පිටපත</translation>
 <translation id="6270309713620950855">පෙළඹවීම නිහඬ කරන්න</translation>
 <translation id="6270391203985052864">වෙබ් අඩවිවලට දැනුම්දීම් යැවීමට ඉල්ලිය හැක</translation>
 <translation id="6270486800167535228">දිගුව අමුණා ඇත. තවත් විකල්ප බැලීමට තෝරන්න</translation>
@@ -7855,6 +7860,7 @@
 <translation id="6607831829715835317">තව මෙවලම්</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> දැනටමත් <ph name="DOMAIN" /> මගින් කළමනාකරණය කෙරේ. වෙනත් Google ගිණුමක් සමඟ මාපිය පාලන භාවිත කිරීමට, පිහිටුවීමෙන් පසු වරන්න, ඉන්පසු පිරීමේ තිරයේ "පුද්ගලයා එක් කරන්න" තෝරන්න.</translation>
 <translation id="6608166463665411119">eSIM යළි සකසන්න</translation>
+<translation id="660846213831377756">මූසික යතුරු</translation>
 <translation id="6608773371844092260">ඇඟිලි සලකුණ පිහිටුවීම සඳහා, ඔබේ දරුවාට මෙම <ph name="DEVICE_TYPE" /> හි දකුණු පස ඇති ඇඟිලි සලකුණු සංවේදකය ස්පර්ශ කිරීමට සලස්වන්න. ඔබේ දරුවාගේ ඇඟිලි සලකුණු දත්ත ආරක්ෂිතව ගබඩා කෙරෙන අතර කිසි විටක ඔබේ <ph name="DEVICE_TYPE" /> හැර නොයයි.</translation>
 <translation id="6609478180749378879">ඔබ අප්‍රසිද්ධ ප්‍රකාරයෙන් පිට වූ පසු පුරන දත්ත මෙම උපාංගය තුළ ගබඩා කරනු ඇත. ඔබට ඔබගේ උපාංගය සමඟ නැවත මෙම වෙබ් අඩවියට පිරීමට හැකි වනු ඇත.</translation>
 <translation id="6610002944194042868">පරිවර්තන විකල්ප</translation>
@@ -7954,6 +7960,7 @@
 <translation id="6679947539429331601">පැය 12ක් සඟවන්න</translation>
 <translation id="6680442031740878064">ලබා ගත හැකි: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">ඇගයීම</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [තැන් දරණු තන්තුව]</translation>
 <translation id="6683022854667115063">හෙඩ්ෆෝන්</translation>
 <translation id="6683087162435654533">සියලු ටැබ ප්‍රතිසාධනය කරන්න</translation>
 <translation id="6683433919380522900">අවසරය වන්නේ <ph name="PERMISSION_STATE" /></translation>
@@ -8659,6 +8666,7 @@
 <translation id="7189451821249468368">මෙම උපාංගය ඇතුළත් කිරීමට ඔබට ප්‍රමාණවත් තරම් උත්ශ්‍රේණි කිරීම් නොමැත. තව මිල දී ගැනීමට විකුණුම් සම්බන්ධ කර ගන්න. ඔබ මෙම පණිවිඩය වැරදීමකින් දකින බව විශ්වාස කරන්නේ නම්, සහාය සම්බන්ධ කර ගන්න.</translation>
 <translation id="7189965711416741966">ඇඟිලි සලකුණ එක් කරන ලදි!</translation>
 <translation id="7190883804815364931">මෙම පටිත්තට අවසන් යාවත්කාලීන කිරීම</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> අවහිර කරන්න ද?</translation>
 <translation id="7191063546666816478">සමහර සහාය දක්වන සබැඳි තවම <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> සහ තවත් යෙදුම් <ph name="NUMBER_OF_OTHER_APPS" />ක් තුළ විවෘතව තිබෙනු ඇත.</translation>
 <translation id="7191159667348037">නොදන්නා මුද්‍රකය (USB)</translation>
 <translation id="7191631508323321927">සාලය</translation>
@@ -8846,6 +8854,7 @@
 <translation id="7330533963640151632"><ph name="USER_EMAIL" /> ගිණුම යටතේ බෙදා ගන්නා, <ph name="USER_NAME" />ගේ උපාංගය සඳහා <ph name="FEATURE_NAME" /> සැකසීම්.</translation>
 <translation id="7331646370422660166">alt + පහළට ඊතලය</translation>
 <translation id="7332053360324989309">කැප වූ සේවකයා: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">අනුපිටපත් පටිති</translation>
 <translation id="7333388112938984914">මනුගත සම්බන්ධතාවක සිටින අතරේ ගොනු උඩුගත කළ නොහැක.</translation>
 <translation id="7333669215417470379">ඔබේ යෙදුම් සහ සැකසීම් උපස්ථ කර ප්‍රතිසාධනය කරන්න</translation>
 <translation id="7335974957018254119">මෙය සඳහා අක්‍ෂර වින්‍යාස පරීක්‍ෂාව භාවිත කරන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 4786cc4..738273e 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -7208,6 +7208,7 @@
 <translation id="6122831415929794347">Chcete vypnúť Bezpečné prehliadanie?</translation>
 <translation id="6124650939968185064">Od tohto rozšírenia závisia nasledujúce rozšírenia:</translation>
 <translation id="6124698108608891449">Tento web potrebuje ďalšie povolenia.</translation>
+<translation id="6125202119952209826">Pripojte sa ku skupine kariet s používateľom <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Do tohto zariadenia <ph name="DEVICE_TYPE" /> si žiaľ budete musieť znova pridať účet.</translation>
 <translation id="6125639926370653692">Mesiac</translation>
 <translation id="6126601353087978360">Tu zadajte spätnú väzbu:</translation>
@@ -7862,6 +7863,7 @@
 <translation id="6607831829715835317">Ďalšie nástro&amp;je</translation>
 <translation id="6607890859198268021">Účet <ph name="USER_EMAIL" /> je už spravovaný doménou <ph name="DOMAIN" />. Ak chcete používať rodičovskú kontrolu s iným účtom Google, po nastavení sa odhláste a potom na prihlasovacej obrazovke vyberte Pridať osobu.</translation>
 <translation id="6608166463665411119">Resetovať eSIM</translation>
+<translation id="660846213831377756">Klávesy myši</translation>
 <translation id="6608773371844092260">Ak chcete nastaviť odtlačok prsta, vaše dieťa sa musí dotknúť senzora odtlačkov prstov na pravej strane tohto zariadenia <ph name="DEVICE_TYPE" />. Údaje odtlačkov prstov vášho dieťaťa sa bezpečne uložia a nikdy neopustia toto zariadenie (<ph name="DEVICE_TYPE" />).</translation>
 <translation id="6609478180749378879">Keď opustíte anonymný režim, budú prihlasovacie údaje uložené v tomto zariadení. Neskôr sa budete môcť znova prihlásiť na tento web pomocou svojho zariadenia.</translation>
 <translation id="6610002944194042868">Možnosti prekladu</translation>
@@ -8668,6 +8670,7 @@
 <translation id="7189451821249468368">Nemáte dostatočný počet inovácií na registráciu tohto zariadenia. Kontaktujte obchodné oddelenie a kúpte si ďalšie. Ak sa domnievate, že ide o chybu, kontaktujte podporu.</translation>
 <translation id="7189965711416741966">Odtlačok prsta bol pridaný.</translation>
 <translation id="7190883804815364931">Posledná aktualizácia tejto karty</translation>
+<translation id="7190921792980745354">Chcete zablokovať používateľa <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Niektoré podporované odkazy sa budú stále otvárať v aplikáciách <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> a <ph name="NUMBER_OF_OTHER_APPS" /> ďalších aplikáciách</translation>
 <translation id="7191159667348037">Neznáma tlačiareň (USB)</translation>
 <translation id="7191631508323321927">Chodba</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index f437b3a..46fdb5c6 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -7226,6 +7226,7 @@
 <translation id="6122831415929794347">Želite izklopiti varno brskanje?</translation>
 <translation id="6124650939968185064">Od te razširitve so odvisne naslednje razširitve:</translation>
 <translation id="6124698108608891449">To spletno mesto potrebuje več dovoljenj.</translation>
+<translation id="6125202119952209826">Pridružite se skupini zavihkov z osebo <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">V napravi <ph name="DEVICE_TYPE" /> boste morali znova dodati račun.</translation>
 <translation id="6125639926370653692">Luna</translation>
 <translation id="6126601353087978360">Tukaj vnesite povratne informacije:</translation>
@@ -7882,6 +7883,7 @@
 <translation id="6607831829715835317">Več orodij</translation>
 <translation id="6607890859198268021">Račun <ph name="USER_EMAIL" /> že upravlja <ph name="DOMAIN" />. Če želite uporabiti starševski nadzor v drugem računu Google, se po nastavitvi odjavite, nato na zaslonu za prijavo izberite »Dodajanje osebe«.</translation>
 <translation id="6608166463665411119">Ponastavi kartico e-SIM</translation>
+<translation id="660846213831377756">Tipke miške</translation>
 <translation id="6608773371844092260">Če želite nastaviti prstni odtis, naj se otrok dotakne tipala prstnih odtisov na desni strani te naprave <ph name="DEVICE_TYPE" />. Podatki o prstnih odtisih otroka so varno shranjeni in nikoli ne zapustijo naprave <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Podatki za prijavo se bodo shranili v tej napravi, ko zaprete anonimni način. Pozneje se boste lahko z napravo znova prijavili v to spletno mesto.</translation>
 <translation id="6610002944194042868">Možnosti prevajanja</translation>
@@ -8688,6 +8690,7 @@
 <translation id="7189451821249468368">Nimate dovolj nadgradenj za včlanitev te naprave. Obrnite se na prodajni oddelek za nakup dodatnih. Če menite, da ste to sporočilo prejeli pomotoma, se obrnite na podporo.</translation>
 <translation id="7189965711416741966">Prstni odtis dodan.</translation>
 <translation id="7190883804815364931">Zadnja posodobitev tega zavihka</translation>
+<translation id="7190921792980745354">Želite blokirati člana <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Nekatere podprte povezave se bodo še vedno odprle v aplikacijah <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> in še toliko drugih aplikacijah: <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Neznan tiskalnik (USB)</translation>
 <translation id="7191631508323321927">Hodnik</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 7f63154c..b63580b 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -5107,6 +5107,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> nuk mund të hapej në një shfletues alternativ. Kontakto me administratorin e sistemit.</translation>
 <translation id="4587589328781138893">Sajtet</translation>
 <translation id="4588749726511456218">Përshpejtimi i lëvizjes <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Me sa duket <ph name="PASSWORD_DOMAIN" /> dhe <ph name="DOMAIN" /> janë të lidhura. Sigurohu që i beson <ph name="DOMAIN" /> përpara se të përdorësh fjalëkalimin tënd.</translation>
 <translation id="4589713469967853491">Evidencat janë shkruar me sukses te direktoria "Shkarkimet".</translation>
 <translation id="4590785647529325123">Për të fshirë historikun e shfletimit në modalitetin "I fshehtë" nga pajisja jote, mbylli të gjitha skedat e fshehta</translation>
 <translation id="459204634473266369">Nuk u ruajt asnjë pajisje te <ph name="PRIMARY_EMAIL" /></translation>
@@ -5612,6 +5613,7 @@
 <translation id="4946998421534856407">nisësi + shigjeta lart</translation>
 <translation id="4947376546135294974">Të dhënat nga sajti që po viziton</translation>
 <translation id="4950100687509657457">Krijo një profil</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{një skedar}other{# skedarë}}</translation>
 <translation id="495170559598752135">Veprimet</translation>
 <translation id="4951966678293618079">Mos i ruaj asnjëherë fjalëkalimet për këtë sajt</translation>
@@ -5750,6 +5752,7 @@
 <translation id="5061531353537614467">Tundër</translation>
 <translation id="5062930723426326933">Identifikimi dështoi. Lidhu me internetin dhe provo sërish.</translation>
 <translation id="5063480226653192405">Përdorimi</translation>
+<translation id="5064921774605267982">Hap profilin e <ph name="PROFILE_NAME" />. Ky profil menaxhohet nga prindi yt.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Menaxho DNS-në e sigurt te cilësimet e ChromeOS</translation>
 <translation id="5066534201484101197">Lëviz përtej pikës fundore për të naviguar mes faqeve</translation>
@@ -7199,6 +7202,7 @@
 <translation id="6122831415929794347">Të çaktivizohet "Shfletimi i sigurt"?</translation>
 <translation id="6124650939968185064">Shtesat vijuese varen nga kjo shtesë:</translation>
 <translation id="6124698108608891449">Ky sajt ka nevojë për më shumë autorizime.</translation>
+<translation id="6125202119952209826">Bashkohu në grupin e skedave me <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Fatkeqësisht, do të duhet të shtosh përsëri llogarinë tënde në këtë pajisje <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Hëna</translation>
 <translation id="6126601353087978360">Shkruaji këtu komentet e tua:</translation>
@@ -7406,6 +7410,7 @@
 <translation id="6266984048393265562">Personalizo profilin</translation>
 <translation id="6267166720438879315">Zgjidh një certifikatë për të verifikuar veten te <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Hape me <ph name="APP" /></translation>
+<translation id="6269050081341530851">Kopja më e vjetër e mbajtur kur ti mbyll dublikatat</translation>
 <translation id="6270309713620950855">Shtyrja e vendosjes në heshtje</translation>
 <translation id="6270391203985052864">Sajtet mund të kërkojnë të dërgojnë njoftime</translation>
 <translation id="6270486800167535228">Shtesa është gozhduar. Zgjidh që të shikosh më shumë opsione</translation>
@@ -7848,6 +7853,7 @@
 <translation id="6607831829715835317">Vegla të tj&amp;era</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> po menaxhohet tashmë nga <ph name="DOMAIN" />. Për t'i përdorur kontrollet prindërore me një "Llogari tjetër të Google", dil pas konfigurimit dhe më pas zgjidh "Shto një person" në ekranin e identifikimit.</translation>
 <translation id="6608166463665411119">Rivendos kartën eSIM</translation>
+<translation id="660846213831377756">Butonat e miut</translation>
 <translation id="6608773371844092260">Për të konfiguruar gjurmën e gishtit, vëre fëmijën tënd të prekë sensorin e gjurmës së gishtit në anën e djathtë të kësaj pajisjeje <ph name="DEVICE_TYPE" />. Të dhënat e gjurmës së gishtit të fëmijës tënd ruhen në mënyrë të sigurt dhe nuk largohen kurrë nga kjo pajisje <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Të dhënat e identifikimit do të ruhen në këtë pajisje pasi të dalësh nga modaliteti "I fshehtë". Do të mund të identifikohesh në këtë faqe interneti me pajisjen tënde përsëri.</translation>
 <translation id="6610002944194042868">Opsionet e "Përkthe"</translation>
@@ -7947,6 +7953,7 @@
 <translation id="6679947539429331601">Fshihe për 12 orë</translation>
 <translation id="6680442031740878064">Në dispozicion: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Shpejtësia</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">Kufje</translation>
 <translation id="6683087162435654533">R&amp;estauro të gjitha skedat</translation>
 <translation id="6683433919380522900">Leja është "<ph name="PERMISSION_STATE" />"</translation>
@@ -8652,6 +8659,7 @@
 <translation id="7189451821249468368">Nuk ke përmirësime të mjaftueshme për të regjistruar këtë pajisje. Kontakto me ekipin e shitjeve për të blerë më shumë. Nëse beson se po e shikon gabimisht këtë mesazh, kontakto me ekipin e mbështetjes.</translation>
 <translation id="7189965711416741966">Gjurma e gishtit u shtua.</translation>
 <translation id="7190883804815364931">Përditësimi i fundit për këtë skedë</translation>
+<translation id="7190921792980745354">Të bllokohet <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Disa lidhje të mbështetura do të vazhdojnë të hapen në <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> dhe <ph name="NUMBER_OF_OTHER_APPS" /> aplikacione të tjera.</translation>
 <translation id="7191159667348037">Printer i panjohur (USB)</translation>
 <translation id="7191631508323321927">Korridor</translation>
@@ -8839,6 +8847,7 @@
 <translation id="7330533963640151632">Cilësimet e "<ph name="FEATURE_NAME" />" për pajisjen e <ph name="USER_NAME" />, e cila ndan duke përdorur llogarinë <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + shigjeta poshtë</translation>
 <translation id="7332053360324989309">Procesi i posaçëm i punës: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Skedat dublikatë</translation>
 <translation id="7333388112938984914">Nuk mund të ngarkosh skedarë ndërsa ke një lidhje me matje.</translation>
 <translation id="7333669215417470379">Rezervo dhe restauro aplikacionet dhe cilësimet e tua</translation>
 <translation id="7335974957018254119">Përdor kontrollin drejtshkrimor për</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index d09778c..1334f01 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -2864,6 +2864,7 @@
 <translation id="2981113813906970160">Prikaži veliki kursor</translation>
 <translation id="2983102365694924129">Na osnovu vaše aktivnosti na sajtu. Ovo podešavanje je isključeno.</translation>
 <translation id="2983373101216420412">Nivo napunjenosti baterije futrole <ph name="PERCENTAGE" />%.</translation>
+<translation id="2984384421572259426">Obriši kartice koje se ne koriste</translation>
 <translation id="2984727013951557074">Fajl se još uvek sinhronizuje sa Diskom.</translation>
 <translation id="2985348301114641460">Želite li da pošaljete zahtev administratoru da instalira „<ph name="EXTENSION_NAME" />“?</translation>
 <translation id="2985476671756533899">{NUM_SUB_APPS,plural, =1{Aplikacija <ph name="APP_NAME" /> je deinstalirala aplikaciju}one{Aplikacija <ph name="APP_NAME" /> je deinstalirala # aplikaciju}few{Aplikacija <ph name="APP_NAME" /> je deinstalirala # aplikacije}other{Aplikacija <ph name="APP_NAME" /> je deinstalirala # aplikacija}}</translation>
@@ -4423,6 +4424,7 @@
 <translation id="4072805772816336153">Probajte ponovo kasnije</translation>
 <translation id="4074164314564067597">tastatura</translation>
 <translation id="407520071244661467">Razmera</translation>
+<translation id="4077623680826964850">Vremensko ograničenje je isteklo pri uključivanju ili ponovnom povezivanju sa virtuelnom mašinom.</translation>
 <translation id="4077917118009885966">Oglasi su blokirani na ovom sajtu</translation>
 <translation id="4078738236287221428">Agresivna</translation>
 <translation id="4078903002989614318">Opcije sortiranja i lista</translation>
@@ -4909,6 +4911,7 @@
 <translation id="4437879751057074691">Ponudi čuvanje lozinki i pristupnih ključeva</translation>
 <translation id="4437947179446780764">Dodajte dobavljača usluge prilagođenog DNS-a</translation>
 <translation id="4438043733494739848">Prozirno</translation>
+<translation id="4439157218765614426">Smernice zabranjuju.</translation>
 <translation id="4441124369922430666">Želite li da se ova aplikacija pokreće automatski kada uključite uređaj?</translation>
 <translation id="4441147046941420429">Da biste nastavili, uklonite bezbednosni ključ sa uređaja, pa ga ponovo umetnite i dodirnite</translation>
 <translation id="444134486829715816">Proširi...</translation>
@@ -5365,6 +5368,7 @@
 <translation id="4779083564647765204">Zumiranje</translation>
 <translation id="4779136857077979611">Onigiri</translation>
 <translation id="4779766576531456629">Preimenujte mobilnu mrežu za eSIM</translation>
+<translation id="4779855924282373274"><ph name="URL" /> • 1 duplikat</translation>
 <translation id="4780321648949301421">Sačuvaj stranicu kao...</translation>
 <translation id="4780558987886269159">Za posao</translation>
 <translation id="4785719467058219317">Koristite bezbednosni ključ koji nije registrovan za ovaj veb-sajt</translation>
@@ -5444,6 +5448,7 @@
 <translation id="4833683849865011483">Pronađen je 1 štampač sa servera za štampanje</translation>
 <translation id="4835598628985424375">Napućite usne tako što ćete ih stisnuti zajedno</translation>
 <translation id="4835677468087803981">Sakrij PIN</translation>
+<translation id="4835743726635354518"><ph name="URL" /> • <ph name="DUPLICATE_COUNT" /> duplikata</translation>
 <translation id="4836504898754963407">Upravljajte otiscima prstiju</translation>
 <translation id="4837128290434901661">Želite li da se vratite na Google pretragu?</translation>
 <translation id="4837926214103741331">Nemate ovlašćenje za korišćenje ovog uređaja. Kontaktirajte vlasnika uređaja da biste dobili dozvolu za prijavljivanje.</translation>
@@ -6069,6 +6074,7 @@
 <translation id="528208740344463258">Da biste preuzeli i koristili Android aplikacije, prvo treba da instalirate ovo obavezno ažuriranje. Dok se <ph name="DEVICE_TYPE" /> ažurira, ne možete da ga koristite. Kad se instalacija dovrši, <ph name="DEVICE_TYPE" /> će se restartovati.</translation>
 <translation id="5283677936944177147">Ups! Sistem nije uspeo da odredi model uređaja ili serijski broj.</translation>
 <translation id="5284445933715251131">Nastavi preuzimanje</translation>
+<translation id="5285484405698525101">Trenutno nema kartica koje se ne koriste</translation>
 <translation id="5285635972691565180">Ekran <ph name="DISPLAY_ID" /></translation>
 <translation id="5286194356314741248">Skeniranje</translation>
 <translation id="5287425679749926365">Nalozi</translation>
@@ -6341,6 +6347,7 @@
 <translation id="5481941284378890518">Dodaj obližnje štampače</translation>
 <translation id="5482417738572414119">Prijavite se da biste omogućili Chrome-u da predlaže grupe kartica i organizuje kartice</translation>
 <translation id="5483005706243021437">Ostani ovde</translation>
+<translation id="5483112456833117221">{NUM_TABS,plural, =0{Nema kartica koje se ne koriste}=1{Pregledajte 1 karticu koja se ne koristi}one{Pregledajte # karticu koja se ne koristi}few{Pregledajte # kartice koje se ne koriste}other{Pregledajte # kartica koje se ne koriste}}</translation>
 <translation id="5484772771923374861">{NUM_DAYS,plural, =1{<ph name="MANAGER" /> zahteva da napravite rezervnu kopiju podataka i da vratite ovaj <ph name="DEVICE_TYPE" /> danas. <ph name="LINK_BEGIN" />Pogledajte detalje<ph name="LINK_END" />}one{<ph name="MANAGER" /> zahteva da napravite rezervnu kopiju podataka i da vratite ovaj <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana.<ph name="LINK_BEGIN" />Pogledajte detalje<ph name="LINK_END" />}few{<ph name="MANAGER" /> zahteva da napravite rezervnu kopiju podataka i da vratite ovaj <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana.<ph name="LINK_BEGIN" />Pogledajte detalje<ph name="LINK_END" />}other{<ph name="MANAGER" /> zahteva da napravite rezervnu kopiju podataka i da vratite ovaj <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana.<ph name="LINK_BEGIN" />Pogledajte detalje<ph name="LINK_END" />}}</translation>
 <translation id="5485102783864353244">Dodaj aplikaciju</translation>
 <translation id="5485435764083510385">Željeni jezik titla</translation>
@@ -7022,6 +7029,7 @@
 <translation id="5982578203375898585">Prikaži preuzimanja kada se završe</translation>
 <translation id="5983716913605894570">Generiše se…</translation>
 <translation id="5984222099446776634">Nedavno posećeno</translation>
+<translation id="5984334442529819751">Greška pri instaliranju sadržaja za preuzimanje (često je potrebno restartovanje, više informacija potražite u odeljku Podešavanja\&gt;\&gt;O ChromeOS-u).</translation>
 <translation id="5985458664595100876">Nevažeći format URL-a. Podržani formati su \\server\share i smb://server/share.</translation>
 <translation id="5985556342298151179">Chrome aplikacija koju je instalirao administrator uređaja.</translation>
 <translation id="598810097218913399">Uklonite dodelu</translation>
@@ -7205,6 +7213,7 @@
 <translation id="6122831415929794347">Želite da isključite Bezbednosno pregledanje?</translation>
 <translation id="6124650939968185064">Sledeći dodaci zavise od ovog dodatka:</translation>
 <translation id="6124698108608891449">Ovaj sajt traži još dozvola.</translation>
+<translation id="6125202119952209826">Pridružite se grupi kartica sa korisnikom <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Nažalost, treba ponovo da dodate nalog na ovaj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Mesec</translation>
 <translation id="6126601353087978360">Ovde unesite povratne informacije:</translation>
@@ -7859,6 +7868,7 @@
 <translation id="6607831829715835317">Još a&amp;latki</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> već upravlja nalogom <ph name="USER_EMAIL" />. Da biste koristili roditeljski nadzor pomoću drugog Google naloga odjavite se posle podešavanja, pa izaberite „Dodajte osobu“ na ekranu za prijavljivanje.</translation>
 <translation id="6608166463665411119">Resetuj eSIM</translation>
+<translation id="660846213831377756">Tasteri miša</translation>
 <translation id="6608773371844092260">Da biste podesili otisak prsta, neka dete dodirne senzor za otisak prsta u gornjem desnom uglu ovog <ph name="DEVICE_TYPE" /> uređaja. Podaci o otisku prsta deteta se bezbedno čuvaju na ovom <ph name="DEVICE_TYPE" /> uređaju i uvek ostaju na njemu.</translation>
 <translation id="6609478180749378879">Podaci o prijavljivanju se čuvaju na ovom uređaju kada izađete iz režima bez arhiviranja. Kasnije ćete moći da se ponovo prijavite na ovaj veb-sajt pomoću svog uređaja.</translation>
 <translation id="6610002944194042868">Opcije prevoda</translation>
@@ -8665,6 +8675,7 @@
 <translation id="7189451821249468368">Nemate dovoljno nadogradnji da biste registrovali ovaj uređaj. Obratite se sektoru prodaje da biste kupili još licenci. Ako smatrate da se ova poruka prikazuje greškom, obratite se podršci.</translation>
 <translation id="7189965711416741966">Dodali ste otisak prsta.</translation>
 <translation id="7190883804815364931">Poslednja promena ove kartice</translation>
+<translation id="7190921792980745354">Želite da blokirate korisnika <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Neki podržani linkovi će se i dalje otvarati u aplikacijama <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> i još <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Nepoznat štampač (USB)</translation>
 <translation id="7191631508323321927">Hodnik</translation>
@@ -9260,6 +9271,7 @@
 <translation id="762917478230183172">Izaberite radnju za svaki taster</translation>
 <translation id="7629206210984165492">Utučeno</translation>
 <translation id="7629827748548208700">Kartica: <ph name="TAB_NAME" /></translation>
+<translation id="7629858978065675960">Nepoznat rezultat.</translation>
 <translation id="7630426712700473382"><ph name="MANAGER" /> upravlja ovim uređajem i zahteva da se prijavite svaki put.</translation>
 <translation id="7631014249255418691">Napravljena je rezervna kopija Linux aplikacija i datoteka</translation>
 <translation id="7631722872321401342">Nema glasova (<ph name="LANGUAGE" />) na uređaju. Glasove možete da instalirate u podešavanjima.</translation>
@@ -9413,6 +9425,7 @@
 <translation id="7723388585204724670">Resetuj na podrazumevani Chrome</translation>
 <translation id="7724603315864178912">Iseci</translation>
 <translation id="7726391492136714301">Pregledajte obaveštenja i aplikacije sa telefona</translation>
+<translation id="7727898923446098954">Kartica je skrivena</translation>
 <translation id="7728465250249629478">Promenite jezik uređaja</translation>
 <translation id="7728570244950051353">Zaključavanje ekrana iz režima spavanja</translation>
 <translation id="7728668285692163452">Promena kanala će biti primenjena kasnije</translation>
@@ -9806,6 +9819,7 @@
 <translation id="7994515119120860317">Prevedi tekst na slici pomoću pretraživača <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="799570308305997052">Veb-prikaz</translation>
 <translation id="7997826902155442747">Prioritet procesa</translation>
+<translation id="7997828719430450286">Uspeli ste.</translation>
 <translation id="7998701048266085837">URL-ovi</translation>
 <translation id="7999229196265990314">Napravljene su sledeće datoteke:
 
@@ -10455,6 +10469,7 @@
 <translation id="845702320058262034">Povezivanje nije uspelo. Proverite da li je Bluetooth na telefonu uključen.</translation>
 <translation id="8457251154056341970">Više nećete videti <ph name="MODULE_NAME" /> na ovoj stranici</translation>
 <translation id="8457451314607652708">Uvezi obeleživače</translation>
+<translation id="8458259704995116343">Pokretanje virtuelne mašine nije uspelo.</translation>
 <translation id="8458341576712814616">Prečica</translation>
 <translation id="8458627787104127436">Otvori sve (<ph name="URL_COUNT" />) u novom prozoru</translation>
 <translation id="8459023460357294721">Ipak otvorite fajl <ph name="FILE_NAME" /></translation>
@@ -11116,12 +11131,14 @@
 <translation id="8918900204934259333">Aplikacija  se instalira…</translation>
 <translation id="891931289445130855">Izbriši podatke i dozvole</translation>
 <translation id="8920133120839850939">Izaberite karticu Još pokreta, pa uključite Listaj stranice da biste se kretali nazad i napred</translation>
+<translation id="8921369299636221117">Usluga portira nije dostupna.</translation>
 <translation id="8922348435910470639">Duplirana rezervacija</translation>
 <translation id="8922624386829239660">Pomeraj ekran kada miš dodiruje ivice ekrana</translation>
 <translation id="8923880975836399332">Tamnotirkizna</translation>
 <translation id="8925124370124776087">Naslovna traka je sada skrivena</translation>
 <translation id="8925458182817574960">&amp;Podešavanja</translation>
 <translation id="8926389886865778422">Ne pitaj me ponovo</translation>
+<translation id="8926555406617248399">Kartice su skrivene</translation>
 <translation id="892706138619340876">Neka podešavanja su resetovana</translation>
 <translation id="8927438609932588163">Dozvolite sajtovima da čuvaju podatke na uređaju</translation>
 <translation id="8929696694736010839">Samo aktuelna sesija bez arhiviranja</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index a63584f..c554e780 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -2864,6 +2864,7 @@
 <translation id="2981113813906970160">Прикажи велики курсор</translation>
 <translation id="2983102365694924129">На основу ваше активности на сајту. Ово подешавање је искључено.</translation>
 <translation id="2983373101216420412">Ниво напуњености батерије футроле <ph name="PERCENTAGE" />%.</translation>
+<translation id="2984384421572259426">Обриши картице које се не користе</translation>
 <translation id="2984727013951557074">Фајл се још увек синхронизује са Диском.</translation>
 <translation id="2985348301114641460">Желите ли да пошаљете захтев администратору да инсталира „<ph name="EXTENSION_NAME" />“?</translation>
 <translation id="2985476671756533899">{NUM_SUB_APPS,plural, =1{Апликација <ph name="APP_NAME" /> је деинсталирала апликацију}one{Апликација <ph name="APP_NAME" /> је деинсталирала # апликацију}few{Апликација <ph name="APP_NAME" /> је деинсталирала # апликације}other{Апликација <ph name="APP_NAME" /> је деинсталирала # апликација}}</translation>
@@ -4423,6 +4424,7 @@
 <translation id="4072805772816336153">Пробајте поново касније</translation>
 <translation id="4074164314564067597">тастатура</translation>
 <translation id="407520071244661467">Размера</translation>
+<translation id="4077623680826964850">Временско ограничење је истекло при укључивању или поновном повезивању са виртуелном машином.</translation>
 <translation id="4077917118009885966">Огласи су блокирани на овом сајту</translation>
 <translation id="4078738236287221428">Агресивна</translation>
 <translation id="4078903002989614318">Опције сортирања и листа</translation>
@@ -4909,6 +4911,7 @@
 <translation id="4437879751057074691">Понуди чување лозинки и приступних кључева</translation>
 <translation id="4437947179446780764">Додајте добављача услуге прилагођеног DNS-а</translation>
 <translation id="4438043733494739848">Прозирно</translation>
+<translation id="4439157218765614426">Смернице забрањују.</translation>
 <translation id="4441124369922430666">Желите ли да се ова апликација покреће аутоматски када укључите уређај?</translation>
 <translation id="4441147046941420429">Да бисте наставили, уклоните безбедносни кључ са уређаја, па га поново уметните и додирните</translation>
 <translation id="444134486829715816">Прошири...</translation>
@@ -5365,6 +5368,7 @@
 <translation id="4779083564647765204">Зумирање</translation>
 <translation id="4779136857077979611">Онигири</translation>
 <translation id="4779766576531456629">Преименујте мобилну мрежу за eSIM</translation>
+<translation id="4779855924282373274"><ph name="URL" /> • 1 дупликат</translation>
 <translation id="4780321648949301421">Сачувај страницу као...</translation>
 <translation id="4780558987886269159">За посао</translation>
 <translation id="4785719467058219317">Користите безбедносни кључ који није регистрован за овај веб-сајт</translation>
@@ -5444,6 +5448,7 @@
 <translation id="4833683849865011483">Пронађен је 1 штампач са сервера за штампање</translation>
 <translation id="4835598628985424375">Напућите усне тако што ћете их стиснути заједно</translation>
 <translation id="4835677468087803981">Сакриј PIN</translation>
+<translation id="4835743726635354518"><ph name="URL" /> • <ph name="DUPLICATE_COUNT" /> дупликата</translation>
 <translation id="4836504898754963407">Управљајте отисцима прстију</translation>
 <translation id="4837128290434901661">Желите ли да се вратите на Google претрагу?</translation>
 <translation id="4837926214103741331">Немате овлашћење за коришћење овог уређаја. Контактирајте власника уређаја да бисте добили дозволу за пријављивање.</translation>
@@ -6069,6 +6074,7 @@
 <translation id="528208740344463258">Да бисте преузели и користили Android апликације, прво треба да инсталирате ово обавезно ажурирање. Док се <ph name="DEVICE_TYPE" /> ажурира, не можете да га користите. Кад се инсталација доврши, <ph name="DEVICE_TYPE" /> ће се рестартовати.</translation>
 <translation id="5283677936944177147">Упс! Систем није успео да одреди модел уређаја или серијски број.</translation>
 <translation id="5284445933715251131">Настави преузимање</translation>
+<translation id="5285484405698525101">Тренутно нема картица које се не користе</translation>
 <translation id="5285635972691565180">Екран <ph name="DISPLAY_ID" /></translation>
 <translation id="5286194356314741248">Скенирање</translation>
 <translation id="5287425679749926365">Налози</translation>
@@ -6341,6 +6347,7 @@
 <translation id="5481941284378890518">Додај оближње штампаче</translation>
 <translation id="5482417738572414119">Пријавите се да бисте омогућили Chrome-у да предлаже групе картица и организује картице</translation>
 <translation id="5483005706243021437">Остани овде</translation>
+<translation id="5483112456833117221">{NUM_TABS,plural, =0{Нема картица које се не користе}=1{Прегледајте 1 картицу која се не користи}one{Прегледајте # картицу која се не користи}few{Прегледајте # картице које се не користе}other{Прегледајте # картица које се не користе}}</translation>
 <translation id="5484772771923374861">{NUM_DAYS,plural, =1{<ph name="MANAGER" /> захтева да направите резервну копију података и да вратите овај <ph name="DEVICE_TYPE" /> данас. <ph name="LINK_BEGIN" />Погледајте детаље<ph name="LINK_END" />}one{<ph name="MANAGER" /> захтева да направите резервну копију података и да вратите овај <ph name="DEVICE_TYPE" /> у року од {NUM_DAYS} данa.<ph name="LINK_BEGIN" />Погледајте детаље<ph name="LINK_END" />}few{<ph name="MANAGER" /> захтева да направите резервну копију података и да вратите овај <ph name="DEVICE_TYPE" /> у року од {NUM_DAYS} данa.<ph name="LINK_BEGIN" />Погледајте детаље<ph name="LINK_END" />}other{<ph name="MANAGER" /> захтева да направите резервну копију података и да вратите овај <ph name="DEVICE_TYPE" /> у року од {NUM_DAYS} данa.<ph name="LINK_BEGIN" />Погледајте детаље<ph name="LINK_END" />}}</translation>
 <translation id="5485102783864353244">Додај апликацију</translation>
 <translation id="5485435764083510385">Жељени језик титла</translation>
@@ -7022,6 +7029,7 @@
 <translation id="5982578203375898585">Прикажи преузимања када се заврше</translation>
 <translation id="5983716913605894570">Генерише се…</translation>
 <translation id="5984222099446776634">Недавно посећено</translation>
+<translation id="5984334442529819751">Грешка при инсталирању садржаја за преузимање (често је потребно рестартовање, више информација потражите у одељку Подешавања\&gt;\&gt;О ChromeOS-у).</translation>
 <translation id="5985458664595100876">Неважећи формат URL-а. Подржани формати су \\server\share и smb://server/share.</translation>
 <translation id="5985556342298151179">Chrome апликација коју је инсталирао администратор уређаја.</translation>
 <translation id="598810097218913399">Уклоните доделу</translation>
@@ -7205,6 +7213,7 @@
 <translation id="6122831415929794347">Желите да искључите Безбедносно прегледање?</translation>
 <translation id="6124650939968185064">Следећи додаци зависе од овог додатка:</translation>
 <translation id="6124698108608891449">Овај сајт тражи још дозвола.</translation>
+<translation id="6125202119952209826">Придружите се групи картица са корисником <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Нажалост, треба поново да додате налог на овај <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Месец</translation>
 <translation id="6126601353087978360">Овде унесите повратне информације:</translation>
@@ -7859,6 +7868,7 @@
 <translation id="6607831829715835317">Још а&amp;латки</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> већ управља налогом <ph name="USER_EMAIL" />. Да бисте користили родитељски надзор помоћу другог Google налога одјавите се после подешавања, па изаберите „Додајте особу“ на екрану за пријављивање.</translation>
 <translation id="6608166463665411119">Ресетуј eSIM</translation>
+<translation id="660846213831377756">Тастери миша</translation>
 <translation id="6608773371844092260">Да бисте подесили отисак прста, нека дете додирне сензор за отисак прста у горњем десном углу овог <ph name="DEVICE_TYPE" /> уређаја. Подаци о отиску прста детета се безбедно чувају на овом <ph name="DEVICE_TYPE" /> уређају и увек остају на њему.</translation>
 <translation id="6609478180749378879">Подаци о пријављивању се чувају на овом уређају када изађете из режима без архивирања. Касније ћете моћи да се поново пријавите на овај веб-сајт помоћу свог уређаја.</translation>
 <translation id="6610002944194042868">Опције превода</translation>
@@ -8665,6 +8675,7 @@
 <translation id="7189451821249468368">Немате довољно надоградњи да бисте регистровали овај уређај. Обратите се сектору продаје да бисте купили још лиценци. Ако сматрате да се ова порука приказује грешком, обратите се подршци.</translation>
 <translation id="7189965711416741966">Додали сте отисак прста.</translation>
 <translation id="7190883804815364931">Последња промена ове картице</translation>
+<translation id="7190921792980745354">Желите да блокирате корисника <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Неки подржани линкови ће се и даље отварати у апликацијама <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> и још <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Непознат штампач (USB)</translation>
 <translation id="7191631508323321927">Ходник</translation>
@@ -9260,6 +9271,7 @@
 <translation id="762917478230183172">Изаберите радњу за сваки тастер</translation>
 <translation id="7629206210984165492">Утучено</translation>
 <translation id="7629827748548208700">Картица: <ph name="TAB_NAME" /></translation>
+<translation id="7629858978065675960">Непознат резултат.</translation>
 <translation id="7630426712700473382"><ph name="MANAGER" /> управља овим уређајем и захтева да се пријавите сваки пут.</translation>
 <translation id="7631014249255418691">Направљена је резервна копија Linux апликација и датотека</translation>
 <translation id="7631722872321401342">Нема гласова (<ph name="LANGUAGE" />) на уређају. Гласове можете да инсталирате у подешавањима.</translation>
@@ -9413,6 +9425,7 @@
 <translation id="7723388585204724670">Ресетуј на подразумевани Chrome</translation>
 <translation id="7724603315864178912">Исеци</translation>
 <translation id="7726391492136714301">Прегледајте обавештења и апликације са телефона</translation>
+<translation id="7727898923446098954">Картица је скривена</translation>
 <translation id="7728465250249629478">Промените језик уређаја</translation>
 <translation id="7728570244950051353">Закључавање екрана из режима спавања</translation>
 <translation id="7728668285692163452">Промена канала ће бити примењена касније</translation>
@@ -9806,6 +9819,7 @@
 <translation id="7994515119120860317">Преведи текст на слици помоћу претраживача <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
 <translation id="799570308305997052">Веб-приказ</translation>
 <translation id="7997826902155442747">Приоритет процеса</translation>
+<translation id="7997828719430450286">Успели сте.</translation>
 <translation id="7998701048266085837">URL-ови</translation>
 <translation id="7999229196265990314">Направљене су следеће датотеке:
 
@@ -10455,6 +10469,7 @@
 <translation id="845702320058262034">Повезивање није успело. Проверите да ли је Bluetooth на телефону укључен.</translation>
 <translation id="8457251154056341970">Више нећете видети <ph name="MODULE_NAME" /> на овој страници</translation>
 <translation id="8457451314607652708">Увези обележиваче</translation>
+<translation id="8458259704995116343">Покретање виртуелне машине није успело.</translation>
 <translation id="8458341576712814616">Пречица</translation>
 <translation id="8458627787104127436">Отвори све (<ph name="URL_COUNT" />) у новом прозору</translation>
 <translation id="8459023460357294721">Ипак отворите фајл <ph name="FILE_NAME" /></translation>
@@ -11116,12 +11131,14 @@
 <translation id="8918900204934259333">Апликација  се инсталира…</translation>
 <translation id="891931289445130855">Избриши податке и дозволе</translation>
 <translation id="8920133120839850939">Изаберите картицу Још покрета, па укључите Листај странице да бисте се кретали назад и напред</translation>
+<translation id="8921369299636221117">Услуга портира није доступна.</translation>
 <translation id="8922348435910470639">Дуплирана резервација</translation>
 <translation id="8922624386829239660">Померај екран када миш додирује ивице екрана</translation>
 <translation id="8923880975836399332">Тамнотиркизна</translation>
 <translation id="8925124370124776087">Насловна трака је сада скривена</translation>
 <translation id="8925458182817574960">&amp;Подешавања</translation>
 <translation id="8926389886865778422">Не питај ме поново</translation>
+<translation id="8926555406617248399">Картице су скривене</translation>
 <translation id="892706138619340876">Нека подешавања су ресетована</translation>
 <translation id="8927438609932588163">Дозволите сајтовима да чувају податке на уређају</translation>
 <translation id="8929696694736010839">Само актуелна сесија без архивирања</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 2425124..c946e9c 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -5124,6 +5124,7 @@
 <translation id="4586275095964870617">Det gick inte att öppna <ph name="URL" /> i den andra webbläsaren. Kontakta systemadministratören.</translation>
 <translation id="4587589328781138893">Webbplatser</translation>
 <translation id="4588749726511456218">Scrollningsacceleration <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> och <ph name="DOMAIN" /> verkar vara relaterade. Se till att du litar på <ph name="DOMAIN" /> innan du använder lösenordet.</translation>
 <translation id="4589713469967853491">Loggarna har sparats i katalogen Nedladdningar.</translation>
 <translation id="4590785647529325123">Stäng alla inkognitoflikar om du vill radera webbhistoriken i inkognitoläget</translation>
 <translation id="459204634473266369">Inga enheter har sparats i <ph name="PRIMARY_EMAIL" /></translation>
@@ -5630,6 +5631,7 @@
 <translation id="4946998421534856407">Appstartaren + uppåtpil</translation>
 <translation id="4947376546135294974">Data från webbplatsen du besöker</translation>
 <translation id="4950100687509657457">Skapa profil</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{en fil}other{# filer}}</translation>
 <translation id="495170559598752135">Åtgärder</translation>
 <translation id="4951966678293618079">Spara aldrig lösenord för den här webbplatsen</translation>
@@ -5768,6 +5770,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Inloggningen misslyckades. Anslut till internet och försök igen.</translation>
 <translation id="5063480226653192405">Användning</translation>
+<translation id="5064921774605267982">Öppna profilen <ph name="PROFILE_NAME" />. Den här profilen hanteras av din förälder.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Inställningar för att hantera säker DNS i ChromeOS</translation>
 <translation id="5066534201484101197">Navigera mellan sidor genom att scrolla för långt</translation>
@@ -7218,6 +7221,7 @@
 <translation id="6122831415929794347">Vill du inaktivera Säker webbsökning?</translation>
 <translation id="6124650939968185064">Följande tillägg är beroende av detta tillägg:</translation>
 <translation id="6124698108608891449">Fler behörigheter behövs för webbplatsen.</translation>
+<translation id="6125202119952209826">Gå med i flikgruppen med <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Du måste tyvärr lägga till ditt konto på <ph name="DEVICE_TYPE" /> igen.</translation>
 <translation id="6125639926370653692">Månen</translation>
 <translation id="6126601353087978360">Ge feedback här:</translation>
@@ -7425,6 +7429,7 @@
 <translation id="6266984048393265562">Anpassa profil</translation>
 <translation id="6267166720438879315">Välj ett certifikat för att styrka din identitet för <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Öppna med <ph name="APP" /></translation>
+<translation id="6269050081341530851">Den äldsta kopian sparas när du stänger dubbletter</translation>
 <translation id="6270309713620950855">Påminnelse om att mikrofonen är avstängd</translation>
 <translation id="6270391203985052864">Webbplatser får be om tillåtelse att skicka aviseringar</translation>
 <translation id="6270486800167535228">Tillägget har fästs. Välj för att visa fler alternativ</translation>
@@ -7867,6 +7872,7 @@
 <translation id="6607831829715835317">Fler verkt&amp;yg</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> hanteras redan av <ph name="DOMAIN" />. Om du vill använda föräldrakontroller med ett annat Google-konto loggar du ut efter konfigureringen och väljer Lägg till person på inloggningsskärmen.</translation>
 <translation id="6608166463665411119">Återställ eSIM-kortet</translation>
+<translation id="660846213831377756">Musknappar</translation>
 <translation id="6608773371844092260">Låt ditt barn trycka på fingeravtryckssensorn på höger sida av <ph name="DEVICE_TYPE" /> för att ställa in fingeravtryck. Ditt barns fingeravtrycksdata lagras på ett säkert sätt och lämnar aldrig denna <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Inloggningsuppgifterna sparas på enheten när du har avslutat inkognitoläget. Du kan logga in på den här webbplatsen med enheten igen senare.</translation>
 <translation id="6610002944194042868">Översättningsalternativ</translation>
@@ -7966,6 +7972,7 @@
 <translation id="6679947539429331601">Dölj i 12 timmar</translation>
 <translation id="6680442031740878064">Tillgängligt: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Hastighet</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [Placeholder String]</translation>
 <translation id="6683022854667115063">Hörlurar</translation>
 <translation id="6683087162435654533">Åt&amp;erställ alla flikar</translation>
 <translation id="6683433919380522900">Behörigheten är <ph name="PERMISSION_STATE" /></translation>
@@ -8672,6 +8679,7 @@
 <translation id="7189451821249468368">Du har inte tillräckligt med uppgraderingar för att registrera enheten. Kontakta säljavdelningen om du vill köpa fler. Om du anser att detta meddelande visas på felaktig grund kontaktar du supporten.</translation>
 <translation id="7189965711416741966">Fingeravtrycket har lagts till.</translation>
 <translation id="7190883804815364931">Senaste uppdateringen av den här fliken</translation>
+<translation id="7190921792980745354">Vill du blockera <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Vissa länkar som stöds öppnas fortfarande i <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> och <ph name="NUMBER_OF_OTHER_APPS" /> andra appar.</translation>
 <translation id="7191159667348037">Okänd skrivare (USB)</translation>
 <translation id="7191631508323321927">Hall</translation>
@@ -8859,6 +8867,7 @@
 <translation id="7330533963640151632">Inställningar för <ph name="FEATURE_NAME" /> för enheten som tillhör <ph name="USER_NAME" /> och som delar via kontot <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + nedåtpil</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Flikdubbletter</translation>
 <translation id="7333388112938984914">Det går inte att ladda upp filer via en anslutning med datapriser.</translation>
 <translation id="7333669215417470379">Säkerhetskopiera och återställa appar och inställningar</translation>
 <translation id="7335974957018254119">Använd stavningskontroll för</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 6aa423c7..6a4896d 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -7216,6 +7216,7 @@
 <translation id="6122831415929794347">Ungependa kuzima kipengele cha Kuvinjari Salama?</translation>
 <translation id="6124650939968185064">Viendelezi vinavyofuata vinategemea kiendelezi hiki:</translation>
 <translation id="6124698108608891449">Tovuti hii inahitaji ruhusa zaidi.</translation>
+<translation id="6125202119952209826">Jiunge na kikundi cha vichupo kilicho na <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Kwa bahati mbaya, utahitaji kuongeza akaunti yako kwenye kifaa hiki cha <ph name="DEVICE_TYPE" /> tena.</translation>
 <translation id="6125639926370653692">Mwezi</translation>
 <translation id="6126601353087978360">Tafadhali weka maoni yako hapa:</translation>
@@ -7866,6 +7867,7 @@
 <translation id="6607831829715835317">Zana zaidi</translation>
 <translation id="6607890859198268021">Tayari <ph name="USER_EMAIL" /> inasimamiwa na <ph name="DOMAIN" />. Ili utumie vidhibiti vya wazazi na Akaunti tofauti ya Google, ondoka katika akaunti baada ya kuweka mipangilio, kisha uchague "Ongeza mtu" kwenye skrini ya kuingia katika akaunti.</translation>
 <translation id="6608166463665411119">Weka upya mipangilio ya eSIM</translation>
+<translation id="660846213831377756">Vitufe vya kipanya</translation>
 <translation id="6608773371844092260">Ili uweke mipangilio ya alama bainifu, weka kidole cha mtoto wako kwenye kitambuzi cha alama ya kidole upande wa kulia wa <ph name="DEVICE_TYPE" /> hii. Data ya alama ya kidole ya mtoto wako inahifadhiwa kwa usalama na itasalia kwenye <ph name="DEVICE_TYPE" /> hii.</translation>
 <translation id="6609478180749378879">Ukifunga Hali fiche, data ya kuingia katika akaunti itahifadhiwa kwenye kifaa hiki. Utaweza kuingia katika akaunti kwenye tovuti hii ukitumia kifaa chako baadaye.</translation>
 <translation id="6610002944194042868">Chaguo za Tafsiri</translation>
@@ -8672,6 +8674,7 @@
 <translation id="7189451821249468368">Huna leseni za kutosha kusajili kifaa hiki. Tafadhali wasiliana na huduma ya mauzo ili ununue nyingine. Ikiwa unaamini kuwa unaona ujumbe huu kimakosa, tafadhali wasiliana na kituo cha usaidizi.</translation>
 <translation id="7189965711416741966">Imeongeza alama bainifu.</translation>
 <translation id="7190883804815364931">Sasisho la Mwisho kwenye Kichupo Hiki</translation>
+<translation id="7190921792980745354">Ungependa kumzuia <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Baadhi ya viungo vinavyotumika bado vitafunguka kwenye <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> na programu zingine <ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Printa Isiyojulikana (USB)</translation>
 <translation id="7191631508323321927">Ushoroba</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 38c00cf..149578ac 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -5124,6 +5124,7 @@
 <translation id="4586275095964870617">மாற்று உலாவியில் <ph name="URL" />ஐத் திறக்க முடியவில்லை. உங்கள் சிஸ்டம் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4588749726511456218">ஸ்க்ரோல் விரைவுப்படுத்துதல் <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" />, <ph name="DOMAIN" /> ஆகிய இரண்டும் தொடர்புடையது போலத் தெரிகிறது. உங்கள் கடவுச்சொல்லைப் பயன்படுத்தும் முன் <ph name="DOMAIN" /> தளம் நம்பகமானதா என்பதை உறுதிப்படுத்திக்கொள்ளவும்.</translation>
 <translation id="4589713469967853491">’பதிவிறக்கங்கள்’ கோப்பகத்தில் பதிவுகள் எழுதப்பட்டன.</translation>
 <translation id="4590785647529325123">மறைநிலையில் இதுவரை இணையத்தில் பார்த்தவற்றைச் சாதனத்தில் இருந்து நீக்க, மறைநிலைப் பக்கங்கள் அனைத்தையும் மூடவும்</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> கணக்கில் சாதனங்கள் எதுவும் சேமிக்கப்படவில்லை</translation>
@@ -5630,6 +5631,7 @@
 <translation id="4946998421534856407">லான்ச்சர் + மேல்நோக்கிய அம்புக்குறி</translation>
 <translation id="4947376546135294974">நீங்கள் பார்வையிடும் தளங்களின் தரவு</translation>
 <translation id="4950100687509657457">சுயவிவரத்தை உருவாக்கு</translation>
+<translation id="4950360215042327246">[ஒதுக்கிட வார்த்தை]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ஒரு ஃபைலை}other{# ஃபைல்களை}}</translation>
 <translation id="495170559598752135">செயல்கள்</translation>
 <translation id="4951966678293618079">இந்தத் தளத்திற்கு ஒருபோதும் கடவுச்சொற்களைச் சேமிக்க வேண்டாம்</translation>
@@ -5768,6 +5770,7 @@
 <translation id="5061531353537614467">தூந்திரம்</translation>
 <translation id="5062930723426326933">உள்நுழைவில் தோல்வி, இணையத்துடன் இணைத்து மீண்டும் முயற்சிக்கவும்.</translation>
 <translation id="5063480226653192405">பயன்பாடு</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> சுயவிவரத்தைத் திறக்கும். இந்தச் சுயவிவரம் உங்கள் பெற்றோரால் நிர்வகிக்கப்படுகிறது.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS அமைப்புகளில் பாதுகாப்பான DNSஸை நிர்வகித்தல்</translation>
 <translation id="5066534201484101197">பக்கங்களுக்கு இடையே மாற ஓவர்-ஸ்க்ரோல் செய்தல்</translation>
@@ -7219,6 +7222,7 @@
 <translation id="6122831415929794347">'பாதுகாப்பு உலாவல்' அம்சத்தை முடக்கவா?</translation>
 <translation id="6124650939968185064">பின்வரும் நீட்டிப்புகள் இந்த நீட்டிப்பைச் சார்ந்தவை:</translation>
 <translation id="6124698108608891449">இந்தத் தளத்திற்குக் கூடுதல் அனுமதிகள் தேவை.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> உடன் பக்கக் குழுவில் சேருங்கள்</translation>
 <translation id="6125479973208104919"><ph name="DEVICE_TYPE" /> இல் உங்கள் கணக்கை மீண்டும் சேர்க்க வேண்டும்.</translation>
 <translation id="6125639926370653692">நிலா</translation>
 <translation id="6126601353087978360">உங்கள் கருத்தை இங்கே உள்ளிடுங்கள்:</translation>
@@ -7426,6 +7430,7 @@
 <translation id="6266984048393265562">சுயவிவரத்தைப் பிரத்தியேகமாக்குங்கள்</translation>
 <translation id="6267166720438879315"><ph name="HOST_NAME" /> க்கு உங்களை அங்கீகரிக்க ஒரு சான்றிதழைத் தேர்ந்தெடுங்கள்</translation>
 <translation id="6268252012308737255"><ph name="APP" /> இல் திற</translation>
+<translation id="6269050081341530851">நகல்களை மூடும்போது முதலில் திறந்த பக்கம் மட்டும் காட்டப்படும்</translation>
 <translation id="6270309713620950855">ஒலியடக்குவதற்கான நட்ஜ்</translation>
 <translation id="6270391203985052864">அறிவிப்புகளை அனுப்புவதற்கான அனுமதியைத் தளங்களால் கோர முடியும்</translation>
 <translation id="6270486800167535228">நீட்டிப்பு பின் செய்யப்பட்டது. கூடுதல் விருப்பங்களைப் பார்க்க தேர்ந்தெடுக்கவும்</translation>
@@ -7868,6 +7873,7 @@
 <translation id="6607831829715835317">மேலும் கருவி&amp;கள்</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ஏற்கெனவே <ph name="DOMAIN" /> மூலம் நிர்வகிக்கப்படுகிறது. வேறொரு Google கணக்கில் பெற்றோர் கட்டுப்பாடுகளைப் பயன்படுத்துவதற்கு, அமைவை நிறைவு செய்ததும் உள்நுழைந்துள்ள கணக்கிலிருந்து வெளியேறி, பின்னர் உள்நுழைவதற்கான திரையில் “கணக்கைச் சேர்” என்பதைத் தேர்ந்தெடுக்கவும்.</translation>
 <translation id="6608166463665411119">eSIMமை மீட்டமை</translation>
+<translation id="660846213831377756">மவுஸ் பட்டன்கள்</translation>
 <translation id="6608773371844092260">கைரேகையை அமைக்க இந்த <ph name="DEVICE_TYPE" /> இன் வலதுபக்கமுள்ள கைரேகை சென்சாரைத் தொடுமாறு உங்கள் பிள்ளையிடம் கூறவும். உங்கள் பிள்ளையின் கைரேகைத் தரவு பாதுகாப்பாகச் சேமிக்கப்படுவதுடன் <ph name="DEVICE_TYPE" /> சாதனத்திலேயே இருக்கும்.</translation>
 <translation id="6609478180749378879">மறைநிலைப் பயன்முறையை விட்டு வெளியேறிய பிறகு உள்நுழைவுத் தரவு இந்தச் சாதனத்தில் சேமிக்கப்படும். இந்தச் சாதனத்தைப் பயன்படுத்தி இந்த இணையதளத்தில் உங்களால் மீண்டும் உள்நுழைய முடியும்.</translation>
 <translation id="6610002944194042868">மொழிபெயர்ப்பு விருப்பத்தேர்வுகள்</translation>
@@ -7967,6 +7973,7 @@
 <translation id="6679947539429331601">12 மணிநேரத்திற்கு மறை</translation>
 <translation id="6680442031740878064">இருக்கும் இடம்: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">மதிப்பிடு</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [ஒதுக்கிட வார்த்தை]</translation>
 <translation id="6683022854667115063">ஹெட்ஃபோன்கள்</translation>
 <translation id="6683087162435654533">தாவல்கள் அனைத்தையும் மீட்டெடு</translation>
 <translation id="6683433919380522900">அனுமதி: <ph name="PERMISSION_STATE" /></translation>
@@ -8673,6 +8680,7 @@
 <translation id="7189451821249468368">இந்தச் சாதனத்தைப் பதிவுசெய்ய போதுமான மேம்படுத்தல்கள் உங்களிடம் இல்லை. மேலும் வாங்குவதற்கு விற்பனையாளரைத் தொடர்புகொள்ளவும். பிழை காரணமாக இந்த மெசேஜைப் பார்க்கிறீர்கள் எனக் கருதினால் உதவிக் குழுவைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7189965711416741966">கைரேகை சேர்க்கப்பட்டது.</translation>
 <translation id="7190883804815364931">இந்தப் பக்கத்திற்கான கடைசிப் புதுப்பிப்பு</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> ஐத் தடுக்க வேண்டுமா?</translation>
 <translation id="7191063546666816478"><ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> மற்றும் மேலும் <ph name="NUMBER_OF_OTHER_APPS" /> ஆப்ஸில் சில ஆதரிக்கப்படும் இணைப்புகள் இப்போதும் திறக்கும்.</translation>
 <translation id="7191159667348037">அறியப்படாத பிரிண்டர் (USB)</translation>
 <translation id="7191631508323321927">வீட்டு நடை</translation>
@@ -8860,6 +8868,7 @@
 <translation id="7330533963640151632"><ph name="USER_NAME" /> என்பவரின் சாதனத்திற்கான <ph name="FEATURE_NAME" /> அமைப்புகள், <ph name="USER_EMAIL" /> கணக்கின் மூலம் பகிர்கிறது.</translation>
 <translation id="7331646370422660166">Alt + கீழ்நோக்கிய அம்புக்குறி</translation>
 <translation id="7332053360324989309">பிரத்தியேக வொர்க்கர்: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">பக்கங்களை நகலெடுத்தல்</translation>
 <translation id="7333388112938984914">வரம்புள்ள இணைப்பில் இருக்கும்போது ஃபைல்களைப் பதிவேற்ற முடியாது.</translation>
 <translation id="7333669215417470379">ஆப்ஸ், அமைப்புகள் ஆகியவற்றைக் காப்புப் பிரதி எடுத்தல் மற்றும் மீட்டெடுத்தல்</translation>
 <translation id="7335974957018254119">எழுத்துப்பிழைச் சரிபார்ப்பை இதற்குப் பயன்படுத்தவும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 5a48952e..00d37534 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -7218,6 +7218,7 @@
 <translation id="6122831415929794347">సురక్షిత బ్రౌజింగ్‌ను ఆఫ్ చేయాలా?</translation>
 <translation id="6124650939968185064">కింది ఎక్స్‌టెన్షన్‌లు ఈ ఎక్స్‌టెన్షన్‌పై ఆధారపడి ఉంటాయి:</translation>
 <translation id="6124698108608891449">ఈ సైట్‌కు మరిన్ని అనుమతులు అవసరం.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" />‌తో కలిసి ట్యాబ్ గ్రూప్‌లో చేరండి</translation>
 <translation id="6125479973208104919">దురదృష్టవశాత్తూ, మీరు మీ ఖాతాను ఈ <ph name="DEVICE_TYPE" />కి మళ్లీ జోడించాలి.</translation>
 <translation id="6125639926370653692">చంద్రుడు</translation>
 <translation id="6126601353087978360">దయచేసి మీ ఫీడ్‌బ్యాక్‌ను ఇక్కడ ఎంటర్ చేయండి:</translation>
@@ -7868,6 +7869,7 @@
 <translation id="6607831829715835317">మరిన్ని సాధనా&amp;లు</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" />ను ఇప్పటికే <ph name="DOMAIN" /> మేనేజ్ చేస్తోంది. వేరొక Google ఖాతాతో తల్లిదండ్రుల నియంత్రణలను ఉపయోగించడానికి, సెటప్‌ను పూర్తి చేశాక సైన్ అవుట్ చేసి, ఆపై సైన్ ఇన్ స్క్రీన్‌పై ఉన్న "వ్యక్తిని జోడించండి"ను ఎంచుకోండి.</translation>
 <translation id="6608166463665411119">eSIMను రీసెట్ చేయండి</translation>
+<translation id="660846213831377756">మౌస్ కీలు</translation>
 <translation id="6608773371844092260">వేలిముద్రను సెటప్ చేయడానికి, ఈ <ph name="DEVICE_TYPE" />‌కు కుడి వైపున ఉన్న వేలిముద్ర సెన్సార్‌ను మీ చిన్నారి వేలితో తాకించండి. మీ చిన్నారి వేలిముద్ర డేటా సురక్షితంగా స్టోర్ చేయబడుతుంది, ఎప్పటికీ ఈ <ph name="DEVICE_TYPE" />‌లోనే ఉంటుంది.</translation>
 <translation id="6609478180749378879">మీరు అజ్ఞాత మోడ్ నుండి నిష్క్రమించిన తర్వాత సైన్-ఇన్ డేటా ఈ పరికరంలో స్టోర్ చేయబడుతుంది. మీ పరికరం ద్వారా తర్వాత మళ్లీ ఈ వెబ్‌సైట్‌కు మీరు సైన్ ఇన్ చేయగలరు.</translation>
 <translation id="6610002944194042868">అనువాదం ఎంపికలు</translation>
@@ -8674,6 +8676,7 @@
 <translation id="7189451821249468368">ఈ పరికరాన్ని ఎన్‌రోల్ చేయడానికి మీకు తగిన అప్‌గ్రేడ్‌లు లేవు. దయచేసి మరిన్నింటిని కొనుగోలు చేయడానికి విక్రయ కేంద్రాన్ని సంప్రదించండి. మీకు ఈ మెసేజ్ పొరపాటున వచ్చిందని మీరు విశ్వసిస్తే, దయచేసి సపోర్ట్ విభాగాన్ని సంప్రదించండి.</translation>
 <translation id="7189965711416741966">వేలిముద్ర జోడించబడింది.</translation>
 <translation id="7190883804815364931">ఈ ట్యాబ్‌కు సంబంధించిన చివరి అప్‌డేట్</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" />‌ను బ్లాక్ చేయాలా?</translation>
 <translation id="7191063546666816478">కొన్ని సపోర్ట్ లింక్‌లు ఇప్పటికీ <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, మరో <ph name="NUMBER_OF_OTHER_APPS" /> యాప్‌లలో తెరవబడతాయి.</translation>
 <translation id="7191159667348037">తెలియని ప్రింటర్ (USB)</translation>
 <translation id="7191631508323321927">హాల్‌వే</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 96348af..0772d9f 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -7201,6 +7201,7 @@
 <translation id="6122831415929794347">ปิด Google Safe Browsing ใช่ไหม</translation>
 <translation id="6124650939968185064">ส่วนขยายต่อไปนี้ต้องพึ่งพาส่วนขยายนี้:</translation>
 <translation id="6124698108608891449">เว็บไซต์นี้ต้องการสิทธิ์เพิ่มเติม</translation>
+<translation id="6125202119952209826">เข้าร่วมกลุ่มแท็บกับ <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">ขออภัย คุณจะต้องเพิ่มบัญชีของคุณลงใน <ph name="DEVICE_TYPE" /> นี้อีกครั้ง</translation>
 <translation id="6125639926370653692">ดวงจันทร์</translation>
 <translation id="6126601353087978360">โปรดป้อนความคิดเห็นของคุณที่นี่</translation>
@@ -7851,6 +7852,7 @@
 <translation id="6607831829715835317">เ&amp;ครื่องมือเพิ่มเติม</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ได้รับการจัดการโดย <ph name="DOMAIN" /> อยู่แล้ว หากต้องการใช้การควบคุมโดยผู้ปกครองกับบัญชี Google บัญชีอื่น ให้ออกจากระบบหลังจากที่ตั้งค่าแล้ว จากนั้นเลือก "เพิ่มบุคคล" ในหน้าจอลงชื่อเข้าใช้</translation>
 <translation id="6608166463665411119">รีเซ็ต eSIM</translation>
+<translation id="660846213831377756">แป้นเมาส์</translation>
 <translation id="6608773371844092260">หากต้องการตั้งค่าลายนิ้วมือ ให้บุตรหลานแตะเซ็นเซอร์ลายนิ้วมือที่ด้านขวาของ <ph name="DEVICE_TYPE" /> เครื่องนี้ ข้อมูลลายนิ้วมือของบุตรหลานจะจัดเก็บไว้อย่างปลอดภัยและอยู่ใน <ph name="DEVICE_TYPE" /> เครื่องนี้เสมอ</translation>
 <translation id="6609478180749378879">ข้อมูลการลงชื่อเข้าใช้จะจัดเก็บอยู่ในอุปกรณ์นี้หลังจากออกจากโหมดไม่ระบุตัวตน โดยจะลงชื่อเข้าใช้เว็บไซต์นี้ด้วยอุปกรณ์ของคุณอีกครั้งในภายหลังได้</translation>
 <translation id="6610002944194042868">ตัวเลือกการแปลภาษา</translation>
@@ -8657,6 +8659,7 @@
 <translation id="7189451821249468368">คุณมีการอัปเกรดไม่เพียงพอสำหรับการลงทะเบียนอุปกรณ์นี้ โปรดติดต่อฝ่ายขายเพื่อสั่งซื้อเพิ่มเติม หากคุณเชื่อว่าคุณเห็นข้อความนี้เนื่องจากข้อผิดพลาด โปรดติดต่อฝ่ายสนับสนุน</translation>
 <translation id="7189965711416741966">เพิ่มลายนิ้วมือแล้ว</translation>
 <translation id="7190883804815364931">ข้อมูลอัปเดตล่าสุดของแท็บนี้</translation>
+<translation id="7190921792980745354">บล็อก <ph name="MEMBER_FULL_NAME" /> ไหม</translation>
 <translation id="7191063546666816478">ลิงก์ที่รองรับบางลิงก์จะยังคงเปิดใน <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> และอีก <ph name="NUMBER_OF_OTHER_APPS" /> แอป</translation>
 <translation id="7191159667348037">เครื่องพิมพ์ที่ไม่รู้จัก (USB)</translation>
 <translation id="7191631508323321927">ห้องโถง</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index bf8ed3d5..648021d 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -5107,6 +5107,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="4587589328781138893">Siteler</translation>
 <translation id="4588749726511456218">Kaydırma hızlandırma <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> ve <ph name="DOMAIN" /> ilişkili görünüyor. Şifrenizi kullanmadan önce <ph name="DOMAIN" /> web sitesine güvendiğinizden emin olun.</translation>
 <translation id="4589713469967853491">Günlükler, İndirilenler dizinine yazıldı.</translation>
 <translation id="4590785647529325123">Gizli mod tarama geçmişini cihazınızdan silmek için tüm Gizli sekmeleri kapatın</translation>
 <translation id="459204634473266369"><ph name="PRIMARY_EMAIL" /> hesabına kayıtlı cihaz yok</translation>
@@ -5613,6 +5614,7 @@
 <translation id="4946998421534856407">başlatıcı  + yukarı ok</translation>
 <translation id="4947376546135294974">Ziyaret ettiğiniz sitedeki veriler</translation>
 <translation id="4950100687509657457">Profil oluştur</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{bir dosya}other{# dosya}}</translation>
 <translation id="495170559598752135">İşlemler</translation>
 <translation id="4951966678293618079">Bu sitedeki şifreleri hiçbir zaman kaydetme</translation>
@@ -5751,6 +5753,7 @@
 <translation id="5061531353537614467">Tundra</translation>
 <translation id="5062930723426326933">Oturum açma başarısız oldu. Lütfen İnternet'e bağlanın ve tekrar deneyin.</translation>
 <translation id="5063480226653192405">Kullanım</translation>
+<translation id="5064921774605267982"><ph name="PROFILE_NAME" /> profilini açın. Bu profil, ebeveyniniz tarafından yönetiliyor.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">ChromeOS ayarlarında güvenli DNS'yi yönetin</translation>
 <translation id="5066534201484101197">Sayfalar arasında gezinmek için kaydırma sonu efektini kullan</translation>
@@ -7201,6 +7204,7 @@
 <translation id="6122831415929794347">Güvenli Tarama kapatılsın mı?</translation>
 <translation id="6124650939968185064">Aşağıdaki uzantılar bu uzantıya bağımlıdır:</translation>
 <translation id="6124698108608891449">Bu site, daha fazla izne ihtiyaç duyuyor.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> kullanıcısının bulunduğu sekme grubuna katılın</translation>
 <translation id="6125479973208104919">Ne yazık ki hesabınızı bu <ph name="DEVICE_TYPE" /> cihaza tekrar eklemeniz gerekecek.</translation>
 <translation id="6125639926370653692">Ay</translation>
 <translation id="6126601353087978360">Lütfen geri bildiriminizi buraya girin:</translation>
@@ -7266,7 +7270,7 @@
 <translation id="6169967265765719844">Steam aracılığıyla yüklenen oyunların ve uygulamaların izinleri, <ph name="LINK_BEGIN" />Steam uygulama ayarlarından<ph name="LINK_END" /> yönetilebilir.</translation>
 <translation id="6170470584681422115">Sandviç</translation>
 <translation id="6170498031581934115">ADB hata ayıklama işlevi etkinleştirilemedi. Ayarlar'a gidip tekrar deneyin.</translation>
-<translation id="6170675927290506430">Bildirim ayarlarına git</translation>
+<translation id="6170675927290506430">Bildirim ayarlarına gidin</translation>
 <translation id="6171779718418683144">Her ziyarette sor</translation>
 <translation id="617213288191670920">Dil eklenmedi</translation>
 <translation id="6173623053897475761">PIN'inizi tekrar yazın</translation>
@@ -7408,6 +7412,7 @@
 <translation id="6266984048393265562">Profili özelleştir</translation>
 <translation id="6267166720438879315"><ph name="HOST_NAME" /> sunucusunda kimliğinizi doğrulamak için bir sertifika seçin</translation>
 <translation id="6268252012308737255"><ph name="APP" /> ile aç</translation>
+<translation id="6269050081341530851">Yinelenen sekmeleri kapattığınızda en eski kopya saklanır</translation>
 <translation id="6270309713620950855">Otomatik hatırlatmayı kapat</translation>
 <translation id="6270391203985052864">Siteler bildirim gönderme izni isteyebilir</translation>
 <translation id="6270486800167535228">Uzantı sabitlendi. Diğer seçenekleri görmek için seçin</translation>
@@ -7850,6 +7855,7 @@
 <translation id="6607831829715835317">Diğer araç&amp;lar</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> zaten <ph name="DOMAIN" /> tarafından yönetiliyor. Ebeveyn denetimlerini farklı bir Google Hesabıyla kullanmak için kurulumdan sonra oturumu kapatıp oturum açma ekranında "Kişi ekle"yi seçin.</translation>
 <translation id="6608166463665411119">eSIM'i sıfırla</translation>
+<translation id="660846213831377756">Fare tuşları</translation>
 <translation id="6608773371844092260">Parmak izini ayarlamak için çocuğunuzun, bu <ph name="DEVICE_TYPE" /> cihazının sağ tarafındaki parmak izi sensörüne dokunması gerekir. Çocuğunuzun parmak izi verileri güvenli bir şekilde depolanır ve her zaman <ph name="DEVICE_TYPE" /> cihazınızda tutulur.</translation>
 <translation id="6609478180749378879">Gizli moddan çıktıktan sonra oturum açma verileriniz bu cihazda saklanır. Daha sonra cihazınızla bu web sitesinde tekrar oturum açabilirsiniz.</translation>
 <translation id="6610002944194042868">Çeviri Seçenekleri</translation>
@@ -7949,6 +7955,7 @@
 <translation id="6679947539429331601">12 saat boyunca gizle</translation>
 <translation id="6680442031740878064">Kullanılabilir alan: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Hız</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">Kulaklık</translation>
 <translation id="6683087162435654533">Tüm Sekmeleri Geri Yükle</translation>
 <translation id="6683433919380522900">İzin durumu: <ph name="PERMISSION_STATE" /></translation>
@@ -8655,6 +8662,7 @@
 <translation id="7189451821249468368">Bu cihazı kaydetmek için yeterli yükseltmeye sahip değilsiniz. Daha fazla yazılım satın almak için lütfen satış birimiyle bağlantı kurun. Bu mesajın yanlışlıkla görüntülendiğini düşünüyorsanız lütfen destekle bağlantı kurun.</translation>
 <translation id="7189965711416741966">Parmak izi eklendi.</translation>
 <translation id="7190883804815364931">Bu Sekmede Yapılan Son Güncelleme</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> engellensin mi?</translation>
 <translation id="7191063546666816478">Bazı desteklenen bağlantılar <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> ve diğer <ph name="NUMBER_OF_OTHER_APPS" /> uygulamada açılmaya devam eder.</translation>
 <translation id="7191159667348037">Bilinmeyen Yazıcı (USB)</translation>
 <translation id="7191631508323321927">Koridor</translation>
@@ -8842,6 +8850,7 @@
 <translation id="7330533963640151632"><ph name="USER_EMAIL" /> hesabından yaptığı paylaşımlar için <ph name="USER_NAME" /> kullanıcısına ait cihazın <ph name="FEATURE_NAME" /> ayarları.</translation>
 <translation id="7331646370422660166">alt + aşağı ok</translation>
 <translation id="7332053360324989309">Özel Çalışan: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Yinelenen sekmeler</translation>
 <translation id="7333388112938984914">Sayaçlı bağlantı kullanılırken dosya yüklenemez.</translation>
 <translation id="7333669215417470379">Uygulamalarınız ile ayarlarınızı yedekleyin ve geri yükleyin</translation>
 <translation id="7335974957018254119">Şu diller için yazım denetimi kullan:</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index c75db21..e5651dd2 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -5127,6 +5127,7 @@
 <translation id="4586275095964870617">Не вдалося відкрити <ph name="URL" /> в альтернативному веб-переглядачі. Зв’яжіться із системним адміністратором.</translation>
 <translation id="4587589328781138893">Сайти</translation>
 <translation id="4588749726511456218">Прискорення прокручування <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Схоже, вебсайти <ph name="PASSWORD_DOMAIN" /> і <ph name="DOMAIN" /> пов’язані. Перш ніж використати пароль, переконайтеся, що довіряєте сайту <ph name="DOMAIN" />.</translation>
 <translation id="4589713469967853491">Журнали записано в каталог "Завантаження".</translation>
 <translation id="4590785647529325123">Щоб видалити з пристрою історію вебперегляду в анонімному режимі, закрийте всі анонімні вкладки</translation>
 <translation id="459204634473266369">В обліковому записі <ph name="PRIMARY_EMAIL" /> немає збережених пристроїв</translation>
@@ -5632,6 +5633,7 @@
 <translation id="4946998421534856407">клавіша Панелі запуску + стрілка вгору</translation>
 <translation id="4947376546135294974">Дані із сайту, який ви відвідуєте</translation>
 <translation id="4950100687509657457">Створити профіль</translation>
+<translation id="4950360215042327246">[Рядок-заповнювач]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}one{# файл}few{# файли}many{# файлів}other{# файлу}}</translation>
 <translation id="495170559598752135">Дії</translation>
 <translation id="4951966678293618079">Ніколи не зберігати паролі для цього сайту</translation>
@@ -5770,6 +5772,7 @@
 <translation id="5061531353537614467">Тундра</translation>
 <translation id="5062930723426326933">Помилка входу. Під’єднайтеся до Інтернету та повторіть спробу.</translation>
 <translation id="5063480226653192405">Використання</translation>
+<translation id="5064921774605267982">Відкрити профіль <ph name="PROFILE_NAME" />. Цим профілем керує один із батьків.</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">Керувати захищеним DNS-сервером у налаштуваннях ОС Chrome</translation>
 <translation id="5066534201484101197">Використовувати надмірне прокручування, щоб переходити між сторінками</translation>
@@ -7216,6 +7219,7 @@
 <translation id="6122831415929794347">Вимкнути Безпечний перегляд?</translation>
 <translation id="6124650939968185064">Від цього розширення залежать такі розширення:</translation>
 <translation id="6124698108608891449">Цьому сайту потрібні додаткові дозволи.</translation>
+<translation id="6125202119952209826">Приєднатися до групи вкладок, з якою працює <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">На жаль, потрібно ще раз додати обліковий запис на пристрої <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Місяць</translation>
 <translation id="6126601353087978360">Введіть свій відгук тут:</translation>
@@ -7423,6 +7427,7 @@
 <translation id="6266984048393265562">Налаштувати профіль</translation>
 <translation id="6267166720438879315">Виберіть сертифікат, щоб ідентифікувати себе на <ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Відкрити за допомогою додатка <ph name="APP" /></translation>
+<translation id="6269050081341530851">Коли ви закриваєте дублікати, зберігається найстаріша копія</translation>
 <translation id="6270309713620950855">Нагадування про вимкнений мікрофон</translation>
 <translation id="6270391203985052864">Сайти можуть просити дозвіл надсилати сповіщення</translation>
 <translation id="6270486800167535228">Розширення закріплено. Виберіть, щоб побачити більше варіантів.</translation>
@@ -7871,6 +7876,7 @@
 <translation id="6607831829715835317">Інші інстру&amp;менти</translation>
 <translation id="6607890859198268021">Обліковим записом <ph name="USER_EMAIL" /> уже керує домен <ph name="DOMAIN" />. Щоб увімкнути батьківський контроль для іншого облікового запису Google, після налаштування вийдіть, а тоді виберіть "Додати користувача" на екрані входу.</translation>
 <translation id="6608166463665411119">Скинути eSIM-карту</translation>
+<translation id="660846213831377756">Клавіші миші</translation>
 <translation id="6608773371844092260">Щоб налаштувати відбиток пальця, дитина має торкнутися сканера на правому боці цього пристрою <ph name="DEVICE_TYPE" />. <ph name="DEVICE_TYPE" /> надійно зберігає дані про відбиток і нікуди не надсилає їх.</translation>
 <translation id="6609478180749378879">Дані для входу зберігатимуться на цьому пристрої після виходу з режиму анонімного перегляду. Ви зможете знову ввійти на цей сайт зі свого пристрою пізніше.</translation>
 <translation id="6610002944194042868">Параметри перекладу</translation>
@@ -7970,6 +7976,7 @@
 <translation id="6679947539429331601">Сховати на 12 годин</translation>
 <translation id="6680442031740878064">Доступно: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Оцінити</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> – [рядок-заповнювач]</translation>
 <translation id="6683022854667115063">Навушники</translation>
 <translation id="6683087162435654533">Відновити всі вкладки</translation>
 <translation id="6683433919380522900">Дозвіл: <ph name="PERMISSION_STATE" /></translation>
@@ -8676,6 +8683,7 @@
 <translation id="7189451821249468368">Не вдається зареєструвати цей пристрій, оскільки у вас немає потрібних оновлень ліцензії. Щоб придбати їх, зв'яжіться з продавцем. Якщо ви вважаєте, що це повідомлення з'явилося помилково, зв'яжіться зі службою підтримки.</translation>
 <translation id="7189965711416741966">Відбиток додано.</translation>
 <translation id="7190883804815364931">Останнє оновлення цієї вкладки</translation>
+<translation id="7190921792980745354">Заблокувати користувача <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Деякі підтримувані посилання все ще відкриватимуться в <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> та інших (<ph name="NUMBER_OF_OTHER_APPS" />) додатках.</translation>
 <translation id="7191159667348037">Невідомий принтер (USB)</translation>
 <translation id="7191631508323321927">Коридор</translation>
@@ -8863,6 +8871,7 @@
 <translation id="7330533963640151632">Налаштування функції "<ph name="FEATURE_NAME" />" для пристрою, яким користується <ph name="USER_NAME" /> (з обліковим записом <ph name="USER_EMAIL" />).</translation>
 <translation id="7331646370422660166">alt + стрілка вниз</translation>
 <translation id="7332053360324989309">Dedicated Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Повторювані вкладки</translation>
 <translation id="7333388112938984914">Не можна завантажувати файли, коли використовується підключення з тарифікацією.</translation>
 <translation id="7333669215417470379">Створюйте резервні копії додатків і налаштувань та відновлюйте їх</translation>
 <translation id="7335974957018254119">Використовувати перевірку орфографії для таких мов:</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 8a165b4..b222fd8c 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -7205,6 +7205,7 @@
 <translation id="6122831415929794347">محفوظ براؤزنگ آن کریں؟</translation>
 <translation id="6124650939968185064">مندرجہ ذیل ایکسٹینشنز اس ایکسٹینشن پر منحصر ہیں:</translation>
 <translation id="6124698108608891449">اس سائٹ کو مزید اجازتوں کی ضرورت ہے۔</translation>
+<translation id="6125202119952209826">‫<ph name="OWNER_FIRST_NAME" /> کے ساتھ ٹیب گروپ میں شامل ہوں</translation>
 <translation id="6125479973208104919">بد قسمتی سے، آپ کو اس <ph name="DEVICE_TYPE" /> کے لیے اپنا اکاؤنٹ دوبارہ شامل کرنا ہوگا۔</translation>
 <translation id="6125639926370653692">چاند</translation>
 <translation id="6126601353087978360">براہ کرم اپنے تاثرات یہاں درج کریں:</translation>
@@ -7855,6 +7856,7 @@
 <translation id="6607831829715835317">مزید &amp;ٹولز</translation>
 <translation id="6607890859198268021">‏<ph name="USER_EMAIL" /> پہلے سے ہی <ph name="DOMAIN" /> کے زیر انتظام ہے۔ مختلف Google اکاؤنٹ سے پیرنٹل کنٹرولز کو استعمال کرنے کے لیے، سیٹ اپ کے بعد سائن آؤٹ کریں، پھر سائن ان اسکرین پر "شخص شامل کریں" کو منتخب کریں۔</translation>
 <translation id="6608166463665411119">‏eSIM ری سیٹ کریں</translation>
+<translation id="660846213831377756">ماؤس کیز</translation>
 <translation id="6608773371844092260">فنگر پرنٹ سیٹ اپ کرنے کے لیے، اپنے بچے سے اس <ph name="DEVICE_TYPE" /> کے دائیں ہاتھ کی طرف موجود فنگر پرنٹ سینسر کو ٹچ کرنے کو کہیں۔ آپ کے بچے کے فنگر پرنٹ ڈیٹا کو محفوظ طریقے سے اسٹور کیا جاتا ہے اور یہ کبھی بھی اس <ph name="DEVICE_TYPE" /> سے باہر نہیں جاتا۔</translation>
 <translation id="6609478180749378879">آپ کے پوشیدگی وضع سے باہر نکلنے کے بعد، سائن ان ڈیٹا اس آلے پر اسٹور کیا جائے گا۔ بعد میں، آپ اپنے آلے کی مدد سے اس ویب سائٹ پر دوبارہ سائن ان کر سکیں گے۔</translation>
 <translation id="6610002944194042868">ترجمہ کے اختیارات</translation>
@@ -8660,6 +8662,7 @@
 <translation id="7189451821249468368">آپ کے پاس اس آلے کا اندراج کرنے کیلئے کافی اپ گریڈز نہیں ہیں۔ براہ کرم مزید خریداری کیلئے سیلز سے رابطہ کریں۔ اگر آپ کو یقین ہے کہ آپ کو یہ پیغام غلطی سے نظر آ رہا ہے تو براہ کرم سپورٹ سے رابطہ کریں۔</translation>
 <translation id="7189965711416741966">فنگر پرنٹ شامل ہو گیا۔</translation>
 <translation id="7190883804815364931">اس ٹیب میں آخری اپ ڈیٹ</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> کو مسدود کریں؟</translation>
 <translation id="7191063546666816478">کچھ تعاون یافتہ لنکس اب بھی <ph name="APP_NAME" />، <ph name="APP_NAME_2" />، <ph name="APP_NAME_3" /> اور دیگر <ph name="NUMBER_OF_OTHER_APPS" /> میں کھلیں گے۔</translation>
 <translation id="7191159667348037">‏نامعلوم پرنٹر (USB)</translation>
 <translation id="7191631508323321927">ہال وے</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 8b2239a6..2e2b530 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -7207,6 +7207,7 @@
 <translation id="6122831415929794347">Saytlarni xavfsiz kezish faolsizlantirilsinmi?</translation>
 <translation id="6124650939968185064">Bu kengaytma quyidagi kengaytmalar bilan bog‘liq:</translation>
 <translation id="6124698108608891449">Bu saytga yana boshqa ruxsatlar kerak.</translation>
+<translation id="6125202119952209826"><ph name="OWNER_FIRST_NAME" /> ulashgan varaqlar guruhiga qoʻshilish</translation>
 <translation id="6125479973208104919">Afsuski bu <ph name="DEVICE_TYPE" /> qurilmangizga o‘z hisobingizni qayta qo‘shishingiz zarur.</translation>
 <translation id="6125639926370653692">Oy</translation>
 <translation id="6126601353087978360">Fikr-mulohazangizni shu yerga yozing:</translation>
@@ -7857,6 +7858,7 @@
 <translation id="6607831829715835317">Qo‘shimcha &amp;asboblar</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> <ph name="DOMAIN" /> tomonidan boshqariladi. Ota-ona nazoratini boshqa Google hisobidan boshqarishni istasangiz, sozlangandan keyin hisobdan chiqing va kirish oynasida “Foydalanuvchini kiritish” bandini tanlang.</translation>
 <translation id="6608166463665411119">eSIM kartani asliga qaytarish</translation>
+<translation id="660846213831377756">Sinchqoncha tugmalari</translation>
 <translation id="6608773371844092260">Barmoq izini sozlash uchun farzandingiz <ph name="DEVICE_TYPE" /> qurilmasining oʻng orqasidagi barmoq izi skaneriga teginishiga ruxsat bering. Farzandingiz barmoq izlari yaxshi himoya ostida va faqat <ph name="DEVICE_TYPE" /> qurilmasida saqlanadi.</translation>
 <translation id="6609478180749378879">Inkognito rejimini tark etganingizdan keyin kirish maʼlumotlari shu qurilmada saqlanadi. Bu saytga keyinchalik shu qurilma orqali yana kira olasiz.</translation>
 <translation id="6610002944194042868">Tarjima parametrlari</translation>
@@ -8662,6 +8664,7 @@
 <translation id="7189451821249468368">Bu qurilmani qayd qilish uchun sizdagi DT litsenziyalari yetarli emas. Xarid qilish uchun savdo boʻlimiga murojaat qiling. Bu xabar xato boʻlsa, yordam xizmatiga murojaat qiling.</translation>
 <translation id="7189965711416741966">Barmoq izi qo‘shildi.</translation>
 <translation id="7190883804815364931">Bu varaqqa oid oxirgi xabar</translation>
+<translation id="7190921792980745354"><ph name="MEMBER_FULL_NAME" /> bloklansinmi?</translation>
 <translation id="7191063546666816478">Ayrim tegishli havolalar <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> va yana <ph name="NUMBER_OF_OTHER_APPS" /> ta ilovada ochilaveradi.</translation>
 <translation id="7191159667348037">Notanish printer (USB)</translation>
 <translation id="7191631508323321927">Koridor</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index ad00c09..754e869 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -7221,6 +7221,7 @@
 <translation id="6122831415929794347">Tắt tính năng Duyệt web an toàn?</translation>
 <translation id="6124650939968185064">Các tiện ích sau phụ thuộc vào tiện ích này:</translation>
 <translation id="6124698108608891449">Trang web này cần các quyền khác.</translation>
+<translation id="6125202119952209826">Tham gia nhóm thẻ cùng với <ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Rất tiếc, bạn sẽ cần phải thêm lại tài khoản của mình vào <ph name="DEVICE_TYPE" /> này.</translation>
 <translation id="6125639926370653692">Mặt trăng</translation>
 <translation id="6126601353087978360">Vui lòng nhập ý kiến phản hồi của bạn tại đây:</translation>
@@ -7871,6 +7872,7 @@
 <translation id="6607831829715835317">Côn&amp;g cụ khác</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> vốn đang được <ph name="DOMAIN" /> quản lý. Để sử dụng các quyền kiểm soát của cha mẹ bằng một Tài khoản Google khác, hãy đăng xuất sau khi thiết lập rồi chọn "Thêm người" trên màn hình đăng nhập.</translation>
 <translation id="6608166463665411119">Đặt lại eSIM</translation>
+<translation id="660846213831377756">Phím chuột</translation>
 <translation id="6608773371844092260">Để thiết lập vân tay, con bạn cần chạm vào cảm biến vân tay ở bên phải <ph name="DEVICE_TYPE" /> này. Dữ liệu vân tay của con bạn được lưu trữ an toàn và chỉ có trên <ph name="DEVICE_TYPE" /> này.</translation>
 <translation id="6609478180749378879">Dữ liệu đăng nhập sẽ được lưu trữ trên thiết bị này sau khi bạn thoát khỏi Chế độ ẩn danh. Bạn sẽ có thể đăng nhập lại vào trang web này vào lúc khác bằng thiết bị của mình.</translation>
 <translation id="6610002944194042868">Tùy chọn dịch</translation>
@@ -8679,6 +8681,7 @@
 <translation id="7189451821249468368">Bạn không có đủ bản nâng cấp để đăng ký thiết bị này. Vui lòng liên hệ với bộ phận bán hàng để mua thêm. Nếu bạn nhận được thư này do nhầm lẫn, vui lòng liên hệ với nhóm hỗ trợ.</translation>
 <translation id="7189965711416741966">Đã thêm vân tay.</translation>
 <translation id="7190883804815364931">Nội dung cập nhật gần đây nhất về thẻ này</translation>
+<translation id="7190921792980745354">Chặn <ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Một số đường liên kết được hỗ trợ vẫn sẽ mở trong <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> và <ph name="NUMBER_OF_OTHER_APPS" /> ứng dụng khác.</translation>
 <translation id="7191159667348037">Máy in không xác định (USB)</translation>
 <translation id="7191631508323321927">Hành lang</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index fefe586..25800fa5 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -5100,6 +5100,7 @@
 <translation id="4586275095964870617">无法在替代浏览器中打开 <ph name="URL" />。请与您的系统管理员联系。</translation>
 <translation id="4587589328781138893">网站</translation>
 <translation id="4588749726511456218">滚动加速<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905"><ph name="PASSWORD_DOMAIN" /> 和 <ph name="DOMAIN" /> 似乎相关。请先确认您信任 <ph name="DOMAIN" />,然后再使用此密码。</translation>
 <translation id="4589713469967853491">已成功将日志写入“下载内容”目录中。</translation>
 <translation id="4590785647529325123">若要删除您设备中的无痕浏览记录,请关闭所有无痕式标签页</translation>
 <translation id="459204634473266369">尚未将任何设备保存到“<ph name="PRIMARY_EMAIL" />”</translation>
@@ -5605,6 +5606,7 @@
 <translation id="4946998421534856407">启动器键 + 向上键</translation>
 <translation id="4947376546135294974">来自您正在访问的网站的数据</translation>
 <translation id="4950100687509657457">创建个人资料</translation>
+<translation id="4950360215042327246">[占位符字符串]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 个文件}other{# 个文件}}</translation>
 <translation id="495170559598752135">操作</translation>
 <translation id="4951966678293618079">一律不为此网站保存密码</translation>
@@ -5743,6 +5745,7 @@
 <translation id="5061531353537614467">苔原</translation>
 <translation id="5062930723426326933">登录失败,请连接到互联网,然后重试。</translation>
 <translation id="5063480226653192405">空间占用量</translation>
+<translation id="5064921774605267982">打开“<ph name="PROFILE_NAME" />”个人资料。这份个人资料由家长管理。</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5066100345385738837">在 Chrome 操作系统设置中管理安全 DNS</translation>
 <translation id="5066534201484101197">滚动即可浏览各个页面</translation>
@@ -7189,6 +7192,7 @@
 <translation id="6122831415929794347">要关闭“安全浏览”功能吗?</translation>
 <translation id="6124650939968185064">需先安装此扩展程序,下列扩展程序才能正常使用:</translation>
 <translation id="6124698108608891449">此网站需要更多权限。</translation>
+<translation id="6125202119952209826">加入<ph name="OWNER_FIRST_NAME" />所在的标签页分组</translation>
 <translation id="6125479973208104919">抱歉,您需要再次向此 <ph name="DEVICE_TYPE" /> 添加您的账号。</translation>
 <translation id="6125639926370653692">月球</translation>
 <translation id="6126601353087978360">请在此处输入您的反馈:</translation>
@@ -7396,6 +7400,7 @@
 <translation id="6266984048393265562">自定义个人资料</translation>
 <translation id="6267166720438879315">请选择证书,以在 <ph name="HOST_NAME" /> 上对您本人进行身份验证</translation>
 <translation id="6268252012308737255">使用<ph name="APP" />打开</translation>
+<translation id="6269050081341530851">关闭重复标签页时,系统会保留最早的副本</translation>
 <translation id="6270309713620950855">静音状态智能推送</translation>
 <translation id="6270391203985052864">网站可以询问能否向您发送通知</translation>
 <translation id="6270486800167535228">扩展程序已固定。选择即可查看更多选项</translation>
@@ -7838,6 +7843,7 @@
 <translation id="6607831829715835317">更多工具(&amp;L)</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> 已由 <ph name="DOMAIN" /> 管理。若要通过另一 Google 账号使用家长控制功能,请在完成设置后退出登录,然后在登录屏幕上选择“添加用户”。</translation>
 <translation id="6608166463665411119">重置 eSIM 卡</translation>
+<translation id="660846213831377756">鼠标按键</translation>
 <translation id="6608773371844092260">若要设置指纹,请让您的孩子轻触此 <ph name="DEVICE_TYPE" /> 右侧的指纹传感器。您孩子的指纹数据会安全地存储在此 <ph name="DEVICE_TYPE" /> 上,绝不会外泄。</translation>
 <translation id="6609478180749378879">当您退出无痕模式后,登录数据会存储在此设备中。日后您将能够使用此设备重新登录该网站。</translation>
 <translation id="6610002944194042868">翻译选项</translation>
@@ -7937,6 +7943,7 @@
 <translation id="6679947539429331601">隐藏 12 小时</translation>
 <translation id="6680442031740878064">可用空间:<ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">语速</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [占位符字符串]</translation>
 <translation id="6683022854667115063">头戴式耳机</translation>
 <translation id="6683087162435654533">恢复所有标签页(&amp;E)</translation>
 <translation id="6683433919380522900">权限已<ph name="PERMISSION_STATE" /></translation>
@@ -8643,6 +8650,7 @@
 <translation id="7189451821249468368">您没有足够的升级许可来注册此设备。请与销售代表联系,以购买更多升级许可。如果您认为自己不应看到这条消息,请与支持人员联系。</translation>
 <translation id="7189965711416741966">已添加指纹。</translation>
 <translation id="7190883804815364931">此标签页的最近更新</translation>
+<translation id="7190921792980745354">要屏蔽<ph name="MEMBER_FULL_NAME" />吗?</translation>
 <translation id="7191063546666816478">部分受支持的链接仍会在“<ph name="APP_NAME" />”、“<ph name="APP_NAME_2" />”、“<ph name="APP_NAME_3" />”和另外 <ph name="NUMBER_OF_OTHER_APPS" /> 款应用中打开。</translation>
 <translation id="7191159667348037">未知打印机 (USB)</translation>
 <translation id="7191631508323321927">走廊</translation>
@@ -8830,6 +8838,7 @@
 <translation id="7330533963640151632"><ph name="USER_NAME" />的设备的“<ph name="FEATURE_NAME" />”设置,通过账号 <ph name="USER_EMAIL" /> 分享。</translation>
 <translation id="7331646370422660166">alt + 向下键</translation>
 <translation id="7332053360324989309">Dedicated Worker:<ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">重复标签页</translation>
 <translation id="7333388112938984914">使用按流量计费的网络时无法上传文件。</translation>
 <translation id="7333669215417470379">备份和恢复您所用的应用和设置</translation>
 <translation id="7335974957018254119">支持拼写检查的语言</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 309400e..8e9872ebf 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -7206,6 +7206,7 @@
 <translation id="6122831415929794347">要關閉安全瀏覽嗎?</translation>
 <translation id="6124650939968185064">下列擴充功能依賴此擴充功能:</translation>
 <translation id="6124698108608891449">此網站需要更多權限。</translation>
+<translation id="6125202119952209826">加入<ph name="OWNER_FIRST_NAME" />所在的分頁群組</translation>
 <translation id="6125479973208104919">抱歉,您需要再次在 <ph name="DEVICE_TYPE" /> 上新增帳戶。</translation>
 <translation id="6125639926370653692">月亮</translation>
 <translation id="6126601353087978360">請在此輸入您的意見:</translation>
@@ -7856,6 +7857,7 @@
 <translation id="6607831829715835317">更多工具(&amp;L)</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> 目前已由 <ph name="DOMAIN" /> 管理。如要以其他 Google 帳戶使用家長監護功能,請在設定後登出,然後在登入畫面上選取「新增使用者」。</translation>
 <translation id="6608166463665411119">重設 eSIM 卡</translation>
+<translation id="660846213831377756">滑鼠按鍵</translation>
 <translation id="6608773371844092260">如要設定指紋,請讓子女輕觸 <ph name="DEVICE_TYPE" /> 右側的指紋感應器。子女的指紋資料會安全儲存在此 <ph name="DEVICE_TYPE" /> 上,絕不會外洩。</translation>
 <translation id="6609478180749378879">離開無痕模式後,登入資料會儲存在此裝置中。您可在日後透過裝置再次登入此網站。</translation>
 <translation id="6610002944194042868">翻譯選項</translation>
@@ -8662,6 +8664,7 @@
 <translation id="7189451821249468368">您沒有足夠升級,無法註冊這部裝置。如要購買更多升級,請與銷售人員聯絡。如果您認為這則訊息有誤,請與支援團隊聯絡。</translation>
 <translation id="7189965711416741966">已加入指紋。</translation>
 <translation id="7190883804815364931">此分頁最近的更新</translation>
+<translation id="7190921792980745354">要封鎖<ph name="MEMBER_FULL_NAME" />嗎?</translation>
 <translation id="7191063546666816478">部分支援連結將仍會在 <ph name="APP_NAME" />、<ph name="APP_NAME_2" />、<ph name="APP_NAME_3" /> 和另外 <ph name="NUMBER_OF_OTHER_APPS" /> 個應用程式中開啟。</translation>
 <translation id="7191159667348037">不明打印機 (USB)</translation>
 <translation id="7191631508323321927">走廊</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 34025e36..f6d4ead 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -7198,6 +7198,7 @@
 <translation id="6122831415929794347">要停用安全瀏覽功能嗎?</translation>
 <translation id="6124650939968185064">下列擴充功能與這個擴充功能之間有相依關係:</translation>
 <translation id="6124698108608891449">這個網站需要更多權限。</translation>
+<translation id="6125202119952209826">加入<ph name="OWNER_FIRST_NAME" />的分頁群組</translation>
 <translation id="6125479973208104919">很抱歉,你需要重新在 <ph name="DEVICE_TYPE" /> 上新增帳戶。</translation>
 <translation id="6125639926370653692">月亮</translation>
 <translation id="6126601353087978360">請在這裡提供意見:</translation>
@@ -7848,6 +7849,7 @@
 <translation id="6607831829715835317">更多工具(&amp;L)</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> 已由 <ph name="DOMAIN" /> 管理。如要以其他 Google 帳戶使用家長監護功能,請在設定完成後登出帳戶,然後在登入畫面上選取 [新增使用者]。</translation>
 <translation id="6608166463665411119">重設 eSIM 卡</translation>
+<translation id="660846213831377756">滑鼠按鍵</translation>
 <translation id="6608773371844092260">如要設定指紋,請讓孩子輕觸這部「<ph name="DEVICE_TYPE" />」右側的指紋感應器。孩子的指紋資料會安全地儲存在這部「<ph name="DEVICE_TYPE" />」上,絕不會外洩。</translation>
 <translation id="6609478180749378879">系統會在無痕模式結束後將登入資料儲存在這部裝置上。你可以再次透過這部裝置登入這個網站。</translation>
 <translation id="6610002944194042868">翻譯選項</translation>
@@ -8653,6 +8655,7 @@
 <translation id="7189451821249468368">你的升級授權不足,無法註冊這個裝置。請與銷售人員聯絡以購買更多授權。如果你認為不應顯示這則訊息,請與支援小組聯絡。</translation>
 <translation id="7189965711416741966">指紋新增成功。</translation>
 <translation id="7190883804815364931">上次更新這個分頁的時間</translation>
+<translation id="7190921792980745354">要封鎖<ph name="MEMBER_FULL_NAME" />嗎?</translation>
 <translation id="7191063546666816478">某些支援連結仍會在「<ph name="APP_NAME" />」、「<ph name="APP_NAME_2" />」、「<ph name="APP_NAME_3" />」、「<ph name="NUMBER_OF_OTHER_APPS" />」和其他應用程式中開啟。</translation>
 <translation id="7191159667348037">不明的印表機 (USB)</translation>
 <translation id="7191631508323321927">走廊</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index be18c9e..1bf74e45 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -5124,6 +5124,7 @@
 <translation id="4586275095964870617"><ph name="URL" /> ayikwazanga ukuvula kwesinye isiphequluli. Sicela uxhumane nomlawuli wakho wesistimu.</translation>
 <translation id="4587589328781138893">Amasayithi</translation>
 <translation id="4588749726511456218">Skrola isisheshisi <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation>
+<translation id="4589197033939192905">Okuthi <ph name="PASSWORD_DOMAIN" /> kanye nokuthi <ph name="DOMAIN" /> kubonakala kuhlobene. Qiniseka ukuthi uyayethemba i-<ph name="DOMAIN" /> ngaphambi kokusebenzisa iphasiwedi yakho.</translation>
 <translation id="4589713469967853491">Amalogu abhalwe ngempumelelo kuhla lwemibhalo Yokulandiwe.</translation>
 <translation id="4590785647529325123">Ukuze usule umlando wokuphequlula we-Incognito edivayisini yakho, vala wonke amathebhu e-Incognito</translation>
 <translation id="459204634473266369">Awekho amadivayisi alondolozwe ku-<ph name="PRIMARY_EMAIL" /></translation>
@@ -5630,6 +5631,7 @@
 <translation id="4946998421534856407">Isiqalisi + umcibisholo waphezulu</translation>
 <translation id="4947376546135294974">Idatha evela kusayithi oyivakashelayo</translation>
 <translation id="4950100687509657457">Sungula iphrofayela</translation>
+<translation id="4950360215042327246">[Placeholder String]</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ifayela}one{amafayela angu-#}other{amafayela angu-#}}</translation>
 <translation id="495170559598752135">Izenzo</translation>
 <translation id="4951966678293618079">Ungalokothi ulondoloze amaphasiwedi ale sayithi</translation>
@@ -5768,6 +5770,7 @@
 <translation id="5061531353537614467">ITundra</translation>
 <translation id="5062930723426326933">Ukungena ngemvume kuhlulekile, sicela uxhumeke ku-inthanethi uphinde uzame futhi.</translation>
 <translation id="5063480226653192405">Ukusetshenziswa</translation>
+<translation id="5064921774605267982">Vula iphrofayela ka-<ph name="PROFILE_NAME" /> Le phrofayela iphethwe umzali wakho.</translation>
 <translation id="5065775832226780415">I-Smart Lock</translation>
 <translation id="5066100345385738837">Phatha ukuvikela i-DNS kumasethingi e-ChromeOS</translation>
 <translation id="5066534201484101197">Pheqa kakhulu ukuze ufune phakathi kwamakhasi</translation>
@@ -7219,6 +7222,7 @@
 <translation id="6122831415929794347">Vala ukuphequlula ngokuphephile?</translation>
 <translation id="6124650939968185064">Izandiso ezilandelayo zincike kulesi sandiso:</translation>
 <translation id="6124698108608891449">Leli sayithi lidinga izimvume eziningi.</translation>
+<translation id="6125202119952209826">Joyina iqembu lethebhu no-<ph name="OWNER_FIRST_NAME" /></translation>
 <translation id="6125479973208104919">Ngeshwa, kuzomele uphinde ungeze i-akhawunti yakho kule-<ph name="DEVICE_TYPE" />.</translation>
 <translation id="6125639926370653692">Inyanga</translation>
 <translation id="6126601353087978360">Sicela ufake impendulo yakho lapha:</translation>
@@ -7426,6 +7430,7 @@
 <translation id="6266984048393265562">Enza Ngokwezifiso Iphrofayela</translation>
 <translation id="6267166720438879315">Khetha isitifiketi ukuze uzigunyazele kuso wena ngokwakho ku-<ph name="HOST_NAME" /></translation>
 <translation id="6268252012308737255">Vula nge-<ph name="APP" /></translation>
+<translation id="6269050081341530851">Ikhophi endala eyagcinwa ngesikhathi uvala okuphindekile</translation>
 <translation id="6270309713620950855">Thulisa ukugudluza</translation>
 <translation id="6270391203985052864">Amasayithi angacela ukuthumela izaziso</translation>
 <translation id="6270486800167535228">Isandiso siphiniwe. Khetha ukuze ubone ongakhetha kukho okwengeziwe</translation>
@@ -7870,6 +7875,7 @@
 <translation id="6607831829715835317">Amathuluzi amaningi</translation>
 <translation id="6607890859198268021">I-<ph name="USER_EMAIL" /> kakade iphethwe i-<ph name="DOMAIN" />. Ukuze usebenzise izilawuli zomzali nge-akhawunti ehlukile ye-Google, phuma ngemvume ngemva kokusetha, bese ukhetha okuthi "Engeza umuntu" kusikrini sokungena ngemvume.</translation>
 <translation id="6608166463665411119">Setha kabusha i-eSIM</translation>
+<translation id="660846213831377756">Izinkinobho zemouse</translation>
 <translation id="6608773371844092260">Ukuze usethe isigxivizo somunwe, cela ingane yakho ukuthi ithinte inzwa yesigxivizo somunwe esandleni sokudla sale-<ph name="DEVICE_TYPE" />. Idatha yesigxivizo somunwe yengane yakho igcinwa ngokuvikelekile futhi ayishiyi le-<ph name="DEVICE_TYPE" />.</translation>
 <translation id="6609478180749378879">Idatha yokungena ngemvume izolondolozwa kule divayisi ngemuva kokuphuma kumodi ye-Incognito. Uzokwazi ukungena ngemvume kule webhusayithi ngedivayisi yakho futhi kamuva.</translation>
 <translation id="6610002944194042868">Izinketho zokuhumusha</translation>
@@ -7969,6 +7975,7 @@
 <translation id="6679947539429331601">Fihla amahora ayi-12</translation>
 <translation id="6680442031740878064">Otholakalayo: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Linganisela</translation>
+<translation id="6682261381769522894"><ph name="WINDOW_TITLE" /> - [Placeholder String]</translation>
 <translation id="6683022854667115063">Ama-headphone</translation>
 <translation id="6683087162435654533">Phindisela Wonke Amathebhu</translation>
 <translation id="6683433919380522900">Imvume ithi <ph name="PERMISSION_STATE" /></translation>
@@ -8674,6 +8681,7 @@
 <translation id="7189451821249468368">Awunakho ukuthuthukisa okwanele ukuze ubhalisele le divayisi. Sicela uxhumane nentengiso ukuze uthenge okuningi. Uma ukholwa ukuthi ubona lo mlayezo ngephutha, sicela uxhumane nosekelo.</translation>
 <translation id="7189965711416741966">Izigxivizo zeminwe zingeziwe.</translation>
 <translation id="7190883804815364931">Isibuyekezo Sokugcina sale Thebhu</translation>
+<translation id="7190921792980745354">Vimba u-<ph name="MEMBER_FULL_NAME" />?</translation>
 <translation id="7191063546666816478">Amanye amalinki asekelwayo asazovuleka ku-<ph name="APP_NAME" />, ku-<ph name="APP_NAME_2" />, ku-<ph name="APP_NAME_3" /> nakwamanye ama-app angu-<ph name="NUMBER_OF_OTHER_APPS" />.</translation>
 <translation id="7191159667348037">Iphrinta engaziwa (USB)</translation>
 <translation id="7191631508323321927">Iphasiji</translation>
@@ -8861,6 +8869,7 @@
 <translation id="7330533963640151632">Amasethingi e-<ph name="FEATURE_NAME" /> edivayisi ka-<ph name="USER_NAME" />, ukwabelana ngaphansi kwe-akhawunti ethi <ph name="USER_EMAIL" />.</translation>
 <translation id="7331646370422660166">alt + umcibisholo waphansi</translation>
 <translation id="7332053360324989309">Isisebenzi Ezikhuthele: <ph name="SCRIPT_URL" /></translation>
+<translation id="7332138995369063163">Amathebhu aphindekile</translation>
 <translation id="7333388112938984914">Ayikwazi ukulayisha amafayela uma usaxhume ku-inthanethi ekala ngamamitha.</translation>
 <translation id="7333669215417470379">Yenza isipele futhi ubuyisele ama-app akho namasethingi</translation>
 <translation id="7335974957018254119">Sebenzisela ukuhlola isipele ku-</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb
index 596760f..5037ab48c 100644
--- a/chrome/app/resources/google_chrome_strings_bg.xtb
+++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -260,6 +260,7 @@
 <translation id="4147555960264124640">Влизате с управляван профил и давате на администратора му контрол над потребителския си профил в Google Chrome. Данните ви в браузъра, като например приложения, отметки, история, пароли и други настройки, ще се свържат за постоянно с/ъс <ph name="USER_NAME" />. Ще можете да ги изтриете чрез таблото за управление на Google Профили, но не и да ги свържете с друг профил. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Инсталира се...</translation>
 <translation id="4149882025268051530">Инсталационната програма не успя да декомпресира архива. Моля, изтеглете Google Chrome отново.</translation>
+<translation id="415112847282352845">Влезте в Chrome, за да получите адресите си и др. на всичките си устройства. Този адрес ще бъде запазен в профила ви в Google, след като влезете в него.</translation>
 <translation id="4153934450158521343">Chrome скоро ще се затвори и ще изтрие данните</translation>
 <translation id="4173512894976930765">Сайтовете вероятно ще работят по очаквания начин. Когато затворите всички прозорци на Chrome, ще излезете от профилите си в повечето сайтове с изключение на профила си в Google, ако сте влезли в профила си в Chrome.</translation>
 <translation id="4175922240926474352">Chrome блокира това изтегляне, защото сайтът не използва защитена връзка и е възможно файлът да е компрометиран</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb
index 2231a11..b17c0e0 100644
--- a/chrome/app/resources/google_chrome_strings_bn.xtb
+++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -260,6 +260,7 @@
 <translation id="4147555960264124640">আপনি একটি পরিচালিত অ্যাকাউন্টের মাধ্যমে সাইন-ইন করছেন এবং এর অ্যাডমিনিস্ট্রেটরকে আপনার Google Chrome প্রোফাইলের উপরে নিয়ন্ত্রণ দিচ্ছেন৷ আপনার Chrome ডেটা, যেমন অ্যাপগুলি, বুকমার্কগুলি, ইতিহাস, পাসওয়ার্ডগুলি এবং অন্যান্য সেটিংস <ph name="USER_NAME" /> এতে স্থায়ীভাবে সম্পৃক্ত হবে৷ আপনি Google অ্যাকাউন্টের ড্যাশবোর্ডের মাধ্যমে এই ডেটাগুলি মুছতে পারবেন, কিন্তু আপনি অন্য একটি অ্যাকাউন্টের সাথে এই ডেটা সংশ্লিষ্ট করতে পারবেন না৷ <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">ইনস্টল হচ্ছে...</translation>
 <translation id="4149882025268051530">ইনস্টলারটি আর্কাইভ আনকমপ্রেস করা যায়নি৷ অনুগ্রহ করে আবার Google Chrome ডাউনলোড করুন৷</translation>
+<translation id="415112847282352845">নিজের সব ডিভাইসে ঠিকানা ও আরও অনেক কিছু পেতে, Chrome-এ সাইন-ইন করুন। সাইন-ইন করার পরে, আপনার Google অ্যাকাউন্টে এই ঠিকানা সেভ করা হবে।</translation>
 <translation id="4153934450158521343">Chrome শীঘ্রই বন্ধ হবে এবং ডেটা মুছে ফেলা হবে</translation>
 <translation id="4173512894976930765">সাইটগুলি প্রত্যাশা অনুযায়ী কাজ করতে পারে। আপনি সব Chrome উইন্ডো বন্ধ করে দিলে আপনাকে বেশিরভাগ সাইট থেকে সাইন-আউট করে দেওয়া হবে, তবে আপনি Chrome-এ সাইন-ইন করে থাকলে আপনাকে Google অ্যাকাউন্ট থেকে সাইন-আউট করা হবে না।</translation>
 <translation id="4175922240926474352">এই সাইটটি নিরাপদ কানেকশন ব্যবহার করছে না এবং ফাইলটিতে কিছু পরিবর্তন করা হয়ে থাকতে পারে, তাই Chrome এই ডাউনলোডটি ব্লক করে দিয়েছে</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb
index 26724fdc..be2c9d64 100644
--- a/chrome/app/resources/google_chrome_strings_bs.xtb
+++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -262,7 +262,7 @@
 <translation id="4147555960264124640">Prijavljujete se upravljanim računom i dajete njegovom administratoru kontrolu nad svojim Google Chrome profilom. Vaši podaci iz Chromea, kao što su vaše aplikacije, oznake, historija, lozinke i druge postavke, bit će trajno vezani za korisnika <ph name="USER_NAME" />. Moći ćete izbrisati ove podatke na kontrolnoj tabli Google računa, ali nećete moći povezati ove podatke s drugim računom. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Instaliranje…</translation>
 <translation id="4149882025268051530">Aplikacija za instaliranje nije uspjela dekompresirati arhivu. Ponovo preuzmite Google Chrome.</translation>
-<translation id="415112847282352845">Da biste mogli pristupati svojim adresama i drugim podacima na svim svojim uređajima, prijavite se na Chrome Adresa će se spremiti na vaš Google račun nakon što se prijavite.</translation>
+<translation id="415112847282352845">Da dobijate adrese i druge stavke na svim svojim uređajima, prijavite se u Chrome. Ova adresa će se sačuvati na Google račun nakon što se prijavite.</translation>
 <translation id="4153934450158521343">Chrome će se uskoro zatvoriti i izbrisati podatke</translation>
 <translation id="4173512894976930765">Web lokacije vjerovatno neće funkcionirati kako se očekuje. Kada zatvorite sve prozore Chromea, odjavit ćete se s većine web lokacija, osim s Google računa ako ste prijavljeni u Chrome.</translation>
 <translation id="4175922240926474352">Chrome je blokirao ovo preuzimanje jer web lokacija ne koristi sigurnu vezu i fajl je možda neovlašteno izmijenjen</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb
index a059fb7..f1e87c269 100644
--- a/chrome/app/resources/google_chrome_strings_ca.xtb
+++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -258,6 +258,7 @@
 <translation id="4147555960264124640">Esteu a punt d'iniciar la sessió amb un compte gestionat i d'atorgar el control del vostre perfil de Google Chrome a l'administrador corresponent. Les vostres dades de Chrome, com ara aplicacions, adreces d'interès, historial, contrasenyes i altres opcions, s'enllaçaran permanentment amb <ph name="USER_NAME" />. Podreu suprimir aquestes dades mitjançant el tauler de control de comptes de Google, però no les podreu associar amb un altre compte. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">S'està instal·lant...</translation>
 <translation id="4149882025268051530">L'instal·lador no ha pogut descomprimir el fitxer. Torna a baixar Google Chrome.</translation>
+<translation id="415112847282352845">Per obtenir les teves adreces i altres dades en tots els dispositius, inicia la sessió a Chrome. Aquesta adreça es desarà al teu Compte de Google després d'iniciar-hi la sessió.</translation>
 <translation id="4153934450158521343">Chrome es tancarà aviat i les dades se suprimiran</translation>
 <translation id="4173512894976930765">És probable que els llocs web funcionin de la manera prevista. Quan tanquis totes les finestres de Chrome, se't tancarà la sessió de la majoria de llocs web, tret del Compte de Google si tens la sessió iniciada a Chrome.</translation>
 <translation id="4175922240926474352">Chrome ha bloquejat aquesta baixada perquè el lloc web no utilitza una connexió segura i és possible que el fitxer s'hagi manipulat</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb
index 663620ea..8ea26d0 100644
--- a/chrome/app/resources/google_chrome_strings_cs.xtb
+++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">Přihlašujete se pomocí spravovaného účtu a poskytujete jeho správci kontrolu nad vaším profilem Google Chrome. Vaše údaje prohlížeče Chrome, například aplikace, záložky, historie, hesla a jiná nastavení, budou trvale přidružena k účtu <ph name="USER_NAME" />. Tyto údaje budete moci smazat pomocí Hlavního panelu Google, ale nebudete je moci přidružit k jinému účtu. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Instalace...</translation>
 <translation id="4149882025268051530">Instalačnímu programu se nepodařilo rozbalit archiv. Stáhněte prosím Google Chrome ještě jednou.</translation>
+<translation id="415112847282352845">Pokud své adresy a další položky chcete mít na všech svých zařízeních, přihlaste se do Chromu. Tato adresa se po přihlášení uloží do vašeho účtu Google.</translation>
 <translation id="4153934450158521343">Chrome se brzy zavře a smaže data</translation>
 <translation id="4173512894976930765">Weby budou pravděpodobně fungovat podle očekávání. Po zavření všech oken Chromu budete odhlášeni z většiny webů (s výjimkou účtu Google, pokud jste do Chromu přihlášeni).</translation>
 <translation id="4175922240926474352">Chrome toto stahování zablokoval, protože web nepoužívá zabezpečené připojení a se souborem mohl někdo manipulovat</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cy.xtb b/chrome/app/resources/google_chrome_strings_cy.xtb
index 3a1adbf..2895f31 100644
--- a/chrome/app/resources/google_chrome_strings_cy.xtb
+++ b/chrome/app/resources/google_chrome_strings_cy.xtb
@@ -262,6 +262,7 @@
 <translation id="4147555960264124640">Rydych yn mewngofnodi gyda chyfrif a reolir ac yn rhoi rheolaeth dros eich proffil Google Chrome i'w weinyddwr. Bydd eich data Chrome, megis eich apiau, eich nodau tudalen, eich hanes, eich cyfrineiriau, a'ch gosodiadau eraill wedi'u cysylltu'n barhaol â <ph name="USER_NAME" />. Byddwch yn gallu dileu'r data hyn drwy'r Dangosfwrdd Cyfrifon Google, ond ni fyddwch yn gallu cysylltu'r data hyn â chyfrif arall. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Wrthi’n gosod...</translation>
 <translation id="4149882025268051530">Methodd y gosodwr ag anghywasgu archif. Lawrlwythwch Google Chrome eto.</translation>
+<translation id="415112847282352845">I gael eich cyfeiriadau a rhagor ar eich holl ddyfeisiau, mewngofnodwch i Chrome. Bydd y cyfeiriad hwn yn cael ei gadw yn eich Cyfrif Google ar ôl i chi fewngofnodi.</translation>
 <translation id="4153934450158521343">Bydd Chrome yn cau ac yn dileu data yn fuan</translation>
 <translation id="4173512894976930765">Mae'n debyg y bydd gwefannau yn gweithio yn ôl y disgwyl. Byddwch yn cael eich allgofnodi o'r rhan fwyaf o wefannau pan fyddwch yn cau holl ffenestri Chrome, ac eithrio eich Cyfrif Google os ydych wedi mewngofnodi i Chrome.</translation>
 <translation id="4175922240926474352">Gwnaeth Chrome rwystro'r lawrlwythiad hwn oherwydd nad yw'r wefan yn defnyddio cysylltiad diogel ac mae'n bosib bod y ffeil wedi'i hymyrryd â hi</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb
index 78a1a0c5..400fed4 100644
--- a/chrome/app/resources/google_chrome_strings_da.xtb
+++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -258,6 +258,7 @@
 <translation id="4147555960264124640">Du er ved at logge ind med en managerstyret konto og give dens administrator kontrol over din profil i Google Chrome. Dine Chrome-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via kontrolpanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Installerer...</translation>
 <translation id="4149882025268051530">Installationsprogrammet kunne ikke pakke arkivet ud. Download Google Chrome igen.</translation>
+<translation id="415112847282352845">For at kunne se dine adresser m.m. på alle dine enheder skal du logge ind i Chrome. Denne adresse gemmes på din Google-konto, når du er logget ind.</translation>
 <translation id="4153934450158521343">Chrome lukkes snart, og dataene slettes</translation>
 <translation id="4173512894976930765">Websites fungerer sandsynligvis som forventet. Du logges ud af de fleste websites, når du lukker alle Chrome-vinduer, med undtagelse af din Google-konto, hvis du er logget ind i Chrome.</translation>
 <translation id="4175922240926474352">Chrome har blokeret denne download, fordi websitet ikke anvender en sikker forbindelse, og der kan være blevet manipuleret med filen</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 1b6ea49..78fcf1d4 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -257,6 +257,7 @@
 <translation id="4147555960264124640">Du meldest dich mit einem verwalteten Konto an und ermöglichst dessen Administrator Zugriff auf dein Google Chrome-Profil. Deine Chrome-Daten, wie Apps, Lesezeichen, Verlauf, Passwörter und andere Einstellungen, werden dauerhaft mit <ph name="USER_NAME" /> verknüpft. Du kannst diese Daten über das Google Konten-Dashboard löschen, aber nicht mit einem anderen Konto verknüpfen. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Installation wird ausgeführt...</translation>
 <translation id="4149882025268051530">Das Installationsprogramm konnte das Archiv nicht dekomprimieren. Lade Google Chrome erneut herunter.</translation>
+<translation id="415112847282352845">Wenn du auf allen deinen Geräten auf deine Adressen und andere Daten zugreifen möchtest, melde dich in Chrome an. Diese Adresse wird in deinem Google-Konto gespeichert, nachdem du dich angemeldet hast.</translation>
 <translation id="4153934450158521343">Browserdaten in Chrome werden bald gelöscht und der Browser geschlossen</translation>
 <translation id="4173512894976930765">Websites sollten wie erwartet funktionieren. Wenn du alle Chrome-Fenster schließt, wirst du auf den meisten Websites abgemeldet – mit Ausnahme deines Google-Kontos, falls du in Chrome angemeldet bist.</translation>
 <translation id="4175922240926474352">Chrome hat diesen Download blockiert, weil die Website keine verschlüsselte Verbindung verwendet und die Datei möglicherweise manipuliert wurde</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb
index 9b02dbd4..55eed07 100644
--- a/chrome/app/resources/google_chrome_strings_el.xtb
+++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -260,6 +260,7 @@
 <translation id="4147555960264124640">Είστε συνδεδεμένοι με έναν διαχειριζόμενο λογαριασμό και παραχωρείτε στο διαχειριστή του τον έλεγχο του προφίλ σας στο Google Chrome. Τα δεδομένα σας στο Chrome, όπως οι εφαρμογές, οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις θα συνδεθούν μόνιμα με το όνομα χρήστη <ph name="USER_NAME" />. Θα έχετε τη δυνατότητα να διαγράψετε αυτά τα δεδομένα μέσω του Πίνακα ελέγχου των Λογαριασμών Google, αλλά δεν θα μπορείτε να τα συσχετίσετε με άλλο λογαριασμό. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Γίνεται εγκατάσταση...</translation>
 <translation id="4149882025268051530">Η αποσυμπίεση του αρχείου από το πρόγραμμα εγκατάστασης απέτυχε. Κατεβάστε το Google Chrome ξανά.</translation>
+<translation id="415112847282352845">Για να έχετε πρόσβαση στις διευθύνσεις σας και σε άλλα στοιχεία σε όλες τις συσκευές σας, συνδεθείτε στο Chrome. Αυτή η διεύθυνση θα αποθηκευτεί στον Λογαριασμό σας Google μετά τη σύνδεσή σας.</translation>
 <translation id="4153934450158521343">Το Chrome θα κλείσει σύντομα και θα διαγράψει δεδομένα</translation>
 <translation id="4173512894976930765">Οι ιστότοποι πιθανώς θα λειτουργούν με τον αναμενόμενο τρόπο. Θα αποσυνδεθείτε από τους περισσότερους ιστοτόπους όταν κλείσετε όλα τα παράθυρα του Chrome, εκτός από τον Λογαριασμό σας Google εάν είστε συνδεδεμένοι στο Chrome.</translation>
 <translation id="4175922240926474352">Το Chrome απέκλεισε αυτή τη λήψη επειδή ο ιστότοπος δεν χρησιμοποιεί ασφαλή σύνδεση και το αρχείο μπορεί να έχει παραβιαστεί</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb
index bd67e58..6ee4b335 100644
--- a/chrome/app/resources/google_chrome_strings_et.xtb
+++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -260,6 +260,7 @@
 <translation id="4147555960264124640">Logite sisse hallatud kontoga ja annate selle administraatorile üle Google Chrome'i profiili juhtimise. Teie Chrome'i andmed, nagu rakendused, järjehoidjad, ajalugu, paroolid ja muud seaded seotakse jäädavalt kasutajaga <ph name="USER_NAME" />. Saate need andmed Google'i kontode juhtpaneeli kaudu kustutada, kuid te ei saa neid seostada teise kontoga. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Installimine ...</translation>
 <translation id="4149882025268051530">Installijal ei õnnestunud arhiivi lahti pakkida. Palun laadige Google Chrome uuesti alla.</translation>
+<translation id="415112847282352845">Kõigis seadmetes aadresside ja muude võimaluste kasutamiseks logige sisse Chrome’i. See aadress salvestatakse pärast sisselogimist teie Google’i kontole.</translation>
 <translation id="4153934450158521343">Chrome sulgub peagi ja kustutab andmed</translation>
 <translation id="4173512894976930765">Tõenäoliselt töötavad saidid ootuspäraselt. Kui sulgete kõik Chrome'i aknad, logitakse teid välja enamikust saitidest, v.a Google'i kontost, kui olete Chrome'is sisse logitud</translation>
 <translation id="4175922240926474352">Chrome blokeeris selle allalaadimise, kuna sait ei kasuta turvalist ühendust ja faili võidi muuta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb
index dec3776..1b32181 100644
--- a/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">Kontu kudeatu batekin hasten ari zara saioa eta, beraz, Google Chrome-ko zure profilaren gaineko kontrola emango diozu kontuaren administratzaileari. <ph name="USER_NAME" /> erabiltzailearekin iraunkorki lotuko dira zure Chrome datuak, esaterako, aplikazioak, laster-markak eta beste ezarpen batzuk. Datu horiek ezabatzeko, Google-ko kontuen panela erabil dezakezu, baina ezin izango dituzu datuak lotu beste kontu batera. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Instalatzen…</translation>
 <translation id="4149882025268051530">Instalatzaileak ezin izan du artxiboa deskonprimitu. Deskargatu berriro Google Chrome.</translation>
+<translation id="415112847282352845">Helbideak eta bestelako datuak zure gailu guztietan gordeta edukitzeko, hasi saioa Chrome-n. Saioa hasi ondoren, helbide hau zure Google-ko kontuan gordeko da.</translation>
 <translation id="4153934450158521343">Chrome-k arakatze-datuak ezabatuko ditu eta itxi egingo da laster</translation>
 <translation id="4173512894976930765">Webguneek espero bezala funtzionatuko dute ziurrenik. Chrome-ko leiho guztiak ixtean, webgune gehienetako saioa amaituko da Google-ko kontuarena izan ezik, baldin eta Chrome-n saioa hasita badaukazu.</translation>
 <translation id="4175922240926474352">Chrome-k deskarga hau blokeatu du, webgunearen konexioa segurua ez delako eta agian fitxategia manipulatu delako</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index a845d3e..57a9ba71 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -258,6 +258,7 @@
 <translation id="4147555960264124640">Olet kirjautumassa sisään hallinnoidulla tilillä ja antamassa tilin järjestelmänvalvojalle oikeuden hallita Google Chrome -profiiliasi. Chrome-tietosi, kuten sovelluksesi, kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi, yhdistetään pysyvästi käyttäjätiliin <ph name="USER_NAME" />. Voit poistaa nämä tiedot Google-tilien Hallintapaneelissa, mutta et voi liittää tietoja toiseen tiliin. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Asennetaan...</translation>
 <translation id="4149882025268051530">Asennusohjelma ei pystynyt purkamaan arkistotiedostoa. Lataa Google Chrome uudelleen.</translation>
+<translation id="415112847282352845">Kirjaudu sisään Chromeen, niin voit käyttää osoitteita ja muita tietoja kaikilla laitteillasi Tämä osoite tallennetaan Google-tilillesi kirjautumisen jälkeen.</translation>
 <translation id="4153934450158521343">Chrome suljetaan ja data poistetaan pian</translation>
 <translation id="4173512894976930765">Sivustot toimivat todennäköisesti odotetulla tavalla. Sinut kirjataan ulos useimmilta sivustoilta, kun suljet kaikki Chrome-ikkunat. Tämä ei kuitenkaan koske Google-tiliäsi, jos olet kirjautuneena Chromeen.</translation>
 <translation id="4175922240926474352">Chrome on estänyt tämän latauksen, koska sivusto ei käytä suojattua yhteyttä ja tiedostoa on ehkä peukaloitu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb
index f35257d..0ebe19b 100644
--- a/chrome/app/resources/google_chrome_strings_fil.xtb
+++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -262,6 +262,7 @@
 <translation id="4147555960264124640">Nagsa-sign in ka gamit ang isang pinamamahalaang account at nagbibigay sa administrator nito ng kontrol sa iyong profile sa Google Chrome. Permanenteng mauugnay ang iyong data sa Chrome, gaya ng iyong apps, mga bookmark, kasaysayan, password, at iba pang setting sa <ph name="USER_NAME" />. Matatanggal mo ang data na ito sa Google Accounts Dashboard, ngunit hindi mo maiuugnay ang data na ito sa isa pang account. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Ini-install...</translation>
 <translation id="4149882025268051530">Nabigo ang installer sa pag-uncompress ng archive. Paki-download muli ang Google Chrome.</translation>
+<translation id="415112847282352845">Para makuha ang iyong mga address at higit pa sa lahat ng device mo, mag-sign in sa Chrome. Mase-save ang address na ito sa iyong Google Account pagkatapos mong mag-sign in.</translation>
 <translation id="4153934450158521343">Magsasara at magde-delete na ng data ang Chrome sa ilang saglit</translation>
 <translation id="4173512894976930765">Malamang na gagana ang mga site na gaya ng inaasahan. Masa-sign out ka sa karamihan ng mga site kapag isinara mo ang lahat ng window ng Chrome, maliban sa iyong Google Account kung naka-sign in ka sa Chrome.</translation>
 <translation id="4175922240926474352">Na-block ng Chrome ang pag-download na ito dahil hindi gumagamit ng secure na koneksyon ang site at posibleng na-tamper ang file</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb
index dbf64d5..44f6b955e 100644
--- a/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">Vous vous connectez avec un compte géré et donnez le contrôle de votre profil Google Chrome à son administrateur. Vos données Chrome, telles que les applications, les favoris, l'historique, les mots de passe et les autres paramètres, vont être définitivement associées à <ph name="USER_NAME" />. Vous pouvez supprimer ces données via le tableau de bord des comptes Google, mais vous ne pouvez pas les associer à un autre compte. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Installation...</translation>
 <translation id="4149882025268051530">Échec de la décompression de l'archive par le programme d'installation. Veuillez télécharger de nouveau Google Chrome.</translation>
+<translation id="415112847282352845">Pour accéder à vos adresses et plus encore sur tous vos appareils, connectez-vous à Chrome Cette adresse sera enregistrée dans votre compte Google une fois que vous vous serez connecté.</translation>
 <translation id="4153934450158521343">Chrome se fermera bientôt et supprimera les données</translation>
 <translation id="4173512894976930765">Les sites fonctionneront probablement comme prévu. Lorsque vous fermerez toutes les fenêtres Chrome, vous serez déconnecté de la plupart des sites, à l'exception de votre compte Google si vous êtes connecté à Chrome.</translation>
 <translation id="4175922240926474352">Chrome a bloqué ce téléchargement, car le site n'utilise pas une connexion sécurisée et le fichier a peut-être été altéré</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb
index 2cacd77..ffa9031 100644
--- a/chrome/app/resources/google_chrome_strings_it.xtb
+++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -593,7 +593,7 @@
 <translation id="8342675569599923794">Questo file è pericoloso, pertanto è stato bloccato da Chrome.</translation>
 <translation id="8349795646647783032"><ph name="BEGIN_BOLD" />Come utilizziamo questi dati:<ph name="END_BOLD" /> i siti possono memorizzare su Chrome informazioni relative ai tuoi interessi. Ad esempio, se visiti un sito per acquistare scarpe per una maratona, il sito potrebbe definire come tuo interesse le maratone. Se in un secondo momento visiti un altro sito per registrarti a una gara, il sito può mostrarti un annuncio relativo a scarpe da corsa in base ai tuoi interessi.</translation>
 <translation id="8362914115861174987">Traduci in</translation>
-<translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC Tutti i diritti riservati.</translation>
+<translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Tutti i diritti riservati.</translation>
 <translation id="8383226135083126309"><ph name="BEGIN_BOLD" />Come utilizziamo questi dati:<ph name="END_BOLD" /> Chrome può stimare i tuoi interessi. Dopodiché, un sito che visiti può chiedere a Chrome di conoscere i tuoi interessi per personalizzare gli annunci da mostrarti.</translation>
 <translation id="8387459386171870978">Continua a utilizzare Chrome</translation>
 <translation id="8394720698884623075">Controlla gli URL confrontandoli con un elenco di siti non sicuri memorizzato in Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb
index e444550..2a26f8f 100644
--- a/chrome/app/resources/google_chrome_strings_kk.xtb
+++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">Бақыланатын аккаунт арқылы кірдіңіз және оның әкімшісіне Google Chrome профиліңізді бақылау рұқсатын бердіңіз. Қолданбалар, бетбелгілер, журнал, құпия сөздер сияқты Chrome деректеріңіз және басқа параметрлер біржола <ph name="USER_NAME" /> пайдаланушысына байланыстырылады. Бұл деректерді Google аккаунт бақылау тақтасы арқылы жоя аласыз, бірақ бұл деректерді басқа аккаунтмен байланыстыра алмайсыз. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Орнатылуда…</translation>
 <translation id="4149882025268051530">Орнату құралы мұрағаттан шығара алмады. Google Chrome қолданбасын қайта жүктеңіз.</translation>
+<translation id="415112847282352845">Мекенжайлар мен басқа ақпаратты барлық құрылғыдан алу үшін Chrome аккаунтына кіріңіз. Аккаунтқа кіргеннен кейін, бұл мекенжай Google аккаунтыңызға сақталады.</translation>
 <translation id="4153934450158521343">Chrome жақын арада жабылып, деректерді жояды</translation>
 <translation id="4173512894976930765">Сайттар ойдағыдай жұмыс істеуі керек. Chrome-да аккаунтқа кірген болсаңыз, барлық Chrome терезесін жапқан кезде, Google аккаунтын қоспағанда, сайттардың көпшілігінен шығарыласыз.</translation>
 <translation id="4175922240926474352">Chrome жүктеп алуды блоктады, себебі сайтта қауіпсіз байланыс пайдаланылып жатқан жоқ және файл өзгертілген болуы мүмкін.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ky.xtb b/chrome/app/resources/google_chrome_strings_ky.xtb
index 35362f6..f41742c6 100644
--- a/chrome/app/resources/google_chrome_strings_ky.xtb
+++ b/chrome/app/resources/google_chrome_strings_ky.xtb
@@ -262,6 +262,7 @@
 <translation id="4147555960264124640">Башкарылган аккаунт менен кирип, анын администраторуна Google Chrome профилиңизди көзөмөлдөө мүмкүнчүлүгүн берип жатасыз. Колдонмолоруңуз, кыстармалар, таржымал, сырсөздөр жана башка жөндөөлөр сыяктуу Chrome дайын-даректериңиз эми биротоло <ph name="USER_NAME" /> менен байланып калат. Бул дайындарды Google Каттоо эсептеринин Жеке кеңсеси аркылуу жок кылсаңыз болот, бирок башка аккаунтка байланыштыра албайсыз. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Орнотулууда…</translation>
 <translation id="4149882025268051530">Орноткуч архивди чыгара албай койду. Google Chrome'ду кайра жүктөп алыңыз.</translation>
+<translation id="415112847282352845">Бардык түзмөктөрүңүздө даректерди жана башка нерселерди алуу үчүн Chrome'го кириңиз. Киргенден кийин бул дарек Google аккаунтуңузда сакталат.</translation>
 <translation id="4153934450158521343">Chrome жакында жабылып, серептөө дайындары жок кылынат</translation>
 <translation id="4173512894976930765">Сайттар ойдогудай иштеши мүмкүн. Chrome'го кирип турган болсоңуз, Google аккаунтуңуздан башка бардык Chrome терезелерин жапканыңызда көпчүлүк сайттардан чыгарыласыз.</translation>
 <translation id="4175922240926474352">Сайт кооптуу байланышты колдонуп, файл өзгөртүлүшү мүмкүн болгондуктан, Chrome бул жүктөп алууну бөгөттөдү</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb
index ac86c299..4e705eb 100644
--- a/chrome/app/resources/google_chrome_strings_lv.xtb
+++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -259,6 +259,7 @@
 <translation id="4147555960264124640">Jūs pierakstāties ar pārvaldītu kontu un nodrošināt, ka tā administrators var pārvaldīt jūsu Google Chrome profilu. Jūsu Chrome dati, piemēram, lietotnes, grāmatzīmes, vēsture, paroles un citi iestatījumi tiks neatgriezeniski saistīti ar lietotāju <ph name="USER_NAME" />. Varēsiet dzēst šos datus, izmantojot Google kontu informācijas paneli, taču nevarēsiet saistīt šos datus ar citu kontu. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Notiek instalēšana...</translation>
 <translation id="4149882025268051530">Instalētājam neizdevās atarhivēt arhīvu. Lūdzu, vēlreiz lejupielādējiet Google Chrome.</translation>
+<translation id="415112847282352845">Pierakstieties pārlūkā Chrome, lai varētu piekļūt adresēm un citiem datiem visās savās ierīcēs. Šī adrese tiks saglabāta jūsu Google kontā pēc pierakstīšanās.</translation>
 <translation id="4153934450158521343">Chrome drīz tiks aizvērts, un dati tiks izdzēsti</translation>
 <translation id="4173512894976930765">Vietnes, visticamāk, darbosies, kā paredzēts. Aizverot visus Chrome logus, automātiski izrakstīsieties no lielākās daļas vietņu, bet ne no Google konta, ja esat pierakstījies pārlūkā Chrome.</translation>
 <translation id="4175922240926474352">Pārlūkā Chrome šī lejupielāde tika bloķēta, jo vietnē netiek izmantots drošs savienojums un, iespējams, failā ir veiktas izmaiņas.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mk.xtb b/chrome/app/resources/google_chrome_strings_mk.xtb
index 2d164a59e..12caa7b 100644
--- a/chrome/app/resources/google_chrome_strings_mk.xtb
+++ b/chrome/app/resources/google_chrome_strings_mk.xtb
@@ -262,6 +262,7 @@
 <translation id="4147555960264124640">Се најавувате со управувана сметка и на нејзиниот администратор му давате контрола врз вашиот профил на Google Chrome. Вашите податоци на Chrome, како што се апликации, обележувачи, историја, лозинки и други поставки, трајно ќе се поврзат со <ph name="USER_NAME" />. Ќе може да ги избришете податоците преку информациската табла на сметките на Google, но нема да може да ги поврзете со друга сметка. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Се инсталира...</translation>
 <translation id="4149882025268051530">Инсталаторот не успеа да ја декомпримира архивата. Преземете го Google Chrome повторно.</translation>
+<translation id="415112847282352845">За да ги добиете адресите и друго на сите ваши уреди, најавете се на Chrome. Откако ќе се најавите, адресава ќе се зачува во вашата сметка на Google.</translation>
 <translation id="4153934450158521343">Chrome ќе се затвори и ќе ги избрише податоците наскоро</translation>
 <translation id="4173512894976930765">Сајтовите веројатно ќе функционираат според очекувањата. Ќе се одјавите од повеќето сајтови кога ќе ги затворите сите прозорци во Chrome, освен вашата сметка на Google ако сте најавени на Chrome.</translation>
 <translation id="4175922240926474352">Chrome го блокираше преземањево затоа што сајтот не користи безбедна врска, па датотеката може да е неовластено изменета</translation>
diff --git a/chrome/app/resources/google_chrome_strings_my.xtb b/chrome/app/resources/google_chrome_strings_my.xtb
index bd50c02d..669a42f 100644
--- a/chrome/app/resources/google_chrome_strings_my.xtb
+++ b/chrome/app/resources/google_chrome_strings_my.xtb
@@ -262,6 +262,7 @@
 <translation id="4147555960264124640">သင်သည် စီမံခြင်းအကောင့်ဖြင့် ဝင်ရောက်နေခြင်း ဖြစ်ပြီး ၎င်း၏ကြီးကြပ်သူကို Google Chrome ပရိုဖိုင်အား ထိန်းချုပ်ခွင့်ပေးသည်။ အက်ပ်များ၊ စာညှပ်များ၊ မှတ်တမ်း၊ လျှို့ဝှက်စကားလုံးများ၊ နှင့် အခြား ကြိုတင်ချိန်ညှိချက်များကဲ့သို့ Chrome ဒေတာများသည် <ph name="USER_NAME" /> သို့အမြဲတမ်း ချည်နှောင်ထားပါသည်။ ဤဒေတာများကို သင် Google အကောင့်များ ဒိုင်ခွက်မှ တစ်ဆင့် ဖျက်နိုင်သည်၊ သို့သော် ဤဒေတာများကို အခြားအကောင့်ဖြင့် ချိတ်ဆက်၍ရမည် မဟုတ်ပါ။ <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">တပ်ဆင်နေ...</translation>
 <translation id="4149882025268051530">ထည့်သွင်းရန်လုပ်ဆောင်ရာတွင် ချုံ့ထားသောဖိုင်မှတ်တမ်းကို ပြန်ဖွင့်မပေးနိုင်ခဲ့ပါ။ ကျေးဇူးပြု၍ Google Chrome ကို ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation>
+<translation id="415112847282352845">သင့်စက်အားလုံးတွင် လိပ်စာနှင့် အခြားအရာများရယူရန် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။ လက်မှတ်ထိုးဝင်ပြီးနောက် ဤလိပ်စာကို သင့် Google Account တွင် သိမ်းပါမည်။</translation>
 <translation id="4153934450158521343">မကြာမီ Chrome ပိတ်ပြီး ဒေတာဖျက်ပါတော့မည်</translation>
 <translation id="4173512894976930765">ဝဘ်ဆိုက်က မျှော်မှန်းထားသည့်အတိုင်း အလုပ်လုပ်နိုင်သည်။ Chrome ဝင်းဒိုးအားလုံးကို ပိတ်သောအခါ ဝဘ်ဆိုက်အများစုမှ သင်ထွက်သွားမည်။ Chrome သို့ လက်မှတ်ထိုးဝင်ထားပါက သင့် Google Account မှ ထွက်မည်မဟုတ်ပါ။</translation>
 <translation id="4175922240926474352">ဝဘ်ဆိုက်သည် လုံခြုံသောချိတ်ဆက်မှု မသုံးသည့်အပြင် ဖိုင်ကို ကလိထားနိုင်သဖြင့် Chrome က ဤဒေါင်းလုဒ်ကို ပိတ်ထားသည်</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb
index 231e072..3f12a00 100644
--- a/chrome/app/resources/google_chrome_strings_no.xtb
+++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -258,6 +258,7 @@
 <translation id="4147555960264124640">Du er i ferd med å logge deg på med en administrert konto og gir administratoren kontroll over Chrome-profilen din. Chrome-dataene dine, som apper, bokmerker, loggen, passord og andre innstillinger, blir permanent knyttet til <ph name="USER_NAME" />. Du kan slette disse dataene via kontooversikten for Google, men du kan ikke knytte disse dataene til en annen konto. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Installerer …</translation>
 <translation id="4149882025268051530">Installasjonsprogrammet fikk ikke dekomprimert arkivet. Last ned Google Chrome på nytt.</translation>
+<translation id="415112847282352845">For å få adressene dine med mer på alle enhetene dine, logg på Chrome. Denne adressen blir lagret i Google-kontoen din når du logger på.</translation>
 <translation id="4153934450158521343">Chrome lukkes snart og sletter data</translation>
 <translation id="4173512894976930765">Nettsteder fungerer sannsynligvis som forventet. Du blir logget av de fleste nettsteder når du lukker alle Chrome-vinduer, unntatt Google-kontoen din hvis du er logget på Chrome.</translation>
 <translation id="4175922240926474352">Chrome har blokkert denne nedlastingen fordi nettstedet ikke bruker en sikker tilkobling, så filen kan ha blitt tuklet med</translation>
diff --git a/chrome/app/resources/google_chrome_strings_or.xtb b/chrome/app/resources/google_chrome_strings_or.xtb
index c6729cc..21aa833 100644
--- a/chrome/app/resources/google_chrome_strings_or.xtb
+++ b/chrome/app/resources/google_chrome_strings_or.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">ଆପଣ ଏକ ପରିଚାଳିତ ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କରିଛନ୍ତି ଏବଂ ଏହାର ବ୍ୟବସ୍ଥାପକଙ୍କୁ ଆପଣଙ୍କ Google Chrome ପ୍ରୋଫାଇଲ୍‌ର ନିୟନ୍ତ୍ରଣ ଦେଇଛନ୍ତି। ଆପଣଙ୍କର Chrome ଡାଟା ଯେପରିକି, ଆପଣଙ୍କର ଆପ୍ସ, ବୁକ୍‌ମାର୍କ୍‌ଗୁଡ଼ିକ, ଇତିବୃତ୍ତି, ପାସ୍‌ୱାର୍ଡଗୁଡ଼ିକ ଏବଂ ଅନ୍ୟ ସେଟିଂସ୍ ସ୍ଥାୟୀରୂପେ <ph name="USER_NAME" />କୁ ଯୋଡ଼ି ହୋଇଯିବ। ଆପଣ ଏହି ଡାଟାକୁ Google ଆକାଉଣ୍ଟ ଡ୍ୟାସ୍‌ବୋର୍ଡ ମାଧ୍ୟମରେ ଡିଲିଟ୍ କରିପାରିବେ, କିନ୍ତୁ ଆପଣ ଏହି ଡାଟାକୁ ଅନ୍ୟ ଆକାଉଣ୍ଟ ସହିତ ଜଡ଼ିତ କରିପାରିବେ ନାହିଁ। <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">ଇନଷ୍ଟଲ ହେଉଛି...</translation>
 <translation id="4149882025268051530">ସଂସ୍ଥାପକ ଅଭିଲେଖାଗାର ଅଣ ସଙ୍କୁଚିତ କରିବାରେ ବିଫଳ । ଦୟାକରି Google Chrome ପୁନଃ ଡାଉନଲୋଡ୍ କରନ୍ତୁ ।</translation>
+<translation id="415112847282352845">ଆପଣଙ୍କର ସମସ୍ତ ଡିଭାଇସରେ ଆପଣଙ୍କ ଠିକଣା ଏବଂ ଆହୁରି ଅନେକ କିଛି ପାଇବାକୁ Chromeରେ ସାଇନ ଇନ କରନ୍ତୁ। ଆପଣ ସାଇନ ଇନ କରିବା ପରେ ଏହି ଠିକଣା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ ହେବ।</translation>
 <translation id="4153934450158521343">Chrome ଶୀଘ୍ର ବନ୍ଦ ହୋଇ ଡାଟା ଡିଲିଟ କରିବ</translation>
 <translation id="4173512894976930765">ସାଇଟଗୁଡ଼ିକ ସମ୍ଭବତଃ ଆଶା କରାଯାଉଥିବା ପରି କାମ କରିବ। ଯଦି ଆପଣ Chromeରେ ସାଇନ ଇନ କରିଛନ୍ତି ତେବେ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ବ୍ୟତୀତ ଆପଣ ସମସ୍ତ Chrome ୱିଣ୍ଡୋକୁ ବନ୍ଦ କଲେ ଆପଣଙ୍କୁ ଅଧିକାଂଶ ସାଇଟରୁ ସାଇନ ଆଉଟ କରାଯିବ।</translation>
 <translation id="4175922240926474352">Chrome ଏହି ଡାଉନଲୋଡକୁ ବ୍ଲକ କରିଛି କାରଣ ଏହି ସାଇଟ ଏକ ସୁରକ୍ଷିତ କନେକ୍ସନ ବ୍ୟବହାର କରୁ ନାହିଁ ଏବଂ ଫାଇଲଟି ଟେମ୍ପର ହୋଇଥାଇପାରେ</translation>
@@ -646,14 +647,14 @@
 <translation id="8825634023950448068">ଆପଣଙ୍କ ଗୋପନୀୟତାକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ, ଆମେ ଆପଣଙ୍କ 4 ସପ୍ତାହରୁ ଅଧିକ ପୁରୁଣା ରୁଚିଗୁଡ଼ିକୁ ସ୍ୱତଃ-ଡିଲିଟ କରୁ। ଆପଣ ବ୍ରାଉଜ କରିବା ଜାରି ରଖିବା ସମୟରେ, ତାଲିକାରେ ଏକ ରୁଚି ପୁଣି ଦେଖାଯାଇପାରେ। ଏବଂ ଯଦି Chromeର ଭୁଲ ହୁଏ କିମ୍ବା ଆପଣ ନିର୍ଦ୍ଦିଷ୍ଟ ବିଜ୍ଞାପନଗୁଡ଼ିକୁ ଦେଖିବାକୁ ଚାହୁଁନଥାନ୍ତି, ତେବେ ଆପଣ ଏକ ରୁଚିକୁ କାଢ଼ି ଦେଇପାରିବେ।</translation>
 <translation id="8834965163890861871">Google Chrome ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଏଡିଟ୍ କରିବାକୁ ଚେଷ୍ଟା କରୁଛି। ଏହାକୁ ଅନୁମତି ଦେବା ପାଇଁ ଆପଣଙ୍କ Windows ପାସୱାର୍ଡ ଟାଇପ୍ କରନ୍ତୁ।</translation>
 <translation id="8843389967774722327">Chrome ନିୟମିତ ଭାବେ ନୂଆ ଫିଚରଗୁଡ଼ିକ ଯୋଗ କରେ ଯାହା କାର୍ଯ୍ୟଗୁଡ଼ିକୁ ସମ୍ପୂର୍ଣ୍ଣ କରିବାରେ ଆପଣଙ୍କୁ ସାହାଯ୍ୟ କରେ</translation>
-<translation id="8843516219908676469">Chromium ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝିପାରେ ଏବଂ ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରିବ</translation>
+<translation id="8843516219908676469">Chrome ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝି ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରେ</translation>
 <translation id="8851180723659088381">{NUM_EXTENSIONS,plural, =1{ଆପଣ ଏହାକୁ କାଢ଼ି ଦିଅନ୍ତୁ ବୋଲି Chrome ସୁପାରିଶ କରେ}other{ଆପଣ ସେଗୁଡ଼ିକୁ କାଢ଼ି ଦିଅନ୍ତୁ ବୋଲି Chrome ସୁପାରିଶ କରେ}}</translation>
 <translation id="8862326446509486874">ସିଷ୍ଟମ୍-ଲେବଲ୍ ସଂସ୍ଥାପନ ପାଇଁ ଆପଣଙ୍କ ପାଖରେ ଉପଯୁକ୍ତ ଅଧିକାର ନାହିଁ । ବ୍ୟବସ୍ଥାପକ ଭାବରେ ପୁନଃ ସଂସ୍ଥାପକ ଚଳାଇବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ ।</translation>
 <translation id="8908277254462331033">ସୁରକ୍ଷା ଫିଚରଗୁଡ଼ିକୁ ଭ୍ୟୁ କରନ୍ତୁ</translation>
 <translation id="8914504000324227558">Chrome ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ</translation>
 <translation id="8922193594870374009"><ph name="ORIGIN" />ରୁ ଆପଣଙ୍କ Android ଫୋନକୁ ଏକ ନମ୍ବର ପଠାଇବାକୁ, ଉଭୟ ଡିଭାଇସରେ Chromeରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation>
 <translation id="8948460679427074738">ଏହି ଏକ୍ସଟେନସନ ଏହା କିପରି ଡାଟା ସଂଗ୍ରହ ଏବଂ ବ୍ୟବହାର କରେ ପରି ଗୋପନୀୟତା କାର୍ଯ୍ୟଗୁଡ଼ିକ ପବ୍ଲିସ କରିନାହିଁ। ଆପଣ ଏହାକୁ କାଢ଼ି ଦିଅନ୍ତୁ ବୋଲି Chrome ସୁପାରିଶ କରେ।</translation>
-<translation id="8983860655274963234">Chrome ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝିପାରେ ଏବଂ ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରିବ। <ph name="BEGIN_LINK" />Chrome ଅଟୋଫିଲ<ph name="END_LINK" /> ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation>
+<translation id="8983860655274963234">Chrome ଫର୍ମଗୁଡ଼ିକୁ ଭଲ ଭାବରେ ବୁଝି ଆପଣଙ୍କ ପାଇଁ ସେଗୁଡ଼ିକୁ ଶୀଘ୍ର ଅଟୋଫିଲ କରିପାରେ। <ph name="BEGIN_LINK" />Chrome ଅଟୋଫିଲ<ph name="END_LINK" /> ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation>
 <translation id="8986207147630327271">ଆପଣ ଏହି ବ୍ରାଉଜରରେ ଏକ ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଯୋଗ କରୁଛନ୍ତି ଏବଂ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କୁ ସେହି ୱାର୍କ ପ୍ରୋଫାଇଲକୁ କେବଳ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଅନୁମତି ଦେଉଛନ୍ତି।</translation>
 <translation id="8989968390305463310">ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଇତିହାସ ଆପଣ ଦେଖୁଥିବା ବିଜ୍ଞାପନ ଏବଂ ରୁଚିଗୁଡ଼ିକୁ ନିମ୍ନରେ ଆକଳନ କରାଯାଇଥିବା ଅନୁସାରେ ପ୍ରଭାବିତ କରେ। ଆପଣଙ୍କ ଗୋପନୀୟତାକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ, Chrome ପ୍ରତି ମାସରେ ଆପଣଙ୍କ ରୁଚିଗୁଡ଼ିକୁ ପର୍ଯ୍ୟାୟ କ୍ରମେ ସ୍ୱତଃ-ଡିଲିଟ କରେ। ଆପଣ ରୁଚିଗୁଡ଼ିକୁ କାଢ଼ି ନଦେବା ପର୍ଯ୍ୟନ୍ତ ସେଗୁଡ଼ିକ ରିଫ୍ରେସ ହୋଇପାରିବ।</translation>
 <translation id="8999117580775242387">ଯେତେବେଳେ HTTPS ଉପଲବ୍ଧ ନଥାଏ, Chrome ଆପଣଙ୍କୁ ଚେତାବନୀ ନଦେଇ ଏକ ଅସୁରକ୍ଷିତ କନେକ୍ସନ ବ୍ୟବହାର କରିବ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb
index 9714a503..84aa4164 100644
--- a/chrome/app/resources/google_chrome_strings_ru.xtb
+++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -257,6 +257,7 @@
 <translation id="4147555960264124640">Выполнив вход в управляемый аккаунт, вы предоставляете администратору право контролировать настройки вашего профиля Google Chrome. Ваши данные Chrome (приложения, закладки, история, пароли и другие настройки) будут временно связаны с аккаунтом <ph name="USER_NAME" />. Эти данные можно удалить в Личном кабинете Google, но их нельзя связать с другим аккаунтом. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Установка...</translation>
 <translation id="4149882025268051530">Не удалось извлечь файлы из архива. Скачайте Google Chrome заново.</translation>
+<translation id="415112847282352845">Чтобы синхронизировать адреса и другие данные на всех своих устройствах, войдите в Chrome. Затем этот адрес будет сохранен в аккаунте Google.</translation>
 <translation id="4153934450158521343">Chrome скоро будет закрыт, а данные о работе удалены</translation>
 <translation id="4173512894976930765">Вероятно, сайты будут работать правильно. Когда вы закроете все окна браузера Chrome, вы выйдете из аккаунта на большинстве этих сайтов, но останетесь в аккаунте Google, если раньше вошли в Chrome.</translation>
 <translation id="4175922240926474352">Chrome заблокировал скачивание, поскольку подключение к сайту не защищено и файл мог быть изменен</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb
index 4409edc..badb336 100644
--- a/chrome/app/resources/google_chrome_strings_si.xtb
+++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">ඔබ කළමනාකරණය කරන ගිණුමකින් සයින් ඉන් වී එහි පරිපාලකට Google Chrome පැතිකඩේ පාලනය ලබා දෙයි. ඔබේ යෙදුම්, පිටු සලකුණු, රහස් වචන ආදී දත්ත සහ Chrome වෙනත් පසුතල ස්ථිරවම <ph name="USER_NAME" />ට සම්බන්ධ කෙරෙනු ඇත. ඔබට මෙම දත්ත Google Accounts ඩෑෂ්බෝඩ් එකෙන් මැකිය හැකි මුත් වෙනත් ගිණුමක් හා සම්බන්ධ කළ නොහැකි වනු ඇත.<ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">ස්ථාපනය කරමින්...</translation>
 <translation id="4149882025268051530">ස්ථාපකයට සංරක්ෂකය විහිදුවිය නොහැකි විය. කරුණාකර නැවත Google Chrome බාගන්න.</translation>
+<translation id="415112847282352845">ඔබේ සියලු උපාංග මත ඔබේ ලිපින සහ තවත් දේ ලබා ගැනීමට, Chrome වෙත පුරන්න. ඔබ පුරනය වූ පසු මෙම ලිපිනය ඔබේ Google ගිණුම තුළ සුරකිනු ලැබේ.</translation>
 <translation id="4153934450158521343">Chrome ඉක්මනින් වසා දත්ත මකනු ඇත</translation>
 <translation id="4173512894976930765">අඩවි අපේක්ෂා කළ පරිදි ක්‍රියා කරනු ඇත. ඔබ Chrome වෙත පුරනය වී ඇත්නම් ඔබේ Google ගිණුම හැර, ඔබ සියලු Chrome කවුළු වසා දැමූ විට ඔබ බොහෝ අඩවි වලින් වරනු ඇත.</translation>
 <translation id="4175922240926474352">වෙබ් අඩවිය සුරක්ෂිත සබැඳුමක් භාවිතා නොකරන නිසා සහ ගොනුව විකෘති වී ඇති නිසා Chrome මෙම බාගැනීම අවහිර කර ඇත</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sq.xtb b/chrome/app/resources/google_chrome_strings_sq.xtb
index 729785b4..542f486c 100644
--- a/chrome/app/resources/google_chrome_strings_sq.xtb
+++ b/chrome/app/resources/google_chrome_strings_sq.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">Po identifikohesh me një llogari të menaxhuar dhe po i jep administratorit të saj kontroll mbi profilin tënd të Google Chrome. Të dhënat e tua të Chrome, siç janë aplikacionet, faqeshënuesit, fjalëkalimet dhe cilësime të tjera do të lidhen në mënyrë të përhershme me <ph name="USER_NAME" />. Ti do të jesh në gjendje t'i fshish këto të dhëna përmes Panelit të llogarive të Google, por nuk do të jesh në gjendje t'i shoqërosh këto të dhëna me një llogari tjetër. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Po instalohet...</translation>
 <translation id="4149882025268051530">Instaluesi nuk arriti ta nxjerrë arkivin. Shkarko përsëri Google Chrome.</translation>
+<translation id="415112847282352845">Për të marrë adresat etj. në të gjitha pajisjet e tua, identifikohu në Chrome. Kjo adresë do të ruhet në "Llogarinë tënde të Google" pasi të identifikohesh.</translation>
 <translation id="4153934450158521343">Chrome do të mbyllet dhe do t'i fshijë të dhënat së shpejti</translation>
 <translation id="4173512894976930765">Sajtet ndoshta do të punojnë siç pritet. Do të dalësh nga shumica e sajteve kur të mbyllësh të gjitha dritaret e Chrome, përveçse nga "Llogaria jote e Google" nëse je identifikuar në Chrome.</translation>
 <translation id="4175922240926474352">Chrome e bllokoi këtë shkarkim sepse sajti nuk po përdor një lidhje të sigurt dhe mund të ketë pasur ndërhyrje te skedari</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
index e70a523..f8ab9a4 100644
--- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -528,6 +528,7 @@
 <translation id="7572537927358445944">Isključeno • Chrome ne može da proveri odakle potiče ovaj dodatak</translation>
 <translation id="7583399374488819119"><ph name="COMPANY_NAME" /> program za instalaciju</translation>
 <translation id="7606334485649076285">Google Chrome OS Flex</translation>
+<translation id="7617512710641355143">Chrome-om se upravlja</translation>
 <translation id="7626032353295482388">Dobro došli u Chrome</translation>
 <translation id="7626072681686626474"><ph name="MANAGER" /> zahteva da pročitate i prihvatite sledeće Uslove korišćenja usluge pre korišćenja ovog uređaja. Ovi uslovi ne proširuju, menjaju niti ograničavaju Uslove za Google Chrome OS.</translation>
 <translation id="7629695634924605473">Chrome vas obaveštava ako su lozinke ugrožene</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index c9d6a2e..485cf44 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -528,6 +528,7 @@
 <translation id="7572537927358445944">Искључено • Chrome не може да провери одакле потиче овај додатак</translation>
 <translation id="7583399374488819119"><ph name="COMPANY_NAME" /> програм за инсталацију</translation>
 <translation id="7606334485649076285">Google Chrome OS Flex</translation>
+<translation id="7617512710641355143">Chrome-ом се управља</translation>
 <translation id="7626032353295482388">Добро дошли у Chrome</translation>
 <translation id="7626072681686626474"><ph name="MANAGER" /> захтева да прочитате и прихватите следеће Услове коришћења услуге пре коришћења овог уређаја. Ови услови не проширују, мењају нити ограничавају Услове за Google Chrome OС.</translation>
 <translation id="7629695634924605473">Chrome вас обавештава ако су лозинке угрожене</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb
index 01c0317..d4ee97e 100644
--- a/chrome/app/resources/google_chrome_strings_sv.xtb
+++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -262,6 +262,7 @@
 <translation id="4147555960264124640">Du loggar in med ett hanterat konto och ger dess administratör kontroll över din Google Chrome-profil. Dina Chrome-uppgifter, t.ex. dina appar, bokmärken, din historik, dina lösenord och andra inställningar, knyts permanent till <ph name="USER_NAME" />. Du kommer att kunna ta bort dessa uppgifter via instrumentpanelen i Google Konton, men du kommer inte att kunna koppla dessa uppgifter till ett annat konto. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Installerar...</translation>
 <translation id="4149882025268051530">Det gick inte att packa upp arkivet med installationsfilen. Ladda ned Google Chrome igen.</translation>
+<translation id="415112847282352845">Logga in i Chrome om du vill få tillgång till dina adresser med mera på alla dina enheter. Adressen sparas i ditt Google-konto när du har loggat in.</translation>
 <translation id="4153934450158521343">Chrome avslutas snart och data raderas</translation>
 <translation id="4173512894976930765">Webbplatser bör fungera som förväntat. Du loggas ut från de flesta webbplatser när du stänger alla fönster i Chrome, med undantag för Google-kontot om du är inloggad i Chrome.</translation>
 <translation id="4175922240926474352">Den här nedladdningen blockerades av Chrome eftersom webbplatsen inte använder en säker anslutning och filen kan ha manipulerats</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb
index 295a291..19ca737 100644
--- a/chrome/app/resources/google_chrome_strings_ta.xtb
+++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -258,6 +258,7 @@
 <translation id="4147555960264124640">நீங்கள் நிர்வகிக்கப்படும் கணக்கு மூலம் உள்நுழைகிறீர்கள், மேலும் அதன் நிர்வாகிக்கு உங்கள் Google Chrome சுயவிவரத்தின் கட்டுப்பாட்டை வழங்குகிறீர்கள். உங்கள் ஆப்ஸ், புக்மார்க்குகள், வரலாறு, கடவுச்சொற்கள் போன்ற உங்கள் Chrome தரவு மற்றும் பிற அமைப்புகள் நிரந்தரமாக <ph name="USER_NAME" /> உடன் இணைக்கப்படும். இந்தத் தரவை Google கணக்குகளின் டாஷ்போர்டு வழியாக நீக்க முடியும், ஆனால் இந்தத் தரவை வேறொரு கணக்குடன் தொடர்புப்படுத்த முடியாது. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">நிறுவுகிறது...</translation>
 <translation id="4149882025268051530">காப்பகத்தை விரிவுபடுத்துவதில் இன்ஸ்டாலர் தோல்வியுற்றது. Google Chromeமை மீண்டும் பதிவிறக்குக.</translation>
+<translation id="415112847282352845">முகவரிகள் மற்றும் பலவற்றை உங்கள் சாதனங்கள் எல்லாவற்றிலும் பெற Chromeமில் உள்நுழையுங்கள். நீங்கள் உள்நுழைந்த பிறகு உங்கள் Google கணக்கில் இந்த முகவரி சேமிக்கப்படும்.</translation>
 <translation id="4153934450158521343">Chrome விரைவில் மூடப்படுவதுடன் தரவும் நீக்கப்படும்</translation>
 <translation id="4173512894976930765">தளங்கள் எதிர்பார்த்தபடி செயல்படும். ஆனால், Chrome சாளரங்கள் அனைத்தையும் மூடும்போது பெரும்பாலான தளங்களில் (Chromeமில் உள்நுழைந்திருந்தால் உங்களின் Google கணக்கைத் தவிர) இருந்து வெளியேறிவிடுவீர்கள்.</translation>
 <translation id="4175922240926474352">இந்தத் தளம் பாதுகாப்பான இணைப்பைப் பயன்படுத்தவில்லை என்பதுடன் ஃபைலும் சிதைந்து இருக்கலாம் என்பதால் இந்தப் பதிவிறக்கத்தை Chrome தடுத்துள்ளது</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb
index 74637c4..e71fa7b 100644
--- a/chrome/app/resources/google_chrome_strings_tr.xtb
+++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -257,6 +257,7 @@
 <translation id="4147555960264124640">Yönetilen bir hesapla oturum açıyor ve hesabın yöneticisine Google Chrome profilinizi denetleme izni veriyorsunuz. Uygulamalarınız, yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız gibi Chrome verileriniz kalıcı olarak <ph name="USER_NAME" /> ile bağlantılandırılacaktır. Google Hesapları Hesap Özeti'ni kullanarak bu verileri silebilecek, ancak bu verileri başka bir hesapla ilişkilendiremeyeceksiniz.<ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Yükleniyor...</translation>
 <translation id="4149882025268051530">Yükleyici arşivi açamadı. Lütfen Google Chrome'u yeniden indirin.</translation>
+<translation id="415112847282352845">Adreslerinizi ve diğer öğelerinizi tüm cihazlarınızda kullanmak için Chrome'da oturum açın Bu adres, oturum açtıktan sonra Google Hesabınıza kaydedilir.</translation>
 <translation id="4153934450158521343">Chrome yakında kapanacak ve verileri silecek</translation>
 <translation id="4173512894976930765">Siteler muhtemelen beklendiği gibi çalışır. Tüm Chrome pencerelerini kapattığınızda çoğu sitedeki oturumunuz kapatılır. Chrome'da oturum açtıysanız Google Hesabınız buna dahil değildir.</translation>
 <translation id="4175922240926474352">Sitede güvenli bağlantı kullanılmadığı ve dosya üzerinde oynanmış olabileceği için Chrome bu indirme işlemini engelledi</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb
index 07d7de7..de0aceb9 100644
--- a/chrome/app/resources/google_chrome_strings_uk.xtb
+++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -258,6 +258,7 @@
 <translation id="4147555960264124640">Ви входите, використовуючи дані облікового запису, яким керує адміністратор. Адміністратор може контролювати ваш профіль Google Chrome. Ваші дані Chrome, як-от програми, закладки, історія, паролі й інші налаштування, буде назавжди пов’язано з обліковим записом <ph name="USER_NAME" />. Ці дані можна видалити на інформаційній панелі Облікових записів Google, але ви не зможете пов’язати їх з іншим обліковим записом. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Встановлення...</translation>
 <translation id="4149882025268051530">Не вдалося відкрити архів за допомогою програми встановлення. Завантажте Google Chrome ще раз.</translation>
+<translation id="415112847282352845">Щоб отримати доступ до адрес і інших даних на всіх своїх пристроях, увійдіть у Chrome. Після входу цю адресу буде збережено в обліковому записі Google.</translation>
 <translation id="4153934450158521343">Незабаром Chrome закриється і видалить дані веб-перегляду</translation>
 <translation id="4173512894976930765">Сайти мають працювати належним чином. Якщо ви закриєте всі вікна Chrome, то вийдете з облікових записів на більшості сайтів, але не з облікового запису Google (за умови, що ви ввійшли в Chrome).</translation>
 <translation id="4175922240926474352">Веб-переглядач Chrome заблокував завантаження, оскільки цей сайт використовує ненадійне з’єднання й файл може бути підробленим</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
index c7fd0e19..7350cd1 100644
--- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -257,6 +257,7 @@
 <translation id="4147555960264124640">您目前登录的账号是一个受管理账号,该账号的管理员将能够控制您的 Google Chrome 个人资料。您的 Chrome 数据(例如您的应用、书签、历史记录、密码和其他设置)将永远与 <ph name="USER_NAME" /> 相关联。您可以通过 Google 账号信息中心删除这些数据,但无法将这些数据与其他账号相关联。<ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">正在安装...</translation>
 <translation id="4149882025268051530">安装程序无法解压缩存档文件。请重新下载 Google Chrome。</translation>
+<translation id="415112847282352845">如需将您的地址等信息同步到您的所有设备上,请登录 Chrome。登录后,该地址将保存到您的 Google 账号。</translation>
 <translation id="4153934450158521343">Chrome 即将关闭并删除数据</translation>
 <translation id="4173512894976930765">网站很可能会按预期运行。关闭所有 Chrome 窗口后,您将会从大多数网站退出账号;但如果您已登录 Chrome,则您的 Google 账号不会退出。</translation>
 <translation id="4175922240926474352">由于网站未使用安全连接,且文件可能已被篡改,因此 Chrome 阻止了此次下载</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zu.xtb b/chrome/app/resources/google_chrome_strings_zu.xtb
index b8e7b167..db7b128 100644
--- a/chrome/app/resources/google_chrome_strings_zu.xtb
+++ b/chrome/app/resources/google_chrome_strings_zu.xtb
@@ -261,6 +261,7 @@
 <translation id="4147555960264124640">Ungena ngemvume nge-akhawunti ephethwe futhi unikeza umlawuli wayo ukulawula okungaphezulu kwephrofayela yakho ye-Google Chrome. Idatha yakho ye-Chrome, efana nezinhlelo zokusebenza zakho, amabhukhimakhi, umlando, amaphasiwedi, nezinye izilungiselelo zizoboshezelwa ngonaphakade ku-<ph name="USER_NAME" />. Uzokwazi ukususa le datha nge-Google ama-Akhawunti we-Ideshibhodi, kodwa ngeke uze ukwazi ukuhlobanisa le datha nenye i-akhawunti. <ph name="LEARN_MORE" /></translation>
 <translation id="4148957013307229264">Iyafaka...</translation>
 <translation id="4149882025268051530">Isifaki sihlulekile ukungaminyanisi ingobo yomlando. Sicela ulande i-Google Chrome futhi.</translation>
+<translation id="415112847282352845">Ukuze uthole amakheli akho nokwengeziwe kuwo wonke amadivayisi akho, ngena ngemvume kuChrome. Leli kheli lizolondolozwa kuGoogle Account yakho ngemva kokungena ngemvume.</translation>
 <translation id="4153934450158521343">I-Chrome izovala maduzane futhi isule idatha</translation>
 <translation id="4173512894976930765">Amasayithi cishe azosebenza njengokulindelwe. Uzophuma ngemvume kumasayithi amaningi uma uvala wonke amawindi e-Chrome, ngaphandle kwe-Google Account yakho uma ungene ngemvume ku-Chrome.</translation>
 <translation id="4175922240926474352">I-Chrome ivimbele lokhu kulanda ngoba isayithi alisebenzisi uxhumano oluvikelekile futhi kungenzeka ukuthi ifayela lonaniwe.</translation>
diff --git a/chrome/browser/android/compositor/layer/tab_handle_layer.cc b/chrome/browser/android/compositor/layer/tab_handle_layer.cc
index c2d534d..5144d08 100644
--- a/chrome/browser/android/compositor/layer/tab_handle_layer.cc
+++ b/chrome/browser/android/compositor/layer/tab_handle_layer.cc
@@ -282,7 +282,6 @@
       end_divider_(cc::slim::UIResourceLayer::Create()),
       decoration_tab_(cc::slim::NinePatchLayer::Create()),
       tab_outline_(cc::slim::NinePatchLayer::Create()),
-      brightness_(1.0f),
       foreground_(false) {
   decoration_tab_->SetIsDrawable(true);
 
diff --git a/chrome/browser/android/compositor/layer/tab_handle_layer.h b/chrome/browser/android/compositor/layer/tab_handle_layer.h
index 48e4672..fdd8fd8 100644
--- a/chrome/browser/android/compositor/layer/tab_handle_layer.h
+++ b/chrome/browser/android/compositor/layer/tab_handle_layer.h
@@ -75,7 +75,6 @@
   scoped_refptr<cc::slim::NinePatchLayer> tab_outline_;
   scoped_refptr<cc::slim::Layer> title_layer_;
 
-  float brightness_;
   float opacity_;
   bool foreground_;
 };
diff --git a/chrome/browser/apps/guest_view/app_view_browsertest.cc b/chrome/browser/apps/guest_view/app_view_browsertest.cc
index 05ca09d..f1a2be1 100644
--- a/chrome/browser/apps/guest_view/app_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/app_view_browsertest.cc
@@ -303,8 +303,11 @@
   TestHelper("testBasicConnect", "app_view/shim", skeleton_app->id(),
              NO_TEST_SERVER);
 
-  auto* guest_rfh =
-      test_guest_view_manager()->WaitForSingleGuestRenderFrameHostCreated();
+  auto* guest = test_guest_view_manager()->WaitForSingleGuestViewCreated();
+  test_guest_view_manager()->WaitUntilAttached(guest);
+  content::WaitForLoadStop(guest->web_contents());
+  auto* guest_rfh = guest->GetGuestMainFrame();
+
   // Try to open new windows. Since it's inside an appview, nothing should
   // happen.
   EXPECT_TRUE(content::ExecJs(guest_rfh, "window.open('', 'attempt1');"));
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index c872a32..14add0a 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -2369,9 +2369,10 @@
                          "document.body.appendChild(w);",
                          failure_url)));
   GetGuestViewManager()->WaitForSingleGuestRenderFrameHostCreated();
+  auto* guest = GetGuestViewManager()->GetLastGuestViewCreated();
+  GetGuestViewManager()->WaitUntilAttached(guest);
 
   // The navigation should fail and show an interstitial in the guest.
-  auto* guest = GetGuestViewManager()->GetLastGuestViewCreated();
   EXPECT_FALSE(WaitForLoadStop(guest->web_contents()));
   ASSERT_TRUE(guest->GetGuestMainFrame()->IsErrorDocument());
   ASSERT_TRUE(chrome_browser_interstitials::IsShowingInterstitial(
@@ -3043,7 +3044,13 @@
 // have an opener relationship, and ensures that we can shutdown safely. See
 // https://crbug.com/1450397.
 IN_PROC_BROWSER_TEST_P(WebViewNewWindowTest, DestroyOpenerBeforeAttachment) {
-  SKIP_FOR_MPARCH();  // TODO(crbug.com/40202416): Enable test for MPArch.
+  // This test doesn't work with MPArch based <webview>s as they can't navigate
+  // before attachment is complete. The scenario this test attempts to repro is
+  // not possible if the guest can't navigate before attachment (it will not be
+  // able to open a window before attachment).
+  // TODO(crbug.com/40202416): Remove this test entirely when we remove the
+  // inner WebContents implementation.
+  SKIP_FOR_MPARCH();
 
   TestHelper("testDestroyOpenerBeforeAttachment", "web_view/newwindow",
              NEEDS_TEST_SERVER);
@@ -7223,6 +7230,7 @@
   LoadAppWithGuest("web_view/simple");
   guest_view::GuestViewBase* guest = GetGuestView();
   ASSERT_TRUE(guest);
+  GetGuestViewManager()->WaitUntilAttached(guest);
 
   // Navigate <webview> to a cross-site page with a same-site iframe.
   const GURL start_url =
@@ -7243,6 +7251,7 @@
   GetGuestViewManager()->WaitForNumGuestsCreated(2u);
   auto* guest2 = GetGuestViewManager()->GetLastGuestViewCreated();
   ASSERT_NE(guest, guest2);
+  GetGuestViewManager()->WaitUntilAttached(guest2);
 
   // Navigate second <webview> cross-site.  Use NavigateToURL() to swap
   // BrowsingInstances.
diff --git a/chrome/browser/ash/app_mode/kiosk_system_web_app_browsertest.cc b/chrome/browser/ash/app_mode/kiosk_system_web_app_browsertest.cc
index 9df59852..b4d2b31 100644
--- a/chrome/browser/ash/app_mode/kiosk_system_web_app_browsertest.cc
+++ b/chrome/browser/ash/app_mode/kiosk_system_web_app_browsertest.cc
@@ -20,10 +20,6 @@
   KioskSystemWebAppTestDisabled& operator=(
       const KioskSystemWebAppTestDisabled&) = delete;
 
-  Profile* GetProfile() {
-    return BrowserList::GetInstance()->get(0)->profile();
-  }
-
  protected:
   void SetUpSystemWebApps() {
     installation_ =
@@ -51,21 +47,21 @@
 IN_PROC_BROWSER_TEST_F(KioskSystemWebAppTestDisabled,
                        ShouldNotLaunchSystemWebApp) {
   InitializeRegularOnlineKiosk();
-  EXPECT_EQ(SystemWebAppManager::Get(GetProfile()), nullptr);
+  EXPECT_EQ(SystemWebAppManager::Get(profile()), nullptr);
 }
 
 IN_PROC_BROWSER_TEST_F(KioskSystemWebAppTestEnabled, LaunchSystemWebApp) {
   InitializeRegularOnlineKiosk();
-  ASSERT_TRUE(SystemWebAppManager::Get(GetProfile()));
+  ASSERT_TRUE(SystemWebAppManager::Get(profile()));
   installation_->WaitForAppInstall();
 
   content::TestNavigationObserver navigation_observer(
       installation_->GetAppUrl());
   navigation_observer.StartWatchingNewWebContents();
-  LaunchSystemWebAppAsync(GetProfile(), installation_->GetType());
+  LaunchSystemWebAppAsync(profile(), installation_->GetType());
   navigation_observer.Wait();
   Browser* swa_browser =
-      FindSystemWebAppBrowser(GetProfile(), installation_->GetType());
+      FindSystemWebAppBrowser(profile(), installation_->GetType());
   EXPECT_NE(swa_browser, nullptr);
 }
 
diff --git a/chrome/browser/ash/app_mode/kiosk_troubleshooting_tools_browsertest.cc b/chrome/browser/ash/app_mode/kiosk_troubleshooting_tools_browsertest.cc
index 965b919..3a927d86 100644
--- a/chrome/browser/ash/app_mode/kiosk_troubleshooting_tools_browsertest.cc
+++ b/chrome/browser/ash/app_mode/kiosk_troubleshooting_tools_browsertest.cc
@@ -117,7 +117,7 @@
   Browser* OpenForAppPopupBrowser() const {
     profile()->GetPrefs()->SetBoolean(prefs::kNewWindowsInKioskAllowed, true);
     Browser::CreateParams params = Browser::CreateParams::CreateForAppPopup(
-        /*app_name=*/initial_browser()->app_name(), /*trusted_source=*/true,
+        /*app_name=*/kiosk_app_browser()->app_name(), /*trusted_source=*/true,
         /*window_bounds=*/gfx::Rect(), /*profile=*/profile(),
         /*user_gesture=*/true);
     Browser* new_browser = Browser::Create(params);
@@ -134,16 +134,6 @@
     return widget->widget_delegate()->CanResize();
   }
 
-  Profile* profile() const { return initial_browser()->profile(); }
-
-  Browser* initial_browser() const {
-    return BrowserList::GetInstance()->get(0);
-  }
-
-  KioskSystemSession* kiosk_system_session() const {
-    return KioskController::Get().GetKioskSystemSession();
-  }
-
   task_manager::TaskManagerView* GetTaskManagerView() const {
     return task_manager::TaskManagerView::GetInstanceForTests();
   }
@@ -160,7 +150,7 @@
 
   UpdateTroubleshootingToolsPolicy(/*enable=*/true);
   EnableDevTools();
-  DevToolsWindowTesting::OpenDevToolsWindowSync(initial_browser(),
+  DevToolsWindowTesting::OpenDevToolsWindowSync(kiosk_app_browser(),
                                                 /*is_docked=*/false);
   ExpectOpenBrowser(chromeos::KioskBrowserWindowType::kOpenedDevToolsBrowser);
 
@@ -177,7 +167,7 @@
   UpdateTroubleshootingToolsPolicy(/*enable=*/true);
 
   // Devtools are not enabled, but disabled by default.
-  DevToolsWindowTesting::OpenDevToolsWindowSync(initial_browser(),
+  DevToolsWindowTesting::OpenDevToolsWindowSync(kiosk_app_browser(),
                                                 /*is_docked=*/false);
 
   ExpectOnlyKioskAppOpen();
@@ -190,7 +180,7 @@
   ExpectOnlyKioskAppOpen();
 
   EnableDevTools();
-  DevToolsWindowTesting::OpenDevToolsWindowSync(initial_browser(),
+  DevToolsWindowTesting::OpenDevToolsWindowSync(kiosk_app_browser(),
                                                 /*is_docked=*/false);
   ExpectOnlyKioskAppOpen();
 
@@ -227,7 +217,7 @@
   ExpectOnlyKioskAppOpen();
   EnableDevTools();
 
-  DevToolsWindowTesting::OpenDevToolsWindowSync(initial_browser(),
+  DevToolsWindowTesting::OpenDevToolsWindowSync(kiosk_app_browser(),
                                                 /*is_docked=*/false);
 
   EmulateOpenNewWindowShortcutPressed();
@@ -253,7 +243,7 @@
   // The main browser should not be resizable.
   EXPECT_FALSE(IsLactActiveBrowserResizable());
 
-  DevToolsWindowTesting::OpenDevToolsWindowSync(initial_browser(),
+  DevToolsWindowTesting::OpenDevToolsWindowSync(kiosk_app_browser(),
                                                 /*is_docked=*/false);
   EXPECT_TRUE(IsLactActiveBrowserResizable());
 
diff --git a/chrome/browser/ash/app_mode/test/BUILD.gn b/chrome/browser/ash/app_mode/test/BUILD.gn
index 12ca3773..c639e0c 100644
--- a/chrome/browser/ash/app_mode/test/BUILD.gn
+++ b/chrome/browser/ash/app_mode/test/BUILD.gn
@@ -11,6 +11,7 @@
   defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
   sources = [
     "kiosk_browsertest.cc",
+    "kiosk_chrome_app_browsertest.cc",
     "kiosk_file_system_volumes_browsertest.cc",
     "kiosk_web_app_offline_enabled_browsertest.cc",
     "new_windows_in_kiosk_allowed_browsertest.cc",
@@ -26,6 +27,7 @@
     "//chrome/test:test_support",
     "//chrome/test:test_support_ui",
     "//content/test:test_support",
+    "//extensions/components/native_app_window",
     "//testing/gtest",
     "//ui/events:test_support",
   ]
diff --git a/chrome/browser/ash/app_mode/test/DEPS b/chrome/browser/ash/app_mode/test/DEPS
index 103ce38..0dfb334b 100644
--- a/chrome/browser/ash/app_mode/test/DEPS
+++ b/chrome/browser/ash/app_mode/test/DEPS
@@ -9,4 +9,5 @@
   "+chrome/browser/ui/webui/ash/login/error_screen_handler.h",
   "+chrome/browser/ui/webui/ash/login/gaia_screen_handler.h",
   "+chrome/browser/ui/webui/ash/login/oobe_ui.h",
+  "+extensions/components/native_app_window/native_app_window_views.h",
 ]
diff --git a/chrome/browser/ash/app_mode/test/kiosk_chrome_app_browsertest.cc b/chrome/browser/ash/app_mode/test/kiosk_chrome_app_browsertest.cc
new file mode 100644
index 0000000..44e20f5
--- /dev/null
+++ b/chrome/browser/ash/app_mode/test/kiosk_chrome_app_browsertest.cc
@@ -0,0 +1,146 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <cstddef>
+#include <optional>
+#include <string>
+#include <string_view>
+#include <vector>
+
+#include "apps/test/app_window_waiter.h"
+#include "base/check.h"
+#include "base/check_deref.h"
+#include "chrome/browser/ash/app_mode/kiosk_app.h"
+#include "chrome/browser/ash/app_mode/kiosk_app_types.h"
+#include "chrome/browser/ash/app_mode/kiosk_chrome_app_manager.h"
+#include "chrome/browser/ash/app_mode/kiosk_controller.h"
+#include "chrome/browser/ash/app_mode/test/kiosk_mixin.h"
+#include "chrome/browser/ash/app_mode/test/kiosk_test_utils.h"
+#include "chrome/browser/ash/login/app_mode/test/kiosk_base_test.h"
+#include "chrome/browser/chromeos/app_mode/kiosk_web_app_install_util.h"
+#include "chrome/browser/ui/ash/login/login_display_host.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/mixin_based_in_process_browser_test.h"
+#include "content/public/test/browser_test.h"
+#include "extensions/browser/app_window/app_window.h"
+#include "extensions/browser/app_window/app_window_registry.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/components/native_app_window/native_app_window_views.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/views/window/non_client_view.h"
+
+namespace ash {
+
+namespace {
+
+using kiosk::test::CurrentProfile;
+using kiosk::test::TheKioskChromeApp;
+
+ManifestLocation InstallationSource(Profile& profile, std::string_view app_id) {
+  auto& chrome_app = CHECK_DEREF(
+      extensions::ExtensionRegistry::Get(&profile)->GetInstalledExtension(
+          std::string(app_id)));
+  return chrome_app.location();
+}
+
+KioskChromeAppManager::App GetAppFromManager(const KioskApp& app) {
+  KioskChromeAppManager::App chrome_app;
+  CHECK(KioskChromeAppManager::Get()->GetApp(app.id().app_id.value(),
+                                             &chrome_app));
+  return chrome_app;
+}
+
+}  // namespace
+
+// Verifies generic Chrome app features in Kiosk.
+class KioskChromeAppTest : public MixinBasedInProcessBrowserTest {
+ public:
+  KioskChromeAppTest() = default;
+  KioskChromeAppTest(const KioskChromeAppTest&) = delete;
+  KioskChromeAppTest& operator=(const KioskChromeAppTest&) = delete;
+  ~KioskChromeAppTest() override = default;
+
+  void SetUpOnMainThread() override {
+    MixinBasedInProcessBrowserTest::SetUpOnMainThread();
+    ASSERT_TRUE(kiosk_.WaitSessionLaunched());
+  }
+
+  KioskMixin kiosk_{&mixin_host_,
+                    /*cached_configuration=*/KioskMixin::Config{
+                        /*name=*/{},
+                        KioskMixin::AutoLaunchAccount{
+                            KioskMixin::SimpleChromeAppOption().account_id},
+                        {KioskMixin::SimpleChromeAppOption()}}};
+};
+
+IN_PROC_BROWSER_TEST_F(KioskChromeAppTest, InstallsAppFromPolicy) {
+  EXPECT_EQ(ManifestLocation::kExternalPolicy,
+            InstallationSource(CurrentProfile(),
+                               TheKioskChromeApp().id().app_id.value()));
+}
+
+// Covers crbug.com/1235334.
+IN_PROC_BROWSER_TEST_F(KioskChromeAppTest, AppWindowIsFullScreen) {
+  auto& registry =
+      CHECK_DEREF(extensions::AppWindowRegistry::Get(&CurrentProfile()));
+  auto& window = CHECK_DEREF(
+      apps::AppWindowWaiter(&registry, TheKioskChromeApp().id().app_id.value())
+          .Wait());
+  auto& views =
+      CHECK_DEREF(static_cast<native_app_window::NativeAppWindowViews*>(
+          window.GetBaseWindow()));
+
+  // `frame_view` and `client_view` should have the same bounds.
+  auto& non_client_view = CHECK_DEREF(views.widget()->non_client_view());
+  auto& frame_view = CHECK_DEREF(non_client_view.frame_view());
+  auto& client_view = CHECK_DEREF(non_client_view.client_view());
+  EXPECT_EQ(frame_view.bounds(), client_view.bounds());
+}
+
+// Verifies the `was_auto_launched_with_zero_delay` flag is set correctly.
+class KioskAutoLaunchWithZeroDelayTest
+    : public MixinBasedInProcessBrowserTest,
+      public testing::WithParamInterface<KioskMixin::Config> {
+ public:
+  KioskAutoLaunchWithZeroDelayTest() = default;
+  KioskAutoLaunchWithZeroDelayTest(const KioskAutoLaunchWithZeroDelayTest&) =
+      delete;
+  KioskAutoLaunchWithZeroDelayTest& operator=(
+      const KioskAutoLaunchWithZeroDelayTest&) = delete;
+  ~KioskAutoLaunchWithZeroDelayTest() override = default;
+
+  bool HasAutoLaunchApp() {
+    return GetParam().auto_launch_account_id.has_value();
+  }
+
+  KioskMixin kiosk_{&mixin_host_,
+                    /*cached_configuration=*/GetParam()};
+};
+
+IN_PROC_BROWSER_TEST_P(KioskAutoLaunchWithZeroDelayTest, SetsFlagCorrectly) {
+  if (!HasAutoLaunchApp()) {
+    ASSERT_TRUE(kiosk_.LaunchManually(TheKioskChromeApp()));
+  }
+  ASSERT_TRUE(kiosk_.WaitSessionLaunched());
+
+  auto app = GetAppFromManager(TheKioskChromeApp());
+  EXPECT_EQ(app.was_auto_launched_with_zero_delay, HasAutoLaunchApp());
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    KioskAutoLaunchWithZeroDelayTest,
+    testing::Values(KioskMixin::Config{
+                        /*name=*/"AutoLaunch",
+                        KioskMixin::AutoLaunchAccount{
+                            KioskMixin::SimpleChromeAppOption().account_id},
+                        {KioskMixin::SimpleChromeAppOption()}},
+                    KioskMixin::Config{/*name=*/"ManualLaunch",
+                                       /*auto_launch_account_id=*/{},
+                                       {KioskMixin::SimpleChromeAppOption()}}),
+    KioskMixin::ConfigName);
+
+}  // namespace ash
diff --git a/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc b/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc
index 9eb0294..ff24dcb 100644
--- a/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc
+++ b/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc
@@ -5,11 +5,9 @@
 #include <string>
 #include <vector>
 
-#include "apps/test/app_window_waiter.h"
 #include "base/check_deref.h"
 #include "base/functional/bind.h"
 #include "base/scoped_observation.h"
-#include "base/test/gtest_tags.h"
 #include "chrome/browser/ash/accessibility/accessibility_manager.h"
 #include "chrome/browser/ash/accessibility/speech_monitor.h"
 #include "chrome/browser/ash/app_mode/kiosk_chrome_app_manager.h"
@@ -52,15 +50,12 @@
 #include "extensions/browser/extension_registry_observer.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension_id.h"
-#include "extensions/components/native_app_window/native_app_window_views.h"
 #include "extensions/test/extension_test_message_listener.h"
 #include "extensions/test/result_catcher.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/page_transition_types.h"
 #include "ui/base/window_open_disposition.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/views/window/non_client_view.h"
 
 namespace ash {
 
@@ -170,50 +165,6 @@
   }
 };
 
-IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest, InstallAndLaunchApp) {
-  base::AddFeatureIdTagToTestResult(
-      "screenplay-5e6b8c54-2eab-4ac0-a484-b9738466bb9b");
-
-  StartAppLaunchFromLoginScreen(NetworkStatus::kOnline);
-  WaitForAppLaunchSuccess();
-  KioskChromeAppManager::App app;
-  ASSERT_TRUE(KioskChromeAppManager::Get()->GetApp(test_app_id(), &app));
-  EXPECT_FALSE(app.was_auto_launched_with_zero_delay);
-  EXPECT_EQ(ManifestLocation::kExternalPref, GetInstalledAppLocation());
-}
-
-// This test case is to cover crbug.com/1235334.
-IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest, WindowViewsBounds) {
-  ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded");
-
-  // Start app launch with network portal state.
-  StartAppLaunchFromLoginScreen(NetworkStatus::kOnline);
-  EXPECT_TRUE(app_window_loaded_listener.WaitUntilSatisfied());
-
-  // Verify the primary user profile is existing.
-  Profile* app_profile = ProfileManager::GetPrimaryUserProfile();
-  ASSERT_TRUE(app_profile);
-
-  // Verify the app window and views.
-  extensions::AppWindowRegistry* app_window_registry =
-      extensions::AppWindowRegistry::Get(app_profile);
-  extensions::AppWindow* window =
-      apps::AppWindowWaiter(app_window_registry, test_app_id()).Wait();
-  ASSERT_TRUE(window);
-  native_app_window::NativeAppWindowViews* views =
-      static_cast<native_app_window::NativeAppWindowViews*>(
-          window->GetBaseWindow());
-  ASSERT_TRUE(views);
-
-  // The bounds of `frame_view` and `client_view` should be consistent when the
-  // Chrome app Kiosk session starts.
-  views::NonClientView* non_client_view = views->widget()->non_client_view();
-  const gfx::Rect& frame_view_bounds = non_client_view->frame_view()->bounds();
-  const gfx::Rect& client_view_bounds =
-      non_client_view->client_view()->bounds();
-  EXPECT_EQ(frame_view_bounds, client_view_bounds);
-}
-
 IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest,
                        LaunchAppNetworkDownConfigureNotAllowed) {
   auto auto_reset =
diff --git a/chrome/browser/ash/login/app_mode/test/web_kiosk_base_test.cc b/chrome/browser/ash/login/app_mode/test/web_kiosk_base_test.cc
index 7854175..17e1508 100644
--- a/chrome/browser/ash/login/app_mode/test/web_kiosk_base_test.cc
+++ b/chrome/browser/ash/login/app_mode/test/web_kiosk_base_test.cc
@@ -52,7 +52,9 @@
 }
 
 Browser* WebKioskBaseTest::kiosk_app_browser() const {
-  return BrowserList::GetInstance()->get(0);
+  Browser* kiosk_app_browser = BrowserList::GetInstance()->get(0);
+  CHECK(kiosk_app_browser);
+  return kiosk_app_browser;
 }
 
 KioskSystemSession* WebKioskBaseTest::kiosk_system_session() const {
diff --git a/chrome/browser/ash/login/app_mode/test/web_kiosk_browser_permissions_browsertest.cc b/chrome/browser/ash/login/app_mode/test/web_kiosk_browser_permissions_browsertest.cc
index f5126dd..b4aa734d 100644
--- a/chrome/browser/ash/login/app_mode/test/web_kiosk_browser_permissions_browsertest.cc
+++ b/chrome/browser/ash/login/app_mode/test/web_kiosk_browser_permissions_browsertest.cc
@@ -63,22 +63,16 @@
 
   content::WebContents* GetKioskAppWebContents() {
     BrowserView* browser_view =
-        BrowserView::GetBrowserViewForBrowser(initial_browser());
+        BrowserView::GetBrowserViewForBrowser(kiosk_app_browser());
     return browser_view ? browser_view->GetActiveWebContents() : nullptr;
   }
 
   void AllowBrowserPermissionsForOrigin(const std::string& origin) {
-    initial_browser()->profile()->GetPrefs()->SetList(
+    kiosk_app_browser()->profile()->GetPrefs()->SetList(
         prefs::kKioskBrowserPermissionsAllowedForOrigins,
         base::Value::List().Append(origin));
   }
 
-  Browser* initial_browser() {
-    Browser* initial_browser = BrowserList::GetInstance()->get(0);
-    CHECK(initial_browser);
-    return initial_browser;
-  }
-
  private:
   FakeOriginTestServerMixin install_origin_server_mixin_{
       &mixin_host_, GURL(kInstallOrigin), FILE_PATH_LITERAL(kPathToBeServed)};
diff --git a/chrome/browser/ash/policy/status_collector/child_status_collector.cc b/chrome/browser/ash/policy/status_collector/child_status_collector.cc
index 89e5316..a0baaaf 100644
--- a/chrome/browser/ash/policy/status_collector/child_status_collector.cc
+++ b/chrome/browser/ash/policy/status_collector/child_status_collector.cc
@@ -31,6 +31,9 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/values.h"
+#include "chrome/browser/ash/child_accounts/child_user_service.h"
+#include "chrome/browser/ash/child_accounts/child_user_service_factory.h"
+#include "chrome/browser/ash/child_accounts/time_limits/app_activity_report_interface.h"
 #include "chrome/browser/ash/policy/status_collector/child_activity_storage.h"
 #include "chrome/browser/ash/policy/status_collector/status_collector_state.h"
 #include "chrome/browser/browser_process.h"
@@ -211,7 +214,7 @@
   DCHECK(last_report_params_);
   if (last_report_params_->anything_reported) {
     ash::app_time::AppActivityReportInterface* app_activity_reporting =
-        ash::app_time::AppActivityReportInterface::Get(profile_);
+        ash::ChildUserServiceFactory::GetForBrowserContext(profile_);
     DCHECK(app_activity_reporting);
     app_activity_reporting->AppActivityReportSubmitted(
         last_report_params_->generation_time);
@@ -290,7 +293,7 @@
 bool ChildStatusCollector::GetAppActivity(
     em::ChildStatusReportRequest* status) {
   ash::app_time::AppActivityReportInterface* app_activity_reporting =
-      ash::app_time::AppActivityReportInterface::Get(profile_);
+      ash::ChildUserServiceFactory::GetForBrowserContext(profile_);
   DCHECK(app_activity_reporting);
 
   last_report_params_ =
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 6fc7937..325ed40 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -701,14 +701,13 @@
 
   FieldType excluded_field = include_name_in_label ? UNKNOWN_TYPE : NAME_FULL;
 
-  std::vector<std::u16string> labels;
   // TODO(crbug.com/40283168): Replace by `profiles`.
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       std::vector<raw_ptr<const AutofillProfile, VectorExperimental>>(
           profiles.begin(), profiles.end()),
       address_only ? std::make_optional(suggested_fields) : std::nullopt,
       /*triggering_field_type=*/std::nullopt, {excluded_field},
-      minimal_fields_shown, g_browser_process->GetApplicationLocale(), &labels);
+      minimal_fields_shown, g_browser_process->GetApplicationLocale());
 
   return base::android::ToJavaArrayOfStrings(env, labels);
 }
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
index ec8c1c6d..a766e7a 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
@@ -420,8 +420,6 @@
   // Sets an action to execute when an event arrives to the report queue storage
   // module.
   void SetAddRecordCheck(DlpPolicyEvent expectedEvent, int times) {
-    // TODO(1290312): Change to [=, this] when chrome code base is updated to
-    // C++20.
     EXPECT_CALL(*test_storage_module(), AddRecord)
         .Times(times)
         .WillRepeatedly(testing::WithArgs<1, 2>(testing::Invoke(
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_util.cc b/chrome/browser/extensions/api/autofill_private/autofill_util.cc
index ae4102ac..fde8162 100644
--- a/chrome/browser/extensions/api/autofill_private/autofill_util.cc
+++ b/chrome/browser/extensions/api/autofill_private/autofill_util.cc
@@ -190,12 +190,13 @@
     const autofill::PersonalDataManager& personal_data) {
   const std::vector<const autofill::AutofillProfile*>& profiles =
       personal_data.address_data_manager().GetProfilesForSettings();
-  std::vector<std::u16string> labels;
   // TODO(crbug.com/40283168): Replace by `profiles`.
-  autofill::AutofillProfile::CreateDifferentiatingLabels(
-      std::vector<raw_ptr<const autofill::AutofillProfile, VectorExperimental>>(
-          profiles.begin(), profiles.end()),
-      ExtensionsBrowserClient::Get()->GetApplicationLocale(), &labels);
+  std::vector<std::u16string> labels =
+      autofill::AutofillProfile::CreateDifferentiatingLabels(
+          std::vector<
+              raw_ptr<const autofill::AutofillProfile, VectorExperimental>>(
+              profiles.begin(), profiles.end()),
+          ExtensionsBrowserClient::Get()->GetApplicationLocale());
   DCHECK_EQ(labels.size(), profiles.size());
 
   AddressEntryList list;
diff --git a/chrome/browser/extensions/api/messaging/native_message_built_in_host.h b/chrome/browser/extensions/api/messaging/native_message_built_in_host.h
index f5e4d0d2..08e2ae4 100644
--- a/chrome/browser/extensions/api/messaging/native_message_built_in_host.h
+++ b/chrome/browser/extensions/api/messaging/native_message_built_in_host.h
@@ -23,8 +23,8 @@
   const char* const name;
 
   // The extension origins allowed to create the built-in host.
-  // This field is not a raw_ptr<> because it was filtered by the rewriter
-  // for: #global-scope
+  // This field is not a raw_ptr<> because it only ever points at statically-
+  // allocated memory which is never freed, and hence cannot dangle.
   RAW_PTR_EXCLUSION const char* const* const allowed_origins;
 
   // The count of |allowed_origins|.
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
index 51ca3092..ed32c8e 100644
--- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -231,8 +231,7 @@
   EventRouterInterceptorForStopListenerRemoval(
       content::BrowserContext* browser_context,
       int worker_renderer_process_id)
-      : browser_context_(browser_context),
-        worker_renderer_process_id_(worker_renderer_process_id) {
+      : browser_context_(browser_context) {
     auto* event_router = extensions::EventRouter::Get(browser_context_);
     CHECK(event_router) << "There is no EventRouter for browser context when "
                            "creating the event router interceptor.";
@@ -261,7 +260,6 @@
 
  private:
   raw_ptr<content::BrowserContext> browser_context_;
-  int worker_renderer_process_id_;
 };
 
 // Sends an XHR request to the provided host, port, and path, and responds when
diff --git a/chrome/browser/extensions/extension_webui_apitest.cc b/chrome/browser/extensions/extension_webui_apitest.cc
index e2ed4ee..1890743 100644
--- a/chrome/browser/extensions/extension_webui_apitest.cc
+++ b/chrome/browser/extensions/extension_webui_apitest.cc
@@ -121,6 +121,7 @@
     guest_view::GuestViewBase* guest_view =
         test_guest_view_manager_->WaitForSingleGuestViewCreated();
     EXPECT_TRUE(guest_view);
+    test_guest_view_manager_->WaitUntilAttached(guest_view);
     WaitForGuestViewLoadStop(guest_view);
 
     return guest_view->GetGuestMainFrame();
diff --git a/chrome/browser/extensions/script_injection_tracker_browsertest.cc b/chrome/browser/extensions/script_injection_tracker_browsertest.cc
index d0c7d53..3b0b418 100644
--- a/chrome/browser/extensions/script_injection_tracker_browsertest.cc
+++ b/chrome/browser/extensions/script_injection_tracker_browsertest.cc
@@ -23,6 +23,9 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/guest_view/browser/guest_view_base.h"
+#include "components/guest_view/browser/guest_view_manager_delegate.h"
+#include "components/guest_view/browser/test_guest_view_manager.h"
 #include "components/version_info/channel.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
@@ -34,6 +37,7 @@
 #include "content/public/test/commit_message_delayer.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
+#include "extensions/browser/api/extensions_api_client.h"
 #include "extensions/browser/browsertest_util.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/process_manager.h"
@@ -1940,6 +1944,15 @@
     content::SetupCrossSiteRedirector(embedded_test_server());
     ASSERT_TRUE(embedded_test_server()->Start());
   }
+
+  guest_view::TestGuestViewManager* GetGuestViewManager() {
+    return factory_.GetOrCreateTestGuestViewManager(
+        browser()->profile(),
+        ExtensionsAPIClient::Get()->CreateGuestViewManagerDelegate());
+  }
+
+ private:
+  guest_view::TestGuestViewManagerFactory factory_;
 };
 
 // Tests that ScriptInjectionTracker detects content scripts injected via
@@ -2128,11 +2141,12 @@
     )";
     GURL guest_url1(embedded_test_server()->GetURL("foo.com", "/title1.html"));
 
-    content::WebContentsAddedObserver guest_contents_observer;
-    ASSERT_TRUE(ExecJs(
+    content::ExecuteScriptAsync(
         app_contents,
-        content::JsReplace(kWebViewInjectionScriptTemplate, guest_url1)));
-    guest_contents = guest_contents_observer.GetWebContents();
+        content::JsReplace(kWebViewInjectionScriptTemplate, guest_url1));
+    auto* guest = GetGuestViewManager()->WaitForSingleGuestViewCreated();
+    GetGuestViewManager()->WaitUntilAttached(guest);
+    guest_contents = guest->web_contents();
 
     // Wait until the "document_end" timepoint is reached.  (Since this is done
     // before the `addContentScripts` call below, it means that no content
@@ -2142,7 +2156,7 @@
 
   // Verify that ScriptInjectionTracker correctly shows that no content scripts
   // got injected just yet.
-  content::RenderProcessHost* guest_process =
+  raw_ptr<content::RenderProcessHost> guest_process =
       guest_contents->GetPrimaryMainFrame()->GetProcess();
   EXPECT_FALSE(ScriptInjectionTracker::DidProcessRunContentScriptFromExtension(
       *guest_process, app->id()));
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 89556b49..2ccd5d0 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -265,7 +265,6 @@
     &kEnableXAxisActivityTransition,
     &kExperimentsForAgsa,
     &kFloatingSnackbar,
-    &kFocusOmniboxInIncognitoTabIntents,
     &kForceBrowserControlsUponExitingFullscreen,
     &kForceListTabSwitcher,
     &kForceTranslucentNotificationTrampoline,
@@ -448,10 +447,6 @@
              "AvoidSelectedTabFocusOnLayoutDoneShowing",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-BASE_FEATURE(kFocusOmniboxInIncognitoTabIntents,
-             "FocusOmniboxInIncognitoTabIntents",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // Long-term flag for debugging only.
 BASE_FEATURE(kForceListTabSwitcher,
              "ForceListTabSwitcher",
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index b24901e..1b47ec816 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -104,7 +104,6 @@
 BASE_DECLARE_FEATURE(kDragDropTabTearingEnableOEM);
 BASE_DECLARE_FEATURE(kExperimentsForAgsa);
 BASE_DECLARE_FEATURE(kFloatingSnackbar);
-BASE_DECLARE_FEATURE(kFocusOmniboxInIncognitoTabIntents);
 BASE_DECLARE_FEATURE(kForceBrowserControlsUponExitingFullscreen);
 BASE_DECLARE_FEATURE(kForceListTabSwitcher);
 BASE_DECLARE_FEATURE(kForceTranslucentNotificationTrampoline);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 21f21dcd..5f76fc8 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -344,8 +344,6 @@
     public static final String FINGERPRINTING_PROTECTION_USER_BYPASS =
             "FingerprintingProtectionUserBypass";
     public static final String FLOATING_SNACKBAR = "FloatingSnackbar";
-    public static final String FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS =
-            "FocusOmniboxInIncognitoTabIntents";
     public static final String FORCE_BROWSER_CONTROLS_UPON_EXITING_FULLSCREEN =
             "ForceBrowserControlsUponExitingFullscreen";
     public static final String FORCE_DISABLE_EXTENDED_SYNC_PROMOS =
diff --git a/chrome/browser/page_load_metrics/observers/third_party_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/third_party_metrics_observer_browsertest.cc
index ac6c485..aa4ed58 100644
--- a/chrome/browser/page_load_metrics/observers/third_party_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/third_party_metrics_observer_browsertest.cc
@@ -248,7 +248,7 @@
 }
 
 // TODO(crbug.com/334416161): Re-enble this test.
-#if BUILDFLAG(IS_WIN)
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
 #define MAYBE_OpaqueOriginSubframe DISABLED_OpaqueOriginSubframe
 #else
 #define MAYBE_OpaqueOriginSubframe OpaqueOriginSubframe
diff --git a/chrome/browser/pdf/pdf_extension_accessibility_test.cc b/chrome/browser/pdf/pdf_extension_accessibility_test.cc
index 4c061ec..89726f9 100644
--- a/chrome/browser/pdf/pdf_extension_accessibility_test.cc
+++ b/chrome/browser/pdf/pdf_extension_accessibility_test.cc
@@ -1515,17 +1515,31 @@
   base::HistogramTester histograms;
   RunPDFAXTreeDumpTest("hello-world-in-image.pdf",
                        GetExpectedStatus(/*has_content=*/true));
+
   metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting();
-  histograms.ExpectBucketCount("Accessibility.PDF.HasAccessibleText2",
-                               /*sample=*/false,
-                               /*expected_count=*/1);
-  histograms.ExpectTotalCount("Accessibility.PDF.HasAccessibleText2",
-                              /*expected_count=*/1);
+  histograms.ExpectUniqueSample("Accessibility.PDF.HasAccessibleText2",
+                                /*sample=*/false,
+                                /*expected_count=*/1);
+
+  int expected_count = (IsSearchifyEnabled() && IsOcrAvailable()) ? 1 : 0;
+  // Screen Reader is always enabled for this test.
+  // TODO(crbug.com/360803943): Try adding Searchify browser test without
+  // screen reader.
+  histograms.ExpectUniqueSample(
+      "Accessibility.ScreenAI.Searchify.ScreenReaderModeEnabled",
+      /*sample=*/true, expected_count);
 }
 
 IN_PROC_BROWSER_TEST_P(PdfOcrIntegrationTest, ThreePagePDF) {
+  base::HistogramTester histograms;
   RunPDFAXTreeDumpTest("inaccessible-text-in-three-page.pdf",
                        GetExpectedStatus(/*has_content=*/true));
+
+  metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting();
+  int expected_count = (IsSearchifyEnabled() && IsOcrAvailable()) ? 1 : 0;
+  histograms.ExpectUniqueSample(
+      "Accessibility.ScreenAI.Searchify.ScreenReaderModeEnabled",
+      /*sample=*/true, expected_count);
 }
 
 IN_PROC_BROWSER_TEST_P(PdfOcrIntegrationTest, TestBatchingWithTwentyPagePDF) {
diff --git a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_te.xtb b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_te.xtb
index cb3fc78..15697b7 100644
--- a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_te.xtb
+++ b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_te.xtb
@@ -31,7 +31,7 @@
 <translation id="5596627076506792578">మరిన్ని ఆప్షన్‌లు</translation>
 <translation id="5694491020339060116">ప్లేబ్యాక్ వేగం మెనూ</translation>
 <translation id="6315170314923504164">Voice</translation>
-<translation id="6343633247422081848">మాస్</translation>
+<translation id="6343633247422081848">ఆకుపచ్చ</translation>
 <translation id="6550675742724504774">ఎంపికలు</translation>
 <translation id="6727569846535331147"><ph name="PITCH" />, <ph name="TONE" /></translation>
 <translation id="6790428901817661496">ప్లే చేయి</translation>
diff --git a/chrome/browser/resources/chromeos/healthd_internals/controller/line_chart_controller.ts b/chrome/browser/resources/chromeos/healthd_internals/controller/line_chart_controller.ts
index 38c60a1..fd5e07a 100644
--- a/chrome/browser/resources/chromeos/healthd_internals/controller/line_chart_controller.ts
+++ b/chrome/browser/resources/chromeos/healthd_internals/controller/line_chart_controller.ts
@@ -67,12 +67,8 @@
   private fixedMaxValue: number|null = null;
 
   // Set up the lists of data series.
-  setupDataSeriesLists(
+  setupDataSeries(
       category: CategoryTypeEnum, dataSeriesLists: DataSeriesList[]) {
-    if (category === this.displayedCategory) {
-      return;
-    }
-
     this.displayedCategory = category;
     this.displayedDataSeriesLists = dataSeriesLists;
 
@@ -300,6 +296,6 @@
       }
     }
     this.element.getSummaryTable().updateSummaryInfo(output);
-    this.element.sendTimeRange(visibleStartTime, visibleEndTime);
+    this.element.updateVisibleTimeSpan(visibleStartTime, visibleEndTime);
   }
 }
diff --git a/chrome/browser/resources/chromeos/healthd_internals/controller/system_trend_controller.ts b/chrome/browser/resources/chromeos/healthd_internals/controller/system_trend_controller.ts
index 952048e..14ee823 100644
--- a/chrome/browser/resources/chromeos/healthd_internals/controller/system_trend_controller.ts
+++ b/chrome/browser/resources/chromeos/healthd_internals/controller/system_trend_controller.ts
@@ -90,7 +90,7 @@
 
   setBatteryData(dataSeriesList: DataSeries[]) {
     this.dataCollection.battery.dataList = dataSeriesList;
-    this.element.setupDataSeriesList();
+    this.element.refreshData(CategoryTypeEnum.BATTERY);
   }
 
   setCpuFrequencyData(dataSeriesList: DataSeries[]) {
@@ -100,33 +100,33 @@
       this.dataCollection.cpuFrequency.selectedIndices =
           [0, dataSeriesList.length - 1];
     }
-    this.element.setupDataSeriesList();
+    this.element.refreshData(CategoryTypeEnum.CPU_FREQUENCY);
   }
 
   setCpuUsageData(dataSeriesList: DataSeries[]) {
     this.dataCollection.cpuUsage.dataList = dataSeriesList;
     // The first one is overall usage.
     this.dataCollection.cpuUsage.selectedIndices = [0];
-    this.element.setupDataSeriesList();
+    this.element.refreshData(CategoryTypeEnum.CPU_USAGE);
   }
 
   setMemoryData(dataSeriesList: DataSeries[]) {
     this.dataCollection.memory.dataList = dataSeriesList;
     // The first one is available memory.
     this.dataCollection.memory.selectedIndices = [0];
-    this.element.setupDataSeriesList();
+    this.element.refreshData(CategoryTypeEnum.MEMORY);
   }
 
   setThermalData(dataSeriesList: DataSeries[]) {
     this.dataCollection.thermal.dataList = dataSeriesList;
-    this.element.setupDataSeriesList();
+    this.element.refreshData(CategoryTypeEnum.THERMAL);
   }
 
   setZramData(dataSeriesList: DataSeries[]) {
     this.dataCollection.zram.dataList = dataSeriesList;
     // The first one is total used zram.
     this.dataCollection.zram.selectedIndices = [0];
-    this.element.setupDataSeriesList();
+    this.element.refreshData(CategoryTypeEnum.ZRAM);
   }
 
   /**
diff --git a/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/line_chart.ts b/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/line_chart.ts
index 0bd165a17..980e57f 100644
--- a/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/line_chart.ts
+++ b/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/line_chart.ts
@@ -102,57 +102,74 @@
     return this.$.summaryTable;
   }
 
-  // Update to display the latest data.
-  update() {
+  /**
+   * Sets up the data source for controller, menu and summary table.
+   *
+   * @param category - The current displayed category.
+   * @param dataSeriesLists - List of `DataSeriesList` objects, which is used to
+   *                          store data from different source. The Data shared
+   *                          with the same scale with be stored into one
+   *                          `DataSeriesList`.
+   */
+  setupDataSeries(
+      category: CategoryTypeEnum, dataSeriesLists: DataSeriesList[]) {
+    this.controller.setupDataSeries(category, dataSeriesLists);
+
+    const flatDataList = dataSeriesLists.reduce(
+        (acc, val) => acc.concat(val.dataList), [] as DataSeries[]);
+    const isCustomCategory = category === CategoryTypeEnum.CUSTOM;
+    this.$.chartMenu.setupDataSeries(flatDataList, isCustomCategory);
+    this.$.summaryTable.setIsCustomCategory(isCustomCategory);
+
+    this.resizeCanvas();
+  }
+
+  /**
+   * Uses the latest data in controller to refresh the line chart content,
+   * including scrollbar and canvas.
+   */
+  refreshLineChart() {
     this.controller.updateDataTime();
     this.updateScrollBar();
     this.updateCanvas();
   }
 
   /**
-   * Set up the list of `DataSeriesList` object, which is used to store data
-   * from different source.
-   *
-   * @param category - The current displayed category.
-   * @param dataSeriesLists - List of `DataSeriesList` objects. The Data shared
-   *                          with the same scale with be stored into one
-   *                          `DataSeriesList`.
+   * Updates the visibility of line chart. We don't need to render the chart
+   * when the chart is not visible.
    */
-  setupDataSeriesLists(
-      category: CategoryTypeEnum, dataSeriesLists: DataSeriesList[]) {
-    this.controller.setupDataSeriesLists(category, dataSeriesLists);
-
-    const flatDataList = dataSeriesLists.reduce(
-        (acc, val) => acc.concat(val.dataList), [] as DataSeries[]);
-    const isCustomCategory = category === CategoryTypeEnum.CUSTOM;
-    this.$.chartMenu.setupDataSeriesList(flatDataList, isCustomCategory);
-    this.$.summaryTable.setIsCustomCategory(isCustomCategory);
-
-    this.resizeCanvas();
-    this.update();
-  }
-
-  // Update the visibility of line chart. We don't need to render the chart when
-  // the chart is not visible.
   updateVisibility(isVisible: boolean) {
     this.isVisible = isVisible;
     if (isVisible) {
-      this.update();
+      this.refreshLineChart();
     }
   }
 
-  renderChartSummaryTable(isVisible: boolean) {
+  /**
+   * Updates the visibility for the chart summary table.
+   */
+  toggleChartSummaryTable(isVisible: boolean) {
     this.$.chartContainer.style.setProperty(
         '--summary-table-height', isVisible ? '200px' : '0px');
   }
 
-  sendTimeRange(visibleStartTime: number, visibleEndTime: number) {
+  /**
+   * Updates the visible time span and emits a custom event to notify the
+   * `HealthdInternalsSystemTrendElement` component to update displayed info.
+   *
+   * @param visibleStartTime The new start time.
+   * @param visibleEndTime The new end time.
+   */
+  updateVisibleTimeSpan(visibleStartTime: number, visibleEndTime: number) {
     this.visibleStartTime = visibleStartTime;
     this.visibleEndTime = visibleEndTime;
     this.dispatchEvent(
         new CustomEvent('time-range-changed', {bubbles: true, composed: true}));
   }
 
+  /**
+   * Returns the current visible time span as a tuple [startTime, endTime].
+   */
   getVisibleTimeSpan(): [number, number] {
     return [this.visibleStartTime, this.visibleEndTime];
   }
diff --git a/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/menu.ts b/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/menu.ts
index a6f5c41..4c00ba3 100644
--- a/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/menu.ts
+++ b/chrome/browser/resources/chromeos/healthd_internals/view/line_chart/menu.ts
@@ -61,22 +61,29 @@
   }
 
   /**
-   * Set up the list of data series for the menu.
+   * Sets up the list of data series for the menu.
    */
-  setupDataSeriesList(dataSeriesList: DataSeries[], isCustomCategory: boolean) {
+  setupDataSeries(dataSeriesList: DataSeries[], isCustomCategory: boolean) {
     this.isCustomCategory = isCustomCategory;
+
+    this.cleanUpButtons();
+    for (const [index, dataSeries] of dataSeriesList.entries()) {
+      const color = getLineChartColor(index)
+      const button = this.createButton(dataSeries, color);
+      this.$.dataButtonsContainer.appendChild(button);
+      this.buttons.push({data: dataSeries, color: color, element: button});
+    }
+  }
+
+  /**
+   * Cleans up the buttons in both button container and `buttons` list.
+   */
+  private cleanUpButtons() {
     const buttonContainer = this.$.dataButtonsContainer;
     while (buttonContainer.lastElementChild) {
       buttonContainer.removeChild(buttonContainer.lastElementChild);
     }
     this.buttons = [];
-
-    for (const [index, dataSeries] of dataSeriesList.entries()) {
-      const color = getLineChartColor(index)
-      const button = this.createButton(dataSeries, color);
-      buttonContainer.appendChild(button);
-      this.buttons.push({data: dataSeries, color: color, element: button});
-    }
   }
 
   private fireMenuButtonsUpdatedEvent() {
@@ -85,7 +92,7 @@
   }
 
   /**
-   * Create a button to control the data series.
+   * Creates a button to control the data series.
    */
   private createButton(dataSeries: DataSeries, color: string): HTMLElement {
     const buttonInner: HTMLElement =
@@ -102,7 +109,7 @@
   }
 
   /**
-   * Add a onclick handler to the button.
+   * Adds a onclick handler to the button.
    */
   private setupButtonOnClickHandler(
       button: HTMLElement, dataSeries: DataSeries, color: string) {
@@ -114,7 +121,7 @@
   }
 
   /**
-   * Update the button style with the visibility and color from data series.
+   * Updates the button style with the visibility and color from data series.
    */
   private updateButtonStyle(
       button: HTMLElement, dataSeries: DataSeries, color: string) {
diff --git a/chrome/browser/resources/chromeos/healthd_internals/view/pages/system_trend.ts b/chrome/browser/resources/chromeos/healthd_internals/view/pages/system_trend.ts
index 0f3ae7c..f0b7fa04 100644
--- a/chrome/browser/resources/chromeos/healthd_internals/view/pages/system_trend.ts
+++ b/chrome/browser/resources/chromeos/healthd_internals/view/pages/system_trend.ts
@@ -67,7 +67,7 @@
     super.connectedCallback();
 
     this.updateHelper = new UiUpdateHelper(() => {
-      this.$.lineChart.update();
+      this.$.lineChart.refreshLineChart();
     });
 
     this.$.lineChart.addEventListener('time-range-changed', () => {
@@ -117,11 +117,23 @@
     this.updateHelper.updateUiUpdateInterval(intervalSeconds);
   }
 
-  setupDataSeriesList() {
-    this.$.lineChart.setupDataSeriesLists(
-        this.selectedCategory, this.controller.getData(this.selectedCategory));
+  /**
+   * Updates the line chart with the latest data if the `targetCategory` matches
+   * the currently selected category.
+   */
+  refreshData(targetCategory: CategoryTypeEnum) {
+    // We don't need to render data when the selected category is not matched.
+    if (targetCategory !== this.selectedCategory) {
+      return;
+    }
+    this.$.lineChart.setupDataSeries(
+        targetCategory, this.controller.getData(targetCategory));
+    this.$.lineChart.refreshLineChart();
   }
 
+  /**
+   * Helper function to handle `time-range-changed` events.
+   */
   private updateDisplayedTimeInfo() {
     const [startTime, endTime] = this.$.lineChart.getVisibleTimeSpan();
     this.displayedStartTime = new Date(startTime).toLocaleTimeString();
@@ -129,15 +141,17 @@
     this.displayedDuration = toReadableDuration(endTime - startTime);
   }
 
+  /**
+   * Updates the visibility for the chart summary table.
+   */
   private toggleChartSummaryTable() {
     this.isSummaryTableDisplayed = !this.isSummaryTableDisplayed;
-    this.$.lineChart.renderChartSummaryTable(this.isSummaryTableDisplayed);
+    this.$.lineChart.toggleChartSummaryTable(this.isSummaryTableDisplayed);
   }
 
   private onCategoryChanged() {
     this.selectedCategory = this.$.categorySelector.value as CategoryTypeEnum;
-    this.setupDataSeriesList();
-    this.$.lineChart.update()
+    this.refreshData(this.selectedCategory);
   }
 }
 
diff --git a/chrome/browser/resources/signin/managed_user_profile_notice/managed_user_profile_notice_value_prop.css b/chrome/browser/resources/signin/managed_user_profile_notice/managed_user_profile_notice_value_prop.css
index b5718cf3..35e8fee 100644
--- a/chrome/browser/resources/signin/managed_user_profile_notice/managed_user_profile_notice_value_prop.css
+++ b/chrome/browser/resources/signin/managed_user_profile_notice/managed_user_profile_notice_value_prop.css
@@ -26,7 +26,6 @@
 }
 
 .title {
-  margin: 0 0 12px 0;
   text-align: center;
 }
 
@@ -35,14 +34,13 @@
 }
 
 .subtitle {
-  margin: 0 0 12px 0;
+  margin: 0 0 24px 0;
   text-align: center;
 }
 
 #product-logo {
-  height: 34px;
-  margin-block-end: 16px;
-  width: 34px;
+  height: 64px;
+  width: 64px;
 }
 
 .pill {
diff --git a/chrome/browser/signin/signin_util.cc b/chrome/browser/signin/signin_util.cc
index 1019819..22c843f 100644
--- a/chrome/browser/signin/signin_util.cc
+++ b/chrome/browser/signin/signin_util.cc
@@ -314,6 +314,10 @@
 
 SignedInState GetSignedInState(
     const signin::IdentityManager* identity_manager) {
+  if (!identity_manager) {
+    return SignedInState::kSignedOut;
+  }
+
   if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) {
     if (identity_manager->HasAccountWithRefreshTokenInPersistentErrorState(
             identity_manager->GetPrimaryAccountId(
diff --git a/chrome/browser/signin/signin_util_unittest.cc b/chrome/browser/signin/signin_util_unittest.cc
index 12e5e66..c04f508b 100644
--- a/chrome/browser/signin/signin_util_unittest.cc
+++ b/chrome/browser/signin/signin_util_unittest.cc
@@ -399,6 +399,9 @@
   EXPECT_EQ(SignedInState::kSignedOut,
             signin_util::GetSignedInState(identity_manager));
 
+  // In incognito mode, there would be no identity manager.
+  EXPECT_EQ(SignedInState::kSignedOut, signin_util::GetSignedInState(nullptr));
+
   // `kExplicitBrowserSigninUIOnDesktop` enabled
   {
     base::test::ScopedFeatureList scoped_feature_list{
diff --git a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc
index 40989d7..20a19cd 100644
--- a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc
+++ b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc
@@ -39,6 +39,17 @@
 #include "chrome/browser/supervised_user/supervised_user_verification_page.h"
 #endif
 
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+namespace {
+bool IsYouTubeInfrastructureSubframe(content::NavigationHandle* handle) {
+  if (handle->GetNavigatingFrameType() != content::FrameType::kSubframe) {
+    return false;
+  }
+  return handle->GetURL().DomainIs("accounts.youtube.com");
+}
+}  // namespace
+#endif
+
 // static
 std::unique_ptr<SupervisedUserGoogleAuthNavigationThrottle>
 SupervisedUserGoogleAuthNavigationThrottle::MaybeCreate(
@@ -170,6 +181,13 @@
     return content::NavigationThrottle::PROCEED;
   }
 
+  if (base::FeatureList::IsEnabled(
+          supervised_user::kExemptYouTubeInfrastructureFromBlocking) &&
+      IsYouTubeInfrastructureSubframe(navigation_handle())) {
+    // Controls integration between google.com and youtube.com.
+    return content::NavigationThrottle::PROCEED;
+  }
+
   // We only show the interstitial for the primary main frame and subframes.
   // Navigation is allowed otherwise;
   switch (navigation_handle()->GetNavigatingFrameType()) {
diff --git a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle_unittest.cc b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle_unittest.cc
index 1387c1e..a9f885e1 100644
--- a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle_unittest.cc
+++ b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle_unittest.cc
@@ -27,12 +27,17 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
+
 constexpr char kExampleURL[] = "http://www.example1.com/123";
 constexpr char kGoogleSearchURL[] = "https://www.google.com/search?q=test";
 constexpr char kGoogleHomeURL[] = "https://www.google.com";
 constexpr char kYoutubeDomain[] = "https://www.youtube.com";
 constexpr char kChildTestEmail[] = "child@example.com";
 
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+constexpr char kYoutubeAccountsDomain[] = "https://accounts.youtube.com";
+#endif
+
 std::unique_ptr<KeyedService> BuildTestSigninClient(
     content::BrowserContext* context) {
   Profile* profile = Profile::FromBrowserContext(context);
@@ -44,12 +49,23 @@
   return std::make_unique<syncer::MockSyncService>();
 }
 
-}  // namespace
+class MockNavigationSubframeHandle : public content::MockNavigationHandle {
+ public:
+  MockNavigationSubframeHandle(const GURL& url,
+                               content::RenderFrameHost* render_frame_host)
+      : content::MockNavigationHandle(url, render_frame_host) {}
+  content::FrameType GetNavigatingFrameType() const override {
+    return content::FrameType::kSubframe;
+  }
+};
 
 class SupervisedUserGoogleAuthNavigationThrottleTest
     : public ChromeRenderViewHostTestHarness {
  public:
-  void SetUp() override { ChromeRenderViewHostTestHarness::SetUp(); }
+  void TearDown() final {
+    subframe_ = nullptr;
+    ChromeRenderViewHostTestHarness::TearDown();
+  }
 
   signin::IdentityManager* identity_manager() {
     return IdentityManagerFactory::GetForProfile(profile());
@@ -72,12 +88,25 @@
   }
 
   std::unique_ptr<SupervisedUserGoogleAuthNavigationThrottle>
-  CreateNavigationThrottle(const GURL& url, bool skip_jni_call = true) {
-    handle =
-        std::make_unique<::testing::NiceMock<content::MockNavigationHandle>>(
-            url, main_rfh());
+  CreateNavigationThrottle(const GURL& url,
+                           bool skip_jni_call = true,
+                           bool for_subframe = false) {
+    if (for_subframe) {
+      content::RenderFrameHostTester::For(main_rfh())
+          ->InitializeRenderFrameIfNeeded();
+      subframe_ = content::RenderFrameHostTester::For(main_rfh())
+                      ->AppendChild("subframe");
+      handle_ =
+          std::make_unique<::testing::NiceMock<MockNavigationSubframeHandle>>(
+              url, subframe_);
+    } else {
+      handle_ =
+          std::make_unique<::testing::NiceMock<content::MockNavigationHandle>>(
+              url, main_rfh());
+    }
+
     std::unique_ptr<SupervisedUserGoogleAuthNavigationThrottle> throttle =
-        SupervisedUserGoogleAuthNavigationThrottle::MaybeCreate(handle.get());
+        SupervisedUserGoogleAuthNavigationThrottle::MaybeCreate(handle_.get());
 
     if (skip_jni_call) {
       throttle->set_skip_jni_call_for_testing(true);
@@ -98,7 +127,8 @@
   }
 
  private:
-  std::unique_ptr<content::MockNavigationHandle> handle;
+  std::unique_ptr<content::MockNavigationHandle> handle_;
+  raw_ptr<content::RenderFrameHost> subframe_;
 };
 
 TEST_F(SupervisedUserGoogleAuthNavigationThrottleTest,
@@ -222,6 +252,60 @@
             prenderedThrottle->WillStartRequest());
 }
 
+// In order to correctly perform authentication to youtube.com, its
+// infrastructure (accounts.youtube.com) must be allowed.
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+TEST_F(
+    SupervisedUserGoogleAuthNavigationThrottleTest,
+    NavigationForPendingSignedInSupervisedUsersAllowsYouTubeInfrastructureInSubframes) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      supervised_user::kForceSupervisedUserReauthenticationForYouTube);
+
+  SetUserAsSupervised();
+  SetInvalidRefreshTokenForPrimaryAccount(
+      identity_manager(),
+      signin_metrics::SourceForRefreshTokenOperation::kUnknown);
+  // An invalid, signed-in account is not authenticated.
+  signin::SetListAccountsResponseOneAccountWithParams(
+      {kChildTestEmail,
+       identity_manager()
+           ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin)
+           .gaia,
+       /*valid=*/false,
+       /*is_signed_out=*/false,
+       /*verified=*/true},
+      GetTestURLLoaderFactory());
+  identity_manager()->GetAccountsCookieMutator()->TriggerCookieJarUpdate();
+  content::RunAllTasksUntilIdle();
+
+  // Regular youtube content is not allowed, neither in subframe nor in main
+  // frame.
+  EXPECT_EQ(
+      content::NavigationThrottle::CANCEL,
+      CreateNavigationThrottle(GURL(kYoutubeDomain), /*skip_jni_call=*/true,
+                               /*for_subframe=*/true)
+          ->WillStartRequest());
+  EXPECT_EQ(
+      content::NavigationThrottle::CANCEL,
+      CreateNavigationThrottle(GURL(kYoutubeDomain), /*skip_jni_call=*/true,
+                               /*for_subframe=*/false)
+          ->WillStartRequest());
+
+  // But youtube accounts infrastructure is allowed (only in subframes).
+  EXPECT_EQ(content::NavigationThrottle::PROCEED,
+            CreateNavigationThrottle(GURL(kYoutubeAccountsDomain),
+                                     /*skip_jni_call=*/true,
+                                     /*for_subframe=*/true)
+                ->WillStartRequest());
+  EXPECT_EQ(content::NavigationThrottle::CANCEL,
+            CreateNavigationThrottle(GURL(kYoutubeAccountsDomain),
+                                     /*skip_jni_call=*/true,
+                                     /*for_subframe=*/false)
+                ->WillStartRequest());
+}
+#endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+
 TEST_F(SupervisedUserGoogleAuthNavigationThrottleTest,
        NavigationForNotFreshSupervisedUsers) {
   SetUserAsSupervised();
@@ -255,3 +339,5 @@
   // Throttling is not required for non supervised accounts.
   EXPECT_EQ(nullptr, CreateNavigationThrottle(GURL(kExampleURL), false));
 }
+
+}  // namespace
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupColorUtils.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupColorUtils.java
index f1989c3..a5e30811 100644
--- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupColorUtils.java
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupColorUtils.java
@@ -8,12 +8,14 @@
 import android.content.SharedPreferences;
 
 import androidx.annotation.VisibleForTesting;
-import androidx.collection.ArrayMap;
 
 import org.chromium.base.ContextUtils;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.components.tab_groups.TabGroupColorId;
 
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -123,6 +125,21 @@
         ContextUtils.getApplicationContext().deleteSharedPreferences(TAB_GROUP_COLORS_FILE_NAME);
     }
 
+    /**
+     * This method returns the color id list attributed to tab groups specifically.
+     *
+     * @return An array list of ids from 0 to n representing all colors in the palette
+     */
+    public static List<Integer> getTabGroupColorIdList() {
+        // The color ids used here can be found in {@link TabGroupColorId}. Note that it is assumed
+        // the id list is contiguous from 0 to size-1.
+        List<Integer> colors = new ArrayList<>(TabGroupColorId.NUM_ENTRIES);
+        for (int i = 0; i < TabGroupColorId.NUM_ENTRIES; i++) {
+            colors.add(i);
+        }
+        return colors;
+    }
+
     private static SharedPreferences getSharedPreferences() {
         return ContextUtils.getApplicationContext()
                 .getSharedPreferences(TAB_GROUP_COLORS_FILE_NAME, Context.MODE_PRIVATE);
@@ -131,10 +148,10 @@
     /** Get a map that indicates the current usage count of each tab group color. */
     private static Map<Integer, Integer> getCurrentColorCountMap(
             TabGroupModelFilter tabGroupModelFilter) {
-        int colorListSize = TabGroupColorId.NUM_ENTRIES;
-        Map<Integer, Integer> colorCountMap = new ArrayMap<>(colorListSize);
-        for (int i = 0; i < colorListSize; i++) {
-            colorCountMap.put(i, 0);
+        List<Integer> colorList = getTabGroupColorIdList();
+        Map<Integer, Integer> colorCountMap = new LinkedHashMap<>(colorList.size());
+        for (Integer colorId : colorList) {
+            colorCountMap.put(colorId, 0);
         }
 
         Set<Integer> rootIds = tabGroupModelFilter.getAllTabGroupRootIds();
@@ -161,10 +178,6 @@
             if (entry.getValue() < colorCount) {
                 colorCount = entry.getValue();
                 colorId = entry.getKey();
-            } else if (entry.getValue() == colorCount) {
-                if (entry.getKey() < colorId) {
-                    colorId = entry.getKey();
-                }
             }
         }
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 39bc497..f3a089e 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1072,6 +1072,8 @@
       "passwords/bubble_controllers/move_to_account_store_bubble_controller.h",
       "passwords/bubble_controllers/password_bubble_controller_base.cc",
       "passwords/bubble_controllers/password_bubble_controller_base.h",
+      "passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc",
+      "passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h",
       "passwords/bubble_controllers/post_save_compromised_bubble_controller.cc",
       "passwords/bubble_controllers/post_save_compromised_bubble_controller.h",
       "passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.cc",
@@ -4412,6 +4414,10 @@
       "views/passwords/password_auto_sign_in_view.h",
       "views/passwords/password_bubble_view_base.cc",
       "views/passwords/password_bubble_view_base.h",
+      "views/passwords/password_change/password_change_view_factory.cc",
+      "views/passwords/password_change/password_change_view_factory.h",
+      "views/passwords/password_change/sign_in_check_bubble_view.cc",
+      "views/passwords/password_change/sign_in_check_bubble_view.h",
       "views/passwords/password_cross_domain_confirmation_popup_view_views.cc",
       "views/passwords/password_cross_domain_confirmation_popup_view_views.h",
       "views/passwords/password_default_store_changed_view.cc",
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java
index 489910cc7..2896085 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java
@@ -405,16 +405,41 @@
                     mModel.get(FullscreenSigninProperties.IS_SELECTED_ACCOUNT_SUPERVISED)
                             ? SigninAccessPoint.FORCED_SIGNIN
                             : mAccessPoint;
-            FreManagementNoticeDialogHelper.checkAccountManagementAndSignIn(
-                    selectedAccount,
-                    signinManager,
-                    accessPoint,
-                    signInCallback,
-                    mContext,
-                    mModalDialogManager);
+            if (signedInAccount != null) {
+                // If there already exists another signed-in account, first sign-out and then
+                // sign-in with the selected account.
+                signOutThenSignInWithSelectedAccount(
+                        selectedAccount, signinManager, accessPoint, signInCallback);
+            } else {
+                FreManagementNoticeDialogHelper.checkAccountManagementAndSignIn(
+                        selectedAccount,
+                        signinManager,
+                        accessPoint,
+                        signInCallback,
+                        mContext,
+                        mModalDialogManager);
+            }
         }
     }
 
+    private void signOutThenSignInWithSelectedAccount(
+            CoreAccountInfo selectedAccount,
+            SigninManager signinManager,
+            @SigninAccessPoint int accessPoint,
+            @Nullable SignInCallback signInCallback) {
+        SignOutCallback signOutCallback =
+                () ->
+                        FreManagementNoticeDialogHelper.checkAccountManagementAndSignIn(
+                                selectedAccount,
+                                signinManager,
+                                accessPoint,
+                                signInCallback,
+                                mContext,
+                                mModalDialogManager);
+        signinManager.signOut(
+                SignoutReason.ABORT_SIGNIN, signOutCallback, /* forceWipeData= */ false);
+    }
+
     private @AccountConsistencyPromoAction int getSigninPromoAction() {
         assert mSelectedAccountEmail != null;
         if (TextUtils.equals(mSelectedAccountEmail, mDefaultAccountEmail)) {
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/NtpSigninPromoDelegate.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/NtpSigninPromoDelegate.java
index 21ced15..c6f39e7b 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/NtpSigninPromoDelegate.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/NtpSigninPromoDelegate.java
@@ -29,8 +29,30 @@
     @VisibleForTesting static final int MAX_IMPRESSIONS_NTP = 5;
     // 14 days in hours.
     @VisibleForTesting static final int NTP_SYNC_PROMO_NTP_SINCE_FIRST_TIME_SHOWN_LIMIT_HOURS = 336;
+    @VisibleForTesting static final int NTP_SYNC_PROMO_RESET_AFTER_DAYS = 30;
 
-    private final String mPromoShowCountPreferenceName;
+    /**
+     * If the signin promo card has been hidden for longer than the {@link
+     * #NTP_SYNC_PROMO_RESET_AFTER_DAYS}, resets the impression counts, {@link
+     * ChromePreferenceKeys#SIGNIN_PROMO_NTP_FIRST_SHOWN_TIME} and {@link
+     * ChromePreferenceKeys#SIGNIN_PROMO_NTP_LAST_SHOWN_TIME} to allow the promo card to show again.
+     */
+    public static void resetNtpSyncPromoLimitsIfHiddenForTooLong() {
+        final long currentTime = System.currentTimeMillis();
+        final long resetAfterMs = NTP_SYNC_PROMO_RESET_AFTER_DAYS * DateUtils.DAY_IN_MILLIS;
+        final long lastShownTime =
+                ChromeSharedPreferences.getInstance()
+                        .readLong(ChromePreferenceKeys.SIGNIN_PROMO_NTP_LAST_SHOWN_TIME, 0L);
+        if (lastShownTime <= 0) return;
+
+        if (currentTime - lastShownTime >= resetAfterMs) {
+            ChromeSharedPreferences.getInstance().writeInt(getPromoShowCountPreferenceName(), 0);
+            ChromeSharedPreferences.getInstance()
+                    .removeKey(ChromePreferenceKeys.SIGNIN_PROMO_NTP_FIRST_SHOWN_TIME);
+            ChromeSharedPreferences.getInstance()
+                    .removeKey(ChromePreferenceKeys.SIGNIN_PROMO_NTP_LAST_SHOWN_TIME);
+        }
+    }
 
     public NtpSigninPromoDelegate(
             Context context,
@@ -38,10 +60,6 @@
             SigninAndHistorySyncActivityLauncher launcher,
             Runnable onPromoStateChange) {
         super(context, profile, launcher, onPromoStateChange);
-
-        mPromoShowCountPreferenceName =
-                ChromePreferenceKeys.SYNC_PROMO_SHOW_COUNT.createKey(
-                        SigninPreferencesManager.SyncPromoAccessPointId.NTP);
     }
 
     @Override
@@ -98,12 +116,12 @@
 
     @Override
     void recordImpression() {
-        ChromeSharedPreferences.getInstance().incrementInt(mPromoShowCountPreferenceName);
+        ChromeSharedPreferences.getInstance().incrementInt(getPromoShowCountPreferenceName());
     }
 
     @Override
     boolean isMaxImpressionsReached() {
-        return ChromeSharedPreferences.getInstance().readInt(mPromoShowCountPreferenceName)
+        return ChromeSharedPreferences.getInstance().readInt(getPromoShowCountPreferenceName())
                 >= MAX_IMPRESSIONS_NTP;
     }
 
@@ -116,4 +134,9 @@
                         .readLong(ChromePreferenceKeys.SIGNIN_PROMO_NTP_FIRST_SHOWN_TIME, 0L);
         return firstShownTime > 0 && currentTime - firstShownTime >= timeSinceFirstShownLimitMs;
     }
+
+    private static String getPromoShowCountPreferenceName() {
+        return ChromePreferenceKeys.SYNC_PROMO_SHOW_COUNT.createKey(
+                SigninPreferencesManager.SyncPromoAccessPointId.NTP);
+    }
 }
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/SigninPromoCoordinatorTest.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/SigninPromoCoordinatorTest.java
index 348e545..38e0b79 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/SigninPromoCoordinatorTest.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/signin_promo/SigninPromoCoordinatorTest.java
@@ -171,6 +171,8 @@
                                 SigninPreferencesManager.SyncPromoAccessPointId.NTP));
         ChromeSharedPreferences.getInstance()
                 .removeKey(ChromePreferenceKeys.SIGNIN_PROMO_NTP_FIRST_SHOWN_TIME);
+        ChromeSharedPreferences.getInstance()
+                .removeKey(ChromePreferenceKeys.SIGNIN_PROMO_NTP_LAST_SHOWN_TIME);
     }
 
     @Test
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index d48a4a6..6c136310 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -386,7 +386,7 @@
 <translation id="2739887572830526131">Keep this group to add tabs later or delete it if you no longer need it.</translation>
 <translation id="2742373789128106053"><ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> isn't available right now.</translation>
 <translation id="2760805590727089264">MM / YY</translation>
-<translation id="2760989362628427051">Turn on dark theme when your device's dark theme or Battery Saver is on</translation>
+<translation id="2760989362628427051">Turn on dark theme when your device's Dark theme or Battery Saver is on</translation>
 <translation id="2762000892062317888">just now</translation>
 <translation id="276969039800130567">Signed in as <ph name="USER_EMAIL_ADDRESS" />.</translation>
 <translation id="2776236159752647997">For more settings that relate to privacy, security and data collection, see <ph name="BEGIN_LINK" />Google services<ph name="END_LINK" /></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 2d6ec6f..94c6f4f 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
@@ -1768,7 +1768,7 @@
 <translation id="8816556050903368450">Incluyendo enlace: <ph name="ORIGIN" /></translation>
 <translation id="881688628773363275">La vista previa del contenido de la pestaña no está disponible.</translation>
 <translation id="8820817407110198400">Marcadores</translation>
-<translation id="8828624021816895617">Chrome eliminado automáticamente los permisos de los sitios engañosos y los que no utilizas</translation>
+<translation id="8828624021816895617">Chrome elimina automáticamente los permisos de los sitios engañosos y los que no utilizas</translation>
 <translation id="8835786707922974220">Asegúrate de que siempre puedas acceder a tus contraseñas guardadas</translation>
 <translation id="883806473910249246">No se ha podido descargar el contenido.</translation>
 <translation id="8840953339110955557">Esta página puede ser distinta de la versión online.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index 1268316d..4d1f427 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -1250,7 +1250,7 @@
 <translation id="6637100877383020115">Pour améliorer l'appli, Chrome envoie les données d'utilisation et de plantage à Google. <ph name="BEGIN_UMA_LINK" />Gérer<ph name="END_UMA_LINK" /></translation>
 <translation id="6640207029842583248">Toujours bloquer</translation>
 <translation id="6641780377503683465">Supprimer <ph name="INTEREST" /></translation>
-<translation id="6645629752388991326">Contrôlez quels appareils peuvent se connecter en utilisant ce téléphone comme clé de sécurité.</translation>
+<translation id="6645629752388991326">Contrôler quels appareils peuvent se connecter en utilisant ce téléphone comme clé de sécurité</translation>
 <translation id="6647441008198474441">Les URL que vous consultez sont envoyées à Google pour prédire les sites que vous êtes susceptible de visiter plus tard</translation>
 <translation id="6648977384226967773">{CONTACT,plural, =1{<ph name="CONTACT_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> de plus}one{<ph name="CONTACT_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> de plus}other{<ph name="CONTACT_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> de plus}}</translation>
 <translation id="6649642165559792194">Prévisualiser l'image <ph name="BEGIN_NEW" />Nouveau<ph name="END_NEW" /></translation>
@@ -1659,7 +1659,7 @@
 <translation id="8320212361750431956">Activité récente</translation>
 <translation id="8342727528718219152">Chrome vous indiquera les sites qui envoient peut-être trop de notifications</translation>
 <translation id="834313815369870491">Ne jamais traduire les sites</translation>
-<translation id="8348430946834215779">Utilisez HTTPS autant que possible et recevez un avertissement avant de charger des sites qui ne le prennent pas en charge</translation>
+<translation id="8348430946834215779">Utiliser HTTPS autant que possible et recevoir un avertissement avant de charger des sites qui ne le prennent pas en charge</translation>
 <translation id="8354977102499939946">Rechercher rapidement par commande vocale. Pour modifier ce raccourci, accédez aux paramètres.</translation>
 <translation id="8368001212524806591">Effectuer le suivi du prix</translation>
 <translation id="8368772330826888223">{TAB_GROUP_COUNT,plural, =1{<ph name="TAB_GROUPS_ONE" /> groupe d'onglets}one{<ph name="TAB_GROUPS_MANY" /> groupe d'onglets}other{<ph name="TAB_GROUPS_MANY" /> groupes d'onglets}}</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index bad2bb70..ff0d537 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -163,7 +163,7 @@
 <translation id="1696555181932908973">Možete isprobati druge načine da biste nastavili na <ph name="SITE_ETLD_PLUS_ONE" />.</translation>
 <translation id="1702543251015153180">Želite li promijeniti postavke tamne teme?</translation>
 <translation id="1702907158640575240">Upravljani preglednik</translation>
-<translation id="1718835860248848330">Posljednji sat</translation>
+<translation id="1718835860248848330">Prethodni sat</translation>
 <translation id="1724977129262658800">Otključajte da biste izmijenili zaporku</translation>
 <translation id="1726477445370128854">Možete pregledavati i pretraživati brže kad Chrome predučitava stranice za koje misli da biste ih mogli posjetiti</translation>
 <translation id="1728803206919861584">Želite li spremiti pristupni ključ izvan anonimnog načina?</translation>
@@ -589,7 +589,7 @@
 <translation id="3697705478071004188">Poredaj po web-lokaciji</translation>
 <translation id="3699022356773522638">Preuzeti datoteku?</translation>
 <translation id="3701167022068948696">Ispravi odmah</translation>
-<translation id="3701515417135397388">Upozori ako je zaporka ugrožena zbog povrede podataka</translation>
+<translation id="3701515417135397388">Upozori ako je zaporka ugrožena zbog neovlaštenog pristupa podacima</translation>
 <translation id="3703166520839776970">Ako se taj problem nastavi pojavljivati, odaberite "Više pojedinosti" u nastavku da biste dobili više informacija od <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" />.</translation>
 <translation id="3710501561113687889">Da biste nastavili, <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> će podijeliti vaše podatke, odnosno <ph name="FIELDS_STRING" /> s ovom web-lokacijom.</translation>
 <translation id="3710560693796335511">Suradnja</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 f3f65d4..2c13c78 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
@@ -1439,7 +1439,7 @@
 <translation id="741204030948306876">Ya, saya setuju</translation>
 <translation id="7419565702166471774">Selalu gunakan koneksi aman</translation>
 <translation id="7421293530411019405">Keluar dari grup tab?</translation>
-<translation id="7431991332293347422">Kontrol cara histori browsing digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
+<translation id="7431991332293347422">Kontrol cara histori penjelajahan digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
 <translation id="7435356471928173109">Dinonaktifkan oleh administrator Anda</translation>
 <translation id="7437998757836447326">Logout dari Chrome</translation>
 <translation id="7453467225369441013">Membuat Anda logout dari sebagian besar situs. Anda tidak akan logout dari Akun Google.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index 945a1bf9..485d294e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -563,7 +563,7 @@
 <translation id="3563767357928833671">Contenuti degli Appunti visualizzati</translation>
 <translation id="3566639033325271639">Aggiorna impostazioni</translation>
 <translation id="3568945271227339929">Nessuna password compromessa</translation>
-<translation id="357465026686164600">Telefono come token di sicurezza</translation>
+<translation id="357465026686164600">Smartphone come token di sicurezza</translation>
 <translation id="3577473026931028326">Si è verificato un errore. Riprova.</translation>
 <translation id="3577558748185201054">Gestisci i tuoi interessi e le tue preferenze</translation>
 <translation id="3587482841069643663">Tutti</translation>
@@ -745,7 +745,7 @@
 <translation id="4452411734226507615">Chiudi la scheda <ph name="TAB_TITLE" /></translation>
 <translation id="4452548195519783679">Preferito aggiunto in: <ph name="FOLDER_NAME" /></translation>
 <translation id="4460861538906892109">{ITEMS_COUNT,plural, =1{1 preferito}other{# preferiti}}</translation>
-<translation id="4461614516424362539">Quando colleghi un altro dispositivo con un codice QR, questo può usare il telefono come token di sicurezza. Se lo rimuovi, dovrai scansionare un codice QR per ricollegarlo.</translation>
+<translation id="4461614516424362539">Quando colleghi un altro dispositivo con un codice QR, questo può usare lo smartphone come token di sicurezza. Se lo rimuovi, dovrai scansionare un codice QR per ricollegarlo.</translation>
 <translation id="4478161224666880173">Puoi usare il tuo account <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> su questo sito. Per continuare, accedi a <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" />.</translation>
 <translation id="4479972344484327217">Installazione di <ph name="MODULE" /> per Chrome…</translation>
 <translation id="4481181637083926190">{BOOKMARK_COUNT,plural, =1{Preferito salvato in "<ph name="FOLDER_NAME" />". Viene salvato solo su questo dispositivo.}other{Preferiti salvati in "<ph name="FOLDER_NAME" />". Vengono salvati solo su questo dispositivo.}}</translation>
@@ -857,7 +857,7 @@
 <translation id="4885273946141277891">Numero di istanze di Chrome non supportato.</translation>
 <translation id="4905823827770127520">Includi un link alla pagina</translation>
 <translation id="4908869848243824489">Discover di Google</translation>
-<translation id="4910889077668685004">App di pagamento</translation>
+<translation id="4910889077668685004">App per pagamenti</translation>
 <translation id="4912413785358399818">Sposta scheda</translation>
 <translation id="4913169188695071480">Interrompi aggiornamento</translation>
 <translation id="4918086044614829423">Accetto</translation>
@@ -868,7 +868,7 @@
 <translation id="4932247056774066048">Poiché stai uscendo da un account gestito da <ph name="DOMAIN_NAME" />, i tuoi dati di Chrome verranno eliminati da questo dispositivo. Rimarranno memorizzati nel tuo Account Google.</translation>
 <translation id="4943703118917034429">Realtà virtuale</translation>
 <translation id="4943872375798546930">Nessun risultato</translation>
-<translation id="4950924971025849764">Quando hai eseguito l'accesso allo stesso Account Google, gli altri dispositivi possono utilizzare questo telefono come token di sicurezza.</translation>
+<translation id="4950924971025849764">Quando hai eseguito l'accesso allo stesso Account Google, gli altri dispositivi possono utilizzare questo smartphone come token di sicurezza.</translation>
 <translation id="4953833914914492602">Il gruppo di schede "<ph name="TAB_GROUP_NAME" />" non è più disponibile</translation>
 <translation id="4957722034734105353">Scopri di più...</translation>
 <translation id="4961107849584082341">Traduci questa pagina in qualsiasi lingua</translation>
@@ -1051,7 +1051,7 @@
 <translation id="5797949256525811424">Argomento bloccato</translation>
 <translation id="580893287573699959">Gestisci gli argomenti e i siti che ti interessano</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# ora fa}other{# ore fa}}</translation>
-<translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC Tutti i diritti riservati.</translation>
+<translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Tutti i diritti riservati.</translation>
 <translation id="5814749351757353073">Rimani al passo con i tuoi siti preferiti</translation>
 <translation id="5822875253699806474">Per tornare rapidamente ai siti che hai visitato, sincronizza le tue schede e la cronologia</translation>
 <translation id="5828921839638612740">Puoi eliminare i dati nelle Impostazioni di Chrome</translation>
@@ -1425,7 +1425,7 @@
 <translation id="7352651011704765696">Si è verificato un problema</translation>
 <translation id="7352939065658542140">VIDEO</translation>
 <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{Condividi 1 elemento selezionato}other{Condividi # elementi selezionati}}</translation>
-<translation id="7359002509206457351">Accedi ai metodi di pagamento</translation>
+<translation id="7359002509206457351">Accesso ai metodi di pagamento</translation>
 <translation id="7363349185727752629">Una guida alle scelte relative alla tua privacy</translation>
 <translation id="7364103838544876661">Altre opzioni per eliminare i dati di navigazione</translation>
 <translation id="7375125077091615385">Tipo:</translation>
@@ -1439,7 +1439,7 @@
 <translation id="741204030948306876">Sì, accetto</translation>
 <translation id="7419565702166471774">Utilizza sempre connessioni sicure</translation>
 <translation id="7421293530411019405">Uscire dal gruppo di schede?</translation>
-<translation id="7431991332293347422">Controlla la modalità di utilizzo della cronologia di navigazione per personalizzare la Ricerca e non solo</translation>
+<translation id="7431991332293347422">Controlla come la cronologia di navigazione viene utilizzata per personalizzare la Ricerca e altro</translation>
 <translation id="7435356471928173109">Disattivata dall'amministratore</translation>
 <translation id="7437998757836447326">Esci da Chrome</translation>
 <translation id="7453467225369441013">Verrai disconnesso dalla maggior parte dei siti, ma non dal tuo Account Google.</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 828665f3..5cd00de 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
@@ -1250,7 +1250,7 @@
 <translation id="6637100877383020115">アプリを改善するため、Chrome では使用状況とクラッシュに関するデータが Google に送信されます。<ph name="BEGIN_UMA_LINK" />管理<ph name="END_UMA_LINK" /></translation>
 <translation id="6640207029842583248">常にブロックする</translation>
 <translation id="6641780377503683465"><ph name="INTEREST" /> を削除</translation>
-<translation id="6645629752388991326">このデバイスをセキュリティ キーとして使用してログインできるデバイスを管理します</translation>
+<translation id="6645629752388991326">このデバイスをセキュリティ キーとして使用することで、ログインできるデバイスを管理します</translation>
 <translation id="6647441008198474441">アクセスした URL が Google に送信され、次にアクセスするサイトの予測が行われます</translation>
 <translation id="6648977384226967773">{CONTACT,plural, =1{<ph name="CONTACT_PREVIEW" />\u2026 他 <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> 件}other{<ph name="CONTACT_PREVIEW" />\u2026 他 <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> 件}}</translation>
 <translation id="6649642165559792194">画像をプレビュー <ph name="BEGIN_NEW" />New<ph name="END_NEW" /></translation>
@@ -1439,7 +1439,7 @@
 <translation id="741204030948306876">ON にする</translation>
 <translation id="7419565702166471774">常に安全な接続を使用する</translation>
 <translation id="7421293530411019405">タブグループから退出しますか?</translation>
-<translation id="7431991332293347422">検索などのカスタマイズに閲覧履歴がどのように使われるかを管理します</translation>
+<translation id="7431991332293347422">検索などのパーソナライズに閲覧履歴がどのように使われるかを管理します</translation>
 <translation id="7435356471928173109">管理者によってオフにされています</translation>
 <translation id="7437998757836447326">Chrome からログアウト</translation>
 <translation id="7453467225369441013">ほとんどのサイトからログアウトします。Google アカウントへのログイン状態は維持されます。</translation>
@@ -1657,7 +1657,7 @@
 <translation id="8310451567823644042">まもなくパスワード機能が動作を停止します</translation>
 <translation id="831192587911042850">現在のウェブサイトを、フォローしているウェブサイトのリストに追加します。</translation>
 <translation id="8320212361750431956">最近のアクティビティ</translation>
-<translation id="8342727528718219152">多くの通知を送信しているサイトがあれば、Chrome でお知らせします</translation>
+<translation id="8342727528718219152">過剰な数の通知を送信しているサイトがあれば、Chrome でお知らせします</translation>
 <translation id="834313815369870491">翻訳しないサイト</translation>
 <translation id="8348430946834215779">可能な限り HTTPS を使用し、HTTPS をサポートしていないサイトは読み込む前に警告を表示します</translation>
 <translation id="8354977102499939946">音声ですばやく検索します。このショートカットは [設定] で編集できます。</translation>
@@ -1792,7 +1792,7 @@
 <translation id="8937772741022875483">Chrome のアクティビティを Digital Wellbeing から削除しますか?</translation>
 <translation id="8942627711005830162">別のウィンドウで開く</translation>
 <translation id="8945143127965743188"><ph name="LANG" /> - この言語をダウンロードできませんでした。しばらくしてからもう一度お試しください。</translation>
-<translation id="8963117664422609631">サイトの設定に移動します</translation>
+<translation id="8963117664422609631">サイトの設定に移動</translation>
 <translation id="8965591936373831584">保留中</translation>
 <translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> 個のシークレット タブと <ph name="TAB_COUNT_ONE" /> 個以上のタブが閉じられます}other{<ph name="INCOGNITO_TAB_COUNT" /> 個のシークレット タブと <ph name="TAB_COUNT_MANY" /> 個以上のタブが閉じられます}}</translation>
 <translation id="897061774231912216">Google Play 開発者サービスが利用できないため、まもなくパスワード機能は動作を停止します。Google アカウントに保存されているパスワードを使用するには、別のデバイスでログインするか、passwords.google.com にアクセスしてください。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 1cc6222..b3466abb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -923,7 +923,7 @@
 <translation id="5180063720319462041">Página traduzida para o <ph name="TARGET_LANGUAGE" /></translation>
 <translation id="5191251636205085390">Descubra e controle novas tecnologias para substituir cookies de terceiros</translation>
 <translation id="5204967432542742771">Insira a senha</translation>
-<translation id="5206168361184759344">{FILE_COUNT,plural, =1{Fazendo o download do arquivo…}one{Fazendo o download de # arquivo…}other{Fazendo o download de # arquivos…}}</translation>
+<translation id="5206168361184759344">{FILE_COUNT,plural, =1{Baixando o arquivo…}one{Baixando # arquivo…}other{Baixando # arquivos…}}</translation>
 <translation id="5210286577605176222">Ir para a guia anterior</translation>
 <translation id="5210365745912300556">Fechar guia</translation>
 <translation id="5215957675041756913">Controlar seus dados e sua conta</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 e2614cc..3585c4a 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
@@ -29,7 +29,7 @@
 <translation id="1108938384783527433">Geçmiş senkronizasyonu</translation>
 <translation id="1111673857033749125">Diğer cihazlarınızda kaydedilmiş yer işaretleri burada görünür.</translation>
 <translation id="1113597929977215864">Basitleştirilmiş görünümü göster</translation>
-<translation id="1126696498560056882">Bu cihazdaki hesapları yönet</translation>
+<translation id="1126696498560056882">Bu cihazdaki hesapları yönetin</translation>
 <translation id="1129510026454351943">Ayrıntılar: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1135018701024399762">Gizli mod, internette gezinme işlemlerinizi cihazınızı kullanan diğer kişilerden gizli tutar</translation>
 <translation id="1138458427267715730">Web'deki herhangi bir sitede fiyat düşüşü olduğunda uyarı alın</translation>
@@ -1137,7 +1137,7 @@
 <translation id="6150706324143004339">Chrome verilerini kullanmak ve Google Hesabınıza kaydetmek için Chrome'u güncelleyin</translation>
 <translation id="6154478581116148741">Bu cihazdaki şifrelerinizi dışarı aktarmak için Ayarlar'da ekran kilidini açın</translation>
 <translation id="6162892189396105610">Chrome'un ziyaret edebileceğinizi düşündüğü sayfaları önceden yükler.</translation>
-<translation id="6170675927290506430">Bildirim ayarlarına git</translation>
+<translation id="6170675927290506430">Bildirim ayarlarına gidin</translation>
 <translation id="6186394685773237175">Sızdırılmış şifre bulunmadı</translation>
 <translation id="6192907950379606605">Resim açıklaması al</translation>
 <translation id="6193448654517602979">Sekmeleri seç</translation>
diff --git a/chrome/browser/ui/login/http_auth_coordinator.cc b/chrome/browser/ui/login/http_auth_coordinator.cc
index 273f35e..efa5da63 100644
--- a/chrome/browser/ui/login/http_auth_coordinator.cc
+++ b/chrome/browser/ui/login/http_auth_coordinator.cc
@@ -134,6 +134,9 @@
                                  std::move(continuation), web_view_guest)) {
     return true;
   }
+#else
+  // Suppress -Wunused-private-field warning.
+  (void)is_request_for_navigation_;
 #endif
   return false;
 }
diff --git a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc
index b7da5cd18..47d73f9b 100644
--- a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc
+++ b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc
@@ -9,6 +9,7 @@
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/page_info/about_this_site_tab_helper.h"
+#include "chrome/browser/page_info/merchant_trust_service_factory.h"
 #include "chrome/browser/page_info/page_info_features.h"
 #include "chrome/browser/permissions/permission_manager_factory.h"
 #include "chrome/browser/permissions/system/system_permission_settings.h"
@@ -23,6 +24,7 @@
 #include "components/content_settings/core/common/features.h"
 #include "components/page_info/core/about_this_site_service.h"
 #include "components/page_info/core/features.h"
+#include "components/page_info/core/merchant_trust_service.h"
 #include "components/permissions/permission_decision_auto_blocker.h"
 #include "components/permissions/permission_manager.h"
 #include "components/permissions/permissions_client.h"
@@ -317,6 +319,13 @@
       ->GetEmbargoResult(site_url_, type);
 }
 
+void ChromePageInfoUiDelegate::GetMerchantTrustInfo(
+    page_info::MerchantDataCallback callback) {
+  MerchantTrustServiceFactory::GetForProfile(GetProfile())
+      ->GetMerchantTrustInfo(web_contents_->GetVisibleURL(),
+                             std::move(callback));
+}
+
 Profile* ChromePageInfoUiDelegate::GetProfile() const {
   return Profile::FromBrowserContext(web_contents_->GetBrowserContext());
 }
diff --git a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h
index 2b43117..22e500c 100644
--- a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h
+++ b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h
@@ -87,6 +87,7 @@
       ContentSettingsType type) override;
 
   bool IsTrackingProtection3pcdEnabled() override;
+  void GetMerchantTrustInfo(page_info::MerchantDataCallback callback) override;
 
  private:
   Profile* GetProfile() const;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc
new file mode 100644
index 0000000..9055a4c
--- /dev/null
+++ b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.cc
@@ -0,0 +1,26 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
+
+PasswordChangeInfoBubbleController::PasswordChangeInfoBubbleController(
+    base::WeakPtr<PasswordsModelDelegate> delegate)
+    : PasswordBubbleControllerBase(
+          delegate,
+          password_manager::metrics_util::UIDisplayDisposition::
+              PASSWORD_CHANGE_BUBBLE) {}
+
+PasswordChangeInfoBubbleController::~PasswordChangeInfoBubbleController() {
+  OnBubbleClosing();
+}
+
+std::u16string PasswordChangeInfoBubbleController::GetTitle() const {
+  // TODO(crbug.com/381053884): Return correct title (depends on
+  // PasswordChangeDelegate::State).
+  return u"";
+}
+
+void PasswordChangeInfoBubbleController::ReportInteractions() {
+  // TODO(crbug.com/381053884): Report metrics.
+}
diff --git a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h
new file mode 100644
index 0000000..d1075c60
--- /dev/null
+++ b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h
@@ -0,0 +1,26 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_PASSWORD_CHANGE_PASSWORD_CHANGE_INFO_BUBBLE_CONTROLLER_H_
+#define CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_PASSWORD_CHANGE_PASSWORD_CHANGE_INFO_BUBBLE_CONTROLLER_H_
+
+#include <string>
+
+#include "chrome/browser/ui/passwords/bubble_controllers/password_bubble_controller_base.h"
+
+// Controller for the views informing the user about the password change flow
+// state.
+class PasswordChangeInfoBubbleController : public PasswordBubbleControllerBase {
+ public:
+  explicit PasswordChangeInfoBubbleController(
+      base::WeakPtr<PasswordsModelDelegate> delegate);
+
+  ~PasswordChangeInfoBubbleController() override;
+
+  // PasswordBubbleControllerBase methods:
+  std::u16string GetTitle() const override;
+  void ReportInteractions() override;
+};
+
+#endif  // CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_PASSWORD_CHANGE_PASSWORD_CHANGE_INFO_BUBBLE_CONTROLLER_H_
diff --git a/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc
new file mode 100644
index 0000000..67a756af
--- /dev/null
+++ b/chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc
@@ -0,0 +1,36 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
+
+#include "chrome/browser/ui/passwords/passwords_model_delegate_mock.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+class PasswordChangeBubbleControllerTest : public ::testing::Test {
+ public:
+  PasswordChangeBubbleControllerTest() {
+    mock_delegate_ =
+        std::make_unique<testing::NiceMock<PasswordsModelDelegateMock>>();
+  }
+  void CreateController() {
+    EXPECT_CALL(*mock_delegate_, OnBubbleShown());
+    controller_ = std::make_unique<PasswordChangeInfoBubbleController>(
+        mock_delegate_->AsWeakPtr());
+  }
+
+  PasswordsModelDelegateMock* delegate() { return mock_delegate_.get(); }
+  PasswordChangeInfoBubbleController* controller() { return controller_.get(); }
+
+ private:
+  std::unique_ptr<PasswordsModelDelegateMock> mock_delegate_;
+  std::unique_ptr<PasswordChangeInfoBubbleController> controller_;
+};
+
+TEST_F(PasswordChangeBubbleControllerTest, ControllerDestroyed) {
+  CreateController();
+
+  EXPECT_CALL(*delegate(), OnBubbleHidden());
+  controller()->OnBubbleClosing();
+}
diff --git a/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.cc b/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.cc
index 9d4dfe9..2554358 100644
--- a/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.cc
+++ b/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.cc
@@ -32,9 +32,9 @@
 }
 
 void CredentialLeakDialogControllerImpl::ShowCredentialLeakPrompt(
-    CredentialLeakPrompt* dialog) {
+    std::unique_ptr<CredentialLeakPrompt> dialog) {
   DCHECK(dialog);
-  credential_leak_dialog_ = dialog;
+  credential_leak_dialog_ = std::move(dialog);
   credential_leak_dialog_->ShowCredentialLeakPrompt();
 }
 
@@ -71,10 +71,7 @@
 }
 
 void CredentialLeakDialogControllerImpl::ResetDialog() {
-  if (credential_leak_dialog_) {
-    credential_leak_dialog_->ControllerGone();
-    credential_leak_dialog_ = nullptr;
-  }
+  credential_leak_dialog_.reset();
 }
 
 std::u16string CredentialLeakDialogControllerImpl::GetAcceptButtonLabel()
diff --git a/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.h b/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.h
index d07e104..66c1526 100644
--- a/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.h
+++ b/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_UI_PASSWORDS_CREDENTIAL_LEAK_DIALOG_CONTROLLER_IMPL_H_
 #define CHROME_BROWSER_UI_PASSWORDS_CREDENTIAL_LEAK_DIALOG_CONTROLLER_IMPL_H_
 
+#include <memory>
+
 #include "base/memory/raw_ptr.h"
 #include "chrome/browser/ui/passwords/credential_leak_dialog_controller.h"
 #include "components/password_manager/core/browser/leak_detection_dialog_utils.h"
@@ -32,7 +34,7 @@
   ~CredentialLeakDialogControllerImpl() override;
 
   // Pop up the credential leak dialog.
-  void ShowCredentialLeakPrompt(CredentialLeakPrompt* dialog);
+  void ShowCredentialLeakPrompt(std::unique_ptr<CredentialLeakPrompt> dialog);
 
   // CredentialLeakDialogController:
   bool IsShowingAccountChooser() const override;
@@ -48,7 +50,7 @@
   bool ShouldShowCancelButton() const override;
 
  private:
-  raw_ptr<CredentialLeakPrompt> credential_leak_dialog_ = nullptr;
+  std::unique_ptr<CredentialLeakPrompt> credential_leak_dialog_;
   raw_ptr<PasswordsLeakDialogDelegate> delegate_;
   std::unique_ptr<password_manager::LeakDialogTraits> leak_dialog_traits_;
   GURL url_;
diff --git a/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl_unittest.cc b/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl_unittest.cc
index ef92498..7861596 100644
--- a/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl_unittest.cc
+++ b/chrome/browser/ui/passwords/credential_leak_dialog_controller_impl_unittest.cc
@@ -21,6 +21,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
+namespace views {
+class Widget;
+}
 namespace {
 
 constexpr ukm::SourceId kTestSourceId = 0x1234;
@@ -48,7 +51,7 @@
   MockCredentialLeakPrompt& operator=(const MockCredentialLeakPrompt&) = delete;
 
   MOCK_METHOD(void, ShowCredentialLeakPrompt, (), (override));
-  MOCK_METHOD(void, ControllerGone, (), (override));
+  MOCK_METHOD(views::Widget*, GetWidgetForTesting, (), (override));
 };
 
 class CredentialLeakDialogControllerTest : public testing::Test {
@@ -66,6 +69,10 @@
         std::move(recorder));
   }
 
+  std::unique_ptr<StrictMock<MockCredentialLeakPrompt>> SetupLeakPrompt() {
+    return std::make_unique<StrictMock<MockCredentialLeakPrompt>>();
+  }
+
   base::HistogramTester& histogram_tester() { return histogram_tester_; }
 
   PasswordsLeakDialogDelegateMock& ui_controller_mock() {
@@ -76,8 +83,6 @@
     return test_ukm_recorder_;
   }
 
-  MockCredentialLeakPrompt& leak_prompt() { return leak_prompt_; }
-
   CredentialLeakDialogControllerImpl& controller() { return *controller_; }
 
  private:
@@ -85,7 +90,6 @@
   base::HistogramTester histogram_tester_;
   ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
   StrictMock<PasswordsLeakDialogDelegateMock> ui_controller_mock_;
-  StrictMock<MockCredentialLeakPrompt> leak_prompt_;
   std::unique_ptr<CredentialLeakDialogControllerImpl> controller_;
 };
 
@@ -110,8 +114,10 @@
   SetUpController(
       CreateLeakType(IsSaved(false), IsReused(false), IsSyncing(false)));
 
-  EXPECT_CALL(leak_prompt(), ShowCredentialLeakPrompt());
-  controller().ShowCredentialLeakPrompt(&leak_prompt());
+  auto leak_prompt = SetupLeakPrompt();
+
+  EXPECT_CALL(*leak_prompt, ShowCredentialLeakPrompt());
+  controller().ShowCredentialLeakPrompt(std::move(leak_prompt));
 
   EXPECT_CALL(ui_controller_mock(), OnLeakDialogHidden());
   controller().OnCloseDialog();
@@ -126,16 +132,16 @@
 
   CheckUkmMetricsExpectations(test_ukm_recorder(), LeakDialogType::kChange,
                               LeakDialogDismissalReason::kNoDirectInteraction);
-
-  EXPECT_CALL(leak_prompt(), ControllerGone());
 }
 
 TEST_F(CredentialLeakDialogControllerTest, CredentialLeakDialogOk) {
   SetUpController(
       CreateLeakType(IsSaved(true), IsReused(false), IsSyncing(false)));
 
-  EXPECT_CALL(leak_prompt(), ShowCredentialLeakPrompt());
-  controller().ShowCredentialLeakPrompt(&leak_prompt());
+  auto leak_prompt = SetupLeakPrompt();
+
+  EXPECT_CALL(*leak_prompt, ShowCredentialLeakPrompt());
+  controller().ShowCredentialLeakPrompt(std::move(leak_prompt));
 
   EXPECT_CALL(ui_controller_mock(), OnLeakDialogHidden());
   controller().OnAcceptDialog();
@@ -150,16 +156,16 @@
 
   CheckUkmMetricsExpectations(test_ukm_recorder(), LeakDialogType::kChange,
                               LeakDialogDismissalReason::kClickedOk);
-
-  EXPECT_CALL(leak_prompt(), ControllerGone());
 }
 
 TEST_F(CredentialLeakDialogControllerTest, CredentialLeakDialogCancel) {
   SetUpController(
       CreateLeakType(IsSaved(false), IsReused(true), IsSyncing(true)));
 
-  EXPECT_CALL(leak_prompt(), ShowCredentialLeakPrompt());
-  controller().ShowCredentialLeakPrompt(&leak_prompt());
+  auto leak_prompt = SetupLeakPrompt();
+
+  EXPECT_CALL(*leak_prompt, ShowCredentialLeakPrompt());
+  controller().ShowCredentialLeakPrompt(std::move(leak_prompt));
 
   EXPECT_CALL(ui_controller_mock(), OnLeakDialogHidden());
   controller().OnCancelDialog();
@@ -175,16 +181,16 @@
   CheckUkmMetricsExpectations(test_ukm_recorder(),
                               LeakDialogType::kCheckupAndChange,
                               LeakDialogDismissalReason::kClickedClose);
-
-  EXPECT_CALL(leak_prompt(), ControllerGone());
 }
 
 TEST_F(CredentialLeakDialogControllerTest, CredentialLeakDialogCheckPasswords) {
   SetUpController(
       CreateLeakType(IsSaved(true), IsReused(true), IsSyncing(true)));
 
-  EXPECT_CALL(leak_prompt(), ShowCredentialLeakPrompt());
-  controller().ShowCredentialLeakPrompt(&leak_prompt());
+  auto leak_prompt = SetupLeakPrompt();
+
+  EXPECT_CALL(*leak_prompt, ShowCredentialLeakPrompt());
+  controller().ShowCredentialLeakPrompt(std::move(leak_prompt));
 
   EXPECT_CALL(
       ui_controller_mock(),
@@ -204,23 +210,22 @@
   CheckUkmMetricsExpectations(
       test_ukm_recorder(), LeakDialogType::kCheckup,
       LeakDialogDismissalReason::kClickedCheckPasswords);
-
-  EXPECT_CALL(leak_prompt(), ControllerGone());
 }
 
 TEST_F(CredentialLeakDialogControllerTest, PasswordChangeStarted) {
   SetUpController(CreateLeakType(IsSaved(false), IsReused(false),
                                  IsSyncing(true), HasChangePasswordUrl(true)));
 
-  EXPECT_CALL(leak_prompt(), ShowCredentialLeakPrompt());
-  controller().ShowCredentialLeakPrompt(&leak_prompt());
+  auto leak_prompt = SetupLeakPrompt();
+
+  EXPECT_CALL(*leak_prompt, ShowCredentialLeakPrompt());
+  controller().ShowCredentialLeakPrompt(std::move(leak_prompt));
 
   EXPECT_CALL(ui_controller_mock(),
               ChangePassword(GURL(kUrl), std::u16string(kUsername),
                              std::u16string(kPassword)));
   EXPECT_CALL(ui_controller_mock(), OnLeakDialogHidden());
   controller().OnAcceptDialog();
-  EXPECT_CALL(leak_prompt(), ControllerGone());
 }
 
 TEST_F(CredentialLeakDialogControllerTest, PasswordChangeNotStarted) {
@@ -229,14 +234,15 @@
   SetUpController(CreateLeakType(IsSaved(false), IsReused(true),
                                  IsSyncing(true), HasChangePasswordUrl(true)));
 
-  EXPECT_CALL(leak_prompt(), ShowCredentialLeakPrompt());
-  controller().ShowCredentialLeakPrompt(&leak_prompt());
+  auto leak_prompt = SetupLeakPrompt();
+
+  EXPECT_CALL(*leak_prompt, ShowCredentialLeakPrompt());
+  controller().ShowCredentialLeakPrompt(std::move(leak_prompt));
 
   EXPECT_CALL(ui_controller_mock(), ChangePassword).Times(0);
   EXPECT_CALL(ui_controller_mock(), NavigateToPasswordCheckup);
   EXPECT_CALL(ui_controller_mock(), OnLeakDialogHidden());
   controller().OnAcceptDialog();
-  EXPECT_CALL(leak_prompt(), ControllerGone());
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
index 1697520..592fb255 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -193,7 +193,14 @@
 
 void ManagePasswordsUIController::OnPasswordSubmitted(
     std::unique_ptr<PasswordFormManagerForUI> form_manager) {
-  DestroyPopups();
+  bool password_change_ongoing = IsPasswordChangeOngoing();
+
+  if (!password_change_ongoing) {
+    // Password change bubble shouldn't be destroyed if the flow is still
+    // running.
+    DestroyPopups();
+  }
+
   save_fallback_timer_.Stop();
 
   // TODO(crbug.com/40943570): This is used to align the default password store
@@ -204,6 +211,14 @@
   } else {
     passwords_data_.OnPendingPassword(std::move(form_manager));
   }
+
+  // All necessary events should be triggered in `passwords_data_`, so that the
+  // state would be correct after password change is finished, but no other
+  // bubbles should be displayed.
+  if (password_change_ongoing) {
+    return;
+  }
+
   if (!IsSavingPromptBlockedExplicitlyOrImplicitly()) {
     bubble_status_ = BubbleStatus::SHOULD_POP_UP;
   }
@@ -668,6 +683,9 @@
 }
 
 password_manager::ui::State ManagePasswordsUIController::GetState() const {
+  if (IsPasswordChangeOngoing()) {
+    return password_manager::ui::State::PASSWORD_CHANGE_STATE;
+  }
   return passwords_data_.state();
 }
 
@@ -1017,6 +1035,10 @@
 }
 
 void ManagePasswordsUIController::OnLeakDialogHidden() {
+  // Should not trigger any other dialogs while password change is running.
+  if (IsPasswordChangeOngoing()) {
+    return;
+  }
   dialog_controller_.reset();
   if (GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
     bubble_status_ = BubbleStatus::SHOULD_POP_UP;
@@ -1179,7 +1201,8 @@
   return CreateAutoSigninPromptView(controller, web_contents());
 }
 
-CredentialLeakPrompt* ManagePasswordsUIController::CreateCredentialLeakPrompt(
+std::unique_ptr<CredentialLeakPrompt>
+ManagePasswordsUIController::CreateCredentialLeakPrompt(
     CredentialLeakDialogController* controller) {
   return CreateCredentialLeakPromptView(controller, web_contents());
 }
@@ -1235,6 +1258,17 @@
   }
 }
 
+PasswordChangeDelegate* ManagePasswordsUIController::GetPasswordChangeDelegate()
+    const {
+  ChromePasswordChangeService* password_change_service =
+      PasswordChangeServiceFactory::GetForProfile(
+          Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
+  if (!password_change_service) {
+    return nullptr;
+  }
+  return password_change_service->GetPasswordChangeDelegate(web_contents());
+}
+
 // static
 base::TimeDelta ManagePasswordsUIController::GetTimeoutForSaveFallback() {
   return base::Seconds(
@@ -1390,4 +1424,8 @@
          pending_form.password_issues.end();
 }
 
+bool ManagePasswordsUIController::IsPasswordChangeOngoing() const {
+  return GetPasswordChangeDelegate();
+}
+
 WEB_CONTENTS_USER_DATA_KEY_IMPL(ManagePasswordsUIController);
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
index e2b4975..0f3d8fb 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -248,7 +248,7 @@
       CredentialManagerDialogController* controller);
 
   // Called to create the credentials leaked dialog.
-  virtual CredentialLeakPrompt* CreateCredentialLeakPrompt(
+  virtual std::unique_ptr<CredentialLeakPrompt> CreateCredentialLeakPrompt(
       CredentialLeakDialogController* controller);
 
   // Check if |web_contents()| is attached to some Browser. Mocked in tests.
@@ -269,6 +269,8 @@
   void PrimaryPageChanged(content::Page& page) override;
   void OnVisibilityChanged(content::Visibility visibility) override;
 
+  PasswordChangeDelegate* GetPasswordChangeDelegate() const override;
+
  private:
   friend class content::WebContentsUserData<ManagePasswordsUIController>;
 
@@ -356,6 +358,9 @@
   // phished.
   bool IsPendingPasswordPhished() const;
 
+  // Returns true if password changing is currently running.
+  bool IsPasswordChangeOngoing() const;
+
   // Timeout in seconds for the manual fallback for saving.
   static int save_fallback_timeout_in_seconds_;
 
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
index 0c703d5..e379670 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -14,11 +14,14 @@
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/bind.h"
 #include "base/test/gmock_move_support.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
+#include "chrome/browser/password_manager/chrome_password_change_service.h"
+#include "chrome/browser/password_manager/password_change_service_factory.h"
 #include "chrome/browser/ui/hats/mock_trust_safety_sentiment_service.h"
 #include "chrome/browser/ui/hats/trust_safety_sentiment_service_factory.h"
 #include "chrome/browser/ui/passwords/credential_leak_dialog_controller.h"
@@ -29,6 +32,7 @@
 #include "chrome/browser/ui/passwords/passwords_model_delegate.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/affiliations/core/browser/mock_affiliation_service.h"
 #include "components/device_reauth/device_authenticator.h"
 #include "components/password_manager/core/browser/features/password_features.h"
 #include "components/password_manager/core/browser/mock_password_form_manager_for_ui.h"
@@ -80,6 +84,9 @@
 using ::testing::ReturnRef;
 using ::testing::SaveArg;
 
+namespace views {
+class Widget;
+}
 namespace {
 
 MATCHER_P3(MatchesLoginAndURL,
@@ -112,7 +119,7 @@
 class PasswordLeakDialogMock : public CredentialLeakPrompt {
  public:
   MOCK_METHOD(void, ShowCredentialLeakPrompt, (), (override));
-  MOCK_METHOD(void, ControllerGone, (), (override));
+  MOCK_METHOD(views::Widget*, GetWidgetForTesting, (), (override));
 };
 
 class TestManagePasswordsIconView : public ManagePasswordsIconView {
@@ -169,7 +176,7 @@
               CreateAutoSigninPrompt,
               (CredentialManagerDialogController*),
               (override));
-  MOCK_METHOD(CredentialLeakPrompt*,
+  MOCK_METHOD(std::unique_ptr<CredentialLeakPrompt>,
               CreateCredentialLeakPrompt,
               (CredentialLeakDialogController*),
               (override));
@@ -1647,11 +1654,12 @@
   EXPECT_TRUE(controller()->opened_automatic_bubble());
 
   // Leak detection dialog hides the bubble.
-  PasswordLeakDialogMock dialog_prompt;
+  auto dialog_prompt = std::make_unique<PasswordLeakDialogMock>();
   CredentialLeakDialogController* dialog_controller = nullptr;
+  EXPECT_CALL(*dialog_prompt, ShowCredentialLeakPrompt);
   EXPECT_CALL(*controller(), CreateCredentialLeakPrompt)
-      .WillOnce(DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt)));
-  EXPECT_CALL(dialog_prompt, ShowCredentialLeakPrompt);
+      .WillOnce(DoAll(SaveArg<0>(&dialog_controller),
+                      Return(std::move(dialog_prompt))));
   controller()->OnCredentialLeak(password_manager::LeakedPasswordDetails(
       password_manager::CreateLeakType(password_manager::IsSaved(false),
                                        password_manager::IsReused(false),
@@ -1669,7 +1677,6 @@
           Return(base::span<const password_manager::InteractionsStats>()));
 
   // Close the dialog.
-  EXPECT_CALL(dialog_prompt, ControllerGone);
   EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility());
   dialog_controller->OnAcceptDialog();
 
@@ -1689,11 +1696,12 @@
   EXPECT_FALSE(controller()->opened_automatic_bubble());
 
   // Leak detection dialog hides the bubble.
-  PasswordLeakDialogMock dialog_prompt;
+  auto dialog_prompt = std::make_unique<PasswordLeakDialogMock>();
   CredentialLeakDialogController* dialog_controller = nullptr;
+  EXPECT_CALL(*dialog_prompt, ShowCredentialLeakPrompt);
   EXPECT_CALL(*controller(), CreateCredentialLeakPrompt)
-      .WillOnce(DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt)));
-  EXPECT_CALL(dialog_prompt, ShowCredentialLeakPrompt);
+      .WillOnce(DoAll(SaveArg<0>(&dialog_controller),
+                      Return(std::move(dialog_prompt))));
   controller()->OnCredentialLeak(password_manager::LeakedPasswordDetails(
       password_manager::CreateLeakType(password_manager::IsSaved(false),
                                        password_manager::IsReused(false),
@@ -1708,7 +1716,6 @@
   EXPECT_CALL(*form_manager_ptr, IsBlocklisted()).WillOnce(Return(true));
 
   // Close the dialog.
-  EXPECT_CALL(dialog_prompt, ControllerGone);
   EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility());
   dialog_controller->OnAcceptDialog();
 
@@ -1726,11 +1733,13 @@
   EXPECT_TRUE(controller()->opened_automatic_bubble());
 
   // Leak detection dialog hides the bubble.
-  PasswordLeakDialogMock dialog_prompt;
+  auto dialog_prompt = std::make_unique<PasswordLeakDialogMock>();
+  auto* dialog_prompt_ptr = dialog_prompt.get();
   CredentialLeakDialogController* dialog_controller = nullptr;
   EXPECT_CALL(*controller(), CreateCredentialLeakPrompt)
-      .WillOnce(DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt)));
-  EXPECT_CALL(dialog_prompt, ShowCredentialLeakPrompt);
+      .WillOnce(DoAll(SaveArg<0>(&dialog_controller),
+                      Return(std::move(dialog_prompt))));
+  EXPECT_CALL(*dialog_prompt_ptr, ShowCredentialLeakPrompt);
   controller()->OnCredentialLeak(password_manager::LeakedPasswordDetails(
       password_manager::CreateLeakType(password_manager::IsSaved(true),
                                        password_manager::IsReused(false),
@@ -1741,7 +1750,6 @@
   EXPECT_FALSE(controller()->opened_automatic_bubble());
 
   // Close the dialog.
-  EXPECT_CALL(dialog_prompt, ControllerGone);
   EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility());
   dialog_controller->OnAcceptDialog();
 
@@ -2098,6 +2106,30 @@
       password_manager::ui::PASSKEY_NOT_ACCEPTED_STATE);
 }
 
+TEST_F(ManagePasswordsUIControllerTest, PasswordChangeOngoing) {
+  testing::StrictMock<affiliations::MockAffiliationService>
+      mock_affiliation_service;
+  PasswordChangeServiceFactory::GetInstance()->SetTestingFactory(
+      profile(),
+      base::BindLambdaForTesting(
+          [&mock_affiliation_service](content::BrowserContext* context)
+              -> std::unique_ptr<KeyedService> {
+            return std::make_unique<ChromePasswordChangeService>(
+                &mock_affiliation_service);
+          }));
+
+  const GURL kUrl = GURL("https://example.com/");
+  EXPECT_CALL(mock_affiliation_service, GetChangePasswordURL(kUrl))
+      .WillOnce(testing::Return(GURL("https://example.com/password/")));
+  auto* password_change_service =
+      PasswordChangeServiceFactory::GetForProfile(profile());
+  password_change_service->StartPasswordChange(kUrl, u"new_username",
+                                               u"new_password", web_contents());
+
+  ASSERT_EQ(password_manager::ui::PASSWORD_CHANGE_STATE,
+            controller()->GetState());
+}
+
 #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH)
 TEST_F(ManagePasswordsUIControllerTest,
        ShouldShowBiometricAuthenticationForFillingPromo) {
diff --git a/chrome/browser/ui/passwords/password_dialog_prompts.h b/chrome/browser/ui/passwords/password_dialog_prompts.h
index d9bf3294..d858fcd 100644
--- a/chrome/browser/ui/passwords/password_dialog_prompts.h
+++ b/chrome/browser/ui/passwords/password_dialog_prompts.h
@@ -5,12 +5,18 @@
 #ifndef CHROME_BROWSER_UI_PASSWORDS_PASSWORD_DIALOG_PROMPTS_H_
 #define CHROME_BROWSER_UI_PASSWORDS_PASSWORD_DIALOG_PROMPTS_H_
 
+#include <memory>
+
 #include "third_party/skia/include/core/SkColor.h"
 
 namespace content {
 class WebContents;
 }
 
+namespace views {
+class Widget;
+}
+
 class CredentialLeakDialogController;
 class CredentialManagerDialogController;
 
@@ -55,17 +61,17 @@
  public:
   CredentialLeakPrompt(const CredentialLeakPrompt&) = delete;
   CredentialLeakPrompt& operator=(const CredentialLeakPrompt&) = delete;
+  virtual ~CredentialLeakPrompt() = default;
 
   // Shows the dialog.
   virtual void ShowCredentialLeakPrompt() = 0;
 
-  // Notifies the UI element that its controller is no longer managing the UI
-  // element. The dialog should close.
-  virtual void ControllerGone() = 0;
+  // Returns the underlying Widget associated with the on-screen prompt. For
+  // Testing Only!
+  virtual views::Widget* GetWidgetForTesting() = 0;
 
  protected:
   CredentialLeakPrompt() = default;
-  virtual ~CredentialLeakPrompt() = default;
 };
 
 // Factory function for AccountChooserPrompt on desktop platforms.
@@ -79,7 +85,7 @@
     content::WebContents* web_contents);
 
 // Factory function for CredentialsLeakedPrompt on desktop platforms.
-CredentialLeakPrompt* CreateCredentialLeakPromptView(
+std::unique_ptr<CredentialLeakPrompt> CreateCredentialLeakPromptView(
     CredentialLeakDialogController* controller,
     content::WebContents* web_contents);
 
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h
index c05d093..c382ec7 100644
--- a/chrome/browser/ui/passwords/passwords_model_delegate.h
+++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -29,6 +29,7 @@
 enum class MoveToAccountStoreTrigger;
 }  // namespace metrics_util
 }  // namespace password_manager
+class PasswordChangeDelegate;
 
 // An interface for ManagePasswordsBubbleModel implemented by
 // ManagePasswordsUIController. Allows to retrieve the current state of the tab
@@ -227,6 +228,9 @@
   // Called from the Relaunch Chrome bubble to gracefully restart the Chrome.
   virtual void RelaunchChrome() = 0;
 
+  // Returns the delegate for the password change flow.
+  virtual PasswordChangeDelegate* GetPasswordChangeDelegate() const = 0;
+
  protected:
   virtual ~PasswordsModelDelegate() = default;
 };
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
index 16e4738..a1125054 100644
--- a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
+++ b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
@@ -136,6 +136,10 @@
               (override));
   MOCK_METHOD(void, MaybeShowIOSPasswordPromo, (), (override));
   MOCK_METHOD(void, RelaunchChrome, (), (override));
+  MOCK_METHOD(PasswordChangeDelegate*,
+              GetPasswordChangeDelegate,
+              (),
+              (const override));
 
   base::WeakPtr<PasswordsModelDelegateMock> AsWeakPtr() {
     return weak_ptr_factory_.GetWeakPtr();
diff --git a/chrome/browser/ui/tabs/organization/tab_organization_utils.cc b/chrome/browser/ui/tabs/organization/tab_organization_utils.cc
index 3bf0f42e..bf0161c 100644
--- a/chrome/browser/ui/tabs/organization/tab_organization_utils.cc
+++ b/chrome/browser/ui/tabs/organization/tab_organization_utils.cc
@@ -21,7 +21,7 @@
 }
 
 bool TabOrganizationUtils::IsEnabled(Profile* profile) {
-  bool feature_is_enabled = features::IsTabOrganization();
+  const bool feature_is_enabled = features::IsTabOrganization();
   if (ignore_opt_guide_for_testing_) {
     return feature_is_enabled;
   }
@@ -32,3 +32,16 @@
              optimization_guide::UserVisibleFeatureKey::kTabOrganization) &&
          feature_is_enabled;
 }
+
+bool TabOrganizationUtils::IsSettingVisible(Profile* profile) {
+  const bool feature_is_enabled = features::IsTabOrganization();
+  if (ignore_opt_guide_for_testing_) {
+    return feature_is_enabled;
+  }
+  const OptimizationGuideKeyedService* const opt_guide_keyed_service =
+      OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
+  return opt_guide_keyed_service != nullptr &&
+         opt_guide_keyed_service->IsSettingVisible(
+             optimization_guide::UserVisibleFeatureKey::kTabOrganization) &&
+         feature_is_enabled;
+}
diff --git a/chrome/browser/ui/tabs/organization/tab_organization_utils.h b/chrome/browser/ui/tabs/organization/tab_organization_utils.h
index 4ed6bf1..52c0bf7 100644
--- a/chrome/browser/ui/tabs/organization/tab_organization_utils.h
+++ b/chrome/browser/ui/tabs/organization/tab_organization_utils.h
@@ -24,6 +24,9 @@
   // for the given profile.
   bool IsEnabled(Profile* profile);
 
+  // Returns true if the tab organization feature should be visible in settings.
+  bool IsSettingVisible(Profile* profile);
+
  protected:
   TabOrganizationUtils();
   ~TabOrganizationUtils();
diff --git a/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.cc b/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.cc
index 065901bb..a821467 100644
--- a/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.cc
+++ b/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
+#include "base/time/time.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/page_info/page_info_dialog.h"
 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
@@ -21,6 +22,22 @@
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 #include "ui/views/view_class_properties.h"
 
+namespace {
+
+// A duration of the expand animation.
+constexpr auto kExpandAnimationDuration = base::Milliseconds(350);
+// A duration of the collapse animation.
+constexpr auto kCollapseAnimationDuration = base::Milliseconds(250);
+// A delay before collapsing an expanded chip.
+constexpr auto kCollapseDelay = base::Seconds(12);
+
+base::TimeDelta GetAnimationDuration(base::TimeDelta duration) {
+  return gfx::Animation::ShouldRenderRichAnimation() ? duration
+                                                     : base::TimeDelta();
+}
+
+}  // namespace
+
 DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(MerchantTrustChipButtonController,
                                       kElementIdForTesting);
 
@@ -38,7 +55,7 @@
   chip_button_->SetTheme(OmniboxChipTheme::kLowVisibility);
   chip_button_->SetCallback(base::BindRepeating(
       &MerchantTrustChipButtonController::OpenPageInfoSubpage,
-      base::Unretained(this)));
+      weak_factory_.GetWeakPtr()));
   chip_button_->SetProperty(views::kElementIdentifierKey, kElementIdForTesting);
 }
 
@@ -47,19 +64,26 @@
 
 void MerchantTrustChipButtonController::UpdateWebContents(
     content::WebContents* contents) {
-  if (contents) {
+  if (contents && contents != web_contents()) {
     Observe(contents);
+    // Fetch the data when the web contents changes. `PrimaryPageChanged()` only
+    // covers changes to the currently observed web contents.
+    FetchData();
   }
+}
 
-  if (!service_ || !web_contents()) {
-    return;
-  }
+void MerchantTrustChipButtonController::PrimaryPageChanged(
+    content::Page& page) {
+  FetchData();
+}
 
+void MerchantTrustChipButtonController::FetchData() {
+  DCHECK(service_);
   service_->GetMerchantTrustInfo(
       web_contents()->GetVisibleURL(),
       base::BindOnce(
           &MerchantTrustChipButtonController::OnMerchantTrustDataFetched,
-          base::Unretained(this)));
+          weak_factory_.GetWeakPtr()));
 }
 
 void MerchantTrustChipButtonController::OnMerchantTrustDataFetched(
@@ -68,10 +92,22 @@
   merchant_data_ = merchant_data;
 
   if (ShouldBeVisible()) {
-    // TODO(crbug.com/378854906): Animate expand when needed.
+    // Reset if animation is in progress. Animate expand when visibility
+    // changes.
+    chip_button_->ResetAnimation(0.0);
+    if (!chip_button_->GetVisible()) {
+      if (!web_contents()->GetUserData(kChipAnimated)) {
+        chip_button_->AnimateExpand(
+            GetAnimationDuration(kExpandAnimationDuration));
+        web_contents()->SetUserData(
+            kChipAnimated, std::make_unique<base::SupportsUserData::Data>());
+      }
+    }
     Show();
+    StartCollapseTimer();
   } else {
-    // TODO(crbug.com/378854906): Animate collapse when needed.
+    // Don't animate collapse because the chip gets hidden instantly when
+    // switching tabs.
     Hide();
   }
 }
@@ -94,6 +130,18 @@
   chip_button_->SetVisible(false);
 }
 
+void MerchantTrustChipButtonController::StartCollapseTimer() {
+  collapse_timer_.Start(
+      FROM_HERE, GetAnimationDuration(kCollapseDelay),
+      base::BindOnce(&MerchantTrustChipButtonController::Collapse,
+                     weak_factory_.GetWeakPtr()));
+}
+
+void MerchantTrustChipButtonController::Collapse() {
+  chip_button_->AnimateCollapse(
+      GetAnimationDuration(kCollapseAnimationDuration));
+}
+
 void MerchantTrustChipButtonController::OpenPageInfoSubpage() {
   if (!web_contents()) {
     return;
diff --git a/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.h b/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.h
index 6082e56..7896a6e 100644
--- a/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.h
+++ b/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_MERCHANT_TRUST_CHIP_BUTTON_CONTROLLER_H_
 
 #include "base/memory/raw_ptr.h"
+#include "base/timer/timer.h"
 #include "components/page_info/core/page_info_types.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "ui/base/interaction/element_identifier.h"
@@ -23,6 +24,8 @@
  public:
   DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kElementIdForTesting);
 
+  constexpr static const void* const kChipAnimated = &kChipAnimated;
+
   MerchantTrustChipButtonController(OmniboxChipButton* chip_button,
                                     LocationIconView* location_icon_view,
                                     page_info::MerchantTrustService* service);
@@ -32,11 +35,13 @@
       const MerchantTrustChipButtonController&) = delete;
   ~MerchantTrustChipButtonController() override;
 
+  // content::WebContentsObserver:
+  void PrimaryPageChanged(content::Page& page) override;
+
   void UpdateWebContents(content::WebContents* web_contents);
 
   void Show();
   void Hide();
-  void OpenPageInfoSubpage();
 
   // Whether the chip should be visible based on the service response. Note:
   // it doesn't mean that it will be visible since other views can take
@@ -44,14 +49,23 @@
   bool ShouldBeVisible();
 
  private:
+  void FetchData();
   void OnMerchantTrustDataFetched(
       const GURL& url,
       std::optional<page_info::MerchantData> merchant_data);
 
+  void StartCollapseTimer();
+  void Collapse();
+
+  void OpenPageInfoSubpage();
+
   raw_ptr<OmniboxChipButton> chip_button_;
   raw_ptr<LocationIconView> location_icon_view_;
   raw_ptr<page_info::MerchantTrustService> service_;
   std::optional<page_info::MerchantData> merchant_data_;
+  base::OneShotTimer collapse_timer_;
+
+  base::WeakPtrFactory<MerchantTrustChipButtonController> weak_factory_{this};
 };
 
 #endif  // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_MERCHANT_TRUST_CHIP_BUTTON_CONTROLLER_H_
diff --git a/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_interactive_uitest.cc b/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_interactive_uitest.cc
index 6149793..025a5a1 100644
--- a/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_interactive_uitest.cc
+++ b/chrome/browser/ui/views/location_bar/merchant_trust_chip_button_interactive_uitest.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
 #include "chrome/browser/ui/views/location_bar/merchant_trust_chip_button_controller.h"
+#include "chrome/browser/ui/views/location_bar/omnibox_chip_button.h"
 #include "chrome/browser/ui/views/page_info/page_info_main_view.h"
 #include "chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.h"
 #include "chrome/browser/ui/views/permissions/chip/permission_chip_view.h"
@@ -26,6 +27,7 @@
 
 namespace {
 DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kWebContentsElementId);
+DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kSecondWebContentsElementId);
 
 optimization_guide::OptimizationMetadata GetMerchantTrustMetadata() {
   optimization_guide::OptimizationMetadata optimization_metadata;
@@ -102,12 +104,34 @@
     });
   }
 
+  auto WasChipAnimatedForWebContents(ElementSpecifier id, bool value) {
+    return CheckElement(
+        id, base::BindOnce([](ui::TrackedElement* el) {
+          return AsInstrumentedWebContents(el)->web_contents()->GetUserData(
+                     MerchantTrustChipButtonController::kChipAnimated) !=
+                 nullptr;
+        }),
+        value);
+  }
+
+  auto IsChipFullyCollapsed(bool value) {
+    return CheckView(MerchantTrustChipButtonController::kElementIdForTesting,
+                     base::BindOnce([](OmniboxChipButton* view) {
+                       return view->is_fully_collapsed();
+                     }),
+                     value);
+  }
+
   net::EmbeddedTestServer* https_server() { return https_server_.get(); }
 
   GURL GetURL() {
     return https_server()->GetURL("a.test", "/permissions/requests.html");
   }
 
+  GURL GetAnotherURL() {
+    return https_server()->GetURL("a.test", "/title1.html");
+  }
+
  private:
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
   base::test::ScopedFeatureList feature_list_;
@@ -198,3 +222,28 @@
       // ...and the merchant chip is not.
       WaitForHide(MerchantTrustChipButtonController::kElementIdForTesting));
 }
+
+IN_PROC_BROWSER_TEST_F(MerchantTrustChipButtonInteractiveUITest,
+                       AnimateOnlyOncePerTab) {
+  RunTestSequence(
+      InstrumentTab(kWebContentsElementId),
+      NavigateWebContents(kWebContentsElementId, GetURL()),
+      // The merchant chip is shown and expanded.
+      WaitForShow(MerchantTrustChipButtonController::kElementIdForTesting),
+      WaitForEvent(MerchantTrustChipButtonController::kElementIdForTesting,
+                   kOmniboxChipButtonExpanded),
+      // Animation was recorded.
+      WasChipAnimatedForWebContents(kWebContentsElementId, true),
+      // Switch to the second tab.
+      AddInstrumentedTab(kSecondWebContentsElementId, GetAnotherURL()),
+      // The merchant chip is hidden - no merchant trust data for the tab and no
+      // animation.
+      WaitForHide(MerchantTrustChipButtonController::kElementIdForTesting),
+      WasChipAnimatedForWebContents(kSecondWebContentsElementId, false),
+      // Switch to the first one, the chip was already animated.
+      SelectTab(kTabStripElementId, 0),
+      WasChipAnimatedForWebContents(kWebContentsElementId, true),
+      // The merchant chip is shown again for the first tab but not expanded.
+      WaitForShow(MerchantTrustChipButtonController::kElementIdForTesting),
+      IsChipFullyCollapsed(true));
+}
diff --git a/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc b/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc
index 52c74129eb..28babd89 100644
--- a/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc
+++ b/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc
@@ -24,6 +24,7 @@
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/background.h"
 #include "ui/views/controls/highlight_path_generator.h"
+#include "ui/views/interaction/element_tracker_views.h"
 #include "ui/views/painter.h"
 #include "ui/views/view_class_properties.h"
 
@@ -40,6 +41,8 @@
 
 }  // namespace
 
+DEFINE_CUSTOM_ELEMENT_EVENT_TYPE(kOmniboxChipButtonExpanded);
+
 DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(OmniboxChipButton, kChipElementId);
 
 OmniboxChipButton::OmniboxChipButton(PressedCallback callback)
@@ -98,8 +101,9 @@
   const int width =
       base::ClampRound(collapsable_width * animation_->GetCurrentValue()) +
       fixed_width;
-  return views::LabelButton::CalculatePreferredSize(
-      views::SizeBounds(width, {}));
+  return gfx::Size(width, views::LabelButton::CalculatePreferredSize(
+                              views::SizeBounds(width, {}))
+                              .height());
 }
 
 void OmniboxChipButton::OnThemeChanged() {
@@ -123,6 +127,13 @@
     return;
 
   OnAnimationValueMaybeChanged();
+
+  auto* element =
+      views::ElementTrackerViews::GetInstance()->GetElementForView(this);
+  if (animation->GetCurrentValue() == 1.0 && element) {
+    ui::ElementTracker::GetFrameworkDelegate()->NotifyCustomEvent(
+        element, kOmniboxChipButtonExpanded);
+  }
 }
 
 void OmniboxChipButton::AnimationProgressed(const gfx::Animation* animation) {
diff --git a/chrome/browser/ui/views/location_bar/omnibox_chip_button.h b/chrome/browser/ui/views/location_bar/omnibox_chip_button.h
index c3305d9f..d4a5609 100644
--- a/chrome/browser/ui/views/location_bar/omnibox_chip_button.h
+++ b/chrome/browser/ui/views/location_bar/omnibox_chip_button.h
@@ -7,6 +7,7 @@
 
 #include "base/check_is_test.h"
 #include "chrome/browser/ui/views/location_bar/omnibox_chip_theme.h"
+#include "ui/base/interaction/element_tracker.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/gfx/animation/slide_animation.h"
@@ -14,6 +15,8 @@
 #include "ui/gfx/vector_icon_types.h"
 #include "ui/views/controls/button/md_text_button.h"
 
+DECLARE_CUSTOM_ELEMENT_EVENT_TYPE(kOmniboxChipButtonExpanded);
+
 // UI component for chip button located in the omnibox. A button with an icon
 // and text, with rounded corners.
 class OmniboxChipButton : public views::MdTextButton {
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
index 3828766..b93404a 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
@@ -30,6 +30,7 @@
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/commerce/core/proto/merchant_trust.pb.h"
 #include "components/content_settings/browser/page_specific_content_settings.h"
 #include "components/content_settings/core/browser/content_settings_registry.h"
 #include "components/content_settings/core/common/cookie_blocking_3pcd_status.h"
@@ -130,6 +131,18 @@
   return optimization_metadata;
 }
 
+optimization_guide::OptimizationMetadata GetMerchantTrustMetadata() {
+  optimization_guide::OptimizationMetadata optimization_metadata;
+  commerce::MerchantTrustSignalsV2 metadata;
+  metadata.set_merchant_star_rating(3.5);
+  metadata.set_merchant_count_rating(23);
+  metadata.set_merchant_details_page_url("https://reviews.test");
+  metadata.set_reviews_summary("Test summary");
+
+  optimization_metadata.SetAnyMetadataForTesting(metadata);
+  return optimization_metadata;
+}
+
 }  // namespace
 
 class PageInfoBubbleViewDialogBrowserTest : public DialogBrowserTest {
@@ -1127,6 +1140,14 @@
     optimization_guide_decider->AddHintForTesting(
         GetUrl(kAboutThisSiteUrl), optimization_guide::proto::ABOUT_THIS_SITE,
         GetAboutThisSiteMetadata());
+    optimization_guide_decider->AddHintForTesting(
+        GetUrl(kAboutThisSiteUrl),
+        optimization_guide::proto::MERCHANT_TRUST_SIGNALS_V2,
+        GetMerchantTrustMetadata());
+    optimization_guide_decider->AddHintForTesting(
+        GetUrl(kMerchantTrustUrl),
+        optimization_guide::proto::MERCHANT_TRUST_SIGNALS_V2,
+        GetMerchantTrustMetadata());
   }
 
   void SetUpCommandLine(base::CommandLine* cmd) override {
@@ -1176,8 +1197,10 @@
   ShowAndVerifyUi();
 }
 
+// TODO(crbug.com/383355629): Optimization guide doesn't support setting hints
+// for two optimization types.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewMerchantTrustDialogBrowserTest,
-                       InvokeUi_MerchantTrustAndAboutThisSite) {
+                       DISABLED_InvokeUi_MerchantTrustAndAboutThisSite) {
   set_baseline("6070208");
   ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc
index de7dd968..8ead55a 100644
--- a/chrome/browser/ui/views/page_info/page_info_main_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc
@@ -402,10 +402,9 @@
     }
 
     if (merchant_trust_section_) {
-      // TOOD(crbug.com/378854649): Fetch data from the service.
-      merchant_trust_section_->RemoveAllChildViews();
-      merchant_trust_section_->AddChildView(CreateMerchantTrustButton());
-      extended_site_info_section_->SetVisible(true);
+      ui_delegate_->GetMerchantTrustInfo(
+          base::BindOnce(&PageInfoMainView::OnMerchantTrustDataFetched,
+                         base::Unretained(this)));
     }
   } else {
     security_content_view_ = security_container_view_->AddChildView(
@@ -544,6 +543,20 @@
   }
 }
 
+void PageInfoMainView::OnMerchantTrustDataFetched(
+    const GURL& url,
+    std::optional<page_info::MerchantData> merchant_data) {
+  if (!merchant_data.has_value()) {
+    return;
+  }
+
+  DCHECK(merchant_trust_section_);
+  merchant_trust_section_->RemoveAllChildViews();
+  merchant_trust_section_->AddChildView(
+      CreateMerchantTrustButton(merchant_data.value()));
+  extended_site_info_section_->SetVisible(true);
+}
+
 gfx::Size PageInfoMainView::CalculatePreferredSize(
     const views::SizeBounds& available_size) const {
   if (site_settings_view_ == nullptr && permissions_view_ == nullptr &&
@@ -666,7 +679,8 @@
   return ads_personalization_button;
 }
 
-std::unique_ptr<views::View> PageInfoMainView::CreateMerchantTrustButton() {
+std::unique_ptr<views::View> PageInfoMainView::CreateMerchantTrustButton(
+    page_info::MerchantData value) {
   // TODO(crbug.com/381215331): Add add actual string.
   auto merchant_trust_button = std::make_unique<RichHoverButton>(
       base::BindRepeating(&PageInfoNavigationHandler::OpenMerchantTrustPage,
@@ -678,10 +692,9 @@
       views::style::STYLE_BODY_3_MEDIUM, kColorPageInfoForeground);
   merchant_trust_button->SetProperty(views::kElementIdentifierKey,
                                      kMerchantTrustElementId);
-  // TODO(crbug.com/381215331): Fetch the data from the service.
   auto* star_rating_view = merchant_trust_button->AddCustomSubtitle(
       std::make_unique<StarRatingView>());
-  star_rating_view->SetRating(3.5);
+  star_rating_view->SetRating(value.star_rating);
   return merchant_trust_button;
 }
 
diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.h b/chrome/browser/ui/views/page_info/page_info_main_view.h
index 2f84ef3..7390dad 100644
--- a/chrome/browser/ui/views/page_info/page_info_main_view.h
+++ b/chrome/browser/ui/views/page_info/page_info_main_view.h
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/views/page_info/chosen_object_view_observer.h"
 #include "chrome/browser/ui/views/page_info/permission_toggle_row_view_observer.h"
 #include "components/content_settings/core/common/content_settings_types.h"
+#include "components/page_info/core/page_info_types.h"
 #include "components/page_info/core/proto/about_this_site_metadata.pb.h"
 #include "components/page_info/page_info_ui.h"
 #include "device/vr/buildflags/buildflags.h"
@@ -128,6 +129,10 @@
   // the label depending on the number of visible permissions.
   void UpdateResetButton(const PermissionInfoList& permission_info_list);
 
+  void OnMerchantTrustDataFetched(
+      const GURL& url,
+      std::optional<page_info::MerchantData> merchant_data);
+
   // Creates 'About this site' button that opens a subpage.
   [[nodiscard]] std::unique_ptr<views::View> CreateAboutThisSiteButton(
       const page_info::proto::SiteInfo& info);
@@ -136,7 +141,8 @@
   [[nodiscard]] std::unique_ptr<views::View> CreateAdPersonalizationButton();
 
   // Creates 'Merchant trust' button that opens a subpage.
-  [[nodiscard]] std::unique_ptr<views::View> CreateMerchantTrustButton();
+  [[nodiscard]] std::unique_ptr<views::View> CreateMerchantTrustButton(
+      page_info::MerchantData value);
 
   raw_ptr<PageInfo, AcrossTasksDanglingUntriaged> presenter_;
 
diff --git a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc
index f565a3b..b37cfdb 100644
--- a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc
+++ b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc
@@ -4,12 +4,19 @@
 
 #include "chrome/browser/ui/views/passwords/credential_leak_dialog_view.h"
 
+#include <memory>
+#include <utility>
+
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/passwords/credential_leak_dialog_controller.h"
+#include "chrome/browser/ui/passwords/password_dialog_prompts.h"
+#include "chrome/browser/ui/tabs/public/tab_dialog_manager.h"
+#include "chrome/browser/ui/tabs/public/tab_features.h"
+#include "chrome/browser/ui/tabs/public/tab_interface.h"
 #include "chrome/browser/ui/views/accessibility/theme_tracking_non_accessible_image_view.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/grit/theme_resources.h"
-#include "components/constrained_window/constrained_window_views.h"
 #include "components/password_manager/core/browser/leak_detection_dialog_utils.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
@@ -21,7 +28,8 @@
 #include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/bubble/tooltip_icon.h"
 #include "ui/views/controls/label.h"
-#include "ui/views/layout/fill_layout.h"
+#include "ui/views/view_utils.h"
+#include "ui/views/widget/widget.h"
 
 namespace {
 
@@ -36,14 +44,76 @@
   return explanation_tooltip;
 }
 
+class CredentialLeakPromptImpl : public CredentialLeakPrompt {
+ public:
+  CredentialLeakPromptImpl(CredentialLeakDialogController* controller,
+                           content::WebContents* web_contents);
+  CredentialLeakPromptImpl(const CredentialLeakPromptImpl&) = delete;
+  CredentialLeakPromptImpl& operator=(const CredentialLeakPromptImpl&) = delete;
+  ~CredentialLeakPromptImpl() override = default;
+
+  // Overrides from CredentialLeakPrompt:
+  void ShowCredentialLeakPrompt() override;
+  views::Widget* GetWidgetForTesting() override;
+
+ private:
+  // Callback to make Widget::Close synchronous.
+  void CloseWidget(views::Widget::ClosedReason closed_reason);
+
+  std::unique_ptr<CredentialLeakDialogView> credential_leak_dialog_view_;
+  std::unique_ptr<views::Widget> dialog_;
+};
+
+CredentialLeakPromptImpl::CredentialLeakPromptImpl(
+    CredentialLeakDialogController* controller,
+    content::WebContents* web_contents) {
+  credential_leak_dialog_view_ =
+      std::make_unique<CredentialLeakDialogView>(controller, web_contents);
+}
+
+void CredentialLeakPromptImpl::ShowCredentialLeakPrompt() {
+  CHECK(credential_leak_dialog_view_);
+  auto* tab_interface = tabs::TabInterface::GetFromContents(
+      credential_leak_dialog_view_->web_contents());
+  CHECK(tab_interface);
+  credential_leak_dialog_view_->InitWindow();
+  dialog_ = tab_interface->GetTabFeatures()
+                ->tab_dialog_manager()
+                ->CreateShowDialogAndBlockTabInteraction(
+                    credential_leak_dialog_view_.release());
+  dialog_->MakeCloseSynchronous(base::BindOnce(
+      &CredentialLeakPromptImpl::CloseWidget, base::Unretained(this)));
+}
+
+views::Widget* CredentialLeakPromptImpl::GetWidgetForTesting() {
+  return dialog_.get();
+}
+
+void CredentialLeakPromptImpl::CloseWidget(
+    views::Widget::ClosedReason closed_reason) {
+  auto* credential_leak_dialog_view =
+      AsViewClass<CredentialLeakDialogView>(dialog_->GetClientContentsView());
+  CHECK(credential_leak_dialog_view);
+  // Tell the controller to destroy its reference this class which will also
+  // destroy the |dialog_|.
+  credential_leak_dialog_view->controller()->ResetDialog();
+}
+
 }  // namespace
 
 CredentialLeakDialogView::CredentialLeakDialogView(
     CredentialLeakDialogController* controller,
     content::WebContents* web_contents)
     : controller_(controller), web_contents_(web_contents) {
-  DCHECK(controller);
-  DCHECK(web_contents);
+  CHECK(controller);
+  CHECK(web_contents);
+
+  // Set the ownership of the delegate, not the View. The View is owned by the
+  // Widget as a child view.
+  // TODO(crbug.com/338254375): Remove the following two lines once this is the
+  // default state for widgets and the delegates.
+  views::WidgetDelegate::SetOwnedByWidget(false);
+  SetOwnershipOfNewWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET);
 
   SetButtons(controller->ShouldShowCancelButton()
                  ? static_cast<int>(ui::mojom::DialogButton::kOk) |
@@ -63,9 +133,8 @@
   auto close_callback = [](raw_ptr<CredentialLeakDialogController>* controller,
                            ControllerClosureFn fn) {
     // Null out the controller pointer stored in the parent object, to avoid any
-    // further calls to the controller and inhibit recursive closes that would
-    // otherwise happen in ControllerGone(), and invoke the provided method on
-    // the controller.
+    // further calls to the controller and inhibit recursive closes, and invoke
+    // the provided method on the controller.
     //
     // Note that when this lambda gets bound it closes over &controller_, not
     // controller_ itself!
@@ -83,27 +152,7 @@
                      &CredentialLeakDialogController::OnCloseDialog));
 }
 
-CredentialLeakDialogView::~CredentialLeakDialogView() {
-  if (controller_) {
-    std::exchange(controller_, nullptr)->ResetDialog();
-  }
-}
-
-void CredentialLeakDialogView::ShowCredentialLeakPrompt() {
-  InitWindow();
-  constrained_window::ShowWebModalDialogViews(this, web_contents_);
-}
-
-void CredentialLeakDialogView::ControllerGone() {
-  // Widget::Close() synchronously calls Close() on this instance, which resets
-  // the |controller_|. The null check for |controller_| here is to avoid
-  // reentry into Close() - |controller_| might have been nulled out by the
-  // closure callbacks already, in which case the dialog is already closing. See
-  // the definition of |close_callback| in the constructor.
-  if (controller_) {
-    GetWidget()->Close();
-  }
-}
+CredentialLeakDialogView::~CredentialLeakDialogView() = default;
 
 void CredentialLeakDialogView::AddedToWidget() {
   // Set the header image.
@@ -139,7 +188,7 @@
 }
 
 void CredentialLeakDialogView::InitWindow() {
-  SetLayoutManager(std::make_unique<views::FillLayout>());
+  SetUseDefaultFillLayout(true);
   SetBorder(views::CreateEmptyBorder(
       views::LayoutProvider::Get()->GetDialogInsetsForContentType(
           views::DialogContentType::kControl,
@@ -157,8 +206,8 @@
 BEGIN_METADATA(CredentialLeakDialogView)
 END_METADATA
 
-CredentialLeakPrompt* CreateCredentialLeakPromptView(
+std::unique_ptr<CredentialLeakPrompt> CreateCredentialLeakPromptView(
     CredentialLeakDialogController* controller,
     content::WebContents* web_contents) {
-  return new CredentialLeakDialogView(controller, web_contents);
+  return std::make_unique<CredentialLeakPromptImpl>(controller, web_contents);
 }
diff --git a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.h b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.h
index 89742af..6faf59d 100644
--- a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.h
+++ b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.h
@@ -17,8 +17,7 @@
 
 class CredentialLeakDialogController;
 
-class CredentialLeakDialogView : public views::DialogDelegateView,
-                                 public CredentialLeakPrompt {
+class CredentialLeakDialogView : public views::DialogDelegateView {
   METADATA_HEADER(CredentialLeakDialogView, views::DialogDelegateView)
 
  public:
@@ -28,18 +27,17 @@
   CredentialLeakDialogView& operator=(const CredentialLeakDialogView&) = delete;
   ~CredentialLeakDialogView() override;
 
-  // CredentialsLeakedPrompt:
-  void ShowCredentialLeakPrompt() override;
-  void ControllerGone() override;
+  // Sets up the child views.
+  void InitWindow();
+
+  CredentialLeakDialogController* controller() { return controller_; }
+  content::WebContents* web_contents() { return web_contents_; }
 
  private:
   // views::DialogDelegateView:
   void AddedToWidget() override;
   std::u16string GetWindowTitle() const override;
 
-  // Sets up the child views.
-  void InitWindow();
-
   // A weak pointer to the controller.
   raw_ptr<CredentialLeakDialogController> controller_ = nullptr;
   const raw_ptr<content::WebContents, AcrossTasksDanglingUntriaged>
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_icon_views.cc b/chrome/browser/ui/views/passwords/manage_passwords_icon_views.cc
index 2992043..dfbbfb7e 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_icon_views.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_icon_views.cc
@@ -145,6 +145,9 @@
     case password_manager::ui::MANAGE_STATE:
     case password_manager::ui::PASSWORD_UPDATED_SAFE_STATE:
     case password_manager::ui::PASSWORD_UPDATED_MORE_TO_FIX:
+    // TODO(crbug.com/375564659): Add tooltip reflecting password change flow
+    // state.
+    case password_manager::ui::PASSWORD_CHANGE_STATE:
     // TODO(b/345242100): Add correct tooltip for passkey saved.
     case password_manager::ui::PASSKEY_SAVED_CONFIRMATION_STATE:
     case password_manager::ui::PASSKEY_DELETED_CONFIRMATION_STATE:
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
index f6b2cbc0..f18af6fd 100644
--- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
+++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/ui/views/passwords/move_to_account_store_bubble_view.h"
 #include "chrome/browser/ui/views/passwords/password_add_username_view.h"
 #include "chrome/browser/ui/views/passwords/password_auto_sign_in_view.h"
+#include "chrome/browser/ui/views/passwords/password_change/password_change_view_factory.h"
 #include "chrome/browser/ui/views/passwords/password_default_store_changed_view.h"
 #include "chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h"
 #include "chrome/browser/ui/views/passwords/password_save_update_view.h"
@@ -185,6 +186,9 @@
   } else if (model_state == password_manager::ui::PASSKEY_UPGRADE_STATE) {
     view = new PasskeyUpgradeBubbleView(web_contents, anchor_view, reason,
                                         delegate->PasskeyRpId());
+  } else if (model_state == password_manager::ui::PASSWORD_CHANGE_STATE) {
+    view = CreatePasswordChangeBubbleView(delegate->GetPasswordChangeDelegate(),
+                                          web_contents, anchor_view);
   } else {
     NOTREACHED();
   }
diff --git a/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc b/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc
new file mode 100644
index 0000000..68159c9d
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.cc
@@ -0,0 +1,22 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/passwords/password_change/password_change_view_factory.h"
+
+#include "chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h"
+
+PasswordBubbleViewBase* CreatePasswordChangeBubbleView(
+    PasswordChangeDelegate* delegate,
+    content::WebContents* web_contents,
+    views::View* anchor_view) {
+  switch (delegate->GetCurrentState()) {
+      // TODO (crbug.com/375564659): Implement views for each state. For now the
+      // same view is returned for all states.
+    case PasswordChangeDelegate::State::kWaitingForChangePasswordForm:
+    case PasswordChangeDelegate::State::kChangingPassword:
+    case PasswordChangeDelegate::State::kPasswordSuccessfullyChanged:
+    case PasswordChangeDelegate::State::kPasswordChangeFailed:
+      return new SignInCheckBubbleView(web_contents, anchor_view);
+  }
+}
diff --git a/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.h b/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.h
new file mode 100644
index 0000000..ba1b9ec
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/password_change_view_factory.h
@@ -0,0 +1,16 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_PASSWORD_CHANGE_VIEW_FACTORY_H_
+#define CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_PASSWORD_CHANGE_VIEW_FACTORY_H_
+
+#include "chrome/browser/password_manager/password_change_delegate.h"
+#include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
+
+PasswordBubbleViewBase* CreatePasswordChangeBubbleView(
+    PasswordChangeDelegate* delegate,
+    content::WebContents* web_contents,
+    views::View* anchor_view);
+
+#endif  // CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_PASSWORD_CHANGE_VIEW_FACTORY_H_
diff --git a/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.cc b/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.cc
new file mode 100644
index 0000000..32e525f
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.cc
@@ -0,0 +1,29 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h"
+
+#include "chrome/browser/ui/passwords/passwords_model_delegate.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
+
+SignInCheckBubbleView::SignInCheckBubbleView(content::WebContents* web_contents,
+                                             views::View* anchor_view)
+    : PasswordBubbleViewBase(web_contents,
+                             anchor_view,
+                             /*easily_dismissable=*/true),
+      controller_(PasswordsModelDelegateFromWebContents(web_contents)) {}
+
+SignInCheckBubbleView::~SignInCheckBubbleView() = default;
+
+PasswordBubbleControllerBase* SignInCheckBubbleView::GetController() {
+  return &controller_;
+}
+
+const PasswordBubbleControllerBase* SignInCheckBubbleView::GetController()
+    const {
+  return &controller_;
+}
+
+BEGIN_METADATA(SignInCheckBubbleView)
+END_METADATA
diff --git a/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h b/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h
new file mode 100644
index 0000000..670cdee
--- /dev/null
+++ b/chrome/browser/ui/views/passwords/password_change/sign_in_check_bubble_view.h
@@ -0,0 +1,30 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_SIGN_IN_CHECK_BUBBLE_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_SIGN_IN_CHECK_BUBBLE_VIEW_H_
+
+#include "chrome/browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller.h"
+#include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
+
+// Bubble view, which is displayed during the password change flow. It is shown
+// when checking if user is signed into a web site.
+class SignInCheckBubbleView : public PasswordBubbleViewBase {
+  METADATA_HEADER(SignInCheckBubbleView, PasswordBubbleViewBase)
+
+ public:
+  SignInCheckBubbleView(content::WebContents* web_contents,
+                        views::View* anchor_view);
+
+ private:
+  ~SignInCheckBubbleView() override;
+
+  // PasswordBubbleViewBase
+  PasswordBubbleControllerBase* GetController() override;
+  const PasswordBubbleControllerBase* GetController() const override;
+
+  PasswordChangeInfoBubbleController controller_;
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_CHANGE_SIGN_IN_CHECK_BUBBLE_VIEW_H_
diff --git a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
index 3eae9fe..d306d7e 100644
--- a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
@@ -64,7 +64,7 @@
       CredentialManagerDialogController* controller) override;
   AutoSigninFirstRunPrompt* CreateAutoSigninPrompt(
       CredentialManagerDialogController* controller) override;
-  CredentialLeakPrompt* CreateCredentialLeakPrompt(
+  std::unique_ptr<CredentialLeakPrompt> CreateCredentialLeakPrompt(
       CredentialLeakDialogController* controller) override;
 
   AccountChooserDialogView* current_account_chooser() const {
@@ -76,9 +76,8 @@
         current_autosignin_prompt_);
   }
 
-  CredentialLeakDialogView* current_credential_leak_prompt() const {
-    return static_cast<CredentialLeakDialogView*>(
-        current_credential_leak_prompt_);
+  views::Widget* current_credential_leak_widget() const {
+    return current_credential_leak_prompt_->GetWidgetForTesting();
   }
 
   MOCK_METHOD(void, OnDialogClosed, (), ());
@@ -126,12 +125,13 @@
   return current_autosignin_prompt_;
 }
 
-CredentialLeakPrompt*
+std::unique_ptr<CredentialLeakPrompt>
 TestManagePasswordsUIController::CreateCredentialLeakPrompt(
     CredentialLeakDialogController* controller) {
-  current_credential_leak_prompt_ =
+  auto current_credential_leak_prompt =
       ManagePasswordsUIController::CreateCredentialLeakPrompt(controller);
-  return current_credential_leak_prompt_;
+  current_credential_leak_prompt_ = current_credential_leak_prompt.get();
+  return current_credential_leak_prompt;
 }
 
 std::unique_ptr<password_manager::PasswordFormManagerForUI> WrapFormInManager(
@@ -488,13 +488,12 @@
   controller()->OnCredentialLeak(password_manager::LeakedPasswordDetails(
       leak_type, GURL("https://example.com"), u"Eve", u"qwerty",
       /*in_account_store=*/false));
-  ASSERT_TRUE(controller()->current_credential_leak_prompt());
+  ASSERT_TRUE(controller()->current_credential_leak_widget());
   EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState());
-  CredentialLeakDialogView* dialog =
-      controller()->current_credential_leak_prompt();
-  views::test::WidgetDestroyedWaiter bubble_observer(dialog->GetWidget());
+  views::Widget* dialog = controller()->current_credential_leak_widget();
+  views::test::WidgetDestroyedWaiter bubble_observer(dialog);
   ui::Accelerator esc(ui::VKEY_ESCAPE, 0);
-  EXPECT_TRUE(dialog->GetWidget()->client_view()->AcceleratorPressed(esc));
+  EXPECT_TRUE(dialog->client_view()->AcceleratorPressed(esc));
   bubble_observer.Wait();
 }
 
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
index b171dc44..1424a32 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
@@ -26,15 +26,29 @@
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/guest_view/browser/guest_view_base.h"
+#include "components/guest_view/browser/guest_view_manager_delegate.h"
+#include "components/guest_view/browser/test_guest_view_manager.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_utils.h"
+#include "extensions/browser/api/extensions_api_client.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/test/extension_test_message_listener.h"
 
-using ExtensionSettingsUIBrowserTest = ExtensionSettingsTestBase;
+class ExtensionSettingsUIBrowserTest : public ExtensionSettingsTestBase {
+ public:
+  guest_view::TestGuestViewManager* GetGuestViewManager() {
+    return factory_.GetOrCreateTestGuestViewManager(
+        browser()->profile(), extensions::ExtensionsAPIClient::Get()
+                                  ->CreateGuestViewManagerDelegate());
+  }
+
+ private:
+  guest_view::TestGuestViewManagerFactory factory_;
+};
 
 // Tests that viewing a source of the options page works fine.
 // This is a regression test for https://crbug.com/796080.
@@ -45,9 +59,10 @@
   GURL options_url("chrome://extensions/?options=" + extension->id());
   content::WebContents* options_contents = nullptr;
   {
-    content::WebContentsAddedObserver options_contents_added_observer;
     ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), options_url));
-    options_contents = options_contents_added_observer.GetWebContents();
+    auto* guest = GetGuestViewManager()->WaitForSingleGuestViewCreated();
+    GetGuestViewManager()->WaitUntilAttached(guest);
+    options_contents = guest->web_contents();
   }
   ASSERT_TRUE(options_contents);
   EXPECT_TRUE(content::WaitForLoadStop(options_contents));
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc
index dab2d73..aa877f87 100644
--- a/chrome/browser/ui/webui/settings/settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -578,9 +578,14 @@
     const bool show_ai_settings_for_testing =
         optimization_guide::features::kShowAiSettingsForTesting.Get();
 
+    const bool use_is_setting_visible = base::FeatureList::IsEnabled(
+        optimization_guide::features::kAiSettingsPageEnterpriseDisabledUi);
+
     std::pair<const std::string_view, bool> optimization_guide_features[] = {
         {"showTabOrganizationControl",
-         TabOrganizationUtils::GetInstance()->IsEnabled(profile)},
+         use_is_setting_visible
+             ? TabOrganizationUtils::GetInstance()->IsSettingVisible(profile)
+             : TabOrganizationUtils::GetInstance()->IsEnabled(profile)},
         {"showComposeControl", compose_enabled},
         {"showWallpaperSearchControl",
          customize_chrome::IsWallpaperSearchEnabledForProfile(profile)},
diff --git a/chrome/browser/vr/test/webxr_browser_test.cc b/chrome/browser/vr/test/webxr_browser_test.cc
index 03d782a..1a2af3c 100644
--- a/chrome/browser/vr/test/webxr_browser_test.cc
+++ b/chrome/browser/vr/test/webxr_browser_test.cc
@@ -41,4 +41,8 @@
   EndSessionOrFail(GetCurrentWebContents());
 }
 
+void WebXrBrowserTestBase::WaitForSessionEndOrFail() {
+  WaitForSessionEndOrFail(GetCurrentWebContents());
+}
+
 }  // namespace vr
diff --git a/chrome/browser/vr/test/webxr_browser_test.h b/chrome/browser/vr/test/webxr_browser_test.h
index df71daf..ba6550e 100644
--- a/chrome/browser/vr/test/webxr_browser_test.h
+++ b/chrome/browser/vr/test/webxr_browser_test.h
@@ -37,6 +37,9 @@
   // EnterSessionWithUserGesture, failing if it is unable to.
   virtual void EndSessionOrFail(content::WebContents* web_contents) = 0;
 
+  // Waits for a session to be ended.
+  virtual void WaitForSessionEndOrFail(content::WebContents* web_contents) = 0;
+
   // Convenience function for calling XrDeviceFound with the return value of
   // GetCurrentWebContents.
   bool XrDeviceFound();
@@ -60,6 +63,10 @@
   // Convenience function for calling EndSessionOrFail with the return value of
   // GetCurrentWebContents.
   void EndSessionOrFail();
+
+  // Convenience function for calling `WaitForSessionEndOrFail` with the return
+  // value of GetCurrentWebContents.
+  void WaitForSessionEndOrFail();
 };
 
 }  // namespace vr
diff --git a/chrome/browser/vr/test/webxr_vr_browser_test.cc b/chrome/browser/vr/test/webxr_vr_browser_test.cc
index 3fa21eb..062e57e 100644
--- a/chrome/browser/vr/test/webxr_vr_browser_test.cc
+++ b/chrome/browser/vr/test/webxr_vr_browser_test.cc
@@ -7,6 +7,7 @@
 #include <cstring>
 
 #include "build/build_config.h"
+#include "components/permissions/test/mock_permission_prompt_factory.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -28,10 +29,6 @@
 
 void WebXrVrBrowserTestBase::EnterSessionWithUserGesture(
     content::WebContents* web_contents) {
-  // Before requesting the session, set the requested auto-response so that the
-  // session is appropriately granted or rejected (or the request ignored).
-  GetPermissionRequestManager()->set_auto_response_for_test(
-      permission_auto_response_);
 
   // ExecJs runs with a user gesture, so we can just directly call
   // requestSession instead of having to do the hacky workaround the
@@ -65,6 +62,11 @@
 void WebXrVrBrowserTestBase::EndSessionOrFail(
     content::WebContents* web_contents) {
   EndSession(web_contents);
+  WaitForSessionEndOrFail(web_contents);
+}
+
+void WebXrVrBrowserTestBase::WaitForSessionEndOrFail(
+    content::WebContents* web_contents) {
   PollJavaScriptBooleanOrFail(
       "sessionInfos[sessionTypes.IMMERSIVE].currentSession == null",
       kPollTimeoutLong, web_contents);
@@ -74,15 +76,40 @@
   return gfx::Vector3dF();
 }
 
-permissions::PermissionRequestManager*
-WebXrVrBrowserTestBase::GetPermissionRequestManager() {
-  return GetPermissionRequestManager(GetCurrentWebContents());
+void WebXrVrBrowserTestBase::SetPermissionAutoResponse(
+    permissions::PermissionRequestManager::AutoResponseType
+        permission_auto_response) {
+  permission_auto_response_ = permission_auto_response;
+  for (auto& it : mock_permissions_map_) {
+    it.second->set_response_type(permission_auto_response_);
+  }
 }
 
-permissions::PermissionRequestManager*
-WebXrVrBrowserTestBase::GetPermissionRequestManager(
-    content::WebContents* web_contents) {
-  return permissions::PermissionRequestManager::FromWebContents(web_contents);
+permissions::MockPermissionPromptFactory*
+WebXrVrBrowserTestBase::GetPermissionPromptFactory() {
+  auto* web_contents = GetCurrentWebContents();
+  CHECK(web_contents);
+  if (!mock_permissions_map_.contains(web_contents)) {
+    return nullptr;
+  }
+
+  return mock_permissions_map_[web_contents].get();
+}
+
+void WebXrVrBrowserTestBase::OnBeforeLoadFile() {
+  auto* web_contents = GetCurrentWebContents();
+  CHECK(web_contents);
+  if (!mock_permissions_map_.contains(web_contents)) {
+    mock_permissions_map_.insert_or_assign(
+        web_contents,
+        std::make_unique<permissions::MockPermissionPromptFactory>(
+            permissions::PermissionRequestManager::FromWebContents(
+                GetCurrentWebContents())));
+    // Set the requested auto-response so that any session is appropriately
+    // granted or rejected (or the request ignored).
+    mock_permissions_map_[web_contents]->set_response_type(
+        permission_auto_response_);
+  }
 }
 
 WebXrVrRuntimelessBrowserTest::WebXrVrRuntimelessBrowserTest() {
diff --git a/chrome/browser/vr/test/webxr_vr_browser_test.h b/chrome/browser/vr/test/webxr_vr_browser_test.h
index 708aa4e3..19b2208e 100644
--- a/chrome/browser/vr/test/webxr_vr_browser_test.h
+++ b/chrome/browser/vr/test/webxr_vr_browser_test.h
@@ -19,6 +19,10 @@
 #include "sandbox/policy/features.h"
 #endif
 
+namespace permissions {
+class MockPermissionPromptFactory;
+}
+
 namespace vr {
 
 // WebXR for VR-specific test base class without any particular runtime.
@@ -31,24 +35,32 @@
       content::WebContents* web_contents) override;
   void EndSession(content::WebContents* web_contents) override;
   void EndSessionOrFail(content::WebContents* web_contents) override;
+  void WaitForSessionEndOrFail(content::WebContents* web_contents) override;
 
-  permissions::PermissionRequestManager* GetPermissionRequestManager();
-  permissions::PermissionRequestManager* GetPermissionRequestManager(
-      content::WebContents* web_contents);
+  permissions::MockPermissionPromptFactory* GetPermissionPromptFactory();
+  void SetPermissionAutoResponse(
+      permissions::PermissionRequestManager::AutoResponseType
+          permission_auto_response);
 
   virtual gfx::Vector3dF GetControllerOffset() const;
 
   // Necessary to use the WebContents-less versions of functions.
-  using WebXrBrowserTestBase::XrDeviceFound;
+  using WebXrBrowserTestBase::EndSession;
+  using WebXrBrowserTestBase::EndSessionOrFail;
   using WebXrBrowserTestBase::EnterSessionWithUserGesture;
   using WebXrBrowserTestBase::EnterSessionWithUserGestureAndWait;
   using WebXrBrowserTestBase::EnterSessionWithUserGestureOrFail;
-  using WebXrBrowserTestBase::EndSession;
-  using WebXrBrowserTestBase::EndSessionOrFail;
+  using WebXrBrowserTestBase::WaitForSessionEndOrFail;
+  using WebXrBrowserTestBase::XrDeviceFound;
 
+ private:
+  void OnBeforeLoadFile() override;
   permissions::PermissionRequestManager::AutoResponseType
       permission_auto_response_ =
           permissions::PermissionRequestManager::ACCEPT_ALL;
+  base::flat_map<content::WebContents*,
+                 std::unique_ptr<permissions::MockPermissionPromptFactory>>
+      mock_permissions_map_;
 };
 
 // Test class with all runtimes disabled.
diff --git a/chrome/browser/vr/test/xr_browser_test.cc b/chrome/browser/vr/test/xr_browser_test.cc
index 1e7990c..c7ce6cc 100644
--- a/chrome/browser/vr/test/xr_browser_test.cc
+++ b/chrome/browser/vr/test/xr_browser_test.cc
@@ -233,6 +233,7 @@
 
 void XrBrowserTestBase::LoadFileAndAwaitInitialization(
     const std::string& test_name) {
+  OnBeforeLoadFile();
   GURL url = GetUrlForFile(test_name);
   ASSERT_TRUE(content::NavigateToURL(GetCurrentWebContents(), url));
   ASSERT_TRUE(PollJavaScriptBoolean("isInitializationComplete()",
diff --git a/chrome/browser/vr/test/xr_browser_test.h b/chrome/browser/vr/test/xr_browser_test.h
index dda764e..72bc525 100644
--- a/chrome/browser/vr/test/xr_browser_test.h
+++ b/chrome/browser/vr/test/xr_browser_test.h
@@ -199,6 +199,9 @@
   }
 
  protected:
+  // Called at the start of |LoadFileAndAwaitInitialization| to allow base
+  // classes to manage any logic that they may want to manage.
+  virtual void OnBeforeLoadFile() {}
   std::unique_ptr<base::Environment> env_;
   std::vector<base::test::FeatureRef> enable_features_;
   std::vector<base::test::FeatureRef> disable_features_;
diff --git a/chrome/browser/vr/webxr_vr_permission_browser_test.cc b/chrome/browser/vr/webxr_vr_permission_browser_test.cc
index ea542b2d..e59c40a 100644
--- a/chrome/browser/vr/webxr_vr_permission_browser_test.cc
+++ b/chrome/browser/vr/webxr_vr_permission_browser_test.cc
@@ -3,57 +3,36 @@
 // found in the LICENSE file.
 
 #include "build/build_config.h"
+#include "chrome/browser/vr/test/mock_xr_device_hook_base.h"
 #include "chrome/browser/vr/test/multi_class_browser_test.h"
 #include "chrome/browser/vr/test/webxr_vr_browser_test.h"
+#include "components/permissions/test/mock_permission_prompt_factory.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/test/browser_test_utils.h"
 
 namespace vr {
-
-// The permission flow isn't specific to any particular runtime; so it's okay to
-// keep it specific to one runtime; however, ShownCount and SetupObservers could
-// move to a higher level and tests could be run on all supported runtimes if
-// desired.
-class WebXrVrPermissionsBrowserTest
-    : public WebXrVrOpenXrBrowserTestBase,
-      public permissions::PermissionRequestManager::Observer {
- public:
-  WebXrVrPermissionsBrowserTest() = default;
-  ~WebXrVrPermissionsBrowserTest() override = default;
-
-  void SetupObservers() { GetPermissionRequestManager()->AddObserver(this); }
-
-  uint32_t ShownCount() { return shown_count_; }
-
- private:
-  void OnPromptAdded() override { shown_count_++; }
-
-  uint32_t shown_count_ = 0u;
-};
-
 // Tests that WebXR sessions can be created when permission is granted.
-IN_PROC_BROWSER_TEST_F(WebXrVrPermissionsBrowserTest,
+IN_PROC_BROWSER_TEST_F(WebXrVrOpenXrBrowserTestBase,
                        TestGrantingPermissionCreatesSession) {
-  permission_auto_response_ =
-      permissions::PermissionRequestManager::AutoResponseType::ACCEPT_ALL;
+  SetPermissionAutoResponse(
+      permissions::PermissionRequestManager::AutoResponseType::ACCEPT_ALL);
 
   LoadFileAndAwaitInitialization("generic_webxr_page");
-  SetupObservers();
 
   EnterSessionWithUserGestureOrFail();
 
-  ASSERT_EQ(ShownCount(), 1u) << "Permission prompt should've been shown once";
+  ASSERT_EQ(GetPermissionPromptFactory()->show_count(), 1)
+      << "Permission prompt should've been shown once";
 }
 
 // Tests that a session is not created if the user explicitly denies permission.
-IN_PROC_BROWSER_TEST_F(WebXrVrPermissionsBrowserTest,
+IN_PROC_BROWSER_TEST_F(WebXrVrOpenXrBrowserTestBase,
                        TestDenyingPermissionFailsSessionCreation) {
-  permission_auto_response_ =
-      permissions::PermissionRequestManager::AutoResponseType::DENY_ALL;
+  SetPermissionAutoResponse(
+      permissions::PermissionRequestManager::AutoResponseType::DENY_ALL);
 
   LoadFileAndAwaitInitialization("test_webxr_permission");
-  SetupObservers();
   EnterSessionWithUserGesture();
   PollJavaScriptBooleanOrFail(
       "sessionInfos[sessionTypes.IMMERSIVE].error != null",
@@ -61,18 +40,18 @@
   RunJavaScriptOrFail("verifyPermissionDeniedError(sessionTypes.IMMERSIVE)");
   AssertNoJavaScriptErrors();
 
-  ASSERT_EQ(ShownCount(), 1u) << "Permission prompt should've been shown once";
+  ASSERT_EQ(GetPermissionPromptFactory()->show_count(), 1)
+      << "Permission prompt should've been shown once";
 }
 
 // Tests that a session is not created if the user explicitly closes the
 // dialog.
-IN_PROC_BROWSER_TEST_F(WebXrVrPermissionsBrowserTest,
+IN_PROC_BROWSER_TEST_F(WebXrVrOpenXrBrowserTestBase,
                        TestDismissingPromptCloseFailsSessionCreation) {
-  permission_auto_response_ =
-      permissions::PermissionRequestManager::AutoResponseType::DISMISS;
+  SetPermissionAutoResponse(
+      permissions::PermissionRequestManager::AutoResponseType::DISMISS);
 
   LoadFileAndAwaitInitialization("test_webxr_permission");
-  SetupObservers();
   EnterSessionWithUserGesture();
   PollJavaScriptBooleanOrFail(
       "sessionInfos[sessionTypes.IMMERSIVE].error != null",
@@ -80,19 +59,28 @@
   RunJavaScriptOrFail("verifyPermissionDeniedError(sessionTypes.IMMERSIVE)");
   AssertNoJavaScriptErrors();
 
-  ASSERT_EQ(ShownCount(), 1u) << "Permission prompt should've been shown once";
+  ASSERT_EQ(GetPermissionPromptFactory()->show_count(), 1)
+      << "Permission prompt should've been shown once";
 }
 
 // Tests that requesting the same type of session only prompts once.
-IN_PROC_BROWSER_TEST_F(WebXrVrPermissionsBrowserTest, TestPermissionPersists) {
-  permission_auto_response_ =
-      permissions::PermissionRequestManager::AutoResponseType::ACCEPT_ALL;
+IN_PROC_BROWSER_TEST_F(WebXrVrOpenXrBrowserTestBase, TestPermissionPersists) {
+  MockXRDeviceHookBase mock;
+
+  SetPermissionAutoResponse(
+      permissions::PermissionRequestManager::AutoResponseType::ACCEPT_ALL);
 
   LoadFileAndAwaitInitialization("generic_webxr_page");
-  SetupObservers();
 
   EnterSessionWithUserGestureOrFail();
-  EndSessionOrFail();
+
+  // End the session from the device process, due to potential racy behavior
+  // when ending a session from blink.
+  // TODO(https://crbug.com/235526581): Fix end session behavior.
+  device_test::mojom::EventData data = {};
+  data.type = device_test::mojom::EventType::kSessionLost;
+  mock.PopulateEvent(data);
+  WaitForSessionEndOrFail();
 
   // Since the permission from the earlier prompt should be persisted,
   // requesting an XR session a second time should not prompt the user, but
@@ -101,18 +89,17 @@
 
   // Validate that the permission prompt has only been shown once since the
   // start of this test.
-  ASSERT_EQ(ShownCount(), 1u)
+  ASSERT_EQ(GetPermissionPromptFactory()->show_count(), 1)
       << "Permission prompt should've only been shown once";
 }
 
 // Verify that inline with no session parameters doesn't prompt for permission.
-IN_PROC_BROWSER_TEST_F(WebXrVrPermissionsBrowserTest,
+IN_PROC_BROWSER_TEST_F(WebXrVrOpenXrBrowserTestBase,
                        TestPermissionNotNeededForInline) {
-  permission_auto_response_ =
-      permissions::PermissionRequestManager::AutoResponseType::ACCEPT_ALL;
+  SetPermissionAutoResponse(
+      permissions::PermissionRequestManager::AutoResponseType::ACCEPT_ALL);
 
   LoadFileAndAwaitInitialization("test_webxr_permission");
-  SetupObservers();
   RunJavaScriptOrFail("requestMagicWindowSession()");
 
   PollJavaScriptBooleanOrFail(
@@ -121,7 +108,8 @@
 
   // Validate that the permission prompt has not been shown since this test
   // began.
-  ASSERT_EQ(ShownCount(), 0u) << "Permission prompt should not have been shown";
+  ASSERT_EQ(GetPermissionPromptFactory()->show_count(), 0)
+      << "Permission prompt should not have been shown";
 }
 
 }  // namespace vr
diff --git a/chrome/browser/vr/webxr_vr_permission_request_browser_test.cc b/chrome/browser/vr/webxr_vr_permission_request_browser_test.cc
index 73afab8..bc9318e6 100644
--- a/chrome/browser/vr/webxr_vr_permission_request_browser_test.cc
+++ b/chrome/browser/vr/webxr_vr_permission_request_browser_test.cc
@@ -32,8 +32,7 @@
   // to change that as we want anything necessary to request a session to get
   // granted. However, we want no action to be taken now so that the prompt for
   // location comes up and does not get dismissed.
-  t->GetPermissionRequestManager()->set_auto_response_for_test(
-      permissions::PermissionRequestManager::NONE);
+  t->SetPermissionAutoResponse(permissions::PermissionRequestManager::NONE);
   t->RunJavaScriptOrFail(
       "navigator.geolocation.getCurrentPosition( ()=>{}, ()=>{} )");
   base::RunLoop().RunUntilIdle();
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt
index f73a2bf..8f0ff64 100644
--- a/chrome/build/android-arm32.pgo.txt
+++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@
-chrome-android32-main-1733982982-2a9068a86dfc53637a8eb077b2e7347d6235364a-ee41a09fb8659ce27691c80b7a02b241efd5c2bd.profdata
+chrome-android32-main-1734004756-f6f2b1ec499758b1173871377c105e90735eacd4-3ef735a78d1ee8ef1ce5264304f7c56f2ac55993.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt
index 9f857fa..b1a239a2 100644
--- a/chrome/build/android-arm64.pgo.txt
+++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@
-chrome-android64-main-1733985663-3a969be2fd42a11f452558b489d052ee22593243-cc1ab0f91ee31a594bfb2296e28eb132e7631a7a.profdata
+chrome-android64-main-1734015096-bc1c23058635a2fa8d73a66d1208abd6119cb432-153782fcc02e4108603292377cd4aa7b778517ea.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index c328aea..c563298 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1733961495-7042ac443114d99778dd811f9476d34517ab53bb-129657c5e4bc69a481af3f92802ae4191ee4bd77.profdata
+chrome-linux-main-1734004756-ab5ebede46a6a82239e2af65a3e7522bad07480f-3ef735a78d1ee8ef1ce5264304f7c56f2ac55993.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 9dd6e94..810e4d2 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1733968755-bdeb33b655df43a2eecaff23c298f0d48772d2b8-d09bd824a5c8195503fe782b6cb8bd3b809a587c.profdata
+chrome-mac-arm-main-1734011773-dd43ea4d0313c566668c7ccd1be95b59abf51151-0f8b2f9c07d67aee623a29d0d3276dfdf474efca.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 4a12623..e4491d4 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1733961495-6f1fd5cfda4712af03134d2f1d47350bd4702489-129657c5e4bc69a481af3f92802ae4191ee4bd77.profdata
+chrome-mac-main-1734004756-78e4be568a90c88429d46779f60283a86cd7aade-3ef735a78d1ee8ef1ce5264304f7c56f2ac55993.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt
index e87eb0bf..2a9eb02 100644
--- a/chrome/build/win-arm64.pgo.txt
+++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@
-chrome-win-arm64-main-1733982982-4634c2b2ece59ff573d55a3a0deb20b126ccf70f-ee41a09fb8659ce27691c80b7a02b241efd5c2bd.profdata
+chrome-win-arm64-main-1734004756-3009f3fed05a5774ef506928bab5f5c6fdbe0255-3ef735a78d1ee8ef1ce5264304f7c56f2ac55993.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 31028b4..1d848973 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1733972271-ba358b1352d50c93a11a7afbf2a5495fdfba0ea6-f6eeb774b14259df6669d34419d3a0d1165fcdcb.profdata
+chrome-win32-main-1733982982-c809cdcdd6aa6bfe815988b6230775a66b11ff22-ee41a09fb8659ce27691c80b7a02b241efd5c2bd.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index f48aebb6..56a46b46 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1733972271-163ae193b9dfb8442b359a6c1e40526890f19277-f6eeb774b14259df6669d34419d3a0d1165fcdcb.profdata
+chrome-win64-main-1733993352-f640f54ab699f675eff9f255d50985119c65be53-965135fff2247ed2719a9325acd76a517ccb5b49.profdata
diff --git a/chrome/common/extensions/api/common_extension_api_unittest.cc b/chrome/common/extensions/api/common_extension_api_unittest.cc
index 82ad27a3f..d528ad63 100644
--- a/chrome/common/extensions/api/common_extension_api_unittest.cc
+++ b/chrome/common/extensions/api/common_extension_api_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include <stddef.h>
 
+#include <array>
 #include <memory>
 #include <string>
 #include <utility>
@@ -96,14 +92,15 @@
 
   ExtensionAPI empty_instance;
 
-  struct {
+  struct TestData {
     raw_ptr<ExtensionAPI> api;
     bool expect_populated;
-  } test_data[] = {
-    { shared_instance, true },
-    { new_instance.get(), true },
-    { &empty_instance, false }
   };
+  auto test_data = std::to_array<TestData>({
+      {shared_instance, true},
+      {new_instance.get(), true},
+      {&empty_instance, false},
+  });
 
   for (size_t i = 0; i < std::size(test_data); ++i) {
     EXPECT_EQ(test_data[i].expect_populated,
@@ -112,16 +109,19 @@
 }
 
 TEST(ExtensionAPITest, SplitDependencyName) {
-  struct {
+  struct TestData {
     std::string input;
     std::string expected_feature_type;
     std::string expected_feature_name;
-  } test_data[] = {{"", "api", ""},  // assumes "api" when no type is present
-                   {"foo", "api", "foo"},
-                   {"foo:", "foo", ""},
-                   {":foo", "", "foo"},
-                   {"foo:bar", "foo", "bar"},
-                   {"foo:bar.baz", "foo", "bar.baz"}};
+  };
+  auto test_data = std::to_array<TestData>({
+      {"", "api", ""},  // assumes "api" when no type is present
+      {"foo", "api", "foo"},
+      {"foo:", "foo", ""},
+      {":foo", "", "foo"},
+      {"foo:bar", "foo", "bar"},
+      {"foo:bar.baz", "foo", "bar.baz"},
+  });
 
   for (size_t i = 0; i < std::size(test_data); ++i) {
     std::string feature_type;
@@ -134,12 +134,13 @@
 }
 
 TEST(ExtensionAPITest, APIFeatures) {
-  struct {
+  struct TestData {
     std::string api_full_name;
     bool expect_is_available;
     mojom::ContextType context;
     GURL url;
-  } test_data[] = {
+  };
+  auto test_data = std::to_array<TestData>({
       {"test1", false, mojom::ContextType::kWebPage, GURL()},
       {"test1", true, mojom::ContextType::kPrivilegedExtension, GURL()},
       {"test1", true, mojom::ContextType::kUnprivilegedExtension, GURL()},
@@ -235,7 +236,8 @@
       {"parent3.noparent.child", true, mojom::ContextType::kPrivilegedExtension,
        GURL()},
       {"parent3.noparent.child", true,
-       mojom::ContextType::kUnprivilegedExtension, GURL()}};
+       mojom::ContextType::kUnprivilegedExtension, GURL()},
+  });
 
   FeatureProvider api_feature_provider;
   AddUnittestAPIFeatures(&api_feature_provider);
@@ -334,13 +336,14 @@
                            .Set("manifest_version", 2))
           .Build();
 
-  struct {
+  struct TestData {
     std::string api_full_name;
     bool expect_is_available;
     mojom::ContextType context;
     raw_ptr<const Extension> extension;
     GURL url;
-  } test_data[] = {
+  };
+  auto test_data = std::to_array<TestData>({
       {"test1", false, mojom::ContextType::kWebPage, nullptr, GURL()},
       {"test1", true, mojom::ContextType::kUnprivilegedExtension, nullptr,
        GURL()},
@@ -375,7 +378,7 @@
        GURL("chrome-untrusted://other-test/")},
       {"test11", false, mojom::ContextType::kWebUi, nullptr,
        GURL("chrome://test/")},
-  };
+  });
 
   FeatureProvider api_feature_provider;
   AddUnittestAPIFeatures(&api_feature_provider);
@@ -796,22 +799,23 @@
 }
 
 TEST(ExtensionAPITest, GetAPINameFromFullName) {
-  struct {
+  struct TestData {
     std::string input;
     std::string api_name;
     std::string child_name;
-  } test_data[] = {
-    { "", "", "" },
-    { "unknown", "", "" },
-    { "bookmarks", "bookmarks", "" },
-    { "bookmarks.", "bookmarks", "" },
-    { ".bookmarks", "", "" },
-    { "bookmarks.create", "bookmarks", "create" },
-    { "bookmarks.create.", "bookmarks", "create." },
-    { "bookmarks.create.monkey", "bookmarks", "create.monkey" },
-    { "bookmarkManagerPrivate", "bookmarkManagerPrivate", "" },
-    { "bookmarkManagerPrivate.copy", "bookmarkManagerPrivate", "copy" }
   };
+  auto test_data = std::to_array<TestData>({
+      {"", "", ""},
+      {"unknown", "", ""},
+      {"bookmarks", "bookmarks", ""},
+      {"bookmarks.", "bookmarks", ""},
+      {".bookmarks", "", ""},
+      {"bookmarks.create", "bookmarks", "create"},
+      {"bookmarks.create.", "bookmarks", "create."},
+      {"bookmarks.create.monkey", "bookmarks", "create.monkey"},
+      {"bookmarkManagerPrivate", "bookmarkManagerPrivate", ""},
+      {"bookmarkManagerPrivate.copy", "bookmarkManagerPrivate", "copy"},
+  });
 
   std::unique_ptr<ExtensionAPI> api(
       ExtensionAPI::CreateWithDefaultConfiguration());
@@ -834,10 +838,12 @@
       static_cast<const SimpleFeature*>(
           api->GetFeatureDependency("api:browserAction.setTitle"));
 
-  struct {
+  struct TestData {
     raw_ptr<const SimpleFeature> feature;
     // TODO(aa): More stuff to test over time.
-  } test_data[] = {{browser_action}, {browser_action_set_title}};
+  };
+  auto test_data =
+      std::to_array<TestData>({{browser_action}, {browser_action_set_title}});
 
   for (size_t i = 0; i < std::size(test_data); ++i) {
     const SimpleFeature* feature = test_data[i].feature;
@@ -941,10 +947,11 @@
 
 // Tests API availability with an empty manifest.
 TEST(ExtensionAPITest, NoPermissions) {
-  const struct {
+  struct Tests {
     const char* permission_name;
     bool expect_success;
-  } kTests[] = {
+  };
+  const auto kTests = std::to_array<Tests>({
       // Test default module/package permission.
       {"extension", true},
       {"i18n", true},
@@ -983,7 +990,7 @@
       // But other functions in those modules do.
       {"management.getPermissionWarningsById", false},
       {"runtime.connectNative", false},
-  };
+  });
 
   std::unique_ptr<ExtensionAPI> extension_api(
       ExtensionAPI::CreateWithDefaultConfiguration());
diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc
index 1a450420..43fdd0d 100644
--- a/chrome/common/extensions/extension_unittest.cc
+++ b/chrome/common/extensions/extension_unittest.cc
@@ -2,15 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "extensions/common/extension.h"
 
 #include <stddef.h>
 
+#include <array>
+
 #include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/format_macros.h"
@@ -192,61 +189,61 @@
 }
 
 TEST(ExtensionTest, GetResource) {
-  const FilePath valid_path_test_cases[] = {
-    FilePath(FILE_PATH_LITERAL("manifest.json")),
-    FilePath(FILE_PATH_LITERAL("a/b/c/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("com/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("lpt/manifest.json")),
-  };
-  const FilePath invalid_path_test_cases[] = {
-    // Directory name
-    FilePath(FILE_PATH_LITERAL("src/")),
-    // Contains a drive letter specification.
-    FilePath(FILE_PATH_LITERAL("C:\\manifest.json")),
-    // Use backslash '\\' as separator.
-    FilePath(FILE_PATH_LITERAL("a\\b\\c\\manifest.json")),
-    // Reserved Characters with extension
-    FilePath(FILE_PATH_LITERAL("mani>fest.json")),
-    FilePath(FILE_PATH_LITERAL("mani<fest.json")),
-    FilePath(FILE_PATH_LITERAL("mani*fest.json")),
-    FilePath(FILE_PATH_LITERAL("mani:fest.json")),
-    FilePath(FILE_PATH_LITERAL("mani?fest.json")),
-    FilePath(FILE_PATH_LITERAL("mani|fest.json")),
-    // Reserved Characters without extension
-    FilePath(FILE_PATH_LITERAL("mani>fest")),
-    FilePath(FILE_PATH_LITERAL("mani<fest")),
-    FilePath(FILE_PATH_LITERAL("mani*fest")),
-    FilePath(FILE_PATH_LITERAL("mani:fest")),
-    FilePath(FILE_PATH_LITERAL("mani?fest")),
-    FilePath(FILE_PATH_LITERAL("mani|fest")),
-    // Reserved Names with extension.
-    FilePath(FILE_PATH_LITERAL("com1.json")),
-    FilePath(FILE_PATH_LITERAL("com9.json")),
-    FilePath(FILE_PATH_LITERAL("LPT1.json")),
-    FilePath(FILE_PATH_LITERAL("LPT9.json")),
-    FilePath(FILE_PATH_LITERAL("CON.json")),
-    FilePath(FILE_PATH_LITERAL("PRN.json")),
-    FilePath(FILE_PATH_LITERAL("AUX.json")),
-    FilePath(FILE_PATH_LITERAL("NUL.json")),
-    // Reserved Names without extension.
-    FilePath(FILE_PATH_LITERAL("com1")),
-    FilePath(FILE_PATH_LITERAL("com9")),
-    FilePath(FILE_PATH_LITERAL("LPT1")),
-    FilePath(FILE_PATH_LITERAL("LPT9")),
-    FilePath(FILE_PATH_LITERAL("CON")),
-    FilePath(FILE_PATH_LITERAL("PRN")),
-    FilePath(FILE_PATH_LITERAL("AUX")),
-    FilePath(FILE_PATH_LITERAL("NUL")),
-    // Reserved Names as directory.
-    FilePath(FILE_PATH_LITERAL("com1/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("com9/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("LPT1/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("LPT9/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("CON/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("PRN/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("AUX/manifest.json")),
-    FilePath(FILE_PATH_LITERAL("NUL/manifest.json")),
-  };
+  const auto valid_path_test_cases = std::to_array<FilePath>({
+      FilePath(FILE_PATH_LITERAL("manifest.json")),
+      FilePath(FILE_PATH_LITERAL("a/b/c/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("com/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("lpt/manifest.json")),
+  });
+  const auto invalid_path_test_cases = std::to_array<FilePath>({
+      // Directory name
+      FilePath(FILE_PATH_LITERAL("src/")),
+      // Contains a drive letter specification.
+      FilePath(FILE_PATH_LITERAL("C:\\manifest.json")),
+      // Use backslash '\\' as separator.
+      FilePath(FILE_PATH_LITERAL("a\\b\\c\\manifest.json")),
+      // Reserved Characters with extension
+      FilePath(FILE_PATH_LITERAL("mani>fest.json")),
+      FilePath(FILE_PATH_LITERAL("mani<fest.json")),
+      FilePath(FILE_PATH_LITERAL("mani*fest.json")),
+      FilePath(FILE_PATH_LITERAL("mani:fest.json")),
+      FilePath(FILE_PATH_LITERAL("mani?fest.json")),
+      FilePath(FILE_PATH_LITERAL("mani|fest.json")),
+      // Reserved Characters without extension
+      FilePath(FILE_PATH_LITERAL("mani>fest")),
+      FilePath(FILE_PATH_LITERAL("mani<fest")),
+      FilePath(FILE_PATH_LITERAL("mani*fest")),
+      FilePath(FILE_PATH_LITERAL("mani:fest")),
+      FilePath(FILE_PATH_LITERAL("mani?fest")),
+      FilePath(FILE_PATH_LITERAL("mani|fest")),
+      // Reserved Names with extension.
+      FilePath(FILE_PATH_LITERAL("com1.json")),
+      FilePath(FILE_PATH_LITERAL("com9.json")),
+      FilePath(FILE_PATH_LITERAL("LPT1.json")),
+      FilePath(FILE_PATH_LITERAL("LPT9.json")),
+      FilePath(FILE_PATH_LITERAL("CON.json")),
+      FilePath(FILE_PATH_LITERAL("PRN.json")),
+      FilePath(FILE_PATH_LITERAL("AUX.json")),
+      FilePath(FILE_PATH_LITERAL("NUL.json")),
+      // Reserved Names without extension.
+      FilePath(FILE_PATH_LITERAL("com1")),
+      FilePath(FILE_PATH_LITERAL("com9")),
+      FilePath(FILE_PATH_LITERAL("LPT1")),
+      FilePath(FILE_PATH_LITERAL("LPT9")),
+      FilePath(FILE_PATH_LITERAL("CON")),
+      FilePath(FILE_PATH_LITERAL("PRN")),
+      FilePath(FILE_PATH_LITERAL("AUX")),
+      FilePath(FILE_PATH_LITERAL("NUL")),
+      // Reserved Names as directory.
+      FilePath(FILE_PATH_LITERAL("com1/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("com9/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("LPT1/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("LPT9/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("CON/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("PRN/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("AUX/manifest.json")),
+      FilePath(FILE_PATH_LITERAL("NUL/manifest.json")),
+  });
 
   scoped_refptr<Extension> extension = LoadManifestStrict("empty_manifest",
       "empty.json");
diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc
index f2dcc48..57263e6 100644
--- a/chrome/common/extensions/permissions/permission_set_unittest.cc
+++ b/chrome/common/extensions/permissions/permission_set_unittest.cc
@@ -2,13 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
+#include "extensions/common/permissions/permission_set.h"
 
 #include <stddef.h>
 
+#include <array>
 #include <memory>
 #include <utility>
 
@@ -31,7 +29,6 @@
 #include "extensions/common/permissions/permission_message_provider.h"
 #include "extensions/common/permissions/permission_message_test_util.h"
 #include "extensions/common/permissions/permission_message_util.h"
-#include "extensions/common/permissions/permission_set.h"
 #include "extensions/common/permissions/permissions_data.h"
 #include "extensions/common/permissions/permissions_info.h"
 #include "extensions/common/permissions/socket_permission.h"
@@ -659,10 +656,11 @@
 }
 
 TEST(PermissionsTest, IsPrivilegeIncrease) {
-  const struct {
+  struct Tests {
     const char* base_name;
     bool expect_increase;
-  } kTests[] = {
+  };
+  const auto kTests = std::to_array<Tests>({
       {"allhosts1", false},     // all -> all
       {"allhosts2", false},     // all -> one
       {"allhosts3", true},      // one -> all
@@ -699,7 +697,7 @@
       {"sockets1", true},           // none -> tcp:*:*
       {"sockets2", false},          // tcp:*:* -> tcp:*:*
       {"sockets3", true},           // tcp:a.com:80 -> tcp:*:*
-  };
+  });
 
   for (size_t i = 0; i < std::size(kTests); ++i) {
     scoped_refptr<Extension> old_extension(
@@ -1592,7 +1590,7 @@
 }
 
 TEST(PermissionsTest, IsHostPrivilegeIncrease) {
-  const struct {
+  struct TestCases {
     struct host_spec {
       int schemes;
       std::string pattern;
@@ -1602,7 +1600,8 @@
     Manifest::Type type;
     bool is_increase;
     bool reverse_is_increase;
-  } test_cases[] = {
+  };
+  const auto test_cases = std::to_array<TestCases>({
       // Order doesn't matter.
       {{{URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path"},
         {URLPattern::SCHEME_HTTP, "http://www.google.com/path"}},
@@ -1689,7 +1688,7 @@
        Manifest::TYPE_EXTENSION,
        true,
        false},
-  };
+  });
   const PermissionMessageProvider* provider = PermissionMessageProvider::Get();
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     URLPatternSet explicit_hosts1;
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index 9b6153c..73f08c6 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -2256,47 +2256,6 @@
   base::RunLoop().RunUntilIdle();
 }
 
-TEST_F(PasswordAutofillAgentTest, KeyboardReplacingSurfaceSuppressesPopups) {
-  SimulateOnFillPasswordForm(fill_data_);
-  SimulateSuggestionChoice(username_element_);
-  EXPECT_CALL(fake_driver_, ShowKeyboardReplacingSurface);
-  CheckSuggestionsNotShown();
-}
-
-TEST_F(PasswordAutofillAgentTest, KeyboardReplacingSurfaceClosed) {
-  fill_data_.wait_for_username = true;
-  SimulateOnFillPasswordForm(fill_data_);
-
-  // Touch to fill will be shown multiple times until
-  // KeyboardReplacingSurfaceClosed() gets called.
-  SimulateElementClick(password_element_);
-  EXPECT_TRUE(password_autofill_agent_->ShouldSuppressKeyboard());
-  EXPECT_EQ(WebAutofillState::kNotFilled, password_element_.GetAutofillState());
-
-  EXPECT_CALL(fake_driver_, ShowKeyboardReplacingSurface);
-  base::RunLoop().RunUntilIdle();
-
-  password_autofill_agent_->KeyboardReplacingSurfaceClosed(true);
-  EXPECT_FALSE(password_autofill_agent_->TryToShowKeyboardReplacingSurface(
-      password_element_));
-  EXPECT_FALSE(password_autofill_agent_->ShouldSuppressKeyboard());
-  EXPECT_EQ(WebAutofillState::kNotFilled, password_element_.GetAutofillState());
-
-  // Reload the page and simulate fill.
-  LoadHTML(kFormHTML);
-  UpdateUrlForHTML(kFormHTML);
-  UpdateUsernameAndPasswordElements();
-  SimulateOnFillPasswordForm(fill_data_);
-  SimulateElementClick(password_element_);
-
-  // After the reload touch to fill is shown again.
-  EXPECT_TRUE(password_autofill_agent_->ShouldSuppressKeyboard());
-  EXPECT_EQ(WebAutofillState::kNotFilled, password_element_.GetAutofillState());
-
-  EXPECT_CALL(fake_driver_, ShowKeyboardReplacingSurface);
-  base::RunLoop().RunUntilIdle();
-}
-
 TEST_F(PasswordAutofillAgentTest, SubmissionReadiness_NoUsernameField) {
   LoadHTML(kVisibleFormWithNoUsernameHTML);
   UpdateUrlForHTML(kVisibleFormWithNoUsernameHTML);
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index f650c9d..d448e17 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include <string.h>
 
+#include <array>
 #include <memory>
 #include <string>
 #include <string_view>
@@ -1364,8 +1365,11 @@
 TEST_F(PasswordGenerationAgentTest, GenerationAvailableByRendererIds) {
   LoadHTMLWithUserGesture(kMultipleAccountCreationFormHTML);
 
-  constexpr const char* kPasswordElementsIds[] = {"password", "first_password",
-                                                  "second_password"};
+  constexpr auto kPasswordElementsIds = std::to_array<const char*>({
+      "password",
+      "first_password",
+      "second_password",
+  });
 
   WebDocument document = GetMainFrame()->GetDocument();
   std::vector<WebInputElement> password_elements;
diff --git a/chrome/renderer/searchbox/searchbox_unittest.cc b/chrome/renderer/searchbox/searchbox_unittest.cc
index 4fdc0180..feee5b4 100644
--- a/chrome/renderer/searchbox/searchbox_unittest.cc
+++ b/chrome/renderer/searchbox/searchbox_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "chrome/renderer/searchbox/searchbox.h"
 
 #include <stddef.h>
 
+#include <array>
 #include <map>
 #include <string>
 
@@ -119,7 +115,7 @@
 }
 
 TEST(SearchBoxUtilTest, ParseFrameIdAndRestrictedIdFailure) {
-  const char* test_cases[] = {
+  auto test_cases = std::to_array<const char*>({
       "",
       "    ",
       "/",
@@ -137,7 +133,7 @@
       "FFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFE/3/1",
       "blahblah",
       "0xA/0x10",
-  };
+  });
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     std::string frame_token;
     InstantRestrictedID rid = -1;
@@ -150,19 +146,20 @@
 }
 
 TEST(SearchBoxUtilTest, ParseIconRestrictedUrlFaviconSuccess) {
-  struct {
+  struct TestCases {
     const char* transient_url_str;
     const char* expected_param_part;
     const char* expected_frame_token;
     InstantRestrictedID expected_rid;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       {"chrome-search://favicon/FFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFE/2", "",
        "FFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFE", 2},
       {"chrome-search://favicon/size/16@2x/1FFFFFFFFFFFFFFDFFFFFFFFFFFFFFFE/4",
        "size/16@2x/", "1FFFFFFFFFFFFFFDFFFFFFFFFFFFFFFE", 4},
       {"chrome-search://favicon/iconurl/FFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFA/10",
        "iconurl/", "FFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFA", 10},
-  };
+  });
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     std::string param_part = "(unwritten)";
     std::string frame_token;
@@ -180,15 +177,16 @@
 }
 
 TEST(SearchBoxUtilTest, ParseIconRestrictedUrlFailure) {
-  struct {
+  struct TestCases {
     const char* transient_url_str;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       {"chrome-search://favicon/"},
       {"chrome-search://favicon/3/"},
       {"chrome-search://favicon/size/3/4"},
       {"chrome-search://favicon/largest/http://www.google.com"},
       {"chrome-search://favicon/size/16@2x/-1/10"},
-  };
+  });
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     std::string param_part = "(unwritten)";
     std::string frame_token;
@@ -203,10 +201,11 @@
 }
 
 TEST(SearchBoxUtilTest, TranslateIconRestrictedUrlSuccess) {
-  struct {
+  struct TestCases {
     const char* transient_url_str;
     std::string expected_url_str;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCases>({
       {"chrome-search://favicon/0123456789ABCDEF0123456789ABCDEF/1",
        std::string("chrome-search://favicon/") + kUrlString1},
       {"chrome-search://favicon/", "chrome-search://favicon/"},
@@ -218,7 +217,7 @@
       {"chrome-search://favicon/invalidstuff", "chrome-search://favicon/"},
       {"chrome-search://favicon/size/16@2x/http://www.google.com",
        "chrome-search://favicon/"},
-  };
+  });
 
   MockIconURLHelper helper;
   for (size_t i = 0; i < std::size(test_cases); ++i) {
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 64e5c2e..e1f6b2d 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -7539,6 +7539,7 @@
       "../browser/ui/passwords/bubble_controllers/default_store_changed_bubble_controller_unittest.cc",
       "../browser/ui/passwords/bubble_controllers/manage_passwords_bubble_controller_unittest.cc",
       "../browser/ui/passwords/bubble_controllers/move_to_account_store_bubble_controller_unittest.cc",
+      "../browser/ui/passwords/bubble_controllers/password_change/password_change_info_bubble_controller_unittest.cc",
       "../browser/ui/passwords/bubble_controllers/post_save_compromised_bubble_controller_unittest.cc",
       "../browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller_unittest.cc",
       "../browser/ui/passwords/bubble_controllers/save_update_bubble_controller_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/hub/NewTabGroupDialogFacility.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/hub/NewTabGroupDialogFacility.java
index 4f1644f..a81588f1 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/hub/NewTabGroupDialogFacility.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/hub/NewTabGroupDialogFacility.java
@@ -27,6 +27,7 @@
 import org.chromium.base.test.transit.Facility;
 import org.chromium.base.test.transit.ViewElement;
 import org.chromium.base.test.transit.ViewSpec;
+import org.chromium.chrome.browser.tabmodel.TabGroupColorUtils;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerUtils;
 import org.chromium.chrome.test.R;
@@ -91,7 +92,7 @@
 
         // TODO(crbug.com/345489175): Partially cut off in android_30_google_apis_x86.textpb
         elements.declareView(COLOR_PICKER_CONTAINER, ViewElement.displayingAtLeastOption(50));
-        @TabGroupColorId List<Integer> colors = ColorPickerUtils.getTabGroupColorIdList();
+        @TabGroupColorId List<Integer> colors = TabGroupColorUtils.getTabGroupColorIdList();
         for (@TabGroupColorId Integer color : colors) {
             if (mSelectedColor != null) {
                 elements.declareView(
diff --git a/chrome/test/chromedriver/chrome/heap_snapshot_taker.cc b/chrome/test/chromedriver/chrome/heap_snapshot_taker.cc
index eb409c7..617ff028 100644
--- a/chrome/test/chromedriver/chrome/heap_snapshot_taker.cc
+++ b/chrome/test/chromedriver/chrome/heap_snapshot_taker.cc
@@ -11,6 +11,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <utility>
 
 #include "base/json/json_reader.h"
@@ -45,11 +46,11 @@
 
 Status HeapSnapshotTaker::TakeSnapshotInternal() {
   base::Value::Dict params;
-  const char* const kMethods[] = {
+  const auto kMethods = std::to_array<const char*>({
       "Debugger.enable",
       "HeapProfiler.collectGarbage",
-      "HeapProfiler.takeHeapSnapshot"
-  };
+      "HeapProfiler.takeHeapSnapshot",
+  });
   for (size_t i = 0; i < std::size(kMethods); ++i) {
     Status status = client_->SendCommand(kMethods[i], params);
     if (status.IsError())
diff --git a/chrome/test/chromedriver/chrome/heap_snapshot_taker_unittest.cc b/chrome/test/chromedriver/chrome/heap_snapshot_taker_unittest.cc
index 2054d6cc..1a96ae9e 100644
--- a/chrome/test/chromedriver/chrome/heap_snapshot_taker_unittest.cc
+++ b/chrome/test/chromedriver/chrome/heap_snapshot_taker_unittest.cc
@@ -11,6 +11,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <list>
 #include <memory>
 #include <string>
@@ -23,7 +24,7 @@
 
 namespace {
 
-const char* const chunks[] = {"{\"a\": 1,", "\"b\": 2}"};
+const auto chunks = std::to_array<const char*>({"{\"a\": 1,", "\"b\": 2}"});
 
 base::Value GetSnapshotAsValue() {
   return base::Value("{\"a\": 1,\"b\": 2}");
diff --git a/chrome/test/chromedriver/key_converter.cc b/chrome/test/chromedriver/key_converter.cc
index c049023..7fcdf209 100644
--- a/chrome/test/chromedriver/key_converter.cc
+++ b/chrome/test/chromedriver/key_converter.cc
@@ -11,6 +11,8 @@
 
 #include <stddef.h>
 
+#include <array>
+
 #include "base/format_macros.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversion_utils.h"
@@ -26,113 +28,63 @@
   ui::KeyboardCode key_code;
 };
 
-const ModifierMaskAndKeyCode kModifiers[] = {
+const auto kModifiers = std::to_array<ModifierMaskAndKeyCode>({
     {kShiftKeyModifierMask, ui::VKEY_SHIFT},
     {kControlKeyModifierMask, ui::VKEY_CONTROL},
     {kAltKeyModifierMask, ui::VKEY_MENU},
-    {kMetaKeyModifierMask, ui::VKEY_COMMAND}};
+    {kMetaKeyModifierMask, ui::VKEY_COMMAND},
+});
 
 // Ordered list of all the key codes corresponding to special WebDriver keys.
 // These keys are "special" in the sense that their code points are defined by
 // the W3C spec (https://w3c.github.io/webdriver/#dfn-normalised-key-value),
 // and are in the Unicode Private Use Area. All other keys have their code
 // points defined by the Unicode standard.
-const ui::KeyboardCode kSpecialWebDriverKeys[] = {
-    ui::VKEY_UNKNOWN,   // \uE000
-    ui::VKEY_CANCEL,  // \uE001
-    ui::VKEY_HELP,
-    ui::VKEY_BACK,
-    ui::VKEY_TAB,
-    ui::VKEY_CLEAR,
-    ui::VKEY_RETURN,
-    ui::VKEY_RETURN,
-    ui::VKEY_SHIFT,
-    ui::VKEY_CONTROL,
-    ui::VKEY_MENU,
-    ui::VKEY_PAUSE,
-    ui::VKEY_ESCAPE,
-    ui::VKEY_SPACE,
-    ui::VKEY_PRIOR,    // page up
-    ui::VKEY_NEXT,     // page down
-    ui::VKEY_END,      // \uE010
-    ui::VKEY_HOME,
-    ui::VKEY_LEFT,
-    ui::VKEY_UP,
-    ui::VKEY_RIGHT,
-    ui::VKEY_DOWN,
-    ui::VKEY_INSERT,
+const auto kSpecialWebDriverKeys = std::to_array<ui::KeyboardCode>({
+    ui::VKEY_UNKNOWN,  // \uE000
+    ui::VKEY_CANCEL,   // \uE001
+    ui::VKEY_HELP,         ui::VKEY_BACK,    ui::VKEY_TAB,
+    ui::VKEY_CLEAR,        ui::VKEY_RETURN,  ui::VKEY_RETURN,
+    ui::VKEY_SHIFT,        ui::VKEY_CONTROL, ui::VKEY_MENU,
+    ui::VKEY_PAUSE,        ui::VKEY_ESCAPE,  ui::VKEY_SPACE,
+    ui::VKEY_PRIOR,  // page up
+    ui::VKEY_NEXT,   // page down
+    ui::VKEY_END,    // \uE010
+    ui::VKEY_HOME,         ui::VKEY_LEFT,    ui::VKEY_UP,
+    ui::VKEY_RIGHT,        ui::VKEY_DOWN,    ui::VKEY_INSERT,
     ui::VKEY_DELETE,
     ui::VKEY_OEM_1,     // semicolon
     ui::VKEY_OEM_PLUS,  // equals
-    ui::VKEY_NUMPAD0,
-    ui::VKEY_NUMPAD1,
-    ui::VKEY_NUMPAD2,
-    ui::VKEY_NUMPAD3,
-    ui::VKEY_NUMPAD4,
-    ui::VKEY_NUMPAD5,
-    ui::VKEY_NUMPAD6,   // \uE020
-    ui::VKEY_NUMPAD7,
-    ui::VKEY_NUMPAD8,
-    ui::VKEY_NUMPAD9,
-    ui::VKEY_MULTIPLY,
-    ui::VKEY_ADD,
-    ui::VKEY_OEM_COMMA,
-    ui::VKEY_SUBTRACT,
-    ui::VKEY_DECIMAL,
-    ui::VKEY_DIVIDE,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,   // \uE030
-    ui::VKEY_F1,
-    ui::VKEY_F2,
-    ui::VKEY_F3,
-    ui::VKEY_F4,
-    ui::VKEY_F5,
-    ui::VKEY_F6,
-    ui::VKEY_F7,
-    ui::VKEY_F8,
-    ui::VKEY_F9,
-    ui::VKEY_F10,
-    ui::VKEY_F11,
-    ui::VKEY_F12,
-    ui::VKEY_LWIN,      // meta
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
+    ui::VKEY_NUMPAD0,      ui::VKEY_NUMPAD1, ui::VKEY_NUMPAD2,
+    ui::VKEY_NUMPAD3,      ui::VKEY_NUMPAD4, ui::VKEY_NUMPAD5,
+    ui::VKEY_NUMPAD6,  // \uE020
+    ui::VKEY_NUMPAD7,      ui::VKEY_NUMPAD8, ui::VKEY_NUMPAD9,
+    ui::VKEY_MULTIPLY,     ui::VKEY_ADD,     ui::VKEY_OEM_COMMA,
+    ui::VKEY_SUBTRACT,     ui::VKEY_DECIMAL, ui::VKEY_DIVIDE,
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_UNKNOWN,  // \uE030
+    ui::VKEY_F1,           ui::VKEY_F2,      ui::VKEY_F3,
+    ui::VKEY_F4,           ui::VKEY_F5,      ui::VKEY_F6,
+    ui::VKEY_F7,           ui::VKEY_F8,      ui::VKEY_F9,
+    ui::VKEY_F10,          ui::VKEY_F11,     ui::VKEY_F12,
+    ui::VKEY_LWIN,  // meta
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN,
     ui::VKEY_DBE_DBCSCHAR,  // \uE040 ZenkakuHankaku
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_UNKNOWN,
-    ui::VKEY_RSHIFT,    // \uE050
-    ui::VKEY_RCONTROL,
-    ui::VKEY_RMENU,
-    ui::VKEY_RWIN,      // meta
-    ui::VKEY_PRIOR,     // page up
-    ui::VKEY_NEXT,      // page down
-    ui::VKEY_END,
-    ui::VKEY_HOME,
-    ui::VKEY_LEFT,
-    ui::VKEY_UP,
-    ui::VKEY_RIGHT,
-    ui::VKEY_DOWN,
-    ui::VKEY_INSERT,
-    ui::VKEY_DELETE,
-};
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_UNKNOWN,      ui::VKEY_UNKNOWN, ui::VKEY_UNKNOWN,
+    ui::VKEY_RSHIFT,  // \uE050
+    ui::VKEY_RCONTROL,     ui::VKEY_RMENU,
+    ui::VKEY_RWIN,   // meta
+    ui::VKEY_PRIOR,  // page up
+    ui::VKEY_NEXT,   // page down
+    ui::VKEY_END,          ui::VKEY_HOME,    ui::VKEY_LEFT,
+    ui::VKEY_UP,           ui::VKEY_RIGHT,   ui::VKEY_DOWN,
+    ui::VKEY_INSERT,       ui::VKEY_DELETE,
+});
 
 const char16_t kWebDriverNullKey = u'\uE000';
 const char16_t kWebDriverShiftKey = u'\uE008';
@@ -220,7 +172,7 @@
 // The code point starts at \uE000 and must increase by 1 with each row,
 // with placeholders (empty strings) used for unassigned code points.
 const int kNormalisedKeyValueBase = 0xE000;
-const char* const kNormalisedKeyValue[] = {
+const auto kNormalisedKeyValue = std::to_array<const char*>({
     "Unidentified",  // \uE000
     "Cancel",        // \uE001
     "Help",          // \uE002
@@ -270,22 +222,22 @@
     "",
     "",
     "",
-    "F1",            // \uE031
-    "F2",            // \uE032
-    "F3",            // \uE033
-    "F4",            // \uE034
-    "F5",            // \uE035
-    "F6",            // \uE036
-    "F7",            // \uE037
-    "F8",            // \uE038
-    "F9",            // \uE039
-    "F10",           // \uE03A
-    "F11",           // \uE03B
-    "F12",           // \uE03C
-    "Meta",          // \uE03D
+    "F1",    // \uE031
+    "F2",    // \uE032
+    "F3",    // \uE033
+    "F4",    // \uE034
+    "F5",    // \uE035
+    "F6",    // \uE036
+    "F7",    // \uE037
+    "F8",    // \uE038
+    "F9",    // \uE039
+    "F10",   // \uE03A
+    "F11",   // \uE03B
+    "F12",   // \uE03C
+    "Meta",  // \uE03D
     "",
     "",
-    "ZenkakuHankaku", // \uE040
+    "ZenkakuHankaku",  // \uE040
     "",
     "",
     "",
@@ -301,21 +253,21 @@
     "",
     "",
     "",
-    "Shift",         // \uE050
-    "Control",       // \uE051
-    "Alt",           // \uE052
-    "Meta",          // \uE053
-    "PageUp",        // \uE054
-    "PageDown",      // \uE055
-    "End",           // \uE056
-    "Home",          // \uE057
-    "ArrowLeft",     // \uE058
-    "ArrowUp",       // \uE059
-    "ArrowRight",    // \uE05A
-    "ArrowDown",     // \uE05B
-    "Insert",        // \uE05C
-    "Delete",        // \uE05D
-};
+    "Shift",       // \uE050
+    "Control",     // \uE051
+    "Alt",         // \uE052
+    "Meta",        // \uE053
+    "PageUp",      // \uE054
+    "PageDown",    // \uE055
+    "End",         // \uE056
+    "Home",        // \uE057
+    "ArrowLeft",   // \uE058
+    "ArrowUp",     // \uE059
+    "ArrowRight",  // \uE05A
+    "ArrowDown",   // \uE05B
+    "Insert",      // \uE05C
+    "Delete",      // \uE05D
+});
 
 // The "code for key" table (https://w3c.github.io/webdriver/#dfn-code),
 // with the following modifications:
@@ -586,7 +538,7 @@
 
     // Create the key events.
     constexpr int number_modifiers = std::size(kModifiers);
-    bool necessary_modifiers[number_modifiers];
+    std::array<bool, number_modifiers> necessary_modifiers;
     for (int j = 0; j < number_modifiers; ++j) {
       necessary_modifiers[j] = all_modifiers & kModifiers[j].mask &&
                                !(sticky_modifiers & kModifiers[j].mask);
diff --git a/chrome/test/chromedriver/key_converter_unittest.cc b/chrome/test/chromedriver/key_converter_unittest.cc
index 68745de1..c9bc0ef 100644
--- a/chrome/test/chromedriver/key_converter_unittest.cc
+++ b/chrome/test/chromedriver/key_converter_unittest.cc
@@ -11,6 +11,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <string>
 
 #include "base/strings/utf_string_conversions.h"
@@ -261,7 +262,7 @@
 TEST(KeyConverter, MAYBE_AllEnglishKeyboardSymbols) {
   ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_ENGLISH_US);
   std::u16string keys;
-  const ui::KeyboardCode kSymbolKeyCodes[] = {
+  const auto kSymbolKeyCodes = std::to_array<ui::KeyboardCode>({
       ui::VKEY_OEM_3,
       ui::VKEY_OEM_MINUS,
       ui::VKEY_OEM_PLUS,
@@ -272,7 +273,8 @@
       ui::VKEY_OEM_7,
       ui::VKEY_OEM_COMMA,
       ui::VKEY_OEM_PERIOD,
-      ui::VKEY_OEM_2};
+      ui::VKEY_OEM_2,
+  });
   std::string kLowerSymbols = "`-=[]\\;',./";
   std::string kUpperSymbols = "~_+{}|:\"<>?";
   for (size_t i = 0; i < kLowerSymbols.length(); ++i)
@@ -307,15 +309,16 @@
 
 TEST(KeyConverter, AllSpecialWebDriverKeysOnEnglishKeyboard) {
   ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_ENGLISH_US);
-  const char kTextForKeys[] = {
+  const auto kTextForKeys = std::to_array<char>({
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
-      0, 0, 0, 0, '\t', 0, '\r', '\r', 0, 0, 0, 0, 0,
+      0,   0,   0,   0,   '\t', 0,   '\r', '\r', 0,   0,   0,   0,   0,
 #else
-      0, 0, 0, 0, 0, 0, '\r', '\r', 0, 0, 0, 0, 0,
+      0,   0,   0,   0,   0,   0,   '\r', '\r', 0,   0,   0,   0,   0,
 #endif
-      ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ';', '=',
-      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-      '*', '+', ',', '-', '.', '/'};
+      ' ', 0,   0,   0,   0,    0,   0,    0,    0,   0,   0,   ';', '=',
+      '0', '1', '2', '3', '4',  '5', '6',  '7',  '8', '9', '*', '+', ',',
+      '-', '.', '/',
+  });
   for (size_t i = 0; i <= 0x3D; ++i) {
     if (i > 0x29 && i < 0x31)
       continue;
diff --git a/chrome/test/chromedriver/log_replay/devtools_log_reader_unittest.cc b/chrome/test/chromedriver/log_replay/devtools_log_reader_unittest.cc
index c7d2fea..fa80c37 100644
--- a/chrome/test/chromedriver/log_replay/devtools_log_reader_unittest.cc
+++ b/chrome/test/chromedriver/log_replay/devtools_log_reader_unittest.cc
@@ -6,19 +6,26 @@
 // TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
 #pragma allow_unsafe_buffers
 #endif
+
 #include "chrome/test/chromedriver/log_replay/devtools_log_reader.h"
 
+#include <array>
+
 #include "base/base_paths.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
-
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 // Log files to test the reader against
-const char* const kTestDataPath[] = {"chrome", "test", "chromedriver",
-                                     "log_replay", "test_data"};
+const auto kTestDataPath = std::to_array<const char*>({
+    "chrome",
+    "test",
+    "chromedriver",
+    "log_replay",
+    "test_data",
+});
 const char kTestGetTitlePath[] = "testGetTitle_simple.log";
 const char kOneEntryPath[] = "oneDevToolsEntry.log";
 const char kBrowserEntryPath[] = "oneDevToolsBrowserEntry.log";
diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc
index 72173eb1..c5ca335 100644
--- a/chrome/test/chromedriver/logging.cc
+++ b/chrome/test/chromedriver/logging.cc
@@ -13,6 +13,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
+#include <array>
 #include <cmath>
 #include <memory>
 #include <utility>
@@ -58,14 +59,14 @@
 bool readable_timestamp;
 
 // Array indices are the Log::Level enum values.
-const char* const kLevelToName[] = {
-  "ALL",  // kAll
-  "DEBUG",  // kDebug
-  "INFO",  // kInfo
-  "WARNING",  // kWarning
-  "SEVERE",  // kError
-  "OFF",  // kOff
-};
+const auto kLevelToName = std::to_array<const char*>({
+    "ALL",      // kAll
+    "DEBUG",    // kDebug
+    "INFO",     // kInfo
+    "WARNING",  // kWarning
+    "SEVERE",   // kError
+    "OFF",      // kOff
+});
 
 const char* LevelToName(Log::Level level) {
   const int index = level - Log::kAll;
@@ -79,14 +80,14 @@
   Log::Level level;
 };
 
-const LevelPair kNameToLevel[] = {
+const auto kNameToLevel = std::to_array<LevelPair>({
     {"ALL", Log::kAll},
     {"DEBUG", Log::kDebug},
     {"INFO", Log::kInfo},
     {"WARNING", Log::kWarning},
     {"SEVERE", Log::kError},
     {"OFF", Log::kOff},
-};
+});
 
 Log::Level GetLevelFromSeverity(int severity) {
   switch (severity) {
diff --git a/chrome/test/chromedriver/logging_unittest.cc b/chrome/test/chromedriver/logging_unittest.cc
index 8e69337..3eeb767f 100644
--- a/chrome/test/chromedriver/logging_unittest.cc
+++ b/chrome/test/chromedriver/logging_unittest.cc
@@ -11,6 +11,7 @@
 
 #include <stddef.h>
 
+#include <array>
 #include <memory>
 #include <vector>
 
@@ -27,11 +28,15 @@
 
 namespace {
 
-const char* const kAllWdLevels[] = {
-  "ALL", "DEBUG", "INFO", "WARNING", "SEVERE", "OFF"
-};
-
-}
+const auto kAllWdLevels = std::to_array<const char*>({
+    "ALL",
+    "DEBUG",
+    "INFO",
+    "WARNING",
+    "SEVERE",
+    "OFF",
+});
+}  // namespace
 
 TEST(Logging, NameLevelConversionHappy) {
   // All names map to a valid enum value.
diff --git a/chrome/test/chromedriver/server/chromedriver_server.cc b/chrome/test/chromedriver/server/chromedriver_server.cc
index 8754667..1f4ad076 100644
--- a/chrome/test/chromedriver/server/chromedriver_server.cc
+++ b/chrome/test/chromedriver/server/chromedriver_server.cc
@@ -11,6 +11,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
+#include <array>
 #include <locale>
 #include <memory>
 #include <string>
@@ -322,7 +323,7 @@
   std::string url_base;
   if (cmd_line->HasSwitch("h") || cmd_line->HasSwitch("help")) {
     std::string options;
-    const char* const kOptionAndDescriptions[] = {
+    const auto kOptionAndDescriptions = std::to_array<const char*>({
         "port=PORT",
         "port to listen on",
         "adb-port=PORT",
@@ -364,7 +365,7 @@
         "ignore-explicit-port",
         "(experimental) ignore the port specified explicitly, "
         "find a free port instead",
-    };
+    });
     for (size_t i = 0; i < std::size(kOptionAndDescriptions) - 1; i += 2) {
       options += base::StringPrintf(
           "  --%-30s%s\n",
diff --git a/chrome/test/data/extensions/platform_apps/web_view/shim/main.js b/chrome/test/data/extensions/platform_apps/web_view/shim/main.js
index 78f7b56..fd0cca7 100644
--- a/chrome/test/data/extensions/platform_apps/web_view/shim/main.js
+++ b/chrome/test/data/extensions/platform_apps/web_view/shim/main.js
@@ -3407,11 +3407,8 @@
   let webview = document.createElement('webview');
   webview.src = firstWebviewUrl;
 
-  async function checkOpenerRelationships(secondWebview) {
-    let hasOpenerResult =
-        await executeScriptP(secondWebview, {code: '!!window.opener;'});
-    embedder.test.assertEq(1, hasOpenerResult.length);
-    embedder.test.assertEq(!noopener, hasOpenerResult[0]);
+  async function checkOpenerRelationships(secondWebview, hasOpener) {
+    embedder.test.assertEq(!noopener, hasOpener);
 
     if (!noopener) {
       let openerUsageResult = await executeScriptP(
@@ -3446,9 +3443,21 @@
       let new_window = app_new_window.contentWindow;
       new_window.onload = () => {
         let new_webview = new_window.document.createElement('webview');
-        new_webview.addEventListener('loadstop', () => {
-          if (new_webview.src == embedder.emptyGuestURL) {
-            checkOpenerRelationships(new_webview);
+        new_webview.addEventListener('loadstop', async () => {
+          let hasOpenerResult =
+            await executeScriptP(new_webview, { code: '!!window.opener;' });
+          embedder.test.assertEq(1, hasOpenerResult.length);
+          // Note: hasOpenerResult[0] can be null in a scenario where we end
+          // up dispatching a loadstop event for `new_webview` after the
+          // initial WebContents created (e.window) finishes loading; but this
+          // WebContents is destroyed when new_webview is attached and a new
+          // WebContents is loaded. In this short interval, where there is a
+          // new WebContents that hasn't finished its initial navigation;
+          // new_webview.executeScript() fails and returns null.
+          // TODO(crbug.com/40254126): We should be able to remove this check
+          // after we stop eagerly creating a WebContents.
+          if (hasOpenerResult[0] !== null) {
+            checkOpenerRelationships(new_webview, hasOpenerResult[0]);
           }
         });
         // Be sure to do the attach before appending to document.
diff --git a/chrome/utility/importer/bookmark_html_reader_unittest.cc b/chrome/utility/importer/bookmark_html_reader_unittest.cc
index d58615d..76c59e3 100644
--- a/chrome/utility/importer/bookmark_html_reader_unittest.cc
+++ b/chrome/utility/importer/bookmark_html_reader_unittest.cc
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "chrome/utility/importer/bookmark_html_reader.h"
 
 #include <stddef.h>
 
+#include <array>
 #include <string>
 
 #include "base/files/file_path.h"
@@ -151,7 +147,8 @@
     const std::string url;
     const bool can_be_imported_as_search_engine;
     const std::string expected_search_engine_url;
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCase>({
       {"http://www.example.%s.com", true,
        "http://www.example.{searchTerms}.com/"},
       {"http://www.example.%S.com", true,
@@ -195,7 +192,7 @@
       // Invalid characters that should be auto-encoded.
       {"http://www.example.com/{search}?q=%s", true,
        "http://www.example.com/%7Bsearch%7D?q={searchTerms}"},
-  };
+  });
 
   std::string search_engine_url;
   for (size_t i = 0; i < std::size(test_cases); ++i) {
diff --git a/chrome/utility/importer/bookmarks_file_importer_unittest.cc b/chrome/utility/importer/bookmarks_file_importer_unittest.cc
index dbd4a88..eb513a4d 100644
--- a/chrome/utility/importer/bookmarks_file_importer_unittest.cc
+++ b/chrome/utility/importer/bookmarks_file_importer_unittest.cc
@@ -2,15 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "chrome/utility/importer/bookmarks_file_importer.h"
 
 #include <stddef.h>
 
+#include <array>
+
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
@@ -24,23 +21,24 @@
   struct TestCase {
     const std::string url;
     const bool can_be_imported;
-  } test_cases[] = {
-    { "http://www.example.com", true },
-    { "https://www.example.com", true },
-    { "ftp://www.example.com", true },
-    { "aim:GoIm?screenname=myscreenname&message=hello", true },
-    { "chrome://version", true },
-    { "chrome://chrome-urls", true },
-    { "chrome://kill", true },
-    { "chrome://about", true },
-    { "about:version", true },
-    { "about:blank", true },
-    { "about:credits", true },
-    { "wyciwyg://example.com", false },
-    { "place://google.com", false },
-    { "about:config", false },
-    { "about:moon", false },
   };
+  auto test_cases = std::to_array<TestCase>({
+      {"http://www.example.com", true},
+      {"https://www.example.com", true},
+      {"ftp://www.example.com", true},
+      {"aim:GoIm?screenname=myscreenname&message=hello", true},
+      {"chrome://version", true},
+      {"chrome://chrome-urls", true},
+      {"chrome://kill", true},
+      {"chrome://about", true},
+      {"about:version", true},
+      {"about:blank", true},
+      {"about:credits", true},
+      {"wyciwyg://example.com", false},
+      {"place://google.com", false},
+      {"about:config", false},
+      {"about:moon", false},
+  });
 
   for (size_t i = 0; i < std::size(test_cases); ++i) {
     EXPECT_EQ(test_cases[i].can_be_imported,
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index f47192e..9c6181e 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -871,7 +871,7 @@
 <translation id="5212593641110061691">Tabloid</translation>
 <translation id="5220549459260334974"><ph name="PROGRESS_PERCENTAGE" /> % heruntergeladen</translation>
 <translation id="5222676887888702881">Abmelden</translation>
-<translation id="522307662484862935">E-Mail-Adresse nicht einfügen</translation>
+<translation id="522307662484862935">Anonym senden</translation>
 <translation id="5223226274641517059">Während der Aufnahme wird ein automatisches Transkript angezeigt. Du kannst diese Funktion jederzeit wieder in den Einstellungen deaktivieren.</translation>
 <translation id="5226879510707344687">Transkript exportieren</translation>
 <translation id="5227902338748591677">Zeitplan für dunkles Design</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 8ca8228..b7f99280 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -505,7 +505,7 @@
 <translation id="345898999683440380"><ph name="PAGE_NUM" />페이지를 스캔 중입니다. <ph name="PERCENTAGE_VALUE" />% 완료되었습니다.</translation>
 <translation id="3459509316159669723">인쇄</translation>
 <translation id="3462187165860821523"><ph name="DEVICE_NAME" /> 업데이트 중</translation>
-<translation id="346423161771747987">현재</translation>
+<translation id="346423161771747987">전류</translation>
 <translation id="346539236881580388">다시 촬영</translation>
 <translation id="3484914941826596830">펌웨어 업데이트 도중에 외부 기기를 분리하거나 컴퓨터를 종료하지 마세요. 이 창을 최소화할 수 있습니다. 업데이트되는 데 몇 분 정도 걸릴 수 있으며 이 시간 동안 외부 기기가 작동하지 않을 수도 있습니다.</translation>
 <translation id="3486220673238053218">정의</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index 4b7a63ba..73fca16 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -483,6 +483,7 @@
 <translation id="3340011300870565703">Uređaj ima <ph name="BATTERY_PERCENTAGE" />% baterije desne slušalice.</translation>
 <translation id="3340978935015468852">podešavanja</translation>
 <translation id="3347558044552027859">moderni</translation>
+<translation id="3353477144743332882">Preuzmite model za pravljenje rezimea i naziva</translation>
 <translation id="3359218928534347896">isključite zvuk mikrofona</translation>
 <translation id="3360306038446926262">Windows</translation>
 <translation id="3361618936611118375">suši</translation>
@@ -998,6 +999,7 @@
 <translation id="5859969039821714932">Prečica nije dostupna. Pritisnite novu prečicu bez tastera <ph name="KEY" />.</translation>
 <translation id="5860033963881614850">Isključeno</translation>
 <translation id="5860491529813859533">Uključi</translation>
+<translation id="5875913454160982848">Preuzmite model transkripcije</translation>
 <translation id="5876385649737594562">Uključite da biste izabrali opcije</translation>
 <translation id="5877503382465267833">Pauzirajte snimak <ph name="RECORDING_NAME" /></translation>
 <translation id="588258955323874662">Ceo ekran</translation>
@@ -1588,6 +1590,7 @@
 <translation id="8503836310948963452">Još samo par minuta…</translation>
 <translation id="8505011850330200833">Gemini model zahteva 2 GB memorijskog prostora za obradu transkripata i pravljenje rezimea</translation>
 <translation id="8508640263392900755">Detalji naziva pristupne tačke</translation>
+<translation id="8509574872955173831">Saznajte više o pravljenju rezimea i naziva</translation>
 <translation id="8522687886059337719">Sada imate pristup novim <ph name="BEGIN_LINK_WALLPAPER_SUBPAGE" />pozadinama<ph name="END_LINK_WALLPAPER_SUBPAGE" /> i <ph name="BEGIN_LINK_SCREENSAVER_SUBPAGE" />čuvaru ekrana<ph name="END_LINK_SCREENSAVER_SUBPAGE" /></translation>
 <translation id="8528615187455571738">Crosvm</translation>
 <translation id="852896705346853285">čajdžinica</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index cf6d346..f255199 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -483,6 +483,7 @@
 <translation id="3340011300870565703">Уређај има <ph name="BATTERY_PERCENTAGE" />% батерије десне слушалице.</translation>
 <translation id="3340978935015468852">подешавања</translation>
 <translation id="3347558044552027859">модерни</translation>
+<translation id="3353477144743332882">Преузмите модел за прављење резимеа и назива</translation>
 <translation id="3359218928534347896">искључите звук микрофона</translation>
 <translation id="3360306038446926262">Windows</translation>
 <translation id="3361618936611118375">суши</translation>
@@ -998,6 +999,7 @@
 <translation id="5859969039821714932">Пречица није доступна. Притисните нову пречицу без тастера <ph name="KEY" />.</translation>
 <translation id="5860033963881614850">Искључено</translation>
 <translation id="5860491529813859533">Укључи</translation>
+<translation id="5875913454160982848">Преузмите модел транскрипције</translation>
 <translation id="5876385649737594562">Укључите да бисте изабрали опције</translation>
 <translation id="5877503382465267833">Паузирајте снимак <ph name="RECORDING_NAME" /></translation>
 <translation id="588258955323874662">Цеo екран</translation>
@@ -1588,6 +1590,7 @@
 <translation id="8503836310948963452">Још само пар минута…</translation>
 <translation id="8505011850330200833">Gemini модел захтева 2 GB меморијског простора за обраду транскрипата и прављење резимеа</translation>
 <translation id="8508640263392900755">Детаљи назива приступне тачке</translation>
+<translation id="8509574872955173831">Сазнајте више о прављењу резимеа и назива</translation>
 <translation id="8522687886059337719">Сада имате приступ новим <ph name="BEGIN_LINK_WALLPAPER_SUBPAGE" />позадинама<ph name="END_LINK_WALLPAPER_SUBPAGE" /> и <ph name="BEGIN_LINK_SCREENSAVER_SUBPAGE" />чувару екрана<ph name="END_LINK_SCREENSAVER_SUBPAGE" /></translation>
 <translation id="8528615187455571738">Crosvm</translation>
 <translation id="852896705346853285">чајџиница</translation>
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni
index 0f34a235..7828ff2 100644
--- a/chromeos/tast_control.gni
+++ b/chromeos/tast_control.gni
@@ -92,6 +92,10 @@
   "crostini.AppFirefoxWindowOperations.minimize_bookworm_clamshell_stable@volteer",
   "crostini.AppFirefoxWindowOperations.switch_tablet_bookworm_clamshell_stable@volteer",
 
+  # b/383280237
+  "audio.CrasNoiseCancellation.aec",
+  "audio.CrasNoiseCancellation.no_effects",
+
   # READ COMMENT AT TOP BEFORE ADDING NEW TESTS HERE.
 ]
 
diff --git a/clank b/clank
index 45162224..9845416 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit 451622249a47bb5cc21f0683d39c32fb9f8681c1
+Subproject commit 9845416593e4a1738ba740d873a92ebb9b8e0198
diff --git a/components/autofill/core/browser/autofill_plus_address_delegate.h b/components/autofill/core/browser/autofill_plus_address_delegate.h
index a3a68d36..934780c1 100644
--- a/components/autofill/core/browser/autofill_plus_address_delegate.h
+++ b/components/autofill/core/browser/autofill_plus_address_delegate.h
@@ -68,6 +68,9 @@
   virtual bool IsPlusAddress(
       const std::string& potential_plus_address) const = 0;
 
+  // Checks whether `value` matches the the plus address string format.
+  virtual bool MatchesPlusAddressFormat(const std::u16string& value) const = 0;
+
   // Returns whether plus address filling is supported for the given `origin`.
   // This is true iff:
   // - the `PlusAddressService` is enabled and
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index d2d86ca..fb34669 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -592,12 +592,15 @@
       // saved.
       fields_for_autocomplete.back().set_should_autocomplete(false);
     }
+    const std::u16string& value = autofill_field->value_for_import();
     if (plus_address_delegate &&
-        plus_address_delegate->IsPlusAddress(
-            base::UTF16ToUTF8(autofill_field->value_for_import()))) {
+        (plus_address_delegate->IsPlusAddress(base::UTF16ToUTF8(value)) ||
+         plus_address_delegate->MatchesPlusAddressFormat(value))) {
       // Similarly to CVC, any plus addresses needn't be saved to autocomplete.
       // Note that the feature is experimental, and `plus_address_delegate`
       // will be null if the feature is not enabled (it's disabled by default).
+      // If the plus address format happens to change or gets extended, we still
+      // keep filtering existing plus addresses.
       fields_for_autocomplete.back().set_should_autocomplete(false);
     }
   }
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
index 7841a64..2bafdbc0 100644
--- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -7799,7 +7799,7 @@
 // Test that plus address inputs are forced to !should_autocomplete
 // for `SingleFieldFillRouter::OnWillSubmitForm()`.
 TEST_F(BrowserAutofillManagerPlusAddressTest,
-       DontSavePlusAddressInAutocompleteHistory) {
+       DontSaveActivePlusAddressInAutocompleteHistory) {
   const std::string kDummyPlusAddress = "plus+plus@plus.plus";
   ON_CALL(plus_address_delegate(), IsPlusAddress)
       .WillByDefault([&](const std::string& address) {
@@ -7828,6 +7828,41 @@
   EXPECT_TRUE(form_seen_by_autocomplete.fields()[1].should_autocomplete());
 }
 
+// Test that inputs matching the plus address format are forced to
+// !should_autocomplete for `SingleFieldFillRouter::OnWillSubmitForm()`.
+TEST_F(BrowserAutofillManagerPlusAddressTest,
+       DontSaveMatchedPlusAddressInAutocompleteHistory) {
+  const std::u16string kInvalidPlusAddressFormat = u"plus+plus@plus.plus";
+  const std::u16string kValidPlusAddressFormat = u"plus+plus@grelay.com";
+  ON_CALL(plus_address_delegate(), IsPlusAddress).WillByDefault(Return(false));
+  ON_CALL(plus_address_delegate(), MatchesPlusAddressFormat)
+      .WillByDefault([&](const std::u16string& address) {
+        return address.ends_with(u"@grelay.com");
+      });
+  FormData form_seen_by_autocomplete;
+  EXPECT_CALL(single_field_fill_router(),
+              OnWillSubmitForm(_, _, /*is_autocomplete_enabled=*/true))
+      .WillOnce(SaveArg<0>(&form_seen_by_autocomplete));
+
+  FormData form = test::GetFormData(
+      {.fields = {{.role = EMAIL_ADDRESS, .name = u"email"},
+                  {.role = EMAIL_ADDRESS, .name = u"unfilled-email"}}});
+
+  // First, note the field with the empty value.
+  FormsSeen({form});
+
+  test_api(form).field(0).set_value(kInvalidPlusAddressFormat);
+  test_api(form).field(1).set_value(kValidPlusAddressFormat);
+
+  // Submit the form, capturing it as it is passed to the autocomplete history
+  // manager. The first field should not be autocomplete eligible.
+  FormSubmitted(form);
+
+  EXPECT_EQ(form.fields().size(), form_seen_by_autocomplete.fields().size());
+  EXPECT_TRUE(form_seen_by_autocomplete.fields()[0].should_autocomplete());
+  EXPECT_FALSE(form_seen_by_autocomplete.fields()[1].should_autocomplete());
+}
+
 // Test that plus address inputs are forced to !should_autocomplete
 // for `SingleFieldFillRouter::OnWillSubmitForm()`.
 TEST_F(BrowserAutofillManagerPlusAddressTest,
diff --git a/components/autofill/core/browser/data_model/autofill_profile.cc b/components/autofill/core/browser/data_model/autofill_profile.cc
index d4828b1..ad7959fb 100644
--- a/components/autofill/core/browser/data_model/autofill_profile.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile.cc
@@ -840,21 +840,19 @@
 }
 
 // static
-void AutofillProfile::CreateDifferentiatingLabels(
+std::vector<std::u16string> AutofillProfile::CreateDifferentiatingLabels(
     const std::vector<raw_ptr<const AutofillProfile, VectorExperimental>>&
         profiles,
-    const std::string& app_locale,
-    std::vector<std::u16string>* labels) {
+    const std::string& app_locale) {
   const size_t kMinimalFieldsShown = 2;
-  CreateInferredLabels(profiles, /*suggested_fields=*/std::nullopt,
-                       /*triggering_field_type=*/std::nullopt,
-                       /*excluded_fields=*/{}, kMinimalFieldsShown, app_locale,
-                       labels);
-  DCHECK_EQ(profiles.size(), labels->size());
+  return CreateInferredLabels(profiles, /*suggested_fields=*/std::nullopt,
+                              /*triggering_field_type=*/std::nullopt,
+                              /*excluded_fields=*/{}, kMinimalFieldsShown,
+                              app_locale);
 }
 
 // static
-void AutofillProfile::CreateInferredLabels(
+std::vector<std::u16string> AutofillProfile::CreateInferredLabels(
     const std::vector<raw_ptr<const AutofillProfile, VectorExperimental>>&
         profiles,
     const std::optional<FieldTypeSet> suggested_fields,
@@ -862,7 +860,6 @@
     FieldTypeSet excluded_fields,
     size_t minimal_fields_shown,
     const std::string& app_locale,
-    std::vector<std::u16string>* labels,
     bool use_improved_labels_order) {
   // TODO(crbug.com/380273791): Clean up after launch.
   CHECK(!triggering_field_type ||
@@ -898,13 +895,14 @@
     labels_to_profiles[{main_text, label}].push_back(i);
   }
 
-  labels->resize(profiles.size());
+  std::vector<std::u16string> labels;
+  labels.resize(profiles.size());
   for (auto& it : labels_to_profiles) {
     if (it.second.size() == 1) {
       // This label is unique, so use it without any further ado.
       std::u16string label = it.first.second;
       size_t profile_index = it.second.front();
-      (*labels)[profile_index] = label;
+      labels[profile_index] = label;
     } else {
       // We have more than one profile with the same label, so add
       // differentiating fields.
@@ -912,6 +910,7 @@
                                  minimal_fields_shown, app_locale, labels);
     }
   }
+  return labels;
 }
 
 std::u16string AutofillProfile::ConstructInferredLabel(
@@ -1057,7 +1056,7 @@
     const std::vector<FieldType>& field_types,
     size_t num_fields_to_include,
     const std::string& app_locale,
-    std::vector<std::u16string>* labels) {
+    std::vector<std::u16string>& labels) {
   // For efficiency, we first construct a map of fields to their text values and
   // each value's frequency.
   std::map<FieldType, std::map<std::u16string, size_t>>
@@ -1118,7 +1117,7 @@
         break;
     }
 
-    (*labels)[it] = profile->ConstructInferredLabel(
+    labels[it] = profile->ConstructInferredLabel(
         label_fields, label_fields.size(), app_locale);
   }
 }
diff --git a/components/autofill/core/browser/data_model/autofill_profile.h b/components/autofill/core/browser/data_model/autofill_profile.h
index 2b0a41bb..664b423 100644
--- a/components/autofill/core/browser/data_model/autofill_profile.h
+++ b/components/autofill/core/browser/data_model/autofill_profile.h
@@ -213,11 +213,10 @@
   // 3. E-mail.
   // 4. Phone.
   // 5. Company name.
-  static void CreateDifferentiatingLabels(
+  static std::vector<std::u16string> CreateDifferentiatingLabels(
       const std::vector<raw_ptr<const AutofillProfile, VectorExperimental>>&
           profiles,
-      const std::string& app_locale,
-      std::vector<std::u16string>* labels);
+      const std::string& app_locale);
 
   // Creates inferred labels for `profiles`, according to the rules above and
   // stores them in `labels`. The inferred labels both provide a way to
@@ -236,7 +235,7 @@
   // `minimal_fields_shown` fields, if possible.
   // TODO(crbug.com/380273791): Possibly make `suggested_fields` non-optional
   // after launch.
-  static void CreateInferredLabels(
+  static std::vector<std::u16string> CreateInferredLabels(
       const std::vector<raw_ptr<const AutofillProfile, VectorExperimental>>&
           profiles,
       const std::optional<FieldTypeSet> suggested_fields,
@@ -244,7 +243,6 @@
       FieldTypeSet excluded_fields,
       size_t minimal_fields_shown,
       const std::string& app_locale,
-      std::vector<std::u16string>* labels,
       bool use_improved_labels_order = false);
 
   // Builds inferred label from the first |num_fields_to_include| non-empty
@@ -368,7 +366,7 @@
       const std::vector<FieldType>& field_types,
       size_t num_fields_to_include,
       const std::string& app_locale,
-      std::vector<std::u16string>* labels);
+      std::vector<std::u16string>& labels);
 
   // Utilities for listing and lookup of the data members that constitute
   // user-visible profile information.
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
index 7cc3dd1..5bcdd2a9 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/i18n/char_iterator.h"
+#include "base/i18n/unicodestring.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversion_utils.h"
@@ -27,6 +28,8 @@
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/autofill_l10n_util.h"
+#include "third_party/icu/source/common/unicode/ustring.h"
+#include "third_party/icu/source/i18n/unicode/translit.h"
 #include "third_party/libphonenumber/phonenumber_api.h"
 
 using i18n::phonenumbers::PhoneNumberUtil;
@@ -187,6 +190,31 @@
   return iter_.get();
 }
 
+// This function changes all Katakana characters occurring in the
+// `alternative_full_name` to Hiragana using the ICU library. Characters other
+// than Katakana will remain unchanged.
+std::u16string NormalizeAlternativeNameForComparison(
+    const std::u16string& alternative_full_name) {
+  if (alternative_full_name.empty()) {
+    return alternative_full_name;
+  }
+
+  UErrorCode err = U_ZERO_ERROR;
+  std::unique_ptr<icu::Transliterator> transliterator(
+      icu::Transliterator::createInstance("Katakana-Hiragana", UTRANS_FORWARD,
+                                          err));
+  if (U_FAILURE(err)) {
+    // TODO(crbug.com/383668248): Record transliteration failure metric.
+    LOG(ERROR) << "Error creating transliterator: " << u_errorName(err);
+    return alternative_full_name;
+  }
+  icu::UnicodeString normalized_alternative_full_name(
+      alternative_full_name.c_str());
+  // Change Katakana to equivalent Hiragana characters.
+  transliterator->transliterate(normalized_alternative_full_name);
+  return base::i18n::UnicodeStringToString16(normalized_alternative_full_name);
+}
+
 }  // namespace
 
 AutofillProfileComparator::AutofillProfileComparator(
@@ -799,8 +827,10 @@
     return true;
   }
 
-  return AreNamesMergeable(p1.GetInfo(ALTERNATIVE_FULL_NAME, app_locale_),
-                           p2.GetInfo(ALTERNATIVE_FULL_NAME, app_locale_));
+  return AreNamesMergeable(NormalizeAlternativeNameForComparison(
+                               p1.GetInfo(ALTERNATIVE_FULL_NAME, app_locale_)),
+                           NormalizeAlternativeNameForComparison(
+                               p2.GetInfo(ALTERNATIVE_FULL_NAME, app_locale_)));
 }
 
 bool AutofillProfileComparator::HaveMergeableEmailAddresses(
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
index e8302cb..654f2e1 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
@@ -41,6 +41,7 @@
     using Super::CompareTokens;
     using Super::GetNamePartVariants;
     using Super::HaveMergeableAddresses;
+    using Super::HaveMergeableAlternativeNames;
     using Super::HaveMergeableCompanyNames;
     using Super::HaveMergeableEmailAddresses;
     using Super::HaveMergeableNames;
@@ -548,6 +549,126 @@
   EXPECT_FALSE(comparator_.HaveMergeableNames(different, initials));
 }
 
+TEST_F(AutofillProfileComparatorTest, HaveMergeableAlternativeNames) {
+  base::test::ScopedFeatureList scoped_feature_list{
+      features::kAutofillSupportPhoneticNameForJP};
+
+  AutofillProfile empty = CreateProfileWithName("", "", "");
+
+  // Latin characters only.
+  AutofillProfile p1 = CreateProfileWithName(CreateNameInfo(
+      u"John", u"", u"Smith", u"John Smith", u"Pjohn", u"Psmith", u""));
+  AutofillProfile p1_mergeable = CreateProfileWithName(CreateNameInfo(
+      u"John", u"", u"Smith", u"John Smith", u"", u"", u"Pjohn Psmith"));
+
+  // Phonetic name using Hiragana.
+  AutofillProfile p2 = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", u""));
+  // The same phonetic name, but saved as alternative_full_name with separator.
+  AutofillProfile p3 = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"", u"", u"やまもと・あおい"));
+  // The same phonetic name, but saved as alternative_full_name with white space
+  // separator.
+  AutofillProfile p4 = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"", u"", u"やまもと あおい"));
+
+  // Semantically the same profiles as `p2`, `p3`, `p4`, but using Katakana for
+  // alternative name.
+  AutofillProfile p2_katakana = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"アオイ", u"ヤマモト", u""));
+  AutofillProfile p3_katakana = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"", u"", u"ヤマモト・アオイ"));
+  AutofillProfile p4_katakana = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"", u"", u"ヤマモト アオイ"));
+
+  // Semantically the different profiles than `p2`, `p3`, `p4`, using Katakana
+  // for alternative name.
+  AutofillProfile p5_katakana = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"レイ", u"サクラ", u""));
+  AutofillProfile p6_katakana = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"", u"", u"サクラ・レイ"));
+  AutofillProfile p7_katakana = CreateProfileWithName(CreateNameInfo(
+      u"葵", u"", u"山本", u"山本・葵", u"", u"", u"サクラ レイ"));
+
+  // Base cases for latin characters.
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p1, empty));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p1, p1));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(empty, p1));
+
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p1, p1_mergeable));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p1_mergeable, p1));
+
+  // CJK characters with empty profile.
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, empty));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3, empty));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2_katakana, empty));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3_katakana, empty));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(empty, p2));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(empty, p3));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(empty, p2_katakana));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(empty, p3_katakana));
+
+  // Mergeable profiles using Hiragana.
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, p2));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3, p3));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p4, p4));
+
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, p3));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3, p2));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, p4));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p4, p2));
+
+  // Mergeable profiles using Katakana.
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p2_katakana, p2_katakana));
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p2_katakana, p3_katakana));
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p4_katakana, p4_katakana));
+
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p2_katakana, p3_katakana));
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p3_katakana, p2_katakana));
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p2_katakana, p4_katakana));
+  EXPECT_TRUE(
+      comparator_.HaveMergeableAlternativeNames(p4_katakana, p2_katakana));
+
+  // Mergeable profiles where one is using Katakana and the other Hiragana.
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, p3_katakana));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3_katakana, p2));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2_katakana, p3));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3, p2_katakana));
+
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, p4_katakana));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p4_katakana, p2));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2_katakana, p4));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p4, p2_katakana));
+
+  // Semantically the same profiles one using Katakana the other Hiragana.
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2, p2_katakana));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p2_katakana, p2));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3_katakana, p3));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p3, p3_katakana));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p4_katakana, p4));
+  EXPECT_TRUE(comparator_.HaveMergeableAlternativeNames(p4, p4_katakana));
+
+  // Non mergeable profiles where one is using Katakana and the other Hiragana.
+  EXPECT_FALSE(comparator_.HaveMergeableAlternativeNames(p2, p6_katakana));
+  EXPECT_FALSE(comparator_.HaveMergeableAlternativeNames(p6_katakana, p2));
+  EXPECT_FALSE(comparator_.HaveMergeableAlternativeNames(p2, p7_katakana));
+  EXPECT_FALSE(comparator_.HaveMergeableAlternativeNames(p7_katakana, p2));
+  EXPECT_FALSE(comparator_.HaveMergeableAlternativeNames(p7_katakana, p4));
+  EXPECT_FALSE(comparator_.HaveMergeableAlternativeNames(p4, p7_katakana));
+
+  // Non mergeable profiles where both are using Katakana.
+  EXPECT_FALSE(
+      comparator_.HaveMergeableAlternativeNames(p2_katakana, p5_katakana));
+  EXPECT_FALSE(
+      comparator_.HaveMergeableAlternativeNames(p5_katakana, p2_katakana));
+}
+
 TEST_F(AutofillProfileComparatorTest, HaveMergeableEmailAddresses) {
   AutofillProfile empty = CreateProfileWithEmail("");
   AutofillProfile p1 = CreateProfileWithEmail("FOO@BAR.COM");
diff --git a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
index 28eaf3ca..029ac07 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
@@ -45,9 +45,7 @@
 std::u16string GetSuggestionLabel(AutofillProfile* profile) {
   std::vector<raw_ptr<const AutofillProfile, VectorExperimental>> profiles;
   profiles.push_back(profile);
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateDifferentiatingLabels(profiles, "en-US", &labels);
-  return labels[0];
+  return AutofillProfile::CreateDifferentiatingLabels(profiles, "en-US")[0];
 }
 
 void SetupTestProfile(AutofillProfile& profile) {
@@ -173,8 +171,8 @@
   std::vector<raw_ptr<const AutofillProfile, VectorExperimental>> profiles;
   profiles.push_back(&profile7);
   profiles.push_back(&profile7a);
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateDifferentiatingLabels(profiles, "en-US", &labels);
+  std::vector<std::u16string> labels =
+      AutofillProfile::CreateDifferentiatingLabels(profiles, "en-US");
   ASSERT_EQ(profiles.size(), labels.size());
   summary7 = labels[0];
   std::u16string summary7a = labels[1];
@@ -195,9 +193,9 @@
   test::SetProfileInfo(profiles[1].get(), "Jane", "", "Doe",
                        "janedoe@tertium.com", "Pluto Inc.", "123 Letha Shore.",
                        "", "Dis", "CA", "91222", "US", "12345678910");
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateDifferentiatingLabels(ToRawPointerVector(profiles),
-                                               "en-US", &labels);
+  std::vector<std::u16string> labels =
+      AutofillProfile::CreateDifferentiatingLabels(ToRawPointerVector(profiles),
+                                                   "en-US");
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"John Doe, 666 Erebus St.", labels[0]);
   EXPECT_EQ(u"Jane Doe, 123 Letha Shore.", labels[1]);
@@ -207,9 +205,8 @@
   test::SetProfileInfo(profiles[2].get(), "John", "", "Doe",
                        "johndoe@tertium.com", "Underworld", "666 Erebus St.",
                        "", "Elysium", "CA", "91111", "US", "16502111111");
-  labels.clear();
-  AutofillProfile::CreateDifferentiatingLabels(ToRawPointerVector(profiles),
-                                               "en-US", &labels);
+  labels = AutofillProfile::CreateDifferentiatingLabels(
+      ToRawPointerVector(profiles), "en-US");
 
   // Profile 0 and 2 inferred label now includes an e-mail.
   ASSERT_EQ(3U, labels.size());
@@ -226,9 +223,8 @@
                        "Elysium", "CO",  // State is different
                        "91111", "US", "16502111111");
 
-  labels.clear();
-  AutofillProfile::CreateDifferentiatingLabels(ToRawPointerVector(profiles),
-                                               "en-US", &labels);
+  labels = AutofillProfile::CreateDifferentiatingLabels(
+      ToRawPointerVector(profiles), "en-US");
 
   // Profile 0 and 2 inferred label now includes a state.
   ASSERT_EQ(3U, labels.size());
@@ -244,9 +240,8 @@
                        "91111", "US",
                        "16504444444");  // Phone is different for some.
 
-  labels.clear();
-  AutofillProfile::CreateDifferentiatingLabels(ToRawPointerVector(profiles),
-                                               "en-US", &labels);
+  labels = AutofillProfile::CreateDifferentiatingLabels(
+      ToRawPointerVector(profiles), "en-US");
   ASSERT_EQ(4U, labels.size());
   EXPECT_EQ(u"John Doe, 666 Erebus St., CA", labels[0]);
   EXPECT_EQ(u"Jane Doe, 123 Letha Shore.", labels[1]);
@@ -264,9 +259,8 @@
                        "91111", "US",
                        "16504444444");  // Phone is different for some.
 
-  labels.clear();
-  AutofillProfile::CreateDifferentiatingLabels(ToRawPointerVector(profiles),
-                                               "en-US", &labels);
+  labels = AutofillProfile::CreateDifferentiatingLabels(
+      ToRawPointerVector(profiles), "en-US");
   ASSERT_EQ(5U, labels.size());
   EXPECT_EQ(u"John Doe, 666 Erebus St., CA", labels[0]);
   EXPECT_EQ(u"Jane Doe, 123 Letha Shore.", labels[1]);
@@ -300,13 +294,12 @@
        u"Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
        u"Switzerland, hrgiger@beispiel.com, +41 44-668-1800"});
 
-  std::vector<std::u16string> labels;
   for (size_t i = 0; i < kExpectedLabels.size(); ++i) {
-    AutofillProfile::CreateInferredLabels(
+    std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
         ToRawPointerVector(profiles),
         /*suggested_fields=*/std::nullopt,
         /*triggering_field_type=*/std::nullopt, /*excluded_fields=*/{},
-        /*minimal_fields_shown=*/i, "en-US", &labels);
+        /*minimal_fields_shown=*/i, "en-US");
     ASSERT_FALSE(labels.empty());
     EXPECT_EQ(kExpectedLabels[i], labels.back());
   }
@@ -335,13 +328,12 @@
        u"Exemple Inc, Antoine de Saint-Exupéry, 8 Rue de Londres, 75009 Paris, "
        u"France, antoine@exemple.com, +33 (0) 1 42 68 53 00"});
 
-  std::vector<std::u16string> labels;
   for (size_t i = 0; i < kExpectedLabels.size(); ++i) {
-    AutofillProfile::CreateInferredLabels(
+    std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
         ToRawPointerVector(profiles),
         /*suggested_fields=*/std::nullopt,
         /*triggering_field_type=*/std::nullopt, /*excluded_fields=*/{},
-        /*minimal_fields_shown=*/i, "en-US", &labels);
+        /*minimal_fields_shown=*/i, "en-US");
     ASSERT_FALSE(labels.empty());
     EXPECT_EQ(kExpectedLabels[i], labels.back());
   }
@@ -379,13 +371,12 @@
        u"Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea, "
        u"park@yeleul.com, +82-2-531-9000"});
 
-  std::vector<std::u16string> labels;
   for (size_t i = 0; i < kExpectedLabels.size(); ++i) {
-    AutofillProfile::CreateInferredLabels(
+    std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
         ToRawPointerVector(profiles),
         /*suggested_fields=*/std::nullopt,
         /*triggering_field_type=*/std::nullopt, /*excluded_fields=*/{},
-        /*minimal_fields_shown=*/i, "en-US", &labels);
+        /*minimal_fields_shown=*/i, "en-US");
     ASSERT_FALSE(labels.empty());
     EXPECT_EQ(kExpectedLabels[i], labels.back());
   }
@@ -416,13 +407,12 @@
        u"Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
        u"Minato-ku, Tokyo, 106-6126, Japan, miku@rei.com, +81-3-6384-9000"});
 
-  std::vector<std::u16string> labels;
   for (size_t i = 0; i < kExpectedLabels.size(); ++i) {
-    AutofillProfile::CreateInferredLabels(
+    std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
         ToRawPointerVector(profiles),
         /*suggested_fields=*/std::nullopt,
         /*triggering_field_type=*/std::nullopt, /*excluded_fields=*/{},
-        /*minimal_fields_shown=*/i, "en-US", &labels);
+        /*minimal_fields_shown=*/i, "en-US");
     ASSERT_FALSE(labels.empty());
     EXPECT_EQ(kExpectedLabels[i], labels.back());
   }
@@ -452,13 +442,12 @@
        u"Japan, "
        u"miku@rei.com, 03-6384-9000"});
 
-  std::vector<std::u16string> labels;
   for (size_t i = 0; i < kExpectedLabels.size(); ++i) {
-    AutofillProfile::CreateInferredLabels(
+    std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
         ToRawPointerVector(profiles),
         /*suggested_fields=*/std::nullopt,
         /*triggering_field_type=*/std::nullopt, /*excluded_fields=*/{},
-        /*minimal_fields_shown=*/i, "en-US", &labels);
+        /*minimal_fields_shown=*/i, "en-US");
     ASSERT_FALSE(labels.empty());
     EXPECT_EQ(kExpectedLabels[i], labels.back());
   }
@@ -476,22 +465,21 @@
   test::SetProfileInfo(profiles[1].get(), "Jane", "", "Doe",
                        "janedoe@tertium.com", "Pluto Inc.", "123 Letha Shore.",
                        "", "Dis", "CA", "91222", "US", "12345678910");
-  std::vector<std::u16string> labels;
   // Two fields at least - no filter.
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles),
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/2, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/2, "en-US");
   EXPECT_EQ(u"John Doe, 666 Erebus St.", labels[0]);
   EXPECT_EQ(u"Jane Doe, 123 Letha Shore.", labels[1]);
 
   // Three fields at least - no filter.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles),
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/3, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/3, "en-US");
   EXPECT_EQ(u"John Doe, 666 Erebus St., Elysium", labels[0]);
   EXPECT_EQ(u"Jane Doe, 123 Letha Shore., Dis", labels[1]);
 
@@ -499,75 +487,75 @@
                                    ADDRESS_HOME_ZIP};
 
   // Two fields at least, from suggested fields - no filter.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/2, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/2, "en-US");
   EXPECT_EQ(u"Elysium 91111", labels[0]);
   EXPECT_EQ(u"Dis 91222", labels[1]);
 
   // Three fields at least, from suggested fields - no filter.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, /*excluded_fields=*/{},
-      /*minimal_fields_shown=*/3, "en-US", &labels);
+      /*minimal_fields_shown=*/3, "en-US");
   EXPECT_EQ(u"Elysium, CA 91111", labels[0]);
   EXPECT_EQ(u"Dis, CA 91222", labels[1]);
 
   // Three fields at least, from suggested fields - but filter reduces available
   // fields to two.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, {ADDRESS_HOME_ZIP},
-      /*minimal_fields_shown=*/3, "en-US", &labels);
+      /*minimal_fields_shown=*/3, "en-US");
   EXPECT_EQ(u"Elysium, CA", labels[0]);
   EXPECT_EQ(u"Dis, CA", labels[1]);
 
   // In our implementation we always display NAME_FULL for all NAME* fields...
   suggested_fields = {NAME_MIDDLE};
   // One field at least, from suggested fields - no filter.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, /*excluded_fields*/ {},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   EXPECT_EQ(u"John Doe", labels[0]);
   EXPECT_EQ(u"Jane Doe", labels[1]);
 
   // One field at least, from suggested fields - filter the same as suggested
   // field.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, {NAME_MIDDLE},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   EXPECT_EQ(std::u16string(), labels[0]);
   EXPECT_EQ(std::u16string(), labels[1]);
 
   // In our implementation we always display NAME_FULL for NAME_MIDDLE_INITIAL
   suggested_fields = {NAME_MIDDLE};
   // One field at least, from suggested fields - no filter.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, /*excluded_fields*/ {},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   EXPECT_EQ(u"John Doe", labels[0]);
   EXPECT_EQ(u"Jane Doe", labels[1]);
 
   // One field at least, from suggested fields - filter same as the first non-
   // unknown suggested field.
   suggested_fields = {UNKNOWN_TYPE, NAME_FULL, ADDRESS_HOME_LINE1};
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, {NAME_FULL},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   EXPECT_EQ(std::u16string(u"666 Erebus St."), labels[0]);
   EXPECT_EQ(std::u16string(u"123 Letha Shore."), labels[1]);
 
   // No suggested fields, but non-unknown excluded field.
-  AutofillProfile::CreateInferredLabels(ToRawPointerVector(profiles),
-                                        /*suggested_fields=*/std::nullopt,
-                                        /*triggering_field_type=*/std::nullopt,
-                                        {NAME_FULL}, /*minimal_fields_shown=*/1,
-                                        "en-US", &labels);
+  labels = AutofillProfile::CreateInferredLabels(
+      ToRawPointerVector(profiles),
+      /*suggested_fields=*/std::nullopt,
+      /*triggering_field_type=*/std::nullopt, {NAME_FULL},
+      /*minimal_fields_shown=*/1, "en-US");
   EXPECT_EQ(std::u16string(u"666 Erebus St."), labels[0]);
   EXPECT_EQ(std::u16string(u"123 Letha Shore."), labels[1]);
 }
@@ -590,21 +578,20 @@
   // should not fall back to the full name as a distinguishing field.
   FieldTypeSet suggested_fields = {NAME_LAST, ADDRESS_HOME_LINE1,
                                    EMAIL_ADDRESS};
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, {NAME_LAST},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"88 Nowhere Ave.", labels[0]);
   EXPECT_EQ(u"88 Nowhere Ave.", labels[1]);
 
   // Otherwise, we should.
   suggested_fields.insert(NAME_FIRST);
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, {NAME_LAST},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"88 Nowhere Ave., John Doe", labels[0]);
   EXPECT_EQ(u"88 Nowhere Ave., Johnny K Doe", labels[1]);
@@ -621,25 +608,24 @@
   profile1.SetRawInfo(EMAIL_ADDRESS, u"hoa@gmail.com");
   profile2.SetRawInfo(EMAIL_ADDRESS, u"pham@gmail.com");
 
-  std::vector<std::u16string> labels;
   // First check that when `triggering_field_type` is not present, a second
   // differentiating label is added.
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       {&profile1, &profile2},
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US");
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"John H. Doe, hoa@gmail.com", labels[0]);
   EXPECT_EQ(u"John H. Doe, pham@gmail.com", labels[1]);
 
   // If the `triggering_field_type` is present and is unique, there is no need
   // for a second differentiating label.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       {&profile1, &profile2},
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/EMAIL_ADDRESS,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US", &labels,
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US",
       /*use_improved_labels_order=*/true);
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"John H. Doe", labels[0]);
@@ -647,11 +633,11 @@
 
   // If the `triggering_field_type` is present and is not unique, a second
   // differentiating label is added.
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       {&profile1, &profile2},
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/NAME_FIRST,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US", &labels,
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US",
       /*use_improved_labels_order=*/true);
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"John H. Doe, hoa@gmail.com", labels[0]);
@@ -673,11 +659,10 @@
   // If the only name field in the suggested fields is the excluded field, we
   // should not fall back to the full name as a distinguishing field.
   FieldTypeSet suggested_fields = {ADDRESS_HOME_LINE1, EMAIL_ADDRESS};
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/2, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/2, "en-US");
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"88 Nowhere Ave., doe@example.com", labels[0]);
   EXPECT_EQ(u"88 Nowhere Ave., dojo@example.com", labels[1]);
@@ -700,12 +685,11 @@
                        "john.doe@example.com", "Goolge", "", "", "", "", "", "",
                        "");
 
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles),
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/3, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/3, "en-US");
   ASSERT_EQ(3U, labels.size());
   EXPECT_EQ(u"John Doe, doe@example.com, Gogole", labels[0]);
   EXPECT_EQ(u"John Doe, doe@example.com, Ggoole", labels[1]);
@@ -714,11 +698,11 @@
   // A field must have a non-empty value for each profile to be considered a
   // distinguishing field.
   profiles[1]->SetRawInfo(ADDRESS_HOME_LINE1, u"88 Nowhere Ave.");
-  AutofillProfile::CreateInferredLabels(
+  labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles),
       /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/std::nullopt,
-      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*excluded_fields=*/{}, /*minimal_fields_shown=*/1, "en-US");
   ASSERT_EQ(3U, labels.size());
   EXPECT_EQ(u"John Doe, doe@example.com, Gogole", labels[0]);
   EXPECT_EQ(u"John Doe, 88 Nowhere Ave., doe@example.com, Ggoole", labels[1])
@@ -737,11 +721,10 @@
   // If the only name field in the suggested fields is the excluded field, we
   // should not fall back to the full name as a distinguishing field.
   FieldTypeSet suggested_fields = {NAME_FULL, ADDRESS_HOME_STREET_ADDRESS};
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), suggested_fields,
       /*triggering_field_type=*/std::nullopt, {NAME_FULL},
-      /*minimal_fields_shown=*/1, "en-US", &labels);
+      /*minimal_fields_shown=*/1, "en-US");
   ASSERT_EQ(1U, labels.size());
   EXPECT_EQ(u"88 Nowhere Ave., Apt. 42", labels[0]);
 }
@@ -760,11 +743,10 @@
   test::SetProfileInfo(profiles[1].get(), "John", "", "Doe", "", "",
                        "88 Nowhere Ave.", "Apt. 43", "", "", "", "", "");
 
-  std::vector<std::u16string> labels;
-  AutofillProfile::CreateInferredLabels(
+  std::vector<std::u16string> labels = AutofillProfile::CreateInferredLabels(
       ToRawPointerVector(profiles), /*suggested_fields=*/std::nullopt,
       /*triggering_field_type=*/NAME_FULL, {NAME_FULL},
-      /*minimal_fields_shown=*/1, "en-US", &labels,
+      /*minimal_fields_shown=*/1, "en-US",
       /*use_improved_labels_order=*/true);
   ASSERT_EQ(2U, labels.size());
   EXPECT_EQ(u"88 Nowhere Ave., Apt. 42", labels[0]);
diff --git a/components/autofill/core/browser/form_import/form_data_importer.cc b/components/autofill/core/browser/form_import/form_data_importer.cc
index b6761eb..853c08d 100644
--- a/components/autofill/core/browser/form_import/form_data_importer.cc
+++ b/components/autofill/core/browser/form_import/form_data_importer.cc
@@ -498,7 +498,8 @@
     // When the experimental plus addresses feature is enabled, and the value is
     // a plus address, exclude it from the resulting address profile.
     if (plus_address_delegate &&
-        plus_address_delegate->IsPlusAddress(base::UTF16ToUTF8(value))) {
+        (plus_address_delegate->IsPlusAddress(base::UTF16ToUTF8(value)) ||
+         plus_address_delegate->MatchesPlusAddressFormat(value))) {
       continue;
     }
     // Don't import from ac=unrecognized fields.
diff --git a/components/autofill/core/browser/form_import/form_data_importer_unittest.cc b/components/autofill/core/browser/form_import/form_data_importer_unittest.cc
index a32d84c2..433408f 100644
--- a/components/autofill/core/browser/form_import/form_data_importer_unittest.cc
+++ b/components/autofill/core/browser/form_import/form_data_importer_unittest.cc
@@ -922,7 +922,9 @@
                                              {profile_without_number});
 }
 
-TEST_F(FormDataImporterTest, PlusAddressesExcluded) {
+// Tests that active plus addresses are not part of the values captured during
+// form submissions.
+TEST_F(FormDataImporterTest, ActivePlusAddressesExcluded) {
   const std::string kDummyPlusAddress = "plus+plus@plus.plus";
 
   // Save `kDummyPlusAddress` into the `plus_address_service`, and configure the
@@ -951,6 +953,37 @@
                                              {expected_profile});
 }
 
+// Tests that strings matching the plus address format are not part of the
+// values captured during form submissions.
+TEST_F(FormDataImporterTest, MatchedPlusAddressesExcluded) {
+  const std::string kMatchedPlusAddress = "plus+plus@grelay.com";
+
+  // Save `kDummyPlusAddress` into the `plus_address_service`, and configure the
+  // `autofill_client_` to use it.
+  auto plus_address_delegate =
+      std::make_unique<NiceMock<MockAutofillPlusAddressDelegate>>();
+  ON_CALL(*plus_address_delegate, IsPlusAddress)
+      .WillByDefault([](const std::string& address) {
+        return address.ends_with("@grelay.com");
+      });
+  autofill_client_->set_plus_address_delegate(std::move(plus_address_delegate));
+
+  // Next, make a form with the `kDummyPlusAddress` filled in, which should be
+  // excluded from imports.
+  TypeValuePairs type_value_pairs = GetDefaultProfileTypeValuePairs();
+  SetValueForType(type_value_pairs, EMAIL_ADDRESS, kMatchedPlusAddress);
+  std::unique_ptr<FormStructure> form_structure =
+      ConstructFormStructureFromTypeValuePairs(type_value_pairs);
+
+  // Create a default profile, but remove the email address, since extraction
+  // should skip the known plus address.
+  AutofillProfile expected_profile = ConstructDefaultProfile();
+  expected_profile.ClearFields({EMAIL_ADDRESS});
+
+  ExtractAddressProfilesAndVerifyExpectation(*form_structure,
+                                             {expected_profile});
+}
+
 // ImportAddressProfiles tests.
 TEST_F(FormDataImporterTest, ImportStructuredNameProfile) {
   FormData form;
diff --git a/components/autofill/core/browser/form_parsing/internal_resources b/components/autofill/core/browser/form_parsing/internal_resources
index 09fb4c5..9efd7cc2 160000
--- a/components/autofill/core/browser/form_parsing/internal_resources
+++ b/components/autofill/core/browser/form_parsing/internal_resources
@@ -1 +1 @@
-Subproject commit 09fb4c501c63ef2f6fbf0630d39e036dd159a2d4
+Subproject commit 9efd7cc2c1a908d3a67865003c25cf09bc876257
diff --git a/components/autofill/core/browser/heuristic_classification_unittests.cc b/components/autofill/core/browser/heuristic_classification_unittests.cc
index 8a42fa9..d4a2a844 100644
--- a/components/autofill/core/browser/heuristic_classification_unittests.cc
+++ b/components/autofill/core/browser/heuristic_classification_unittests.cc
@@ -638,6 +638,7 @@
       features::kAutofillUseITAddressModel,
       features::kAutofillUseNLAddressModel,
       features::kAutofillUsePLAddressModel,
+      features::kAutofillSupportPhoneticNameForJP,
       features::kAutofillEnableExpirationDateImprovements,
       // Other improvements.
       features::kAutofillEnableCacheForRegexMatching,
diff --git a/components/autofill/core/browser/mock_autofill_plus_address_delegate.h b/components/autofill/core/browser/mock_autofill_plus_address_delegate.h
index c6cab2e1..1875625 100644
--- a/components/autofill/core/browser/mock_autofill_plus_address_delegate.h
+++ b/components/autofill/core/browser/mock_autofill_plus_address_delegate.h
@@ -20,6 +20,10 @@
 
   MOCK_METHOD(bool, IsPlusAddress, (const std::string&), (const override));
   MOCK_METHOD(bool,
+              MatchesPlusAddressFormat,
+              (const std::u16string&),
+              (const override));
+  MOCK_METHOD(bool,
               IsPlusAddressFillingEnabled,
               (const url::Origin& origin),
               (const override));
diff --git a/components/autofill/core/browser/payments/amount_extraction_heuristic_regexes.h b/components/autofill/core/browser/payments/amount_extraction_heuristic_regexes.h
index b4a0133..06cf6e5 100644
--- a/components/autofill/core/browser/payments/amount_extraction_heuristic_regexes.h
+++ b/components/autofill/core/browser/payments/amount_extraction_heuristic_regexes.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_PAYMENTS_AMOUNT_EXTRACTION_HEURISTIC_REGEXES_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_PAYMENTS_AMOUNT_EXTRACTION_HEURISTIC_REGEXES_H_
 
+#include <stdint.h>
+
 #include <string>
 
 namespace autofill::payments {
diff --git a/components/autofill/core/browser/strike_databases/strike_database_base.h b/components/autofill/core/browser/strike_databases/strike_database_base.h
index 30761ce3..2c84529 100644
--- a/components/autofill/core/browser/strike_databases/strike_database_base.h
+++ b/components/autofill/core/browser/strike_databases/strike_database_base.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_
 
+#include <stdint.h>
+
 #include <map>
 #include <string>
 #include <vector>
diff --git a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc
index 37010c9..907f8e6 100644
--- a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc
+++ b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc
@@ -158,17 +158,16 @@
   if (base::FeatureList::IsEnabled(features::kAutofillImprovedLabels) &&
       !features::kAutofillImprovedLabelsParamOnlyWithMainTextChangesParam
            .Get()) {
-    AutofillProfile::CreateInferredLabels(
+    differentiating_labels = AutofillProfile::CreateInferredLabels(
         profile_ptrs, /*suggested_fields=*/std::nullopt, trigger_field_type,
         {trigger_field_type},
         GetNumberOfMinimalFieldsToShow(trigger_field_type), app_locale,
-        &differentiating_labels,
         /*use_improved_labels_order=*/true);
   } else {
-    AutofillProfile::CreateInferredLabels(
+    differentiating_labels = AutofillProfile::CreateInferredLabels(
         profile_ptrs, field_types, /*triggering_field_type=*/std::nullopt,
         {trigger_field_type},
-        /*minimal_fields_shown=*/1, app_locale, &differentiating_labels);
+        /*minimal_fields_shown=*/1, app_locale);
   }
   return differentiating_labels;
 }
@@ -620,6 +619,12 @@
   // This defines the maximum number of characters typed until suggestions are
   // no longer displayed.
   static constexpr size_t kMaxNumberCharactersToMatch = 10;
+  // Defines the required number of characters that need to be missing between
+  // the typed data and the profile data. This makes sure the value
+  // offered by the feature is higher, by for example not displaying a
+  // suggestion to fill "Tomas" when the user typed "Tom", since at this point
+  // users are more likely to simply finish typing.
+  static constexpr size_t kMinMissingCharactersNumber = 3;
   // Field types we are interested in showing suggestions for.
   // TODO(crbug.com/381994105): Add a finch parameter to easily experiment with
   // adding and removing field types.
@@ -673,6 +678,11 @@
       continue;
     }
 
+    if (profile_data.size() - normalized_field_contents.size() <
+        kMinMissingCharactersNumber) {
+      continue;
+    }
+
     // Do not allow duplicated suggestions, for example if
     // `ADDRESS_HOME_LINE1` and
     // `ADDRESS_HOME_STREET_ADDRESS` hold the same data.
diff --git a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator_unittest.cc b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator_unittest.cc
index 97843d9..fc5e8d1 100644
--- a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator_unittest.cc
+++ b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator_unittest.cc
@@ -146,15 +146,15 @@
   EXPECT_EQ(GetSuggestionsOnTypingForProfile(address_data(), u"La").size(), 0u);
   // Expects that suggestions are returned if the field content matches
   // prefix data from the top profile, even when the field content
-  // has more than 3 characters.
+  // has more than 3 characters. Note that a suggestion for `FIRST_NAME` is not
+  // returned because the string value it would fill in the field and the typed
+  // data is not large enough.
   EXPECT_THAT(
       GetSuggestionsOnTypingForProfile(address_data(), u"Lar"),
-      ElementsAre(
-          EqualsSuggestion(SuggestionType::kAddressEntryOnTyping, u"Larry"),
-          EqualsSuggestion(SuggestionType::kAddressEntryOnTyping,
-                           u"Larry page"),
-          EqualsSuggestion(SuggestionType::kSeparator),
-          EqualsSuggestion(SuggestionType::kManageAddress)));
+      ElementsAre(EqualsSuggestion(SuggestionType::kAddressEntryOnTyping,
+                                   u"Larry page"),
+                  EqualsSuggestion(SuggestionType::kSeparator),
+                  EqualsSuggestion(SuggestionType::kManageAddress)));
   // Expects that NO suggestion is returned if the field content matches
   // `NAME_FULL` prefix from the a profile that is not the top one (for now we
   // only support suggestions form one profile), and the field content has at
diff --git a/components/autofill/core/browser/webdata/autofill_table_utils.h b/components/autofill/core/browser/webdata/autofill_table_utils.h
index 787f0c61..ee2fa60d 100644
--- a/components/autofill/core/browser/webdata/autofill_table_utils.h
+++ b/components/autofill/core/browser/webdata/autofill_table_utils.h
@@ -9,6 +9,7 @@
 #include <initializer_list>
 #include <string>
 #include <string_view>
+#include <utility>
 #include <vector>
 
 namespace sql {
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
index 7d4c9bf5..e6f8300 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
@@ -149,7 +149,7 @@
 <translation id="3273479183583863618">Sniženja cijena na karticama</translation>
 <translation id="3277252321222022663">Dopuštanje pristupa senzorima za web-lokacije (preporučeno)</translation>
 <translation id="327891165872793509">Chrome većini web-lokacija ograničava upotrebu kolačića trećih strana pomoću kojih vas prate dok pregledavate. Otvorite postavke da biste <ph name="BEGIN_LINK" />upravljali pristupom kolačićima trećih strana<ph name="END_LINK" />.</translation>
-<translation id="3285500645985761267">Dopustite povezanim web-lokacijama da vide vaše aktivnosti u grupi</translation>
+<translation id="3285500645985761267">Dopusti povezanim web-lokacijama da vide vaše aktivnosti u grupi</translation>
 <translation id="3295019059349372795">11. poglavlje: Čudesni Smaragdni Grad čarobnjaka Oza</translation>
 <translation id="3295602654194328831">Sakrij informacije</translation>
 <translation id="3328801116991980348">Informacije o web-lokaciji</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
index b32a6ff..1873f06 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -227,7 +227,7 @@
 <translation id="443552056913301231">Tindakan ini akan menghapus semua data lokal, termasuk cookie, dan mereset semua izin untuk <ph name="ORIGIN" /></translation>
 <translation id="4468959413250150279">Mematikan suara untuk situs tertentu.</translation>
 <translation id="4475912480633855319">{COOKIES,plural, =1{# cookie}other{# cookie}}</translation>
-<translation id="4478158430052450698">Memudahkan penyesuaian zoom untuk berbagai situs</translation>
+<translation id="4478158430052450698">Permudah penyesuaian zoom untuk berbagai situs</translation>
 <translation id="4479647676395637221">Minta izin terlebih dahulu sebelum memungkinkan situs menggunakan kamera Anda (disarankan)</translation>
 <translation id="4505788138578415521">URL ditampilkan penuh</translation>
 <translation id="4534723447064627427">Untuk mengizinkan <ph name="APP_NAME" /> mengakses mikrofon, aktifkan juga mikrofon di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
index 91def54..aab02f4 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -493,7 +493,7 @@
 <translation id="8211406090763984747">La connessione è sicura</translation>
 <translation id="8249310407154411074">Sposta in alto</translation>
 <translation id="8261506727792406068">Elimina</translation>
-<translation id="8284326494547611709">Sottotitoli</translation>
+<translation id="8284326494547611709">Sottotitoli codificati</translation>
 <translation id="8300705686683892304">Gestiti dall'app</translation>
 <translation id="8324158725704657629">Non chiedermelo più</translation>
 <translation id="8362795839483915693">Puoi aumentare o diminuire lo zoom sui siti che visiti</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
index b05c8448..b61bcf1e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -214,7 +214,7 @@
 <translation id="4200726100658658164">位置情報の設定を開く</translation>
 <translation id="4226663524361240545">通知を受け取るとデバイスが振動します</translation>
 <translation id="4259722352634471385"><ph name="URL" /> へのアクセスがブロックされました</translation>
-<translation id="4278390842282768270">許可</translation>
+<translation id="4278390842282768270">許可されています</translation>
 <translation id="429312253194641664">サイトでメディアが再生されています</translation>
 <translation id="42981349822642051">展開</translation>
 <translation id="4336219115486912529">{COUNT,plural, =1{明日で期限切れ}other{あと # 日で期限切れ}}</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
index 66a3168..e4b8304 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -459,7 +459,7 @@
 <translation id="780301667611848630">ไม่เป็นไร</translation>
 <translation id="7804248752222191302">มีเว็บไซต์กำลังใช้กล้อง</translation>
 <translation id="7807060072011926525">ให้บริการโดย Google</translation>
-<translation id="7835852323729233924">กำลังเล่นสื่อ</translation>
+<translation id="7835852323729233924">การเล่นสื่อ</translation>
 <translation id="783819812427904514">เปิดเสียงวิดีโอ</translation>
 <translation id="7846076177841592234">ยกเลิกการเลือก</translation>
 <translation id="7881140103901777395">Chrome จำกัดไม่ให้เว็บไซต์ส่วนใหญ่ใช้คุกกี้ของบุคคลที่สาม แต่อนุญาตให้มีคุกกี้ของบุคคลที่สามในเว็บไซต์นี้เนื่องจากต้องใช้คุกกี้ดังกล่าวในการให้บริการขั้นพื้นฐาน\n\nไปที่การตั้งค่าเพื่อ<ph name="BEGIN_LINK" />จัดการการเข้าถึงคุกกี้ของบุคคลที่สาม<ph name="END_LINK" /></translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
index bed1f45..f98796f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
@@ -459,7 +459,7 @@
 <translation id="780301667611848630">Hayır, teşekkürler</translation>
 <translation id="7804248752222191302">Bir site kameranızı kullanıyor</translation>
 <translation id="7807060072011926525">Google tarafından sağlanır</translation>
-<translation id="7835852323729233924">Medya oynatılıyor/çalınıyor</translation>
+<translation id="7835852323729233924">Medya oynatma/çalma</translation>
 <translation id="783819812427904514">Videonun sesini aç</translation>
 <translation id="7846076177841592234">Seçimi iptal et</translation>
 <translation id="7881140103901777395">Chrome, çoğu sitenin, üçüncü taraf çerezlerini kullanmasını sınırlandırır. Ancak temel hizmetleri sağlamadaki rolünden dolayı bu sitede üçüncü taraf çerezlerine izin verilir.\n\n<ph name="BEGIN_LINK" />Üçüncü taraf çerezlerine erişimi yönetmek<ph name="END_LINK" /> için ayarlara gidin.</translation>
diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc
index e78605d5..b2dfa07 100644
--- a/components/content_settings/core/browser/cookie_settings.cc
+++ b/components/content_settings/core/browser/cookie_settings.cc
@@ -342,6 +342,9 @@
       first_party_url.SchemeIs(extension_scheme_)) {
     return true;
   }
+#else
+  // Suppress -Wunused-private-field warning.
+  (void)extension_scheme_;
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
   return false;
diff --git a/components/dom_distiller/core/url_utils.h b/components/dom_distiller/core/url_utils.h
index 8b7645fb..a000b43a 100644
--- a/components/dom_distiller/core/url_utils.h
+++ b/components/dom_distiller/core/url_utils.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_
 #define COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_
 
+#include <stdint.h>
+
 #include <string>
 
 class GURL;
diff --git a/components/gwp_asan/client/thread_local_random_bit_generator.h b/components/gwp_asan/client/thread_local_random_bit_generator.h
index 402db48a..5ce2b27a 100644
--- a/components/gwp_asan/client/thread_local_random_bit_generator.h
+++ b/components/gwp_asan/client/thread_local_random_bit_generator.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_GWP_ASAN_CLIENT_THREAD_LOCAL_RANDOM_BIT_GENERATOR_H_
 
 #include <limits>
+#include <random>
 
 #include "base/compiler_specific.h"
 #include "base/rand_util.h"
diff --git a/components/gwp_asan/crash_handler/crash_handler.h b/components/gwp_asan/crash_handler/crash_handler.h
index b28ec0e..c193e665 100644
--- a/components/gwp_asan/crash_handler/crash_handler.h
+++ b/components/gwp_asan/crash_handler/crash_handler.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_GWP_ASAN_CRASH_HANDLER_CRASH_HANDLER_H_
 #define COMPONENTS_GWP_ASAN_CRASH_HANDLER_CRASH_HANDLER_H_
 
+#include <stdint.h>
+
 #include "third_party/crashpad/crashpad/handler/user_stream_data_source.h"
 
 namespace crashpad {
diff --git a/components/offline_pages/core/archive_validator.h b/components/offline_pages/core/archive_validator.h
index 843b669..61ab40e6 100644
--- a/components/offline_pages/core/archive_validator.h
+++ b/components/offline_pages/core/archive_validator.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_OFFLINE_PAGES_CORE_ARCHIVE_VALIDATOR_H_
 #define COMPONENTS_OFFLINE_PAGES_CORE_ARCHIVE_VALIDATOR_H_
 
+#include <stdint.h>
+
 #include <memory>
 #include <string>
 #include <utility>
diff --git a/components/page_info/page_info_ui_delegate.h b/components/page_info/page_info_ui_delegate.h
index be065117..b17dbc4 100644
--- a/components/page_info/page_info_ui_delegate.h
+++ b/components/page_info/page_info_ui_delegate.h
@@ -9,6 +9,7 @@
 
 #include "build/build_config.h"
 #include "components/content_settings/core/common/content_settings_types.h"
+#include "components/page_info/core/page_info_types.h"
 #include "content/public/browser/permission_result.h"
 
 namespace blink {
@@ -29,6 +30,8 @@
       blink::PermissionType permission) = 0;
   virtual std::optional<content::PermissionResult> GetEmbargoResult(
       ContentSettingsType type) = 0;
+  virtual void GetMerchantTrustInfo(
+      page_info::MerchantDataCallback callback) = 0;
 };
 
 #endif  // COMPONENTS_PAGE_INFO_PAGE_INFO_UI_DELEGATE_H_
diff --git a/components/page_info/page_info_ui_unittest.cc b/components/page_info/page_info_ui_unittest.cc
index 5f003284..7befdbf6 100644
--- a/components/page_info/page_info_ui_unittest.cc
+++ b/components/page_info/page_info_ui_unittest.cc
@@ -29,6 +29,10 @@
               GetEmbargoResult,
               (ContentSettingsType type),
               (override));
+  MOCK_METHOD(void,
+              GetMerchantTrustInfo,
+              (page_info::MerchantDataCallback callback),
+              (override));
 };
 
 }  // namespace
diff --git a/components/password_manager/core/browser/password_credential_filler_impl_unittest.cc b/components/password_manager/core/browser/password_credential_filler_impl_unittest.cc
index 24d7d14d..f3d3d6d9 100644
--- a/components/password_manager/core/browser/password_credential_filler_impl_unittest.cc
+++ b/components/password_manager/core/browser/password_credential_filler_impl_unittest.cc
@@ -210,144 +210,7 @@
   MockPasswordManagerDriver driver_;
 };
 
-class PasswordCredentialFillerTest
-    : public PasswordCredentialFillerBaseTest,
-      public testing::WithParamInterface<SubmissionReadinessState> {
- public:
-  PasswordCredentialFillerImpl PrepareFiller() {
-    const FormData form;
-    return PasswordCredentialFillerImpl(
-        driver().AsWeakPtr(),
-        PasswordFillingParams(form, 0, 0, autofill::FieldRendererId(),
-                              GetParam()));
-  }
-};
-
-TEST_P(PasswordCredentialFillerTest, FillWithUsername) {
-  SubmissionReadinessState submission_readiness = GetParam();
-
-  // If there is no field after the password and both username and password
-  // fields are there, then submit the form.
-  bool submission_expected =
-      submission_readiness == SubmissionReadinessState::kEmptyFields ||
-      submission_readiness == SubmissionReadinessState::kMoreThanTwoFields ||
-      submission_readiness == SubmissionReadinessState::kTwoFields;
-
-  PasswordCredentialFillerImpl filler = PrepareFiller();
-
-  EXPECT_CALL(driver(),
-              KeyboardReplacingSurfaceClosed(ToShowVirtualKeyboard(false)));
-  EXPECT_CALL(driver(), FillSuggestion(kUsername, kPassword, _))
-      .WillOnce(
-          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
-  EXPECT_CALL(driver(), TriggerFormSubmission)
-      .Times(submission_expected ? 1 : 0);
-
-  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
-}
-
-TEST_P(PasswordCredentialFillerTest, FillWithEmptyUsername) {
-  PasswordCredentialFillerImpl filler = PrepareFiller();
-  const std::u16string kEmptyUsername = u"";
-
-  EXPECT_CALL(driver(),
-              KeyboardReplacingSurfaceClosed(ToShowVirtualKeyboard(false)));
-  EXPECT_CALL(driver(), FillSuggestion(kEmptyUsername, kPassword, _))
-      .WillOnce(
-          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
-  EXPECT_CALL(driver(), TriggerFormSubmission).Times(0);
-
-  filler.FillUsernameAndPassword(kEmptyUsername, kPassword, base::DoNothing());
-}
-
-TEST_P(PasswordCredentialFillerTest,
-       UpdateTriggerSubmissionWithTrueControlsFormSubmission) {
-  PasswordCredentialFillerImpl filler = PrepareFiller();
-  // override SubmissionReadiness by calling UpdateTriggerSubmission:
-  filler.UpdateTriggerSubmission(true);
-  EXPECT_CALL(driver(),
-              KeyboardReplacingSurfaceClosed(ToShowVirtualKeyboard(false)));
-  EXPECT_CALL(driver(), FillSuggestion(kUsername, kPassword, _))
-      .WillOnce(
-          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
-  EXPECT_CALL(driver(), TriggerFormSubmission).Times(1);
-
-  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
-}
-
-TEST_P(PasswordCredentialFillerTest,
-       UpdateTriggerSubmissionWithFalseControlsFormSubmission) {
-  PasswordCredentialFillerImpl filler = PrepareFiller();
-  // override SubmissionReadiness by calling UpdateTriggerSubmission:
-  filler.UpdateTriggerSubmission(false);
-  EXPECT_CALL(driver(),
-              KeyboardReplacingSurfaceClosed(ToShowVirtualKeyboard(false)));
-  EXPECT_CALL(driver(), FillSuggestion(kUsername, kPassword, _))
-      .WillOnce(
-          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
-  EXPECT_CALL(driver(), TriggerFormSubmission).Times(0);
-
-  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
-}
-
-TEST_P(PasswordCredentialFillerTest, FillWithNullDriver) {
-  PasswordCredentialFillerImpl filler(
-      nullptr, PasswordFillingParams(FormData(), 0, 0,
-                                     autofill::FieldRendererId(), GetParam()));
-  // Should not crash.
-  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
-}
-
-TEST_P(PasswordCredentialFillerTest, Dismiss) {
-  PasswordCredentialFillerImpl filler = PrepareFiller();
-  EXPECT_CALL(driver(),
-              KeyboardReplacingSurfaceClosed(ToShowVirtualKeyboard(false)));
-  EXPECT_CALL(driver(), TriggerFormSubmission).Times(0);
-
-  filler.Dismiss(ToShowVirtualKeyboard(false));
-}
-
-INSTANTIATE_TEST_SUITE_P(
-    ,
-    PasswordCredentialFillerTest,
-    testing::Values(SubmissionReadinessState::kNoInformation,
-                    SubmissionReadinessState::kError,
-                    SubmissionReadinessState::kNoUsernameField,
-                    SubmissionReadinessState::kFieldBetweenUsernameAndPassword,
-                    SubmissionReadinessState::kFieldAfterPasswordField,
-                    SubmissionReadinessState::kEmptyFields,
-                    SubmissionReadinessState::kMoreThanTwoFields,
-                    SubmissionReadinessState::kTwoFields,
-                    SubmissionReadinessState::kNoPasswordField));
-
-class PasswordCredentialFillerV2ParameterTest
-    : public PasswordCredentialFillerBaseTest,
-      public testing::WithParamInterface<
-          std::tuple<PasswordFillingParams, SubmissionReadinessState>> {
- private:
-  base::test::ScopedFeatureList scoped_feature_list_{
-      password_manager::features::kPasswordSuggestionBottomSheetV2};
-};
-
-TEST_P(PasswordCredentialFillerV2ParameterTest, SubmissionReadiness) {
-  PasswordFillingParams params = std::get<0>(GetParam());
-
-  PasswordCredentialFillerImpl filler(driver().AsWeakPtr(), params);
-  EXPECT_EQ(filler.GetSubmissionReadinessState(), std::get<1>(GetParam()));
-}
-
-INSTANTIATE_TEST_SUITE_P(
-    ,
-    PasswordCredentialFillerV2ParameterTest,
-    testing::ValuesIn(kPasswordCredentialFillerV2TestCases));
-
-class PasswordCredentialFillerV2Test : public PasswordCredentialFillerBaseTest {
- private:
-  base::test::ScopedFeatureList scoped_feature_list_{
-      password_manager::features::kPasswordSuggestionBottomSheetV2};
-};
-
-TEST_F(PasswordCredentialFillerV2Test, FillingFailed) {
+TEST_F(PasswordCredentialFillerBaseTest, FillingFailed) {
   PasswordCredentialFillerImpl filler(
       driver().AsWeakPtr(),
       PasswordFillingParams(
@@ -370,3 +233,103 @@
 
   filler.FillUsernameAndPassword(kUsername, kPassword, reply_call.Get());
 }
+
+TEST_F(PasswordCredentialFillerBaseTest, FillWithNullDriver) {
+  PasswordCredentialFillerImpl filler(
+      nullptr,
+      PasswordFillingParams(FormData(), 0, 0, autofill::FieldRendererId(),
+                            SubmissionReadinessState::kNoInformation));
+  // Should not crash.
+  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
+}
+
+class PasswordCredentialFillerV2ParameterTest
+    : public PasswordCredentialFillerBaseTest,
+      public testing::WithParamInterface<
+          std::tuple<PasswordFillingParams, SubmissionReadinessState>> {
+ public:
+  PasswordCredentialFillerImpl PrepareFiller() {
+    PasswordFillingParams params = std::get<0>(GetParam());
+    return PasswordCredentialFillerImpl(driver().AsWeakPtr(), params);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_{
+      password_manager::features::kPasswordSuggestionBottomSheetV2};
+};
+
+TEST_P(PasswordCredentialFillerV2ParameterTest, FillWithUsername) {
+  SubmissionReadinessState submission_readiness = std::get<1>(GetParam());
+
+  // If there is no field after the password and both username and password
+  // fields are there, then submit the form.
+  bool submission_expected =
+      submission_readiness == SubmissionReadinessState::kEmptyFields ||
+      submission_readiness == SubmissionReadinessState::kMoreThanTwoFields ||
+      submission_readiness == SubmissionReadinessState::kTwoFields;
+
+  PasswordCredentialFillerImpl filler = PrepareFiller();
+
+  EXPECT_CALL(driver(), FillSuggestion(kUsername, kPassword, _))
+      .WillOnce(
+          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
+  EXPECT_CALL(driver(), TriggerFormSubmission)
+      .Times(submission_expected ? 1 : 0);
+
+  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
+}
+
+TEST_P(PasswordCredentialFillerV2ParameterTest, FillWithEmptyUsername) {
+  PasswordCredentialFillerImpl filler = PrepareFiller();
+  const std::u16string kEmptyUsername = u"";
+
+  EXPECT_CALL(driver(), FillSuggestion(kEmptyUsername, kPassword, _))
+      .WillOnce(
+          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
+  EXPECT_CALL(driver(), TriggerFormSubmission).Times(0);
+
+  filler.FillUsernameAndPassword(kEmptyUsername, kPassword, base::DoNothing());
+}
+
+TEST_P(PasswordCredentialFillerV2ParameterTest,
+       UpdateTriggerSubmissionWithTrueControlsFormSubmission) {
+  PasswordCredentialFillerImpl filler = PrepareFiller();
+  // override SubmissionReadiness by calling UpdateTriggerSubmission:
+  filler.UpdateTriggerSubmission(true);
+  EXPECT_CALL(driver(), FillSuggestion(kUsername, kPassword, _))
+      .WillOnce(
+          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
+  EXPECT_CALL(driver(), TriggerFormSubmission).Times(1);
+
+  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
+}
+
+TEST_P(PasswordCredentialFillerV2ParameterTest,
+       UpdateTriggerSubmissionWithFalseControlsFormSubmission) {
+  PasswordCredentialFillerImpl filler = PrepareFiller();
+  // override SubmissionReadiness by calling UpdateTriggerSubmission:
+  filler.UpdateTriggerSubmission(false);
+  EXPECT_CALL(driver(), FillSuggestion(kUsername, kPassword, _))
+      .WillOnce(
+          base::test::RunOnceCallback<2>(/*was_filling_successful=*/true));
+  EXPECT_CALL(driver(), TriggerFormSubmission).Times(0);
+
+  filler.FillUsernameAndPassword(kUsername, kPassword, base::DoNothing());
+}
+
+TEST_P(PasswordCredentialFillerV2ParameterTest, Dismiss) {
+  PasswordCredentialFillerImpl filler = PrepareFiller();
+  EXPECT_CALL(driver(), TriggerFormSubmission).Times(0);
+
+  filler.Dismiss(ToShowVirtualKeyboard(false));
+}
+
+TEST_P(PasswordCredentialFillerV2ParameterTest, SubmissionReadiness) {
+  PasswordCredentialFillerImpl filler = PrepareFiller();
+  EXPECT_EQ(filler.GetSubmissionReadinessState(), std::get<1>(GetParam()));
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    PasswordCredentialFillerV2ParameterTest,
+    testing::ValuesIn(kPasswordCredentialFillerV2TestCases));
diff --git a/components/password_manager/core/browser/password_form_metrics_recorder.cc b/components/password_manager/core/browser/password_form_metrics_recorder.cc
index 0339475..e38a06a 100644
--- a/components/password_manager/core/browser/password_form_metrics_recorder.cc
+++ b/components/password_manager/core/browser/password_form_metrics_recorder.cc
@@ -1117,6 +1117,7 @@
     case metrics_util::MANUAL_PASSKEY_NOT_ACCEPTED_BUBBLE:
     case metrics_util::AUTOMATIC_PASSKEY_UPGRADE_BUBBLE:
     case metrics_util::MANUAL_PASSKEY_UPGRADE_BUBBLE:
+    case metrics_util::PASSWORD_CHANGE_BUBBLE:
       // Do nothing.
       return;
 
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h
index dd3b568..a42b3c57 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.h
+++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -60,6 +60,7 @@
   MANUAL_PASSKEY_NOT_ACCEPTED_BUBBLE = 27,
   AUTOMATIC_PASSKEY_UPGRADE_BUBBLE = 28,
   MANUAL_PASSKEY_UPGRADE_BUBBLE = 29,
+  PASSWORD_CHANGE_BUBBLE = 30,
   NUM_DISPLAY_DISPOSITIONS,
 };
 
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge.cc b/components/password_manager/core/browser/sync/password_sync_bridge.cc
index e8ea9e78..ee521f4 100644
--- a/components/password_manager/core/browser/sync/password_sync_bridge.cc
+++ b/components/password_manager/core/browser/sync/password_sync_bridge.cc
@@ -753,10 +753,6 @@
     metrics_util::
         LogDownloadedBlocklistedEntriesCountFromAccountStoreAfterUnlock(
             entity_data.size() - password_count);
-  } else {
-    base::UmaHistogramCustomCounts(
-        "PasswordManager.ProfileStore.TotalAccountsBeforeInitialSync",
-        key_to_local_specifics_map.size(), 0, 1000, 100);
   }
 
   sync_enabled_or_disabled_cb_.Run();
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
index c9517f9..faee9c72 100644
--- a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
+++ b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
@@ -1529,20 +1529,6 @@
       "PasswordManager.AccountStoreCredentialsAfterOptIn", 2, 1);
   histogram_tester.ExpectUniqueSample(
       "PasswordManager.AccountStoreBlocklistedEntriesAfterOptIn", 1, 1);
-  histogram_tester.ExpectTotalCount(
-      "PasswordManager.ProfileStore.TotalAccountsBeforeInitialSync", 0);
-}
-
-TEST_F(PasswordSyncBridgeTest, ShouldReportStoredPasswordsIfProfileStore) {
-  fake_db()->AddLoginWithPrimaryKey(MakePasswordForm(kSignonRealm1, 100));
-  fake_db()->AddLoginWithPrimaryKey(MakePasswordForm(kSignonRealm2, 101));
-
-  base::HistogramTester histogram_tester;
-  std::optional<syncer::ModelError> error = bridge()->MergeFullSyncData(
-      bridge()->CreateMetadataChangeList(), syncer::EntityChangeList());
-  ASSERT_FALSE(error);
-  histogram_tester.ExpectUniqueSample(
-      "PasswordManager.ProfileStore.TotalAccountsBeforeInitialSync", 2, 1);
 }
 
 TEST_F(PasswordSyncBridgeTest,
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 4639916d..2dfaca7 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -50,7 +50,7 @@
 // TTF to the user.
 BASE_FEATURE(kPasswordSuggestionBottomSheetV2,
              "PasswordSuggestionBottomSheetV2",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Enables showing the warning about UPM migrating local passwords.
 // The feature is limited to Canary/Dev/Beta by a check in
diff --git a/components/password_manager/core/common/password_manager_ui.h b/components/password_manager/core/common/password_manager_ui.h
index 17bcb8b..e3baeb4c 100644
--- a/components/password_manager/core/common/password_manager_ui.h
+++ b/components/password_manager/core/common/password_manager_ui.h
@@ -97,6 +97,9 @@
   // A passkey was created automatically to "upgrade" an existing password for
   // the same website and user.
   PASSKEY_UPGRADE_STATE,
+
+  // Password change flow was started.
+  PASSWORD_CHANGE_STATE,
 };
 
 }  // namespace password_manager::ui
diff --git a/components/pdf/renderer/pdf_accessibility_tree.cc b/components/pdf/renderer/pdf_accessibility_tree.cc
index cfb6a69..288d09b 100644
--- a/components/pdf/renderer/pdf_accessibility_tree.cc
+++ b/components/pdf/renderer/pdf_accessibility_tree.cc
@@ -536,6 +536,21 @@
                      std::move(chars), std::move(page_objects)));
 }
 
+void PdfAccessibilityTree::OnHasSearchifyText() {
+  // TODO(crbug.com/360803943): Look into if `render_frame()` can be null, why
+  // it is assumed to be not null in `SetOcrCompleteStatus()`, and create a
+  // better distinction between `render_frame()` and `render_frame_`.
+  // TODO(accessibility): remove this dependency.
+  content::RenderAccessibility* render_accessibility =
+      render_frame() ? render_frame()->GetRenderAccessibility() : nullptr;
+  bool screen_reader_mode =
+      (render_accessibility &&
+       render_accessibility->GetAXMode().has_mode(ui::AXMode::kScreenReader));
+  base::UmaHistogramBoolean(
+      "Accessibility.ScreenAI.Searchify.ScreenReaderModeEnabled",
+      screen_reader_mode);
+}
+
 void PdfAccessibilityTree::DoSetAccessibilityPageInfo(
     const chrome_pdf::AccessibilityPageInfo& page_info,
     const std::vector<chrome_pdf::AccessibilityTextRunInfo>& text_runs,
diff --git a/components/pdf/renderer/pdf_accessibility_tree.h b/components/pdf/renderer/pdf_accessibility_tree.h
index 8693b13d..dae40cb 100644
--- a/components/pdf/renderer/pdf_accessibility_tree.h
+++ b/components/pdf/renderer/pdf_accessibility_tree.h
@@ -96,6 +96,9 @@
       std::vector<chrome_pdf::AccessibilityTextRunInfo> text_runs,
       std::vector<chrome_pdf::AccessibilityCharInfo> chars,
       chrome_pdf::AccessibilityPageObjects page_objects) override;
+#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+  void OnHasSearchifyText() override;
+#endif
 
   void HandleAction(const chrome_pdf::AccessibilityActionData& action_data);
   std::optional<AnnotationInfo> GetPdfAnnotationInfoFromAXNode(
diff --git a/components/performance_manager/graph/node_inline_data_impl.h b/components/performance_manager/graph/node_inline_data_impl.h
index 7805fb7..d0149e2 100644
--- a/components/performance_manager/graph/node_inline_data_impl.h
+++ b/components/performance_manager/graph/node_inline_data_impl.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_PERFORMANCE_MANAGER_GRAPH_NODE_INLINE_DATA_IMPL_H_
 #define COMPONENTS_PERFORMANCE_MANAGER_GRAPH_NODE_INLINE_DATA_IMPL_H_
 
+#include <concepts>
 #include <memory>
 #include <optional>
 #include <type_traits>
diff --git a/components/performance_manager/public/resource_attribution/memory_measurement_delegate.h b/components/performance_manager/public/resource_attribution/memory_measurement_delegate.h
index 35293ed..0afd2d8 100644
--- a/components/performance_manager/public/resource_attribution/memory_measurement_delegate.h
+++ b/components/performance_manager/public/resource_attribution/memory_measurement_delegate.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_RESOURCE_ATTRIBUTION_MEMORY_MEASUREMENT_DELEGATE_H_
 #define COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_RESOURCE_ATTRIBUTION_MEMORY_MEASUREMENT_DELEGATE_H_
 
+#include <stdint.h>
+
 #include <compare>
 #include <map>
 #include <memory>
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUtil.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUtil.java
index 84cf8b5a..e13ec9a 100644
--- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUtil.java
+++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUtil.java
@@ -81,10 +81,7 @@
         // targeting SDK version 31. Therefore enable support based on the current device's
         // software's SDK version as opposed to Chrome's targetSdkVersion. See:
         // https://developer.android.com/about/versions/12/approximate-location
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
-                && PermissionsAndroidFeatureMap.isEnabled(
-                        PermissionsAndroidFeatureList
-                                .ANDROID_APPROXIMATE_LOCATION_PERMISSION_SUPPORT);
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
     }
 
     private static boolean hasImmersiveFeature() {
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java
index 62f840e9..12af083 100644
--- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java
+++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java
@@ -11,8 +11,6 @@
  * components/permissions/android/permissions_android_feature_map.cc.
  */
 public abstract class PermissionsAndroidFeatureList {
-    public static final String ANDROID_APPROXIMATE_LOCATION_PERMISSION_SUPPORT =
-            "AndroidApproximateLocationPermissionSupport";
     public static final String BLOCK_MIDI_BY_DEFAULT = "BlockMidiByDefault";
 
     public static final String ONE_TIME_PERMISSION = "OneTimePermission";
diff --git a/components/permissions/android/permissions_android_feature_map.cc b/components/permissions/android/permissions_android_feature_map.cc
index f8514da..d4f0541 100644
--- a/components/permissions/android/permissions_android_feature_map.cc
+++ b/components/permissions/android/permissions_android_feature_map.cc
@@ -20,7 +20,6 @@
 // this file or in other locations in the code base (e.g.
 // components/permissions/features.h).
 const base::Feature* kFeaturesExposedToJava[] = {
-    &kAndroidApproximateLocationPermissionSupport,
     &kAndroidCancelPermissionPromptOnTouchOutside,
     &features::kOneTimePermission,
 };
@@ -34,10 +33,6 @@
 
 }  // namespace
 
-BASE_FEATURE(kAndroidApproximateLocationPermissionSupport,
-             "AndroidApproximateLocationPermissionSupport",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // Enables tapping outside the permission prompt scrim to dismiss a permission
 // prompt. Do not remove flag (killswitch).
 BASE_FEATURE(kAndroidCancelPermissionPromptOnTouchOutside,
diff --git a/components/permissions/android/permissions_android_feature_map.h b/components/permissions/android/permissions_android_feature_map.h
index d33d9ecb..1a2b5ee 100644
--- a/components/permissions/android/permissions_android_feature_map.h
+++ b/components/permissions/android/permissions_android_feature_map.h
@@ -9,7 +9,6 @@
 
 namespace permissions {
 // Alphabetical:
-BASE_DECLARE_FEATURE(kAndroidApproximateLocationPermissionSupport);
 BASE_DECLARE_FEATURE(kAndroidCancelPermissionPromptOnTouchOutside);
 }  // namespace permissions
 
diff --git a/components/permissions/features.cc b/components/permissions/features.cc
index 816cac74..6f526f68 100644
--- a/components/permissions/features.cc
+++ b/components/permissions/features.cc
@@ -22,12 +22,6 @@
              "BlockPromptsIfDismissedOften",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-// Once the user has auto re-authenticated, automatically block subsequent auto
-// re-authn prompts within the next 10 minutes.
-BASE_FEATURE(kBlockRepeatedAutoReauthnPrompts,
-             "BlockRepeatedAutoReauthnPrompts",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 BASE_FEATURE(kOneTimePermission,
              "OneTimePermission",
              base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/components/permissions/features.h b/components/permissions/features.h
index a69baae..4ae2f36 100644
--- a/components/permissions/features.h
+++ b/components/permissions/features.h
@@ -20,9 +20,6 @@
 BASE_DECLARE_FEATURE(kBlockPromptsIfDismissedOften);
 
 COMPONENT_EXPORT(PERMISSIONS_COMMON)
-BASE_DECLARE_FEATURE(kBlockRepeatedAutoReauthnPrompts);
-
-COMPONENT_EXPORT(PERMISSIONS_COMMON)
 BASE_DECLARE_FEATURE(kOneTimePermission);
 
 #if !BUILDFLAG(IS_ANDROID)
diff --git a/components/permissions/permission_decision_auto_blocker.cc b/components/permissions/permission_decision_auto_blocker.cc
index b67114d..d0e8d25b327 100644
--- a/components/permissions/permission_decision_auto_blocker.cc
+++ b/components/permissions/permission_decision_auto_blocker.cc
@@ -486,12 +486,8 @@
     ContentSettingsType permission) {
   DCHECK_EQ(permission,
             ContentSettingsType::FEDERATED_IDENTITY_AUTO_REAUTHN_PERMISSION);
-  if (base::FeatureList::IsEnabled(
-          features::kBlockRepeatedAutoReauthnPrompts)) {
-    PlaceUnderEmbargo(url, permission, kPermissionDisplayEmbargoKey);
-    return true;
-  }
-  return false;
+  PlaceUnderEmbargo(url, permission, kPermissionDisplayEmbargoKey);
+  return true;
 }
 
 void PermissionDecisionAutoBlocker::RemoveEmbargoAndResetCounts(
diff --git a/components/permissions/permission_decision_auto_blocker.h b/components/permissions/permission_decision_auto_blocker.h
index b2ad5da..9bec6211 100644
--- a/components/permissions/permission_decision_auto_blocker.h
+++ b/components/permissions/permission_decision_auto_blocker.h
@@ -141,8 +141,7 @@
   std::set<GURL> GetEmbargoedOrigins(
       std::vector<ContentSettingsType> content_types);
 
-  // Records that a prompt was displayed for |permission|. If
-  // features::kBlockRepeatedAutoReauthnPrompts is enabled, it will place |url|
+  // Records that a prompt was displayed for |permission| and places |url|
   // under embargo for |permission|.
   bool RecordDisplayAndEmbargo(const GURL& url, ContentSettingsType permission);
 
diff --git a/components/permissions/test/mock_permission_prompt_factory.cc b/components/permissions/test/mock_permission_prompt_factory.cc
index 9f57625..772a00a 100644
--- a/components/permissions/test/mock_permission_prompt_factory.cc
+++ b/components/permissions/test/mock_permission_prompt_factory.cc
@@ -25,11 +25,15 @@
       manager_(manager) {
   manager->set_view_factory_for_testing(base::BindRepeating(
       &MockPermissionPromptFactory::Create, base::Unretained(this)));
+  observation_.Observe(manager_);
 }
 
 MockPermissionPromptFactory::~MockPermissionPromptFactory() {
-  manager_->set_view_factory_for_testing(
-      base::BindRepeating(&MockPermissionPromptFactory::DoNotCreate));
+  // The manager may have been destroyed before the test destroyed us.
+  if (manager_) {
+    manager_->set_view_factory_for_testing(
+        base::BindRepeating(&MockPermissionPromptFactory::DoNotCreate));
+  }
   for (permissions::MockPermissionPrompt* prompt : prompts_) {
     prompt->factory_ = nullptr;
   }
@@ -93,6 +97,11 @@
   show_bubble_quit_closure_ = base::RepeatingClosure();
 }
 
+void MockPermissionPromptFactory::OnPermissionRequestManagerDestructed() {
+  observation_.Reset();
+  manager_ = nullptr;
+}
+
 // static
 std::unique_ptr<PermissionPrompt> MockPermissionPromptFactory::DoNotCreate(
     content::WebContents* web_contents,
diff --git a/components/permissions/test/mock_permission_prompt_factory.h b/components/permissions/test/mock_permission_prompt_factory.h
index 2e2509b..c9e0eac1a 100644
--- a/components/permissions/test/mock_permission_prompt_factory.h
+++ b/components/permissions/test/mock_permission_prompt_factory.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/scoped_observation.h"
 #include "components/permissions/permission_prompt.h"
 #include "components/permissions/permission_request.h"
 #include "components/permissions/permission_request_manager.h"
@@ -27,7 +28,7 @@
 // actual UI.
 // See example usage in
 // chrome/browser/permissions/permission_request_manager_unittest.cc
-class MockPermissionPromptFactory {
+class MockPermissionPromptFactory : PermissionRequestManager::Observer {
  public:
   explicit MockPermissionPromptFactory(PermissionRequestManager* manager);
 
@@ -35,7 +36,7 @@
   MockPermissionPromptFactory& operator=(const MockPermissionPromptFactory&) =
       delete;
 
-  ~MockPermissionPromptFactory();
+  ~MockPermissionPromptFactory() override;
 
   // Create method called by the PBM to show a bubble.
   std::unique_ptr<PermissionPrompt> Create(
@@ -80,6 +81,9 @@
 
   void HideView(MockPermissionPrompt* view);
 
+  // PermissionRequestManager::Observer
+  void OnPermissionRequestManagerDestructed() override;
+
   int show_count_;
   int requests_count_;
   std::vector<RequestType> request_types_seen_;
@@ -90,6 +94,10 @@
 
   base::RepeatingClosure show_bubble_quit_closure_;
 
+  base::ScopedObservation<PermissionRequestManager,
+                          PermissionRequestManager::Observer>
+      observation_{this};
+
   // The bubble manager that will be associated with this factory.
   raw_ptr<PermissionRequestManager> manager_;
 };
diff --git a/components/plus_addresses/fake_plus_address_service.cc b/components/plus_addresses/fake_plus_address_service.cc
index 41c861db..75c4646 100644
--- a/components/plus_addresses/fake_plus_address_service.cc
+++ b/components/plus_addresses/fake_plus_address_service.cc
@@ -161,6 +161,11 @@
   return potential_plus_address == plus_addresses::test::kFakePlusAddress;
 }
 
+bool FakePlusAddressService::MatchesPlusAddressFormat(
+    const std::u16string& value) const {
+  return value.ends_with(u"@grelay.com");
+}
+
 void FakePlusAddressService::GetAffiliatedPlusProfiles(
     const url::Origin& origin,
     GetPlusProfilesCallback callback) {
diff --git a/components/plus_addresses/fake_plus_address_service.h b/components/plus_addresses/fake_plus_address_service.h
index 8c6578b..b129345 100644
--- a/components/plus_addresses/fake_plus_address_service.h
+++ b/components/plus_addresses/fake_plus_address_service.h
@@ -28,6 +28,7 @@
 
   // autofill::AutofillPlusAddressDelegate:
   bool IsPlusAddress(const std::string& potential_plus_address) const override;
+  bool MatchesPlusAddressFormat(const std::u16string& value) const override;
   bool IsPlusAddressFillingEnabled(const url::Origin& origin) const override;
   bool IsPlusAddressFullFormFillingEnabled() const override;
   void GetAffiliatedPlusAddresses(
diff --git a/components/plus_addresses/plus_address_service_impl.cc b/components/plus_addresses/plus_address_service_impl.cc
index 18af756..c5f063d 100644
--- a/components/plus_addresses/plus_address_service_impl.cc
+++ b/components/plus_addresses/plus_address_service_impl.cc
@@ -21,6 +21,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "components/affiliations/core/browser/affiliation_utils.h"
+#include "components/autofill/core/browser/data_quality/validation.h"
 #include "components/autofill/core/browser/ui/suggestion.h"
 #include "components/autofill/core/browser/ui/suggestion_hiding_reason.h"
 #include "components/autofill/core/browser/ui/suggestion_type.h"
@@ -63,6 +64,8 @@
 using autofill::SuggestionType;
 using PasswordFormClassification = autofill::PasswordFormClassification;
 
+constexpr char16_t kPlusAddressDomain[] = u"@grelay.com";
+
 affiliations::FacetURI OriginToFacet(const url::Origin& origin) {
   // For a valid `origin`, `origin.GetURL().spec()` is always a valid spec.
   // However, using `FacetURI::FromCanonicalSpec(spec)` can lead to mismatches
@@ -269,6 +272,12 @@
   return plus_address_cache_.IsPlusAddress(potential_plus_address);
 }
 
+bool PlusAddressServiceImpl::MatchesPlusAddressFormat(
+    const std::u16string& value) const {
+  return autofill::IsValidEmailAddress(value) &&
+         value.ends_with(kPlusAddressDomain);
+}
+
 bool PlusAddressServiceImpl::IsPlusAddressFillingEnabled(
     const url::Origin& origin) const {
   // Check that the feature is enabled and the origin is supported (not opaque,
diff --git a/components/plus_addresses/plus_address_service_impl.h b/components/plus_addresses/plus_address_service_impl.h
index 33312880..45b446e0 100644
--- a/components/plus_addresses/plus_address_service_impl.h
+++ b/components/plus_addresses/plus_address_service_impl.h
@@ -72,6 +72,7 @@
 
   // autofill::AutofillPlusAddressDelegate:
   bool IsPlusAddress(const std::string& potential_plus_address) const override;
+  bool MatchesPlusAddressFormat(const std::u16string& value) const override;
   bool IsPlusAddressFillingEnabled(const url::Origin& origin) const override;
   bool IsPlusAddressFullFormFillingEnabled() const override;
   void GetAffiliatedPlusAddresses(
diff --git a/components/plus_addresses/plus_address_service_impl_unittest.cc b/components/plus_addresses/plus_address_service_impl_unittest.cc
index 072cf8f4..de22b31 100644
--- a/components/plus_addresses/plus_address_service_impl_unittest.cc
+++ b/components/plus_addresses/plus_address_service_impl_unittest.cc
@@ -287,6 +287,12 @@
             profile.plus_address);
 }
 
+TEST_F(PlusAddressServiceTest, MatchesPlusAddressFormat) {
+  EXPECT_FALSE(service().MatchesPlusAddressFormat(u"invalid_email"));
+  EXPECT_FALSE(service().MatchesPlusAddressFormat(u"asd@foo.com"));
+  EXPECT_TRUE(service().MatchesPlusAddressFormat(u"asd@grelay.com"));
+}
+
 TEST_F(PlusAddressServiceTest, GetPlusProfileByFacet) {
   const PlusProfile profile = test::CreatePlusProfile();
   EXPECT_FALSE(service().IsPlusAddress(*profile.plus_address));
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index eeeae79..ad129ad 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -265,6 +265,7 @@
 <translation id="117080706484659953">Lässt die Erkennung des Anwendungsbereichs von Richtlinien unter <ph name="MAC_OS_NAME" /> zu</translation>
 <translation id="1171106901454883937">Melden der Versionsinformationen auf Geräten aktivieren</translation>
 <translation id="1173493742686115032"><ph name="SEARCH_SIDE_PANEL_FEATURE_NAME" /> auf allen Webseiten aktivieren</translation>
+<translation id="1176740714945046981">Aktiviert die Downgrade-Funktion für IWAs. Standardmäßig werden nur neuere Versionen von IWAs installiert. Wenn „<ph name="TRUE" />“ festgelegt ist, kannst du auch ältere Versionen installieren. Wenn du ein Downgrade zulassen möchtest, musst du den gewünschten Versionswert über das Feld „pinned_version“ angeben. Wenn „allow_downgrades“ nicht angegeben oder auf „<ph name="FALSE" />“ festgelegt ist, ist ein Downgrade für diese IWA deaktiviert.</translation>
 <translation id="1177624681620856105"> Mit dieser Richtlinie kann festgelegt werden, ob das Kästchen für "Immer öffnen" auf Bestätigungsaufforderungen beim Start externer Protokolle angezeigt werden soll. Hiermit kann der Nutzer angeben, ob ein Link immer mit dem gewählten externen Protokoll geöffnet werden soll.
 
       Wenn diese Richtlinie auf "true" gesetzt oder nicht konfiguriert ist und eine Bestätigungsaufforderung für ein externes Protokoll angezeigt wird, kann der Nutzer "Immer zulassen" auswählen und das Protokoll auf dieser Website so in Zukunft ohne die Bestätigung öffnen.
@@ -3219,6 +3220,17 @@
 <translation id="3387211681524224831">Wenn die Richtlinie aktiviert ist, wird der Browserverlauf nicht gespeichert, die Tab-Synchronisierung ist deaktiviert und Nutzer können diese Einstellung nicht ändern.
 
       Ist die Richtlinie deaktiviert oder nicht konfiguriert, wird der Browserverlauf gespeichert.</translation>
+<translation id="3387875422525138489">Wenn diese Richtlinie konfiguriert ist, wird eine Liste isolierter Web-Apps (IWAs) angegeben, die automatisch installiert werden.
+      IWAs sind Anwendungen mit nützlichen Sicherheitsfunktionen, die normalen Webseiten nicht zur Verfügung stehen. Sie sind in einem signierten Web Bundle verpackt. Der öffentliche Schlüssel des signierten Web Bundles wird verwendet, um eine Web-Bundle‑ID zu erstellen, mit der die IWA identifiziert wird.
+      Bisher funktioniert diese Richtlinie nur bei verwalteten Gastsitzungen.
+
+      Jedes Listenelement der Richtlinie ist ein Objekt, das zwei Pflichtfelder hat: das Update-Manifest „<ph name="URL_LABEL" />“ und die Web-Bundle‑ID der isolierten Web-App.
+
+      Jedes Element kann auch diese optionalen Felder enthalten:
+
+        * <ph name="UPDATE_CHANNEL_OPTION" />: Der Name des Release-/Updatekanals der IWA. Wenn die Richtlinie nicht konfiguriert ist, wird „default“ verwendet.
+        * <ph name="PINNED_VERSION_OPTION" />: Eine bestimmte Version, die installiert werden soll. Das System versucht, diese Version zu installieren, sofern sie im angegebenen Updatekanal verfügbar ist. Wenn eine IWA in einer bestimmten Version angepinnt wird, verhindert das standardmäßig, dass sie über diese Version hinaus aktualisiert wird. Zum Loslösen muss dieses Feld entfernt werden.
+        * <ph name="ALLOW_DOWNGRADES_OPTION" />: Ermöglicht die Installation älterer Versionen der IWA. Dazu muss das Feld „pinned_version“ festgelegt sein. Wenn es nicht angegeben oder auf „<ph name="FALSE" />“ festgelegt ist, ist ein Downgrade für diese IWA deaktiviert.</translation>
 <translation id="3387999258705169775">Standardverhalten für die verschachtelte Mindestverzögerung der Funktion „setTimeout()“.</translation>
 <translation id="3388628790024977864"><ph name="CLOUD_UPLOAD_NAME" />-Ablauf für <ph name="GOOGLE_DRIVE_NAME" /> und <ph name="GOOGLE_WORKSPACE_NAME" /> nicht zulassen</translation>
 <translation id="3389088527709746815">Gnubby-Authentifizierung für den Host für den Remote-Zugriff aktivieren</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 4dc18c1..43c0ae7 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -265,6 +265,7 @@
 <translation id="117080706484659953">Autorisez la détection du champ d'application des règles sur <ph name="MAC_OS_NAME" /></translation>
 <translation id="1171106901454883937">Activer les rapports sur les informations sur la version de l'appareil</translation>
 <translation id="1173493742686115032">Activer <ph name="SEARCH_SIDE_PANEL_FEATURE_NAME" /> sur toutes les pages Web</translation>
+<translation id="1176740714945046981">Active la fonctionnalité de retour à une version antérieure pour les AWI. Par défaut, seules les versions les plus récentes des AWI sont installées. Si vous définissez cette option sur <ph name="TRUE" />, vous pouvez également installer des versions antérieures. Pour activer le retour à une version antérieure, vous devez spécifier la valeur de la version souhaitée à l'aide du champ "pinned_version". Si aucune valeur n'est fournie pour "allow_downgrades" ou qu'il est défini sur <ph name="FALSE" />, le retour à une version antérieure est désactivé pour cette AWI.</translation>
 <translation id="1177624681620856105"> Cette règle permet de spécifier si la case "Toujours ouvrir" doit être affichée ou non dans une invite de confirmation du lancement d'un protocole externe.
 
       Si cette règle est définie sur "True", lorsqu'une invite de confirmation de lancement d'un protocole externe s'affiche, l'utilisateur peut sélectionner l'option "Toujours autoriser" pour ignorer par la suite les invites de confirmation concernant son lancement.
@@ -3217,6 +3218,17 @@
 <translation id="3387211681524224831">Si cette règle est activée, l'historique de navigation n'est pas enregistré, la synchronisation des onglets est désactivée et les utilisateurs ne peuvent pas modifier ce paramètre.
 
       Si cette règle est désactivée ou si elle n'est pas configurée, l'historique de navigation est enregistré.</translation>
+<translation id="3387875422525138489">Cette règle permet d'établir la liste des applis Web isolées (AWI) qui s'installent de manière autonome.
+      Les AWI sont des applis avec des propriétés de sécurité utiles qui ne sont pas disponibles pour les pages Web normales. Elles sont empaquetées dans un bundle Web signé. La clé publique de ce bundle sert à créer l'ID du bundle Web qui identifie l'AWI.
+      Pour l'instant, cette règle ne fonctionne que pour les sessions Invité gérées.
+
+      Chaque élément de la règle correspond à un objet avec deux champs obligatoires : l'<ph name="URL_LABEL" /> du fichier manifeste de mise à jour et l'ID de bundle Web de l'appli Web isolée.
+
+      Chaque élément peut également comporter ces champs facultatifs :
+
+        * <ph name="UPDATE_CHANNEL_OPTION" /> : le nom du canal de version/mise à jour de l'AWI. Si cette règle n'est pas définie, "default" est utilisé.
+        * <ph name="PINNED_VERSION_OPTION" /> : version spécifique à installer. Le système tentera d'installer cette version si elle est disponible sur le canal de mise à jour spécifié. Par défaut, épingler une AWI sur une version spécifique empêche sa mise à jour au-delà de cette version. Pour retirer l'épingle, supprimez ce champ.
+        * <ph name="ALLOW_DOWNGRADES_OPTION" /> : permet d'installer des versions antérieures de l'AWI. Pour cela, vous devez définir le champ "pinned_version". Si aucune valeur n'est fournie ou s'il est défini sur <ph name="FALSE" />, le retour à une version antérieure est désactivé pour cette AWI.</translation>
 <translation id="3387999258705169775">Comportement par défaut pour la limitation imbriquée de la fonction setTimeout().</translation>
 <translation id="3388628790024977864">Interdire le flux <ph name="CLOUD_UPLOAD_NAME" /> pour <ph name="GOOGLE_DRIVE_NAME" /> et <ph name="GOOGLE_WORKSPACE_NAME" /></translation>
 <translation id="3389088527709746815">Activer l'authentification gnubby pour l'hôte d'accès à distance</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index a8715c6..72d6a61 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -148,6 +148,11 @@
 <translation id="1059069692400941670">Disabilita l'importazione del motore di ricerca predefinito alla prima esecuzione</translation>
 <translation id="1062011392452772310">Attivazione dell'attestazione da remoto per il dispositivo</translation>
 <translation id="1062407476771304334">Sostituisci</translation>
+<translation id="1062460877136455375">La configurazione della policy consente di specificare quali app web isolate (IWA) non potranno connettersi ai lettori di smart card (non verrà nemmeno chiesto agli utenti di concedere l'autorizzazione). Questa policy accetta i caratteri jolly. Ad esempio, <ph name="ALL_ISOLATED_WEB_APPS" /> bloccherà l'accesso per tutte le IWA.
+
+       Viene eseguito l'override di questa policy da SmartCardConnectAllowedForUrls; in particolare, se il valore di una lista bloccata è <ph name="ALL_ISOLATED_WEB_APPS" />, nessuna IWA potrà connettersi ai lettori di smart card (non verrà nemmeno chiesto agli utenti di concedere l'autorizzazione), ad eccezione di quelle elencate in SmartCardConnectAllowedForUrls.
+
+       Per impostazione predefinita, le app web isolate che specificano le autorizzazioni per le smart card all'interno del manifest possono connettersi alle smart card a condizione che l'utente conceda l'autorizzazione in modo interattivo per ogni lettore.</translation>
 <translation id="1063860513136880926">Se il criterio viene impostato su Attivato, gli screenshot acquisiti con scorciatoie da tastiera o API di estensioni non sono consentiti. Se il criterio viene impostato su Disattivato o se non viene configurato, gli screenshot sono consentiti.
 
 Tieni presente che su <ph name="MS_WIN_NAME" />, <ph name="MAC_OS_NAME" /> e <ph name="LINUX_OS_NAME" /> gli screenshot acquisiti con applicazioni del sistema operativo o di terze parti sono consentiti.</translation>
@@ -5782,6 +5787,7 @@
 Se non viene configurato, il valore predefinito è 0 e gli utenti sono liberi di modificarlo. In questo caso, il valore predefinito non viene applicato nuovamente al riavvio.</translation>
 <translation id="5257395339965216304">Dati app ospitate</translation>
 <translation id="5258445772095084618">Consenti agli utenti non affiliati di usare le macchine virtuali necessarie per supportare le app Linux</translation>
+<translation id="5258651513421638932">Consenti la connessione della smart card da parte delle app isolate</translation>
 <translation id="5262320080678421295">Disattiva attendibilità nei certificati emessi dall'Infrastruttura a chiave pubblica precedente di Symantec Corporation</translation>
 <translation id="5265613843467285323">Mostra un'opzione di attivazione/disattivazione dell'interfaccia utente per escludere un display in modalità Specchio.</translation>
 <translation id="5272332743749468542">Rendi disponibile per l'utente l'opzione Escludi questo display in modalità Specchio</translation>
@@ -6738,6 +6744,7 @@
 <translation id="5945312246863177268">Non consente agli utenti di fare clic sulla notifica di Phone Hub per avviare l'applicazione Eche.</translation>
 <translation id="5946082169633555022">Canale Beta</translation>
 <translation id="5946329690214660966">Imposta una pianificazione personalizzata per verificare la presenza di aggiornamenti</translation>
+<translation id="5946401994049024050">Impostazioni di connessione alle smart card</translation>
 <translation id="5950069117106131681">Se il criterio viene impostato su Attivato, vengono attivati intestazioni e piè di pagina nell'anteprima di stampa. Se il criterio viene impostato su Disattivato, questi elementi vengono disattivati nell'anteprima di stampa.
 
       Se il criterio viene configurato, gli utenti non possono modificarlo. In caso contrario, gli utenti possono decidere se visualizzare o meno intestazioni e piè di pagina.</translation>
@@ -8793,6 +8800,7 @@
       Se il criterio viene impostato su Disattivato o se non viene configurato, i dispositivi registrati non registrano o non segnalano lo stato di sicurezza TPM.
       Eccezione: le informazioni relative a TPM vengono controllate tramite il criterio <ph name="REPORT_DEVICE_HARDWARE_STATUS" /> per M95 e versioni precedenti.</translation>
 <translation id="739556497251174388">Consenti il riutilizzo delle credenziali di accesso di <ph name="PRODUCT_OS_NAME" /> per l'autenticazione della rete</translation>
+<translation id="7395790871181951311">Blocca la connessione della smart card da parte delle app isolate</translation>
 <translation id="7400208209734208176">Apri i link nel browser Chrome per impostazione predefinita</translation>
 <translation id="7402257017733669351">Impedisci al processo del browser di creare codice dinamico</translation>
 <translation id="7402772023599097052">Se il criterio viene attivato o se non viene configurato, vengono mostrati avvisi di sicurezza quando flag della riga di comando potenzialmente pericolosi vengono utilizzati per avviare Chrome.
@@ -9426,6 +9434,11 @@
 
 Questo criterio non avrà alcun effetto se il criterio <ph name="SCREENSAVER_LOCK_SCREEN_ENABLED_POLICY_NAME" /> viene impostato su false.</translation>
 <translation id="7912255076272890813">Configura tipi di app/estensioni consentiti</translation>
+<translation id="7912541841840197488">La configurazione della policy consente di specificare quali app web isolate (IWA) possono connettersi alle smart card utilizzando l'API Web Smart Card senza richiedere all'utente l'autorizzazione. Questa policy non accetta caratteri jolly.
+
+       Questa policy esegue l'override di SmartCardConnectBlockedForUrls; in particolare, un valore della lista bloccata di <ph name="ALL_ISOLATED_WEB_APPS" /> significa che nessuna IWA potrà connettersi ai lettori di smart card (non verrà nemmeno chiesto agli utenti di concedere l'autorizzazione), ad eccezione di quelle elencate in SmartCardConnectAllowedForUrls.
+
+       Per impostazione predefinita, le app web isolate che specificano le autorizzazioni per le smart card all'interno del manifest possono connettersi alle smart card a condizione che l'utente conceda l'autorizzazione in modo interattivo per ogni lettore.</translation>
 <translation id="791267408364877739">Mostra avvisi di sicurezza quando vengono usati flag della riga di comando potenzialmente pericolosi</translation>
 <translation id="7919665519909231619">Consenti l'attivazione della funzionalità della lista della spesa</translation>
 <translation id="7922358664346625612">Mantieni l'ultima scheda aperta in Chrome.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 4747a9c..469a57a 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -264,6 +264,7 @@
 <translation id="117080706484659953">Разрешить обнаружение области действия правил на устройствах с <ph name="MAC_OS_NAME" /></translation>
 <translation id="1171106901454883937">Включить отправку данных о версии устройства</translation>
 <translation id="1173493742686115032"><ph name="SEARCH_SIDE_PANEL_FEATURE_NAME" />: включить на всех веб-страницах</translation>
+<translation id="1176740714945046981">Разрешает переходить на более ранние версии изолированных веб-приложений. По умолчанию устанавливаются только их новые версии. Когда выбрано значение <ph name="TRUE" />, можно также устанавливать более ранние версии. Чтобы разрешить переход на более раннюю версию, нужно указать ее в поле pinned_version. Если правило allow_downgrades не настроено или установлено значение <ph name="FALSE" />, переходить на более раннюю версию изолированного веб-приложения запрещено.</translation>
 <translation id="1177624681620856105"> Это правило определяет, будет ли отображаться флажок "Запомнить мой выбор для этого типа ссылок" в запросах о подтверждении запуска внешнего протокола.
 
       Если правило не настроено или для него указано значение True, в окне подтверждения запуска внешнего протокола пользователь может установить флажок "Запомнить мой выбор для этого типа ссылок", чтобы в дальнейшем запускать протокол на этом сайте без запроса.
@@ -3221,6 +3222,17 @@
 <translation id="3387211681524224831">Если это правило включено, история браузера не сохраняется, синхронизация вкладок не выполняется и пользователи не могут изменить этот параметр.
 
       Если правило отключено или не настроено, история браузера сохраняется.</translation>
+<translation id="3387875422525138489">Правило позволяет указать список изолированных веб-приложений, которые будут устанавливаться без уведомлений.
+      Это приложения, которые обладают полезными параметрами безопасности, недоступными для обычных веб-страниц, и распространяются в виде веб-пакетов с подписью. С помощью открытого ключа веб-пакета с подписью создается идентификатор веб-пакета для изолированного веб-приложения.
+      Сейчас это правило работает только для управляемых гостевых сеансов.
+
+      Каждый элемент списка представляет собой объект с двумя обязательными для заполнения полями. Первое – <ph name="URL_LABEL" /> манифеста обновления. Второе – идентификатор веб-пакета. Оба поля относятся к изолированному веб-приложению.
+
+      У каждого элемента могут быть дополнительные поля:
+
+        * <ph name="UPDATE_CHANNEL_OPTION" /> содержит название канала выпуска или обновления изолированного веб-приложения. Если поле не заполнено, используется значение по умолчанию.
+        * <ph name="PINNED_VERSION_OPTION" /> позволяет выбрать определенную версию для установки. Система попытается установить ее при условии, что версия доступна на указанном канале обновления. По умолчанию, если закрепить определенную версию изолированного веб-приложения, нельзя будет устанавливать обновления, вышедшие после этой версии. Чтобы открепить версию, удалите это поле.
+        * <ph name="ALLOW_DOWNGRADES_OPTION" /> разрешает устанавливать более ранние версии изолированного веб-приложения. Нужную версию необходимо указать в поле pinned_version. Если правило не настроено или установлено значение <ph name="FALSE" />, переходить на более раннюю версию изолированного веб-приложения запрещено.</translation>
 <translation id="3387999258705169775">Поведение по умолчанию для минимального времени задержки вложенной функции setTimeout()</translation>
 <translation id="3388628790024977864">Запретить функцию "<ph name="CLOUD_UPLOAD_NAME" />" для <ph name="GOOGLE_WORKSPACE_NAME" /> и сервиса "<ph name="GOOGLE_DRIVE_NAME" />"</translation>
 <translation id="3389088527709746815">Включить аутентификацию Gnubby для хостов удаленного доступа</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index d17e40c5..781c7947 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -264,6 +264,7 @@
 <translation id="117080706484659953"><ph name="MAC_OS_NAME" /> işletim sisteminde politika kapsamını algılamaya izin ver</translation>
 <translation id="1171106901454883937">Cihaz sürüm bilgisi raporlamasını etkinleştir</translation>
 <translation id="1173493742686115032"><ph name="SEARCH_SIDE_PANEL_FEATURE_NAME" /> öğesini tüm web sayfalarında etkinleştir</translation>
+<translation id="1176740714945046981">Yalıtılmış web uygulamaları (IWA'lar) için eski sürüme geçirme özelliğini etkinleştirir. Varsayılan olarak yalnızca IWA'ların yeni sürümleri yüklenir. <ph name="TRUE" /> değerine ayarlandığında eski sürümleri de yükleyebilirsiniz. Eski sürüme geçirmeyi etkinleştirmek için "pinned_version" alanı kullanılarak istenen sürüm değeri belirtilmelidir. "allow_downgrades" belirtilmezse veya <ph name="FALSE" /> değerine ayarlanırsa ilgili IWA için eski sürüme geçirme devre dışı bırakılır.</translation>
 <translation id="1177624681620856105"> Bu politika, harici protokol başlatma onayı istemlerinde "Her zaman aç" onay kutusunun gösterilip gösterilmeyeceğini kontrol eder.
 
       Bu politika True (Doğru) değerine ayarlanırsa veya hiç ayarlanmazsa bir harici protokol onayı gösterildiğinde, kullanıcı ileride bu sitede tüm protokol onay istemlerini atlamak için "Her zaman izin ver"i seçebilir.
@@ -3270,6 +3271,17 @@
 <translation id="3387211681524224831">Politika, Etkin değerine ayarlanırsa tarama geçmişi kaydedilmez, sekme senkronizasyonu kapalı olur ve kullanıcılar bu ayarı değiştiremez.
 
       Politika, Devre dışı değerine ayarlanır veya ayarlanmadan bırakılırsa tarama geçmişi kaydedilir.</translation>
+<translation id="3387875422525138489">Politika ayarlanırsa sessiz bir şekilde yüklenen izole web uygulamalarının (IWA) listesi belirtilir.
+      IWA'lar, normal web sayfalarında mevcut olmayan yararlı güvenlik özelliklerine sahip uygulamalardır. Bunlar, imzalanmış Web Bundle'da yer alır. İmzalanmış Web Bundle'ın ortak anahtarı, IWA'yı tanımlayan Web Bundle kimliğini oluşturmak için kullanılır.
+      Bu politika şimdilik yalnızca yönetilen misafir oturumunda geçerlidir.
+
+      Politikanın her liste öğesi, iki zorunlu alan içeren bir nesnedir: <ph name="URL_LABEL" /> güncelleme manifesti ve yalıtılmış web uygulamasının web paketi kimliği.
+
+      Her öğede şu isteğe bağlı alanlar da bulunabilir:
+
+        * <ph name="UPDATE_CHANNEL_OPTION" />: IWA sürüm/güncelleme kanalının adı. Ayarlanmazsa "varsayılan" kullanılır.
+        * <ph name="PINNED_VERSION_OPTION" />:  Yüklenecek sürüm. Sistem, belirtilen güncelleme kanalında varsa bu sürümü yüklemeyi dener. IWA'yı belirli bir sürüme sabitlerseniz bu sürümden sonraki sürümlere güncellenmesi varsayılan olarak engellenir. Sabitlemeyi kaldırmak için bu alanı kaldırın.
+        * <ph name="ALLOW_DOWNGRADES_OPTION" />: IWA'nın eski sürümlerinin yüklenmesini etkinleştirir. Bunun için "pinned_version" alanının ayarlanması gerekir. Belirtilmez veya <ph name="FALSE" /> değerine ayarlanırsa ilgili IWA için eski sürüme geçirme devre dışı bırakılır.</translation>
 <translation id="3387999258705169775">setTimeout() fonksiyonu iç içe yerleştirilmiş zaman aşımı için varsayılan davranış.</translation>
 <translation id="3388628790024977864"><ph name="GOOGLE_DRIVE_NAME" /> ve <ph name="GOOGLE_WORKSPACE_NAME" /> için <ph name="CLOUD_UPLOAD_NAME" /> akışına izin verme</translation>
 <translation id="3389088527709746815">Uzaktan erişim ana makinesi için gnubby kimlik doğrulamayı etkinleştir</translation>
@@ -4172,7 +4184,7 @@
 
 * Yetişkinlere uygun içerik için siteleri filtreleme seçeneğine ayarlanırsa pornografik siteler filtrelenir.
 
-Politika, hem kullanıcının gittiği URL hem de iframe'ler için geçerlidir. <ph name="URL_ALLOWLIST_POLICY_NAME" /> politikası bu politikaya göre daha önceliklidir ve Google Güvenli Arama API kararlarını geçersiz kılmak için kullanılabilir.</translation>
+Politika, hem kullanıcının gittiği URL hem de iframe'ler için geçerlidir. <ph name="URL_ALLOWLIST_POLICY_NAME" /> politikası bu politikaya göre daha önceliklidir ve Google Safe Search API kararlarını geçersiz kılmak için kullanılabilir.</translation>
 <translation id="4051723201852944592">Pencere Kapamayı Etkinleştir</translation>
 <translation id="4052529125939620019">CryptoToken bileşen uzantısını başlangıçta yükle</translation>
 <translation id="4053157306171963473">Cihaz etkinlik zamanı raporlamasını devre dışı bırak</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 3c49ab8..5715582 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -265,6 +265,7 @@
 <translation id="117080706484659953">Дозволити виявлення області дії правил для <ph name="MAC_OS_NAME" /></translation>
 <translation id="1171106901454883937">Увімкнути звіти про версії пристрою</translation>
 <translation id="1173493742686115032">Увімкнути <ph name="SEARCH_SIDE_PANEL_FEATURE_NAME" /> на всіх веб-сторінках</translation>
+<translation id="1176740714945046981">За допомогою цього правила можна ввімкнути перехід ізольованих вебдодатків (IWA) на більш ранні версії. За умовчанням встановлюються лише новіші версії ізольованих вебдодатків. Якщо вибрати значення <ph name="TRUE" />, також можна буде встановлювати старіші версії. Щоб увімкнути перехід на більш ранню версію, потрібно вказати значення потрібної версії в полі pinned_version. Якщо поле allow_downgrades не налаштувати або вибрати для нього значення <ph name="FALSE" />, для відповідного ізольованого вебдодатка буде вимкнено перехід на більш ранню версію.</translation>
 <translation id="1177624681620856105"> Це правило дає змогу вказати, чи відображати опцію "Завжди відкривати" в запитах щодо підтвердження запуску протоколу.
 
       Якщо для цього правила вибрано значення true або його не налаштовано, під час показу запиту на підтвердження зовнішнього протоколу користувач може вибрати опцію "Завжди дозволяти", щоб не бачити такі запити в майбутньому.
@@ -3256,6 +3257,17 @@
 <translation id="3387211681524224831">Якщо це правило активовано, історія веб-перегляду не зберігається, а вкладки не синхронізуються. Користувачі не можуть змінити цей параметр.
 
       Якщо це правило деактивовано або не налаштовано, історія веб-перегляду зберігається.</translation>
+<translation id="3387875422525138489">За допомогою цього правила можна вказати список ізольованих вебдодатків (IWA), які встановлюватимуться автоматично.
+      Ці додатки мають корисні властивості щодо безпеки, недоступні для звичайних вебсторінок. Їх запаковано в пакет Signed Web Bundle. За допомогою відкритого ключа пакета Signed Web Bundle створюється ідентифікатор пакета Web Bundle, який визначає ізольований вебдодаток.
+      Зараз це правило доступне лише для керованих сеансів у режимі "Гість".
+
+      Кожний елемент списку правила – це об’єкт із двома обов’язковими полями: маніфестом оновлення <ph name="URL_LABEL" /> і ідентифікатором пакета Web Bundle ізольованого вебдодатка.
+
+      Крім того, кожен елемент може мати такі необов’язкові поля:
+
+        * <ph name="UPDATE_CHANNEL_OPTION" />: назва каналу оновлення або випуску ізольованого вебдодатка. Якщо не вказано, використовується значення default.
+        * <ph name="PINNED_VERSION_OPTION" />: конкретна версія для встановлення. Система спробує встановити цю версію, якщо вона доступна в указаному каналі оновлень. Закріпивши версію ізольованого вебдодатка, за умовчанням ви не зможете встановити новіші версії. Щоб відкріпити ізольований вебдодаток, вилучіть це поле.
+        * <ph name="ALLOW_DOWNGRADES_OPTION" />: дає змогу встановлювати старіші версії ізольованого вебдодатка. Для цього потрібно налаштувати поле pinned_version. Якщо його не налаштувати або вибрати для нього значення <ph name="FALSE" />, для відповідного ізольованого вебдодатка буде вимкнено перехід на більш ранню версію.</translation>
 <translation id="3387999258705169775">Поведінка за умовчанням для обмежених значень для вкладень функції setTimeout().</translation>
 <translation id="3388628790024977864">Заборонити процес <ph name="CLOUD_UPLOAD_NAME" /> для сервісів <ph name="GOOGLE_DRIVE_NAME" /> і <ph name="GOOGLE_WORKSPACE_NAME" /></translation>
 <translation id="3389088527709746815">Увімкнути автентифікацію Gnubby для хосту віддаленого доступу</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 09788c5..530a47eb 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -265,6 +265,7 @@
 <translation id="117080706484659953">允许在 <ph name="MAC_OS_NAME" /> 上检测政策范围</translation>
 <translation id="1171106901454883937">启用设备版本信息报告功能</translation>
 <translation id="1173493742686115032">允许在所有网页上使用 <ph name="SEARCH_SIDE_PANEL_FEATURE_NAME" /></translation>
+<translation id="1176740714945046981">为 IWA 启用降级功能。默认情况下,系统仅会安装较新版本的 IWA。如果设置为 <ph name="TRUE" />,您还可以安装旧版本。如需启用降级功能,必须使用“pinned_version”字段指定所需的版本值。如果“allow_downgrades”未经设置或设为 <ph name="FALSE" />,系统会停用该 IWA 的降级功能。</translation>
 <translation id="1177624681620856105"> 此政策用于控制在出现外部协议启动确认提示时是否显示“始终打开”复选框。
 
       如果您将此政策设为 true 或不设置此政策,当系统显示外部协议确认提示时,用户可选择“始终打开”,以跳过系统未来会在此网站中显示的所有针对该协议的确认提示。
@@ -3204,6 +3205,17 @@
 <translation id="3387211681524224831">如果此政策已启用,系统将不会保存浏览记录,并且会停用标签页同步功能,用户则无法更改相关设置。
 
       如果此政策已停用或未设置,系统将会保存浏览记录。</translation>
+<translation id="3387875422525138489">设置此政策将指定一系列静默安装的独立式 Web 应用 (IWA)。
+      IWA 拥有普通网页不具备的实用安全属性。IWA 会被打包成经过签名的 Web 软件包。经过签名的 Web 软件包的公钥用于创建可标识 IWA 的 Web 软件包 ID。
+      截至目前,此政策仅适用于受管理的访客会话。
+
+      此政策的每个列表项都是一个对象,包含两个必填字段:更新清单<ph name="URL_LABEL" />和 IWA 的 Web 软件包 ID。
+
+     每个列表项还可以包含以下可选字段:
+
+        * <ph name="UPDATE_CHANNEL_OPTION" />:IWA 发布/更新渠道名称。如果未设置此政策,系统会使用“default”。
+        * <ph name="PINNED_VERSION_OPTION" />:要安装的特定版本。如果指定的更新渠道上有此版本,系统会尝试安装此版本。默认情况下,将 IWA 固定到特定版本后,它将无法更新到该版本之后的版本。若要取消固定,请移除此字段。
+        * <ph name="ALLOW_DOWNGRADES_OPTION" />:支持安装旧版 IWA。这需要设置“pinned_version”字段。如果此政策未经设置或设为 <ph name="FALSE" />,系统会停用该 IWA 的降级功能。</translation>
 <translation id="3387999258705169775">为嵌套的 setTimeout() 函数强制限制值的默认行为。</translation>
 <translation id="3388628790024977864">禁止 <ph name="GOOGLE_DRIVE_NAME" />和 <ph name="GOOGLE_WORKSPACE_NAME" /> 使用<ph name="CLOUD_UPLOAD_NAME" />流程</translation>
 <translation id="3389088527709746815">针对远程访问主机启用 gnubby 身份验证</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 27307ad..54624c29 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -3878,7 +3878,7 @@
 <translation id="7953236668995583915">يُرجى إعادة تحميل هذه الصفحة لتطبيق الإعدادات المعدَّلة على هذا الموقع الإلكتروني.</translation>
 <translation id="7953569069500808819">خزم الحواف من الأعلى</translation>
 <translation id="7955105108888461311">الطلب شخصيًا</translation>
-<translation id="7956713633345437162">الإشارات المرجعية على الجوّال</translation>
+<translation id="7956713633345437162">الإشارات المرجعية للجوّال</translation>
 <translation id="7961015016161918242">مطلقًا</translation>
 <translation id="7962467575542381659">جهاز النظام الأساسي</translation>
 <translation id="7966803981046576691">نوع حساب المهمة</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index c7032f9a..e1f2a56 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Висока</translation>
 <translation id="7304562222803846232">Управление на настройките за поверителност за профила в Google</translation>
 <translation id="7305756307268530424">Стартиране с по-бавна скорост</translation>
+<translation id="7307063504147610123">Адресът е запазен на това устройство</translation>
 <translation id="7308436126008021607">синхронизиране на заден план</translation>
 <translation id="7309058266849426521">Научете повече за управлението на поверителността при рекламите в Chrome.</translation>
 <translation id="7310392214323165548">Устройството ще се рестартира много скоро</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 мм</translation>
 <translation id="8473863474539038330">Адреси и др.</translation>
 <translation id="8474910779563686872">Показване на подробностите за програмисти</translation>
+<translation id="8476959635632921417">Потвърдете, че сте вие, за да запазите и използвате този адрес на всичките си устройства</translation>
 <translation id="8479754468255770962">Телбодиране долу вляво</translation>
 <translation id="8483229036294884935">Този адрес ще бъде изтрит от профила ви в Google (<ph name="ACCOUNT" />)</translation>
 <translation id="8488350697529856933">Прилага се към</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 5fabbdf..bd0b056 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">বেশি</translation>
 <translation id="7304562222803846232">Google অ্যাকাউন্টের গোপনীয়তা সেটিংস ম্যানেজ করুন</translation>
 <translation id="7305756307268530424">কম স্পিডে শুরু করুন</translation>
+<translation id="7307063504147610123">এই ডিভাইসে ঠিকানা সেভ করা হয়েছে</translation>
 <translation id="7308436126008021607">ব্যাকগ্রাউন্ড সিঙ্ক</translation>
 <translation id="7309058266849426521">Chrome-এ আপনার বিজ্ঞাপন সংক্রান্ত গোপনীয়তা ম্যানেজ করা সম্পর্কে আরও জানুন।</translation>
 <translation id="7310392214323165548">ডিভাইস খুব শীঘ্রই রিস্টার্ট হবে</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">৩০০ x ৪৫০ মিমি</translation>
 <translation id="8473863474539038330">ঠিকানা ও আরও অনেককিছু</translation>
 <translation id="8474910779563686872">ডেভেলপারের বিবরণ দেখান</translation>
+<translation id="8476959635632921417">আপনার সব ডিভাইসে এই ঠিকানা সেভ ও ব্যবহার করতে, নিজের পরিচয় যাচাই করুন</translation>
 <translation id="8479754468255770962">নিচে বাঁদিকে স্টেপল করুন</translation>
 <translation id="8483229036294884935">এই ঠিকানাটি আপনার Google অ্যাকাউন্ট থেকে মুছে ফেলা হবে, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">এতে প্রয়োগ হয়</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 7e01d2a..91c6cdc 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -3493,7 +3493,7 @@
 <translation id="7304030187361489308">Visoko</translation>
 <translation id="7304562222803846232">Upravljajte postavkama privatnosti Google računa</translation>
 <translation id="7305756307268530424">Počni sporije</translation>
-<translation id="7307063504147610123">Adresa je spremljena na ovaj uređaj</translation>
+<translation id="7307063504147610123">Adresa je sačuvana na uređaj</translation>
 <translation id="7308436126008021607">sinhronizacija u pozadini</translation>
 <translation id="7309058266849426521">Više informacija o upravljanju privatnošću pri izloženosti oglasima u Chromeu.</translation>
 <translation id="7310392214323165548">Uređaj će se veoma brzo ponovo pokrenuti</translation>
@@ -4171,7 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adrese i još mnogo toga</translation>
 <translation id="8474910779563686872">Prikaži detalje o programeru</translation>
-<translation id="8476959635632921417">Da biste spremili i upotrebljavali tu adresu na svim svojim uređajima, potvrdite da ste to vi</translation>
+<translation id="8476959635632921417">Potvrdite identitet da sačuvate i koristite ovu adresu na svim svojim uređajima</translation>
 <translation id="8479754468255770962">Bušenje u donjem lijevom uglu</translation>
 <translation id="8483229036294884935">Adresa će se izbrisati s Google računa <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Odnosi se na</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 98e30a94..8cf0e497 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Alt</translation>
 <translation id="7304562222803846232">Gestiona la configuració de privadesa del Compte de Google</translation>
 <translation id="7305756307268530424">Inicia més a poc a poc</translation>
+<translation id="7307063504147610123">L'adreça s'ha desat en aquest dispositiu</translation>
 <translation id="7308436126008021607">sincronització en segon pla</translation>
 <translation id="7309058266849426521">Obtén més informació sobre com pots gestionar la privadesa d'anuncis a Chrome.</translation>
 <translation id="7310392214323165548">El dispositiu es reiniciarà aviat</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adreces i més</translation>
 <translation id="8474910779563686872">Mostra els detalls del desenvolupador</translation>
+<translation id="8476959635632921417">Per desar i utilitzar aquesta adreça en tots els dispositius, verifica la teva identitat</translation>
 <translation id="8479754468255770962">Grapat a la part inferior esquerra</translation>
 <translation id="8483229036294884935">Aquesta adreça se suprimirà del teu Compte de Google, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Objectiu d'aplicació</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 417ec02..c43a490 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -3487,6 +3487,7 @@
 <translation id="7304030187361489308">Vysoký</translation>
 <translation id="7304562222803846232">Spravovat nastavení ochrany soukromí v účtu Google</translation>
 <translation id="7305756307268530424">Začít pomaleji</translation>
+<translation id="7307063504147610123">Adresa se uložila do tohoto zařízení</translation>
 <translation id="7308436126008021607">synchronizace na pozadí</translation>
 <translation id="7309058266849426521">Přečtěte si další informace o správě ochrany soukromí v reklamách v Chromu</translation>
 <translation id="7310392214323165548">Zařízení se brzy restartuje</translation>
@@ -3691,7 +3692,7 @@
 <translation id="7631072086707140121">Adresa URL musí být https.</translation>
 <translation id="7631527008834753063">Televizní hry</translation>
 <translation id="7633909222644580952">Údaje o výkonu a přehledy selhání</translation>
-<translation id="7636346903338549690">Povolení používat soubory cookie třetích stran</translation>
+<translation id="7636346903338549690">Weby s povolením používat soubory cookie třetích stran</translation>
 <translation id="7637571805876720304">Odstranit platební kartu z prohlížeče Chromium?</translation>
 <translation id="7637586430889951925">{COUNT,plural, =0{Žádné}=1{V účtu máte 1 heslo (pro domény <ph name="DOMAIN_LIST" />)}few{V účtu máte # hesla (pro domény <ph name="DOMAIN_LIST" />)}many{V účtu máte # hesla (pro domény <ph name="DOMAIN_LIST" />)}other{V účtu máte # hesel (pro domény <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="7638605456503525968">Sériové porty</translation>
@@ -4164,6 +4165,7 @@
 <translation id="8473626140772740486">300 × 450 mm</translation>
 <translation id="8473863474539038330">Adresy a další</translation>
 <translation id="8474910779563686872">Zobrazit podrobnosti pro vývojáře</translation>
+<translation id="8476959635632921417">Pokud tuto adresu chcete uložit a používat na všech svých zařízeních, ověřte svou totožnost</translation>
 <translation id="8479754468255770962">Sponka vlevo dole</translation>
 <translation id="8483229036294884935">Tato adresa bude smazána z vašeho účtu Google (<ph name="ACCOUNT" />)</translation>
 <translation id="8488350697529856933">Platí pro</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index e231d83..d5c64c06 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -3492,6 +3492,7 @@
 <translation id="7304030187361489308">Uchel</translation>
 <translation id="7304562222803846232">Rheoli gosodiadau preifatrwydd eich Cyfrif Google</translation>
 <translation id="7305756307268530424">Dechrau yn arafach</translation>
+<translation id="7307063504147610123">Cyfeiriad wedi'i gadw i'r ddyfais hon</translation>
 <translation id="7308436126008021607">cysoni yn y cefndir</translation>
 <translation id="7309058266849426521">Dysgu rhagor am reoli eich preifatrwydd hysbysebion yn Chrome.</translation>
 <translation id="7310392214323165548">Bydd y ddyfais yn ailgychwyn yn fuan iawn</translation>
@@ -4169,6 +4170,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Cyfeiriadau a rhagor</translation>
 <translation id="8474910779563686872">Dangos manylion y datblygwr</translation>
+<translation id="8476959635632921417">I gadw a defnyddio'r cyfrinair hwn ar eich holl ddyfeisiau, cadarnhewch mai chi sydd yno</translation>
 <translation id="8479754468255770962">Stapl ar y chwith isaf</translation>
 <translation id="8483229036294884935">Bydd y cyfeiriad hwn yn cael ei ddileu o'ch Cyfrif Google, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Yn berthnasol i</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 004a259e..c6212957 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Højt</translation>
 <translation id="7304562222803846232">Administrer privatlivsindstillingerne for din Google-konto</translation>
 <translation id="7305756307268530424">Start langsommere</translation>
+<translation id="7307063504147610123">Adressen er gemt på denne enhed</translation>
 <translation id="7308436126008021607">synkronisering i baggrunden.</translation>
 <translation id="7309058266849426521">Få flere oplysninger om administration af privatliv vedrørende annoncering i Chrome.</translation>
 <translation id="7310392214323165548">Enheden genstarter meget snart</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adresser m.m.</translation>
 <translation id="8474910779563686872">Vis udvikleroplysninger</translation>
+<translation id="8476959635632921417">Verificer din identitet for at gemme og bruge denne adresse på alle dine enheder</translation>
 <translation id="8479754468255770962">Hæftning nederst til venstre</translation>
 <translation id="8483229036294884935">Denne adresse slettes fra din Google-konto, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Gælder for</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 3f52dbf..58759c3 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -3491,6 +3491,7 @@
 <translation id="7304030187361489308">Hoch</translation>
 <translation id="7304562222803846232">Datenschutzeinstellungen des Google-Kontos verwalten</translation>
 <translation id="7305756307268530424">Verlangsamen</translation>
+<translation id="7307063504147610123">Adresse auf diesem Gerät gespeichert</translation>
 <translation id="7308436126008021607">Hintergrundsynchronisierung</translation>
 <translation id="7309058266849426521">Weitere Informationen zum Verwalten des Datenschutzes bei Werbung in Chrome.</translation>
 <translation id="7310392214323165548">Das Gerät wird sehr bald neu gestartet</translation>
@@ -4168,6 +4169,7 @@
 <translation id="8473626140772740486">300 × 450 mm</translation>
 <translation id="8473863474539038330">Adressen und andere Daten</translation>
 <translation id="8474910779563686872">Entwicklerdetails anzeigen</translation>
+<translation id="8476959635632921417">Wenn du diese Adresse speichern und auf allen deinen Geräten verwenden möchtest, bestätige deine Identität</translation>
 <translation id="8479754468255770962">Heftklammer unten links</translation>
 <translation id="8483229036294884935">Diese Adresse wird aus deinem Google-Konto (<ph name="ACCOUNT" />) gelöscht</translation>
 <translation id="8488350697529856933">Gilt für</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 1b15a2a..19a9cdc 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -3495,6 +3495,7 @@
 <translation id="7304030187361489308">Υψηλός</translation>
 <translation id="7304562222803846232">Διαχείριση ρυθμίσεων απορρήτου Λογαριασμού Google</translation>
 <translation id="7305756307268530424">Έναρξη σε πιο αργή ταχύτητα</translation>
+<translation id="7307063504147610123">Η διεύθυνση αποθηκεύτηκε σε αυτή τη συσκευή</translation>
 <translation id="7308436126008021607">συγχρονισμός παρασκηνίου</translation>
 <translation id="7309058266849426521">Μάθετε περισσότερα σχετικά με τη διαχείριση του απορρήτου διαφημίσεων στο Chrome.</translation>
 <translation id="7310392214323165548">Θα γίνει επανεκκίνηση της συσκευής πολύ σύντομα</translation>
@@ -4172,6 +4173,7 @@
 <translation id="8473626140772740486">300 x 450 χιλ.</translation>
 <translation id="8473863474539038330">Διευθύνσεις και άλλα</translation>
 <translation id="8474910779563686872">Εμφάνιση λεπτομερειών προγραμματιστή</translation>
+<translation id="8476959635632921417">Για να αποθηκεύσετε και να χρησιμοποιήσετε αυτή τη διεύθυνση σε όλες τις συσκευές σας, επαληθεύστε την ταυτότητά σας</translation>
 <translation id="8479754468255770962">Συρραφή κάτω αριστερά</translation>
 <translation id="8483229036294884935">Η συγκεκριμένη διεύθυνση θα διαγραφεί από τον Λογαριασμό σας Google, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Ισχύει για</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index f09ecda..fc727eb 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Kõrge</translation>
 <translation id="7304562222803846232">Google’i konto privaatsusseadete haldamine</translation>
 <translation id="7305756307268530424">Aeglasemalt alustamine</translation>
+<translation id="7307063504147610123">Aadress on sellesse seadmesse salvestatud</translation>
 <translation id="7308436126008021607">taustal sünkroonimine</translation>
 <translation id="7309058266849426521">Lugege Chrome'is reklaamide privaatsuse haldamise kohta lisateavet.</translation>
 <translation id="7310392214323165548">Seade taaskäivitub peagi</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 × 450 mm</translation>
 <translation id="8473863474539038330">Aadressid ja muu</translation>
 <translation id="8474910779563686872">Kuva arendaja üksikasjad</translation>
+<translation id="8476959635632921417">Selle aadressi salvestamiseks ja kasutamiseks kõigis oma seadmetes kinnitage oma isik</translation>
 <translation id="8479754468255770962">Kirjaklamber vasakul all</translation>
 <translation id="8483229036294884935">See aadress kustutatakse teie Google'i kontolt <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Kehtib:</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 39905a3d..38bc1a0 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -3487,6 +3487,7 @@
 <translation id="7304030187361489308">Altua</translation>
 <translation id="7304562222803846232">Kudeatu Google-ko kontuaren pribatutasun-ezarpenak</translation>
 <translation id="7305756307268530424">Hasi motelago</translation>
+<translation id="7307063504147610123">Gorde da helbidea gailu honetan</translation>
 <translation id="7308436126008021607">atzeko planoko sinkronizazioa</translation>
 <translation id="7309058266849426521">Lortu informazio gehiago Chrome-n iragarkien pribatutasuna kudeatzeari buruz.</translation>
 <translation id="7310392214323165548">Gailua laster berrabiaraziko da</translation>
@@ -4164,6 +4165,7 @@
 <translation id="8473626140772740486">300 × 450 mm</translation>
 <translation id="8473863474539038330">Helbideak eta beste</translation>
 <translation id="8474910779563686872">Erakutsi garatzailearen xehetasunak</translation>
+<translation id="8476959635632921417">Helbidea gordetzeko eta zure gailu guztietan erabiltzeko, egiaztatu zeu zarela</translation>
 <translation id="8479754468255770962">Grapa bat behean, ezkerretara</translation>
 <translation id="8483229036294884935">Helbidea zure Google-ko kontutik (<ph name="ACCOUNT" />) ezabatuko da</translation>
 <translation id="8488350697529856933">Honi aplikatzen zaio:</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 372c2d6f..c27616b 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -3494,6 +3494,7 @@
 <translation id="7304030187361489308">Korkea</translation>
 <translation id="7304562222803846232">Tarkista Google-tilin yksityisyysasetukset</translation>
 <translation id="7305756307268530424">Aloita hitaampana</translation>
+<translation id="7307063504147610123">Osoite tallennettiin tälle laitteelle</translation>
 <translation id="7308436126008021607">taustasynkronointi</translation>
 <translation id="7309058266849426521">Lue lisää mainosyksityisyyden ylläpidosta Chromessa.</translation>
 <translation id="7310392214323165548">Laite käynnistyy pian uudelleen</translation>
@@ -4171,6 +4172,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Osoitteet ja muita tietoja</translation>
 <translation id="8474910779563686872">Näytä kehittäjätiedot</translation>
+<translation id="8476959635632921417">Vahvista henkilöllisyytesi, niin voit tallentaa osoitteen ja käyttää sitä kaikilla laitteillasi</translation>
 <translation id="8479754468255770962">Niitti vasemmassa alakulmassa</translation>
 <translation id="8483229036294884935">Osoite poistetaan Google-tililtäsi (<ph name="ACCOUNT" />)</translation>
 <translation id="8488350697529856933">Käyttöalue</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 5dff045..b8daed3 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Mataas</translation>
 <translation id="7304562222803846232">Pamahalaan ang mga setting ng privacy ng Google Account</translation>
 <translation id="7305756307268530424">Simulan nang mas mabagal</translation>
+<translation id="7307063504147610123">Na-save ang address sa device na ito</translation>
 <translation id="7308436126008021607">pag-sync sa background</translation>
 <translation id="7309058266849426521">Matuto pa tungkol sa pamamahala ng iyong privacy sa ad sa Chrome.</translation>
 <translation id="7310392214323165548">Malapit na malapit nang mag-restart ang device</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Mga address at higit pa</translation>
 <translation id="8474910779563686872">Ipakita ang mga detalye ng developer</translation>
+<translation id="8476959635632921417">Para i-save at gamitin ang address na ito sa lahat ng iyong device, i-verify na ikaw ito</translation>
 <translation id="8479754468255770962">Staple bottom left</translation>
 <translation id="8483229036294884935">Made-delete ang address na ito sa iyong Google Account na <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Nalalapat sa</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 8c8b132..b64ca2d 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -3494,6 +3494,7 @@
 <translation id="7304030187361489308">Aigu</translation>
 <translation id="7304562222803846232">Gérer les paramètres de confidentialité du compte Google</translation>
 <translation id="7305756307268530424">Vitesse plus lente</translation>
+<translation id="7307063504147610123">Adresse enregistrée sur cet appareil</translation>
 <translation id="7308436126008021607">synchronisation en arrière-plan</translation>
 <translation id="7309058266849426521">Découvrez comment gérer la confidentialité de vos annonces dans Chrome.</translation>
 <translation id="7310392214323165548">Redémarrage imminent</translation>
@@ -4171,6 +4172,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adresses et autres</translation>
 <translation id="8474910779563686872">Afficher les informations destinées aux développeurs</translation>
+<translation id="8476959635632921417">Pour enregistrer et utiliser cette adresse sur tous vos appareils, validez votre identité</translation>
 <translation id="8479754468255770962">Agrafe en bas à gauche</translation>
 <translation id="8483229036294884935">Cette adresse sera supprimée de votre compte Google, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">S'applique à</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index d68838a..99c00cb 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -3539,6 +3539,7 @@
 <translation id="7388594495505979117">{0,plural, =1{Il tuo dispositivo verrà riavviato tra 1 minuto}other{Il tuo dispositivo verrà riavviato tra # minuti}}</translation>
 <translation id="7393161616326137353">Giochi d'avventura</translation>
 <translation id="7393475648162498734">Mostra i premi e i vantaggi disponibili per le tue carte al momento del pagamento</translation>
+<translation id="7393971683644170444">Connessione al fornitore della carta in corso…</translation>
 <translation id="739728382607845710">Icona gestore pagamenti</translation>
 <translation id="7399616692258236448">Le richieste di posizione vengono bloccate automaticamente per tutti i siti, tranne per quelli autorizzati da te</translation>
 <translation id="7400418766976504921">URL</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index c0bde0a..5b3aae5 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -1858,7 +1858,7 @@
 <translation id="4277529130885813215">別のデバイスを使用</translation>
 <translation id="4277937682389409325">ローカル アドレス</translation>
 <translation id="4278090321534187713">この販売者が対応していないカードは無効になっています</translation>
-<translation id="4278390842282768270">許可</translation>
+<translation id="4278390842282768270">許可されています</translation>
 <translation id="4281245629646759298">ライトイエロー</translation>
 <translation id="4281998142035485137">{0,plural, =1{機密ファイルを開きますか?}other{機密ファイルを開きますか?}}</translation>
 <translation id="4282280603030594840">自動車販売</translation>
@@ -4419,7 +4419,7 @@
 <translation id="8957210676456822347">キャプティブ ポータル認証</translation>
 <translation id="8959282183248574156"><ph name="NICKNAME_COUNT" /> / <ph name="NICKNAME_MAX" /></translation>
 <translation id="8959288490306482616">薄茶 3</translation>
-<translation id="8963117664422609631">サイトの設定に移動します</translation>
+<translation id="8963117664422609631">サイトの設定に移動</translation>
 <translation id="8963213021028234748"><ph name="MARKUP_1" />アドバイス:<ph name="MARKUP_2" />データ接続があることを確認します<ph name="MARKUP_3" />このウェブページを後で再読み込みします<ph name="MARKUP_4" />入力したアドレスを確認します<ph name="MARKUP_5" /></translation>
 <translation id="8968766641738584599">カードを保存</translation>
 <translation id="8970887620466824814">エラーが発生しました。</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index 0af978a..954b2bc 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -3542,6 +3542,7 @@
 <translation id="7388594495505979117">{0,plural, =1{თქვენი მოწყობილობა გადაიტვირთება 1 წუთში}other{თქვენი მოწყობილობა გადაიტვირთება # წუთში}}</translation>
 <translation id="7393161616326137353">სათავგადასავლო თამაშები</translation>
 <translation id="7393475648162498734">აჩვენეთ, რომელი ჯილდოები და უპირატესობებია ხელმისაწვდომი თქვენი ბარათებისთვის შეკვეთის გაფორმების დროს</translation>
+<translation id="7393971683644170444">მიმდინარეობს თქვენი ბარათის პროვაიდერთან დაკავშირება...</translation>
 <translation id="739728382607845710">გადახდის დამმუშავებლის ხატულა</translation>
 <translation id="7399616692258236448">მდებარეობის მოთხოვნები ავტომატურად დაბლოკილია ყველა საიტისთვის, გარდა თქვენ მიერ დაშვებულისა</translation>
 <translation id="7400418766976504921">URL</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 240acf3a..d890bce 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -3491,6 +3491,7 @@
 <translation id="7304030187361489308">Жоғары</translation>
 <translation id="7304562222803846232">Google аккаунтының құпиялық параметрлерін басқару</translation>
 <translation id="7305756307268530424">Баяуырақ жылдамдықпен бастау</translation>
+<translation id="7307063504147610123">Мекенжай осы құрылғыға сақталды</translation>
 <translation id="7308436126008021607">фондық синхрондау</translation>
 <translation id="7309058266849426521">Chrome-да жарнамадағы құпиялықты басқару туралы толық ақпарат алыңыз.</translation>
 <translation id="7310392214323165548">Құрылғы сәлден соң өшіп, қайта қосылады.</translation>
@@ -4168,6 +4169,7 @@
 <translation id="8473626140772740486">300 x 450 мм</translation>
 <translation id="8473863474539038330">Мекенжайлар және басқа ақпарат</translation>
 <translation id="8474910779563686872">Әзірлеуші туралы мәліметтерді көрсету</translation>
+<translation id="8476959635632921417">Бұл мекенжайды барлық құрылғыңызда сақтау және пайдалану үшін жеке басыңызды растаңыз.</translation>
 <translation id="8479754468255770962">Төменгі сол жағын қапсыру</translation>
 <translation id="8483229036294884935">Бұл мекенжай Google аккаунтыңыздан (<ph name="ACCOUNT" />) жойылады.</translation>
 <translation id="8488350697529856933">Келесіге қолданылады</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 2ed5bec..69e8c83e 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -3491,6 +3491,7 @@
 <translation id="7304030187361489308">Бийик</translation>
 <translation id="7304562222803846232">Google аккаунтунун купуялык параметрлерин башкаруу</translation>
 <translation id="7305756307268530424">Жайдан баштоо</translation>
+<translation id="7307063504147610123">Дарек ушул түзмөккө сакталды</translation>
 <translation id="7308436126008021607">фондо шайкештирүү</translation>
 <translation id="7309058266849426521">Chrome'до жарнаманын купуялыгын тескөө тууралуу кеңири маалымат.</translation>
 <translation id="7310392214323165548">Түзмөк бир аздан кийин өчүп күйөт</translation>
@@ -4168,6 +4169,7 @@
 <translation id="8473626140772740486">300 x 450 мм.</translation>
 <translation id="8473863474539038330">Даректер жана башкалар</translation>
 <translation id="8474910779563686872">Иштеп чыгуучунун чоо-жайын көрүү</translation>
+<translation id="8476959635632921417">Бул даректи бардык түзмөктөрүңүздө сактап жана колдонуу үчүн сиз экениңизди ырастаңыз</translation>
 <translation id="8479754468255770962">Төмөнкү сол жагын илмек менен бекитүү</translation>
 <translation id="8483229036294884935">Бул дарек <ph name="ACCOUNT" /> Google аккаунтуңуздан өчүрүлөт</translation>
 <translation id="8488350697529856933">Төмөнкүгө колдонулат</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index d096e01a..9d9ec99 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -3544,6 +3544,7 @@
 <translation id="7388594495505979117">{0,plural, =1{Įrenginys bus paleistas iš naujo po vienos minutės}one{Įrenginys bus paleistas iš naujo po # minutės}few{Įrenginys bus paleistas iš naujo po # minučių}many{Įrenginys bus paleistas iš naujo po # minutės}other{Įrenginys bus paleistas iš naujo po # minučių}}</translation>
 <translation id="7393161616326137353">Nuotykių žaidimai</translation>
 <translation id="7393475648162498734">Atsiskaitant parodyti, kokios premijos ir privilegijos pasiekiamos kortelėms</translation>
+<translation id="7393971683644170444">Prisijungiama prie kortelės išdavėjo sistemos...</translation>
 <translation id="739728382607845710">Mokėjimo doroklės piktograma</translation>
 <translation id="7399616692258236448">Vietovės užklausos automatiškai blokuojamos visose svetainėse, išskyrus svetaines, kuriose leidote tai daryti</translation>
 <translation id="7400418766976504921">URL adresas</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index ccfcbc26..0b192aa8 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -3491,6 +3491,7 @@
 <translation id="7304030187361489308">Augsts</translation>
 <translation id="7304562222803846232">Pārvaldīt Google konta konfidencialitātes iestatījumus</translation>
 <translation id="7305756307268530424">Sākt lēnāk</translation>
+<translation id="7307063504147610123">Adrese ir saglabāta šajā ierīcē</translation>
 <translation id="7308436126008021607">sinhronizācija fonā</translation>
 <translation id="7309058266849426521">Uzzināt vairāk par reklāmu konfidencialitātes pārvaldību pārlūkā Chrome.</translation>
 <translation id="7310392214323165548">Ierīce ļoti drīz tiks restartēta</translation>
@@ -4168,6 +4169,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adreses un citi dati</translation>
 <translation id="8474910779563686872">Skatīt informāciju par izstrādātāju</translation>
+<translation id="8476959635632921417">Lai saglabātu un izmantotu šo adresi visās savās ierīcēs, apstipriniet savu identitāti.</translation>
 <translation id="8479754468255770962">Skavojums apakšējā kreisajā malā</translation>
 <translation id="8483229036294884935">Šī adrese tiks dzēsta no jūsu Google konta (<ph name="ACCOUNT" />).</translation>
 <translation id="8488350697529856933">Attiecas uz</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index c38c320..e7e7a405 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -3492,6 +3492,7 @@
 <translation id="7304030187361489308">Висок</translation>
 <translation id="7304562222803846232">Управувајте со поставките за приватност на вашата сметка на Google</translation>
 <translation id="7305756307268530424">Стартувај побавно</translation>
+<translation id="7307063504147610123">Адресата е зачувана на уредов</translation>
 <translation id="7308436126008021607">синхронизација во заднина</translation>
 <translation id="7309058266849426521">Дознајте повеќе за управувањето со вашата приватност за реклами на Chrome.</translation>
 <translation id="7310392214323165548">Уредот ќе се рестартира наскоро</translation>
@@ -4169,6 +4170,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Адреси и друго</translation>
 <translation id="8474910779563686872">Прикажи ги деталите за програмерот</translation>
+<translation id="8476959635632921417">За да ја зачувате и користите адресава на сите ваши уреди, потврдете го вашиот идентитет</translation>
 <translation id="8479754468255770962">Спојување долу лево</translation>
 <translation id="8483229036294884935">Адресава ќе биде избришана од вашата сметка на Google, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Се однесува на</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index b9debe9..31b5e0f 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">မြင့်သော</translation>
 <translation id="7304562222803846232">Google Account ကိုယ်ရေးအချက်အလက်လုံခြုံမှု ဆက်တင်များကို စီမံရန်</translation>
 <translation id="7305756307268530424">ဂိမ်းအနှေး စတင်ရန်</translation>
+<translation id="7307063504147610123">လိပ်စာကို ဤစက်တွင် သိမ်းလိုက်သည်</translation>
 <translation id="7308436126008021607">နောက်ခံတွင်စင့်ခ်လုပ်ခြင်း</translation>
 <translation id="7309058266849426521">Chrome တွင် ကြော်ငြာဆိုင်ရာ အချက်အလက်လုံခြုံမှုကို စီမံခြင်း အကြောင်း ပိုမိုလေ့လာရန်။</translation>
 <translation id="7310392214323165548">များမကြာမီ စက် ပြန်စပါမည်</translation>
@@ -4171,6 +4172,7 @@
 <translation id="8473626140772740486">၃၀၀ x ၄၅၀ မီလီမီတာ</translation>
 <translation id="8473863474539038330">လိပ်စာများနှင့် အခြားအရာများ</translation>
 <translation id="8474910779563686872">ဆော့ဖ်ဝဲအင်ဂျင်နီယာ အသေးစိတ် ပြရန်</translation>
+<translation id="8476959635632921417">သင့်စက်အားလုံးတွင် ဤလိပ်စာကို သိမ်းရန်နှင့် အသုံးပြုရန် သင်ဖြစ်ကြောင်း အတည်ပြုပါ</translation>
 <translation id="8479754468255770962">ဘယ်ဘက်အောက်ခြေတွင် ချုပ်စက်ဖြင့် ချုပ်ရန်</translation>
 <translation id="8483229036294884935">ဤလိပ်စာကို သင်၏ <ph name="ACCOUNT" /> Google Account မှ ဖျက်လိုက်မည်</translation>
 <translation id="8488350697529856933">သက်ဆိုင်</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 8827190..47e7a69 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -3492,6 +3492,7 @@
 <translation id="7304030187361489308">Høyt</translation>
 <translation id="7304562222803846232">Administrer personverninnstillingene for Google-kontoen</translation>
 <translation id="7305756307268530424">Start tregere</translation>
+<translation id="7307063504147610123">Adressen er lagret på denne enheten</translation>
 <translation id="7308436126008021607">bakgrunnssynkronisering</translation>
 <translation id="7309058266849426521">Finn ut hvordan du administrerer annonsepersonvernet ditt i Chrome.</translation>
 <translation id="7310392214323165548">Enheten startes på nytt veldig snart</translation>
@@ -4169,6 +4170,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adresser med mer</translation>
 <translation id="8474910779563686872">Vis utviklerdetaljer</translation>
+<translation id="8476959635632921417">For å lagre og bruke dette passordet på alle enhetene dine, bekreft at det er deg</translation>
 <translation id="8479754468255770962">Stift nede til venstre</translation>
 <translation id="8483229036294884935">Denne adressen slettes fra Google-kontoen din (<ph name="ACCOUNT" />)</translation>
 <translation id="8488350697529856933">Gjelder for</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index 0f7a13c..8a9eaee 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -3488,6 +3488,7 @@
 <translation id="7304030187361489308">ଉଚ୍ଚ</translation>
 <translation id="7304562222803846232">Google ଆକାଉଣ୍ଟର ଗୋପନୀୟତା ସେଟିଂସକୁ ପରିଚାଳନା କରନ୍ତୁ</translation>
 <translation id="7305756307268530424">ଧୀର ଗତିରେ ଆରମ୍ଭ କରନ୍ତୁ</translation>
+<translation id="7307063504147610123">ଏହି ଡିଭାଇସରେ ଠିକଣା ସେଭ କରାଯାଇଛି</translation>
 <translation id="7308436126008021607">ପୃଷ୍ଠପଟ ସିଙ୍କ୍</translation>
 <translation id="7309058266849426521">Chromeରେ ଆପଣଙ୍କ ବିଜ୍ଞାପନ ଗୋପନୀୟତା ପରିଚାଳନା କରିବା ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ।</translation>
 <translation id="7310392214323165548">ଡିଭାଇସଟି ଅତି ଶୀଘ୍ର ରିଷ୍ଟାର୍ଟ ହେବ</translation>
@@ -4152,7 +4153,7 @@
 <translation id="8449836157089738489">ସମସ୍ତ URLକୁ ନୂଆ ଟାବ ଗ୍ରୁପରେ ଖୋଲନ୍ତୁ</translation>
 <translation id="84561192812921051">ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟର ରିମୋଟ ଭାବେ ଆପଣଙ୍କର ପ୍ରୋଫାଇଲ ଏବଂ ବ୍ରାଉଜରରେ ପରିବର୍ତ୍ତନ କରିପାରିବେ, ରିପୋର୍ଟିଂ ମାଧ୍ୟମରେ ବ୍ରାଉଜର ବିଷୟରେ ସୂଚନାକୁ ବିଶ୍ଳେଷଣ କରିପାରିବେ ଏବଂ ଅନ୍ୟ ଜରୁରୀ ଟାସ୍କଗୁଡ଼ିକୁ କରିପାରିବେ। ଏହି ଡିଭାଇସରେ କରାଯାଉଥିବା କାର୍ଯ୍ୟକଳାପ Chrome ବାହାରେ ମଧ୍ୟ ପରିଚାଳନା କରାଯାଇପାରେ।  <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation>
 <translation id="8456383681414356368">ନିମ୍ନ ସିଟ ବନ୍ଦ ଅଛି।</translation>
-<translation id="8456775115498700722">ବର୍ତ୍ତମାନ ଆପଣଙ୍କ <ph name="CARD_ISSUER_NAME" /> ଆକାଉଣ୍ଟକୁ Google Pay ସହ ଲିଙ୍କ କରାଯାଇଥିବା ଯୋଗୁଁ ଆପଣ ଆପଣଙ୍କ <ph name="CARD_ISSUER_NAME" />କୁ ଅଟୋଫିଲ କରିପାରିବେ।</translation>
+<translation id="8456775115498700722">ବର୍ତ୍ତମାନ ଆପଣଙ୍କ <ph name="CARD_ISSUER_NAME" /> ଆକାଉଣ୍ଟକୁ Google Pay ସହ ଲିଙ୍କ କରାଯାଇଥିବା ଯୋଗୁଁ ଆପଣ ଆପଣଙ୍କ <ph name="CARD_ISSUER_NAME" /> କାର୍ଡଗୁଡ଼ିକୁ ଅଟୋଫିଲ କରିପାରିବେ।</translation>
 <translation id="8457125768502047971">ଅନିର୍ଦ୍ଦିଷ୍ଟ</translation>
 <translation id="8458202188076138974">ଲେଟର ଏକ୍ସଟ୍ରା</translation>
 <translation id="8460854335417802511">ଏହାକୁ ଚାଲୁ କରନ୍ତୁ</translation>
@@ -4165,6 +4166,7 @@
 <translation id="8473626140772740486">300 x 450 ମିମି</translation>
 <translation id="8473863474539038330">ଠିକଣାଗୁଡ଼ିକ ଏବଂ ଅଧିକ</translation>
 <translation id="8474910779563686872">ଡେଭେଲପରଙ୍କ ବିବରଣୀ ଦେଖାନ୍ତୁ</translation>
+<translation id="8476959635632921417">ଆପଣଙ୍କର ସମସ୍ତ ଡିଭାଇସରେ ଏହି ଠିକଣା ସେଭ କରି ବ୍ୟବହାର କରିବା ପାଇଁ ଏହା ପ୍ରକୃତରେ ଆପଣ ଅଟନ୍ତି ବୋଲି ଯାଞ୍ଚ କରନ୍ତୁ</translation>
 <translation id="8479754468255770962">ତଳ ବାମ ପଟରେ ଷ୍ଟାପଲ୍</translation>
 <translation id="8483229036294884935">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ <ph name="ACCOUNT" />ରୁ ଏହି ଠିକଣା ଡିଲିଟ ହୋଇଯିବ</translation>
 <translation id="8488350697529856933">ରେ ଲାଗୁ ହୋଇଥାଏ</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index dc678ef..393a7ba 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -3543,6 +3543,7 @@
 <translation id="7388594495505979117">{0,plural, =1{O seu dispositivo será reiniciado dentro de 1 minuto}other{O seu dispositivo será reiniciado dentro de # minutos}}</translation>
 <translation id="7393161616326137353">Jogos de aventura</translation>
 <translation id="7393475648162498734">Mostrar que recompensas e vantagens estão disponíveis para os seus cartões no momento do pagamento</translation>
+<translation id="7393971683644170444">A estabelecer ligação ao seu fornecedor do cartão…</translation>
 <translation id="739728382607845710">Ícone do controlador de pagamentos</translation>
 <translation id="7399616692258236448">Os pedidos de localização são bloqueados automaticamente para todos os sites, exceto os que autorizar</translation>
 <translation id="7400418766976504921">URL</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 086321f..b247828 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -3492,6 +3492,7 @@
 <translation id="7304030187361489308">Высокий</translation>
 <translation id="7304562222803846232">Управление настройками конфиденциальности аккаунта Google</translation>
 <translation id="7305756307268530424">Запустить медленнее</translation>
+<translation id="7307063504147610123">Адрес сохранен на этом устройстве</translation>
 <translation id="7308436126008021607">фоновая синхронизация</translation>
 <translation id="7309058266849426521">Узнайте больше о том, как управлять конфиденциальностью рекламы в Chrome.</translation>
 <translation id="7310392214323165548">Скоро устройство будет перезагружено</translation>
@@ -4169,6 +4170,7 @@
 <translation id="8473626140772740486">300 x 450 мм</translation>
 <translation id="8473863474539038330">Адреса и другие данные</translation>
 <translation id="8474910779563686872">Показать сведения о разработчике</translation>
+<translation id="8476959635632921417">Чтобы использовать адрес на всех своих устройствах, сохраните его в аккаунте. Для этого подтвердите личность.</translation>
 <translation id="8479754468255770962">Скоба в левом нижнем углу</translation>
 <translation id="8483229036294884935">Адрес будет удален из вашего аккаунта Google (<ph name="ACCOUNT" />).</translation>
 <translation id="8488350697529856933">Объект применения</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index 410fa359..d80c34e 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -3492,6 +3492,7 @@
 <translation id="7304030187361489308">වැඩි</translation>
 <translation id="7304562222803846232">Google ගිණුම් පෞද්ගලිකත්ව සැකසීම් කළමනාකරණය කරන්න</translation>
 <translation id="7305756307268530424">වඩා මන්දගාමීව අරඹන්න</translation>
+<translation id="7307063504147610123">ලිපිනය මෙම උපාංගයට සුරකින ලදි</translation>
 <translation id="7308436126008021607">පසුබිම සමමුහුර්ත කිරීම</translation>
 <translation id="7309058266849426521">Chrome තුළ ඔබේ දැන්වීම් පෞද්ගලිකත්වය කළමනාකරණය කිරීම පිළිබඳව තව දැන ගන්න.</translation>
 <translation id="7310392214323165548">උපාංගය ඉතා ඉක්මනින් යළි ආරම්භ වනු ඇත</translation>
@@ -4169,6 +4170,7 @@
 <translation id="8473626140772740486">මිමි 300 x 450</translation>
 <translation id="8473863474539038330">ලිපින සහ තව</translation>
 <translation id="8474910779563686872">සංවර්ධක විස්තර පෙන්වන්න</translation>
+<translation id="8476959635632921417">ඔබේ සියලු උපාංග මත මෙම ලිපිනය සුරැකීමට සහ භාවිතා කිරීමට, ඒ ඔබ බව සත්‍යාපනය කරන්න</translation>
 <translation id="8479754468255770962">පහළ වමර ස්ටේපල් කරන්න</translation>
 <translation id="8483229036294884935">මෙම ලිපිනය ඔබේ Google ගිණුමෙන්, <ph name="ACCOUNT" /> මකනු ඇත</translation>
 <translation id="8488350697529856933">අදාළ වනුයේ</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index f4973677..0c44fa6 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -3491,6 +3491,7 @@
 <translation id="7304030187361489308">I lartë</translation>
 <translation id="7304562222803846232">Menaxho cilësimet e privatësisë të "Llogarisë së Google"</translation>
 <translation id="7305756307268530424">Fillo më ngadalë</translation>
+<translation id="7307063504147610123">Adresat e ruajtura në këtë pajisje</translation>
 <translation id="7308436126008021607">sinkronizimi në sfond</translation>
 <translation id="7309058266849426521">Mëso më shumë rreth menaxhimit të privatësisë së reklamave në Chrome.</translation>
 <translation id="7310392214323165548">Pajisja do të riniset së shpejti</translation>
@@ -4168,6 +4169,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adresat dhe të tjera</translation>
 <translation id="8474910779563686872">Shfaq detajet e zhvilluesit</translation>
+<translation id="8476959635632921417">Verifiko që je ti për ta ruajtur dhe përdorur këtë adresë në të gjitha pajisjet e tua</translation>
 <translation id="8479754468255770962">Kapje me tel poshtë majtas</translation>
 <translation id="8483229036294884935">Kjo adresë do të fshihet nga "Llogaria jote e Google", <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Zbatohet për</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 780eff5..d768f98e 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1401,6 +1401,7 @@
 <translation id="351522771072578657">Trenutno ste u meniju</translation>
 <translation id="3517264445792388751">Administrator je onemogućio sistem fajlova</translation>
 <translation id="3518941727116570328">Obrada više predmeta</translation>
+<translation id="3519670528214225835">Pitajte <ph name="KEYWORD_SUFFIX" /></translation>
 <translation id="3525130752944427905">10×14 in</translation>
 <translation id="3525435918300186947">Želi da kontroliše i reprogramira MIDI uređaje?</translation>
 <translation id="3527181387426738155">Muzika i audio</translation>
@@ -1956,6 +1957,7 @@
 <translation id="4451684391620232683">Tekst predstavljen korisniku:</translation>
 <translation id="4452328064229197696">Lozinka koju ste upravo koristili je pronađena pri povredi podataka. Da biste zaštitili naloge, Google menadžer lozinki preporučuje da proverite sačuvane lozinke.</translation>
 <translation id="4456937135469235202">Avanturistička putovanja</translation>
+<translation id="4458013283022578512">Unesite pitanje</translation>
 <translation id="4464826014807964867">Veb-sajtovi sa podacima iz vaše organizacije</translation>
 <translation id="4466576951214254884">Studentski krediti i stipendiranje</translation>
 <translation id="4467821340016922962">Da biste izašli iz režima celog ekrana i pregledali preuzimanje, pritisnite |<ph name="ACCELERATOR" />|</translation>
@@ -3542,6 +3544,7 @@
 <translation id="7388594495505979117">{0,plural, =1{Uređaj će se restartovati za 1 minut}one{Uređaj će se restartovati za # minut}few{Uređaj će se restartovati za # minuta}other{Uređaj će se restartovati za # minuta}}</translation>
 <translation id="7393161616326137353">Avanturističke igre</translation>
 <translation id="7393475648162498734">Omogućite prikaz nagrada i prednosti dostupnih za kartice pri plaćanju</translation>
+<translation id="7393971683644170444">Povezuje se sa dobavljačem kartice…</translation>
 <translation id="739728382607845710">Ikona obrađivača plaćanja</translation>
 <translation id="7399616692258236448">Zahtevi za lokaciju se automatski blokiraju za sve sajtove osim za one koje omogućite</translation>
 <translation id="7400418766976504921">URL adresa</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 4dfd0a4b..64f72b5 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -1401,6 +1401,7 @@
 <translation id="351522771072578657">Тренутно сте у менију</translation>
 <translation id="3517264445792388751">Администратор је онемогућио систем фајлова</translation>
 <translation id="3518941727116570328">Обрада више предмета</translation>
+<translation id="3519670528214225835">Питајте <ph name="KEYWORD_SUFFIX" /></translation>
 <translation id="3525130752944427905">10×14 in</translation>
 <translation id="3525435918300186947">Жели да контролише и репрограмира MIDI уређаје?</translation>
 <translation id="3527181387426738155">Музика и аудио</translation>
@@ -1956,6 +1957,7 @@
 <translation id="4451684391620232683">Текст представљен кориснику:</translation>
 <translation id="4452328064229197696">Лозинка коју сте управо користили је пронађена при повреди података. Да бисте заштитили налоге, Google менаџер лозинки препоручује да проверите сачуване лозинке.</translation>
 <translation id="4456937135469235202">Авантуристичка путовања</translation>
+<translation id="4458013283022578512">Унесите питање</translation>
 <translation id="4464826014807964867">Веб-сајтови са подацима из ваше организације</translation>
 <translation id="4466576951214254884">Студентски кредити и стипендирање</translation>
 <translation id="4467821340016922962">Да бисте изашли из режима целог екрана и прегледали преузимање, притисните |<ph name="ACCELERATOR" />|</translation>
@@ -3542,6 +3544,7 @@
 <translation id="7388594495505979117">{0,plural, =1{Уређај ће се рестартовати за 1 минут}one{Уређај ће се рестартовати за # минут}few{Уређај ће се рестартовати за # минута}other{Уређај ће се рестартовати за # минута}}</translation>
 <translation id="7393161616326137353">Авантуристичке игре</translation>
 <translation id="7393475648162498734">Омогућите приказ награда и предности доступних за картице при плаћању</translation>
+<translation id="7393971683644170444">Повезује се са добављачем картице…</translation>
 <translation id="739728382607845710">Икона обрађивача плаћања</translation>
 <translation id="7399616692258236448">Захтеви за локацију се аутоматски блокирају за све сајтове осим за оне које омогућите</translation>
 <translation id="7400418766976504921">URL адреса</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index 3abd3f34..86eabc46 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Hög</translation>
 <translation id="7304562222803846232">Hantera Google-kontots integritetsinställningar</translation>
 <translation id="7305756307268530424">Starta långsammare</translation>
+<translation id="7307063504147610123">Adressen har sparats på den här enheten</translation>
 <translation id="7308436126008021607">synkronisering i bakgrunden</translation>
 <translation id="7309058266849426521">Läs mer om hur du hanterar annonsintegritet i Chrome.</translation>
 <translation id="7310392214323165548">Enheten startas om inom kort</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adresser och annat</translation>
 <translation id="8474910779563686872">Visa information om utvecklare</translation>
+<translation id="8476959635632921417">Verifiera din identitet om du vill spara och använda den här adressen på alla dina enheter</translation>
 <translation id="8479754468255770962">Häfta nere till vänster</translation>
 <translation id="8483229036294884935">Adressen raderas från Google-kontot <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Gäller för</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 417990d..1553a4e9 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -3488,6 +3488,7 @@
 <translation id="7304030187361489308">அதிகமானது</translation>
 <translation id="7304562222803846232">Google கணக்கின் தனியுரிமை அமைப்புகளை நிர்வகியுங்கள்</translation>
 <translation id="7305756307268530424">மெதுவான வேகத்தில் தொடங்கு</translation>
+<translation id="7307063504147610123">இந்தச் சாதனத்தில் முகவரி சேமிக்கப்பட்டது</translation>
 <translation id="7308436126008021607">பின்னணி ஒத்திசைவு</translation>
 <translation id="7309058266849426521">Chromeமில் உங்கள் விளம்பரத் தனியுரிமையை நிர்வகிப்பது குறித்து மேலும் தெரிந்துகொள்ளுங்கள்.</translation>
 <translation id="7310392214323165548">சாதனம் விரைவில் மீண்டும் தொடங்கும்</translation>
@@ -4152,7 +4153,7 @@
 <translation id="8449836157089738489">அனைத்தையும் புதிய பிரிவுக் குழுவில் திற</translation>
 <translation id="84561192812921051">உங்கள் நிர்வாகி உங்கள் சுயவிவரத்திலும் உலாவியிலும் தொலைநிலையில் இருந்தே மாற்றங்களைச் செய்யலாம், அறிக்கை மூலம் உலாவியைப் பற்றிய தகவல்களைப் பகுப்பாய்வு செய்யலாம், அவசியமான பிற பணிகளைச் செய்யலாம். இந்தச் சாதனத்தில் மேற்கொள்ளப்படும் செயல்பாடுகளை Chrome அல்லாத பிற உலாவிகளிலும் நிர்வகிக்கலாம்.  <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
 <translation id="8456383681414356368">கீழ்ப்புறச் சீட்டு மூடப்பட்டது.</translation>
-<translation id="8456775115498700722">உங்கள் <ph name="CARD_ISSUER_NAME" /> கணக்கு Google Payவுடன் இணைக்கப்பட்டுள்ளதால் உங்கள் <ph name="CARD_ISSUER_NAME" /> கார்டுகளை நீங்கள் இப்போது தானாக நிரப்பலாம்.</translation>
+<translation id="8456775115498700722">உங்கள் <ph name="CARD_ISSUER_NAME" /> கணக்கு Google Payயுடன் இணைக்கப்பட்டுள்ளதால் உங்கள் <ph name="CARD_ISSUER_NAME" /> கார்டுகளின் தகவலை நீங்கள் இப்போது தானாக நிரப்பலாம்.</translation>
 <translation id="8457125768502047971">கால வரையறை இன்றி</translation>
 <translation id="8458202188076138974">லெட்டர் எக்ஸ்ட்ரா</translation>
 <translation id="8460854335417802511">இயக்கு</translation>
@@ -4165,6 +4166,7 @@
 <translation id="8473626140772740486">300 x 450 மிமீ</translation>
 <translation id="8473863474539038330">முகவரிகள் மற்றும் பல</translation>
 <translation id="8474910779563686872">டெவெலப்பர் விவரங்களைக் காட்டு</translation>
+<translation id="8476959635632921417">இந்த முகவரியை உங்கள் சாதனங்கள் எல்லாவற்றிலும் சேமிப்பதற்கும் பயன்படுத்துவதற்கும், இது நீங்கள்தான் என்பதை உறுதிசெய்ய வேண்டும்</translation>
 <translation id="8479754468255770962">ஸ்டேப்பில் பாட்டம் லெஃப்ட்</translation>
 <translation id="8483229036294884935">இந்த முகவரி உங்கள் Google கணக்கில் (<ph name="ACCOUNT" />) இருந்து நீக்கப்படும்</translation>
 <translation id="8488350697529856933">இதற்குப் பொருந்தும்</translation>
@@ -4309,7 +4311,7 @@
 <translation id="8757526089434340176">Google Pay சலுகை உள்ளது</translation>
 <translation id="8759274551635299824">கார்டு காலாவதியாகிவிட்டது</translation>
 <translation id="87601671197631245">இந்தத் தளம் காலாவதியான பாதுகாப்பு உள்ளமைவைப் பயன்படுத்துகிறது, இந்தத் தளத்திற்கு உங்கள் தகவல்களை (உதாரணமாக, கடவுச்சொற்கள், மெசேஜ்கள் அல்லது கிரெடிட் கார்டு தகவல்கள் போன்றவை) அனுப்பும்போது அவற்றை இது வெளிப்படுத்தக்கூடும்.</translation>
-<translation id="8763226176721243078">உங்கள் <ph name="CARD_ISSUER_NAME" /> கணக்கு Google Payவுடன் இணைக்கப்பட்டுள்ளதால் இந்தக் கார்டை நீங்கள் தானாக நிரப்பலாம்.</translation>
+<translation id="8763226176721243078">உங்கள் <ph name="CARD_ISSUER_NAME" /> கணக்கு Google Payயுடன் இணைக்கப்பட்டுள்ளதால் இந்தக் கார்டுத் தகவலை நீங்கள் தானாக நிரப்பலாம்.</translation>
 <translation id="8763927697961133303">USB சாதனம்</translation>
 <translation id="8763986294015493060">தற்போது திறந்துள்ள மறைநிலைச் சாளரங்கள் அனைத்தையும் மூடும்</translation>
 <translation id="8766943070169463815">பாதுகாப்பான பேமெண்ட்டின் அனுமதிச் சான்றை அங்கீகரிப்பதற்கான தாள் திறக்கப்பட்டது</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index cbecdb5..a7a44985 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">İnce</translation>
 <translation id="7304562222803846232">Google Hesabı gizlilik ayarlarını yönet</translation>
 <translation id="7305756307268530424">Daha yavaş başlat</translation>
+<translation id="7307063504147610123">Adres bu cihaza kaydedildi</translation>
 <translation id="7308436126008021607">arka plan senkronizasyonu</translation>
 <translation id="7309058266849426521">Chrome'da reklam gizliliğinizi yönetme hakkında daha fazla bilgi edinin.</translation>
 <translation id="7310392214323165548">Cihaz çok yakında yeniden başlatılacak</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 mm</translation>
 <translation id="8473863474539038330">Adresler ve daha fazlası</translation>
 <translation id="8474910779563686872">Geliştirici ayrıntılarını göster</translation>
+<translation id="8476959635632921417">Bu adresi tüm cihazlarınızda kaydedip kullanmak için kimliğinizi doğrulayın</translation>
 <translation id="8479754468255770962">Sol altta tel zımba</translation>
 <translation id="8483229036294884935">Bu adres, Google Hesabınızdan (<ph name="ACCOUNT" />) silinecek</translation>
 <translation id="8488350697529856933">Uygulandığı yer</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index e034c48..30627e7 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -3493,6 +3493,7 @@
 <translation id="7304030187361489308">Високий</translation>
 <translation id="7304562222803846232">Керувати налаштуваннями конфіденційності облікового запису Google</translation>
 <translation id="7305756307268530424">Сповільнити</translation>
+<translation id="7307063504147610123">Адресу збережено на цьому пристрої</translation>
 <translation id="7308436126008021607">фонова синхронізація</translation>
 <translation id="7309058266849426521">Дізнайтесь, як керувати конфіденційністю в рекламі в Chrome.</translation>
 <translation id="7310392214323165548">Невдовзі пристрій перезапуститься</translation>
@@ -4170,6 +4171,7 @@
 <translation id="8473626140772740486">300 x 450 мм</translation>
 <translation id="8473863474539038330">Адреси й інше</translation>
 <translation id="8474910779563686872">Показати інформацію розробника</translation>
+<translation id="8476959635632921417">Щоб зберегти й використовувати цю адресу на всіх пристроях, підтвердьте свою особу</translation>
 <translation id="8479754468255770962">Скріпити внизу ліворуч</translation>
 <translation id="8483229036294884935">Цю адресу буде видалено з вашого облікового запису Google (<ph name="ACCOUNT" />)</translation>
 <translation id="8488350697529856933">Застосовується до:</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 4c1c7153..b2327bb 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -3488,6 +3488,7 @@
 <translation id="7304030187361489308">高</translation>
 <translation id="7304562222803846232">管理 Google 账号隐私设置</translation>
 <translation id="7305756307268530424">启用慢速模式</translation>
+<translation id="7307063504147610123">地址已保存到此设备</translation>
 <translation id="7308436126008021607">后台同步</translation>
 <translation id="7309058266849426521">详细了解如何在 Chrome 中管理广告隐私权设置。</translation>
 <translation id="7310392214323165548">设备很快就会重启</translation>
@@ -4165,6 +4166,7 @@
 <translation id="8473626140772740486">300 x 450 毫米</translation>
 <translation id="8473863474539038330">地址和其他信息</translation>
 <translation id="8474910779563686872">显示开发者详细信息</translation>
+<translation id="8476959635632921417">若要在您的所有设备上保存并使用此地址,请验证您的身份</translation>
 <translation id="8479754468255770962">钉装(左下角)</translation>
 <translation id="8483229036294884935">系统将从您的 Google 账号 (<ph name="ACCOUNT" />) 中删除此地址</translation>
 <translation id="8488350697529856933">适用对象</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index 68e64c5..3f28268 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -3489,6 +3489,7 @@
 <translation id="7304030187361489308">Okuphezulu</translation>
 <translation id="7304562222803846232">Phatha amasethingi obumfihlo e-Google Account</translation>
 <translation id="7305756307268530424">Qala kabuthaka</translation>
+<translation id="7307063504147610123">Ikheli lilondolozwe kule divayisi</translation>
 <translation id="7308436126008021607">ukuvumelanisa ingemuva</translation>
 <translation id="7309058266849426521">Funda kabanzi mayelana nokuphatha ubumfihlo besikhangiso sakho kuChrome.</translation>
 <translation id="7310392214323165548">Idivayisi izoqala kabusha maduze nje</translation>
@@ -4166,6 +4167,7 @@
 <translation id="8473626140772740486">U-300 x 450 mm</translation>
 <translation id="8473863474539038330">Amakheli nokuningi</translation>
 <translation id="8474910779563686872">Bonisa imininingwane kanjiniyela</translation>
+<translation id="8476959635632921417">Ukuze ulondoloze futhi usebenzise leli kheli kuwo wonke amadivayisi akho, qinisekisa ukuthi nguwe</translation>
 <translation id="8479754468255770962">Ukunamathisela phansi kwesokunxele</translation>
 <translation id="8483229036294884935">Leli kheli lizosulwa ku-Google Account yakho, <ph name="ACCOUNT" /></translation>
 <translation id="8488350697529856933">Isebenza ku</translation>
diff --git a/components/supervised_user/core/common/features.cc b/components/supervised_user/core/common/features.cc
index 1c6fdc65..1575084 100644
--- a/components/supervised_user/core/common/features.cc
+++ b/components/supervised_user/core/common/features.cc
@@ -137,6 +137,10 @@
 BASE_FEATURE(kAllowSupervisedUserReauthenticationForSubframes,
              "EnableSupervisedUserReauthenticationForSubframes",
              base::FEATURE_ENABLED_BY_DEFAULT);
+
+BASE_FEATURE(kExemptYouTubeInfrastructureFromBlocking,
+             "ExemptYouTubeInfrastructureFromBlocking",
+             base::FEATURE_ENABLED_BY_DEFAULT);
 #endif
 
 // TODO: crbug.com/378636321 - Clean up the
diff --git a/components/supervised_user/core/common/features.h b/components/supervised_user/core/common/features.h
index 2c25f86..eecb212 100644
--- a/components/supervised_user/core/common/features.h
+++ b/components/supervised_user/core/common/features.h
@@ -96,6 +96,10 @@
 // `kForceSupervisedUserReauthenticationForYouTube` or
 // `kForceSupervisedUserReauthenticationForBlockedSites` is enabled.
 BASE_DECLARE_FEATURE(kAllowSupervisedUserReauthenticationForSubframes);
+
+// Specifies if infrastructure-related YouTube endpoints should be still
+// reachable even if parental controls related restrict YouTube access.
+BASE_DECLARE_FEATURE(kExemptYouTubeInfrastructureFromBlocking);
 #endif
 
 // Fallback to sending un-credentialed filtering requests for supervised users
diff --git a/components/test/data/autofill/heuristics-json/internal b/components/test/data/autofill/heuristics-json/internal
index 52367ad..fa6ad10 160000
--- a/components/test/data/autofill/heuristics-json/internal
+++ b/components/test/data/autofill/heuristics-json/internal
@@ -1 +1 @@
-Subproject commit 52367ad4206058d2830e62fd10b752d95b3618e5
+Subproject commit fa6ad109121e94573274a300139840cea314fac6
diff --git a/components/variations/variations_murmur_hash.h b/components/variations/variations_murmur_hash.h
index 3807295ce..5df4a56 100644
--- a/components/variations/variations_murmur_hash.h
+++ b/components/variations/variations_murmur_hash.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_VARIATIONS_VARIATIONS_MURMUR_HASH_H_
 #define COMPONENTS_VARIATIONS_VARIATIONS_MURMUR_HASH_H_
 
+#include <stddef.h>
+
 #include <cstdint>
 #include <string_view>
 #include <vector>
diff --git a/components/viz/common/resources/peak_gpu_memory_tracker_util.h b/components/viz/common/resources/peak_gpu_memory_tracker_util.h
index 76e5a4b..a6c940ad 100644
--- a/components/viz/common/resources/peak_gpu_memory_tracker_util.h
+++ b/components/viz/common/resources/peak_gpu_memory_tracker_util.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_VIZ_COMMON_RESOURCES_PEAK_GPU_MEMORY_TRACKER_UTIL_H_
 #define COMPONENTS_VIZ_COMMON_RESOURCES_PEAK_GPU_MEMORY_TRACKER_UTIL_H_
 
+#include <stdint.h>
+
 #include <utility>
 
 #include "components/viz/common/viz_common_export.h"
diff --git a/components/viz/common/resources/shared_image_format_utils.cc b/components/viz/common/resources/shared_image_format_utils.cc
index a8bd206..215525f 100644
--- a/components/viz/common/resources/shared_image_format_utils.cc
+++ b/components/viz/common/resources/shared_image_format_utils.cc
@@ -69,20 +69,10 @@
   NOTREACHED();
 }
 
-SkColorType ToClosestSkColorType(bool gpu_compositing,
-                                 SharedImageFormat format,
-                                 int plane_index) {
+SkColorType ToClosestSkColorType(SharedImageFormat format, int plane_index) {
   CHECK(format.IsValidPlaneIndex(plane_index));
-  if (!gpu_compositing) {
-    // TODO(crbug.com/41472025): Remove this assumption and have clients tag
-    // resources with the correct format.
-    // In software compositing we lazily use RGBA_8888 throughout the system,
-    // but actual pixel encodings are the native skia bit ordering, which can be
-    // RGBA or BGRA.
-    return kN32_SkColorType;
-  }
   if (format.is_single_plane()) {
-    return ToClosestSkColorType(gpu_compositing, format);
+    return ToClosestSkColorType(/*gpu_compositing=*/true, format);
   }
 
   // No external sampling, format is per plane.
diff --git a/components/viz/common/resources/shared_image_format_utils.h b/components/viz/common/resources/shared_image_format_utils.h
index 1d2c7d9..c1e551d 100644
--- a/components/viz/common/resources/shared_image_format_utils.h
+++ b/components/viz/common/resources/shared_image_format_utils.h
@@ -49,9 +49,7 @@
 // external sampler and `plane_index`. For single planar formats (eg. RGBA) the
 // plane_index must be zero and it's equivalent to calling function above.
 COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT)
-SkColorType ToClosestSkColorType(bool gpu_compositing,
-                                 SharedImageFormat format,
-                                 int plane_index);
+SkColorType ToClosestSkColorType(SharedImageFormat format, int plane_index);
 
 // Returns the single-plane SharedImageFormat corresponding to `color_type.`
 COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT)
diff --git a/components/viz/common/resources/shared_image_format_utils_unittest.cc b/components/viz/common/resources/shared_image_format_utils_unittest.cc
index b071e942..bedb3cd 100644
--- a/components/viz/common/resources/shared_image_format_utils_unittest.cc
+++ b/components/viz/common/resources/shared_image_format_utils_unittest.cc
@@ -15,13 +15,12 @@
 class SharedImageFormatUtilsTest : public testing::Test {
  public:
   void TestToClosestSkColorType(std::vector<SkColorType> expected_types,
-                                SharedImageFormat format,
-                                bool gpu_compositing) {
+                                SharedImageFormat format) {
     ASSERT_EQ(format.NumberOfPlanes(), static_cast<int>(expected_types.size()));
     for (int plane_index = 0; plane_index < format.NumberOfPlanes();
          plane_index++) {
       EXPECT_EQ(expected_types[plane_index],
-                ToClosestSkColorType(gpu_compositing, format, plane_index));
+                ToClosestSkColorType(format, plane_index));
     }
   }
 };
@@ -31,7 +30,7 @@
   SharedImageFormat format = MultiPlaneFormat::kNV12;
   std::vector<SkColorType> expected_types = {kAlpha_8_SkColorType,
                                              kR8G8_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneNV16) {
@@ -39,7 +38,7 @@
   SharedImageFormat format = MultiPlaneFormat::kNV16;
   std::vector<SkColorType> expected_types = {kAlpha_8_SkColorType,
                                              kR8G8_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneNV24) {
@@ -47,7 +46,7 @@
   SharedImageFormat format = MultiPlaneFormat::kNV24;
   std::vector<SkColorType> expected_types = {kAlpha_8_SkColorType,
                                              kR8G8_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneYVU) {
@@ -55,7 +54,7 @@
   SharedImageFormat format = MultiPlaneFormat::kYV12;
   std::vector<SkColorType> expected_types = {
       kAlpha_8_SkColorType, kAlpha_8_SkColorType, kAlpha_8_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneI420) {
@@ -63,7 +62,7 @@
   SharedImageFormat format = MultiPlaneFormat::kI420;
   std::vector<SkColorType> expected_types = {
       kAlpha_8_SkColorType, kAlpha_8_SkColorType, kAlpha_8_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneP010) {
@@ -71,7 +70,7 @@
   SharedImageFormat format = MultiPlaneFormat::kP010;
   std::vector<SkColorType> expected_types = {kA16_unorm_SkColorType,
                                              kR16G16_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneP210) {
@@ -79,7 +78,7 @@
   SharedImageFormat format = MultiPlaneFormat::kP210;
   std::vector<SkColorType> expected_types = {kA16_unorm_SkColorType,
                                              kR16G16_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeMultiPlaneP410) {
@@ -87,7 +86,7 @@
   SharedImageFormat format = MultiPlaneFormat::kP410;
   std::vector<SkColorType> expected_types = {kA16_unorm_SkColorType,
                                              kR16G16_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest,
@@ -99,7 +98,7 @@
                                     SharedImageFormat::ChannelFormat::k16);
   std::vector<SkColorType> expected_types = {kA16_unorm_SkColorType,
                                              kR16G16_unorm_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest,
@@ -112,38 +111,30 @@
   std::vector<SkColorType> expected_types = {kA16_float_SkColorType,
                                              kR16G16_float_SkColorType,
                                              kA16_float_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeSinglePlaneRGBX) {
   // Single planar RGBX_8888
   SharedImageFormat format = SinglePlaneFormat::kRGBX_8888;
   std::vector<SkColorType> expected_types = {kRGB_888x_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeSinglePlaneAlpha) {
   // Single planar ALPHA_8
   SharedImageFormat format = SinglePlaneFormat::kALPHA_8;
   std::vector<SkColorType> expected_types = {kAlpha_8_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/true);
+  TestToClosestSkColorType(expected_types, format);
 }
 
 TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeSoftwareRGBX) {
   // Software Compositing.
   // Single planar RGBX_8888
   SharedImageFormat format = SinglePlaneFormat::kRGBX_8888;
-  std::vector<SkColorType> expected_types = {kN32_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/false);
-}
-
-TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeSoftwareYUV) {
-  // Software Compositing.
-  // 10-bit 4:2:0 Y_UV biplanar format (P010)
-  SharedImageFormat format = MultiPlaneFormat::kP010;
-  std::vector<SkColorType> expected_types = {kN32_SkColorType,
-                                             kN32_SkColorType};
-  TestToClosestSkColorType(expected_types, format, /*gpu_compositing=*/false);
+  ASSERT_EQ(format.NumberOfPlanes(), 1);
+  EXPECT_EQ(kN32_SkColorType,
+            ToClosestSkColorType(/*gpu_compositing=*/false, format));
 }
 
 }  // namespace
diff --git a/components/viz/service/display_embedder/image_context_impl.cc b/components/viz/service/display_embedder/image_context_impl.cc
index 9b23be9..aa08c97c6 100644
--- a/components/viz/service/display_embedder/image_context_impl.cc
+++ b/components/viz/service/display_embedder/image_context_impl.cc
@@ -258,8 +258,7 @@
           context_state->gpu_main_graphite_recorder()->createBackendTexture(
               sk_size, tex_info));
 
-      SkColorType color_type =
-          ToClosestSkColorType(/*gpu_compositing=*/true, format(), plane_index);
+      SkColorType color_type = ToClosestSkColorType(format(), plane_index);
 
       auto sk_surface = SkSurfaces::WrapBackendTexture(
           context_state->gpu_main_graphite_recorder(),
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 63f68613..33f6b559 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -4339,22 +4339,6 @@
   // origin-isolation opt-ins appropriately.
   CheckForIsolationOptIn(GetURL());
 
-  // Check if the response should be sent to a renderer.
-  // Regular downloads should not be rendered, but downloads with an
-  // unsuccessful response code will cause an error page to be rendered.
-  response_should_be_rendered_ =
-      (!is_download ||
-       IsFailedDownload(is_download, response_head_->headers.get())) &&
-      (!response_head_->headers.get() ||
-       (response_head_->headers->response_code() != net::HTTP_NO_CONTENT &&
-        response_head_->headers->response_code() != net::HTTP_RESET_CONTENT &&
-        !ShouldRenderFallbackContentForResponse(*response_head_->headers)));
-
-  // Response that will not commit should be marked as aborted in the
-  // NavigationHandle.
-  if (!response_should_be_rendered_)
-    net_error_ = net::ERR_ABORTED;
-
   const bool is_first_response = commit_params_->redirects.empty();
   UpdateNavigationHandleTimingsOnResponseReceived(/*is_redirect=*/false,
                                                   is_first_response);
@@ -4414,9 +4398,28 @@
     }
   }
 
+  // Check if the response should be sent to a renderer.
+  // Regular downloads should not be rendered, but downloads with an
+  // unsuccessful response code will cause an error page to be rendered.
+  response_should_be_rendered_ =
+      (!is_download ||
+       IsFailedDownload(is_download, response_head_->headers.get())) &&
+      (!response_head_->headers.get() ||
+       (response_head_->headers->response_code() != net::HTTP_NO_CONTENT &&
+        response_head_->headers->response_code() != net::HTTP_RESET_CONTENT &&
+        !ShouldRenderFallbackContentForResponse(*response_head_->headers)));
+
+  if (!response_should_be_rendered_) {
+    net_error_ = net::ERR_ABORTED;
+    SelectFrameHostForOnResponseStarted(std::move(url_loader_client_endpoints),
+                                        is_download,
+                                        std::move(subresource_loader_params));
+    return;
+  }
+
   // MHTML document can't be framed into non-MHTML document (and vice versa).
   // The full page must load from the MHTML archive or none of it.
-  if (is_mhtml_archive && !IsInMainFrame() && response_should_be_rendered_) {
+  if (is_mhtml_archive && !IsInMainFrame()) {
     OnRequestFailedInternal(
         network::URLLoaderCompletionStatus(net::ERR_BLOCKED_BY_RESPONSE),
         false /* skip_throttles */, std::nullopt /* error_page_contnet */,
@@ -4429,8 +4432,6 @@
   const std::optional<network::mojom::BlockedByResponseReason>
       coep_requires_blocking = EnforceCOEP();
   if (coep_requires_blocking) {
-    // TODO(crbug.com/40166503): Investigate what must be done in case of
-    // a download.
     OnRequestFailedInternal(
         network::URLLoaderCompletionStatus(*coep_requires_blocking),
         false /* skip_throttles */, std::nullopt /* error_page_content */,
@@ -4461,8 +4462,7 @@
   // Supports-Loading-Mode HTTP response header "fenced-frame" to be able to
   // load. Otherwise a console error is emitted.
   const bool should_enforce_fenced_frame_opt_in =
-      response_should_be_rendered_ && response_head_->headers &&
-      frame_tree_node_->IsInFencedFrameTree() &&
+      response_head_->headers && frame_tree_node_->IsInFencedFrameTree() &&
       !(url.IsAboutBlank() || url.SchemeIsBlob() ||
         url.SchemeIs(url::kDataScheme));
   if (should_enforce_fenced_frame_opt_in &&
@@ -4486,17 +4486,15 @@
   // 4. if [...] the result of checking a navigation response's adherence to its
   // embedder policy [...], then set failure to true.
   if (!CheckResponseAdherenceToCoep(url)) {
-    // TODO(crbug.com/40166503): Investigate what must be done in
-    // case of a download.
     OnRequestFailedInternal(network::URLLoaderCompletionStatus(
                                 network::mojom::BlockedByResponseReason::
                                     kCoepFrameResourceNeedsCoepHeader),
                             false /* skip_throttles */,
                             std::nullopt /* error_page_content */,
                             false /* collapse_frame */);
-    return;
     // DO NOT ADD CODE after this. The previous call to
     // OnRequestFailedInternal has destroyed the NavigationRequest.
+    return;
   }
 
   SelectFrameHostForOnResponseStarted(std::move(url_loader_client_endpoints),
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
index 3bae69b..889491c 100644
--- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -5777,6 +5777,28 @@
             root_frame_host()->GetWebExposedIsolationLevel());
 }
 
+// Regression test for https://crbug.com/40864543
+// The main document is using COEP, but the 204 No Content child document isn't.
+// This shouldn't crash.
+IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest,
+                       NoCrashOn204NoContentChildDocumentCOEP) {
+  // Main document sets COEP.
+  GURL main_url(embedded_test_server()->GetURL(
+      "/set-header?"
+      "Cross-Origin-Embedder-Policy: require-corp"));
+  EXPECT_TRUE(NavigateToURL(shell(), main_url));
+
+  // Iframe is a 204 No Content.
+  TestNavigationManager navigation_manager(
+      web_contents(), embedded_test_server()->GetURL("/nocontent"));
+  EXPECT_TRUE(ExecJs(root_frame_host(), R"(
+    let iframe = document.createElement('iframe');
+    iframe.src = '/nocontent'
+    document.body.appendChild(iframe);
+  )"));
+  ASSERT_TRUE(navigation_manager.WaitForNavigationFinished());
+}
+
 class IsolatedApplicationContentBrowserClient
     : public ContentBrowserTestContentBrowserClient {
  public:
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 17c25c77..6d6b2235 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -166,7 +166,6 @@
     "//base:base_java",
     "//base:process_launcher_java",
     "//base:service_loader_java",
-    "//build:chromeos_buildflags",
     "//build/android:build_java",
     "//cc:cc_java",
     "//cc/mojom:mojom_java",
diff --git a/content/public/app/content_main_delegate.cc b/content/public/app/content_main_delegate.cc
index b97149f..8194fc8b 100644
--- a/content/public/app/content_main_delegate.cc
+++ b/content/public/app/content_main_delegate.cc
@@ -13,11 +13,6 @@
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/public/utility/content_utility_client.h"
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "sandbox/policy/switches.h"
-#include "ui/gl/gl_switches.h"
-#endif
-
 namespace content {
 
 std::optional<int> ContentMainDelegate::BasicStartupComplete() {
@@ -52,20 +47,6 @@
 }
 
 std::optional<int> ContentMainDelegate::PreBrowserMain() {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  // On LaCrOS, GPU sandbox failures should always be fatal because we control
-  // the driver environment on ChromeOS.
-  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      sandbox::policy::switches::kGpuSandboxFailuresFatal, "yes");
-
-  // TODO(crbug.com/40857355): remove this workaround once SwANGLE can work with
-  // the GPU process sandbox.
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kOverrideUseSoftwareGLForTests)) {
-    base::CommandLine::ForCurrentProcess()->AppendSwitch(
-        sandbox::policy::switches::kDisableGpuSandbox);
-  }
-#endif
   return std::nullopt;
 }
 
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index 7678ceb..edd136c 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -2,7 +2,6 @@
 # Use of this source code is governed by a BSD - style license that can be
 # found in the LICENSE file.
 
-import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/ui.gni")
 import("//content/common/features.gni")
 import("//device/vr/buildflags/buildflags.gni")
@@ -575,7 +574,6 @@
     "//ui/base/mojom:ui_base_types",
   ]
   deps = [
-    "//build:chromeos_buildflags",
     "//cc",
     "//components/input",
     "//components/language_detection/content/browser",
@@ -700,10 +698,13 @@
 
   if (is_chromeos) {
     sources += [
+      "chromeos/delegate_to_browser_gpu_service_accelerator_factory.h",
       "chromeos/multi_capture_service.cc",
       "chromeos/multi_capture_service.h",
       "lock_screen_storage.h",
       "smart_card_delegate.h",
+      "tts_controller_delegate.cc",
+      "tts_controller_delegate.h",
     ]
   }
 
@@ -719,14 +720,6 @@
     ]
   }
 
-  if (is_chromeos_ash) {
-    sources += [
-      "chromeos/delegate_to_browser_gpu_service_accelerator_factory.h",
-      "tts_controller_delegate.cc",
-      "tts_controller_delegate.h",
-    ]
-  }
-
   if (enable_vr) {
     sources += [
       "browser_xr_runtime.h",
@@ -746,10 +739,6 @@
     sources += [ "profiling_utils.h" ]
   }
 
-  if (is_chromeos_lacros) {
-    deps += [ "//chromeos/startup" ]
-  }
-
   if (enable_video_effects) {
     public_deps += [ "//services/video_effects/public/mojom:mojom" ]
   }
diff --git a/content/public/browser/DEPS b/content/public/browser/DEPS
index f11673b..de53656 100644
--- a/content/public/browser/DEPS
+++ b/content/public/browser/DEPS
@@ -56,12 +56,6 @@
     "+third_party/webrtc/modules/desktop_capture/desktop_capture_options.h",
   ],
 
-  "gpu_utils\.cc": [
-    # For using chromeos::BrowserParamsProxy which is needed on LaCrOS to decide
-    # if the GPU process sandbox needs to be started early.
-    "+chromeos/startup/browser_params_proxy.h",
-  ],
-
   ".*unittest\.cc": [
     "+services/network/network_service.h",
   ],
diff --git a/content/public/browser/authenticator_request_client_delegate.cc b/content/public/browser/authenticator_request_client_delegate.cc
index 6d875b5..ebbd984 100644
--- a/content/public/browser/authenticator_request_client_delegate.cc
+++ b/content/public/browser/authenticator_request_client_delegate.cc
@@ -10,7 +10,6 @@
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/browser/webauth/authenticator_environment.h"
 #include "device/fido/fido_discovery_factory.h"
 #include "device/fido/fido_request_handler_base.h"
diff --git a/content/public/browser/authenticator_request_client_delegate.h b/content/public/browser/authenticator_request_client_delegate.h
index f650d941..309c3f8 100644
--- a/content/public/browser/authenticator_request_client_delegate.h
+++ b/content/public/browser/authenticator_request_client_delegate.h
@@ -12,7 +12,6 @@
 #include "base/containers/span.h"
 #include "base/functional/callback_forward.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/web_authentication_request_proxy.h"
 #include "device/fido/authenticator_get_assertion_response.h"
diff --git a/content/public/browser/child_process_host.h b/content/public/browser/child_process_host.h
index 029d2b9..b1f0c90 100644
--- a/content/public/browser/child_process_host.h
+++ b/content/public/browser/child_process_host.h
@@ -13,7 +13,6 @@
 #include "base/clang_profiling_buildflags.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/buildflags.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/child_process_id.h"
@@ -197,7 +196,7 @@
   // out.
   virtual void SetBatterySaverMode(bool battery_saver_mode_enabled) = 0;
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
   // Reinitializes the child process's logging with the given settings. This
   // is needed on Chrome OS, which switches to a log file in the user's home
   // directory once they log in.
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index 9416aa8f9..beed98c48 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -21,7 +21,6 @@
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
-#include "build/chromeos_buildflags.h"
 #include "components/language_detection/content/browser/content_language_detection_driver.h"
 #include "components/language_detection/content/common/language_detection.mojom.h"
 #include "components/language_detection/core/browser/language_detection_model_provider.h"
@@ -803,7 +802,7 @@
   return nullptr;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 TtsControllerDelegate* ContentBrowserClient::GetTtsControllerDelegate() {
   return nullptr;
 }
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index aa7de677..47d70ae 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -26,7 +26,6 @@
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
-#include "build/chromeos_buildflags.h"
 #include "components/browsing_topics/common/common_types.h"
 #include "components/download/public/common/quarantine_connection.h"
 #include "components/file_access/scoped_file_access.h"
@@ -291,12 +290,9 @@
 class TtsEnvironmentAndroid;
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-class TtsControllerDelegate;
-#endif
-
 #if BUILDFLAG(IS_CHROMEOS)
 class SmartCardDelegate;
+class TtsControllerDelegate;
 #endif
 
 // Embedder API (or SPI) for participating in browser logic, to be implemented
@@ -1359,7 +1355,7 @@
   virtual SpeechRecognitionManagerDelegate*
   CreateSpeechRecognitionManagerDelegate();
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
   // Allows the embedder to return a delegate for the TtsController.
   virtual TtsControllerDelegate* GetTtsControllerDelegate();
 #endif
@@ -1713,14 +1709,6 @@
       content::PosixFileDescriptorInfo* mappings) {}
 #endif  // BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC) || BUILDFLAG(IS_FUCHSIA)
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  // Populates |mappings| with all files that need to be mapped before launching
-  // a Zygote process.
-  virtual void GetAdditionalMappedFilesForZygote(
-      base::CommandLine* command_line,
-      content::PosixFileDescriptorInfo* mappings) {}
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-
 #if BUILDFLAG(IS_WIN)
   // Defines flags that can be passed to PreSpawnChild.
   enum ChildSpawnFlags {
diff --git a/content/public/browser/desktop_capture.cc b/content/public/browser/desktop_capture.cc
index 5077691..d60f2bd 100644
--- a/content/public/browser/desktop_capture.cc
+++ b/content/public/browser/desktop_capture.cc
@@ -6,17 +6,12 @@
 
 #include "base/feature_list.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/media/media_stream_manager.h"
 #include "content/browser/renderer_host/media/video_capture_manager.h"
 #include "content/common/features.h"
 #include "content/public/common/content_features.h"
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "content/browser/media/capture/desktop_capturer_lacros.h"
-#endif
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 #include "content/browser/media/capture/aura_window_to_mojo_device_adapter.h"
 #include "content/browser/media/capture/desktop_capturer_ash.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
@@ -83,11 +78,7 @@
 
 std::unique_ptr<webrtc::DesktopCapturer> CreateScreenCapturer(
     bool allow_wgc_screen_capturer) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  return std::make_unique<DesktopCapturerLacros>(
-      DesktopCapturerLacros::CaptureType::kScreen,
-      webrtc::DesktopCaptureOptions());
-#elif BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
   return std::make_unique<DesktopCapturerAsh>();
 #else
   auto options = desktop_capture::CreateDesktopCaptureOptions();
@@ -101,20 +92,14 @@
 }
 
 std::unique_ptr<webrtc::DesktopCapturer> CreateWindowCapturer() {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  return std::make_unique<DesktopCapturerLacros>(
-      DesktopCapturerLacros::CaptureType::kWindow,
-      webrtc::DesktopCaptureOptions());
-#else
   auto options = desktop_capture::CreateDesktopCaptureOptions();
 #if defined(RTC_ENABLE_WIN_WGC)
   options.set_allow_wgc_capturer_fallback(true);
 #endif
   return webrtc::DesktopCapturer::CreateWindowCapturer(options);
-#endif
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 void BindAuraWindowCapturer(
     mojo::PendingReceiver<video_capture::mojom::Device> receiver,
     const content::DesktopMediaID& id) {
diff --git a/content/public/browser/desktop_capture.h b/content/public/browser/desktop_capture.h
index 5c44655..245669c6 100644
--- a/content/public/browser/desktop_capture.h
+++ b/content/public/browser/desktop_capture.h
@@ -7,19 +7,18 @@
 
 #include "base/functional/callback.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/desktop_media_id.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/video_capture/public/mojom/device.mojom-forward.h"
 #endif
 
 namespace content {
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 struct DesktopMediaID;
 #endif
 
@@ -33,7 +32,7 @@
     bool allow_wgc_screen_capturer = false);
 CONTENT_EXPORT std::unique_ptr<webrtc::DesktopCapturer> CreateWindowCapturer();
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 // This is currently used only by ash-chrome, and we don't yet want to stabilize
 // this API.
 CONTENT_EXPORT void BindAuraWindowCapturer(
diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc
index 07446764..a1e6e4e2 100644
--- a/content/public/browser/gpu_utils.cc
+++ b/content/public/browser/gpu_utils.cc
@@ -11,7 +11,6 @@
 #include "base/functional/bind.h"
 #include "base/strings/string_number_conversions.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "cc/base/switches.h"
 #include "components/viz/common/features.h"
 #include "components/viz/common/switches.h"
@@ -31,10 +30,6 @@
 #include "ui/gfx/switches.h"
 #include "ui/gl/gl_features.h"
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chromeos/startup/browser_params_proxy.h"
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-
 namespace {
 
 void KillGpuProcessImpl(content::GpuProcessHost* host) {
@@ -96,28 +91,6 @@
 
   gpu_preferences.gpu_sandbox_start_early =
       command_line->HasSwitch(switches::kGpuSandboxStartEarly);
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (!gpu_preferences.gpu_sandbox_start_early) {
-    const chromeos::BrowserParamsProxy* init_params =
-        chromeos::BrowserParamsProxy::Get();
-    CHECK(init_params);
-    switch (init_params->GpuSandboxStartMode()) {
-      case crosapi::mojom::BrowserInitParams::GpuSandboxStartMode::kUnspecified:
-        // In practice, this is expected to be reached due to version skewing:
-        // when ash-chrome is too old to provide a useful value for
-        // BrowserInitParams.gpu_sandbox_start_early. In that case, it's better
-        // to start the sandbox early than to crash the GPU process (since that
-        // process is started with --gpu-sandbox-failures-fatal=yes).
-        // This can also be reached on tests when
-        // |init_params|->DisableCrosapiForTesting() is true.
-      case crosapi::mojom::BrowserInitParams::GpuSandboxStartMode::kEarly:
-        gpu_preferences.gpu_sandbox_start_early = true;
-        break;
-      case crosapi::mojom::BrowserInitParams::GpuSandboxStartMode::kNormal:
-        break;
-    }
-  }
-#endif
 
   gpu_preferences.enable_vulkan_protected_memory =
       command_line->HasSwitch(switches::kEnableVulkanProtectedMemory);
diff --git a/content/public/browser/media_keys_listener_manager.cc b/content/public/browser/media_keys_listener_manager.cc
index 8f36d25..1be210f 100644
--- a/content/public/browser/media_keys_listener_manager.cc
+++ b/content/public/browser/media_keys_listener_manager.cc
@@ -5,9 +5,8 @@
 #include "content/public/browser/media_keys_listener_manager.h"
 
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
+#if !BUILDFLAG(IS_CHROMEOS)
 #include "base/feature_list.h"
 #include "media/base/media_switches.h"
 #endif
diff --git a/content/public/browser/network_context_client_base.h b/content/public/browser/network_context_client_base.h
index 7fe5d36..f6da4cd2 100644
--- a/content/public/browser/network_context_client_base.h
+++ b/content/public/browser/network_context_client_base.h
@@ -6,7 +6,6 @@
 #define CONTENT_PUBLIC_BROWSER_NETWORK_CONTEXT_CLIENT_BASE_H_
 
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/cpp/network_service_buildflags.h"
diff --git a/content/public/browser/network_service_instance.h b/content/public/browser/network_service_instance.h
index 0c423e8..9caa50a5 100644
--- a/content/public/browser/network_service_instance.h
+++ b/content/public/browser/network_service_instance.h
@@ -7,7 +7,6 @@
 
 #include "base/functional/callback.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom-forward.h"
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index ba48933..f5df3f2 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -740,7 +740,7 @@
   virtual void DumpProfilingData(base::OnceClosure callback) {}
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
   // Reinitializes the child process's logging with the given settings. This
   // is needed on Chrome OS, which switches to a log file in the user's home
   // directory once they log in.
diff --git a/content/public/browser/stable_video_decoder_factory.h b/content/public/browser/stable_video_decoder_factory.h
index 5d6faf7..d4934aa 100644
--- a/content/public/browser/stable_video_decoder_factory.h
+++ b/content/public/browser/stable_video_decoder_factory.h
@@ -11,9 +11,8 @@
 
 namespace content {
 
-// Binds a StableVideoDecoderFactory PendingReceiver by either using the crosapi
-// (on LaCrOS) or starting a new utility process (on non-LaCrOS). This function
-// can be called from any thread.
+// Binds a StableVideoDecoderFactory PendingReceiver by starting a new utility
+// process. This function can be called from any thread.
 CONTENT_EXPORT void LaunchStableVideoDecoderFactory(
     mojo::PendingReceiver<media::stable::mojom::StableVideoDecoderFactory>
         receiver);
diff --git a/content/public/browser/tts_controller.h b/content/public/browser/tts_controller.h
index 37ee93d..83ffd91 100644
--- a/content/public/browser/tts_controller.h
+++ b/content/public/browser/tts_controller.h
@@ -15,7 +15,6 @@
 #include "base/memory/singleton.h"
 #include "base/observer_list_types.h"
 #include "base/scoped_observation_traits.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/tts_utterance.h"
 #include "url/gurl.h"
diff --git a/content/public/browser/zygote_host/zygote_host_linux.h b/content/public/browser/zygote_host/zygote_host_linux.h
index 3ac7cdff..ad26d13 100644
--- a/content/public/browser/zygote_host/zygote_host_linux.h
+++ b/content/public/browser/zygote_host/zygote_host_linux.h
@@ -8,7 +8,6 @@
 #include <unistd.h>
 
 #include "base/process/process.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 
 #if BUILDFLAG(IS_CHROMEOS)
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
index b84e3a7..05bace8 100644
--- a/content/public/common/BUILD.gn
+++ b/content/public/common/BUILD.gn
@@ -3,7 +3,6 @@
 # found in the LICENSE file.
 
 import("//build/buildflag_header.gni")
-import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import("//build/config/ui.gni")
 import("//content/public/common/features.gni")
@@ -43,7 +42,6 @@
 # a header-only dependency, without bringing in all of content.
 source_set("content_descriptors") {
   sources = [ "content_descriptors.h" ]
-  deps = [ "//build:chromeos_buildflags" ]
 }
 
 source_set("content_descriptor_keys") {
@@ -93,7 +91,6 @@
 
   # Deps required by the above headers.
   deps = [
-    "//build:chromeos_buildflags",
     "//media:media_buildflags",
     "//tools/v8_context_snapshot:buildflags",
   ]
@@ -112,7 +109,6 @@
 
   # Deps required by the above header.
   deps = [
-    "//build:chromeos_buildflags",
     "//media:media_buildflags",
     "//tools/v8_context_snapshot:buildflags",
   ]
@@ -271,7 +267,6 @@
     ":content_descriptor_keys",
     "//build:android_buildflags",
     "//build:branding_buildflags",
-    "//build:chromeos_buildflags",
     "//build/config/chromebox_for_meetings:buildflags",
 
     # This looks needless as we have //content/common in public_deps, but it's
@@ -308,7 +303,7 @@
     deps += [ "//sandbox/win:common" ]
   }
 
-  if (is_chromeos_ash) {
+  if (is_chromeos) {
     public_deps += [ "//media/capture/video/chromeos/public" ]
   }
 
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index adeb67a..c0036cdb 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -10,7 +10,6 @@
 #include "base/time/time.h"
 #include "build/android_buildflags.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "build/config/chromebox_for_meetings/buildflags.h"
 #include "content/common/buildflags.h"
 #include "content/public/common/dips_utils.h"
@@ -69,10 +68,7 @@
 // Runs the audio service in a separate process.
 BASE_FEATURE(kAudioServiceOutOfProcess,
              "AudioServiceOutOfProcess",
-// TODO(crbug.com/40118868): Remove !IS_CHROMEOS_LACROS once lacros starts being
-// built with OS_CHROMEOS instead of OS_LINUX.
-#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || \
-    (BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS_LACROS))
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
              base::FEATURE_ENABLED_BY_DEFAULT
 #else
              base::FEATURE_DISABLED_BY_DEFAULT
@@ -978,17 +974,9 @@
 
 // Run video capture service in the Browser process as opposed to a dedicated
 // utility process.
-// Camera requests from Lacros are forwarded to Ash via a Mojo connection
-// established through cros-api. Since cros-api isn't available in utility
-// processes, Lacros's video capture service has to run within the browser
-// process.
 BASE_FEATURE(kRunVideoCaptureServiceInBrowserProcess,
              "RunVideoCaptureServiceInBrowserProcess",
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-             base::FEATURE_ENABLED_BY_DEFAULT
-#else
              base::FEATURE_DISABLED_BY_DEFAULT
-#endif
 );
 
 // Update scheduler settings using resourced on ChromeOS.
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index ffb6532..e24657e2 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -14,7 +14,6 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "content/public/common/dips_utils.h"
 #include "tools/v8_context_snapshot/buildflags.h"
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index 2e145b6..16e384c 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -5,7 +5,6 @@
 #include "content/public/common/content_switches.h"
 
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "media/media_buildflags.h"
 
 namespace switches {
@@ -947,17 +946,11 @@
     "prevent-resizing-contents-for-testing";
 #endif
 
-// TODO(crbug.com/40118868): Revisit the macro expression once build flag switch
-// of lacros-chrome is complete.
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+#if BUILDFLAG(IS_LINUX)
 // Allows sending text-to-speech requests to speech-dispatcher, a common
 // Linux speech service. Because it's buggy, the user must explicitly
 // enable it so that visiting a random webpage can't cause instability.
 const char kEnableSpeechDispatcher[] = "enable-speech-dispatcher";
-
-// For lacros, we do not use environment variable to pass values. Instead we
-// use a command line flag to pass the path to the device.
-const char kLLVMProfileFile[] = "llvm-profile-file";
 #endif
 
 #if BUILDFLAG(IS_WIN)
diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h
index 7a43dca..872dd48 100644
--- a/content/public/common/content_switches.h
+++ b/content/public/common/content_switches.h
@@ -8,7 +8,6 @@
 #define CONTENT_PUBLIC_COMMON_CONTENT_SWITCHES_H_
 
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "media/media_buildflags.h"
 #include "tools/v8_context_snapshot/buildflags.h"
@@ -259,11 +258,8 @@
 CONTENT_EXPORT extern const char kPreventResizingContentsForTesting[];
 #endif
 
-// TODO(crbug.com/40118868): Revisit the macro expression once build flag switch
-// of lacros-chrome is complete.
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+#if BUILDFLAG(IS_LINUX)
 CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
-CONTENT_EXPORT extern const char kLLVMProfileFile[];
 #endif
 
 #if BUILDFLAG(IS_WIN)
diff --git a/content/public/common/url_constants.h b/content/public/common/url_constants.h
index da22326..a0df2ab3 100644
--- a/content/public/common/url_constants.h
+++ b/content/public/common/url_constants.h
@@ -6,7 +6,6 @@
 #define CONTENT_PUBLIC_COMMON_URL_CONSTANTS_H_
 
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "device/vr/buildflags/buildflags.h"
 #include "url/url_constants.h"
 
@@ -22,7 +21,7 @@
 inline constexpr char kChromeUIScheme[] = "chrome";  // Used for WebUIs.
 inline constexpr char kChromeUIUntrustedScheme[] = "chrome-untrusted";
 inline constexpr char kViewSourceScheme[] = "view-source";
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 inline constexpr char kExternalFileScheme[] = "externalfile";
 #endif
 #if BUILDFLAG(IS_ANDROID)
diff --git a/content/public/renderer/render_accessibility.h b/content/public/renderer/render_accessibility.h
index 6e17646..ddc6211 100644
--- a/content/public/renderer/render_accessibility.h
+++ b/content/public/renderer/render_accessibility.h
@@ -5,7 +5,6 @@
 #ifndef CONTENT_PUBLIC_RENDERER_RENDER_ACCESSIBILITY_H_
 #define CONTENT_PUBLIC_RENDERER_RENDER_ACCESSIBILITY_H_
 
-#include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "ui/accessibility/ax_mode.h"
 #include "ui/accessibility/ax_node.h"
diff --git a/content/public/test/DEPS b/content/public/test/DEPS
index 1238a7e..a5391420 100644
--- a/content/public/test/DEPS
+++ b/content/public/test/DEPS
@@ -3,8 +3,6 @@
 
   # These are low-level system APIs on ChromeOS that need to be available
   # everywhere.
-  "+chromeos/crosapi/cpp/crosapi_constants.h",
-  "+chromeos/lacros/lacros_service.h",
   "+chromeos/startup/browser_params_proxy.h",
   "+chromeos/startup/startup_switches.h",
 
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc
index e297693..0cf636f 100644
--- a/content/public/test/browser_test_base.cc
+++ b/content/public/test/browser_test_base.cc
@@ -127,14 +127,6 @@
 #include "ui/aura/test/event_generator_delegate_aura.h"  // nogncheck
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "base/files/scoped_file.h"
-#include "chromeos/crosapi/cpp/crosapi_constants.h"  // nogncheck
-#include "chromeos/startup/browser_params_proxy.h"
-#include "chromeos/startup/startup_switches.h"  // nogncheck
-#include "mojo/public/cpp/platform/socket_utils_posix.h"
-#endif
-
 #if BUILDFLAG(IS_FUCHSIA)
 #include "base/fuchsia/system_info.h"
 #include "ui/platform_window/fuchsia/initialize_presenter_api_view.h"
@@ -460,61 +452,6 @@
   base::ClearCachedSystemInfoForTesting();
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  // If the test is running on the lacros environment, a file descriptor needs
-  // to be obtained and used to launch lacros-chrome so that a mojo connection
-  // between lacros-chrome and ash-chrome can be established.
-  // For more details, please see:
-  // //chrome/browser/ash/crosapi/test_mojo_connection_manager.h.
-  {
-    if (!chromeos::BrowserParamsProxy::Get()->IsCrosapiDisabledForTesting()) {
-      // TODO(crbug.com/40719121): Switch to use |kLacrosMojoSocketForTesting|
-      // in
-      // //ash/constants/ash_switches.h.
-      // Please refer to the CL comments for why it can't be done now:
-      // http://crrev.com/c/2402580/2/content/public/test/browser_test_base.cc
-      CHECK(command_line->HasSwitch("lacros-mojo-socket-for-testing"));
-      std::string socket_path =
-          command_line->GetSwitchValueASCII("lacros-mojo-socket-for-testing");
-      auto channel = mojo::NamedPlatformChannel::ConnectToServer(socket_path);
-      base::ScopedFD socket_fd = channel.TakePlatformHandle().TakeFD();
-
-      // Mark the channel as blocking.
-      int flags = fcntl(socket_fd.get(), F_GETFL);
-      std::string helper_msg =
-          "On bot, open CAS outputs on test result page(Milo),"
-          "there is a ash_chrome.log file which contains ash log."
-          "For local debugging, pass in --ash-logging-path to test runner.";
-      PCHECK(flags != -1) << "Ash is probably not running. Perhaps it crashed?"
-                          << helper_msg;
-      fcntl(socket_fd.get(), F_SETFL, flags & ~O_NONBLOCK);
-
-      uint8_t buf[32];
-      std::vector<base::ScopedFD> descriptors;
-      auto size = mojo::SocketRecvmsg(socket_fd.get(), buf, sizeof(buf),
-                                      &descriptors, true /*block*/);
-      if (size < 0)
-        PLOG(ERROR) << "Error receiving message from the socket" << helper_msg;
-
-      ASSERT_EQ(1, size) << "It must receive a version number with 1 byte.";
-      ASSERT_EQ(buf[0], 1u)
-          << "Mojo connection protocol version must be 1. Version 0 is "
-          << "deprecated.";
-      ASSERT_EQ(descriptors.size(), 2u)
-          << "ash-chrome must sends 2 FDs, the first one contains startup data "
-          << "and the second one is for a crosapi Mojo connection.";
-
-      // Ok to release the FD here, too.
-      command_line->AppendSwitchASCII(
-          chromeos::switches::kCrosStartupDataFD,
-          base::NumberToString(descriptors[0].release()));
-      command_line->AppendSwitchASCII(
-          crosapi::kCrosapiMojoPlatformChannelHandle,
-          base::NumberToString(descriptors[1].release()));
-    }
-  }
-#endif
-
   if (use_software_gl && !use_software_compositing_)
     command_line->AppendSwitch(switches::kOverrideUseSoftwareGLForTests);
 
diff --git a/content/public/test/browser_test_base.h b/content/public/test/browser_test_base.h
index d50cf9f..42d872d 100644
--- a/content/public/test/browser_test_base.h
+++ b/content/public/test/browser_test_base.h
@@ -28,7 +28,6 @@
 #include "base/test/scoped_path_override.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/public/test/test_host_resolver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/dns/public/dns_over_https_config.h"
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index 5a2ba4f..d6a51043 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -154,7 +154,7 @@
 #include "content/public/test/mock_captured_surface_controller.h"
 #endif  // !BUILDFLAG(IS_ANDROID)
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 #include "ash/webui/grit/ash_webui_common_resources.h"
 #endif
 
@@ -427,7 +427,7 @@
   base::OnceClosure on_will_process_response_closure_;
 };
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 bool HasGzipHeader(const base::RefCountedMemory& maybe_gzipped) {
   net::GZipHeader header;
   net::GZipHeader::Status header_status = net::GZipHeader::INCOMPLETE_HEADER;
@@ -462,7 +462,7 @@
     to_append->append(dest_buffer->data(), rv);
   }
 }
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 // Queries for video input devices on the current system using the getSources
 // API.
@@ -2007,7 +2007,7 @@
   return all_wc;
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 bool ExecuteWebUIResourceTest(WebContents* web_contents) {
   // Inject WebUI test runner script.
   std::string script;
@@ -2049,7 +2049,7 @@
 
   return message.compare("\"SUCCESS\"") == 0;
 }
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 std::string GetCookies(BrowserContext* browser_context,
                        const GURL& url,
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index 9176822..e564c37d 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -1015,7 +1015,7 @@
 // BrowserContext.
 std::vector<WebContents*> GetAllWebContents();
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 // Executes the WebUI resource tests. Injects the test runner script prior to
 // executing the tests.
 //
diff --git a/content/public/test/content_browser_test.cc b/content/public/test/content_browser_test.cc
index 6e3c805..518d7001 100644
--- a/content/public/test/content_browser_test.cc
+++ b/content/public/test/content_browser_test.cc
@@ -14,7 +14,6 @@
 #include "base/task/current_thread.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
-#include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/common/content_paths.h"
@@ -34,9 +33,7 @@
 #include "content/shell/app/paths_mac.h"
 #endif
 
-// TODO(crbug.com/40118868): Revisit the macro expression once build flag switch
-// of lacros-chrome is complete.
-#if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_LINUX)
 #include "ui/base/ime/init/input_method_initializer.h"
 #endif
 
@@ -131,9 +128,7 @@
 #endif
 
   // LinuxInputMethodContextFactory has to be initialized.
-// TODO(crbug.com/40118868): Revisit the macro expression once build flag switch
-// of lacros-chrome is complete.
-#if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_LINUX)
   ui::InitializeInputMethodForTesting();
 #endif
 
@@ -156,9 +151,7 @@
   }
 
   // LinuxInputMethodContextFactory has to be shutdown.
-// TODO(crbug.com/40118868): Revisit the macro expression once build flag switch
-// of lacros-chrome is complete.
-#if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_LINUX)
   ui::ShutdownInputMethodForTesting();
 #endif
 }
diff --git a/content/public/test/content_browser_test_shell_main_delegate.cc b/content/public/test/content_browser_test_shell_main_delegate.cc
index d6e13de8..9682873 100644
--- a/content/public/test/content_browser_test_shell_main_delegate.cc
+++ b/content/public/test/content_browser_test_shell_main_delegate.cc
@@ -19,18 +19,6 @@
 ContentBrowserTestShellMainDelegate::~ContentBrowserTestShellMainDelegate() =
     default;
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-std::optional<int> ContentBrowserTestShellMainDelegate::PostEarlyInitialization(
-    InvokedIn invoked_in) {
-  if (absl::holds_alternative<InvokedInBrowserProcess>(invoked_in)) {
-    // Browser tests on Lacros requires a non-null LacrosService.
-    lacros_service_ = std::make_unique<chromeos::LacrosService>();
-  }
-  ShellMainDelegate::PostEarlyInitialization(invoked_in);
-  return std::nullopt;
-}
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-
 void ContentBrowserTestShellMainDelegate::CreateThreadPool(
     std::string_view name) {
   // Injects a test TaskTracker to watch for long-running tasks and produce a
diff --git a/content/public/test/content_browser_test_shell_main_delegate.h b/content/public/test/content_browser_test_shell_main_delegate.h
index 28eb643e..37c3447c 100644
--- a/content/public/test/content_browser_test_shell_main_delegate.h
+++ b/content/public/test/content_browser_test_shell_main_delegate.h
@@ -8,15 +8,8 @@
 #include <memory>
 #include <optional>
 
-#include "build/chromeos_buildflags.h"
 #include "content/shell/app/shell_main_delegate.h"
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-// TODO(erikchen): Move #include to .cc file and forward declare
-// chromeos::LacrosService to resolve crbug.com/1195401.
-#include "chromeos/lacros/lacros_service.h"
-#endif
-
 namespace content {
 
 // Acts like normal ShellMainDelegate but inserts behaviour for browser tests.
@@ -26,17 +19,10 @@
   ~ContentBrowserTestShellMainDelegate() override;
 
   // ContentMainDelegate implementation:
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  std::optional<int> PostEarlyInitialization(InvokedIn invoked_in) override;
-#endif
   void CreateThreadPool(std::string_view name) override;
+
   // ShellMainDelegate overrides.
   content::ContentBrowserClient* CreateContentBrowserClient() override;
-
- private:
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  std::unique_ptr<chromeos::LacrosService> lacros_service_;
-#endif
 };
 
 }  // namespace content
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 2e1882f..7e26ca1 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -19,7 +19,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/browser/child_process_host_impl.h"
 #include "content/browser/child_process_security_policy_impl.h"
 #include "content/browser/file_system_access/file_system_access_error.h"
@@ -596,13 +595,13 @@
   proto->set_id(GetDeprecatedID());
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 void MockRenderProcessHost::ReinitializeLogging(
     uint32_t logging_dest,
     base::ScopedFD log_file_descriptor) {
   NOTIMPLEMENTED();
 }
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 uint64_t MockRenderProcessHost::GetPrivateMemoryFootprint() {
   return 0;
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index 384f3c1..aa67241 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -21,7 +21,6 @@
 #include "base/metrics/persistent_memory_allocator.h"
 #include "base/observer_list.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "content/public/browser/global_routing_id.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_process_host_factory.h"
@@ -279,7 +278,7 @@
   std::string GetInfoForBrowserContextDestructionCrashReporting() override;
   void WriteIntoTrace(perfetto::TracedProto<TraceProto> proto) const override;
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
   void ReinitializeLogging(uint32_t logging_dest,
                            base::ScopedFD log_file_descriptor) override;
 #endif
diff --git a/content/public/test/network_connection_change_simulator.cc b/content/public/test/network_connection_change_simulator.cc
index 2097d511..b84c808 100644
--- a/content/public/test/network_connection_change_simulator.cc
+++ b/content/public/test/network_connection_change_simulator.cc
@@ -8,7 +8,6 @@
 
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
-#include "build/chromeos_buildflags.h"
 #include "content/public/browser/network_service_instance.h"
 #include "content/public/browser/network_service_util.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/content/public/test/network_connection_change_simulator.h b/content/public/test/network_connection_change_simulator.h
index af1b912a..c277e4c 100644
--- a/content/public/test/network_connection_change_simulator.h
+++ b/content/public/test/network_connection_change_simulator.h
@@ -5,7 +5,6 @@
 #ifndef CONTENT_PUBLIC_TEST_NETWORK_CONNECTION_CHANGE_SIMULATOR_H_
 #define CONTENT_PUBLIC_TEST_NETWORK_CONNECTION_CHANGE_SIMULATOR_H_
 
-#include "build/chromeos_buildflags.h"
 #include "services/network/public/cpp/network_connection_tracker.h"
 
 namespace base {
diff --git a/content/public/utility/content_utility_client.cc b/content/public/utility/content_utility_client.cc
index 1433f2f..341ddca 100644
--- a/content/public/utility/content_utility_client.cc
+++ b/content/public/utility/content_utility_client.cc
@@ -6,10 +6,10 @@
 
 namespace content {
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 mojo::GenericPendingReceiver ContentUtilityClient::InitMojoServiceManager() {
   return mojo::GenericPendingReceiver();
 }
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 }  // namespace content
diff --git a/content/public/utility/content_utility_client.h b/content/public/utility/content_utility_client.h
index 0eb9a979..ef7cd62 100644
--- a/content/public/utility/content_utility_client.h
+++ b/content/public/utility/content_utility_client.h
@@ -49,10 +49,10 @@
   // Only called from the main thread.
   virtual void RegisterMainThreadServices(mojo::ServiceFactory& services) {}
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
   // Initialize the endpoint of mojo service manager.
   virtual mojo::GenericPendingReceiver InitMojoServiceManager();
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // BUILDFLAG(IS_CHROMEOS)
 };
 
 }  // namespace content
diff --git a/content/utility/utility_main.cc b/content/utility/utility_main.cc
index 0c9ba35..bdb64a7 100644
--- a/content/utility/utility_main.cc
+++ b/content/utility/utility_main.cc
@@ -176,8 +176,6 @@
       HMODULE h_mod = base::LoadNativeLibrary(library_path, &lib_error);
       // We deliberately "leak" `h_mod` so that the module stays loaded.
       if (!h_mod) {
-        base::UmaHistogramSparse(
-            "Process.Sandbox.PreloadLibraryFailed.ErrorCode", lib_error.code);
         // The browser should not request libraries that do not exist, so crash
         // on failure. Record info to distinguish crash signatures.
         base::debug::Alias(&lib_error);
diff --git a/extensions/browser/guest_view/app_view/app_view_guest.cc b/extensions/browser/guest_view/app_view/app_view_guest.cc
index 05441db0..7824535c17 100644
--- a/extensions/browser/guest_view/app_view/app_view_guest.cc
+++ b/extensions/browser/guest_view/app_view/app_view_guest.cc
@@ -268,16 +268,18 @@
 }
 
 void AppViewGuest::DidInitialize(const base::Value::Dict& create_params) {
-  if (!base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
-    ExtensionsAPIClient::Get()->AttachWebContentsHelpers(web_contents());
-  }
-
-  if (!url_.is_valid()) {
+  if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
     return;
   }
 
-  GetController().LoadURL(url_, content::Referrer(), ui::PAGE_TRANSITION_LINK,
-                          std::string());
+  ExtensionsAPIClient::Get()->AttachWebContentsHelpers(web_contents());
+  LoadURL();
+}
+
+void AppViewGuest::DidAttachToEmbedder() {
+  if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
+    LoadURL();
+  }
 }
 
 void AppViewGuest::MaybeRecreateGuestContents(
@@ -362,6 +364,15 @@
       browser_context(), std::move(embed_request), extension);
 }
 
+void AppViewGuest::LoadURL() {
+  if (!url_.is_valid()) {
+    return;
+  }
+
+  GetController().LoadURL(url_, content::Referrer(), ui::PAGE_TRANSITION_LINK,
+                          std::string());
+}
+
 void AppViewGuest::SetAppDelegateForTest(AppDelegate* delegate) {
   app_delegate_.reset(delegate);
 }
diff --git a/extensions/browser/guest_view/app_view/app_view_guest.h b/extensions/browser/guest_view/app_view/app_view_guest.h
index 78dcd52..29bd0d7 100644
--- a/extensions/browser/guest_view/app_view/app_view_guest.h
+++ b/extensions/browser/guest_view/app_view/app_view_guest.h
@@ -61,6 +61,7 @@
                        const base::Value::Dict& create_params,
                        GuestPageCreatedCallback callback) final;
   void DidInitialize(const base::Value::Dict& create_params) final;
+  void DidAttachToEmbedder() final;
   void MaybeRecreateGuestContents(
       content::RenderFrameHost* outer_contents_frame) final;
   const char* GetAPINamespace() const final;
@@ -107,6 +108,8 @@
       GuestPageCreatedCallback callback,
       std::unique_ptr<LazyContextTaskQueue::ContextInfo> context_info);
 
+  void LoadURL();
+
   GURL url_;
   std::string guest_extension_id_;
   std::unique_ptr<AppViewGuestDelegate> app_view_guest_delegate_;
diff --git a/extensions/browser/guest_view/extension_options/extension_options_guest.cc b/extensions/browser/guest_view/extension_options/extension_options_guest.cc
index 444592ac..5faa0322 100644
--- a/extensions/browser/guest_view/extension_options/extension_options_guest.cc
+++ b/extensions/browser/guest_view/extension_options/extension_options_guest.cc
@@ -117,13 +117,22 @@
 
 void ExtensionOptionsGuest::DidInitialize(
     const base::Value::Dict& create_params) {
-  if (!base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
-    ExtensionsAPIClient::Get()->AttachWebContentsHelpers(web_contents());
+  if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
+    return;
   }
+
+  ExtensionsAPIClient::Get()->AttachWebContentsHelpers(web_contents());
   GetController().LoadURL(options_page_, content::Referrer(),
                           ui::PAGE_TRANSITION_LINK, std::string());
 }
 
+void ExtensionOptionsGuest::DidAttachToEmbedder() {
+  if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
+    GetController().LoadURL(options_page_, content::Referrer(),
+                            ui::PAGE_TRANSITION_LINK, std::string());
+  }
+}
+
 void ExtensionOptionsGuest::MaybeRecreateGuestContents(
     content::RenderFrameHost* outer_contents_frame) {
   // This situation is not possible for ExtensionOptions.
diff --git a/extensions/browser/guest_view/extension_options/extension_options_guest.h b/extensions/browser/guest_view/extension_options/extension_options_guest.h
index 8df6010..91378fc 100644
--- a/extensions/browser/guest_view/extension_options/extension_options_guest.h
+++ b/extensions/browser/guest_view/extension_options/extension_options_guest.h
@@ -36,6 +36,7 @@
                        const base::Value::Dict& create_params,
                        GuestPageCreatedCallback callback) final;
   void DidInitialize(const base::Value::Dict& create_params) final;
+  void DidAttachToEmbedder() final;
   void MaybeRecreateGuestContents(
       content::RenderFrameHost* outer_contents_frame) final;
   void GuestViewDidStopLoading() final;
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc
index ce33fee9..5f82e467 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
@@ -427,6 +427,11 @@
 }
 
 void WebViewGuest::DidAttachToEmbedder() {
+  if (pending_first_navigation_) {
+    CHECK(base::FeatureList::IsEnabled(features::kGuestViewMPArch));
+    std::move(pending_first_navigation_).Run();
+  }
+
   ApplyAttributes(attach_params());
 }
 
@@ -1830,6 +1835,14 @@
     base::OnceCallback<void(content::NavigationHandle&)>
         navigation_handle_callback,
     bool force_navigation) {
+  if (!attached() && base::FeatureList::IsEnabled(features::kGuestViewMPArch)) {
+    pending_first_navigation_ =
+        base::BindOnce(&WebViewGuest::LoadURLWithParams, GetWeakPtr(), url,
+                       referrer, transition_type,
+                       std::move(navigation_handle_callback), force_navigation);
+    return;
+  }
+
   if (!url.is_valid()) {
     LoadAbort(true /* is_top_level */, url, net::ERR_INVALID_URL);
     NavigateGuest(url::kAboutBlankURL, std::move(navigation_handle_callback),
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.h b/extensions/browser/guest_view/web_view/web_view_guest.h
index cf40e26..7589572b 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.h
+++ b/extensions/browser/guest_view/web_view/web_view_guest.h
@@ -432,6 +432,12 @@
   // The current UA override.
   blink::UserAgentOverride ua_override_;
 
+  // Set when `LoadURLWithParams` is called before a guest is attached, in
+  // order to run it after the guest attaches. Note: If this method is called
+  // multiple times, we replace the callback; i.e. we drop the previous
+  // navigations.
+  base::OnceClosure pending_first_navigation_;
+
   // This is used to ensure pending tasks will not fire after this object is
   // destroyed.
   base::WeakPtrFactory<WebViewGuest> weak_ptr_factory_{this};
diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc
index c6664dd..39c7143 100644
--- a/gin/v8_initializer.cc
+++ b/gin/v8_initializer.cc
@@ -236,20 +236,20 @@
     // prefix, so we expect all feature names to start with "V8Flag_". Strip
     // this prefix off to get the corresponding V8 flag name.
     DCHECK(feature_name_view.starts_with(kV8FlagFeaturePrefix));
-    std::string_view flag_name =
-        feature_name_view.substr(kV8FlagFeaturePrefix.size());
+    std::string flag_name(
+        feature_name_view.substr(kV8FlagFeaturePrefix.size()));
 
     switch (override_state) {
       case base::FeatureList::OverrideState::OVERRIDE_USE_DEFAULT:
         return;
 
       case base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE:
-        SetV8FlagsFormatted("--no-%s", flag_name);
+        SetV8FlagsFormatted("--no-%s", flag_name.c_str());
         // Do not set parameters for disabled features.
         break;
 
       case base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE:
-        SetV8FlagsFormatted("--%s", flag_name);
+        SetV8FlagsFormatted("--%s", flag_name.c_str());
         for (const auto& [param_name, param_value] : params) {
           SetV8FlagsFormatted("--%s=%s", param_name.c_str(),
                               param_value.c_str());
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index 2baf30d..72e71aa9 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -2628,7 +2628,7 @@
 
   size_t prev_byte_size = 0;
   for (int plane = 0; plane < yuv_info.numPlanes(); plane++) {
-    auto color_type = viz::ToClosestSkColorType(true, dest_format, plane);
+    auto color_type = viz::ToClosestSkColorType(dest_format, plane);
     auto plane_size =
         dest_format.GetPlaneSize(plane, gfx::Size(src_width, src_height));
     SkImageInfo src_info =
diff --git a/gpu/command_buffer/service/raster_decoder.cc b/gpu/command_buffer/service/raster_decoder.cc
index 27039a79..e4b959d5 100644
--- a/gpu/command_buffer/service/raster_decoder.cc
+++ b/gpu/command_buffer/service/raster_decoder.cc
@@ -2225,7 +2225,7 @@
 
   size_t prev_byte_size = 0;
   for (int plane = 0; plane < yuv_info.numPlanes(); plane++) {
-    auto color_type = viz::ToClosestSkColorType(true, dest_format, plane);
+    auto color_type = viz::ToClosestSkColorType(dest_format, plane);
     auto plane_size =
         dest_format.GetPlaneSize(plane, gfx::Size(src_width, src_height));
     SkImageInfo src_info =
diff --git a/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc b/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc
index de8aae6..cd75cc9 100644
--- a/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc
@@ -166,8 +166,7 @@
       // cannot reuse the cached SkSurface.
       if (!surface || surface_props != surface->props() ||
           final_msaa_count != backing_impl()->surface_msaa_count_) {
-        SkColorType sk_color_type = viz::ToClosestSkColorType(
-            /*gpu_compositing=*/true, format(), plane);
+        SkColorType sk_color_type = viz::ToClosestSkColorType(format(), plane);
         surface = SkSurfaces::WrapBackendTexture(
             backing_impl()->gr_context(), promise_texture->backendTexture(),
             surface_origin(), final_msaa_count, sk_color_type,
diff --git a/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc
index 8c91d16..35c0d8aa 100644
--- a/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc
@@ -2050,11 +2050,9 @@
     size_t plane_offset = 0;
     for (int plane = 0; plane < format.NumberOfPlanes(); ++plane) {
       gfx::Size plane_size = format.GetPlaneSize(plane, size);
-      auto info =
-          SkImageInfo::Make(gfx::SizeToSkISize(plane_size),
-                            viz::ToClosestSkColorType(
-                                /*gpu_compositing=*/true, format, plane),
-                            alpha_type, color_space.ToSkColorSpace());
+      auto info = SkImageInfo::Make(gfx::SizeToSkISize(plane_size),
+                                    viz::ToClosestSkColorType(format, plane),
+                                    alpha_type, color_space.ToSkColorSpace());
       DCHECK_LE(info.computeMinByteSize() + plane_offset, kDataSize);
       pixmaps.emplace_back(info, buffer.data() + plane_offset,
                            info.minRowBytes());
diff --git a/gpu/command_buffer/service/shared_image/dawn_fallback_image_representation.cc b/gpu/command_buffer/service/shared_image/dawn_fallback_image_representation.cc
index 752bc5a..6d89cb9 100644
--- a/gpu/command_buffer/service/shared_image/dawn_fallback_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/dawn_fallback_image_representation.cc
@@ -115,8 +115,7 @@
 
   auto info =
       SkImageInfo::Make(gfx::SizeToSkISize(staging_buffer.plane_size),
-                        viz::ToClosestSkColorType(
-                            /*gpu_compositing=*/true, format(), plane_index),
+                        viz::ToClosestSkColorType(format(), plane_index),
                         alpha_type(), color_space().ToSkColorSpace());
   return SkPixmap(info, pixels_pointer, staging_buffer.bytes_per_row);
 }
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_skia_representation.cc b/gpu/command_buffer/service/shared_image/external_vk_image_skia_representation.cc
index df2c43c..ebafa0c 100644
--- a/gpu/command_buffer/service/shared_image/external_vk_image_skia_representation.cc
+++ b/gpu/command_buffer/service/shared_image/external_vk_image_skia_representation.cc
@@ -78,8 +78,7 @@
     // reuse the cached SkSurface.
     if (!surface || surface_props != surface->props() ||
         final_msaa_count != surface_msaa_count_) {
-      SkColorType sk_color_type = viz::ToClosestSkColorType(
-          /*gpu_compositing=*/true, format(), plane);
+      SkColorType sk_color_type = viz::ToClosestSkColorType(format(), plane);
       surface = SkSurfaces::WrapBackendTexture(
           gr_context, promise_texture->backendTexture(), surface_origin(),
           final_msaa_count, sk_color_type,
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
index e987eebb..e87014e 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
@@ -142,8 +142,7 @@
     }
 
     for (int plane = 0; plane < format().NumberOfPlanes(); ++plane) {
-      SkColorType sk_color_type = viz::ToClosestSkColorType(
-          /*gpu_compositing=*/true, format(), plane);
+      SkColorType sk_color_type = viz::ToClosestSkColorType(format(), plane);
       // Gray is not a renderable single channel format, but alpha is.
       if (sk_color_type == kGray_8_SkColorType) {
         sk_color_type = kAlpha_8_SkColorType;
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_passthrough_fallback_image_representation.cc b/gpu/command_buffer/service/shared_image/gl_texture_passthrough_fallback_image_representation.cc
index 27c40732..c5861a9c 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_passthrough_fallback_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/gl_texture_passthrough_fallback_image_representation.cc
@@ -71,8 +71,7 @@
     : GLTexturePassthroughImageRepresentation(manager, backing, tracker) {
   for (int plane = 0; plane < format().NumberOfPlanes(); plane++) {
     const gfx::Size plane_size = format().GetPlaneSize(plane, size());
-    const SkColorType plane_ct = viz::ToClosestSkColorType(
-        /*gpu_compositing=*/true, format(), plane);
+    const SkColorType plane_ct = viz::ToClosestSkColorType(format(), plane);
     const SkImageInfo plane_info = SkImageInfo::Make(
         plane_size.width(), plane_size.height(), plane_ct, kPremul_SkAlphaType);
     static constexpr size_t kDefaultGLAlignment = 4;
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
index 047b06c..ae5c35ec 100644
--- a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
+++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
@@ -419,8 +419,8 @@
   for (int plane_index = 0; plane_index < format().NumberOfPlanes();
        plane_index++) {
     // Use the color type per plane for multiplanar formats.
-    SkColorType sk_color_type = viz::ToClosestSkColorType(
-        /*gpu_compositing=*/true, format(), plane_index);
+    SkColorType sk_color_type =
+        viz::ToClosestSkColorType(format(), plane_index);
     // Gray is not a renderable single channel format, but alpha is.
     if (sk_color_type == kGray_8_SkColorType) {
       sk_color_type = kAlpha_8_SkColorType;
@@ -571,8 +571,7 @@
   int num_planes = format().NumberOfPlanes();
   write_surfaces_.reserve(num_planes);
   for (int plane = 0; plane < num_planes; plane++) {
-    SkColorType sk_color_type = viz::ToClosestSkColorType(
-        /*gpu_compositing=*/true, format(), plane);
+    SkColorType sk_color_type = viz::ToClosestSkColorType(format(), plane);
     // Gray is not a renderable single channel format, but alpha is.
     if (sk_color_type == kGray_8_SkColorType) {
       sk_color_type = kAlpha_8_SkColorType;
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
index 35876ae..3aeda58 100644
--- a/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
@@ -694,8 +694,7 @@
     gfx::Size plane_size = format.GetPlaneSize(plane_index, size);
     auto info =
         SkImageInfo::Make(gfx::SizeToSkISize(plane_size),
-                          viz::ToClosestSkColorType(
-                              /*gpu_compositing=*/true, format, plane_index),
+                          viz::ToClosestSkColorType(format, plane_index),
                           alpha_type, color_space.ToSkColorSpace());
     pixmaps[plane_index] =
         SkPixmap(info, plane_datas[plane_index].data(), info.minRowBytes());
diff --git a/gpu/command_buffer/service/shared_image/shared_image_backing.cc b/gpu/command_buffer/service/shared_image/shared_image_backing.cc
index 3139b85..31eafd2 100644
--- a/gpu/command_buffer/service/shared_image/shared_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/shared_image_backing.cc
@@ -109,8 +109,7 @@
 SkImageInfo SharedImageBacking::AsSkImageInfo(int plane_index) const {
   gfx::Size plane_size = format_.GetPlaneSize(plane_index, size_);
   return SkImageInfo::Make(plane_size.width(), plane_size.height(),
-                           viz::ToClosestSkColorType(
-                               /*gpu_compositing=*/true, format(), plane_index),
+                           viz::ToClosestSkColorType(format(), plane_index),
                            alpha_type_, color_space_.ToSkColorSpace());
 }
 
diff --git a/gpu/command_buffer/service/shared_image/shared_image_representation.cc b/gpu/command_buffer/service/shared_image/shared_image_representation.cc
index dc624cc..c43a12a 100644
--- a/gpu/command_buffer/service/shared_image/shared_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/shared_image_representation.cc
@@ -460,8 +460,7 @@
 
   auto surface_origin = representation()->surface_origin();
   auto alpha_type = SkAlphaType::kOpaque_SkAlphaType;
-  auto color_type =
-      viz::ToClosestSkColorType(/*gpu_compositing=*/true, format, plane_index);
+  auto color_type = viz::ToClosestSkColorType(format, plane_index);
   return SkImages::BorrowTextureFrom(
       context_state->gr_context(),
       promise_image_texture(plane_index)->backendTexture(), surface_origin,
@@ -697,8 +696,7 @@
   CHECK_EQ(static_cast<int>(graphite_textures_.size()),
            format.NumberOfPlanes());
   auto alpha_type = SkAlphaType::kOpaque_SkAlphaType;
-  auto color_type =
-      viz::ToClosestSkColorType(/*gpu_compositing=*/true, format, plane_index);
+  auto color_type = viz::ToClosestSkColorType(format, plane_index);
   return SkImages::WrapTexture(context_state->gpu_main_graphite_recorder(),
                                graphite_texture(plane_index), color_type,
                                alpha_type, /*colorSpace=*/nullptr,
diff --git a/gpu/command_buffer/service/shared_image/shared_image_test_base.cc b/gpu/command_buffer/service/shared_image/shared_image_test_base.cc
index b6d9487..677577b 100644
--- a/gpu/command_buffer/service/shared_image/shared_image_test_base.cc
+++ b/gpu/command_buffer/service/shared_image/shared_image_test_base.cc
@@ -104,7 +104,7 @@
   std::vector<SkBitmap> bitmaps(num_planes);
 
   for (int plane = 0; plane < num_planes; ++plane) {
-    SkColorType color_type = ToClosestSkColorType(true, format, plane);
+    SkColorType color_type = ToClosestSkColorType(format, plane);
     gfx::Size plane_size = format.GetPlaneSize(plane, size);
     bitmaps[plane] = MakeRedBitmap(color_type, plane_size, added_stride);
   }
@@ -268,8 +268,7 @@
 
   int num_planes = format.NumberOfPlanes();
   for (int plane = 0; plane < num_planes; ++plane) {
-    SkColorType plane_color_type =
-        viz::ToClosestSkColorType(true, format, plane);
+    SkColorType plane_color_type = viz::ToClosestSkColorType(format, plane);
     gfx::Size plane_size = format.GetPlaneSize(plane, size);
     SkImageInfo dst_info = SkImageInfo::Make(
         plane_size.width(), plane_size.height(), plane_color_type,
@@ -315,8 +314,7 @@
 
   int num_planes = format.NumberOfPlanes();
   for (int plane = 0; plane < num_planes; ++plane) {
-    SkColorType plane_color_type =
-        viz::ToClosestSkColorType(true, format, plane);
+    SkColorType plane_color_type = viz::ToClosestSkColorType(format, plane);
     gfx::Size plane_size = format.GetPlaneSize(plane, size);
     SkImageInfo dst_info = SkImageInfo::Make(
         plane_size.width(), plane_size.height(), plane_color_type,
diff --git a/gpu/command_buffer/service/shared_image/shared_memory_image_backing.cc b/gpu/command_buffer/service/shared_image/shared_memory_image_backing.cc
index e34b2d8..f8c5c1e4 100644
--- a/gpu/command_buffer/service/shared_image/shared_memory_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/shared_memory_image_backing.cc
@@ -216,8 +216,7 @@
   for (int plane = 0; plane < format.NumberOfPlanes(); ++plane) {
     gfx::Size plane_size = format.GetPlaneSize(plane, size);
     auto info = SkImageInfo::Make(gfx::SizeToSkISize(plane_size),
-                                  viz::ToClosestSkColorType(
-                                      /*gpu_compositing=*/true, format, plane),
+                                  viz::ToClosestSkColorType(format, plane),
                                   alpha_type, color_space.ToSkColorSpace());
     pixmaps_.push_back(shared_memory_wrapper_.MakePixmapForPlane(info, plane));
   }
diff --git a/gpu/command_buffer/service/shared_image/skia_gl_image_representation.cc b/gpu/command_buffer/service/shared_image/skia_gl_image_representation.cc
index 49aec927..632d0ee2 100644
--- a/gpu/command_buffer/service/shared_image/skia_gl_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/skia_gl_image_representation.cc
@@ -148,8 +148,8 @@
   for (int plane_index = 0; plane_index < format().NumberOfPlanes();
        plane_index++) {
     // Use the color type per plane for multiplanar formats.
-    SkColorType sk_color_type = viz::ToClosestSkColorType(
-        /*gpu_compositing=*/true, format(), plane_index);
+    SkColorType sk_color_type =
+        viz::ToClosestSkColorType(format(), plane_index);
     auto surface = SkSurfaces::WrapBackendTexture(
         context_state_->gr_context(),
         promise_textures_[plane_index]->backendTexture(), surface_origin(),
diff --git a/gpu/command_buffer/service/shared_image/skia_graphite_dawn_image_representation.cc b/gpu/command_buffer/service/shared_image/skia_graphite_dawn_image_representation.cc
index a2205a5..e0e73f3 100644
--- a/gpu/command_buffer/service/shared_image/skia_graphite_dawn_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/skia_graphite_dawn_image_representation.cc
@@ -149,8 +149,7 @@
   std::vector<sk_sp<SkSurface>> surfaces;
   surfaces.reserve(format().NumberOfPlanes());
   for (int plane = 0; plane < format().NumberOfPlanes(); plane++) {
-    SkColorType sk_color_type = viz::ToClosestSkColorType(
-        /*gpu_compositing=*/true, format(), plane);
+    SkColorType sk_color_type = viz::ToClosestSkColorType(format(), plane);
     // Gray is not a renderable single channel format, but alpha is.
     if (sk_color_type == kGray_8_SkColorType) {
       sk_color_type = kAlpha_8_SkColorType;
diff --git a/gpu/command_buffer/service/shared_image/skia_vk_ozone_image_representation.cc b/gpu/command_buffer/service/shared_image/skia_vk_ozone_image_representation.cc
index 98013286..c67ba9b 100644
--- a/gpu/command_buffer/service/shared_image/skia_vk_ozone_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/skia_vk_ozone_image_representation.cc
@@ -107,8 +107,7 @@
       const auto& promise_texture = promise_textures_[plane];
       DCHECK(promise_texture);
       // External sampler is not supported with WriteAccess.
-      SkColorType sk_color_type = viz::ToClosestSkColorType(
-          /*gpu_compositing=*/true, format(), plane);
+      SkColorType sk_color_type = viz::ToClosestSkColorType(format(), plane);
       auto surface = SkSurfaces::WrapBackendTexture(
           gr_context, promise_texture->backendTexture(), surface_origin(),
           final_msaa_count, sk_color_type, color_space().ToSkColorSpace(),
diff --git a/gpu/command_buffer/service/shared_image/wrapped_graphite_texture_backing.cc b/gpu/command_buffer/service/shared_image/wrapped_graphite_texture_backing.cc
index 98acf00..cc15bd0 100644
--- a/gpu/command_buffer/service/shared_image/wrapped_graphite_texture_backing.cc
+++ b/gpu/command_buffer/service/shared_image/wrapped_graphite_texture_backing.cc
@@ -69,8 +69,7 @@
     CHECK(write_surfaces_.empty());
     write_surfaces_.reserve(texture_holders.size());
     for (int plane = 0; plane < format().NumberOfPlanes(); ++plane) {
-      auto color_type =
-          viz::ToClosestSkColorType(/*gpu_compositing=*/true, format(), plane);
+      auto color_type = viz::ToClosestSkColorType(format(), plane);
       void* release_context =
           scoped_refptr<WrappedGraphiteTextureHolder>(texture_holders[plane])
               .release();
@@ -295,8 +294,7 @@
 
   std::vector<ReadPixelsContext> contexts(format().NumberOfPlanes());
   for (int i = 0; i < format().NumberOfPlanes(); i++) {
-    const auto color_type =
-        viz::ToClosestSkColorType(/*gpu_compositing=*/true, format(), i);
+    const auto color_type = viz::ToClosestSkColorType(format(), i);
     sk_sp<SkImage> sk_image =
         SkImages::WrapTexture(context_state_->gpu_main_graphite_recorder(),
                               texture_holders_[i]->texture(), color_type,
diff --git a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc
index b9ba15a..a699557b 100644
--- a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc
@@ -370,8 +370,7 @@
 }
 
 SkColorType WrappedSkImageBacking::GetSkColorType(int plane_index) {
-  return viz::ToClosestSkColorType(/*gpu_compositing=*/true, format(),
-                                   plane_index);
+  return viz::ToClosestSkColorType(format(), plane_index);
 }
 
 std::vector<sk_sp<SkSurface>> WrappedSkImageBacking::GetSkSurfaces(
diff --git a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc
index 2e312fb..f04fdef 100644
--- a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc
+++ b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc
@@ -244,8 +244,7 @@
   if (context_state_->gr_context()) {
     // Check that skia-ganesh can create the required backend textures.
     for (int plane = 0; plane < format.NumberOfPlanes(); ++plane) {
-      SkColorType color_type =
-          viz::ToClosestSkColorType(/*gpu_compositing=*/true, format, plane);
+      SkColorType color_type = viz::ToClosestSkColorType(format, plane);
       // For ALPHA8 skia will pick format depending on context version and
       // extensions available and we'll have to match that format when we record
       // DDLs. To avoid matching logic here, fallback to other backings (e.g
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 98d9bd0..6464290 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -155,6 +155,24 @@
       <message name="IDS_IOS_AI_PROTOTYPING_SERVER_SIDE_SUBMIT" translateable="false" desc="Server side submit button text for AI prototyping menu [Length: unlimited].">
         Server Side Submit
       </message>
+      <message name="IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUP_TABS_BUTTON" translateable="false" desc="The label for the button that executes the Tab Organization query [Length: unlimited].">
+        Group tabs
+      </message>
+      <message name="IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_DOMAIN" translateable="false" desc="Label for the Domain Based grouping strategy of Tab Organization [Length: unlimited].">
+        Domain based
+      </message>
+      <message name="IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_LABEL" translateable="false" desc="Label for the grouping strategy section of Tab Organization [Length: unlimited].">
+        Grouping strategy
+      </message>
+      <message name="IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_TASK" translateable="false" desc="Label for the Task Based grouping strategy of Tab Organization [Length: unlimited].">
+        Task based
+      </message>
+      <message name="IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_TOPIC" translateable="false" desc="Label for the Topic Based grouping strategy of Tab Organization [Length: unlimited].">
+        Topic based
+      </message>
+      <message name="IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_HEADER" translateable="false" desc="Header for AI prototyping menu's tab organization page [Length: unlimited].">
+        Tab Organization
+      </message>
       <message name="IDS_IOS_ACCNAME_CLEAR_TEXT" desc="The accessibility label for the clear text button in the location bar [Length: unlimited].">
         Clear text
       </message>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
index 8784872..7a31777 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -286,7 +286,7 @@
 
 Solo chi conosce la tua passphrase può leggere i tuoi dati criptati. La passphrase non viene inviata a Google o memorizzata da Google. Se dimentichi la passphrase o vuoi modificare questa impostazione, <ph name="BEGIN_LINK" />elimina i dati di Chrome nel tuo account<ph name="END_LINK" />.</translation>
 <translation id="8357607116237445042">Scegli se cancellare i tuoi dati di Chrome da questo dispositivo o se conservarli</translation>
-<translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC Tutti i diritti riservati.</translation>
+<translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Tutti i diritti riservati.</translation>
 <translation id="8371138994040262994">Apre le impostazioni in Chrome.</translation>
 <translation id="8387459386171870978">Continua a utilizzare Chrome</translation>
 <translation id="840168496893712993">Alcuni componenti aggiuntivi provocano l'arresto anomalo di Chrome. Prova a disinstallarli.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
index 5fe5ddd0..cbe7047 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
@@ -3,7 +3,7 @@
 <translationbundle lang="zh-TW">
 <translation id="1066101356081285416">造訪網站時,Chrome 會偵測網站上的追蹤號碼,並在新分頁顯示包裹配送動態。為提供這項功能,系統會將包裹追蹤號碼和網站名稱傳送給 Google。這些資料也會用於改善 Google 購物功能,造福所有使用者。你隨時可以前往<ph name="BEGIN_LINK" />包裹追蹤設定<ph name="END_LINK" />更新這項設定。</translation>
 <translation id="1086486568852410168">透過 Google 智慧鏡頭搜尋</translation>
-<translation id="1143896152279775643">系統會將你的密碼儲存至 <ph name="EMAIL" /> 的 Google 密碼管理員中。</translation>
+<translation id="1143896152279775643">系統會將你的密碼儲存至 <ph name="EMAIL" /> 的 Google 密碼管理工具中。</translation>
 <translation id="1146503048444965320">使用 Chrome 開啟新分頁</translation>
 <translation id="1166460004393506534">刪除 Chrome 的瀏覽資料</translation>
 <translation id="1179527450541388808">從 iPad 主畫面 Dock 更快存取 Chrome。</translation>
@@ -306,7 +306,7 @@
 <translation id="8727043961453758442">充分運用 Chrome 的各項功能</translation>
 <translation id="8765470054473112089">在網址列或搜尋框中輸入時,Chrome 會將你輸入的內容傳送給預設搜尋引擎,提供更符合需求的搜尋建議。這項功能在無痕模式中為關閉狀態。</translation>
 <translation id="8772179140489533211">顯示登入 Chrome 的提示。</translation>
-<translation id="8788269841521769222">你不需要記住這組密碼,系統會將密碼儲存至 <ph name="EMAIL" /> 的 Google 密碼管理員中</translation>
+<translation id="8788269841521769222">你不需要記住這組密碼,系統會將密碼儲存至 <ph name="EMAIL" /> 的 Google 密碼管理工具中</translation>
 <translation id="880967149107462122">前往 Chrome 設定</translation>
 <translation id="8842132678697187091">你可以在這裡開啟 Google 智慧鏡頭。</translation>
 <translation id="8850736900032787670">如要接收符合興趣的個人化內容,請登入 Chrome。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb
index 9633f41..d407729 100644
--- a/ios/chrome/app/strings/resources/ios_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Kieslys → Instellings → Verstekblaaier</translation>
 <translation id="2818821771744632548">Jy is as deel van jou iPhone-terugstelling uit jou rekening, <ph name="USER_NAME" />, afgemeld. Tik op “Gaan voort” hier onder om weer aan te meld.</translation>
 <translation id="2819667972867209401">Wanneer dit aan is, word data in jou Google-rekening gestoor. Wanneer dit af is, word data net op hierdie toestel gestoor en word uitgevee wanneer jy afmeld.</translation>
+<translation id="2827760117436553203">Hou data apart?</translation>
 <translation id="2829172210806130158">Deursoek jou skerm</translation>
 <translation id="2834399722155632105">3. Tik op Wagwoordopsies</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Vertaal tans die bladsy in <ph name="LANGUAGE" />. Opsies is naby die onderkant van die skerm beskikbaar.</translation>
 <translation id="647867789226964031">Verander jou wagwoorde</translation>
 <translation id="6494931198667773526">Eindig</translation>
+<translation id="6495521251906266731">Kies wat om met die bestaande blaaierdata op hierdie toestel te doen, soos wagwoorde, geskiedenis en meer.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Stop nasporing van hierdie pakkie}other{Stop nasporing van hierdie pakkie}}</translation>
 <translation id="6503077044568424649">Mees besoekte</translation>
 <translation id="6503763061813913607">Kennisgewings vir veiligheidskontrole</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Bly op hoogte van prysdalings op al die produkte wat jy naspoor.</translation>
 <translation id="746872191028309255">Koop dit wat jy sien met jou kamera of fotogalery.</translation>
 <translation id="7471557245617580330">Skep nuwe oortjie</translation>
+<translation id="7473891865547856676">Nee, Dankie</translation>
 <translation id="747956641630879526">As jy hierdie kaart versteek, sal Pakkienasporing afgeskakel word en al jou data sal verwyder word</translation>
 <translation id="7484645889979462775">Nooit vir hierdie werf nie</translation>
 <translation id="7486006552035434095">Hou jou toestelle gesinkroniseer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 46e8e7b3..4b59799 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">ሁሉም የሚከታተሏቸው ምርቶች ላይ የዋጋ ቅነሳዎችን ይከታተሉ።</translation>
 <translation id="746872191028309255">በካሜራዎ ወይም በፎቶ ማዕከለ ሥዕላትዎ የሚያዩትን ይግዙ።</translation>
 <translation id="7471557245617580330">አዲስ ትር ፍጠር</translation>
+<translation id="7473891865547856676">አይ፣ አመሰግናለሁ</translation>
 <translation id="747956641630879526">ይህን ካርድ መደበቅ የጥቅል መከታተልን ያጠፋል እና ሁሉንም ውሂብዎን ያስወግዳል</translation>
 <translation id="7484645889979462775">ፈጽሞ ለእዚህ ጣቢያ</translation>
 <translation id="7486006552035434095">መሣሪያዎችዎን በስምረት ላይ ያቆዩዋቸው</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 9efd560..ab0db1716 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -1427,6 +1427,7 @@
 <translation id="7468373585447318060">يمكنك متابعة أخبار الانخفاضات في أسعار جميع المنتجات التي تتبّعها.</translation>
 <translation id="746872191028309255">يمكنك تسوّق أي منتج تراه إمّا من خلال الكاميرا أو معرض الصور.</translation>
 <translation id="7471557245617580330">إنشاء علامة تبويب جديدة</translation>
+<translation id="7473891865547856676">لا، شكرًا</translation>
 <translation id="747956641630879526">إخفاء هذه البطاقة سيؤدي إلى إيقاف تتبُّع الطرود وإزالة جميع بياناتك</translation>
 <translation id="7484645889979462775">عدم حفظ كلمة المرور لهذا الموقع</translation>
 <translation id="7486006552035434095">الحفاظ على مزامنة أجهزتك</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb
index 1b0fc294..b53d3e98 100644
--- a/ios/chrome/app/strings/resources/ios_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">মেনু → ছেটিং → ডিফ’ল্ট ব্ৰাউজাৰ</translation>
 <translation id="2818821771744632548">আপোনাৰ iPhone ৰিছেট কৰাৰ অংশ হিচাপে আপোনাক আপোনাৰ একাউণ্ট <ph name="USER_NAME" />ৰ পৰা ছাইন আউট কৰা হৈছে। পুনৰ ছাইন ইন কৰিবলৈ তলত "অব্যাহত ৰাখক"ত টিপক।</translation>
 <translation id="2819667972867209401">অন থাকিলে, আপোনাৰ Google একাউণ্টত ডেটা ছেভ কৰা হয়। অফ থাকিলে, ডেটা কেৱল এই ডিভাইচটোত ছেভ কৰা হয় আৰু আপুনি ছাইন আউট কৰিলে মচা হয়।</translation>
+<translation id="2827760117436553203">ডেটা বেলেগে ৰাখিবনে?</translation>
 <translation id="2829172210806130158">আপোনাৰ স্ক্ৰীন সন্ধান কৰক</translation>
 <translation id="2834399722155632105">৩) পাছৱৰ্ডৰ বিকল্পসমূহত টিপক</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">এই পৃষ্ঠাটো <ph name="LANGUAGE" />লৈ অনুবাদ কৰি থকা হৈছে। বিকল্পসমূহ স্ক্রীণখনৰ একেবাৰে তলৰ কাষত আছে।</translation>
 <translation id="647867789226964031">আপোনাৰ পাছৱৰ্ড সলনি কৰক</translation>
 <translation id="6494931198667773526">সমাপ্তিৰ সময়</translation>
+<translation id="6495521251906266731">পাছৱৰ্ড, ইতিহাস আৰু বহুতোৰ দৰে এই ডিভাইচত পূৰ্বৰে পৰা থকা ব্ৰাউজিঙৰ ডেটা কি কৰিব লাগে সেয়া বাছনি কৰক।</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{এই পেকেজটো ট্ৰেক কৰা বন্ধ কৰক}one{আটাইবোৰ পেকেজ ট্ৰেক কৰা বন্ধ কৰক}other{আটাইবোৰ পেকেজ ট্ৰেক কৰা বন্ধ কৰক}}</translation>
 <translation id="6503077044568424649">সকলোতকৈ বেছিকৈ চোৱা</translation>
 <translation id="6503763061813913607">সুৰক্ষা পৰীক্ষা সম্পৰ্কীয় জাননী</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">আপুনি ট্ৰেক কৰা আটাইবোৰ প্ৰ’ডাক্টৰ মূল্য হ্ৰাসৰ বিষয়ে অৱগত হৈ থাকক।</translation>
 <translation id="746872191028309255">আপোনাৰ কেমেৰা বা ফট’ গেলাৰীৰ জৰিয়তে দেখা পোৱা বস্তুবোৰ কিনক।</translation>
 <translation id="7471557245617580330">নতুন টেব সৃষ্টি কৰক</translation>
+<translation id="7473891865547856676">নালাগে, ধন্যবাদ</translation>
 <translation id="747956641630879526">এই কাৰ্ডখন লুকুৱালে পেকেজ ট্ৰেক কৰাটো অফ হ’ব আৰু আপোনাৰ আটাইবোৰ ডেটা আঁতৰাই পেলোৱা হ’ব</translation>
 <translation id="7484645889979462775">এই ছাইটটোৰ বাবে কেতিয়াও নহয়</translation>
 <translation id="7486006552035434095">আপোনাৰ ডিভাইচসমূহ ছিংক কৰি ৰাখক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb
index 037ca5a..cbb1fe83 100644
--- a/ios/chrome/app/strings/resources/ios_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">İzlədiyiniz bütün məhsullarda qiymət endirimlərindən xəbərdar olun.</translation>
 <translation id="746872191028309255">Kamera və ya fotoqalereya ilə gördüklərinizi satın alın.</translation>
 <translation id="7471557245617580330">Yeni panel yaradın</translation>
+<translation id="7473891865547856676">Yox, sağ olun</translation>
 <translation id="747956641630879526">Bu kartı gizlətdikdə bağlamanın izlənməsi deaktiv ediləcək və bütün data silinəcək</translation>
 <translation id="7484645889979462775">Bu sayt üçün heç vaxt</translation>
 <translation id="7486006552035434095">Cihazları sinxronlaşdırın</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb
index fe971497..a63e20d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Меню → Налады → Стандартны браўзер</translation>
 <translation id="2818821771744632548">У выніку скіду налад iPhone адбыўся выхад з уліковага запісу <ph name="USER_NAME" />. Каб увайсці зноў, націсніце "Працягнуць" ніжэй.</translation>
 <translation id="2819667972867209401">Калі гэта функцыя ўключана, даныя захоўваюцца ва Уліковым запісе Google. Калі выключана – даныя захоўваюцца толькі на гэтай прыладзе і выдаляюцца пры выхадзе з уліковага запісу.</translation>
+<translation id="2827760117436553203">Захоўваць даныя асобна?</translation>
 <translation id="2829172210806130158">Шукаць змесціва на экране</translation>
 <translation id="2834399722155632105">3. Націсніце Password Options ("Налады пароляў").</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Старонка перакладаецца на мову "<ph name="LANGUAGE" />". Параметры знаходзяцца ў ніжняй частцы экрана.</translation>
 <translation id="647867789226964031">Змяніце паролі</translation>
 <translation id="6494931198667773526">Заканчэнне</translation>
+<translation id="6495521251906266731">Выберыце, што зрабіць з захаванымі на гэтай прыладзе данымі пра работу ў браўзеры, у прыватнасці паролямі, запісамі ў гісторыі і іншымі.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Перастаць адсочваць гэту пасылку}one{Перастаць адсочваць усе пасылкі}few{Перастаць адсочваць усе пасылкі}many{Перастаць адсочваць усе пасылкі}other{Перастаць адсочваць усе пасылкі}}</translation>
 <translation id="6503077044568424649">Часцей за ўсё наведваліся</translation>
 <translation id="6503763061813913607">Апавяшчэнні праверкі бяспекі</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Не прапусціце зніжэнне цаны на тыя тавары, якія вы адсочваеце.</translation>
 <translation id="746872191028309255">Выкарыстоўвайце камеру ці фотагалерэю для пошуку тавараў.</translation>
 <translation id="7471557245617580330">Стварыць новую ўкладку</translation>
+<translation id="7473891865547856676">Не, дзякуй</translation>
 <translation id="747956641630879526">Калі вы схаваеце гэту картку, адсочванне пасылак спыніцца, а ўсе даныя будуць выдалены</translation>
 <translation id="7484645889979462775">Ніколі для гэтага сайта</translation>
 <translation id="7486006552035434095">Сінхранізуйце свае прылады</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index 178c931..c7a8f83 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Следете пониженията на цените на всички проследявани от вас продукти.</translation>
 <translation id="746872191028309255">Пазарувайте това, което виждате с камерата или във фотогалерията си.</translation>
 <translation id="7471557245617580330">Създаване на нов раздел</translation>
+<translation id="7473891865547856676">Не, благодаря</translation>
 <translation id="747956641630879526">Скриването на тази карта ще изключи проследяването на пратки и ще премахне всичките ви данни</translation>
 <translation id="7484645889979462775">Никога за този сайт</translation>
 <translation id="7486006552035434095">Синхронизирайте устройствата си</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index 77b48f4..2ff94c7e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">মেনু → সেটিংস → ডিফল্ট ব্রাউজার</translation>
 <translation id="2818821771744632548">আপনার iPhone রিসেটের অংশ হিসেবে আপনার অ্যাকাউন্ট <ph name="USER_NAME" /> থেকে সাইন-আউট হয়ে গেছেন। আবার সাইন ইন করতে, নিচে "চালিয়ে যান" বিকল্পে ট্যাপ করুন।</translation>
 <translation id="2819667972867209401">চালু করা থাকলে, আপনার Google অ্যাকাউন্টে ডেটা সেভ করা হয়। বন্ধ করা থাকলে, ডেটা শুধু এই ডিভাইসে সেভ করা হয় এবং আপনি সাইন-আউট করলে তা মুছে ফেলা হয়।</translation>
+<translation id="2827760117436553203">ডেটা আলাদা রাখবেন?</translation>
 <translation id="2829172210806130158">আপনার স্ক্রিনে সার্চ করুন</translation>
 <translation id="2834399722155632105">৩. পাসওয়ার্ড বিকল্পে ট্যাপ করুন</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1214,6 +1215,7 @@
 <translation id="6476800141292307438">পৃষ্ঠাটি <ph name="LANGUAGE" /> ভাষাতে অনুবাদ হচ্ছে। স্ক্রিনের নিচের দিকে বিকল্পগুলি দেওয়া আছে।</translation>
 <translation id="647867789226964031">আপনার পাসওয়ার্ড পরিবর্তন করুন</translation>
 <translation id="6494931198667773526">শেষ হবে</translation>
+<translation id="6495521251906266731">এই ডিভাইসে আগে থেকেই থাকা ব্রাউজ করা ডেটা, যেমন পাসওয়ার্ড, ইতিহাস এবং আরও অনেক কিছুর ক্ষেত্রে কী করবেন তা বেছে নিন।</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{এই প্যাকেজ ট্র্যাক করা বন্ধ করুন}one{সমস্ত প্যাকেজ ট্র্যাক করা বন্ধ করুন}other{সমস্ত প্যাকেজ ট্র্যাক করা বন্ধ করুন}}</translation>
 <translation id="6503077044568424649">সর্বাধিক দেখা</translation>
 <translation id="6503763061813913607">নিরাপত্তা সংক্রান্ত পরীক্ষার বিজ্ঞপ্তি</translation>
@@ -1428,6 +1430,7 @@
 <translation id="7468373585447318060">আপনি ট্র্যাক করছেন, এমন সব প্রোডাক্টের দাম কমা সম্পর্কিত তথ্য পান।</translation>
 <translation id="746872191028309255">আপনার ক্যামেরা বা ফটো গ্যালারির মাধ্যমে যা দেখছেন তা কিনুন।</translation>
 <translation id="7471557245617580330">নতুন ট্যাব তৈরি করুন</translation>
+<translation id="7473891865547856676">না থাক</translation>
 <translation id="747956641630879526">এই কার্ড লুকালে প্যাকেজ ট্র্যাকিং বন্ধ হয়ে যাবে এবং আপনার সমস্ত ডেটা সরিয়ে দেওয়া হবে</translation>
 <translation id="7484645889979462775">এই সাইটের জন্য কখনই নয়</translation>
 <translation id="7486006552035434095">আপনার ডিভাইস সিঙ্ক করে রাখুন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
index a670bc5..4f8f983 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -417,7 +417,7 @@
 <translation id="2816489851009559785">Meni → Postavke → Zadani preglednik</translation>
 <translation id="2818821771744632548">Bili ste odjavljeni s računa <ph name="USER_NAME" /> tokom vraćanja iPhonea na zadano. Da se prijavite ponovo, dodirnite "Nastavi" u nastavku.</translation>
 <translation id="2819667972867209401">Kada je uključeno, podaci se pohranjuju na Google računu. Kada je isključeno, podaci se pohranjuju samo na ovom uređaju i brišu ako se odjavite.</translation>
-<translation id="2827760117436553203">Želite li da podaci budu odvojeni?</translation>
+<translation id="2827760117436553203">Zadržati podatke zasebno?</translation>
 <translation id="2829172210806130158">Pretražite ekran</translation>
 <translation id="2834399722155632105">3. Dodirnite Opcije lozinke</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1214,7 +1214,7 @@
 <translation id="6476800141292307438">Prevođenje stranice na <ph name="LANGUAGE" /> jezik. Opcije su dostupne pri dnu ekrana.</translation>
 <translation id="647867789226964031">Promijenite lozinke</translation>
 <translation id="6494931198667773526">Završava se</translation>
-<translation id="6495521251906266731">Odaberite što želite učiniti s postojećim podacima o pregledavanju na ovom uređaju, kao što su zaporke, povijest i drugo.</translation>
+<translation id="6495521251906266731">Odaberite radnju koju treba poduzeti s postojećim podacima pregledanja na uređaju, kao što su lozinke, historija i drugi podaci.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Prestani pratiti ovaj paket}one{Prestani pratiti sve pakete}few{Prestani pratiti sve pakete}other{Prestani pratiti sve pakete}}</translation>
 <translation id="6503077044568424649">Najposjećenija</translation>
 <translation id="6503763061813913607">Obavještenja o sigurnosnoj provjeri</translation>
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Pratite pad cijena za sve proizvode koje pratite.</translation>
 <translation id="746872191028309255">Kupite ono što vidite putem kamere ili galerije fotografija.</translation>
 <translation id="7471557245617580330">Napravi novu karticu</translation>
+<translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="747956641630879526">Sakrivanje ove kartice će isključiti praćenje paketa i ukloniti sve podatke</translation>
 <translation id="7484645889979462775">Nikada za ovu web lokaciju</translation>
 <translation id="7486006552035434095">Kontinuirano sinhronizirajte uređaje</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 57ef0e9..e51ba1aa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Estigues al corrent de les baixades de preu en tots els productes que segueixes.</translation>
 <translation id="746872191028309255">Compra el que veus amb la càmera o la galeria de fotos.</translation>
 <translation id="7471557245617580330">Crea una pestanya nova</translation>
+<translation id="7473891865547856676">No, gràcies</translation>
 <translation id="747956641630879526">Si amagues aquesta targeta, es desactivarà el seguiment de l'enviament i se suprimiran totes les teves dades</translation>
 <translation id="7484645889979462775">Mai per a aquest lloc</translation>
 <translation id="7486006552035434095">Mantén els dispositius sincronitzats</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 0a9b5fc..de9e2bd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Nabídka → Nastavení → Výchozí prohlížeč</translation>
 <translation id="2818821771744632548">V rámci resetování iPhonu jste byli odhlášeni z účtu <ph name="USER_NAME" />. Pokud se chcete znovu přihlásit, klepněte níže na Pokračovat.</translation>
 <translation id="2819667972867209401">Když je tato funkce zapnutá, ukládají se data do vašeho účtu Google. Když je vypnutá, ukládají se pouze do tohoto zařízení, a pokud se odhlásíte, budou smazána.</translation>
+<translation id="2827760117436553203">Nechat údaje oddělené?</translation>
 <translation id="2829172210806130158">Vyhledat na obrazovce</translation>
 <translation id="2834399722155632105">3. Klepněte na Volby hesel.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Stránka se překládá do jazyka <ph name="LANGUAGE" />. Možnosti jsou k dispozici u dolního okraje obrazovky.</translation>
 <translation id="647867789226964031">Změňte svá hesla</translation>
 <translation id="6494931198667773526">Končí</translation>
+<translation id="6495521251906266731">Zvolte, co chcete udělat se stávajícími údaji o prohlížení v tomhle zařízení, jako jsou hesla, historie atd.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Přestat sledovat tuto zásilku}few{Přestat sledovat tyto zásilky}many{Přestat sledovat tyto zásilky}other{Přestat sledovat tyto zásilky}}</translation>
 <translation id="6503077044568424649">Nejnavštěvovanější</translation>
 <translation id="6503763061813913607">Oznámení bezpečnostní kontroly</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Mějte přehled o poklesech ceny u všech produktů, které sledujete.</translation>
 <translation id="746872191028309255">Pomocí fotoaparátu nebo fotogalerie si kupte, co vidíte.</translation>
 <translation id="7471557245617580330">Vytvořit novou kartu</translation>
+<translation id="7473891865547856676">Ne, děkuji</translation>
 <translation id="747956641630879526">Skrytím této karty vypnete sledování zásilek a odstraníte všechna svá data</translation>
 <translation id="7484645889979462775">Nikdy v případě těchto stránek</translation>
 <translation id="7486006552035434095">Synchronizujte svá zařízení</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
index a5e1c45..129f0b38 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Cael y diweddaraf am ostyngiadau prisiau ar yr holl gynhyrchion rydych yn eu holrhain.</translation>
 <translation id="746872191028309255">Siopwch yr hyn a welwch gyda'ch camera neu oriel luniau.</translation>
 <translation id="7471557245617580330">Creu tab newydd</translation>
+<translation id="7473891865547856676">Dim Diolch</translation>
 <translation id="747956641630879526">Bydd cuddio'r cerdyn hwn yn diffodd Olrhain Pecynnau ac yn tynnu eich holl ddata</translation>
 <translation id="7484645889979462775">Byth ar gyfer y wefan hon</translation>
 <translation id="7486006552035434095">Cadwch eich dyfeisiau yn gyson</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 09ae2cb4..b6185430 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Hold dig opdateret om prisfald på alle de produkter, du holder øje med.</translation>
 <translation id="746872191028309255">Køb det, du ser, ved hjælp af dit kamera eller billedgalleri.</translation>
 <translation id="7471557245617580330">Opret ny fane</translation>
+<translation id="7473891865547856676">Nej tak</translation>
 <translation id="747956641630879526">Hvis du skjuler dette kort, deaktiveres pakkesporing, og alle dine data fjernes</translation>
 <translation id="7484645889979462775">Aldrig for dette website</translation>
 <translation id="7486006552035434095">Bevar synkroniseringen af dine enheder</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index f37da88..39a7b461 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Du wirst über Preissenkungen für alle Produkte informiert, die du beobachtest.</translation>
 <translation id="746872191028309255">Du kannst ganz einfach kaufen, was du mit deiner Kamera oder in der Fotogalerie siehst.</translation>
 <translation id="7471557245617580330">Neuen Tab erstellen</translation>
+<translation id="7473891865547856676">Nein danke</translation>
 <translation id="747956641630879526">Wenn du diese Karte ausblendest, wird die Paketverfolgung deaktiviert und alle deine Daten werden entfernt</translation>
 <translation id="7484645889979462775">Für diese Website niemals</translation>
 <translation id="7486006552035434095">Alle Geräte immer synchronisiert</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 627140a..a885adb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -1430,6 +1430,7 @@
 <translation id="7468373585447318060">Μείνετε ενημερωμένοι για τις πτώσεις τιμών σε όλα τα προϊόντα που παρακολουθείτε.</translation>
 <translation id="746872191028309255">Αγοράστε όσα βλέπετε με την κάμερα ή το gallery φωτογραφιών.</translation>
 <translation id="7471557245617580330">Δημιουργία νέας καρτέλας</translation>
+<translation id="7473891865547856676">Όχι, ευχαριστώ</translation>
 <translation id="747956641630879526">Η απόκρυψη αυτής της κάρτας θα απενεργοποιήσει την παρακολούθηση πακέτου και θα καταργήσει όλα τα δεδομένα σας</translation>
 <translation id="7484645889979462775">Ποτέ για αυτόν τον ιστότοπο</translation>
 <translation id="7486006552035434095">Διατηρήστε συγχρονισμένες τις συσκευές σας</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index 3d8fcda..03ef61ec 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Keep up with price drops on all the products that you track.</translation>
 <translation id="746872191028309255">Shop what you see with your camera or photo gallery.</translation>
 <translation id="7471557245617580330">Create new tab</translation>
+<translation id="7473891865547856676">No, thanks</translation>
 <translation id="747956641630879526">Hiding this card will turn off package tracking and remove all your data</translation>
 <translation id="7484645889979462775">Never for this site</translation>
 <translation id="7486006552035434095">Keep your devices in sync</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 4e67bce8..9bb21514 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Mantente al tanto de las reducciones de precios en todos los productos que sigues.</translation>
 <translation id="746872191028309255">Compra lo que ves con la cámara o la galería de fotos.</translation>
 <translation id="7471557245617580330">Crear una pestaña nueva</translation>
+<translation id="7473891865547856676">No, gracias</translation>
 <translation id="747956641630879526">Si ocultas esta tarjeta, se desactivará el seguimiento de paquetes y se quitarán todos tus datos</translation>
 <translation id="7484645889979462775">Jamás para este sitio</translation>
 <translation id="7486006552035434095">Mantén tus dispositivos sincronizados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 3fc0ca4..9f46ea6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Mantente al día de las bajadas de precio de todos los productos que sigues.</translation>
 <translation id="746872191028309255">Compra lo que ves con tu cámara o galería de fotos.</translation>
 <translation id="7471557245617580330">Crear nueva pestaña</translation>
+<translation id="7473891865547856676">No, gracias</translation>
 <translation id="747956641630879526">Si ocultas esta tarjeta, se desactivará el seguimiento de envíos y se eliminarán todos tus datos</translation>
 <translation id="7484645889979462775">Jamás para este sitio</translation>
 <translation id="7486006552035434095">Mantén tus dispositivos sincronizados</translation>
@@ -1618,7 +1619,7 @@
 <translation id="8273982424131314219">Rellenarás la información en <ph name="URL" /></translation>
 <translation id="8275068909952022340">Más…</translation>
 <translation id="8278488584187265939">Personalizar la página principal</translation>
-<translation id="8281781826761538115">Predeterminada: <ph name="DEFAULT_LOCALE" /></translation>
+<translation id="8281781826761538115">Predeterminado: <ph name="DEFAULT_LOCALE" /></translation>
 <translation id="8281886186245836920">Saltar</translation>
 <translation id="8282657446819506217">Abrir en un grupo de pestañas</translation>
 <translation id="828291969289324795">{count,plural, =1{Añadir pestaña al nuevo grupo}other{Añadir pestañas al nuevo grupo}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 321b1ab..bd4609e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menüü → Seaded → Vaikebrauser</translation>
 <translation id="2818821771744632548">Teid logiti iPhone'i lähtestamise raames teie kontolt <ph name="USER_NAME" /> välja. Uuesti sisselogimiseks puudutage allpool nuppu „Jätka”.</translation>
 <translation id="2819667972867209401">Kui see on sees, salvestatakse andmed teie Google'i kontole. Kui see on väljas, salvestatakse andmed ainult sellesse seadmesse ja kustutatakse väljalogimisel.</translation>
+<translation id="2827760117436553203">Kas hoida andmed eraldi?</translation>
 <translation id="2829172210806130158">Ekraanilt otsimine</translation>
 <translation id="2834399722155632105">3. Puudutage valikut Paroolivalikud.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Leht tõlgitakse <ph name="LANGUAGE" /> keelde. Valikud leiate ekraanikuva allosast.</translation>
 <translation id="647867789226964031">Muutke oma paroole</translation>
 <translation id="6494931198667773526">Lõpp</translation>
+<translation id="6495521251906266731">Valige, mida teha selles seadmes olevate sirvimisandmetega, nagu paroolid, ajalugu ja muu.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Peata selle saadetise jälgimine}other{Peata kõigi saadetiste jälgimine}}</translation>
 <translation id="6503077044568424649">Populaarsed</translation>
 <translation id="6503763061813913607">Ohutuskontrolli märguanded</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Olge kursis kõikide teie jälgitavate toodete hinnaalandustega.</translation>
 <translation id="746872191028309255">Ostke, mida näete oma kaameras või fotogaleriis.</translation>
 <translation id="7471557245617580330">Loo uus vaheleht</translation>
+<translation id="7473891865547856676">Tänan, ei</translation>
 <translation id="747956641630879526">Selle kaardi peitmine lülitab saadetise jälgimise välja ja eemaldab kõik teie andmed</translation>
 <translation id="7484645889979462775">Selle saidi puhul mitte kunagi</translation>
 <translation id="7486006552035434095">Hoidke oma seadmed sünkroonituna</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
index b98faef..fbc534c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menua → Ezarpenak → Arakatzaile lehenetsia</translation>
 <translation id="2818821771744632548">iPhone-a berrezarri duzunez, <ph name="USER_NAME" /> kontuko saioa amaitu zaizu. Saioa berriro hasteko, sakatu Egin aurrera.</translation>
 <translation id="2819667972867209401">Aktibatuta badago, datuak Google-ko kontuan gordetzen dira. Desaktibatuta badago, datuak gailu honetan soilik gordetzen dira. Saioa amaitzen baduzu, datu horiek ezabatuko dira.</translation>
+<translation id="2827760117436553203">Datuak bereiz mantendu nahi dituzu?</translation>
 <translation id="2829172210806130158">Bilatu pantailan</translation>
 <translation id="2834399722155632105">3. Sakatu Password Options (pasahitzen aukerak).</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Orria itzultzen ari gara. <ph name="LANGUAGE" /> erabiliko da orria bistaratzeko. Pantailaren behealdean agertzen dira dauden aukerak.</translation>
 <translation id="647867789226964031">Aldatu pasahitzak</translation>
 <translation id="6494931198667773526">Amaiera</translation>
+<translation id="6495521251906266731">Aukeratu zer egin nahi duzun gailu honetan lehendik dauden arakatze-datuekin (adibidez, pasahitzak, historia eta abar).</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Utzi paketearen jarraipena egiteari}other{Utzi pakete guztien jarraipena egiteari}}</translation>
 <translation id="6503077044568424649">Bisitatuenak</translation>
 <translation id="6503763061813913607">Segurtasun-egiaztapenaren jakinarazpenak</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Jakin ezazu noiz jaisten diren jarraitzen diezun produktu guztien prezioak.</translation>
 <translation id="746872191028309255">Arakatu ikusten dituzun produktuak kameraren edo argazki-galeriaren bidez.</translation>
 <translation id="7471557245617580330">Sortu beste fitxa bat</translation>
+<translation id="7473891865547856676">Ez, eskerrik asko</translation>
 <translation id="747956641630879526">Txartela ezkutatzen baduzu, paketeen jarraipena desaktibatuko da, eta zure datu guztiak kenduko dira</translation>
 <translation id="7484645889979462775">Inoiz ez webgune honetan</translation>
 <translation id="7486006552035434095">Mantendu gailuak sinkronizatuta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 3d9cb63..95caf19 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">منو ← تنظیمات ← مرورگر پیش‌فرض</translation>
 <translation id="2818821771744632548">‏به‌عنوان بخشی از بازنشانی iPhone، از سیستم حساب <ph name="USER_NAME" /> خارج شدید. برای ورود مجدد به سیستم، روی «ادامه» در زیر تک‌ضرب بزنید.</translation>
 <translation id="2819667972867209401">‏وقتی روشن باشد، داده‌ها در «حساب Google» شما ذخیره می‌شود. وقتی خاموش باشد، داده‌ها فقط در این دستگاه ذخیره می‌شود و درصورت خروج از سیستم، داده‌ها حذف می‌شود.</translation>
+<translation id="2827760117436553203">داده‌ها جدا نگه داشته شود؟</translation>
 <translation id="2829172210806130158">جستجو در صفحه</translation>
 <translation id="2834399722155632105">۳. روی «گزینه‌های گذرواژه» تک‌ضرب بزنید</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />، <ph name="STATE" />، <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">ترجمه صفحه به <ph name="LANGUAGE" />. گزینه‌ها در نزدیک پایین صفحه نمایش در دسترس هستند.</translation>
 <translation id="647867789226964031">تغییر دادن گذرواژه‌ها</translation>
 <translation id="6494931198667773526">تاریخ پایان</translation>
+<translation id="6495521251906266731">انتخاب کنید چه اقدامی روی داده‌های مرور موجود در این دستگاه، مثل گذرواژه‌ها، سابقه، و موارد دیگر، انجام شود.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{لغو پیگیری این بسته}one{لغو پیگیری همه بسته‌ها}other{لغو پیگیری همه بسته‌ها}}</translation>
 <translation id="6503077044568424649">بیشترین موارد بازدید شده</translation>
 <translation id="6503763061813913607">اعلان‌های «بررسی ایمنی»</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">از کاهش قیمت تمامی محصولاتی که پیگیری می‌کنید مطلع شوید.</translation>
 <translation id="746872191028309255">آنچه را می‌بینید با دوربین یا گالری عکستان خریداری کنید.</translation>
 <translation id="7471557245617580330">ایجاد برگه جدید</translation>
+<translation id="7473891865547856676">نه متشکرم</translation>
 <translation id="747956641630879526">درصورت پنهان کردن این کارت، «رهگیری بسته» غیرفعال خواهد شد و همه داده‌هایتان برداشته خواهد شد</translation>
 <translation id="7484645889979462775">هرگز برای این سایت</translation>
 <translation id="7486006552035434095">دستگاه‌هایتان را همگام نگه دارید</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index c508770..8d03c64 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -12,7 +12,7 @@
 <translation id="1035980983510608210">Jos suljet kaikki välilehdet, myös kiinnitetyt välilehdet suljetaan.</translation>
 <translation id="1036017604683756002">UPS</translation>
 <translation id="1036348656032585052">Poista käytöstä</translation>
-<translation id="1041322626941363065">Varoita, jos salasanoja vaarantuu tietosuojaloukkauksessa</translation>
+<translation id="1041322626941363065">Varoitus, jos salasanoja vaarantuu tietosuojaloukkauksessa</translation>
 <translation id="1044891598689252897">Sivustot toimivat normaalisti</translation>
 <translation id="104491362976654916">Offline-sivu</translation>
 <translation id="1049743911850919806">Incognito</translation>
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Seuraa kaikkien seuraamiesi tuotteiden hinnanalennuksia.</translation>
 <translation id="746872191028309255">Tee ostoksia kameran tai kuvagallerian kautta.</translation>
 <translation id="7471557245617580330">Luo uusi välilehti</translation>
+<translation id="7473891865547856676">Ei kiitos</translation>
 <translation id="747956641630879526">Tämän kortin piilottaminen laittaa lähetyksen seurannan pois päältä ja poistaa kaiken datan</translation>
 <translation id="7484645889979462775">Ei koskaan tälle sivustolle</translation>
 <translation id="7486006552035434095">Pidä laitteesi synkronoituina</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index 94a8fcf..c6d62ce 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menu → Mga Setting → Default browser</translation>
 <translation id="2818821771744632548">Na-sign out ka sa iyong account na <ph name="USER_NAME" />, bilang bahagi ng pag-reset ng iPhone mo. Para mag-sign in ulit, i-tap ang "Magpatuloy" sa ibaba.</translation>
 <translation id="2819667972867209401">Kapag naka-on, mase-save ang data sa iyong Google Account. Kapag naka-off, mase-save lang ang data sa device na ito at made-delete ito kung magsa-sign out ka.</translation>
+<translation id="2827760117436553203">Panatilihing nakahiwalay ang data?</translation>
 <translation id="2829172210806130158">Maghanap sa iyong screen</translation>
 <translation id="2834399722155632105">3. I-tap ang Mga Opsyon sa Password</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Isinasalin ang page sa <ph name="LANGUAGE" />. May mga opsyon malapit sa ibaba ng screen.</translation>
 <translation id="647867789226964031">Palitan ang iyong mga password</translation>
 <translation id="6494931198667773526">Matatapos sa</translation>
+<translation id="6495521251906266731">Piliin kung ano ang gagawin sa kasalukuyang data mula sa pag-browse sa device na ito, tulad ng mga password, history, at higit pa.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Huwag subaybayan ang package na ito}one{Huwag subaybayan ang lahat ng package}other{Huwag subaybayan ang lahat ng package}}</translation>
 <translation id="6503077044568424649">Pinaka-nabisita</translation>
 <translation id="6503763061813913607">Mga Notification sa Pag-check sa Kaligtasan</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Maging updated sa mga pagbaba ng presyo sa lahat ng produktong sinusubaybayan mo.</translation>
 <translation id="746872191028309255">Bilhin ang nakikita mo sa iyong camera o gallery ng larawan.</translation>
 <translation id="7471557245617580330">Gumawa ng bagong tab</translation>
+<translation id="7473891865547856676">Hindi, Salamat</translation>
 <translation id="747956641630879526">Kapag na-hide ang card na ito, mao-off ang Pag-track sa Package at maaalis ang lahat ng iyong data</translation>
 <translation id="7484645889979462775">Hindi kailanman para sa site na ito</translation>
 <translation id="7486006552035434095">Panatilihing naka-sync ang iyong mga device</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index fa35694..c39b58a4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menu → Paramètres → Navigateur par défaut</translation>
 <translation id="2818821771744632548">Vous avez été déconnecté de votre compte <ph name="USER_NAME" /> lors de la réinitialisation de votre iPhone. Pour vous reconnecter, touchez « Continuer » ci-dessous.</translation>
 <translation id="2819667972867209401">Activé : les données sont enregistrées dans votre compte Google. Désactivé : les données sont uniquement enregistrées sur cet appareil et sont supprimées lorsque vous vous déconnectez.</translation>
+<translation id="2827760117436553203">Garder les données séparées?</translation>
 <translation id="2829172210806130158">Rechercher sur votre écran</translation>
 <translation id="2834399722155632105">3. Appuyez sur Options de mot de passe</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Traduction de la page en <ph name="LANGUAGE" /> en cours… Les options sont affichées dans le bas de l'écran.</translation>
 <translation id="647867789226964031">Modifier vos mots de passe</translation>
 <translation id="6494931198667773526">Fin</translation>
+<translation id="6495521251906266731">Choisissez quoi faire avec les données de navigation existantes sur cet appareil, comme les mots de passe, l'historique et bien plus encore.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Annuler le suivi de ce colis}one{Annuler le suivi de tous les colis}other{Annuler le suivi de tous les colis}}</translation>
 <translation id="6503077044568424649">Les plus visités</translation>
 <translation id="6503763061813913607">Notifications de Vérification de sécurité</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Tenez-vous au courant des baisses de prix sur tous les produits que vous suivez.</translation>
 <translation id="746872191028309255">Magasinez ce que vous voyez avec votre appareil photo ou dans votre galerie de photos.</translation>
 <translation id="7471557245617580330">Créer un onglet</translation>
+<translation id="7473891865547856676">Non, merci</translation>
 <translation id="747956641630879526">Masquer cette carte désactivera le suivi des colis et retirera toutes vos données</translation>
 <translation id="7484645889979462775">Jamais pour ce site</translation>
 <translation id="7486006552035434095">Garder vos appareils synchronisés</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index 9112022..24fefdd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menu → Réglages → Navigateur par défaut</translation>
 <translation id="2818821771744632548">Vous avez été déconnecté de votre compte <ph name="USER_NAME" /> lors de la réinitialisation de votre iPhone. Pour vous reconnecter, appuyez sur "Continuer" ci-dessous.</translation>
 <translation id="2819667972867209401">Lorsque cette option est activée, les données sont enregistrées dans votre compte Google. Désactivez-la pour n'enregistrer les données que sur cet appareil et les supprimer si vous vous déconnectez.</translation>
+<translation id="2827760117436553203">Conserver les données séparément ?</translation>
 <translation id="2829172210806130158">Rechercher sur l'écran</translation>
 <translation id="2834399722155632105">3. Appuyez sur "Options de mots de passe"</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Traduction de la page en <ph name="LANGUAGE" />. Options disponibles au bas de l'écran.</translation>
 <translation id="647867789226964031">Modifier vos mots de passe</translation>
 <translation id="6494931198667773526">Fin</translation>
+<translation id="6495521251906266731">Choisissez ce que vous souhaitez faire des données de navigation existantes sur cet appareil, telles que les mots de passe, l'historique, etc.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Annuler le suivi de ce colis}one{Annuler le suivi de ce colis}other{Annuler le suivi de ces colis}}</translation>
 <translation id="6503077044568424649">Les + visités</translation>
 <translation id="6503763061813913607">Notifications du contrôle de sécurité</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Tenez-vous informé des baisses de prix de tous les produits que vous suivez.</translation>
 <translation id="746872191028309255">Achetez ce que vous voyez à l'aide de votre appareil photo ou de votre galerie photo.</translation>
 <translation id="7471557245617580330">Créer un onglet</translation>
+<translation id="7473891865547856676">Non, merci</translation>
 <translation id="747956641630879526">Masquer cette carte désactivera le suivi des colis et supprimera toutes vos données</translation>
 <translation id="7484645889979462775">Jamais pour ce site</translation>
 <translation id="7486006552035434095">Maintenir la synchronisation de vos appareils</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
index 49303f1..93610a54 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Mantente ao tanto das baixadas de prezos de todos os produtos dos que fas un seguimento.</translation>
 <translation id="746872191028309255">Compra o que vexas coa cámara ou na galería de fotos.</translation>
 <translation id="7471557245617580330">Crear unha pestana nova</translation>
+<translation id="7473891865547856676">Non, grazas</translation>
 <translation id="747956641630879526">Se ocultas esta tarxeta, desactivarase o seguimento de paquetes e quitaranse os teus datos</translation>
 <translation id="7484645889979462775">Nunca neste sitio</translation>
 <translation id="7486006552035434095">Mantén sincronizados os teus dispositivos</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index 83715d1f..e3396432 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">તમે ટ્રૅક કરો છો તે બધી પ્રોડક્ટની કિંમતમાં ઘટાડા અંગે માહિતગાર રહો.</translation>
 <translation id="746872191028309255">તમે તમારા કૅમેરા વડે કે ફોટો ગૅલરીમાં જે જુઓ, તેને ખરીદો.</translation>
 <translation id="7471557245617580330">નવું ટેબ બનાવો</translation>
+<translation id="7473891865547856676">ના, આભાર</translation>
 <translation id="747956641630879526">આ કાર્ડ છુપાવવાથી પૅકેજ ટ્રૅકિંગની સુવિધા બંધ થઈ જશે અને તમારો બધો ડેટા કાઢી નાખવામાં આવશે</translation>
 <translation id="7484645889979462775">આ સાઇટ માટે ક્યારેય નહીં</translation>
 <translation id="7486006552035434095">તમારા ડિવાઇસને સિંક કરેલા રાખો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index aee8ca3..bd5c44e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">ट्रैक किए जा रहे सभी प्रॉडक्ट की कीमत में आई गिरावट से जुड़ी सूचनाएं पाएं.</translation>
 <translation id="746872191028309255">कैमरे की मदद से या फ़ोटो गैलरी पर दिख रही चीज़ों को खरीदें.</translation>
 <translation id="7471557245617580330">नया टैब बनाएं</translation>
+<translation id="7473891865547856676">नहीं, रहने दें</translation>
 <translation id="747956641630879526">इस कार्ड को छिपाने से, पैकेज ट्रैकिंग की सुविधा बंद हो जाएगी और आपका सारा डेटा हट जाएगा</translation>
 <translation id="7484645889979462775">इस साइट के लिए कभी नहीं</translation>
 <translation id="7486006552035434095">अपने डिवाइसों को सिंक करके रखें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index ca9bb1a..4d041dcc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -214,7 +214,7 @@
 <translation id="1901600657316773839">Zadrži odabir</translation>
 <translation id="1904580727789512086">URL-ovi koje posjećujete spremaju se na vaš Google račun</translation>
 <translation id="1911619930368729126">Prenesi na Google disk</translation>
-<translation id="1923342640370224680">Posljednji sat</translation>
+<translation id="1923342640370224680">Prethodni sat</translation>
 <translation id="1941314575388338491">Dodirnite dvaput da biste kopirali.</translation>
 <translation id="1943478190258551035">Izbornik → Postavke</translation>
 <translation id="1952728750904661634">Prijavite se upravljanim računom</translation>
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Pratite sniženja cijena za sve proizvode koje pratite.</translation>
 <translation id="746872191028309255">Kupujte ono što vidite pomoću kamere ili galerije fotografija.</translation>
 <translation id="7471557245617580330">Napravi novu karticu</translation>
+<translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="747956641630879526">Ako sakrijete tu karticu, isključit će se praćenje paketa i ukloniti svi vaši podaci</translation>
 <translation id="7484645889979462775">Nikad za ovu web lokaciju</translation>
 <translation id="7486006552035434095">Sinkronizirajte svoje uređaje</translation>
@@ -1597,7 +1598,7 @@
 <translation id="8182037667962849780">{count,plural, =1{Za {website_1}}=2{Za {website_1}, {website_2}}=3{Za {website_1}, {website_2} i još 1}one{Za {website_1}, {website_2} i još {more_count}}few{Za {website_1}, {website_2} i još {more_count}}other{Za {website_1}, {website_2} i još {more_count}}}</translation>
 <translation id="8189615296021678665">Dodirnite Spremi da biste lako pristupili ovoj zaporci sljedeći put kad se prijavite.</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vaši uređaji<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
-<translation id="8195191503358432289">Dodavanje zaporke</translation>
+<translation id="8195191503358432289">Dodajte zaporku</translation>
 <translation id="8202744799033457229">Prikaz povijesti</translation>
 <translation id="8205564605687841303">Odustani</translation>
 <translation id="820568752112382238">Najposjećenije web-lokacije</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 0ee9b3a2..269227f7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Nyomon követheti az Ön által figyelt termékek árcsökkenéseit.</translation>
 <translation id="746872191028309255">Megvásárolhatja, amit a kamerájával vagy a fotógalériájában lát.</translation>
 <translation id="7471557245617580330">Új lap létrehozása</translation>
+<translation id="7473891865547856676">Nem, köszönöm</translation>
 <translation id="747956641630879526">A kártya elrejtésével kikapcsolja a csomagkövetést, és eltávolítja az összes adatát</translation>
 <translation id="7484645889979462775">Ezen a webhelyen soha</translation>
 <translation id="7486006552035434095">Biztosítsa, hogy eszközei szinkronban maradjanak</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
index 17a0e9b2..7c176f4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Հետևեք գնիջեցումներին բոլոր ապրանքների համար, որոնք հետագծում եք։</translation>
 <translation id="746872191028309255">Ձեր տեսախցիկի կամ պատկերասրահի օգնությամբ գնեք այն, ինչ տեսնում եք։</translation>
 <translation id="7471557245617580330">Ստեղծել նոր ներդիր</translation>
+<translation id="7473891865547856676">Ոչ, պետք չէ</translation>
 <translation id="747956641630879526">Եթե թաքցնեք այս քարտը, առաքանու հետագծումը կանջատվի, և ձեր բոլոր տվյալները կջնջվեն</translation>
 <translation id="7484645889979462775">Երբեք չպահել այս կայքի համար</translation>
 <translation id="7486006552035434095">Համաժամացրեք ձեր սարքերը</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 422d0605..08c738a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -1416,7 +1416,7 @@
 <translation id="7419565702166471774">Selalu gunakan koneksi aman</translation>
 <translation id="7425053386765766120">Tambahkan metode pembayaran…</translation>
 <translation id="7425346204213733349">Perubahan pada bookmark, histori, sandi, dan setelan lainnya tidak akan disinkronkan lagi dengan Akun Google. Namun, data yang sudah ada akan tetap disimpan di Akun Google Anda.</translation>
-<translation id="7431991332293347422">Kontrol cara histori browsing digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
+<translation id="7431991332293347422">Kontrol cara histori penjelajahan digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
 <translation id="7435356471928173109">Dinonaktifkan oleh administrator Anda</translation>
 <translation id="7438481509621345350">Anda sekarang akan melihat artikel dari <ph name="CHANNEL_NAME" /> saat membuka tab baru.</translation>
 <translation id="7451023311965289370">{count,plural, =1{Bookmark disimpan ke "{title}"}other{Bookmark disimpan ke "{title}"}}</translation>
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Dapatkan info penurunan harga untuk semua produk yang Anda pantau.</translation>
 <translation id="746872191028309255">Belanja hal yang Anda lihat dengan kamera atau galeri foto.</translation>
 <translation id="7471557245617580330">Buat tab baru</translation>
+<translation id="7473891865547856676">Lain Kali</translation>
 <translation id="747956641630879526">Menyembunyikan kartu ini akan menonaktifkan Pelacakan Paket dan menghapus semua data Anda</translation>
 <translation id="7484645889979462775">Jangan untuk situs ini</translation>
 <translation id="7486006552035434095">Buat perangkat Anda tetap tersinkron</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb
index 66fed27..1943fc8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_is.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Fylgstu með verðlækkunum á öllum vörunum sem þú vaktar.</translation>
 <translation id="746872191028309255">Notaðu myndavélina þína eða myndasafnið til að versla það sem þú sérð.</translation>
 <translation id="7471557245617580330">Búa til nýjan flipa</translation>
+<translation id="7473891865547856676">Nei, takk</translation>
 <translation id="747956641630879526">Slökkt verður á pakkarakningu og öllum gögnum verður eytt ef þú felur þetta spjald</translation>
 <translation id="7484645889979462775">Aldrei fyrir þetta vefsvæði</translation>
 <translation id="7486006552035434095">Haltu tækjunum þínum samstilltum</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index e760bd4..63bd16d1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menu → Impostazioni → Browser predefinito</translation>
 <translation id="2818821771744632548">Il tuo account <ph name="USER_NAME" /> è stato disconnesso durante il ripristino dell'iPhone. Per accedere di nuovo, tocca "Continua" di seguito.</translation>
 <translation id="2819667972867209401">In caso di attivazione, i dati vengono salvati nel tuo Account Google. In caso di disattivazione, i dati vengono salvati solo su questo dispositivo e vengono eliminati se ti disconnetti.</translation>
+<translation id="2827760117436553203">Mantenere i dati separati?</translation>
 <translation id="2829172210806130158">Cerca sullo schermo</translation>
 <translation id="2834399722155632105">3. Tocca Opzioni password</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Traduzione della pagina in <ph name="LANGUAGE" />. Opzioni disponibili nella parte inferiore dello schermo.</translation>
 <translation id="647867789226964031">Cambia le password</translation>
 <translation id="6494931198667773526">Fine</translation>
+<translation id="6495521251906266731">Scegli cosa fare con i dati di navigazione esistenti su questo dispositivo, ad esempio password, cronologia e altro ancora.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Annulla monitoraggio del pacchetto}other{Annulla monitoraggio di tutti i pacchetti}}</translation>
 <translation id="6503077044568424649">Più visitati</translation>
 <translation id="6503763061813913607">Notifiche del controllo di sicurezza</translation>
@@ -1414,7 +1416,7 @@
 <translation id="7419565702166471774">Utilizza sempre connessioni sicure</translation>
 <translation id="7425053386765766120">Aggiungi il metodo di pagamento…</translation>
 <translation id="7425346204213733349">Le modifiche ai preferiti, alla cronologia, alle password e ad altre impostazioni non verranno più sincronizzate con il tuo Account Google. Tuttavia, i dati esistenti rimarranno memorizzati.</translation>
-<translation id="7431991332293347422">Controlla la modalità di utilizzo della cronologia di navigazione per personalizzare la Ricerca e non solo</translation>
+<translation id="7431991332293347422">Controlla come la cronologia di navigazione viene utilizzata per personalizzare la Ricerca e altro</translation>
 <translation id="7435356471928173109">Disattivata dall'amministratore</translation>
 <translation id="7438481509621345350">Quando aprirai una nuova scheda vedrai le notizie di <ph name="CHANNEL_NAME" />.</translation>
 <translation id="7451023311965289370">{count,plural, =1{Preferito salvato in "{title}"}other{Preferiti salvati in "{title}"}}</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Tieni sotto controllo i cali di prezzo di tutti i prodotti che monitori.</translation>
 <translation id="746872191028309255">Acquista ciò che vedi con la fotocamera o la galleria fotografica.</translation>
 <translation id="7471557245617580330">Crea nuova scheda</translation>
+<translation id="7473891865547856676">No, grazie</translation>
 <translation id="747956641630879526">Se nascondi questa scheda, il tracciamento della spedizione verrà disattivato e verranno rimossi tutti i tuoi dati</translation>
 <translation id="7484645889979462775">Mai per questo sito</translation>
 <translation id="7486006552035434095">Mantieni sincronizzati i tuoi dispositivi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 8b42ec6a..2d6f7ec 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">אפשר לקבל עדכונים על ירידות במחיר של כל המוצרים שבמעקב.</translation>
 <translation id="746872191028309255">אפשר לקנות את מה שרואים באמצעות המצלמה או דרך גלריית התמונות.</translation>
 <translation id="7471557245617580330">יצירת כרטיסייה חדשה</translation>
+<translation id="7473891865547856676">לא, תודה</translation>
 <translation id="747956641630879526">הסתרת הכרטיס הזה תוביל להשבתת המעקב אחר חבילות ולהסרת כל הנתונים שלך</translation>
 <translation id="7484645889979462775">לעולם לא עבור אתר זה</translation>
 <translation id="7486006552035434095">אפשר לסנכרן בין המכשירים</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 833d8ce..b358ee2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -1416,7 +1416,7 @@
 <translation id="7419565702166471774">常に安全な接続を使用する</translation>
 <translation id="7425053386765766120">お支払い方法を追加…</translation>
 <translation id="7425346204213733349">今後、ブックマーク、履歴、パスワード、その他の設定に行った変更は Google アカウントに同期されません。ただし、既存のデータは Google アカウントに保存されたままとなります。</translation>
-<translation id="7431991332293347422">検索などのカスタマイズに閲覧履歴がどのように使われるかを管理します</translation>
+<translation id="7431991332293347422">検索などのパーソナライズに閲覧履歴がどのように使われるかを管理します</translation>
 <translation id="7435356471928173109">管理者によってオフにされています</translation>
 <translation id="7438481509621345350">新しいタブを開くと、<ph name="CHANNEL_NAME" /> のストーリーが表示されるようになります。</translation>
 <translation id="7451023311965289370">{count,plural, =1{ブックマークが「{title}」に保存されました}other{ブックマークが「{title}」に保存されました}}</translation>
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">追跡しているすべての商品の値下げ状況を把握できます。</translation>
 <translation id="746872191028309255">カメラで撮影したアイテムやフォト ギャラリーのアイテムを購入できます。</translation>
 <translation id="7471557245617580330">新しいタブを作成</translation>
+<translation id="7473891865547856676">スキップ</translation>
 <translation id="747956641630879526">このカードを非表示にすると、荷物追跡がオフになり、すべてのデータが削除されます</translation>
 <translation id="7484645889979462775">このサイトでは保存しない</translation>
 <translation id="7486006552035434095">デバイスを同期する</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
index 1e47cce8..e8bcdb2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">თვალი ადევნეთ ფასების შემცირებას ყველა პროდუქტისთვის, რომლებისაც თვალს ადევნებთ.</translation>
 <translation id="746872191028309255">იყიდეთ, რასაც ხედავთ კამერით ან ფოტოგალერეაში.</translation>
 <translation id="7471557245617580330">ახალი ჩანართის შექმნა</translation>
+<translation id="7473891865547856676">არა, გმადლობთ</translation>
 <translation id="747956641630879526">ამ ბარათის დამალვის შემთხვევაში, პაკეტის თვალის დევნება გამოირთვება და თქვენი ყველა მონაცემი ამოიშლება</translation>
 <translation id="7484645889979462775">არასდროს ამ ვებგვერდისთვის</translation>
 <translation id="7486006552035434095">შეინარჩუნეთ მოწყობილობები სინქრონიზებულ მდგომარეობაში</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
index 7305fde..e956cad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Мәзір → Параметрлер → Әдепкі браузер</translation>
 <translation id="2818821771744632548">iPhone бастапқы күйіне қайтарылған кезде, аккаунтыңыздан (<ph name="USER_NAME" />) шығарылдыңыз. Аккаунтқа қайта кіру үшін төмендегі "Жалғастыру" түймесін түртіңіз.</translation>
 <translation id="2819667972867209401">Қосылса, деректер Google аккаунтыңызға сақталады. Өшірілсе, деректер тек осы құрылғыға сақталады және аккаунттан шықсаңыз, жойылады.</translation>
+<translation id="2827760117436553203">Деректерді бөлек сақтау қажет пе?</translation>
 <translation id="2829172210806130158">Экрандағы ақпаратты іздеу</translation>
 <translation id="2834399722155632105">3. "Құпия сөз опциялары" түймесін түртіңіз.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Бет <ph name="LANGUAGE" /> тіліне аударылуда. Опцияларды беттің төменгі жағынан таба аласыз.</translation>
 <translation id="647867789226964031">Құпия сөздеріңізді өзгерту</translation>
 <translation id="6494931198667773526">Аяқталуы</translation>
+<translation id="6495521251906266731">Бұл құрылғыдағы құпия сөздер, тарих және т.б. сияқты бұрыннан бар браузерді пайдалану деректерімен не істеу керек екенін таңдаңыз.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Бұл пакетті бақылауды тоқтату}other{Барлық пакетті бақылауды тоқтату}}</translation>
 <translation id="6503077044568424649">Ең көп кірілген</translation>
 <translation id="6503763061813913607">Қауіпсіздік тексерісінің хабарландырулары</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Өзіңіз бақылайтын барлық тауардың бағасы түскен кезде, біліп отырыңыз.</translation>
 <translation id="746872191028309255">Камера түсіріп тұрған не фотосуреттер галереясындағы нәрселерді сатып алыңыз.</translation>
 <translation id="7471557245617580330">Жаңа қойынды жасау</translation>
+<translation id="7473891865547856676">Жоқ, рақмет</translation>
 <translation id="747956641630879526">Бұл карта жасырылса, пакетті бақылау функциясы және барлық дерек өшеді.</translation>
 <translation id="7484645889979462775">Бұл сайт үшін ешқашан</translation>
 <translation id="7486006552035434095">Құрылғыларыңызды синхрондаңыз</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index c6e718f..a9962ed 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">បន្តទទួលព័ត៌មានថ្មីៗអំពី​ការធ្លាក់ថ្លៃ​ផលិតផល​ទាំងអស់​ដែលអ្នក​តាមដាន។</translation>
 <translation id="746872191028309255">រកទិញអ្វី​ដែលអ្នក​មើលឃើញ​ដោយប្រើ​សាលរូបថត ឬ​កាមេរ៉ា​របស់អ្នក។</translation>
 <translation id="7471557245617580330">បង្កើតផ្ទាំងថ្មី</translation>
+<translation id="7473891865547856676">ទេ អរគុណ</translation>
 <translation id="747956641630879526">ការលាក់​កាតនេះ​នឹងបិទ​ការតាមដាន​កញ្ចប់ និង​លុបទិន្នន័យ​ទាំងអស់​របស់អ្នក</translation>
 <translation id="7484645889979462775">មិនដែលសម្រាប់គេហទំព័រនេះឡើយ</translation>
 <translation id="7486006552035434095">បន្តឱ្យ​ឧបករណ៍​របស់អ្នក​ធ្វើសមកាលកម្ម</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index d7753bc..1badce7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">ನೀವು ಟ್ರ್ಯಾಕ್ ಮಾಡುವ ಎಲ್ಲಾ ಉತ್ಪನ್ನಗಳ ದರ ಕಡಿತದ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತಿರಿ.</translation>
 <translation id="746872191028309255">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಫೋಟೋ ಗ್ಯಾಲರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಏನನ್ನು ನೋಡುತ್ತೀರಿ ಎಂಬುದನ್ನು ಶಾಪಿಂಗ್ ಮಾಡಿ.</translation>
 <translation id="7471557245617580330">ಹೊಸ ಟ್ಯಾಬ್ ರಚಿಸಿ</translation>
+<translation id="7473891865547856676">ಬೇಡ</translation>
 <translation id="747956641630879526">ಈ ಕಾರ್ಡ್ ಅನ್ನು ಮರೆಮಾಡಿದಾಗ ಪ್ಯಾಕೇಜ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಆಫ್ ಆಗುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation>
 <translation id="7484645889979462775">ಈ ಸೈಟ್‌ಗೆ ಎಂದಿಗೂ ಬೇಡ</translation>
 <translation id="7486006552035434095">ನಿಮ್ಮ ಸಾಧನಗಳನ್ನು ಸಿಂಕ್‌ನಲ್ಲಿ ಇರಿಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index a80db40e..54e68de 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">추적하는 모든 제품의 가격 인하 소식을 받아보세요.</translation>
 <translation id="746872191028309255">카메라를 사용해 지금 보고 있거나 사진 갤러리에 있는 제품을 쇼핑하세요.</translation>
 <translation id="7471557245617580330">새 탭 만들기</translation>
+<translation id="7473891865547856676">건너뛰기</translation>
 <translation id="747956641630879526">이 카드를 숨기면 배송 추적이 사용 중지되고 모든 데이터가 삭제됩니다</translation>
 <translation id="7484645889979462775">이 사이트 제외</translation>
 <translation id="7486006552035434095">기기 동기화 상태 유지</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
index 3d6c424a..638615b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Көз салган бардык товарларыңыздын арзандаганын билип туруңуз.</translation>
 <translation id="746872191028309255">Сүрөт галереяңыз же камераңыз аркылуу товарларды сатып алыңыз.</translation>
 <translation id="7471557245617580330">Жаңы өтмөк түзүү</translation>
+<translation id="7473891865547856676">Жок, рахмат</translation>
 <translation id="747956641630879526">Бул картаны жашырсаңыз, таңгактарга көз салуу функциясы жана бардык маалыматыңыз өчүрүлөт</translation>
 <translation id="7484645889979462775">Бул сайт үчүн эч качан</translation>
 <translation id="7486006552035434095">Түзмөктөрүңүздү шайкештириңиз</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index 69e7a0b..8008c60c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">ຕິດຕາມການຫຼຸດລາຄາຂອງຜະລິດຕະພັນທັງໝົດທີ່ທ່ານຕິດຕາມ.</translation>
 <translation id="746872191028309255">ຊື້ສິ່ງທີ່ທ່ານເຫັນດ້ວຍກ້ອງຖ່າຍຮູບ ຫຼື ຄັງຮູບພາບຂອງທ່ານ.</translation>
 <translation id="7471557245617580330">ສ້າງ​ແຖບ​ໃໝ່</translation>
+<translation id="7473891865547856676">​ບໍ່, ຂອບ​ໃຈ</translation>
 <translation id="747956641630879526">ການເຊື່ອງບັດນີ້ຈະປິດການຕິດຕາມພັດສະດຸ ແລະ ລຶບຂໍ້ມູນທັງໝົດຂອງທ່ານອອກ</translation>
 <translation id="7484645889979462775">ຢ່າເລີຍສໍາລັບເວັບໄຊທ໌ນີ້</translation>
 <translation id="7486006552035434095">ຊິ້ງອຸປະກອນຂອງທ່ານຢູ່ສະເໝີ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index 63dca32..964ab58a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Sužinokite apie sumažintą stebimų produktų kainą.</translation>
 <translation id="746872191028309255">Pirkite tai, ką matote, naudodami fotoaparatą arba nuotraukų galeriją.</translation>
 <translation id="7471557245617580330">Kurti naują skirtuką</translation>
+<translation id="7473891865547856676">Ne, ačiū</translation>
 <translation id="747956641630879526">Paslėpus šią kortelę bus išjungtas siuntinio stebėjimas ir pašalinti visi jūsų duomenys</translation>
 <translation id="7484645889979462775">Niekada šiam puslapiui</translation>
 <translation id="7486006552035434095">Įrenginių sinchronizavimas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index aa237555..4990c56 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Izvēlne → Iestatījumi → Noklusējuma pārlūks</translation>
 <translation id="2818821771744632548">Jūs tikāt izrakstīts no konta <ph name="USER_NAME" />, veicot iPhone tālruņa atiestatīšanu. Lai atkal pierakstītos, pieskarieties pie Turpināt.</translation>
 <translation id="2819667972867209401">Ja šis iestatījums ir ieslēgts, dati tiek saglabāti jūsu Google kontā. Ja tas ir izslēgts, dati tiek saglabāti tikai šajā ierīcē un tiek dzēsti, kad izrakstāties.</translation>
+<translation id="2827760117436553203">Vai glabāt datus atsevišķi?</translation>
 <translation id="2829172210806130158">Meklējiet ekrānā.</translation>
 <translation id="2834399722155632105">3. Pieskarieties pogai Paroles iespējas.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Lapa tiek tulkota <ph name="LANGUAGE" /> valodā. Pieejamās opcijas redzamas ekrāna apakšdaļā.</translation>
 <translation id="647867789226964031">Paroļu nomaiņa</translation>
 <translation id="6494931198667773526">Beigas</translation>
+<translation id="6495521251906266731">Izvēlieties, kā rīkoties ar šajā ierīcē esošajiem pārlūkošanas datiem, piemēram, parolēm, vēsturi un citiem datiem.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Atcelt šī sūtījuma izsekošanu}zero{Atcelt visu sūtījumu izsekošanu}one{Atcelt visu sūtījumu izsekošanu}other{Atcelt visu sūtījumu izsekošanu}}</translation>
 <translation id="6503077044568424649">Visapmeklētākais</translation>
 <translation id="6503763061813913607">Drošības pārbaudes paziņojumi</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Sekojiet līdzi cenu kritumam visiem izsekotajiem produktiem.</translation>
 <translation id="746872191028309255">Iepērcieties, izmantojot redzamos objektus vai fotoattēlu galeriju.</translation>
 <translation id="7471557245617580330">Izveidot jaunu cilni</translation>
+<translation id="7473891865547856676">Nē, paldies!</translation>
 <translation id="747956641630879526">Paslēpjot šo kartīti, tiks izslēgta paku izsekošana un noņemti visi jūsu dati</translation>
 <translation id="7484645889979462775">Nekad šai vietnei</translation>
 <translation id="7486006552035434095">Jūsu ierīču sinhonizēšana</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
index 877f905..1c7578ca 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Мени → Поставки → Стандарден прелистувач</translation>
 <translation id="2818821771744632548">Одјавени сте од сметката, <ph name="USER_NAME" />, како дел од ресетирањето на вашиот iPhone. За да се најавите повторно, допрете „Продолжи“ подолу.</translation>
 <translation id="2819667972867209401">Кога е вклучено, податоците се зачувуваат во вашата сметка на Google. Кога е исклучено, податоците се зачувуваат само на овој уред и се бришат ако се одјавите.</translation>
+<translation id="2827760117436553203">Да се чуваат податоците одделно?</translation>
 <translation id="2829172210806130158">Пребарувајте го екранот</translation>
 <translation id="2834399722155632105">3. Допрете „Опции за лозинки“</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Страницата се преведува на <ph name="LANGUAGE" />. Достапни се опции на дното на екранот.</translation>
 <translation id="647867789226964031">Променете ги вашите лозинки</translation>
 <translation id="6494931198667773526">Завршува</translation>
+<translation id="6495521251906266731">Изберете што да се направи со постојните податоци од прелистување на уредов, како лозинки, историја и друго.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Сопри со следење на пакетов}one{Сопри со следење на сите пакети}other{Сопри со следење на сите пакети}}</translation>
 <translation id="6503077044568424649">Најпосетени</translation>
 <translation id="6503763061813913607">Известувања за „Безбедносна проверка“</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Бидете во тек со намалувањата на цените на сите производи што ги следите.</translation>
 <translation id="746872191028309255">Купувајте ги работите што ги гледате со камерата или фотогалеријата.</translation>
 <translation id="7471557245617580330">Создај нова картичка</translation>
+<translation id="7473891865547856676">Не, фала</translation>
 <translation id="747956641630879526">Ако ја скриете картичкава, ќе се исклучи следењето пакети и ќе се отстранат сите ваши податоци</translation>
 <translation id="7484645889979462775">Никогаш за оваа локација</translation>
 <translation id="7486006552035434095">Уредите нека ви бидат синхронизирани</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index 8868768..ad07702 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">നിങ്ങൾ ട്രാക്ക് ചെയ്യുന്ന എല്ലാ ഉൽപ്പന്നങ്ങളുടെയും നിരക്ക് കുറയുന്നത് അറിഞ്ഞുകൊണ്ടിരിക്കുക.</translation>
 <translation id="746872191028309255">നിങ്ങൾ കാണുന്നവ, ക്യാമറയോ ഫോട്ടോ ഗാലറിയോ ഉപയോഗിച്ച് ഷോപ്പ് ചെയ്യുക.</translation>
 <translation id="7471557245617580330">പുതിയ ടാബ് സൃഷ്‌ടിക്കുക</translation>
+<translation id="7473891865547856676">വേണ്ട, നന്ദി</translation>
 <translation id="747956641630879526">ഈ കാർഡ് മറയ്ക്കുന്നത്, പാക്കേജ് ട്രാക്ക് ചെയ്യൽ ഓഫാക്കി നിങ്ങളുടെ എല്ലാ ഡാറ്റയും നീക്കം ചെയ്യും</translation>
 <translation id="7484645889979462775">ഈ സൈറ്റിന്‌ ഒരിക്കലും ആവശ്യമില്ല</translation>
 <translation id="7486006552035434095">നിങ്ങളുടെ ഉപകരണങ്ങൾ സമന്വയിപ്പിച്ച് നിലനിർത്തുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index cc31358dc..686c6cd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Мөшгөж буй бүх бүтээгдэхүүнийхээ үнэ буурсан талаар мэдээлэлтэй байгаарай.</translation>
 <translation id="746872191028309255">Камер эсвэл зургийн цомгоороо харж буй зүйлээ дэлгүүрээс хайгаарай.</translation>
 <translation id="7471557245617580330">Шинэ цонх үүсгэх</translation>
+<translation id="7473891865547856676">Үгүй, баярлалаа</translation>
 <translation id="747956641630879526">Энэ картыг нуух нь Илгээмж хянахыг унтрааж, таны бүх өгөгдлийг хасна</translation>
 <translation id="7484645889979462775">Энэ сайтанд хэзээ ч битгий хадгал</translation>
 <translation id="7486006552035434095">Төхөөрөмжүүдээ синк хийсэн хэвээр байлгаарай</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index ce2d5a5..1eef3cad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -1430,6 +1430,7 @@
 <translation id="7468373585447318060">तुम्ही माग ठेवत असलेल्या सर्व उत्पादनांच्या किमतीमधील घसरणींबाबत माहिती मिळवत रहा.</translation>
 <translation id="746872191028309255">तुमच्या कॅमेरा किंवा फोटो गॅलरीमध्ये तुम्हाला जे दिसते ते खरेदी करा.</translation>
 <translation id="7471557245617580330">नवीन टॅब तयार करा</translation>
+<translation id="7473891865547856676">नाही, नको</translation>
 <translation id="747956641630879526">हे कार्ड लपवल्याने पॅकेज ट्रॅकिंग बंद होईल आणि तुमचा सर्व डेटा काढून टाकला जाईल</translation>
 <translation id="7484645889979462775">या साइटसाठी कधीही नाही</translation>
 <translation id="7486006552035434095">तुमची डिव्हाइस सिंकमध्ये ठेवा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index b94919b..ab65137f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Dapatkan maklumat terkini tentang semua produk yang anda jejaki.</translation>
 <translation id="746872191028309255">Beli-belah perkara yang anda lihat dengan kamera atau galeri foto anda.</translation>
 <translation id="7471557245617580330">Buat tab baharu</translation>
+<translation id="7473891865547856676">Tidak, Terima Kasih</translation>
 <translation id="747956641630879526">Tindakan menyembunyikan kad ini akan mematikan Penjejakan Bungkusan dan mengalih keluar semua data anda</translation>
 <translation id="7484645889979462775">Jangan sekali-kali untuk tapak ini</translation>
 <translation id="7486006552035434095">Pastikan peranti anda disegerakkan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 23b6fc9..02b9902 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -1428,6 +1428,7 @@
 <translation id="7468373585447318060">သင်ခြေရာခံနေသော ကုန်ပစ္စည်းအားလုံးအတွက် ဈေးနှုန်းကျဆင်းမှုများကို စောင့်ကြည့်နိုင်သည်။</translation>
 <translation id="746872191028309255">သင်၏ ကင်မရာ (သို့) ဓာတ်ပုံပြခန်းဖြင့် မြင်ရသောပစ္စည်းများကို ဈေးဝယ်နိုင်သည်။</translation>
 <translation id="7471557245617580330">တဘ် အသစ်ကို ပြုလုပ်ရန်</translation>
+<translation id="7473891865547856676">မလိုပါ</translation>
 <translation id="747956641630879526">ဤကတ်ဖျောက်ထားပါက ‘ပို့ကုန် ခြေရာခံခြင်း’ ကို ပိတ်မည်ဖြစ်ပြီး သင့်ဒေတာအားလုံးကို ဖယ်ရှားပါမည်</translation>
 <translation id="7484645889979462775">ဒီဆိုက် အတွက် လုံးဝမလုပ်ရန်</translation>
 <translation id="7486006552035434095">သင့်စက်များကို စင့်ခ်လုပ်ထားခြင်း</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
index c3924df..5af6b60 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">आफूले ट्र्याक गरेको कुनै पनि उत्पादनको मूल्य घटेका खण्डमा नोटिफिकेसन प्राप्त गर्नुहोस्।</translation>
 <translation id="746872191028309255">क्यामेरा वा फोटो ग्यालेरीमा देखिएका कुराहरू किनमेल गर्नुहोस्।</translation>
 <translation id="7471557245617580330">नयाँ ट्याब सिर्जना गर्नुहोस्</translation>
+<translation id="7473891865547856676">पर्दैन, धन्यवाद</translation>
 <translation id="747956641630879526">तपाईंले यो कार्ड लुकाउनुभयो भने प्याकेज ट्र्याकिङ अफ हुने छ र तपाईंको सबै जानकारी हटाइने छ</translation>
 <translation id="7484645889979462775">यस साइटको लागि कहिले पनि होइन</translation>
 <translation id="7486006552035434095">आफ्ना डिभाइसहरू सिंक गरिराख्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index 4d193a9..d095bde 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Blijf op de hoogte van prijsdalingen voor alle producten die je volgt.</translation>
 <translation id="746872191028309255">Koop wat je ziet met je camera of fotogalerij.</translation>
 <translation id="7471557245617580330">Nieuw tabblad maken</translation>
+<translation id="7473891865547856676">Nee, bedankt</translation>
 <translation id="747956641630879526">Als je deze kaart verbergt, wordt Verzendstatus bijhouden uitgezet en worden al je gegevens verwijderd</translation>
 <translation id="7484645889979462775">Nooit voor deze site</translation>
 <translation id="7486006552035434095">Je apparaten synchroniseren</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index f7ce752..c05a6f0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Følg med på avslag på alle produktene du sporer.</translation>
 <translation id="746872191028309255">Kjøp det du ser, med kameraet eller i bildegalleriet.</translation>
 <translation id="7471557245617580330">Åpne ny fane</translation>
+<translation id="7473891865547856676">Nei takk</translation>
 <translation id="747956641630879526">Hvis du skjuler dette kortet, blir pakkesporing slått av, og alle dataene dine blir fjernet</translation>
 <translation id="7484645889979462775">Aldri for dette nettstedet</translation>
 <translation id="7486006552035434095">Hold enhetene dine synkronisert</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb
index 7381842..8637320 100644
--- a/ios/chrome/app/strings/resources/ios_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">ମେନୁ → ସେଟିଂସ → ଡିଫଲ୍ଟ ବ୍ରାଉଜର</translation>
 <translation id="2818821771744632548">ଆପଣଙ୍କ iPhone ରିସେଟର ଅଂଶ ଭାବରେ ଆପଣଙ୍କ ଆକାଉଣ୍ଟ, <ph name="USER_NAME" />ରୁ ଆପଣଙ୍କୁ ସାଇନ ଆଉଟ କରାଯାଇଛି। ପୁଣି ସାଇନ ଇନ କରିବାକୁ ନିମ୍ନରେ "ଜାରି ରଖନ୍ତୁ"ରେ ଟାପ କରନ୍ତୁ।</translation>
 <translation id="2819667972867209401">ଚାଲୁ ଥିବା ସମୟରେ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ଡାଟା ସେଭ କରାଯାଏ। ବନ୍ଦ ଥିବା ସମୟରେ କେବଳ ଏହି ଡିଭାଇସରେ ଡାଟା ସେଭ କରାଯାଏ ଏବଂ ଆପଣ ସାଇନ ଆଉଟ କଲେ ଏହା ଡିଲିଟ ହୋଇଯାଏ।</translation>
+<translation id="2827760117436553203">ଡାଟାକୁ ଅଲଗା ରଖିବେ?</translation>
 <translation id="2829172210806130158">ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ସର୍ଚ୍ଚ କରନ୍ତୁ</translation>
 <translation id="2834399722155632105">3. ପାସୱାର୍ଡ ବିକଳ୍ପଗୁଡ଼ିକରେ ଟାପ କରନ୍ତୁ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />:<ph name="STATE" />:<ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438"><ph name="LANGUAGE" />କୁ ପୃଷ୍ଠା ଅନୁବାଦ କରୁଛି। ସ୍କ୍ରିନ୍‍ର ତଳପାର୍ଶ୍ୱରେ ବିକଳ୍ପଗୁଡ଼ିକ ଉପଲବ୍ଧ ଅଛି।</translation>
 <translation id="647867789226964031">ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation>
 <translation id="6494931198667773526">ସମାପ୍ତ ହୁଏ</translation>
+<translation id="6495521251906266731">ଏହି ଡିଭାଇସରେ ପାସୱାର୍ଡ, ଇତିହାସ ଏବଂ ଆହୁରି ଅନେକ କିଛି ପରି ପୂର୍ବରୁ ଥିବା ବ୍ରାଉଜିଂ ଡାଟା ସହ କଣ କରିବାକୁ ଚାହୁଁଛନ୍ତି ତାହା ବାଛନ୍ତୁ।</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{ଏହି ପେକେଜକୁ ଅନଟ୍ରାକ କରନ୍ତୁ}other{ସମସ୍ତ ପେକେଜକୁ ଅନଟ୍ରାକ କରନ୍ତୁ}}</translation>
 <translation id="6503077044568424649">ସର୍ବାଧିକ ପରିଦୃଷ୍ଟ</translation>
 <translation id="6503763061813913607">ସୁରକ୍ଷା ଯାଞ୍ଚ ବିଜ୍ଞପ୍ତି</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">ଆପଣ ଟ୍ରାକ କରୁଥିବା ସମସ୍ତ ପ୍ରଡକ୍ଟର ମୂଲ୍ୟ ହ୍ରାସ ବିଷୟରେ ଜାଣନ୍ତୁ।</translation>
 <translation id="746872191028309255">ଆପଣଙ୍କ କେମେରା ମାଧ୍ୟମରେ କିମ୍ବା ଫଟୋ ଗେଲେରୀରେ ଆପଣ ଯାହା ଦେଖନ୍ତି, ତାହା କିଣେ।</translation>
 <translation id="7471557245617580330">ନୂଆ ଟାବ ତିଆରି କରନ୍ତୁ</translation>
+<translation id="7473891865547856676">ନା, ଧନ୍ୟବାଦ</translation>
 <translation id="747956641630879526">ଏହି କାର୍ଡକୁ ଲୁଚାଇବା ଫଳରେ ଏହା ପେକେଜ ଟ୍ରାକିଂକୁ ବନ୍ଦ କରି ଆପଣଙ୍କ ସମସ୍ତ ଡାଟାକୁ କାଢ଼ି ଦେବ</translation>
 <translation id="7484645889979462775">ଏହି ସାଇଟ୍ ପାଇଁ କଦାପି ନୁହେଁ</translation>
 <translation id="7486006552035434095">ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକୁ ସିଙ୍କରେ ରଖନ୍ତୁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
index 615be57db..c487cab 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">ਮੀਨੂ → ਸੈਟਿੰਗਾਂ → ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਬ੍ਰਾਊਜ਼ਰ</translation>
 <translation id="2818821771744632548">ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ iPhone ਰੀਸੈੱਟ ਕਰਨ ਦੇ ਹਿੱਸੇ ਵਜੋਂ ਆਪਣੇ ਖਾਤੇ <ph name="USER_NAME" /> ਤੋਂ ਸਾਈਨ-ਆਊਟ ਕੀਤਾ ਗਿਆ ਸੀ। ਦੁਬਾਰਾ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ, ਹੇਠਾਂ "ਜਾਰੀ ਰੱਖੋ" 'ਤੇ ਟੈਪ ਕਰੋ।</translation>
 <translation id="2819667972867209401">ਚਾਲੂ ਹੋਣ 'ਤੇ, ਡਾਟਾ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਬੰਦ ਹੋਣ 'ਤੇ, ਡਾਟਾ ਸਿਰਫ਼ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਸਾਈਨ-ਆਊਟ ਕਰਨ 'ਤੇ ਮਿਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ।</translation>
+<translation id="2827760117436553203">ਕੀ ਡਾਟੇ ਨੂੰ ਵੱਖ ਰੱਖਣਾ ਹੈ?</translation>
 <translation id="2829172210806130158">ਆਪਣੀ ਸਕ੍ਰੀਨ ਖੋਜੋ</translation>
 <translation id="2834399722155632105">3. ਪਾਸਵਰਡ ਵਿਕਲਪਾਂ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">ਪੰਨੇ ਦਾ <ph name="LANGUAGE" /> ਵਿੱਚ ਅਨੁਵਾਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਪਾਸੇ ਉਪਲਬਧ ਹਨ।</translation>
 <translation id="647867789226964031">ਆਪਣੇ ਪਾਸਵਰਡ ਬਦਲੋ</translation>
 <translation id="6494931198667773526">ਸਮਾਪਤੀ ਤਾਰੀਖ</translation>
+<translation id="6495521251906266731">ਚੁਣੋ ਕਿ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਪਾਸਵਰਡਾਂ, ਇਤਿਹਾਸ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ ਵਰਗੇ ਮੌਜੂਦਾ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਦਾ ਕੀ ਕਰਨਾ ਹੈ।</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{ਇਸ ਪੈਕੇਜ ਦੀ ਟਰੈਕਿੰਗ ਬੰਦ ਕਰੋ}one{ਸਾਰੇ ਪੈਕੇਜਾਂ ਦੀ ਟਰੈਕਿੰਗ ਬੰਦ ਕਰੋ}other{ਸਾਰੇ ਪੈਕੇਜਾਂ ਦੀ ਟਰੈਕਿੰਗ ਬੰਦ ਕਰੋ}}</translation>
 <translation id="6503077044568424649">ਸਭ ਤੋਂ ਵੱਧ ਵਿਜਿਟ ਕੀਤੇ</translation>
 <translation id="6503763061813913607">ਸੁਰੱਖਿਆ ਜਾਂਚ ਸੂਚਨਾਵਾਂ</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">ਤੁਹਾਡੇ ਵੱਲੋਂ ਟਰੈਕ ਕੀਤੇ ਜਾ ਰਹੇ ਸਾਰੇ ਉਤਪਾਦਾਂ ਦੀ ਕੀਮਤ ਵਿੱਚ ਆਈ ਗਿਰਾਵਟ ਬਾਰੇ ਪਤਾ ਲਗਾਓ।</translation>
 <translation id="746872191028309255">ਆਪਣੇ ਕੈਮਰੇ ਜਾਂ ਫ਼ੋਟੋ ਗੈਲਰੀ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਦਿਖ ਰਹੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਖਰੀਦੋ।</translation>
 <translation id="7471557245617580330">ਨਵੀਂ ਟੈਬ ਬਣਾਓ</translation>
+<translation id="7473891865547856676">ਨਹੀਂ ਧੰਨਵਾਦ</translation>
 <translation id="747956641630879526">ਇਸ ਕਾਰਡ ਨੂੰ ਲੁਕਾਉਣ ਨਾਲ ਪੈਕੇਜ ਟਰੈਕਿੰਗ ਬੰਦ ਹੋ ਜਾਵੇਗੀ ਅਤੇ ਤੁਹਾਡਾ ਸਾਰਾ ਡਾਟਾ ਹਟ ਜਾਵੇਗਾ</translation>
 <translation id="7484645889979462775">ਇਸ ਸਾਈਟ ਲਈ ਕਦੇ ਵੀ ਨਹੀਂ</translation>
 <translation id="7486006552035434095">ਆਪਣੇ ਡੀਵਾਈਸਾਂ ਦਾ ਆਪਸ ਵਿੱਚ ਸਿੰਕ ਕਰਕੇ ਰੱਖੋ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 1cdd3d89..1e7d4f8a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Bądź na bieżąco z obniżkami cen wszystkich produktów, które śledzisz.</translation>
 <translation id="746872191028309255">Kupuj to, co widzisz na obrazie z aparatu lub w galerii zdjęć.</translation>
 <translation id="7471557245617580330">Utwórz nową kartę</translation>
+<translation id="7473891865547856676">Nie, dziękuję</translation>
 <translation id="747956641630879526">Ukrycie tej karty spowoduje wyłączenie śledzenia przesyłek i usunięcie wszystkich danych</translation>
 <translation id="7484645889979462775">Nigdy dla tej witryny</translation>
 <translation id="7486006552035434095">Synchronizacja urządzeń</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index 4d3cf3cb..7a1e867c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menu → Configurações → Navegador padrão</translation>
 <translation id="2818821771744632548">Sua conta <ph name="USER_NAME" /> foi desconectada como parte da redefinição do iPhone. Para fazer login novamente, toque em "Continuar" abaixo.</translation>
 <translation id="2819667972867209401">Quando essa opção está ativada, os dados são salvos na sua Conta do Google. Quando desativada, os dados são salvos apenas neste dispositivo e são excluídos quando você sai da conta.</translation>
+<translation id="2827760117436553203">Manter os dados separados?</translation>
 <translation id="2829172210806130158">Pesquisar na tela</translation>
 <translation id="2834399722155632105">3. Toque em "Opções de senha"</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Tradução da página para <ph name="LANGUAGE" />. Opções disponíveis na parte inferior da tela.</translation>
 <translation id="647867789226964031">Mudar suas senhas</translation>
 <translation id="6494931198667773526">Fim</translation>
+<translation id="6495521251906266731">Escolha o que fazer com os dados de navegação neste dispositivo, como senhas, histórico e muito mais.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Cancelar rastreamento deste pacote}one{Cancelar rastreamento de todos os pacotes}other{Cancelar rastreamento de todos os pacotes}}</translation>
 <translation id="6503077044568424649">Mais visitados</translation>
 <translation id="6503763061813913607">Notificações da Confirmação de segurança</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Acompanhe reduções nos preços de todos os produtos que você monitora.</translation>
 <translation id="746872191028309255">Compre o que está ao seu redor usando a câmera ou a galeria de fotos.</translation>
 <translation id="7471557245617580330">Criar nova guia</translation>
+<translation id="7473891865547856676">Agora Não</translation>
 <translation id="747956641630879526">Ocultar este card desativa o rastreamento de pacote e remove todos os seus dados</translation>
 <translation id="7484645889979462775">Nunca para este site</translation>
 <translation id="7486006552035434095">Manter os dispositivos sincronizados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index dfdec10f..47abd67 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Mantenha-se a par das descidas de preços de todos os produtos que acompanha.</translation>
 <translation id="746872191028309255">Compre o que vê com a câmara ou a galeria de fotos.</translation>
 <translation id="7471557245617580330">Criar novo separador</translation>
+<translation id="7473891865547856676">Não</translation>
 <translation id="747956641630879526">Se ocultar este cartão, desativa o acompanhamento de encomendas e remove todos os seus dados</translation>
 <translation id="7484645889979462775">Nunca para este site</translation>
 <translation id="7486006552035434095">Mantenha os seus dispositivos sincronizados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index b00370e..f270e071 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Meniu → Setări → Browser prestabilit</translation>
 <translation id="2818821771744632548">Te-ai deconectat de la contul <ph name="USER_NAME" /> în cadrul procesului de resetare a dispozitivului iPhone. Pentru a te conecta din nou, atinge Continuă mai jos.</translation>
 <translation id="2819667972867209401">Când opțiunea este activată, datele se salvează în Contul Google. Când este dezactivată, datele se salvează numai pe acest dispozitiv și se șterg dacă te deconectezi.</translation>
+<translation id="2827760117436553203">Păstrezi datele separat?</translation>
 <translation id="2829172210806130158">Caută pe ecran</translation>
 <translation id="2834399722155632105">3. Atinge Opțiuni pentru parolă</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Se traduce această pagină în <ph name="LANGUAGE" />. Sunt disponibile opțiuni în partea de jos a ecranului.</translation>
 <translation id="647867789226964031">Schimbă parolele</translation>
 <translation id="6494931198667773526">Se termină</translation>
+<translation id="6495521251906266731">Alege ce să faci cu datele de navigare existente de pe acest dispozitiv, cum ar fi parolele, istoricul și altele.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Anulează urmărirea coletului}few{Anulează urmărirea tuturor coletelor}other{Anulează urmărirea tuturor coletelor}}</translation>
 <translation id="6503077044568424649">Cele mai vizitate</translation>
 <translation id="6503763061813913607">Notificări pentru Verificarea de siguranță</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Află despre scăderile de prețuri pentru toate produsele pe care le urmărești.</translation>
 <translation id="746872191028309255">Cumpără ceea ce vezi folosind camera foto sau galeria foto.</translation>
 <translation id="7471557245617580330">Creează o nouă filă</translation>
+<translation id="7473891865547856676">Nu, mulțumesc</translation>
 <translation id="747956641630879526">Dacă ascunzi acest card, urmărirea coletelor va fi dezactivată, iar toate datele se vor elimina</translation>
 <translation id="7484645889979462775">Niciodată pentru acest site</translation>
 <translation id="7486006552035434095">Menține dispozitivele sincronizate</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 11701c8..1ee92ae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Меню → Настройки → Браузер по умолчанию</translation>
 <translation id="2818821771744632548">В результате сброса настроек iPhone произошел выход из аккаунта <ph name="USER_NAME" />. Чтобы войти, нажмите "Продолжить" ниже.</translation>
 <translation id="2819667972867209401">Если параметр включен, данные сохраняются в аккаунте Google. Если нет, данные остаются только на этом устройстве и удаляются при выходе из аккаунта.</translation>
+<translation id="2827760117436553203">Хранить эти данные отдельно?</translation>
 <translation id="2829172210806130158">Поиск по экрану</translation>
 <translation id="2834399722155632105">3. Выберите "Настройки паролей".</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Перевод страницы на <ph name="LANGUAGE" />. Параметры указаны в нижней части экрана.</translation>
 <translation id="647867789226964031">Измените пароли</translation>
 <translation id="6494931198667773526">Окончание</translation>
+<translation id="6495521251906266731">Выберите, что делать с уже имеющимися на устройстве данными о работе в браузере, например паролями, историей и т. д.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Перестать отслеживать эту посылку}one{Перестать отслеживать все посылки}few{Перестать отслеживать все посылки}many{Перестать отслеживать все посылки}other{Перестать отслеживать все посылки}}</translation>
 <translation id="6503077044568424649">Сайты</translation>
 <translation id="6503763061813913607">Уведомления проверки безопасности</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Узнавайте о скидках на интересующие вас товары.</translation>
 <translation id="746872191028309255">Покупайте товары с помощью камеры или фотографий из галереи.</translation>
 <translation id="7471557245617580330">Создать вкладку</translation>
+<translation id="7473891865547856676">Нет, спасибо</translation>
 <translation id="747956641630879526">Если вы скроете эту карточку, отслеживание заказов прекратится, а все данные будут удалены</translation>
 <translation id="7484645889979462775">Никогда для этого сайта</translation>
 <translation id="7486006552035434095">Синхронизируйте устройства</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb
index 67b8d9a..db916f6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">මෙනුව → සැකසීම් → පෙරනිමි බ්‍රවුසරය</translation>
 <translation id="2818821771744632548">ඔබේ iPhone යළි සැකසීමේ කොටසක් ලෙස, ඔබ ඔබේ <ph name="USER_NAME" /> ගිණුමෙන් වරන ලදි. නැවත පුරන්නට, පහත "ඉදිරියට යන්න" වෙත තට්ටු කරන්න.</translation>
 <translation id="2819667972867209401">ක්‍රියාත්මක වන විට, දත්ත ඔබේ Google ගිණුමේ සුරකිනු ලැබේ. ක්‍රියාවිරහිත වූ විට, දත්ත සුරැකෙන්නේ මෙම උපාංගයට පමණක් වන අතර ඔබ වරනය වුවහොත් මකනු ලැබේ.</translation>
+<translation id="2827760117436553203">දත්ත වෙනම තබා ගන්න ද?</translation>
 <translation id="2829172210806130158">ඔබේ තිරය සොයන්න</translation>
 <translation id="2834399722155632105">3. මුරපද විකල්ප තට්ටු කරන්න</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">පිටුව <ph name="LANGUAGE" />ට පරිවර්තන කෙරේ. තිරයේ පහළ කොටස ළඟ විකල්ප ලැබේ.</translation>
 <translation id="647867789226964031">ඔබේ මුරපද වෙනස් කරන්න</translation>
 <translation id="6494931198667773526">නිමා වන්නේ</translation>
+<translation id="6495521251906266731">මුරපද, ඉතිහාසය සහ තවත් දේ වැනි, මෙම උපාංගයේ පවතින බ්‍රවුස් කිරීමේ දත්ත සමග කළ යුතු දේ තෝරා ගන්න.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{මෙම පැකේජය නිරීක්ෂණය නොකරන්න}one{සියලු පැකේජ නිරීක්ෂණය නොකරන්න}other{සියලු පැකේජ නිරීක්ෂණය නොකරන්න}}</translation>
 <translation id="6503077044568424649">වැඩියෙන්ම පිවිසි</translation>
 <translation id="6503763061813913607">ආරක්ෂිත පරීක්ෂා දැනුම්දීම්</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">ඔබ නිරීක්ෂණය කරන සියලු ම නිෂ්පාදනවල මිල පහත වැටීම් සමගින් සිටින්න.</translation>
 <translation id="746872191028309255">ඔබේ කැමරාව හෝ ඡායාරූප ගැලරිය සමග ඔබ දකින දේ සාප්පු යන්න.</translation>
 <translation id="7471557245617580330">නව පටිත්තක් සාදන්න</translation>
+<translation id="7473891865547856676">එපා ස්තූතියි</translation>
 <translation id="747956641630879526">මෙම කාඩ්පත සැඟවීම පැකේජ ලුහුබැඳීම ක්‍රියා විරහිත කර ඔබේ සියලු දත්ත ඉවත් කරනු ඇත</translation>
 <translation id="7484645889979462775">කවදාවත් මෙම අඩවිය සඳහා නොවේ</translation>
 <translation id="7486006552035434095">ඔබේ උපාංග සමමුහුර්තව තබා ගන්න</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index df637639..b0309fd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Ponuka → Nastavenia → Predvolený prehliadač</translation>
 <translation id="2818821771744632548">V rámci resetu iPhonu vás systém odhlásil z účtu <ph name="USER_NAME" />. Ak sa chcete znova prihlásiť, klepnite nižšie na Pokračovať.</translation>
 <translation id="2819667972867209401">Keď je táto možnosť zapnutá, údaje sa ukladajú do vášho účtu Google. Keď je vypnutá, údaje sa ukladajú iba do tohto zariadenia a odstránia sa po vašom odhlásení.</translation>
+<translation id="2827760117436553203">Chcete ponechať dáta oddelené?</translation>
 <translation id="2829172210806130158">Vyhľadávať na obrazovke</translation>
 <translation id="2834399722155632105">3. Klepnite na Možnosti hesiel</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Stránka sa prekladá do jazyka <ph name="LANGUAGE" />. Možnosti nájdete v dolnej časti obrazovky.</translation>
 <translation id="647867789226964031">Zmeňte si heslá</translation>
 <translation id="6494931198667773526">Končí sa</translation>
+<translation id="6495521251906266731">Vyberte, čo chcete urobiť s existujúcimi dátami prehliadania v tomto zariadení, napríklad s heslami, históriou a ďalšími.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Zastaviť sledovanie tejto zásielky}few{Zastaviť sledovanie týchto zásielok}many{Untrack all packages}other{Zastaviť sledovanie týchto zásielok}}</translation>
 <translation id="6503077044568424649">Najnavštevovanejšie</translation>
 <translation id="6503763061813913607">Upozornenia kontroly bezpečnosti</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Majte prehľad o poklesoch cien všetkých výrobkov, ktoré sledujete.</translation>
 <translation id="746872191028309255">Nakupujte, čo vidíte, pomocou kamery alebo fotogalérie.</translation>
 <translation id="7471557245617580330">Vytvoriť novú kartu</translation>
+<translation id="7473891865547856676">Nie, ďakujem</translation>
 <translation id="747956641630879526">Skrytím tejto karty vypnete sledovanie zásielky a odstránite všetky svoje údaje</translation>
 <translation id="7484645889979462775">Nikdy pre tieto stránky</translation>
 <translation id="7486006552035434095">Majte svoje zariadenia synchronizované</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index b21296ee..0379f4d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Spremljajte znižanja cen za vse izdelke, ki jih spremljate.</translation>
 <translation id="746872191028309255">Nakupujte, kar vidite, s fotoaparatom ali fotogalerijo.</translation>
 <translation id="7471557245617580330">Create new tab</translation>
+<translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="747956641630879526">Če skrijete to kartico, boste izklopili sledenje paketu in odstranili vse podatke</translation>
 <translation id="7484645889979462775">Nikoli za to spletno mesto</translation>
 <translation id="7486006552035434095">Poskrbite za sinhroniziranost naprav</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
index faf6768..213b9bf1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menyja → Cilësimet → Shfletuesi i parazgjedhur</translation>
 <translation id="2818821771744632548">Ke dalë nga llogaria jote, <ph name="USER_NAME" />, si pjesë e rivendosjes së telefonit iPhone. Për t'u identifikuar përsëri, trokit te "Vazhdo" më poshtë.</translation>
 <translation id="2819667972867209401">Kur është aktivizuar, të dhënat ruhen në "Llogarinë tënde të Google". Kur është çaktivizuar, të dhënat ruhen vetëm në këtë pajisje dhe fshihen nëse del nga llogaria.</translation>
+<translation id="2827760117436553203">Të mbahen veçmas të dhënat?</translation>
 <translation id="2829172210806130158">Kërko në ekranin tënd</translation>
 <translation id="2834399722155632105">3. Trokit tek "Opsionet e fjalëkalimeve"</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Po përkthen faqen në <ph name="LANGUAGE" />. Opsionet që ofrohen janë pranë fundit të ekranit.</translation>
 <translation id="647867789226964031">Ndrysho fjalëkalimet e tua</translation>
 <translation id="6494931198667773526">Mbaron</translation>
+<translation id="6495521251906266731">Zgjidh se çfarë do të bësh me të dhënat ekzistuese të shfletimit në këtë pajisje, si p.sh. fjalëkalimet, historiku etj.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Anulo gjurmimin e kësaj pakoje}other{Anulo gjurmimin e të gjitha pakove}}</translation>
 <translation id="6503077044568424649">Më të vizituara</translation>
 <translation id="6503763061813913607">Njoftimet e "Kontrollit të sigurisë"</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Qëndro i informuar për uljet e çmimeve për të gjitha produktet që monitoron.</translation>
 <translation id="746872191028309255">Kërko për të blerë ato që shikon me kamerën ose nga galeria e fotografive.</translation>
 <translation id="7471557245617580330">Krijo skedë të re</translation>
+<translation id="7473891865547856676">Jo, faleminderit</translation>
 <translation id="747956641630879526">Fshehja e kësaj karte do të çaktivizojë "Gjurmimin e paketës" dhe do të heqë të gjitha të dhënat e tua</translation>
 <translation id="7484645889979462775">Asnjëherë për këtë faqe</translation>
 <translation id="7486006552035434095">Mbaji pajisjet e tua të sinkronizuara</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
index 1c49da0a..d41522b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -100,6 +100,7 @@
 <translation id="1407135791313364759">Otvori sve</translation>
 <translation id="1408847409015257906">Dodirnite Privatnost i bezbednost.</translation>
 <translation id="1411386976162024013">Vizuelna pretraga Objektiva</translation>
+<translation id="1417474386970818917">Odjavi i izbriši</translation>
 <translation id="1426410128494586442">Da</translation>
 <translation id="1430915738399379752">Štampaj</translation>
 <translation id="1436671784520050284">Nastavi sa podešavanjem</translation>
@@ -1009,6 +1010,7 @@
 <translation id="5628388627414062173">{count,plural, =1{{count} stranica na listi za čitanje}one{{count} stranica na listi za čitanje}few{{count} stranice na listi za čitanje}other{{count} stranica na listi za čitanje}}</translation>
 <translation id="5632485077360054581">Pokaži mi kako</translation>
 <translation id="5633237939819267663">{count,plural, =1{Obeleživač je sačuvan u: {title}}one{{count} obeleživač je sačuvan u: {title}}few{{count} obeleživača su sačuvana u: {title}}other{{count} obeleživača je sačuvano u: {title}}}</translation>
+<translation id="564170563478022912">Želite da se odjavite? Nesačuvani podaci naloga će biti izbrisani.</translation>
 <translation id="5642707040609478753">Označi kao nepročitano</translation>
 <translation id="5646284034397250191">Oznaka je napravljena. Datum je na čekanju</translation>
 <translation id="5647096944343801045">Velika ulazna tačka</translation>
@@ -1021,6 +1023,7 @@
 <translation id="5669335982068190158">Odjavljeni ste u sklopu resetovanja iPhone-a. Dodirnite Nastavi u nastavku da biste se prijavili.</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Verzija <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5680012489335339762">Želite da promenite nalog? Nesačuvani podaci naloga će biti izbrisani.</translation>
 <translation id="5683499062697987550">Da biste koristili i čuvali lozinke na Google nalogu, potvrdite svoj identitet.</translation>
 <translation id="5684761169742812828">Ova lozinka je otkrivena pri povredi podataka na internetu. Ako trenutno nemate vremena da je promenite, Google preporučuje da zadržite ovo upozorenje da biste se kasnije podsetili.</translation>
 <translation id="5694848685995373177">Sačuvano je na Disku za <ph name="USER_EMAIL" />.</translation>
@@ -1222,6 +1225,7 @@
 <translation id="6506996418997555004">Delite grupu kartica <ph name="GROUP_NAME" /></translation>
 <translation id="6507973708545996744">Prijavite se da bi vam lista za čitanje bila dostupna na svim uređajima.</translation>
 <translation id="6518133107902771759">Verifikuj</translation>
+<translation id="6518861084553706202">Kartice će biti zatvorene, a izbrisani podaci mogu da obuhvataju lozinke, istoriju pregledanja, kolačiće i drugo.</translation>
 <translation id="6523575793810663688">Pokaži mi kako</translation>
 <translation id="6524082013156754186">Sačuvaj na nalogu</translation>
 <translation id="6527303717912515753">Deli</translation>
@@ -1429,6 +1433,7 @@
 <translation id="7468373585447318060">Budite u toku sa sniženjima za sve proizvode koje pratite.</translation>
 <translation id="746872191028309255">Kupujte ono što vidite pomoću kamere ili foto-galerije.</translation>
 <translation id="7471557245617580330">Napravi novu karticu</translation>
+<translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="747956641630879526">Skrivanjem ove kartice isključujete praćenje paketa i uklanjate sve podatke</translation>
 <translation id="7484645889979462775">Nikad za ovaj sajt</translation>
 <translation id="7486006552035434095">Sinhronizujte uređaje</translation>
@@ -1677,6 +1682,7 @@
 <translation id="8545276357312221485">Proverite podešavanja podrazumevanog pregledača</translation>
 <translation id="854938212724803178">Imate 1 ugroženu lozinku. Rešite problem odmah da biste bili bezbedni.</translation>
 <translation id="8556590991644167667">{count,plural, =1{Odbacili ste {count} upozorenje}one{Odbacili ste {count} upozorenje}few{Odbacili ste {count} upozorenja}other{Odbacili ste {count} upozorenja}}</translation>
+<translation id="8558046478684552694">Zatvorite grupu.</translation>
 <translation id="8560253818350321773">Prvo prikaži često korišćene stavke.</translation>
 <translation id="8561999115126307258">{count,plural, =1{{count} opcija za lozinku je dostupna iznad tastature.}one{{count} opcija za lozinku je dostupna iznad tastature.}few{{count} opcije za lozinku su dostupne iznad tastature.}other{{count} opcija za lozinku je dostupno iznad tastature.}}</translation>
 <translation id="8564894539416715395">Stranica Nova kartica</translation>
@@ -1845,6 +1851,7 @@
 <translation id="9205189991633470489">Zaključavanje kartica bez arhiviranja</translation>
 <translation id="9206887540681440657">Brzina</translation>
 <translation id="9223358826628549784">Izveštaj o otkazivanju je poslat.</translation>
+<translation id="926455622548529175">Promeni i izbriši</translation>
 <translation id="929748059769569925">Istaknuti tekst</translation>
 <translation id="932305336591073205">{count,plural, =1{Zatvori karticu}one{Zatvori kartice}few{Zatvori kartice}other{Zatvori kartice}}</translation>
 <translation id="939472100615258482">Aktuelni sajt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index ba100b5..49f6b2e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -100,6 +100,7 @@
 <translation id="1407135791313364759">Отвори све</translation>
 <translation id="1408847409015257906">Додирните Приватност и безбедност.</translation>
 <translation id="1411386976162024013">Визуелна претрага Објектива</translation>
+<translation id="1417474386970818917">Одјави и избриши</translation>
 <translation id="1426410128494586442">Да</translation>
 <translation id="1430915738399379752">Штампај</translation>
 <translation id="1436671784520050284">Настави са подешавањем</translation>
@@ -1009,6 +1010,7 @@
 <translation id="5628388627414062173">{count,plural, =1{{count} страница на листи за читање}one{{count} страница на листи за читање}few{{count} странице на листи за читање}other{{count} страница на листи за читање}}</translation>
 <translation id="5632485077360054581">Покажи ми како</translation>
 <translation id="5633237939819267663">{count,plural, =1{Обележивач је сачуван у: {title}}one{{count} обележивач је сачуван у: {title}}few{{count} обележивача су сачувана у: {title}}other{{count} обележивача је сачувано у: {title}}}</translation>
+<translation id="564170563478022912">Желите да се одјавите? Несачувани подаци налога ће бити избрисани.</translation>
 <translation id="5642707040609478753">Означи као непрочитано</translation>
 <translation id="5646284034397250191">Ознака је направљена. Датум је на чекању</translation>
 <translation id="5647096944343801045">Велика улазна тачка</translation>
@@ -1021,6 +1023,7 @@
 <translation id="5669335982068190158">Одјављени сте у склопу ресетовања iPhone-а. Додирните Настави у наставку да бисте се пријавили.</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Верзија <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5680012489335339762">Желите да промените налог? Несачувани подаци налога ће бити избрисани.</translation>
 <translation id="5683499062697987550">Да бисте користили и чували лозинке на Google налогу, потврдите свој идентитет.</translation>
 <translation id="5684761169742812828">Ова лозинка је откривена при повреди података на интернету. Ако тренутно немате времена да је промените, Google препоручује да задржите ово упозорење да бисте се касније подсетили.</translation>
 <translation id="5694848685995373177">Сачувано је на Диску за <ph name="USER_EMAIL" />.</translation>
@@ -1222,6 +1225,7 @@
 <translation id="6506996418997555004">Делите групу картица <ph name="GROUP_NAME" /></translation>
 <translation id="6507973708545996744">Пријавите се да би вам листа за читање била доступна на свим уређајима.</translation>
 <translation id="6518133107902771759">Верификуј</translation>
+<translation id="6518861084553706202">Картице ће бити затворене, а избрисани подаци могу да обухватају лозинке, историју прегледања, колачиће и друго.</translation>
 <translation id="6523575793810663688">Покажи ми како</translation>
 <translation id="6524082013156754186">Сачувај на налогу</translation>
 <translation id="6527303717912515753">Дели</translation>
@@ -1429,6 +1433,7 @@
 <translation id="7468373585447318060">Будите у току са снижењима за све производе које пратите.</translation>
 <translation id="746872191028309255">Купујте оно што видите помоћу камере или фото-галерије.</translation>
 <translation id="7471557245617580330">Направи нову картицу</translation>
+<translation id="7473891865547856676">Не, хвала</translation>
 <translation id="747956641630879526">Скривањем ове картице искључујете праћење пакета и уклањате све податке</translation>
 <translation id="7484645889979462775">Никад за овај сајт</translation>
 <translation id="7486006552035434095">Синхронизујте уређаје</translation>
@@ -1677,6 +1682,7 @@
 <translation id="8545276357312221485">Проверите подешавања подразумеваног прегледача</translation>
 <translation id="854938212724803178">Имате 1 угрожену лозинку. Решите проблем одмах да бисте били безбедни.</translation>
 <translation id="8556590991644167667">{count,plural, =1{Одбацили сте {count} упозорење}one{Одбацили сте {count} упозорење}few{Одбацили сте {count} упозорења}other{Одбацили сте {count} упозорења}}</translation>
+<translation id="8558046478684552694">Затворите групу.</translation>
 <translation id="8560253818350321773">Прво прикажи често коришћене ставке.</translation>
 <translation id="8561999115126307258">{count,plural, =1{{count} опција за лозинку је доступна изнад тастатуре.}one{{count} опција за лозинку је доступна изнад тастатуре.}few{{count} опције за лозинку су доступне изнад тастатуре.}other{{count} опција за лозинку је доступно изнад тастатуре.}}</translation>
 <translation id="8564894539416715395">Страница Нова картица</translation>
@@ -1845,6 +1851,7 @@
 <translation id="9205189991633470489">Закључавање картица без архивирања</translation>
 <translation id="9206887540681440657">Брзина</translation>
 <translation id="9223358826628549784">Извештај о отказивању је послат.</translation>
+<translation id="926455622548529175">Промени и избриши</translation>
 <translation id="929748059769569925">Истакнути текст</translation>
 <translation id="932305336591073205">{count,plural, =1{Затвори картицу}one{Затвори картице}few{Затвори картице}other{Затвори картице}}</translation>
 <translation id="939472100615258482">Актуелни сајт</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index cf98a85b..0796ca7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Håll koll på prissänkningar för alla produkter du bevakar.</translation>
 <translation id="746872191028309255">Köp det du ser med kameran eller fotogalleriet.</translation>
 <translation id="7471557245617580330">Skapa ny flik</translation>
+<translation id="7473891865547856676">Nej tack</translation>
 <translation id="747956641630879526">Om du döljer det här kortet inaktiveras spårning av försändelser och all din data tas bort</translation>
 <translation id="7484645889979462775">Aldrig på den här webbplatsen</translation>
 <translation id="7486006552035434095">Håll dina enheter synkroniserade</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
index 4b368609..5e43340 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Pata arifa za kupungua kwa bei za bidhaa zote unazofuatilia.</translation>
 <translation id="746872191028309255">Nunua unachokiona kwenye kamera au matunzio yako ya picha.</translation>
 <translation id="7471557245617580330">Unda kichupo kipya</translation>
+<translation id="7473891865547856676">La Asante</translation>
 <translation id="747956641630879526">Hatua ya kuficha kadi hii itazima Ufuatiliaji wa Kifurushi na kuondoa data yako yote</translation>
 <translation id="7484645889979462775">Kamwe lisihifadhiwe kwa tovuti hii</translation>
 <translation id="7486006552035434095">Hakikisha vifaa vyako vimesawazishwa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index 290cdda..4a82f665 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">மெனு → அமைப்புகள் → இயல்பு பிரவுசர்</translation>
 <translation id="2818821771744632548">iPhoneனை மீட்டமைப்பதன் ஒரு பகுதியாக <ph name="USER_NAME" /> கணக்கில் இருந்து வெளியேற்றப்பட்டீர்கள். மீண்டும் உள்நுழைய கீழே உள்ள “தொடர்க” என்பதைத் தட்டவும்.</translation>
 <translation id="2819667972867209401">இயக்கப்பட்டிருக்கும்போது, தரவு உங்கள் Google கணக்கில் சேமிக்கப்படும். முடக்கப்பட்டிருந்தால் இந்தச் சாதனத்தில் மட்டும் தரவு சேமிக்கப்படும், நீங்கள் வெளியேறினால் நீக்கப்படும்.</translation>
+<translation id="2827760117436553203">தரவுகளைத் தனியாக வைத்திருக்கவா?</translation>
 <translation id="2829172210806130158">திரையில் உள்ளவற்றைத் தேடுங்கள்</translation>
 <translation id="2834399722155632105">3. கடவுச்சொல் விருப்பங்கள் என்பதைத் தட்டவும்</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">பக்கத்தை <ph name="LANGUAGE" /> மொழியில் மொழிபெயர்க்கிறது. திரையின் கீழ்ப்பகுதிக்கு அருகில் விருப்பத்தேர்வுகள் உள்ளன.</translation>
 <translation id="647867789226964031">உங்கள் கடவுச்சொற்களை மாற்றுங்கள்</translation>
 <translation id="6494931198667773526">முடியும் நேரம்</translation>
+<translation id="6495521251906266731">இந்தச் சாதனத்தில் தற்போது இருக்கும் கடவுச்சொற்கள், பதிவுகள் போன்ற பல பிரவுசிங் தரவுகளை எப்படி நிர்வகிக்க விரும்புகிறீர்கள் என்பதைத் தேர்வுசெய்யுங்கள்.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{இந்தப் பேக்கேஜைக் கண்காணிக்க வேண்டாம்}other{அனைத்து பேக்கேஜ்களையும் கண்காணிக்க வேண்டாம்}}</translation>
 <translation id="6503077044568424649">அதிகமாகப் பார்வையிடப்பட்டது</translation>
 <translation id="6503763061813913607">பாதுகாப்புச் சரிபார்ப்பிற்கான அறிவிப்புகள்</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">நீங்கள் கண்காணிக்கும் எல்லாத் தயாரிப்புகளுக்கும் விலை குறையும்போது உடனே தெரிந்துகொள்ளுங்கள்.</translation>
 <translation id="746872191028309255">நீங்கள் பார்ப்பவற்றை உங்கள் கேமரா மற்றும் புகைப்பட கேலரி மூலம் ஷாப்பிங் செய்யலாம்.</translation>
 <translation id="7471557245617580330">புதிய தாவலை உருவாக்கு</translation>
+<translation id="7473891865547856676">வேண்டாம்</translation>
 <translation id="747956641630879526">இந்தக் கார்டை மறைத்தால் பேக்கேஜ் கண்காணிப்பு முடக்கப்பட்டு உங்களின் எல்லாத் தரவும் அகற்றப்படும்</translation>
 <translation id="7484645889979462775">இந்த தளத்திற்கு எப்போதும் இல்லை</translation>
 <translation id="7486006552035434095">சாதனங்களை ஒத்திசைவிலேயே வைத்திருங்கள்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index dc86599..682ae9e6e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">మీరు ట్రాక్ చేసే అన్ని ప్రోడక్ట్‌లపై ఉన్న ధర తగ్గింపులను ఎప్పటికప్పుడు తెలుసుకోండి.</translation>
 <translation id="746872191028309255">మీ కెమెరా లేదా ఫోటో గ్యాలరీని ఉపయోగించి, మీరు చూసే వాటిని షాపింగ్ చేయండి.</translation>
 <translation id="7471557245617580330">కొత్త ట్యాబ్‌ను క్రియేట్ చేయండి</translation>
+<translation id="7473891865547856676">వద్దు, ధన్యవాదాలు</translation>
 <translation id="747956641630879526">ఈ కార్డ్‌ను దాచడం వలన ప్యాకేజీ ట్రాకింగ్‌ను ఆఫ్ చేసి, మీ మొత్తం డేటా తీసివేయబడుతుంది</translation>
 <translation id="7484645889979462775">ఈ సైట్‌కోసం ఎప్పటికీ వద్దు</translation>
 <translation id="7486006552035434095">మీ పరికరాలను సింక్‌లో ఉంచండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 612b12d..3d8f1d4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">ติดตามการลดราคาของผลิตภัณฑ์ทั้งหมดที่คุณติดตาม</translation>
 <translation id="746872191028309255">เลือกซื้อสิ่งที่คุณเห็นโดยใช้กล้องหรือแกลเลอรีรูปภาพ</translation>
 <translation id="7471557245617580330">สร้างแท็บใหม่</translation>
+<translation id="7473891865547856676">ไม่เป็นไร</translation>
 <translation id="747956641630879526">การซ่อนการ์ดนี้จะปิดการติดตามพัสดุภัณฑ์และนำข้อมูลทั้งหมดของคุณออก</translation>
 <translation id="7484645889979462775">ไม่จดจำสำหรับเว็บไซต์นี้</translation>
 <translation id="7486006552035434095">ซิงค์อุปกรณ์อยู่เสมอ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 00d54a35..6616f8ed 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -33,7 +33,7 @@
 <translation id="1118569444314402022">Tekrar hoş geldiniz <ph name="USER_NAME" /></translation>
 <translation id="1121850836842642159">Fotoğraflar ve Görüntüler</translation>
 <translation id="1125564390852150847">Yeni sekme oluştur.</translation>
-<translation id="1126696498560056882">Bu cihazdaki hesapları yönet</translation>
+<translation id="1126696498560056882">Bu cihazdaki hesapları yönetin</translation>
 <translation id="1126809382673880764">Sizi tehlikeli web siteleri, indirmeler ve uzantılara karşı korumaz. Gmail ve Arama gibi diğer Google hizmetlerinde, mümkün olduğunda Güvenli Tarama korumasından yararlanmaya devam edersiniz.</translation>
 <translation id="1142371195993008685"><ph name="FEATURE_NAME" /> kanalından gelen bildirimleri kapat</translation>
 <translation id="1147031633655575115"><ph name="USER" /> olarak oturum açıldı</translation>
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Menü → Ayarlar → Varsayılan tarayıcı</translation>
 <translation id="2818821771744632548">iPhone sıfırlama işleminin bir parçası olarak <ph name="USER_NAME" /> hesabınızın oturumu kapatıldı. Yeniden oturum açmak için aşağıda "İlerle"ye dokunun.</translation>
 <translation id="2819667972867209401">Bu ayar etkinleştirildiğinde veriler Google Hesabınıza kaydedilir. Devre dışı bırakıldığında veriler yalnızca bu cihaza kaydedilir ve oturumunuzu kapatırsanız silinir.</translation>
+<translation id="2827760117436553203">Veriler ayrı tutulsun mu?</translation>
 <translation id="2829172210806130158">Ekranınızda arayın</translation>
 <translation id="2834399722155632105">3. Şifre Seçenekleri'ne dokunun</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Sayfa <ph name="LANGUAGE" /> diline çevriliyor. Seçenekler ekranın alt kısmına yakın bir yerde bulunur.</translation>
 <translation id="647867789226964031">Şifrelerinizi değiştirin</translation>
 <translation id="6494931198667773526">Bitiş zamanı</translation>
+<translation id="6495521251906266731">Bu cihazdaki şifreler ve geçmiş gibi mevcut tarama verileri ile ne yapılacağını seçin.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Bu kargoyu takip etmeyi bırak}other{Tüm kargoları takip etmeyi bırak}}</translation>
 <translation id="6503077044568424649">En çok ziyaret edilenler</translation>
 <translation id="6503763061813913607">Güvenlik Kontrolü Bildirimleri</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Takip ettiğiniz tüm ürünlerdeki fiyat düşüşlerini takip edin.</translation>
 <translation id="746872191028309255">Gördüklerinizi satın almak için kameranızı veya fotoğraf galerinizi kullanın.</translation>
 <translation id="7471557245617580330">Yeni sekme oluştur</translation>
+<translation id="7473891865547856676">Hayır, Teşekkürler</translation>
 <translation id="747956641630879526">Bu kartı gizlerseniz kargo takibi devre dışı bırakılır ve tüm verileriniz silinir</translation>
 <translation id="7484645889979462775">Bu site için hiçbir zaman</translation>
 <translation id="7486006552035434095">Cihazlarınızı senkronize durumda tutun</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index a97602fd..0bef4a6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Дізнавайтеся про зниження цін на всі товари, які відстежуєте.</translation>
 <translation id="746872191028309255">Купуйте товари, які бачите у видошукачі камери або фотогалереї.</translation>
 <translation id="7471557245617580330">Створити нову вкладку</translation>
+<translation id="7473891865547856676">Ні, дякую</translation>
 <translation id="747956641630879526">Якщо сховати цю картку, відстеження замовлень буде вимкнено, а всі ваші дані – вилучено</translation>
 <translation id="7484645889979462775">Ніколи для цього сайта</translation>
 <translation id="7486006552035434095">Синхронізуйте свої пристрої</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index e9141bd..377d8f3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">آپ جن پروڈکٹس کو ٹریک کرتے ہیں ان کی قیمتوں میں کمی سے باخبر رہیں۔</translation>
 <translation id="746872191028309255">نظر آنے والی چیزوں کو اپنے کیمرا اور تصویری گیلری کے ساتھ انہیں خریدیں۔</translation>
 <translation id="7471557245617580330">نیا ٹیب بنائیں</translation>
+<translation id="7473891865547856676">نہیں شکریہ</translation>
 <translation id="747956641630879526">اس کارڈ کو چھپانے سے پیکیج ٹریکنگ آف ہو جائے گی اور آپ کا سارا ڈیٹا ہٹا دیا جائے گا</translation>
 <translation id="7484645889979462775">اس سائٹ کیلئے کبھی نہیں</translation>
 <translation id="7486006552035434095">اپنے آلات کو مطابقت پذیر رکھیں</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
index 0fc1a55..146da66b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Qiziqarli mahsulotlar narxi tushganda xabar oling.</translation>
 <translation id="746872191028309255">Kamera yoki galereya orqali tegishli mahsulotlarni xarid qiling</translation>
 <translation id="7471557245617580330">Yangi tab ochish</translation>
+<translation id="7473891865547856676">Yo‘q, rahmat</translation>
 <translation id="747956641630879526">Bu karta berkitilganda paketni kuzatish funksiyasi faolsizlantiriladi va barcha maʼlumotlaringiz olib tashlanadi</translation>
 <translation id="7484645889979462775">Bu saytda hech qachon</translation>
 <translation id="7486006552035434095">Qurilmalaringizni sinxronlab boring</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 837ecac..4742c8ce 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">Nhận thông tin giảm giá cho tất cả sản phẩm bạn theo dõi.</translation>
 <translation id="746872191028309255">Mua sản phẩm bạn thấy bằng camera hoặc thư viện ảnh.</translation>
 <translation id="7471557245617580330">Tạo thẻ mới</translation>
+<translation id="7473891865547856676">Không, cảm ơn</translation>
 <translation id="747956641630879526">Thao tác ẩn thẻ này sẽ tắt tính năng Theo dõi gói hàng và xoá tất cả dữ liệu của bạn</translation>
 <translation id="7484645889979462775">Không bao giờ đối với trang web này</translation>
 <translation id="7486006552035434095">Đồng bộ hoá các thiết bị của bạn</translation>
@@ -1560,7 +1561,7 @@
 <translation id="8011489434346330032">Trình kiểm tra web</translation>
 <translation id="802154636333426148">Tải xuống không thành công</translation>
 <translation id="8023878949384262191">Mở rộng phần.</translation>
-<translation id="8027581147000338959">Mở bằng Cửa sổ Mới</translation>
+<translation id="8027581147000338959">Mở trong cửa sổ mới</translation>
 <translation id="8032569120109842252">Đang theo dõi</translation>
 <translation id="8035133914807600019">Thư mục mới...</translation>
 <translation id="8035412398498507358">Ảnh</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index 98eaf2e..049aa75 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">菜单 → 设置 → 默认浏览器</translation>
 <translation id="2818821771744632548">您在 iPhone 重置过程中退出了账号 <ph name="USER_NAME" />。如需重新登录,请点按下方的“继续”。</translation>
 <translation id="2819667972867209401">当此设置处于开启状态时,数据会保存在您的 Google 账号中。当此设置处于关闭状态时,数据只会保存到此设备上,并且会在您退出账号后被删除。</translation>
+<translation id="2827760117436553203">要将数据分开吗?</translation>
 <translation id="2829172210806130158">在屏幕中搜索</translation>
 <translation id="2834399722155632105">3. 点按“密码选项”</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />,<ph name="STATE" />,<ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">将页面翻译成<ph name="LANGUAGE" />。选项位于屏幕底部附近。</translation>
 <translation id="647867789226964031">更改密码</translation>
 <translation id="6494931198667773526">结束日期</translation>
+<translation id="6495521251906266731">选择如何处理此设备上现有的浏览数据,例如密码、历史记录等。</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{取消跟踪此包裹}other{取消跟踪所有包裹}}</translation>
 <translation id="6503077044568424649">常去网站</translation>
 <translation id="6503763061813913607">安全检查通知</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">及时了解您跟踪的所有商品的降价情况。</translation>
 <translation id="746872191028309255">使用相机或图库购买所见内容。</translation>
 <translation id="7471557245617580330">创建新标签页</translation>
+<translation id="7473891865547856676">不用了</translation>
 <translation id="747956641630879526">隐藏此卡片会关闭包裹跟踪功能,并移除您的所有数据</translation>
 <translation id="7484645889979462775">一律不保存此网站的密码</translation>
 <translation id="7486006552035434095">让您的各部设备保持同步</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
index 1ab3688..c7d1bc3e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -1429,6 +1429,7 @@
 <translation id="7468373585447318060">緊貼所有追蹤產品的減價消息。</translation>
 <translation id="746872191028309255">透過相機或相片庫購買所見內容。</translation>
 <translation id="7471557245617580330">新增分頁</translation>
+<translation id="7473891865547856676">不用了,謝謝</translation>
 <translation id="747956641630879526">隱藏此資訊卡後,系統將關閉包裹追蹤功能,並移除你的所有資料</translation>
 <translation id="7484645889979462775">永不儲存這個網站的密碼</translation>
 <translation id="7486006552035434095">讓你的裝置保持同步</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
index cb4d2fa..ac2b90ee 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">「選單」→「設定」→「預設瀏覽器」</translation>
 <translation id="2818821771744632548">你已在重設 iPhone 時登出帳戶 (<ph name="USER_NAME" />),如要重新登入,請輕觸下方的「繼續」。</translation>
 <translation id="2819667972867209401">開啟時,資料會儲存到 Google 帳戶;關閉後,資料只會儲存到這部裝置,並在你登出後刪除。</translation>
+<translation id="2827760117436553203">要區分資料嗎?</translation>
 <translation id="2829172210806130158">搜尋畫面</translation>
 <translation id="2834399722155632105">3. 輕觸「密碼選項」</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />,<ph name="STATE" />,<ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">將網頁翻譯成<ph name="LANGUAGE" />。翻譯選項位於靠近畫面底部的位置。</translation>
 <translation id="647867789226964031">變更密碼</translation>
 <translation id="6494931198667773526">結束時間</translation>
+<translation id="6495521251906266731">請選擇如何處理這部裝置上的現有瀏覽資料,例如密碼、歷史記錄等等。</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{取消追蹤這個包裹}other{取消追蹤所有包裹}}</translation>
 <translation id="6503077044568424649">最常造訪</translation>
 <translation id="6503763061813913607">安全檢查通知</translation>
@@ -1236,7 +1238,7 @@
 <translation id="6579867704846662339">你可以選擇以無痕模式開啟其他應用程式傳入的網址。</translation>
 <translation id="6583087784430677195">如要關閉,請開啟「<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />」並前往「自動填入密碼」部分。</translation>
 <translation id="6585048665672348661">刪除瀏覽資料…</translation>
-<translation id="6585618849026997638">你可以將重要網頁加入書籤,以便再次造訪</translation>
+<translation id="6585618849026997638">你可以將重要網頁加入書籤,方便日後查看</translation>
 <translation id="6596481460663245319">使用 Google 搜尋圖片</translation>
 <translation id="6598432073497341323">{COUNT,plural, =1{1 組密碼}other{# 組密碼}}</translation>
 <translation id="6601302169302852717">圖片已儲存至 <ph name="USER_EMAIL" /> 的 Google 相簿</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">隨時掌握所有追蹤產品的降價資訊。</translation>
 <translation id="746872191028309255">透過相機或相片庫購買所見內容。</translation>
 <translation id="7471557245617580330">新增分頁</translation>
+<translation id="7473891865547856676">不用了,謝謝</translation>
 <translation id="747956641630879526">如果隱藏這張資訊卡,系統會關閉包裹追蹤功能,並移除你的所有資料</translation>
 <translation id="7484645889979462775">一律不儲存這個網站的密碼</translation>
 <translation id="7486006552035434095">讓你的裝置保持同步</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
index 327a5f0..05dd0e4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -417,6 +417,7 @@
 <translation id="2816489851009559785">Imenyu → Amasethingi → Ibhrawuza Evuleka ngokuzenzekela</translation>
 <translation id="2818821771744632548">Ukhishwe ngemvume ku-akhawunti, yakho ye-<ph name="USER_NAME" />, njengengxenye yokusetha kabusha i-iPhone yakho. Ukuze uphinde ungenge ngemvume, thepha okuthi "Qhubeka" ngezansi.</translation>
 <translation id="2819667972867209401">Uma ivuliwe, idatha ilondolozwa ku-Akhawunti yakho ye-Google. Uma ivaliwe, idatha ilondolozwa kuphela kule divayisi futhi iyasulwa uma uphuma ngemvume.</translation>
+<translation id="2827760117436553203">Gcina idatha yehlukene?</translation>
 <translation id="2829172210806130158">Sesha isikrini sakho</translation>
 <translation id="2834399722155632105">3. Thepha Ongakukhetha Kwephasiwedi</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
@@ -1213,6 +1214,7 @@
 <translation id="6476800141292307438">Ukuhumushela ikhasi kusi-<ph name="LANGUAGE" />. Izinketho ziyatholakala eduzane naphansi kwesikrini.</translation>
 <translation id="647867789226964031">Shintsha amaphasiwedi akho</translation>
 <translation id="6494931198667773526">Iphela</translation>
+<translation id="6495521251906266731">Khetha ukuthi yini ongayenza ngedatha yokubhrawuza ekhona kule divayisi, njengamaphasiwedi, umlando nokuningi.</translation>
 <translation id="6502142762807385617">{COUNT,plural, =1{Yeka ukulandelela le phakheji}one{Yeka ukulandelela wonke amaphakheji}other{Yeka ukulandelela wonke amaphakheji}}</translation>
 <translation id="6503077044568424649">Okuvakashelwe kakhulu</translation>
 <translation id="6503763061813913607">Izaziso Zokuhlolwa Kokuphepha</translation>
@@ -1427,6 +1429,7 @@
 <translation id="7468373585447318060">Landelela ukwehla kwentengo kuyo yonke imikhiqizo oyilandelayo.</translation>
 <translation id="746872191028309255">Thenga okubonayo ngekhamera yakho noma igalari yesithombe.</translation>
 <translation id="7471557245617580330">Dala ithebhu entsha</translation>
+<translation id="7473891865547856676">Cha ngiyabonga</translation>
 <translation id="747956641630879526">Ukufihla leli khadi kuzovala Ukulandela Iphakheji kuphinde kususe yonke idatha yakho</translation>
 <translation id="7484645889979462775">Ungalokothi kuleli sayithi</translation>
 <translation id="7486006552035434095">Gcina amadivayisi akho ekuvumelaniseni</translation>
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn b/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
index fedeb85..584d19e 100644
--- a/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
+++ b/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
@@ -15,6 +15,7 @@
     "//components/optimization_guide/proto:optimization_guide_proto",
     "//ios/chrome/app/strings:ios_strings_grit",
     "//ios/chrome/browser/ai_prototyping/ui",
+    "//ios/chrome/browser/ai_prototyping/utils",
     "//ios/chrome/browser/intelligence/proto_wrappers",
     "//ios/chrome/browser/optimization_guide/model",
     "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm b/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
index 4957af04..2bc9f0f4 100644
--- a/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
+++ b/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
@@ -11,6 +11,7 @@
 #import "base/values.h"
 #import "components/optimization_guide/optimization_guide_buildflags.h"
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h"
+#import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h"
 #import "ios/chrome/browser/intelligence/proto_wrappers/tab_organization_request_wrapper.h"
 #import "ios/chrome/browser/shared/model/profile/profile_ios.h"
 #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
@@ -73,7 +74,8 @@
 
 - (void)executeOnDeviceQuery:(optimization_guide::proto::StringValue)request {
   if (!_on_device_session) {
-    [self.consumer updateQueryResult:@"Session is not ready for querying yet."];
+    [self.consumer updateQueryResult:@"Session is not ready for querying yet."
+                          forFeature:AIPrototypingFeature::kFreeform];
     [self startOnDeviceSession];
     return;
   }
@@ -131,7 +133,8 @@
                            static_cast<int>(result.response.error().error()));
   }
 
-  [self.consumer updateQueryResult:base::SysUTF8ToNSString(response)];
+  [self.consumer updateQueryResult:base::SysUTF8ToNSString(response)
+                        forFeature:AIPrototypingFeature::kFreeform];
 }
 
 // Handles the response from an on-device query execution.
@@ -156,7 +159,8 @@
                            static_cast<int>(result.response.error().error()));
   }
 
-  [self.consumer updateQueryResult:base::SysUTF8ToNSString(response)];
+  [self.consumer updateQueryResult:base::SysUTF8ToNSString(response)
+                        forFeature:AIPrototypingFeature::kFreeform];
 }
 
 // Handles the populated tab organization request by passing it to the model
@@ -221,7 +225,8 @@
     }
   }
 
-  [self.consumer updateQueryResult:base::SysUTF8ToNSString(response)];
+  [self.consumer updateQueryResult:base::SysUTF8ToNSString(response)
+                        forFeature:AIPrototypingFeature::kTabOrganization];
 }
 
 // Attempts to create an on-device session. If the feature's configuration
diff --git a/ios/chrome/browser/ai_prototyping/ui/BUILD.gn b/ios/chrome/browser/ai_prototyping/ui/BUILD.gn
index e1a90bd..cd1f158 100644
--- a/ios/chrome/browser/ai_prototyping/ui/BUILD.gn
+++ b/ios/chrome/browser/ai_prototyping/ui/BUILD.gn
@@ -8,6 +8,8 @@
     "ai_prototyping_freeform_view_controller.h",
     "ai_prototyping_freeform_view_controller.mm",
     "ai_prototyping_mutator.h",
+    "ai_prototyping_tab_organization_view_controller.h",
+    "ai_prototyping_tab_organization_view_controller.mm",
     "ai_prototyping_view_controller.h",
     "ai_prototyping_view_controller.mm",
     "ai_prototyping_view_controller_protocol.h",
@@ -18,6 +20,7 @@
     "//components/optimization_guide:optimization_guide_buildflags",
     "//components/optimization_guide/proto:optimization_guide_proto",
     "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/browser/ai_prototyping/utils",
     "//ios/chrome/browser/shared/model/profile",
     "//ios/chrome/common/ui/colors",
     "//ios/web/public",
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h
index 4121b25..cfaccdd 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h
@@ -5,11 +5,14 @@
 #ifndef IOS_CHROME_BROWSER_AI_PROTOTYPING_UI_AI_PROTOTYPING_CONSUMER_H_
 #define IOS_CHROME_BROWSER_AI_PROTOTYPING_UI_AI_PROTOTYPING_CONSUMER_H_
 
+enum class AIPrototypingFeature : NSInteger;
+
 // Consumer protocol for the mediator to interact with the view controller.
 @protocol AIPrototypingConsumer
 
 // Updates the result of a query that was previously executed on a model.
-- (void)updateQueryResult:(NSString*)result;
+- (void)updateQueryResult:(NSString*)result
+               forFeature:(AIPrototypingFeature)feature;
 
 @end
 
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.h
index 2dcdb390..5785086 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.h
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.h
@@ -7,15 +7,16 @@
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h"
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h"
 
 // Menu page representing the "Freeform" feature, allowing for flexible access
 // to model querying for prototyping. This maps to the "Bling Prototyping"
 // feature in MES.
 @interface AIPrototypingFreeformViewController
-    : UIViewController <AIPrototypingConsumer,
-                        AIPrototypingViewControllerProtocol>
+    : UIViewController <AIPrototypingViewControllerProtocol>
+
+// Use `initWithFeature` from AIPrototypingViewControllerProtocol instead.
+- (instancetype)init NS_UNAVAILABLE;
 
 @end
 
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.mm
index 10e89fd..814dac1 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.mm
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.mm
@@ -9,6 +9,7 @@
 #import "base/strings/sys_string_conversions.h"
 #import "components/optimization_guide/optimization_guide_buildflags.h"
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h"
+#import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h"
 #import "ios/chrome/browser/shared/model/profile/profile_ios.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/grit/ios_strings.h"
@@ -16,21 +17,14 @@
 
 #if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
 #import "components/optimization_guide/proto/features/bling_prototyping.pb.h"
-#import "components/optimization_guide/proto/features/tab_organization.pb.h"
 #import "components/optimization_guide/proto/string_value.pb.h"
 #endif
 
 namespace {
 
 // Properties of UI elements in the debug menu.
-constexpr CGFloat kBorderWidth = 2;
-constexpr CGFloat kButtonStackViewSpacing = 10;
-constexpr CGFloat kCornerRadius = 8;
-constexpr CGFloat kHorizontalInset = 12;
-constexpr CGFloat kMainStackTopInset = 20;
-constexpr CGFloat kMainStackViewSpacing = 20;
-constexpr CGFloat kResponseContainerHeightMultiplier = 0.3;
 constexpr CGFloat kVerticalInset = 12;
+constexpr CGFloat kButtonStackViewSpacing = 10;
 
 }  // namespace
 
@@ -38,22 +32,25 @@
 
 @property(nonatomic, strong) UIButton* serverSideSubmitButton;
 @property(nonatomic, strong) UIButton* onDeviceSubmitButton;
-@property(nonatomic, strong) UIButton* groupTabsButton;
 @property(nonatomic, strong) UITextField* queryField;
 @property(nonatomic, strong) UITextField* nameField;
-@property(nonatomic, strong) UIButton* groupingStrategyMenu;
 @property(nonatomic, strong) UITextView* responseContainer;
 
-// The currently selected strategy for tab grouping.
-@property(nonatomic, assign) optimization_guide::proto::
-    TabOrganizationRequest_TabOrganizationModelStrategy groupingStrategy;
-
 @end
 
 @implementation AIPrototypingFreeformViewController
 
 // Synthesized from `AIPrototypingViewControllerProtocol`.
 @synthesize mutator = _mutator;
+@synthesize feature = _feature;
+
+- (instancetype)initForFeature:(AIPrototypingFeature)feature {
+  self = [super init];
+  if (self) {
+    _feature = feature;
+  }
+  return self;
+}
 
 - (void)viewDidLoad {
   [super viewDidLoad];
@@ -65,6 +62,7 @@
 
   UILabel* label = [[UILabel alloc] init];
   label.translatesAutoresizingMaskIntoConstraints = NO;
+  label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleTitle2];
   label.text = l10n_util::GetNSString(IDS_IOS_AI_PROTOTYPING_HEADER);
 
   UIColor* primaryColor = [UIColor colorNamed:kTextPrimaryColor];
@@ -83,23 +81,9 @@
   UIView* nameFieldContainer = [self textFieldContainer];
   [nameFieldContainer addSubview:_nameField];
 
-#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
-  _groupingStrategy = optimization_guide::proto::
-      TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED;
-#endif
-  _groupingStrategyMenu = [UIButton buttonWithType:UIButtonTypeSystem];
-  _groupingStrategyMenu.layer.borderColor = [primaryColor CGColor];
-  _groupingStrategyMenu.layer.borderWidth = kBorderWidth;
-  [_groupingStrategyMenu setTitle:@"Grouping strategy"
-                         forState:UIControlStateNormal];
-  [_groupingStrategyMenu setTitleColor:primaryColor
-                              forState:UIControlStateNormal];
-  _groupingStrategyMenu.showsMenuAsPrimaryAction = YES;
-  _groupingStrategyMenu.menu = [self createTabGroupingStrategyMenu];
-
   _serverSideSubmitButton = [UIButton buttonWithType:UIButtonTypeSystem];
-  _serverSideSubmitButton.layer.borderColor = [primaryColor CGColor];
-  _serverSideSubmitButton.layer.borderWidth = kBorderWidth;
+  _serverSideSubmitButton.backgroundColor = [UIColor colorNamed:kBlueColor];
+  _serverSideSubmitButton.layer.cornerRadius = kCornerRadius;
   [_serverSideSubmitButton
       setTitle:l10n_util::GetNSString(IDS_IOS_AI_PROTOTYPING_SERVER_SIDE_SUBMIT)
       forState:UIControlStateNormal];
@@ -110,8 +94,8 @@
                     forControlEvents:UIControlEventTouchUpInside];
 
   _onDeviceSubmitButton = [UIButton buttonWithType:UIButtonTypeSystem];
-  _onDeviceSubmitButton.layer.borderColor = [primaryColor CGColor];
-  _onDeviceSubmitButton.layer.borderWidth = kBorderWidth;
+  _onDeviceSubmitButton.backgroundColor = [UIColor colorNamed:kBlueColor];
+  _onDeviceSubmitButton.layer.cornerRadius = kCornerRadius;
   [_onDeviceSubmitButton
       setTitle:l10n_util::GetNSString(IDS_IOS_AI_PROTOTYPING_ON_DEVICE_SUBMIT)
       forState:UIControlStateNormal];
@@ -121,20 +105,10 @@
                             action:@selector(onDeviceSubmitButtonPressed:)
                   forControlEvents:UIControlEventTouchUpInside];
 
-  _groupTabsButton = [UIButton buttonWithType:UIButtonTypeSystem];
-  _groupTabsButton.layer.borderColor = [primaryColor CGColor];
-  _groupTabsButton.layer.borderWidth = kBorderWidth;
-  [_groupTabsButton setTitle:@"Group tabs" forState:UIControlStateNormal];
-  [_groupTabsButton setTitleColor:primaryColor forState:UIControlStateNormal];
-  [_groupTabsButton addTarget:self
-                       action:@selector(onGroupTabsButtonPressed:)
-             forControlEvents:UIControlEventTouchUpInside];
-
   UIStackView* buttonStackView =
       [[UIStackView alloc] initWithArrangedSubviews:@[
         _serverSideSubmitButton,
         _onDeviceSubmitButton,
-        _groupTabsButton,
       ]];
   buttonStackView.translatesAutoresizingMaskIntoConstraints = NO;
   buttonStackView.axis = UILayoutConstraintAxisHorizontal;
@@ -151,8 +125,8 @@
   _responseContainer.textContainer.lineBreakMode = NSLineBreakByWordWrapping;
 
   UIStackView* stackView = [[UIStackView alloc] initWithArrangedSubviews:@[
-    label, queryFieldContainer, nameFieldContainer, _groupingStrategyMenu,
-    _responseContainer, buttonStackView
+    label, queryFieldContainer, nameFieldContainer, buttonStackView,
+    _responseContainer
   ]];
   stackView.translatesAutoresizingMaskIntoConstraints = NO;
   stackView.axis = UILayoutConstraintAxisVertical;
@@ -213,16 +187,10 @@
 #endif
 }
 
-- (void)onGroupTabsButtonPressed:(UIButton*)button {
-#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
-  [self.mutator executeGroupTabsWithStrategy:self.groupingStrategy];
-#endif
-}
+#pragma mark - AIPrototypingViewControllerProtocol
 
-#pragma mark - AIPrototypingConsumer
-
-- (void)updateQueryResult:(NSString*)result {
-  _responseContainer.text = result;
+- (void)updateResponseField:(NSString*)response {
+  _responseContainer.text = response;
 }
 
 #pragma mark - Private
@@ -239,64 +207,4 @@
   return container;
 }
 
-// Creates menu for tab grouping strategy.
-- (UIMenu*)createTabGroupingStrategyMenu {
-  NSMutableArray<UIAction*>* strategies = [NSMutableArray array];
-
-#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
-  UIAction* topicBasedStrategy = [UIAction
-      actionWithTitle:@"Topic based"
-                image:nil
-           identifier:nil
-              handler:^(UIAction* action) {
-                self.groupingStrategy = optimization_guide::proto::
-                    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED;
-                self.groupingStrategyMenu.menu =
-                    [self createTabGroupingStrategyMenu];
-              }];
-  [strategies addObject:topicBasedStrategy];
-  UIAction* taskBasedStrategy = [UIAction
-      actionWithTitle:@"Task based"
-                image:nil
-           identifier:nil
-              handler:^(UIAction* action) {
-                self.groupingStrategy = optimization_guide::proto::
-                    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED;
-                self.groupingStrategyMenu.menu =
-                    [self createTabGroupingStrategyMenu];
-              }];
-  [strategies addObject:taskBasedStrategy];
-  UIAction* domainBasedStrategy = [UIAction
-      actionWithTitle:@"Domain based"
-                image:nil
-           identifier:nil
-              handler:^(UIAction* action) {
-                self.groupingStrategy = optimization_guide::proto::
-                    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED;
-                self.groupingStrategyMenu.menu =
-                    [self createTabGroupingStrategyMenu];
-              }];
-  [strategies addObject:domainBasedStrategy];
-
-  switch (self.groupingStrategy) {
-    case optimization_guide::proto::
-        TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED:
-      topicBasedStrategy.state = UIMenuElementStateOn;
-      break;
-    case optimization_guide::proto::
-        TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED:
-      taskBasedStrategy.state = UIMenuElementStateOn;
-      break;
-    case optimization_guide::proto::
-        TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED:
-      domainBasedStrategy.state = UIMenuElementStateOn;
-      break;
-    default:
-      break;
-  }
-#endif
-
-  return [UIMenu menuWithTitle:@"Tab grouping strategy" children:strategies];
-}
-
 @end
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.h
new file mode 100644
index 0000000..589be46
--- /dev/null
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.h
@@ -0,0 +1,21 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_AI_PROTOTYPING_UI_AI_PROTOTYPING_TAB_ORGANIZATION_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_AI_PROTOTYPING_UI_AI_PROTOTYPING_TAB_ORGANIZATION_VIEW_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h"
+
+// Menu page representing the "Tab Organization" feature.
+@interface AIPrototypingTabOrganizationViewController
+    : UIViewController <AIPrototypingViewControllerProtocol>
+
+// Use `initWithFeature` from AIPrototypingViewControllerProtocol instead.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_AI_PROTOTYPING_UI_AI_PROTOTYPING_TAB_ORGANIZATION_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm
new file mode 100644
index 0000000..c8d0e00
--- /dev/null
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm
@@ -0,0 +1,252 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.h"
+
+#import "base/logging.h"
+#import "base/memory/raw_ptr.h"
+#import "base/notreached.h"
+#import "base/strings/sys_string_conversions.h"
+#import "components/optimization_guide/optimization_guide_buildflags.h"
+#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h"
+#import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h"
+#import "ios/chrome/browser/shared/model/profile/profile_ios.h"
+#import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/grit/ios_strings.h"
+#import "ui/base/l10n/l10n_util.h"
+
+#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
+#import "components/optimization_guide/proto/features/tab_organization.pb.h"
+
+using optimization_guide::proto::
+    TabOrganizationRequest_TabOrganizationModelStrategy;
+using optimization_guide::proto::
+    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED;
+using optimization_guide::proto::
+    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED;
+using optimization_guide::proto::
+    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED;
+
+#endif
+
+@interface AIPrototypingTabOrganizationViewController () {
+  UIButton* _groupTabsButton;
+  UITextView* _responseContainer;
+}
+
+@property(nonatomic, strong) UIButton* groupingStrategyButton;
+
+#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
+// The currently selected strategy for tab grouping.
+@property(nonatomic, assign)
+    TabOrganizationRequest_TabOrganizationModelStrategy groupingStrategy;
+#endif
+
+@end
+
+@implementation AIPrototypingTabOrganizationViewController
+
+// Synthesized from `AIPrototypingViewControllerProtocol`.
+@synthesize mutator = _mutator;
+@synthesize feature = _feature;
+
+- (instancetype)initForFeature:(AIPrototypingFeature)feature {
+  self = [super init];
+  if (self) {
+    _feature = feature;
+  }
+  return self;
+}
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  self.sheetPresentationController.detents = @[
+    UISheetPresentationControllerDetent.mediumDetent,
+    UISheetPresentationControllerDetent.largeDetent,
+  ];
+
+  UILabel* label = [[UILabel alloc] init];
+  label.translatesAutoresizingMaskIntoConstraints = NO;
+  label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleTitle2];
+  label.text =
+      l10n_util::GetNSString(IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_HEADER);
+
+  UIColor* primaryColor = [UIColor colorNamed:kTextPrimaryColor];
+
+  _groupingStrategyButton = [UIButton buttonWithType:UIButtonTypeSystem];
+  _groupingStrategyButton.layer.borderColor = [primaryColor CGColor];
+  _groupingStrategyButton.layer.borderWidth = kBorderWidth;
+  [_groupingStrategyButton setTitleColor:primaryColor
+                                forState:UIControlStateNormal];
+  _groupingStrategyButton.showsMenuAsPrimaryAction = YES;
+
+#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
+  self.groupingStrategy =
+      TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED;
+#endif
+
+  _groupingStrategyButton.menu = [self createTabGroupingStrategyMenu];
+
+  _groupTabsButton = [UIButton buttonWithType:UIButtonTypeSystem];
+  _groupTabsButton.backgroundColor = [UIColor colorNamed:kBlueColor];
+  _groupTabsButton.layer.cornerRadius = kCornerRadius;
+  [_groupTabsButton
+      setTitle:l10n_util::GetNSString(
+                   IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUP_TABS_BUTTON)
+      forState:UIControlStateNormal];
+  [_groupTabsButton setTitleColor:primaryColor forState:UIControlStateNormal];
+  [_groupTabsButton addTarget:self
+                       action:@selector(onGroupTabsButtonPressed:)
+             forControlEvents:UIControlEventTouchUpInside];
+
+  _responseContainer = [UITextView textViewUsingTextLayoutManager:NO];
+  _responseContainer.translatesAutoresizingMaskIntoConstraints = NO;
+  _responseContainer.editable = NO;
+  _responseContainer.layer.cornerRadius = kCornerRadius;
+  _responseContainer.layer.masksToBounds = YES;
+  _responseContainer.layer.borderColor = [primaryColor CGColor];
+  _responseContainer.layer.borderWidth = kBorderWidth;
+  _responseContainer.textContainer.lineBreakMode = NSLineBreakByWordWrapping;
+
+  UIStackView* stackView = [[UIStackView alloc] initWithArrangedSubviews:@[
+    label, _groupingStrategyButton, _groupTabsButton, _responseContainer
+  ]];
+  stackView.translatesAutoresizingMaskIntoConstraints = NO;
+  stackView.axis = UILayoutConstraintAxisVertical;
+  stackView.spacing = kMainStackViewSpacing;
+  [self.view addSubview:stackView];
+
+  [NSLayoutConstraint activateConstraints:@[
+    [stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor
+                                        constant:kMainStackTopInset],
+    [stackView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor
+                                            constant:kHorizontalInset],
+    [stackView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor
+                                             constant:-kHorizontalInset],
+    [_responseContainer.heightAnchor
+        constraintGreaterThanOrEqualToAnchor:self.view.heightAnchor
+                                  multiplier:
+                                      kResponseContainerHeightMultiplier],
+  ]];
+}
+
+- (void)onGroupTabsButtonPressed:(UIButton*)button {
+#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
+  [self.mutator executeGroupTabsWithStrategy:self.groupingStrategy];
+#endif
+}
+
+#pragma mark - AIPrototypingViewControllerProtocol
+
+- (void)updateResponseField:(NSString*)response {
+  _responseContainer.text = response;
+}
+
+#pragma mark - Private
+
+// Creates menu for tab grouping strategy.
+- (UIMenu*)createTabGroupingStrategyMenu {
+  NSMutableArray<UIAction*>* strategies = [NSMutableArray array];
+
+#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
+  UIAction* topicBasedStrategy = [UIAction
+      actionWithTitle:
+          [self
+              titleForGroupingStrategy:
+                  TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED]
+                image:nil
+           identifier:nil
+              handler:^(UIAction* action) {
+                self.groupingStrategy =
+                    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED;
+                self.groupingStrategyButton.menu =
+                    [self createTabGroupingStrategyMenu];
+              }];
+  [strategies addObject:topicBasedStrategy];
+  UIAction* taskBasedStrategy = [UIAction
+      actionWithTitle:
+          [self
+              titleForGroupingStrategy:
+                  TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED]
+                image:nil
+           identifier:nil
+              handler:^(UIAction* action) {
+                self.groupingStrategy =
+                    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED;
+                self.groupingStrategyButton.menu =
+                    [self createTabGroupingStrategyMenu];
+              }];
+  [strategies addObject:taskBasedStrategy];
+  UIAction* domainBasedStrategy = [UIAction
+      actionWithTitle:
+          [self
+              titleForGroupingStrategy:
+                  TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED]
+                image:nil
+           identifier:nil
+              handler:^(UIAction* action) {
+                self.groupingStrategy =
+                    TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED;
+                self.groupingStrategyButton.menu =
+                    [self createTabGroupingStrategyMenu];
+              }];
+  [strategies addObject:domainBasedStrategy];
+
+  switch (self.groupingStrategy) {
+    case TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED:
+      topicBasedStrategy.state = UIMenuElementStateOn;
+      break;
+    case TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED:
+      taskBasedStrategy.state = UIMenuElementStateOn;
+      break;
+    case TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED:
+      domainBasedStrategy.state = UIMenuElementStateOn;
+      break;
+    default:
+      NOTREACHED();
+  }
+#endif
+
+  return [UIMenu
+      menuWithTitle:
+          l10n_util::GetNSString(
+              IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_LABEL)
+           children:strategies];
+}
+
+#if BUILDFLAG(BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE)
+- (void)setGroupingStrategy:
+    (TabOrganizationRequest_TabOrganizationModelStrategy)groupingStrategy {
+  _groupingStrategy = groupingStrategy;
+  [_groupingStrategyButton
+      setTitle:
+          [NSString
+              stringWithFormat:
+                  @"%@: %@",
+                  l10n_util::GetNSString(
+                      IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_LABEL),
+                  [self titleForGroupingStrategy:groupingStrategy]]
+      forState:UIControlStateNormal];
+}
+
+- (NSString*)titleForGroupingStrategy:
+    (TabOrganizationRequest_TabOrganizationModelStrategy)groupingStrategy {
+  switch (groupingStrategy) {
+    case TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TOPIC_BASED:
+      return l10n_util::GetNSString(
+          IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_TOPIC);
+    case TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_TASK_BASED:
+      return l10n_util::GetNSString(
+          IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_TASK);
+    case TabOrganizationRequest_TabOrganizationModelStrategy_STRATEGY_DOMAIN_BASED:
+      return l10n_util::GetNSString(
+          IDS_IOS_AI_PROTOTYPING_TAB_ORGANIZATION_GROUPING_STRATEGY_DOMAIN);
+    default:
+      NOTREACHED();
+  }
+}
+#endif
+
+@end
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.h
index 1b6c064d..22e5160 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.h
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.h
@@ -8,15 +8,18 @@
 #import <UIKit/UIKit.h>
 
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h"
-#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h"
+
+@protocol AIPrototypingMutator;
 
 // View controller that displays a debug UI menu for AI prototyping.
 // This wraps multiple pages, each representing an AI feature.
 // Functionality in this view are noop when compile flag
 // `BUILD_WITH_INTERNAL_OPTIMIZATION_GUIDE` is disabled.
 @interface AIPrototypingViewController
-    : UIViewController <AIPrototypingConsumer,
-                        AIPrototypingViewControllerProtocol>
+    : UIViewController <AIPrototypingConsumer>
+
+// The mutator for this view controller to communicate to the mediator.
+@property(nonatomic, weak) id<AIPrototypingMutator> mutator;
 
 @end
 
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
index 7066c0a..b19f003 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
@@ -6,55 +6,59 @@
 
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h"
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_freeform_view_controller.h"
-#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h"
-#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h"
+#import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.h"
+#import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/grit/ios_strings.h"
+#import "ui/base/l10n/l10n_util.h"
 
 @interface AIPrototypingViewController () <UIPageViewControllerDataSource,
-                                           UIPageViewControllerDelegate>
+                                           UIPageViewControllerDelegate> {
+  // The view controller for each page in the menu.
+  NSArray<UIViewController<AIPrototypingViewControllerProtocol>*>* _menuPages;
 
-// The controller allowing for navigation between the menu sheets.
-@property(nonatomic, strong) UIPageViewController* pageController;
-
-// The currently visible menu page.
-@property(nonatomic, weak)
-    id<AIPrototypingConsumer, AIPrototypingViewControllerProtocol>
-        currentPage;
+  // The controller allowing for navigation between the menu sheets.
+  UIPageViewController* _pageController;
+}
 
 @end
 
 @implementation AIPrototypingViewController
 
-// Synthesized from `AIPrototypingViewControllerProtocol`.
-@synthesize mutator = _mutator;
+- (instancetype)init {
+  self = [super init];
+  if (self) {
+    _menuPages =
+        [NSArray arrayWithObjects:
+                     [[AIPrototypingFreeformViewController alloc]
+                         initForFeature:AIPrototypingFeature::kFreeform],
+                     [[AIPrototypingTabOrganizationViewController alloc]
+                         initForFeature:AIPrototypingFeature::kTabOrganization],
+                     nil];
+  }
+  return self;
+}
 
 - (void)viewDidLoad {
   [super viewDidLoad];
 
   self.view.translatesAutoresizingMaskIntoConstraints = NO;
-  self.view.backgroundColor = [UIColor colorNamed:kPrimaryBackgroundColor];
+  self.view.backgroundColor = [UIColor colorNamed:kSecondaryBackgroundColor];
 
-  self.pageController = [[UIPageViewController alloc]
+  _pageController = [[UIPageViewController alloc]
       initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
         navigationOrientation:
             UIPageViewControllerNavigationOrientationHorizontal
                       options:nil];
-  self.pageController.dataSource = self;
-  self.pageController.delegate = self;
+  _pageController.dataSource = self;
+  _pageController.delegate = self;
 
-  [self addChildViewController:self.pageController];
-  [self.view addSubview:self.pageController.view];
-  [self.pageController didMoveToParentViewController:self];
+  [self addChildViewController:_pageController];
+  [self.view addSubview:_pageController.view];
+  [_pageController didMoveToParentViewController:self];
 
-  UIViewController<AIPrototypingConsumer, AIPrototypingViewControllerProtocol>*
-      freeformViewController =
-          [[AIPrototypingFreeformViewController alloc] init];
-  freeformViewController.mutator = self.mutator;
-  self.currentPage = freeformViewController;
-
-  NSArray* viewControllers = [NSArray arrayWithObject:freeformViewController];
-  [self.pageController
-      setViewControllers:viewControllers
+  [_pageController
+      setViewControllers:[NSArray arrayWithObject:[_menuPages firstObject]]
                direction:UIPageViewControllerNavigationDirectionForward
                 animated:NO
               completion:nil];
@@ -62,24 +66,60 @@
 
 #pragma mark - AIPrototypingConsumer
 
-- (void)updateQueryResult:(NSString*)result {
-  [self.currentPage updateQueryResult:result];
+- (void)updateQueryResult:(NSString*)result
+               forFeature:(AIPrototypingFeature)feature {
+  for (UIViewController<AIPrototypingViewControllerProtocol>* viewController in
+           _menuPages) {
+    if (viewController.feature == feature) {
+      [viewController updateResponseField:result];
+      break;
+    }
+  }
 }
 
 #pragma mark - UIPageViewControllerDataSource
 
-- (UIViewController*)pageViewController:
-                         (UIPageViewController*)pageViewController
-     viewControllerBeforeViewController:(UIViewController*)viewController {
-  // Implement this when we have multiple pages.
+- (UIViewController*)
+                    pageViewController:(UIPageViewController*)pageViewController
+    viewControllerBeforeViewController:
+        (UIViewController<AIPrototypingViewControllerProtocol>*)viewController {
+  NSUInteger currentIndex = [_menuPages indexOfObject:viewController];
+  if (currentIndex > 0) {
+    return [_menuPages objectAtIndex:(currentIndex - 1)];
+  }
   return nil;
 }
 
-- (UIViewController*)pageViewController:
-                         (UIPageViewController*)pageViewController
-      viewControllerAfterViewController:(UIViewController*)viewController {
-  // Implement this when we have multiple pages.
+- (UIViewController*)
+                   pageViewController:(UIPageViewController*)pageViewController
+    viewControllerAfterViewController:
+        (UIViewController<AIPrototypingViewControllerProtocol>*)viewController {
+  NSUInteger currentIndex = [_menuPages indexOfObject:viewController];
+  if (currentIndex < ([_menuPages count] - 1)) {
+    return [_menuPages objectAtIndex:(currentIndex + 1)];
+  }
   return nil;
 }
 
+- (NSInteger)presentationCountForPageViewController:
+    (UIPageViewController*)pageViewController {
+  return [_menuPages count];
+}
+
+- (NSInteger)presentationIndexForPageViewController:
+    (UIPageViewController*)pageViewController {
+  return 0;
+}
+
+#pragma mark - Setters
+
+- (void)setMutator:(id<AIPrototypingMutator>)mutator {
+  _mutator = mutator;
+  // Assign the mutator to each menu page.
+  for (UIViewController<AIPrototypingViewControllerProtocol>* viewController in
+           _menuPages) {
+    viewController.mutator = mutator;
+  }
+}
+
 @end
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h
index 97955fc..60eb1b71 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller_protocol.h
@@ -7,12 +7,23 @@
 
 @protocol AIPrototypingMutator;
 
+enum class AIPrototypingFeature : NSInteger;
+
 // The shared properties of each page in the menu.
 @protocol AIPrototypingViewControllerProtocol
 
+// The feature related to this page of the prototyping menu.
+@property(nonatomic, readonly) AIPrototypingFeature feature;
+
 // The mutator for this view controller to communicate to the mediator.
 @property(nonatomic, weak) id<AIPrototypingMutator> mutator;
 
+// Initializes the view controller for a given `feature`.
+- (instancetype)initForFeature:(AIPrototypingFeature)feature;
+
+// Updates the page's response field with `response`.
+- (void)updateResponseField:(NSString*)response;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_AI_PROTOTYPING_UI_AI_PROTOTYPING_VIEW_CONTROLLER_PROTOCOL_H_
diff --git a/ios/chrome/browser/ai_prototyping/utils/BUILD.gn b/ios/chrome/browser/ai_prototyping/utils/BUILD.gn
new file mode 100644
index 0000000..5aad5e0
--- /dev/null
+++ b/ios/chrome/browser/ai_prototyping/utils/BUILD.gn
@@ -0,0 +1,12 @@
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("utils") {
+  sources = [
+    "ai_prototyping_constants.h",
+    "ai_prototyping_constants.mm",
+  ]
+
+  deps = [ "//base" ]
+}
diff --git a/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h
new file mode 100644
index 0000000..66f64fc
--- /dev/null
+++ b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h
@@ -0,0 +1,27 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_AI_PROTOTYPING_UTILS_AI_PROTOTYPING_CONSTANTS_H_
+#define IOS_CHROME_BROWSER_AI_PROTOTYPING_UTILS_AI_PROTOTYPING_CONSTANTS_H_
+
+#import <Foundation/Foundation.h>
+
+// Constants for UI dimensions of menu pages.
+extern const CGFloat kBorderWidth;
+extern const CGFloat kCornerRadius;
+extern const CGFloat kHorizontalInset;
+extern const CGFloat kMainStackTopInset;
+extern const CGFloat kMainStackViewSpacing;
+extern const CGFloat kResponseContainerHeightMultiplier;
+
+// Enum representing the prototyping pages for different features.
+enum class AIPrototypingFeature : NSInteger {
+  // Represents the `kBlingPrototyping` feature used for flexible model
+  // querying.
+  kFreeform,
+  // Represents the tab organization/grouping feature.
+  kTabOrganization,
+};
+
+#endif  // IOS_CHROME_BROWSER_AI_PROTOTYPING_UTILS_AI_PROTOTYPING_CONSTANTS_H_
diff --git a/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.mm b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.mm
new file mode 100644
index 0000000..5e99d7b2
--- /dev/null
+++ b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.mm
@@ -0,0 +1,12 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h"
+
+const CGFloat kBorderWidth = 2;
+const CGFloat kCornerRadius = 8;
+const CGFloat kHorizontalInset = 12;
+const CGFloat kMainStackTopInset = 20;
+const CGFloat kMainStackViewSpacing = 20;
+const CGFloat kResponseContainerHeightMultiplier = 0.4;
diff --git a/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm b/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm
index c6d6957..efcfc03e 100644
--- a/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm
+++ b/ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.mm
@@ -212,8 +212,13 @@
 void AutofillBottomSheetTabHelper::AttachPasswordListeners(
     const std::vector<autofill::FieldRendererId>& renderer_ids,
     const std::string& frame_id) {
-  // Verify that the password bottom sheet hasn't been dismissed too many times.
-  if (HasReachedPasswordSuggestionDismissLimit()) {
+  bool silenced = HasReachedPasswordSuggestionDismissLimit();
+
+  base::UmaHistogramBoolean("IOS.PasswordBottomSheet.Activated",
+                            /*sample=*/!silenced);
+
+  if (silenced) {
+    // Do not allow displaying the sheet if silenced.
     return;
   }
 
diff --git a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator.mm b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator.mm
index bc7ee2f..43f609d 100644
--- a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator.mm
+++ b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator.mm
@@ -177,15 +177,7 @@
       [self.consumer showProgressWithUploadCompleted:YES];
 
       // Auto close modal after showing successful card save confirmation.
-      __weak __typeof(self) weakSelf = self;
-      _autoCloseConfirmationTimer.Start(
-          FROM_HERE,
-          UIAccessibilityIsVoiceOverRunning()
-              ? kConfirmationStateDurationIfVoiceOverRunning
-              : kConfirmationStateDuration,
-          base::BindOnce(^{
-            [weakSelf dimissConfirmationStateOnTimeout];
-          }));
+      [self closeModalAfterDelay];
     } else {
       // On card save failure, this modal is dimissed and user is shown an error
       // dialog triggered from IOSChromePaymentsAutofillClient.
@@ -222,16 +214,26 @@
       base::SysNSStringToUTF16(cardholderName), base::SysNSStringToUTF16(month),
       base::SysNSStringToUTF16(year)));
 
-  if (base::FeatureList::IsEnabled(
+  if (!base::FeatureList::IsEnabled(
           autofill::features::kAutofillEnableSaveCardLoadingAndConfirmation)) {
     autofill::autofill_metrics::LogCreditCardUploadLoadingViewShownMetric(
+        /*is_shown=*/false);
+    [self dismissOverlay];
+    return;
+  }
+
+  if (delegate->is_for_upload()) {
+    autofill::autofill_metrics::LogCreditCardUploadLoadingViewShownMetric(
         /*is_shown=*/true);
     _creditCardUploadCompleted = NO;
     [self.consumer showProgressWithUploadCompleted:NO];
   } else {
-    autofill::autofill_metrics::LogCreditCardUploadLoadingViewShownMetric(
-        /*is_shown=*/false);
-    [self dismissOverlay];
+    // Show progress as completed immediately when saving the card locally,
+    // then close the modal after a delay.
+    [self.consumer showProgressWithUploadCompleted:YES];
+    autofill::autofill_metrics::LogCreditCardUploadConfirmationViewShownMetric(
+        /*is_shown=*/true, /*is_card_uploaded=*/false);
+    [self closeModalAfterDelay];
   }
 }
 
@@ -296,4 +298,17 @@
   self.saveCardDelegate->OnConfirmationClosed();
 }
 
+- (void)closeModalAfterDelay {
+  // Auto close modal after showing successful card save confirmation.
+  __weak __typeof(self) weakSelf = self;
+  _autoCloseConfirmationTimer.Start(
+      FROM_HERE,
+      UIAccessibilityIsVoiceOverRunning()
+          ? kConfirmationStateDurationIfVoiceOverRunning
+          : kConfirmationStateDuration,
+      base::BindOnce(^{
+        [weakSelf dimissConfirmationStateOnTimeout];
+      }));
+}
+
 @end
diff --git a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
index 4b978da..23324a5 100644
--- a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
+++ b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
@@ -256,6 +256,34 @@
   EXPECT_FALSE(consumer.inLoadingState);
 }
 
+// Tests that calling -saveCardWithCardholderName goes straight to confirmation
+// without showing the loading spinner when the card is saved locally.
+TEST_F(SaveCardInfobarModalOverlayMediatorWithLocalSave,
+       OnSaveShowConfirmation) {
+  base::HistogramTester histogramTester;
+
+  FakeSaveCardModalConsumer* consumer =
+      [[FakeSaveCardModalConsumer alloc] init];
+  mediator_.consumer = consumer;
+  NSString* cardholderName = @"name";
+  NSString* month = @"3";
+  NSString* year = @"23";
+
+  EXPECT_CALL(*delegate_,
+              UpdateAndAccept(base::SysNSStringToUTF16(cardholderName),
+                              base::SysNSStringToUTF16(month),
+                              base::SysNSStringToUTF16(year)));
+  [mediator_ saveCardWithCardholderName:cardholderName
+                        expirationMonth:month
+                         expirationYear:year];
+
+  EXPECT_FALSE(consumer.inLoadingState);
+
+  histogramTester.ExpectUniqueSample(
+      "Autofill.CreditCardUpload.ConfirmationShown.CardNotUploaded",
+      /*sample=*/true, 1);
+}
+
 class SaveCardInfobarModalOverlayMediatorWithLoadingAndConfirmationTest
     : public SaveCardInfobarModalOverlayMediatorTest {
  public:
@@ -273,8 +301,8 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-// Tests that calling saveCardWithCardholderName shows loading state when
-// loading and confirmation flag is enabled.
+// Tests that calling saveCardWithCardholderName shows loading state when the
+// card is uploaded.
 TEST_F(SaveCardInfobarModalOverlayMediatorWithLoadingAndConfirmationTest,
        OnSaveShowLoading) {
   FakeSaveCardModalConsumer* consumer =
diff --git a/ios/chrome/browser/settings/ui_bundled/voice_search_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/voice_search_table_view_controller.mm
index e2cf1c1..4f15376 100644
--- a/ios/chrome/browser/settings/ui_bundled/voice_search_table_view_controller.mm
+++ b/ios/chrome/browser/settings/ui_bundled/voice_search_table_view_controller.mm
@@ -48,6 +48,10 @@
   std::unique_ptr<PrefObserverBridge> _prefObserverBridge;
   // Registrar for pref changes notifications.
   PrefChangeRegistrar _prefChangeRegistrar;
+
+  // Whether Settings have been dismissed and the relevant C++ objects have been
+  // cleaned up. See crbug.com/40838020
+  BOOL _settingsAreDismissed;
 }
 // Updates all cells to check the selected language and uncheck all the other.
 - (void)markAsCheckedLanguageAtIndex:(NSUInteger)index;
@@ -252,6 +256,18 @@
   [self markAsCheckedLanguageAtIndex:indexOfSelectedLanguage];
 }
 
+#pragma mark - SettingsControllerProtocol
+
+- (void)settingsWillBeDismissed {
+  DCHECK(!_settingsAreDismissed);
+  _prefObserverBridge.reset();
+  _selectedLanguage.Destroy();
+  _ttsEnabled.Destroy();
+  _prefChangeRegistrar.RemoveAll();
+  _prefs = nullptr;
+  _settingsAreDismissed = YES;
+}
+
 #pragma mark - Private methods
 
 - (void)markAsCheckedLanguageAtIndex:(NSUInteger)index {
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
index 75f9b0f5..35d8bfc 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
@@ -31,7 +31,7 @@
 <translation id="3739920431472254679">密碼已儲存至 Google 密碼管理員,你可以在任何裝置上使用。</translation>
 <translation id="3766986124385716423">使用者顯示名稱</translation>
 <translation id="3789385946721385622">使用者名稱</translation>
-<translation id="3830647155781949426">下次你使用 Chrome 時,系統會將你的密碼儲存在 <ph name="EMAIL" /> 的 Google 密碼管理員中。</translation>
+<translation id="3830647155781949426">下次你使用 Chrome 時,系統會將你的密碼儲存在 <ph name="EMAIL" /> 的 Google 密碼管理工具中。</translation>
 <translation id="4232817129213135694">設定這部裝置的密碼金鑰</translation>
 <translation id="4241076354893135477">沒有任何 Chrome 密碼</translation>
 <translation id="4253168017788158739">附註</translation>
diff --git a/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb b/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb
index fcd33de..050cc4e 100644
--- a/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb
+++ b/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb
@@ -4,7 +4,7 @@
 <translation id="1613742542373525524">APPLICATION_NAME cannot handle this link.</translation>
 <translation id="4655616150233109325">Open in Chrome</translation>
 <translation id="601731541915429022">Add to Reading List</translation>
-<translation id="6930009216791986919">Add to Bookmarks</translation>
+<translation id="6930009216791986919">Add to bookmarks</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="8258999165172757081">Added</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios_internal b/ios_internal
index 4512bf25..137695c 160000
--- a/ios_internal
+++ b/ios_internal
@@ -1 +1 @@
-Subproject commit 4512bf25caa2e1f5156b0fd40999c8fbe1e8fdeb
+Subproject commit 137695c44d2331a7395cd7d47cf83987e78bc3d6
diff --git a/media/base/media_player_logging_id.h b/media/base/media_player_logging_id.h
index 836e368d0..380188a 100644
--- a/media/base/media_player_logging_id.h
+++ b/media/base/media_player_logging_id.h
@@ -5,6 +5,8 @@
 #ifndef MEDIA_BASE_MEDIA_PLAYER_LOGGING_ID_H_
 #define MEDIA_BASE_MEDIA_PLAYER_LOGGING_ID_H_
 
+#include <stdint.h>
+
 #include "base/atomic_sequence_num.h"
 #include "media/base/media_export.h"
 
diff --git a/media/base/video_transformation.h b/media/base/video_transformation.h
index c1231bbc..15654761 100644
--- a/media/base/video_transformation.h
+++ b/media/base/video_transformation.h
@@ -5,6 +5,8 @@
 #ifndef MEDIA_BASE_VIDEO_TRANSFORMATION_H_
 #define MEDIA_BASE_VIDEO_TRANSFORMATION_H_
 
+#include <stdint.h>
+
 #include <string>
 
 #include "media/base/media_export.h"
diff --git a/media/gpu/av1_builder.cc b/media/gpu/av1_builder.cc
index f7545b8..d4582b77 100644
--- a/media/gpu/av1_builder.cc
+++ b/media/gpu/av1_builder.cc
@@ -9,6 +9,8 @@
 
 #include "media/gpu/av1_builder.h"
 
+#include <iterator>
+
 #include "base/check_op.h"
 
 namespace media {
diff --git a/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc b/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc
index ce055138..3877a9e 100644
--- a/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc
+++ b/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc
@@ -10,6 +10,7 @@
 #include "media/gpu/vaapi/av1_vaapi_video_encoder_delegate.h"
 
 #include <bit>
+#include <bitset>
 #include <utility>
 
 #include "base/bits.h"
diff --git a/media/renderers/video_frame_yuv_converter.cc b/media/renderers/video_frame_yuv_converter.cc
index 116a172..cfe0e8a 100644
--- a/media/renderers/video_frame_yuv_converter.cc
+++ b/media/renderers/video_frame_yuv_converter.cc
@@ -144,8 +144,7 @@
   SkPixmap pixmaps[SkYUVAInfo::kMaxPlanes] = {};
 
   for (int plane = 0; plane < si_format.NumberOfPlanes(); ++plane) {
-    SkColorType color_type =
-        viz::ToClosestSkColorType(/*gpu_compositing=*/true, si_format, plane);
+    SkColorType color_type = viz::ToClosestSkColorType(si_format, plane);
     gfx::Size plane_size =
         si_format.GetPlaneSize(plane, video_frame->coded_size());
     SkImageInfo info = SkImageInfo::Make(gfx::SizeToSkISize(plane_size),
diff --git a/media/renderers/video_resource_updater.cc b/media/renderers/video_resource_updater.cc
index 35648f24..9b8482653 100644
--- a/media/renderers/video_resource_updater.cc
+++ b/media/renderers/video_resource_updater.cc
@@ -1105,8 +1105,8 @@
 
   // Copy pixels into texture.
   auto* ri = RasterInterface();
-  auto color_type = viz::ToClosestSkColorType(
-      /*gpu_compositing=*/true, output_si_format, /*plane_index=*/0);
+  auto color_type =
+      viz::ToClosestSkColorType(output_si_format, /*plane_index=*/0);
   SkImageInfo info = SkImageInfo::Make(plane_size.width(), plane_size.height(),
                                        color_type, kPremul_SkAlphaType);
   SkPixmap pixmap = SkPixmap(info, source_pixels, bytes_per_row);
@@ -1232,8 +1232,7 @@
       pixels_stride_in_bytes = upload_image_stride;
     }
 
-    auto color_type = viz::ToClosestSkColorType(
-        /*gpu_compositing=*/true, yuv_si_format, plane_index);
+    auto color_type = viz::ToClosestSkColorType(yuv_si_format, plane_index);
     SkImageInfo info = SkImageInfo::Make(resource_size_pixels.width(),
                                          resource_size_pixels.height(),
                                          color_type, kPremul_SkAlphaType);
diff --git a/media/webrtc/audio_processor_test.cc b/media/webrtc/audio_processor_test.cc
index 44452d7..a4082d9 100644
--- a/media/webrtc/audio_processor_test.cc
+++ b/media/webrtc/audio_processor_test.cc
@@ -180,13 +180,6 @@
     EXPECT_TRUE(config.noise_suppression.enabled);
     EXPECT_EQ(config.noise_suppression.level,
               webrtc::AudioProcessing::Config::NoiseSuppression::kHigh);
-
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
-    // Android and iOS use echo cancellation optimized for mobiles.
-    EXPECT_TRUE(config.echo_canceller.mobile_mode);
-#else
-    EXPECT_FALSE(config.echo_canceller.mobile_mode);
-#endif
   }
 
   media::AudioParameters params_;
diff --git a/media/webrtc/helpers.cc b/media/webrtc/helpers.cc
index e6f8782..6099569 100644
--- a/media/webrtc/helpers.cc
+++ b/media/webrtc/helpers.cc
@@ -143,11 +143,6 @@
   apm_config.noise_suppression.level =
       webrtc::AudioProcessing::Config::NoiseSuppression::Level::kHigh;
   apm_config.echo_canceller.enabled = settings.echo_cancellation;
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
-  apm_config.echo_canceller.mobile_mode = true;
-#else
-  apm_config.echo_canceller.mobile_mode = false;
-#endif
   ConfigAutomaticGainControl(settings, apm_config);
   return webrtc::BuiltinAudioProcessingBuilder(apm_config)
       .Build(WebRtcEnvironment());
diff --git a/media/webrtc/helpers_unittests.cc b/media/webrtc/helpers_unittests.cc
index 91157117..ec8f595 100644
--- a/media/webrtc/helpers_unittests.cc
+++ b/media/webrtc/helpers_unittests.cc
@@ -56,12 +56,6 @@
   EXPECT_EQ(config.noise_suppression.level,
             webrtc::AudioProcessing::Config::NoiseSuppression::kHigh);
 
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
-  // Android and iOS use echo cancellation optimized for mobiles.
-  EXPECT_TRUE(config.echo_canceller.mobile_mode);
-#else
-  EXPECT_FALSE(config.echo_canceller.mobile_mode);
-#endif
 }
 
 TEST(CreateWebRtcAudioProcessingModuleTest,
@@ -164,11 +158,6 @@
         /*settings=*/{.echo_cancellation = echo_canceller_enabled});
 
     EXPECT_EQ(config.echo_canceller.enabled, echo_canceller_enabled);
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
-    EXPECT_TRUE(config.echo_canceller.mobile_mode);
-#else
-    EXPECT_FALSE(config.echo_canceller.mobile_mode);
-#endif
   }
 }
 
diff --git a/net/base/address_list_unittest.cc b/net/base/address_list_unittest.cc
index 9413b7d..aaba8bb 100644
--- a/net/base/address_list_unittest.cc
+++ b/net/base/address_list_unittest.cc
@@ -2,14 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/address_list.h"
 
 #include <algorithm>
+#include <array>
 
 #include "base/strings/string_util.h"
 #include "base/sys_byteorder.h"
@@ -58,8 +54,8 @@
 TEST(AddressListTest, CreateFromAddrinfo) {
   // Create an 4-element addrinfo.
   const unsigned kNumElements = 4;
-  SockaddrStorage storage[kNumElements];
-  struct addrinfo ai[kNumElements];
+  std::array<SockaddrStorage, kNumElements> storage;
+  std::array<addrinfo, kNumElements> ai;
   for (unsigned i = 0; i < kNumElements; ++i) {
     struct sockaddr_in* addr =
         reinterpret_cast<struct sockaddr_in*>(storage[i].addr);
diff --git a/net/base/address_tracker_linux_unittest.cc b/net/base/address_tracker_linux_unittest.cc
index a9df6fc..60babe7 100644
--- a/net/base/address_tracker_linux_unittest.cc
+++ b/net/base/address_tracker_linux_unittest.cc
@@ -8,6 +8,7 @@
 #include <linux/rtnetlink.h>
 #include <sched.h>
 
+#include <array>
 #include <memory>
 #include <unordered_set>
 #include <vector>
@@ -810,7 +811,7 @@
   for (const Child& child : children) {
     ASSERT_TRUE(child.process.IsValid());
 
-    uint8_t message[] = {0};
+    auto message = std::to_array<uint8_t>({0});
     ASSERT_TRUE(parent_reader.ReadAtCurrentPosAndCheck(message));
     ASSERT_EQ(message[0], kChildInitializedAndWaiting);
   }
@@ -854,7 +855,7 @@
     return 1;
 
   // Block until the parent says all children have initialized their trackers.
-  uint8_t message[] = {0};
+  auto message = std::to_array<uint8_t>({0});
   if (!reader.ReadAtCurrentPosAndCheck(message) || message[0] != kChildMayExit)
     return 1;
   return 0;
diff --git a/net/base/ip_address_unittest.cc b/net/base/ip_address_unittest.cc
index 5c3d279..fb7ebdcf 100644
--- a/net/base/ip_address_unittest.cc
+++ b/net/base/ip_address_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/ip_address.h"
 
+#include <array>
 #include <optional>
 #include <vector>
 
@@ -41,7 +37,7 @@
 }
 
 TEST(IPAddressBytesTest, ConstructIPv4) {
-  uint8_t data[] = {192, 168, 1, 1};
+  auto data = std::to_array<uint8_t>({192, 168, 1, 1});
   IPAddressBytes bytes(data);
   ASSERT_EQ(std::size(data), bytes.size());
   size_t i = 0;
@@ -51,7 +47,24 @@
 }
 
 TEST(IPAddressBytesTest, ConstructIPv6) {
-  uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+  auto data = std::to_array<uint8_t>({
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      8,
+      9,
+      10,
+      11,
+      12,
+      13,
+      14,
+      15,
+      16,
+  });
   IPAddressBytes bytes(data);
   ASSERT_EQ(std::size(data), bytes.size());
   size_t i = 0;
diff --git a/net/base/network_isolation_key_unittest.cc b/net/base/network_isolation_key_unittest.cc
index 8a2dc76..ff34e7f 100644
--- a/net/base/network_isolation_key_unittest.cc
+++ b/net/base/network_isolation_key_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/network_isolation_key.h"
 
+#include <array>
 #include <optional>
 
 #include "base/test/scoped_feature_list.h"
@@ -146,7 +142,7 @@
   if (nonce2 < nonce1)
     std::swap(nonce1, nonce2);
   // These are in ascending order.
-  const NetworkIsolationKey kKeys[] = {
+  const auto kKeys = std::to_array<NetworkIsolationKey>({
       NetworkIsolationKey(),
       // Site with unique origins are still sorted by scheme, so data is before
       // file, and file before http.
@@ -164,7 +160,7 @@
                           SchemefulSite(GURL("https://a.test/")), nonce1),
       NetworkIsolationKey(SchemefulSite(GURL("https://a.test/")),
                           SchemefulSite(GURL("https://a.test/")), nonce2),
-  };
+  });
 
   for (size_t first = 0; first < std::size(kKeys); ++first) {
     NetworkIsolationKey key1 = kKeys[first];
diff --git a/net/base/port_util_unittest.cc b/net/base/port_util_unittest.cc
index 8ab91a4..7a4036b 100644
--- a/net/base/port_util_unittest.cc
+++ b/net/base/port_util_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/port_util.h"
 
+#include <array>
 #include <string>
 
 #include "testing/gtest/include/gtest/gtest.h"
@@ -16,8 +12,13 @@
 namespace net {
 
 TEST(NetUtilTest, SetExplicitlyAllowedPortsTest) {
-  const std::vector<uint16_t> valid[] = {
-      {}, {1}, {1, 2}, {1, 2, 3}, {10, 11, 12, 13}};
+  const auto valid = std::to_array<std::vector<uint16_t>>({
+      {},
+      {1},
+      {1, 2},
+      {1, 2, 3},
+      {10, 11, 12, 13},
+  });
 
   for (size_t i = 0; i < std::size(valid); ++i) {
     SetExplicitlyAllowedPorts(valid[i]);
diff --git a/net/base/priority_queue_unittest.cc b/net/base/priority_queue_unittest.cc
index f5f9171..0622abf 100644
--- a/net/base/priority_queue_unittest.cc
+++ b/net/base/priority_queue_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "net/base/priority_queue.h"
 
+#include <array>
 #include <cstddef>
 
 #include "base/functional/bind.h"
@@ -34,26 +35,36 @@
 constexpr Priority kNumPriorities = 7;
 constexpr size_t kNumElements = 8;
 constexpr size_t kNumQueues = 3;
-constexpr Priority kPriorities[kNumQueues][kNumElements] = {
-    {3, 2, 1, 1, 5, 2, 5, 1},
-    {6, 2, 1, 0, 6, 2, 5, 0},
-    {3, 2, 2, 2, 3, 2, 3, 2}};
-constexpr int kFirstMinOrder[kNumQueues][kNumElements] = {
-    {2, 3, 7, 1, 5, 0, 4, 6},
-    {3, 7, 2, 1, 5, 6, 0, 4},
-    {1, 2, 3, 5, 7, 0, 4, 6}};
-constexpr int kLastMaxOrderErase[kNumQueues][kNumElements] = {
-    {6, 4, 0, 5, 1, 7, 3, 2},
-    {4, 0, 6, 5, 1, 2, 7, 3},
-    {6, 4, 0, 7, 5, 3, 2, 1}};
-constexpr int kFirstMaxOrder[kNumQueues][kNumElements] = {
-    {4, 6, 0, 1, 5, 2, 3, 7},
-    {0, 4, 6, 1, 5, 2, 3, 7},
-    {0, 4, 6, 1, 2, 3, 5, 7}};
-constexpr int kLastMinOrder[kNumQueues][kNumElements] = {
-    {7, 3, 2, 5, 1, 0, 6, 4},
-    {7, 3, 2, 5, 1, 6, 4, 0},
-    {7, 5, 3, 2, 1, 6, 4, 0}};
+constexpr std::array<std::array<Priority, kNumElements>, kNumQueues>
+    kPriorities = {{
+        {3, 2, 1, 1, 5, 2, 5, 1},
+        {6, 2, 1, 0, 6, 2, 5, 0},
+        {3, 2, 2, 2, 3, 2, 3, 2},
+    }};
+constexpr std::array<std::array<int, kNumElements>, kNumQueues> kFirstMinOrder =
+    {{
+        {2, 3, 7, 1, 5, 0, 4, 6},
+        {3, 7, 2, 1, 5, 6, 0, 4},
+        {1, 2, 3, 5, 7, 0, 4, 6},
+    }};
+constexpr std::array<std::array<int, kNumElements>, kNumQueues>
+    kLastMaxOrderErase = {{
+        {6, 4, 0, 5, 1, 7, 3, 2},
+        {4, 0, 6, 5, 1, 2, 7, 3},
+        {6, 4, 0, 7, 5, 3, 2, 1},
+    }};
+constexpr std::array<std::array<int, kNumElements>, kNumQueues> kFirstMaxOrder =
+    {{
+        {4, 6, 0, 1, 5, 2, 3, 7},
+        {0, 4, 6, 1, 5, 2, 3, 7},
+        {0, 4, 6, 1, 2, 3, 5, 7},
+    }};
+constexpr std::array<std::array<int, kNumElements>, kNumQueues> kLastMinOrder =
+    {{
+        {7, 3, 2, 5, 1, 0, 6, 4},
+        {7, 3, 2, 5, 1, 6, 4, 0},
+        {7, 5, 3, 2, 1, 6, 4, 0},
+    }};
 
 class PriorityQueueTest : public testing::TestWithParam<size_t> {
  public:
@@ -199,8 +210,12 @@
   queue_.Erase(pointers_[2]);
   queue_.Erase(pointers_[0]);
 
-  const int expected_order[kNumQueues][kNumElements - 2] = {
-      {3, 7, 1, 5, 4, 6}, {3, 7, 1, 5, 6, 4}, {1, 3, 5, 7, 4, 6}};
+  const std::array<std::array<int, kNumElements - 2>, kNumQueues>
+      expected_order = {{
+          {3, 7, 1, 5, 4, 6},
+          {3, 7, 1, 5, 6, 4},
+          {1, 3, 5, 7, 4, 6},
+      }};
 
   for (const auto& value : expected_order[GetParam()]) {
     EXPECT_EQ(value, queue_.FirstMin().value());
@@ -216,10 +231,12 @@
   queue_.InsertAtFront(11, 1);
   queue_.InsertAtFront(12, 1);
 
-  const int expected_order[kNumQueues][kNumElements + 5] = {
-      {10, 12, 11, 2, 3, 7, 9, 1, 5, 0, 4, 6, 8},
-      {10, 3, 7, 12, 11, 2, 9, 1, 5, 6, 8, 0, 4},
-      {10, 12, 11, 9, 1, 2, 3, 5, 7, 0, 4, 6, 8}};
+  const std::array<std::array<int, kNumElements + 5>, kNumQueues>
+      expected_order = {{
+          {10, 12, 11, 2, 3, 7, 9, 1, 5, 0, 4, 6, 8},
+          {10, 3, 7, 12, 11, 2, 9, 1, 5, 6, 8, 0, 4},
+          {10, 12, 11, 9, 1, 2, 3, 5, 7, 0, 4, 6, 8},
+      }};
 
   for (const auto& value : expected_order[GetParam()]) {
     EXPECT_EQ(value, queue_.FirstMin().value());
diff --git a/net/base/proxy_chain_unittest.cc b/net/base/proxy_chain_unittest.cc
index b66563f..371899e1 100644
--- a/net/base/proxy_chain_unittest.cc
+++ b/net/base/proxy_chain_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/proxy_chain.h"
 
+#include <array>
 #include <optional>
 #include <sstream>
 
@@ -103,14 +99,15 @@
 }
 
 TEST(ProxyChainTest, FromSchemeHostAndPort) {
-  const struct {
+  struct Tests {
     const ProxyServer::Scheme input_scheme;
     const char* const input_host;
     const std::optional<uint16_t> input_port;
     const char* const input_port_str;
     const char* const expected_host;
     const uint16_t expected_port;
-  } tests[] = {
+  };
+  const auto tests = std::to_array<Tests>({
       {ProxyServer::SCHEME_HTTP, "foopy", 80, "80", "foopy", 80},
 
       // Non-standard port
@@ -150,7 +147,7 @@
       {ProxyServer::SCHEME_HTTPS, "foopy", std::nullopt, "", "foopy", 443},
       {ProxyServer::SCHEME_SOCKS4, "foopy", std::nullopt, "", "foopy", 1080},
       {ProxyServer::SCHEME_SOCKS5, "foopy", std::nullopt, "", "foopy", 1080},
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::NumberToString(i) + ": " + tests[i].input_host + ":" +
@@ -173,7 +170,7 @@
 }
 
 TEST(ProxyChainTest, InvalidHostname) {
-  const char* const tests[]{
+  const auto tests = std::to_array<const char*>({
       "",
       "[]",
       "[foo]",
@@ -184,7 +181,7 @@
       "3ffe:2a00:100:7031::1]",
       "[3ffe:2a00:100:7031::1",
       "foo.80",
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::NumberToString(i) + ": " + tests[i]);
@@ -195,12 +192,12 @@
 }
 
 TEST(ProxyChainTest, InvalidPort) {
-  const char* const tests[]{
+  const auto tests = std::to_array<const char*>({
       "-1",
       "65536",
       "foo",
       "0x35",
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::NumberToString(i) + ": " + tests[i]);
diff --git a/net/base/proxy_server_unittest.cc b/net/base/proxy_server_unittest.cc
index d06cf65..f171094 100644
--- a/net/base/proxy_server_unittest.cc
+++ b/net/base/proxy_server_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/proxy_server.h"
 
+#include <array>
 #include <optional>
 
 #include "base/strings/string_number_conversions.h"
@@ -25,14 +21,15 @@
 }
 
 TEST(ProxyServerTest, FromSchemeHostAndPort) {
-  const struct {
+  struct Tests {
     const ProxyServer::Scheme input_scheme;
     const char* const input_host;
     const std::optional<uint16_t> input_port;
     const char* const input_port_str;
     const char* const expected_host;
     const uint16_t expected_port;
-  } tests[] = {
+  };
+  const auto tests = std::to_array<Tests>({
       {ProxyServer::SCHEME_HTTP, "foopy", 80, "80", "foopy", 80},
 
       // Non-standard port
@@ -75,7 +72,7 @@
       {ProxyServer::SCHEME_QUIC, "foopy", std::nullopt, "", "foopy", 443},
       {ProxyServer::SCHEME_SOCKS4, "foopy", std::nullopt, "", "foopy", 1080},
       {ProxyServer::SCHEME_SOCKS5, "foopy", std::nullopt, "", "foopy", 1080},
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::NumberToString(i) + ": " + tests[i].input_host + ":" +
@@ -96,7 +93,7 @@
 }
 
 TEST(ProxyServerTest, InvalidHostname) {
-  const char* const tests[]{
+  const auto tests = std::to_array<const char*>({
       "",
       "[]",
       "[foo]",
@@ -107,7 +104,7 @@
       "3ffe:2a00:100:7031::1]",
       "[3ffe:2a00:100:7031::1",
       "foo.80",
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::NumberToString(i) + ": " + tests[i]);
@@ -118,12 +115,12 @@
 }
 
 TEST(ProxyServerTest, InvalidPort) {
-  const char* const tests[]{
+  const auto tests = std::to_array<const char*>({
       "-1",
       "65536",
       "foo",
       "0x35",
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::NumberToString(i) + ": " + tests[i]);
diff --git a/net/base/schemeful_site_unittest.cc b/net/base/schemeful_site_unittest.cc
index 74c55e4..255a26b0 100644
--- a/net/base/schemeful_site_unittest.cc
+++ b/net/base/schemeful_site_unittest.cc
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/base/schemeful_site.h"
 
+#include <array>
+
 #include "base/test/metrics/histogram_tester.h"
 #include "net/base/url_util.h"
 #include "testing/gmock/include/gmock/gmock-matchers.h"
@@ -37,7 +34,7 @@
 TEST(SchemefulSiteTest, Operators) {
   // Create a list of origins that should all have different schemeful sites.
   // These are in ascending order.
-  url::Origin kTestOrigins[] = {
+  auto kTestOrigins = std::to_array<url::Origin>({
       url::Origin::Create(GURL("data:text/html,<body>Hello World</body>")),
       url::Origin::Create(GURL("file://foo")),
       url::Origin::Create(GURL("http://a.bar.test")),
@@ -47,7 +44,8 @@
       url::Origin::Create(GURL("https://a.bar.test")),
       url::Origin::Create(GURL("https://c.test")),
       url::Origin::Create(GURL("https://d.test")),
-      url::Origin::Create(GURL("https://a.foo.test"))};
+      url::Origin::Create(GURL("https://a.foo.test")),
+  });
 
   // Compare each origin to every other origin and ensure the operators work as
   // expected.
diff --git a/net/cert/ct_log_verifier_unittest.cc b/net/cert/ct_log_verifier_unittest.cc
index 03db75b6..c793b35 100644
--- a/net/cert/ct_log_verifier_unittest.cc
+++ b/net/cert/ct_log_verifier_unittest.cc
@@ -12,6 +12,7 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <array>
 #include <memory>
 #include <string>
 #include <vector>
@@ -59,7 +60,7 @@
 
 // SHA-256 Merkle leaf hashes for the sample tree that all of the other test
 // data relates to (8 leaves).
-const char* const kLeafHashes[8] = {
+const std::array<const char*, 8> kLeafHashes = {
     "6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d",
     "96a296d224f285c67bee93c30f8a309157f0daa35dc5b87e410b78630a09cfc7",
     "0298d122906dcfc10892cb53a73992fc5b9f493ea4c9badb27b791b4127a7fe7",
@@ -67,12 +68,13 @@
     "bc1a0643b12e4d2d7c77918f44e0f4f79a838b6cf9ec5b5c283e1f4d88599e6b",
     "4271a26be0d8a84f0bd54c8c302e7cb3a3b5d1fa6780a40bcce2873477dab658",
     "b08693ec2e721597130641e8211e7eedccb4c26413963eee6c1e2ed16ffb1a5f",
-    "46f6ffadd3d06a09ff3c5860d2755c8b9819db7df44251788c7d8e3180de8eb1"};
+    "46f6ffadd3d06a09ff3c5860d2755c8b9819db7df44251788c7d8e3180de8eb1",
+};
 
 // SHA-256 Merkle root hashes from building the sample tree leaf-by-leaf.
 // The first entry is the root when the tree contains 1 leaf, and the last is
 // the root when the tree contains all 8 leaves.
-const char* const kRootHashes[8] = {
+const std::array<const char*, 8> kRootHashes = {
     "6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d",
     "fac54203e7cc696cf0dfcb42c92a1d9dbaf70ad9e621f4bd8d98662f00e3c125",
     "aeb6bcfe274b70a14fb067a5e5578264db0fa9b51af5e0ba159158f329e06e77",
@@ -80,7 +82,8 @@
     "4e3bbb1f7b478dcfe71fb631631519a3bca12c9aefca1612bfce4c13a86264d4",
     "76e67dadbcdf1e10e1b74ddc608abd2f98dfb16fbce75277b5232a127f2087ef",
     "ddb89be403809e325750d3d263cd78929c2942b7942a34b77e122c9594a74c8c",
-    "5dc9da79a70659a9ad559cb701ded9a2ab9d823aad2f4960cfe370eff4604328"};
+    "5dc9da79a70659a9ad559cb701ded9a2ab9d823aad2f4960cfe370eff4604328",
+};
 
 // A single consistency proof. Contains at most 3 proof nodes (all test proofs
 // will be for a tree of size 8).
@@ -93,7 +96,7 @@
 
 // A collection of consistency proofs between various sub-trees of the sample
 // tree.
-const ConsistencyProofTestVector kConsistencyProofs[] = {
+const auto kConsistencyProofs = std::to_array<ConsistencyProofTestVector>({
     // Empty consistency proof between trees of the same size (1).
     {1, 1, 0, {"", "", ""}},
     // Consistency proof between tree of size 1 and tree of size 8, with 3
@@ -118,7 +121,8 @@
      5,
      2,
      {"5f083f0a1a33ca076a95279832580db3e0ef4584bdff1f54c8a360f50de3031e",
-      "bc1a0643b12e4d2d7c77918f44e0f4f79a838b6cf9ec5b5c283e1f4d88599e6b", ""}}};
+      "bc1a0643b12e4d2d7c77918f44e0f4f79a838b6cf9ec5b5c283e1f4d88599e6b", ""}},
+});
 
 // A single audit proof. Contains at most 3 proof nodes (all test proofs will be
 // for a tree of size 8).
@@ -131,7 +135,7 @@
 
 // A collection of audit proofs for various leaves and sub-trees of the tree
 // defined by |kRootHashes|.
-const AuditProofTestVector kAuditProofs[] = {
+const auto kAuditProofs = std::to_array<AuditProofTestVector>({
     {0, 1, 0, {"", "", ""}},
     {0,
      8,
@@ -155,7 +159,8 @@
      3,
      {"6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d",
       "5f083f0a1a33ca076a95279832580db3e0ef4584bdff1f54c8a360f50de3031e",
-      "bc1a0643b12e4d2d7c77918f44e0f4f79a838b6cf9ec5b5c283e1f4d88599e6b"}}};
+      "bc1a0643b12e4d2d7c77918f44e0f4f79a838b6cf9ec5b5c283e1f4d88599e6b"}},
+});
 
 // Decodes a hexadecimal string into the binary data it represents.
 std::string HexToBytes(const std::string& hex_data) {
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index ebf87504..7cc86085 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/cookies/cookie_monster.h"
 
 #include <stdint.h>
 
 #include <algorithm>
+#include <array>
 #include <memory>
 #include <optional>
 #include <string>
@@ -509,7 +505,7 @@
     this->DeleteAll(cm);
     int next_cookie_id = 0;
     // A list of cookie IDs, indexed by secure status, then by priority.
-    std::vector<int> id_list[2][3];
+    std::array<std::array<std::vector<int>, 3>, 2> id_list;
     // A list of all the cookies stored, along with their properties.
     std::vector<std::pair<bool, CookiePriority>> cookie_data;
 
@@ -548,7 +544,7 @@
 
     int num_cookies = static_cast<int>(cookie_data.size());
     // A list of cookie IDs, indexed by secure status, then by priority.
-    std::vector<int> surviving_id_list[2][3];
+    std::array<std::array<std::vector<int>, 3>, 2> surviving_id_list;
 
     // Parse the list of cookies
     std::string cookie_str = this->GetCookies(cm, https_www_foo_.url());
@@ -594,8 +590,11 @@
     EXPECT_EQ(expected_secure, num_secure);
 
     // Validate each priority.
-    size_t expected_count[3] = {expected_low_count, expected_medium_count,
-                                expected_high_count};
+    std::array<size_t, 3> expected_count = {
+        expected_low_count,
+        expected_medium_count,
+        expected_high_count,
+    };
     for (int i = 0; i < 3; ++i) {
       size_t num_for_priority =
           surviving_id_list[0][i].size() + surviving_id_list[1][i].size();
@@ -2898,7 +2897,7 @@
   auto store = base::MakeRefCounted<MockSimplePersistentCookieStore>();
   base::Time expires(base::Time::Now() + base::Seconds(100));
 
-  const CookiesInputInfo input_info[] = {
+  const auto input_info = std::to_array<CookiesInputInfo>({
       {GURL("https://a.b.foo.com"), "a", "1", "a.b.foo.com", "/path/to/cookie",
        expires, true /* secure */, false, CookieSameSite::NO_RESTRICTION,
        COOKIE_PRIORITY_DEFAULT},
@@ -2907,7 +2906,8 @@
        COOKIE_PRIORITY_DEFAULT},
       {GURL("https://foo.com"), "c", "3", "foo.com", "/another/path/to/cookie",
        base::Time::Now() + base::Seconds(100), false, false,
-       CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT}};
+       CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT},
+  });
   const int INPUT_DELETE = 1;
 
   // Create new cookies and flush them to the store.
@@ -5108,7 +5108,7 @@
   auto cm = std::make_unique<CookieMonster>(nullptr, net::NetLog::Get());
 
   // A path that is later in this list will path-match all the paths before it.
-  const char* kPaths[] = {"/", "/1", "/1/2", "/1/2/3"};
+  auto kPaths = std::to_array<const char*>({"/", "/1", "/1/2", "/1/2/3"});
   // This path does not match any, aside from the root path.
   const char* kOtherDirectory = "/9";
 
@@ -5395,7 +5395,7 @@
 }
 
 TEST_F(CookieMonsterTest, DeleteDuplicateCTime) {
-  const char* const kNames[] = {"A", "B", "C"};
+  const auto kNames = std::to_array<const char*>({"A", "B", "C"});
 
   // Tests that DeleteCanonicalCookie properly distinguishes different cookies
   // (e.g. different name or path) with identical ctime on same domain.
@@ -5570,7 +5570,8 @@
     CookieEffectiveSameSite expected_effective_samesite =
         CookieEffectiveSameSite::NO_RESTRICTION;
     base::TimeDelta creation_time_delta = base::TimeDelta();
-  } test_cases[] = {
+  };
+  auto test_cases = std::to_array<TestCase>({
       // Feature enabled:
       // Cookie set from a secure URL with SameSite enabled is not rejected.
       {true, "A=B; SameSite=Lax", CookieInclusionStatus(),
@@ -5604,14 +5605,13 @@
       {false,
        "A=B; Max-Age=1000000",  // not-recently-set persistent cookie.
        CookieInclusionStatus(), CookieEffectiveSameSite::LAX_MODE, kLongAge},
-  };
+  });
 
   auto cm = std::make_unique<CookieMonster>(nullptr, nullptr);
   GURL secure_url("https://www.example1.test");
   GURL insecure_url("http://www.example2.test");
 
-  int length = sizeof(test_cases) / sizeof(test_cases[0]);
-  for (int i = 0; i < length; ++i) {
+  for (size_t i = 0; i < test_cases.size(); ++i) {
     TestCase test = test_cases[i];
 
     GURL url = test.is_url_secure ? secure_url : insecure_url;
diff --git a/net/cookies/parsed_cookie_unittest.cc b/net/cookies/parsed_cookie_unittest.cc
index 9108969..4117485 100644
--- a/net/cookies/parsed_cookie_unittest.cc
+++ b/net/cookies/parsed_cookie_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/cookies/parsed_cookie.h"
 
+#include <array>
 #include <string>
 
 #include "base/strings/strcat.h"
@@ -131,11 +127,11 @@
 
   // Strings with trailing whitespace or the separator character should parse OK
   // but ValueMatchesParsedValue() should fail.
-  std::string valid_values_with_trailing_chars[] = {
+  auto valid_values_with_trailing_chars = std::to_array<std::string>({
       "lastRequest=1624663552846 ",   // Space at end
       "lastRequest=1624663552846\t",  // Tab at end
       "lastRequest=1624663552846;",   // Token separator at end
-  };
+  });
   const size_t valid_value_length =
       valid_values_with_trailing_chars[0].length() - 1;
   for (const auto& value : valid_values_with_trailing_chars) {
@@ -1074,7 +1070,7 @@
 
 TEST(ParsedCookieTest, InvalidNonAlphanumericChars) {
   // clang-format off
-  const char* cases[] = {
+  auto cases = std::to_array<const char *>({
       "name=\x05",
       "name=foo\x1c" "bar",
       "name=foobar\x11",
@@ -1090,7 +1086,7 @@
       "foo=ba,ba\x7F" "z=bo",
       "fo\x7F" "o=ba,z=bo",
       "foo=bar\x7F" ";z=bo",
-  };
+  });
   // clang-format on
 
   for (size_t i = 0; i < std::size(cases); i++) {
diff --git a/net/disk_cache/blockfile/block_files_unittest.cc b/net/disk_cache/blockfile/block_files_unittest.cc
index 592464c..cc28c1f 100644
--- a/net/disk_cache/blockfile/block_files_unittest.cc
+++ b/net/disk_cache/blockfile/block_files_unittest.cc
@@ -7,10 +7,13 @@
 #pragma allow_unsafe_buffers
 #endif
 
+#include "net/disk_cache/blockfile/block_files.h"
+
+#include <array>
+
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "build/chromeos_buildflags.h"
-#include "net/disk_cache/blockfile/block_files.h"
 #include "net/disk_cache/disk_cache.h"
 #include "net/disk_cache/disk_cache_test_base.h"
 #include "net/disk_cache/disk_cache_test_util.h"
@@ -56,7 +59,7 @@
   const int kMaxSize = 35000;
   const int kNumberOfFiles = 6;
 #endif
-  Addr address[kMaxSize];
+  std::array<Addr, kMaxSize> address;
 
   // Fill up the 32-byte block file (use three files).
   for (auto& addr : address) {
@@ -105,7 +108,7 @@
   ASSERT_TRUE(files.Init(true));
 
   const int kNumEntries = 2000;
-  CacheAddr entries[kNumEntries];
+  std::array<CacheAddr, kNumEntries> entries;
 
   int seed = static_cast<int>(Time::Now().ToInternalValue());
   srand(seed);
@@ -306,7 +309,7 @@
 
   // Create a bunch of entries.
   const int kSize = 100;
-  Addr address[kSize];
+  std::array<Addr, kSize> address;
   for (int i = 0; i < kSize; i++) {
     SCOPED_TRACE(i);
     int block_size = i % 4 + 1;
diff --git a/net/disk_cache/disk_cache_perftest.cc b/net/disk_cache/disk_cache_perftest.cc
index 5eb6974d..39d959c 100644
--- a/net/disk_cache/disk_cache_perftest.cc
+++ b/net/disk_cache/disk_cache_perftest.cc
@@ -7,6 +7,9 @@
 #pragma allow_unsafe_buffers
 #endif
 
+#include "net/disk_cache/disk_cache.h"
+
+#include <array>
 #include <limits>
 #include <memory>
 #include <string>
@@ -37,7 +40,6 @@
 #include "net/disk_cache/backend_cleanup_tracker.h"
 #include "net/disk_cache/blockfile/backend_impl.h"
 #include "net/disk_cache/blockfile/block_files.h"
-#include "net/disk_cache/disk_cache.h"
 #include "net/disk_cache/disk_cache_test_base.h"
 #include "net/disk_cache/disk_cache_test_util.h"
 #include "net/disk_cache/simple/simple_backend_impl.h"
@@ -547,7 +549,7 @@
   ASSERT_TRUE(files.Init(true));
 
   const int kNumBlocks = 60000;
-  disk_cache::Addr address[kNumBlocks];
+  std::array<disk_cache::Addr, kNumBlocks> address;
 
   auto reporter = SetUpDiskCacheReporter("blockfile_cache");
   base::ElapsedTimer sequential_timer;
@@ -598,7 +600,7 @@
   CacheTestFillBuffer(buffer1->span(), false);
   CacheTestFillBuffer(buffer2->span(), false);
 
-  disk_cache::Entry* cache_entry[kBatchSize];
+  std::array<disk_cache::Entry*, kBatchSize> cache_entry;
   for (int i = 0; i < kBatchSize; ++i) {
     TestEntryResultCompletionCallback cb_create;
     disk_cache::EntryResult result = cb_create.GetResult(cache_->CreateEntry(
diff --git a/net/dns/dns_config_service_linux_unittest.cc b/net/dns/dns_config_service_linux_unittest.cc
index 166b74b..526b887b 100644
--- a/net/dns/dns_config_service_linux_unittest.cc
+++ b/net/dns/dns_config_service_linux_unittest.cc
@@ -12,6 +12,7 @@
 #include <arpa/inet.h>
 #include <resolv.h>
 
+#include <array>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -47,19 +48,19 @@
 namespace {
 
 // MAXNS is normally 3, but let's test 4 if possible.
-const char* const kNameserversIPv4[] = {
+const auto kNameserversIPv4 = std::to_array<const char*>({
     "8.8.8.8",
     "192.168.1.1",
     "63.1.2.4",
     "1.0.0.1",
-};
+});
 
-const char* const kNameserversIPv6[] = {
+const auto kNameserversIPv6 = std::to_array<const char*>({
     nullptr,
     "2001:db8::42",
     nullptr,
     "::FFFF:129.144.52.38",
-};
+});
 
 const std::vector<NsswitchReader::ServiceSpecification> kBasicNsswitchConfig = {
     NsswitchReader::ServiceSpecification(NsswitchReader::Service::kFiles),
diff --git a/net/dns/public/resolv_reader_unittest.cc b/net/dns/public/resolv_reader_unittest.cc
index 6dabb83..474e52e 100644
--- a/net/dns/public/resolv_reader_unittest.cc
+++ b/net/dns/public/resolv_reader_unittest.cc
@@ -12,6 +12,7 @@
 #include <arpa/inet.h>
 #include <resolv.h>
 
+#include <array>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -35,20 +36,20 @@
 namespace {
 
 // MAXNS is normally 3, but let's test 4 if possible.
-const char* const kNameserversIPv4[] = {
+const auto kNameserversIPv4 = std::to_array<const char*>({
     "8.8.8.8",
     "192.168.1.1",
     "63.1.2.4",
     "1.0.0.1",
-};
+});
 
 #if BUILDFLAG(IS_LINUX)
-const char* const kNameserversIPv6[] = {
+const auto kNameserversIPv6 = std::to_array<const char*>({
     nullptr,
     "2001:db8::42",
     nullptr,
     "::FFFF:129.144.52.38",
-};
+});
 #endif
 
 // Fills in |res| with sane configuration.
diff --git a/net/http/http_auth_handler_basic_unittest.cc b/net/http/http_auth_handler_basic_unittest.cc
index 9e83f97..221edd7 100644
--- a/net/http/http_auth_handler_basic_unittest.cc
+++ b/net/http/http_auth_handler_basic_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "net/http/http_auth_handler_basic.h"
 
+#include <array>
 #include <memory>
 #include <string>
 #include <string_view>
@@ -67,39 +68,31 @@
 }
 
 TEST(HttpAuthHandlerBasicTest, HandleAnotherChallenge) {
-  static const struct {
+  struct Tests {
     const char* challenge;
     HttpAuth::AuthorizationResult expected_rv;
-  } tests[] = {
-    // The handler is initialized using this challenge.  The first
-    // time HandleAnotherChallenge is called with it should cause it
-    // to treat the second challenge as a rejection since it is for
-    // the same realm.
-    {
-      "Basic realm=\"First\"",
-      HttpAuth::AUTHORIZATION_RESULT_REJECT
-    },
-
-    // A challenge for a different realm.
-    {
-      "Basic realm=\"Second\"",
-      HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM
-    },
-
-    // Although RFC 2617 isn't explicit about this case, if there is
-    // more than one realm directive, we pick the last one.  So this
-    // challenge should be treated as being for "First" realm.
-    {
-      "Basic realm=\"Second\",realm=\"First\"",
-      HttpAuth::AUTHORIZATION_RESULT_REJECT
-    },
-
-    // And this one should be treated as if it was for "Second."
-    {
-      "basic realm=\"First\",realm=\"Second\"",
-      HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM
-    }
   };
+  static const auto tests = std::to_array<Tests>({
+      // The handler is initialized using this challenge.  The first
+      // time HandleAnotherChallenge is called with it should cause it
+      // to treat the second challenge as a rejection since it is for
+      // the same realm.
+      {"Basic realm=\"First\"", HttpAuth::AUTHORIZATION_RESULT_REJECT},
+
+      // A challenge for a different realm.
+      {"Basic realm=\"Second\"",
+       HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM},
+
+      // Although RFC 2617 isn't explicit about this case, if there is
+      // more than one realm directive, we pick the last one.  So this
+      // challenge should be treated as being for "First" realm.
+      {"Basic realm=\"Second\",realm=\"First\"",
+       HttpAuth::AUTHORIZATION_RESULT_REJECT},
+
+      // And this one should be treated as if it was for "Second."
+      {"basic realm=\"First\",realm=\"Second\"",
+       HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM},
+  });
 
   url::SchemeHostPort scheme_host_port(GURL("http://www.example.com"));
   HttpAuthHandlerBasic::Factory factory;
diff --git a/net/http/http_content_disposition_unittest.cc b/net/http/http_content_disposition_unittest.cc
index 106f7366..fb52d699 100644
--- a/net/http/http_content_disposition_unittest.cc
+++ b/net/http/http_content_disposition_unittest.cc
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/http/http_content_disposition.h"
 
+#include <array>
+
 #include "base/strings/utf_string_conversions.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -428,10 +425,11 @@
 }
 
 TEST(HttpContentDispositionTest, ParseResult) {
-  const struct ParseResultTestCase {
+  struct ParseResultTestCase {
     const char* header;
     int expected_flags;
-  } kTestCases[] = {
+  };
+  const auto kTestCases = std::to_array<ParseResultTestCase>({
       // Basic feature tests
       {"", HttpContentDisposition::INVALID},
       {"example=x", HttpContentDisposition::INVALID},
@@ -489,7 +487,7 @@
        HttpContentDisposition::INVALID},
       {"filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?; name=x",
        HttpContentDisposition::INVALID},
-  };
+  });
 
   for (size_t i = 0; i < std::size(kTestCases); ++i) {
     const ParseResultTestCase& test_case = kTestCases[i];
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index b1cee17..153f44a 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -14,6 +14,7 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <array>
 #include <limits>
 #include <memory>
 #include <optional>
@@ -2109,19 +2110,20 @@
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
   // Written data for successfully sending both requests.
-  MockWrite data1_writes[] = {MockWrite("GET / HTTP/1.1\r\n"
-                                        "Host: www.foo.com\r\n"
-                                        "Connection: keep-alive\r\n\r\n"),
-                              MockWrite("GET / HTTP/1.1\r\n"
-                                        "Host: www.foo.com\r\n"
-                                        "Connection: keep-alive\r\n\r\n")};
+  auto data1_writes =
+      std::to_array<MockWrite>({MockWrite("GET / HTTP/1.1\r\n"
+                                          "Host: www.foo.com\r\n"
+                                          "Connection: keep-alive\r\n\r\n"),
+                                MockWrite("GET / HTTP/1.1\r\n"
+                                          "Host: www.foo.com\r\n"
+                                          "Connection: keep-alive\r\n\r\n")});
 
   // Read results for the first request.
-  MockRead data1_reads[] = {
+  auto data1_reads = std::to_array<MockRead>({
       MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"),
       MockRead("hello"),
       MockRead(ASYNC, OK),
-  };
+  });
 
   if (write_failure) {
     ASSERT_FALSE(read_failure);
@@ -2142,7 +2144,8 @@
   StaticSocketDataProvider data2(data2_reads, base::span<MockWrite>());
   session_deps_.socket_factory->AddSocketDataProvider(&data2);
 
-  const char* const kExpectedResponseData[] = {"hello", "world"};
+  const auto kExpectedResponseData =
+      std::to_array<const char*>({"hello", "world"});
 
   uint32_t first_socket_log_id = NetLogSource::kInvalidId;
   for (int i = 0; i < 2; ++i) {
@@ -2750,7 +2753,7 @@
   session_deps_.socket_factory->AddSocketDataProvider(&data);
 
   const int kNumUnreadBodies = std::size(data_writes) - 1;
-  std::string response_lines[kNumUnreadBodies];
+  std::array<std::string, kNumUnreadBodies> response_lines;
 
   uint32_t first_socket_log_id = NetLogSource::kInvalidId;
   for (size_t i = 0; i < kNumUnreadBodies; ++i) {
@@ -2784,7 +2787,7 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  const char* const kStatusLines[] = {
+  const auto kStatusLines = std::to_array<const char*>({
       "HTTP/1.1 204 No Content",
       "HTTP/1.1 205 Reset Content",
       "HTTP/1.1 304 Not Modified",
@@ -2794,7 +2797,7 @@
       "HTTP/1.1 301 Moved Permanently",
       "HTTP/1.1 200 Hunky-Dory",
       "HTTP/1.1 200 Hunky-Dory",
-  };
+  });
 
   static_assert(kNumUnreadBodies == std::size(kStatusLines),
                 "forgot to update kStatusLines");
@@ -13186,7 +13189,7 @@
       base::byte_span_from_cstring("foo")));
   ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0);
 
-  HttpRequestInfo request[2];
+  std::array<HttpRequestInfo, 2> request;
   // Transaction 1: a GET request that succeeds.  The socket is recycled
   // after use.
   request[0].method = "GET";
@@ -13243,7 +13246,8 @@
   session_deps_.socket_factory->AddSocketDataProvider(&data1);
   session_deps_.socket_factory->AddSocketDataProvider(&data2);
 
-  const char* const kExpectedResponseData[] = {"hello world", "welcome"};
+  const auto kExpectedResponseData =
+      std::to_array<const char*>({"hello world", "welcome"});
 
   for (int i = 0; i < 2; ++i) {
     HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
@@ -20010,7 +20014,7 @@
 
   // Repeat the test for connecting to an HTTPS endpoint, then for connecting to
   // an HTTP endpoint.
-  HttpRequestInfo requests[2];
+  std::array<HttpRequestInfo, 2> requests;
   requests[0].url = GURL("https://www.example.com/");
   requests[0].method = "GET";
   requests[0].load_flags = LOAD_NORMAL;
diff --git a/net/http/http_server_properties_unittest.cc b/net/http/http_server_properties_unittest.cc
index 96314b8..d984649c 100644
--- a/net/http/http_server_properties_unittest.cc
+++ b/net/http/http_server_properties_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/http/http_server_properties.h"
 
+#include <array>
 #include <memory>
 #include <string>
 #include <vector>
@@ -37,7 +33,7 @@
 
 namespace net {
 
-const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = {
+const std::array<base::TimeDelta, 10> BROKEN_ALT_SVC_EXPIRE_DELAYS = {
     base::Seconds(300),    base::Seconds(600),   base::Seconds(1200),
     base::Seconds(2400),   base::Seconds(4800),  base::Seconds(9600),
     base::Seconds(19200),  base::Seconds(38400), base::Seconds(76800),
diff --git a/net/http/http_stream_parser_unittest.cc b/net/http/http_stream_parser_unittest.cc
index 50c9653..09aa67c9 100644
--- a/net/http/http_stream_parser_unittest.cc
+++ b/net/http/http_stream_parser_unittest.cc
@@ -12,6 +12,7 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <array>
 #include <memory>
 #include <string>
 #include <string_view>
@@ -1070,14 +1071,14 @@
     MockRead(SYNCHRONOUS, 0, 2),  // EOF
   };
 
-  base::span<MockRead> reads[] = {
+  auto reads = std::to_array<base::span<MockRead>>({
       truncated_status_reads,
       truncated_after_status_reads,
       truncated_in_header_reads,
       truncated_after_header_reads,
       truncated_after_final_newline_reads,
       not_truncated_reads,
-  };
+  });
 
   MockWrite writes[] = {
     MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"),
diff --git a/net/http/http_stream_pool_attempt_manager_unittest.cc b/net/http/http_stream_pool_attempt_manager_unittest.cc
index e678a47..f373821 100644
--- a/net/http/http_stream_pool_attempt_manager_unittest.cc
+++ b/net/http/http_stream_pool_attempt_manager_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "net/http/http_stream_pool_attempt_manager.h"
 
+#include <array>
 #include <list>
 #include <memory>
 #include <queue>
@@ -3439,7 +3440,7 @@
   Preconnector preconnector1(kDestination);
   Preconnector preconnector2(kDestination);
 
-  MockConnectCompleter completers[2];
+  std::array<MockConnectCompleter, 2> completers;
   std::vector<MockConnect> connects = {
       {MockConnect(&completers[0]), MockConnect(&completers[1])}};
   std::vector<std::unique_ptr<SequencedSocketData>> datas;
diff --git a/net/http/http_util_unittest.cc b/net/http/http_util_unittest.cc
index c3a667c..81b3b17 100644
--- a/net/http/http_util_unittest.cc
+++ b/net/http/http_util_unittest.cc
@@ -2,14 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/http/http_util.h"
 
 #include <algorithm>
+#include <array>
 #include <limits>
 #include <string_view>
 
@@ -733,35 +729,42 @@
 
 // Test SpecForRequest().
 TEST(HttpUtilTest, RequestUrlSanitize) {
-  struct {
+  struct Tests {
     const char* const url;
     const char* const expected_spec;
-  } tests[] = {
-    { // Check that #hash is removed.
-      "http://www.google.com:78/foobar?query=1#hash",
-      "http://www.google.com:78/foobar?query=1",
-    },
-    { // The reference may itself contain # -- strip all of it.
-      "http://192.168.0.1?query=1#hash#10#11#13#14",
-      "http://192.168.0.1/?query=1",
-    },
-    { // Strip username/password.
-      "http://user:pass@google.com",
-      "http://google.com/",
-    },
-    { // https scheme
-      "https://www.google.com:78/foobar?query=1#hash",
-      "https://www.google.com:78/foobar?query=1",
-    },
-    { // WebSocket's ws scheme
-      "ws://www.google.com:78/foobar?query=1#hash",
-      "ws://www.google.com:78/foobar?query=1",
-    },
-    { // WebSocket's wss scheme
-      "wss://www.google.com:78/foobar?query=1#hash",
-      "wss://www.google.com:78/foobar?query=1",
-    }
   };
+  auto tests = std::to_array<Tests>({
+      {
+          // Check that #hash is removed.
+          "http://www.google.com:78/foobar?query=1#hash",
+          "http://www.google.com:78/foobar?query=1",
+      },
+      {
+          // The reference may itself contain # -- strip all of it.
+          "http://192.168.0.1?query=1#hash#10#11#13#14",
+          "http://192.168.0.1/?query=1",
+      },
+      {
+          // Strip username/password.
+          "http://user:pass@google.com",
+          "http://google.com/",
+      },
+      {
+          // https scheme
+          "https://www.google.com:78/foobar?query=1#hash",
+          "https://www.google.com:78/foobar?query=1",
+      },
+      {
+          // WebSocket's ws scheme
+          "ws://www.google.com:78/foobar?query=1#hash",
+          "ws://www.google.com:78/foobar?query=1",
+      },
+      {
+          // WebSocket's wss scheme
+          "wss://www.google.com:78/foobar?query=1#hash",
+          "wss://www.google.com:78/foobar?query=1",
+      },
+  });
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(i);
 
@@ -1152,25 +1155,28 @@
   base::Time later;
   EXPECT_TRUE(base::Time::FromUTCExploded(later_exploded, &later));
 
-  const struct {
+  struct Tests {
     const char* retry_after_string;
     bool expected_return_value;
     base::TimeDelta expected_retry_after;
-  } tests[] = {{"", false, base::TimeDelta()},
-               {"-3", false, base::TimeDelta()},
-               {"-2", false, base::TimeDelta()},
-               {"-1", false, base::TimeDelta()},
-               {"+0", false, base::TimeDelta()},
-               {"+1", false, base::TimeDelta()},
-               {"0", true, base::Seconds(0)},
-               {"1", true, base::Seconds(1)},
-               {"2", true, base::Seconds(2)},
-               {"3", true, base::Seconds(3)},
-               {"60", true, base::Seconds(60)},
-               {"3600", true, base::Seconds(3600)},
-               {"86400", true, base::Seconds(86400)},
-               {"Thu, 1 Jan 2015 12:34:56 GMT", true, later - now},
-               {"Mon, 1 Jan 1900 12:34:56 GMT", false, base::TimeDelta()}};
+  };
+  const auto tests = std::to_array<Tests>({
+      {"", false, base::TimeDelta()},
+      {"-3", false, base::TimeDelta()},
+      {"-2", false, base::TimeDelta()},
+      {"-1", false, base::TimeDelta()},
+      {"+0", false, base::TimeDelta()},
+      {"+1", false, base::TimeDelta()},
+      {"0", true, base::Seconds(0)},
+      {"1", true, base::Seconds(1)},
+      {"2", true, base::Seconds(2)},
+      {"3", true, base::Seconds(3)},
+      {"60", true, base::Seconds(60)},
+      {"3600", true, base::Seconds(3600)},
+      {"86400", true, base::Seconds(86400)},
+      {"Thu, 1 Jan 2015 12:34:56 GMT", true, later - now},
+      {"Mon, 1 Jan 1900 12:34:56 GMT", false, base::TimeDelta()},
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     base::TimeDelta retry_after;
diff --git a/net/http/http_vary_data_unittest.cc b/net/http/http_vary_data_unittest.cc
index a2f484a..ea62fa4 100644
--- a/net/http/http_vary_data_unittest.cc
+++ b/net/http/http_vary_data_unittest.cc
@@ -2,14 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/http/http_vary_data.h"
 
 #include <algorithm>
+#include <array>
 
 #include "net/http/http_request_info.h"
 #include "net/http/http_response_headers.h"
@@ -42,14 +38,14 @@
 
 TEST(HttpVaryDataTest, IsInvalid) {
   // Only first of these result in an invalid vary data object.
-  const char* const kTestResponses[] = {
-    "HTTP/1.1 200 OK\n\n",
-    "HTTP/1.1 200 OK\nVary: *\n\n",
-    "HTTP/1.1 200 OK\nVary: cookie, *, bar\n\n",
-    "HTTP/1.1 200 OK\nVary: cookie\nFoo: 1\nVary: *\n\n",
-  };
+  const auto kTestResponses = std::to_array<const char*>({
+      "HTTP/1.1 200 OK\n\n",
+      "HTTP/1.1 200 OK\nVary: *\n\n",
+      "HTTP/1.1 200 OK\nVary: cookie, *, bar\n\n",
+      "HTTP/1.1 200 OK\nVary: cookie\nFoo: 1\nVary: *\n\n",
+  });
 
-  const bool kExpectedValid[] = {false, true, true, true};
+  const auto kExpectedValid = std::to_array<bool>({false, true, true, true});
 
   for (size_t i = 0; i < std::size(kTestResponses); ++i) {
     TestTransaction t;
diff --git a/net/http/transport_security_state_unittest.cc b/net/http/transport_security_state_unittest.cc
index 92ea84f..e594337 100644
--- a/net/http/transport_security_state_unittest.cc
+++ b/net/http/transport_security_state_unittest.cc
@@ -12,6 +12,7 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <array>
 #include <iterator>
 #include <memory>
 #include <string>
@@ -81,20 +82,20 @@
 const char kHost[] = "example.test";
 const uint16_t kPort = 443;
 
-const char* const kGoodPath[] = {
+const auto kGoodPath = std::to_array<const char*>({
     "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
     "sha256/fzP+pVAbH0hRoUphJKenIP8+2tD/d2QH9J+kQNieM6Q=",
     "sha256/9vRUVdjloCa4wXUKfDWotV5eUXYD7vu0v0z9SRzQdzg=",
     "sha256/Nn8jk5By4Vkq6BeOVZ7R7AC6XUUBZsWmUbJR1f1Y5FY=",
     nullptr,
-};
+});
 
-const char* const kBadPath[] = {
+const auto kBadPath = std::to_array<const char*>({
     "sha256/1111111111111111111111111111111111111111111=",
     "sha256/2222222222222222222222222222222222222222222=",
     "sha256/3333333333333333333333333333333333333333333=",
     nullptr,
-};
+});
 
 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate {
  public:
diff --git a/net/http/url_security_manager_unittest.cc b/net/http/url_security_manager_unittest.cc
index 64c6380e..52a1b82 100644
--- a/net/http/url_security_manager_unittest.cc
+++ b/net/http/url_security_manager_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/http/url_security_manager.h"
 
+#include <array>
 #include <utility>
 
 #include "net/base/net_errors.h"
@@ -34,19 +30,19 @@
 //    host names without a period.
 // In Posix systems (or on Windows if an allowlist is specified explicitly),
 // everything depends on the allowlist.
-const TestData kTestDataList[] = {
-  { "http://localhost", true, false },
-  { "http://bat", true, false },
-  { "http://www.example.com", false, true },
-  { "http://example.com", false, true },
-  { "http://foobar.com", false, true },
-  { "http://boo.foobar.com", false, true },
-  { "http://baz", true, true },
-  { "http://www.exampl.com", false, false },
-  { "http://example.org", false, false },
-  { "http://foobar.net", false, false },
-  { "http://boo.fubar.com", false, false },
-};
+const auto kTestDataList = std::to_array<TestData>({
+    {"http://localhost", true, false},
+    {"http://bat", true, false},
+    {"http://www.example.com", false, true},
+    {"http://example.com", false, true},
+    {"http://foobar.com", false, true},
+    {"http://boo.foobar.com", false, true},
+    {"http://baz", true, true},
+    {"http://www.exampl.com", false, false},
+    {"http://example.org", false, false},
+    {"http://foobar.net", false, false},
+    {"http://boo.fubar.com", false, false},
+});
 
 }  // namespace
 
diff --git a/net/log/net_log_unittest.cc b/net/log/net_log_unittest.cc
index 3cc3d22..bebe19b 100644
--- a/net/log/net_log_unittest.cc
+++ b/net/log/net_log_unittest.cc
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/log/net_log.h"
 
+#include <array>
+
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/task_environment.h"
@@ -328,7 +325,7 @@
       base::WaitableEvent::ResetPolicy::MANUAL,
       base::WaitableEvent::InitialState::NOT_SIGNALED);
 
-  ThreadType threads[kThreads];
+  std::array<ThreadType, kThreads> threads;
   for (size_t i = 0; i < std::size(threads); ++i) {
     threads[i].Init(net_log, &start_event);
     threads[i].Start();
@@ -401,7 +398,7 @@
 
 // Test adding and removing two observers at different log levels.
 TEST(NetLogTest, NetLogTwoObservers) {
-  LoggingObserver observer[2];
+  std::array<LoggingObserver, 2> observer;
 
   // Add first observer.
   NetLog::Get()->AddObserver(&observer[0],
diff --git a/net/nqe/network_quality_estimator_unittest.cc b/net/nqe/network_quality_estimator_unittest.cc
index 64fa4617..15103d5 100644
--- a/net/nqe/network_quality_estimator_unittest.cc
+++ b/net/nqe/network_quality_estimator_unittest.cc
@@ -12,6 +12,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <array>
 #include <cmath>
 #include <limits>
 #include <map>
@@ -951,8 +952,8 @@
 }
 
 TEST_F(NetworkQualityEstimatorTest, ClampKbpsBasedOnEct) {
-  const int32_t kTypicalDownlinkKbpsEffectiveConnectionType
-      [net::EFFECTIVE_CONNECTION_TYPE_LAST] = {0, 0, 40, 75, 400, 1600};
+  const std::array<int32_t, net::EFFECTIVE_CONNECTION_TYPE_LAST>
+      kTypicalDownlinkKbpsEffectiveConnectionType = {0, 0, 40, 75, 400, 1600};
 
   const struct {
     std::string upper_bound_typical_kbps_multiplier;
diff --git a/net/proxy_resolution/configured_proxy_resolution_service_unittest.cc b/net/proxy_resolution/configured_proxy_resolution_service_unittest.cc
index 5e4d89c..2ee1776 100644
--- a/net/proxy_resolution/configured_proxy_resolution_service_unittest.cc
+++ b/net/proxy_resolution/configured_proxy_resolution_service_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "net/proxy_resolution/configured_proxy_resolution_service.h"
 
+#include <array>
 #include <cstdarg>
 #include <memory>
 #include <string>
@@ -2042,8 +2043,8 @@
 TEST_F(ConfiguredProxyResolutionServiceTest, ProxyBypassList) {
   // Test that the proxy bypass rules are consulted.
 
-  TestCompletionCallback callback[2];
-  ProxyInfo info[2];
+  std::array<TestCompletionCallback, 2> callback;
+  std::array<ProxyInfo, 2> info;
   ProxyConfig config;
   config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090");
   config.set_auto_detect(false);
diff --git a/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc b/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc
index 86685934..0bc7863 100644
--- a/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc
+++ b/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/proxy_resolution/multi_threaded_proxy_resolver.h"
 
+#include <array>
 #include <memory>
 #include <utility>
 #include <vector>
@@ -610,9 +606,9 @@
 
   const int kNumRequests = 8;
   int rv;
-  TestCompletionCallback callback[kNumRequests];
-  ProxyInfo results[kNumRequests];
-  std::unique_ptr<ProxyResolver::Request> request[kNumRequests];
+  std::array<TestCompletionCallback, kNumRequests> callback;
+  std::array<ProxyInfo, kNumRequests> results;
+  std::array<std::unique_ptr<ProxyResolver::Request>, kNumRequests> request;
 
   // Start request 0 -- this should run on thread 0 as there is nothing else
   // going on right now.
@@ -720,9 +716,9 @@
   EXPECT_EQ(u"pac script bytes", factory().script_data()[0]->utf16());
 
   const int kNumRequests = 4;
-  TestCompletionCallback callback[kNumRequests];
-  ProxyInfo results[kNumRequests];
-  std::unique_ptr<ProxyResolver::Request> request[kNumRequests];
+  std::array<TestCompletionCallback, kNumRequests> callback;
+  std::array<ProxyInfo, kNumRequests> results;
+  std::array<std::unique_ptr<ProxyResolver::Request>, kNumRequests> request;
 
   // Start a request that will block the first thread.
 
diff --git a/net/proxy_resolution/proxy_config_service_linux_unittest.cc b/net/proxy_resolution/proxy_config_service_linux_unittest.cc
index 3e0e5a5b..6bbd843 100644
--- a/net/proxy_resolution/proxy_config_service_linux_unittest.cc
+++ b/net/proxy_resolution/proxy_config_service_linux_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/proxy_resolution/proxy_config_service_linux.h"
 
+#include <array>
 #include <map>
 #include <string>
 #include <string_view>
@@ -480,7 +476,7 @@
 
   // Inspired from proxy_config_service_win_unittest.cc.
   // Very neat, but harder to track down failures though.
-  const struct {
+  struct Tests {
     // Short description to identify the test
     std::string description;
 
@@ -492,7 +488,8 @@
     bool auto_detect;
     GURL pac_url;
     ProxyRulesExpectation proxy_rules;
-  } tests[] = {
+  };
+  const auto tests = std::to_array<Tests>({
       {
           TEST_DESC("No proxying"),
           {
@@ -769,7 +766,7 @@
           ProxyRulesExpectation::Single("www.google.com:80",  // single proxy
                                         "*.google.com"),      // bypass rules
       },
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
@@ -798,7 +795,7 @@
 
 TEST_F(ProxyConfigServiceLinuxTest, BasicEnvTest) {
   // Inspired from proxy_config_service_win_unittest.cc.
-  const struct {
+  struct Tests {
     // Short description to identify the test
     std::string description;
 
@@ -810,7 +807,8 @@
     bool auto_detect;
     GURL pac_url;
     ProxyRulesExpectation proxy_rules;
-  } tests[] = {
+  };
+  const auto tests = std::to_array<Tests>({
       {
           TEST_DESC("No proxying"),
           {
@@ -1101,7 +1099,7 @@
               "www.google.com:80",
               "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"),
       },
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
@@ -1176,7 +1174,7 @@
     long_line += "-";
 
   // Inspired from proxy_config_service_win_unittest.cc.
-  const struct {
+  struct Tests {
     // Short description to identify the test
     std::string description;
 
@@ -1189,7 +1187,8 @@
     bool auto_detect;
     GURL pac_url;
     ProxyRulesExpectation proxy_rules;
-  } tests[] = {
+  };
+  const auto tests = std::to_array<Tests>({
       {
           TEST_DESC("No proxying"),
 
@@ -1716,7 +1715,7 @@
               "socks5://socks.comfy.com:1234",  // socks
               "*.google.com,*.kde.org"),        // bypass rules
       },
-  };
+  });
 
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
@@ -1969,7 +1968,7 @@
   xdg_config_dirs += ':';
   xdg_config_dirs += config_xdg_home_.value();
 
-  const struct {
+  struct Tests {
     // Short description to identify the test
     std::string description;
 
@@ -1979,7 +1978,8 @@
     bool auto_detect;
     GURL pac_url;
     ProxyRulesExpectation proxy_rules;
-  } tests[] = {
+  };
+  const auto tests = std::to_array<Tests>({
       {
           TEST_DESC("Use xdg/kioslaverc"),
 
@@ -2018,7 +2018,7 @@
               "",                         // ftp
               "*.google.com,*.kde.org"),  // bypass rules,
       },
-  };
+  });
 
   // Create directories for all configs
   base::CreateDirectory(config_home_);
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index f6515fa..982f67f5 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -2,12 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include <algorithm>
+#include <array>
 #include <ostream>
 #include <string>
 #include <string_view>
@@ -8436,7 +8432,7 @@
       "Content-Length: 10\r\n\r\n";
   const char kRespData[] = "0123456789";
 
-  std::unique_ptr<MockQuicData> mock_quic_data[2] = {
+  std::array<std::unique_ptr<MockQuicData>, 2> mock_quic_data = {
       std::make_unique<MockQuicData>(version_),
       std::make_unique<MockQuicData>(version_)};
 
diff --git a/net/reporting/reporting_delivery_agent_unittest.cc b/net/reporting/reporting_delivery_agent_unittest.cc
index d31c2bd..adf6608e 100644
--- a/net/reporting/reporting_delivery_agent_unittest.cc
+++ b/net/reporting/reporting_delivery_agent_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/reporting/reporting_delivery_agent.h"
 
+#include <array>
 #include <optional>
 #include <vector>
 
@@ -626,7 +622,7 @@
 // if the reports are from different origins or NAKs, but does combine all
 // reports for the same (NAK, origin).
 TEST_F(ReportingDeliveryAgentTest, OnlyBatchSameNakAndOrigin) {
-  const ReportingEndpointGroupKey kGroupKeys[] = {
+  const auto kGroupKeys = std::to_array<ReportingEndpointGroupKey>({
       ReportingEndpointGroupKey(kNak_, kOrigin_, kGroup_,
                                 ReportingTargetType::kDeveloper),
       ReportingEndpointGroupKey(kNak_, kOtherOrigin_, kGroup_,
@@ -635,7 +631,7 @@
                                 ReportingTargetType::kDeveloper),
       ReportingEndpointGroupKey(kOtherNak_, kOtherOrigin_, kGroup_,
                                 ReportingTargetType::kDeveloper),
-  };
+  });
   for (const ReportingEndpointGroupKey& group_key : kGroupKeys) {
     ASSERT_TRUE(SetEndpointInCache(group_key, kEndpoint_, kExpires_));
   }
diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc
index 12fbf66d..6a333eb00 100644
--- a/net/socket/client_socket_pool_base_unittest.cc
+++ b/net/socket/client_socket_pool_base_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include <stdint.h>
 
+#include <array>
 #include <optional>
 #include <string_view>
 #include <utility>
@@ -1310,8 +1306,8 @@
   connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
 
   {
-    ClientSocketHandle handles[kDefaultMaxSockets];
-    TestCompletionCallback callbacks[kDefaultMaxSockets];
+    std::array<ClientSocketHandle, kDefaultMaxSockets> handles;
+    std::array<TestCompletionCallback, kDefaultMaxSockets> callbacks;
     for (int i = 0; i < kDefaultMaxSockets; ++i) {
       EXPECT_EQ(OK, handles[i].Init(TestGroupId("a" + base::NumberToString(i)),
                                     params_, std::nullopt, DEFAULT_PRIORITY,
@@ -1350,7 +1346,7 @@
   connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
 
   {
-    ClientSocketHandle handles[kDefaultMaxSockets];
+    std::array<ClientSocketHandle, kDefaultMaxSockets> handles;
     for (int i = 0; i < kDefaultMaxSockets; ++i) {
       TestCompletionCallback callback;
       EXPECT_EQ(ERR_IO_PENDING,
@@ -1416,7 +1412,7 @@
   TestCompletionCallback callback;
   {
     EXPECT_FALSE(pool_->IsStalled());
-    ClientSocketHandle handles[kDefaultMaxSockets];
+    std::array<ClientSocketHandle, kDefaultMaxSockets> handles;
     for (int i = 0; i < kDefaultMaxSockets; ++i) {
       EXPECT_EQ(
           OK, handles[i].Init(
@@ -2800,10 +2796,10 @@
 
   // Max out the socket limit with 2 per group.
 
-  ClientSocketHandle handle_a[4];
-  TestCompletionCallback callback_a[4];
-  ClientSocketHandle handle_b[4];
-  TestCompletionCallback callback_b[4];
+  std::array<ClientSocketHandle, 4> handle_a;
+  std::array<TestCompletionCallback, 4> callback_a;
+  std::array<ClientSocketHandle, 4> handle_b;
+  std::array<TestCompletionCallback, 4> callback_b;
 
   for (int i = 0; i < 2; ++i) {
     EXPECT_EQ(OK, handle_a[i].Init(TestGroupId("a"), params_, std::nullopt,
@@ -3171,7 +3167,7 @@
 
   // Start (MaxSockets - 1) connected sockets to reach max sockets.
   connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
-  ClientSocketHandle handles[kDefaultMaxSockets];
+  std::array<ClientSocketHandle, kDefaultMaxSockets> handles;
   for (int i = 1; i < kDefaultMaxSockets; ++i) {
     EXPECT_EQ(OK, handles[i].Init(TestGroupId("bar"), params_, std::nullopt,
                                   DEFAULT_PRIORITY, SocketTag(),
diff --git a/net/socket/sequenced_socket_data_unittest.cc b/net/socket/sequenced_socket_data_unittest.cc
index b39b02e..64d71fb 100644
--- a/net/socket/sequenced_socket_data_unittest.cc
+++ b/net/socket/sequenced_socket_data_unittest.cc
@@ -7,6 +7,7 @@
 #pragma allow_unsafe_buffers
 #endif
 
+#include <array>
 #include <memory>
 #include <string>
 
@@ -652,9 +653,10 @@
     AssertSyncWriteEquals(kMsg1, kLen1 - 1);
   }
 
-  static const char* kExpectedFailures[] = {
-      "Value of: actual_data == expected_data\n  Actual: false\nExpected: true",
-      "Expected equality of these values:\n  rv"};
+  static auto kExpectedFailures =
+      std::to_array<const char*>({"Value of: actual_data == expected_data\n  "
+                                  "Actual: false\nExpected: true",
+                                  "Expected equality of these values:\n  rv"});
   ASSERT_EQ(std::size(kExpectedFailures),
             static_cast<size_t>(gtest_failures.size()));
 
diff --git a/net/socket/websocket_endpoint_lock_manager_unittest.cc b/net/socket/websocket_endpoint_lock_manager_unittest.cc
index 42b897fc..42fd55b 100644
--- a/net/socket/websocket_endpoint_lock_manager_unittest.cc
+++ b/net/socket/websocket_endpoint_lock_manager_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "net/socket/websocket_endpoint_lock_manager.h"
 
+#include <array>
+
 #include "base/check.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
@@ -87,7 +89,7 @@
 };
 
 TEST_F(WebSocketEndpointLockManagerTest, LockEndpointReturnsOkOnce) {
-  FakeWaiter waiters[2];
+  std::array<FakeWaiter, 2> waiters;
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
               IsOk());
@@ -109,7 +111,7 @@
 }
 
 TEST_F(WebSocketEndpointLockManagerTest, GotEndpointLockNotCalledImmediately) {
-  FakeWaiter waiters[2];
+  std::array<FakeWaiter, 2> waiters;
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
               IsOk());
@@ -122,7 +124,7 @@
 }
 
 TEST_F(WebSocketEndpointLockManagerTest, GotEndpointLockCalledWhenUnlocked) {
-  FakeWaiter waiters[2];
+  std::array<FakeWaiter, 2> waiters;
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
               IsOk());
@@ -160,7 +162,7 @@
 }
 
 TEST_F(WebSocketEndpointLockManagerTest, LockReleaserWorks) {
-  FakeWaiter waiters[2];
+  std::array<FakeWaiter, 2> waiters;
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
               IsOk());
@@ -195,7 +197,7 @@
 // When ownership of the endpoint is passed to a new waiter, the new waiter can
 // construct another LockReleaser.
 TEST_F(WebSocketEndpointLockManagerTest, NextWaiterCanCreateLockReleaserAgain) {
-  FakeWaiter waiters[2];
+  std::array<FakeWaiter, 2> waiters;
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
               IsOk());
@@ -216,7 +218,7 @@
 // Destroying LockReleaser after UnlockEndpoint() does nothing.
 TEST_F(WebSocketEndpointLockManagerTest,
        DestroyLockReleaserAfterUnlockEndpointDoesNothing) {
-  FakeWaiter waiters[3];
+  std::array<FakeWaiter, 3> waiters;
 
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
@@ -239,7 +241,7 @@
 
 // UnlockEndpoint() should always be asynchronous.
 TEST_F(WebSocketEndpointLockManagerTest, UnlockEndpointIsAsynchronous) {
-  FakeWaiter waiters[2];
+  std::array<FakeWaiter, 2> waiters;
   EXPECT_THAT(websocket_endpoint_lock_manager_.LockEndpoint(DummyEndpoint(),
                                                             &waiters[0]),
               IsOk());
diff --git a/net/spdy/spdy_session_pool_unittest.cc b/net/spdy/spdy_session_pool_unittest.cc
index 4ea2860..023a480e 100644
--- a/net/spdy/spdy_session_pool_unittest.cc
+++ b/net/spdy/spdy_session_pool_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/spdy/spdy_session_pool.h"
 
+#include <array>
 #include <cstddef>
 #include <tuple>
 #include <utility>
@@ -552,14 +548,15 @@
     std::string name;
     std::string iplist;
     SpdySessionKey key;
-  } test_hosts[] = {
+  };
+  auto test_hosts = std::to_array<TestHosts>({
       {"http://www.example.org", "www.example.org",
        "192.0.2.33,192.168.0.1,192.168.0.5"},
       {"http://mail.example.org", "mail.example.org",
        "192.168.0.2,192.168.0.3,192.168.0.5,192.0.2.33"},
       {"http://mail.example.com", "mail.example.com",
        "192.168.0.4,192.168.0.3"},
-  };
+  });
 
   for (auto& test_host : test_hosts) {
     session_deps_.host_resolver->rules()->AddIPLiteralRule(
@@ -741,10 +738,11 @@
     std::string name;
     std::string iplist;
     SpdySessionKey key;
-  } test_hosts[] = {
+  };
+  auto test_hosts = std::to_array<TestHosts>({
       {"www.webkit.org", "192.0.2.33,192.168.0.1,192.168.0.5"},
       {"js.webkit.com", "192.168.0.4,192.168.0.1,192.0.2.33"},
-  };
+  });
 
   session_deps_.host_resolver->set_synchronous_mode(true);
   for (auto& test_host : test_hosts) {
@@ -799,10 +797,11 @@
     std::string name;
     std::string iplist;
     SpdySessionKey key;
-  } test_hosts[] = {
+  };
+  auto test_hosts = std::to_array<TestHosts>({
       {"www.example.org", "192.168.0.1"},
       {"mail.example.org", "192.168.0.1"},
-  };
+  });
 
   // Populate the HostResolver cache.
   session_deps_.host_resolver->set_synchronous_mode(true);
@@ -869,10 +868,13 @@
     std::string name;
     std::vector<HostResolverEndpointResult> endpoints;
     SpdySessionKey key;
-  } test_hosts[] = {{"www.example.org"},
-                    {"mail.example.org"},
-                    {"mail.example.com"},
-                    {"example.test"}};
+  };
+  auto test_hosts = std::to_array<TestHosts>({
+      {"www.example.org"},
+      {"mail.example.org"},
+      {"mail.example.com"},
+      {"example.test"},
+  });
 
   const IPEndPoint kRightIP(*IPAddress::FromIPLiteral("192.168.0.1"),
                             kTestPort);
@@ -965,10 +967,11 @@
     std::string name;
     std::string iplist;
     SpdySessionKey key;
-  } test_hosts[] = {
+  };
+  auto test_hosts = std::to_array<TestHosts>({
       {"www.example.org", "192.168.0.1"},
       {"mail.example.org", "192.168.0.1"},
-  };
+  });
 
   // Populate the HostResolver cache.
   session_deps_.host_resolver->set_synchronous_mode(true);
@@ -1463,10 +1466,11 @@
     std::string name;
     std::string iplist;
     SpdySessionKey key;
-  } test_hosts[] = {
+  };
+  auto test_hosts = std::to_array<TestHosts>({
       {"www.example.org", "192.168.0.1"},
       {"mail.example.org", "192.168.0.1"},
-  };
+  });
 
   // Populate the HostResolver cache.
   session_deps_.host_resolver->set_synchronous_mode(true);
@@ -1782,11 +1786,12 @@
 
 static const char kSSLServerTestHost[] = "config-changed.test";
 
-static const struct {
+struct SSLServerTests {
   const char* url;
   const char* proxy_pac_string;
   bool expect_invalidated;
-} kSSLServerTests[] = {
+};
+const auto kSSLServerTests = std::to_array<SSLServerTests>({
     // If the host and port match, the session should be invalidated.
     {"https://config-changed.test", "DIRECT", true},
     // If host and port do not match, the session should not be invalidated.
@@ -1806,7 +1811,7 @@
      false},
     {"https://mail.config-changed.test", "HTTPS config-changed.test:444",
      false},
-};
+});
 
 // Tests the OnSSLConfigForServersChanged() method matches SpdySessions as
 // expected.
diff --git a/net/spdy/spdy_write_queue_unittest.cc b/net/spdy/spdy_write_queue_unittest.cc
index d849035..4fe9c98b 100644
--- a/net/spdy/spdy_write_queue_unittest.cc
+++ b/net/spdy/spdy_write_queue_unittest.cc
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/spdy/spdy_write_queue.h"
 
+#include <array>
 #include <cstddef>
 #include <cstring>
 #include <string>
@@ -262,10 +258,12 @@
   stream3->set_stream_id(5);
   // No stream id assigned.
   std::unique_ptr<SpdyStream> stream4 = MakeTestStream(DEFAULT_PRIORITY);
-  base::WeakPtr<SpdyStream> streams[] = {
-    stream1->GetWeakPtr(), stream2->GetWeakPtr(),
-    stream3->GetWeakPtr(), stream4->GetWeakPtr()
-  };
+  auto streams = std::to_array<base::WeakPtr<SpdyStream>>({
+      stream1->GetWeakPtr(),
+      stream2->GetWeakPtr(),
+      stream3->GetWeakPtr(),
+      stream4->GetWeakPtr(),
+  });
 
   for (int i = 0; i < 100; ++i) {
     write_queue.Enqueue(DEFAULT_PRIORITY, spdy::SpdyFrameType::HEADERS,
diff --git a/net/test/url_request/url_request_failed_job.cc b/net/test/url_request/url_request_failed_job.cc
index e2db678..98c9f6d 100644
--- a/net/test/url_request/url_request_failed_job.cc
+++ b/net/test/url_request/url_request_failed_job.cc
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "net/test/url_request/url_request_failed_job.h"
 
+#include <array>
+
 #include "base/check_op.h"
 #include "base/functional/bind.h"
 #include "base/location.h"
@@ -28,11 +25,11 @@
 const char kMockHostname[] = "mock.failed.request";
 
 // String names of failure phases matching FailurePhase enum.
-const char* kFailurePhase[]{
+auto kFailurePhase = std::to_array<const char*>({
     "start",      // START
     "readsync",   // READ_SYNC
     "readasync",  // READ_ASYNC
-};
+});
 
 static_assert(std::size(kFailurePhase) ==
                   URLRequestFailedJob::FailurePhase::MAX_FAILURE_PHASE,
diff --git a/net/third_party/quiche/BUILD.gn b/net/third_party/quiche/BUILD.gn
index d1ec070..030d7f4 100644
--- a/net/third_party/quiche/BUILD.gn
+++ b/net/third_party/quiche/BUILD.gn
@@ -506,6 +506,8 @@
     "src/quiche/http2/adapter/recording_http2_visitor_test.cc",
     "src/quiche/http2/adapter/window_manager_test.cc",
     "src/quiche/http2/core/array_output_buffer_test.cc",
+    "src/quiche/http2/core/http2_constants_test.cc",
+    "src/quiche/http2/core/http2_structures_test.cc",
     "src/quiche/http2/core/priority_write_scheduler_test.cc",
     "src/quiche/http2/core/spdy_alt_svc_wire_format_test.cc",
     "src/quiche/http2/core/spdy_frame_builder_test.cc",
@@ -553,8 +555,6 @@
     "src/quiche/http2/hpack/varint/hpack_varint_decoder_test.cc",
     "src/quiche/http2/hpack/varint/hpack_varint_encoder_test.cc",
     "src/quiche/http2/hpack/varint/hpack_varint_round_trip_test.cc",
-    "src/quiche/http2/http2_constants_test.cc",
-    "src/quiche/http2/http2_structures_test.cc",
     "src/quiche/http2/test_tools/hpack_block_builder_test.cc",
     "src/quiche/http2/test_tools/hpack_example_test.cc",
     "src/quiche/http2/test_tools/http2_frame_builder_test.cc",
diff --git a/net/third_party/quiche/src b/net/third_party/quiche/src
index 5ccc379..55decf7 160000
--- a/net/third_party/quiche/src
+++ b/net/third_party/quiche/src
@@ -1 +1 @@
-Subproject commit 5ccc379791baf78d5189898929aea9f34f588b21
+Subproject commit 55decf709d18c34324e6487c678740fe50b32d18
diff --git a/net/websockets/websocket_frame_parser_test.cc b/net/websockets/websocket_frame_parser_test.cc
index c887878..a90f8d5 100644
--- a/net/websockets/websocket_frame_parser_test.cc
+++ b/net/websockets/websocket_frame_parser_test.cc
@@ -12,6 +12,7 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <array>
 #include <iterator>
 #include <string>
 #include <string_view>
@@ -43,7 +44,7 @@
   WebSocketError error_code;
 };
 
-constexpr FrameHeaderTestCase kFrameHeaderTests[] = {
+constexpr auto kFrameHeaderTests = std::to_array<FrameHeaderTestCase>({
     {{"\x81\x00", 2}, UINT64_C(0), kWebSocketNormalClosure},
     {{"\x81\x7D", 2}, UINT64_C(125), kWebSocketNormalClosure},
     {{"\x81\x7E\x00\x7E", 4}, UINT64_C(126), kWebSocketNormalClosure},
@@ -59,7 +60,8 @@
      kWebSocketErrorMessageTooBig},
     {{"\x81\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 10},
      UINT64_C(0x7FFFFFFFFFFFFFFF),
-     kWebSocketErrorMessageTooBig}};
+     kWebSocketErrorMessageTooBig},
+});
 constexpr int kNumFrameHeaderTests = std::size(kFrameHeaderTests);
 
 TEST(WebSocketFrameParserTest, DecodeNormalFrame) {
@@ -129,7 +131,7 @@
     const char* expected_payload;
     size_t expected_payload_length;
   };
-  static constexpr Input kInputs[] = {
+  constexpr static const auto kInputs = std::to_array<Input>({
       // Each |frame| data is split into two string literals because C++ lexers
       // consume unlimited number of hex characters in a hex character escape
       // (e.g. "\x05F" is not treated as { '\x5', 'F', '\0' } but as
@@ -163,7 +165,8 @@
        7, "Ninth", 5},
       {"\x81\x05"
        "Tenth",
-       7, "Tenth", 5}};
+       7, "Tenth", 5},
+  });
   static constexpr int kNumInputs = std::size(kInputs);
 
   std::vector<uint8_t> input;
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn
index 593d0c6..2c04717 100644
--- a/pdf/BUILD.gn
+++ b/pdf/BUILD.gn
@@ -325,6 +325,7 @@
 
     deps = [
       "//base",
+      "//services/screen_ai/buildflags",
       "//skia",
       "//ui/gfx/geometry",
     ]
diff --git a/pdf/pdf_accessibility_data_handler.h b/pdf/pdf_accessibility_data_handler.h
index 358df5e..2cbc470 100644
--- a/pdf/pdf_accessibility_data_handler.h
+++ b/pdf/pdf_accessibility_data_handler.h
@@ -7,6 +7,8 @@
 
 #include <vector>
 
+#include "services/screen_ai/buildflags/buildflags.h"
+
 namespace chrome_pdf {
 
 struct AccessibilityCharInfo;
@@ -28,6 +30,12 @@
       std::vector<AccessibilityTextRunInfo> text_runs,
       std::vector<AccessibilityCharInfo> chars,
       AccessibilityPageObjects page_objects) = 0;
+
+#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+  // Notifies that at least one page is searchified. This function is called at
+  // most once.
+  virtual void OnHasSearchifyText() = 0;
+#endif
 };
 
 }  // namespace chrome_pdf
diff --git a/pdf/pdf_view_web_plugin.cc b/pdf/pdf_view_web_plugin.cc
index aa11660..60fbed9a 100644
--- a/pdf/pdf_view_web_plugin.cc
+++ b/pdf/pdf_view_web_plugin.cc
@@ -1509,6 +1509,7 @@
   base::Value::Dict message;
   message.Set("type", "setHasSearchifyText");
   client_->PostMessage(std::move(message));
+  pdf_accessibility_data_handler_->OnHasSearchifyText();
 }
 #endif  // BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
 
diff --git a/pdf/pdf_view_web_plugin_unittest.cc b/pdf/pdf_view_web_plugin_unittest.cc
index 88d45efe..e943b683 100644
--- a/pdf/pdf_view_web_plugin_unittest.cc
+++ b/pdf/pdf_view_web_plugin_unittest.cc
@@ -211,6 +211,9 @@
                std::vector<AccessibilityCharInfo>,
                AccessibilityPageObjects),
               (override));
+#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+  MOCK_METHOD(void, OnHasSearchifyText, (), (override));
+#endif
 };
 
 class FakePdfViewWebPluginClient : public PdfViewWebPlugin::Client {
diff --git a/pdf/pdfium/pdfium_engine_client.h b/pdf/pdfium/pdfium_engine_client.h
index fdb1a46..9ee53f2 100644
--- a/pdf/pdfium/pdfium_engine_client.h
+++ b/pdf/pdfium/pdfium_engine_client.h
@@ -208,7 +208,8 @@
   // See the comment for `OnSearchifyStateChange` in pdf/pdfium/pdfium_engine.h.
   virtual void OnSearchifyStateChange(bool busy) = 0;
 
-  // Notifies that at least one page is searchified.
+  // Notifies that at least one page is searchified. This function is called at
+  // most once.
   virtual void OnHasSearchifyText() = 0;
 #endif
 };
diff --git a/testing/buildbot/filters/ios.viz_unittests.filter b/testing/buildbot/filters/ios.viz_unittests.filter
index 74f5361..d3d8aae1a 100644
--- a/testing/buildbot/filters/ios.viz_unittests.filter
+++ b/testing/buildbot/filters/ios.viz_unittests.filter
@@ -210,3 +210,8 @@
 -SurfaceSynchronizationTestMayAlwaysAckOnActivation.UnAckedSurfaceArrivesBeforeNewActivationDependencies/AckOnSurfaceActivationWhenInteractive
 -SurfaceSynchronizationTestMayAlwaysAckOnActivation.UnAckedSurfaceArrivesBeforeNewActivationDependencies/DoNotAckOnSurfaceActivationWhenInteractive
 -SurfaceSynchronizationTestMayAlwaysAckOnActivation.UnAckedSurfaceArrivesBeforeNewActivationDependencies/DoNotAckOnSurfaceActivationWhenInteractive-
+
+# TODO(crbug.com/383593269): These tests are failing on the ios-blink-dbg-fyi
+# bot.
+-GPURendererPixelTest.TrilinearFiltering/SkiaGraphiteDawn
+-GPURendererPixelTest.TrilinearFiltering/SkiaGraphiteMetal
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 96053e3..90da693 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -11619,6 +11619,36 @@
             ]
         }
     ],
+    "IOSInterruptibleCoordinatorAlwaysDismissedName": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "IOSInterruptibleCoordinatorAlwaysDismissedName",
+                    "enable_features": [
+                        "IOSInterruptibleCoordinatorAlwaysDismissedName"
+                    ]
+                }
+            ]
+        }
+    ],
+    "IOSInterruptibleCoordinatorStoppedSynchronously": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "IOSInterruptibleCoordinatorStoppedSynchronously",
+                    "enable_features": [
+                        "IOSInterruptibleCoordinatorStoppedSynchronously"
+                    ]
+                }
+            ]
+        }
+    ],
     "IOSKeepsRenderProcessAlive": [
         {
             "platforms": [
@@ -12442,21 +12472,6 @@
             ]
         }
     ],
-    "InterruptibleCoordinatorStoppedSynchronously": [
-        {
-            "platforms": [
-                "ios"
-            ],
-            "experiments": [
-                {
-                    "name": "InterruptibleCoordinatorStoppedSynchronously",
-                    "enable_features": [
-                        "InterruptibleCoordinatorStoppedSynchronously"
-                    ]
-                }
-            ]
-        }
-    ],
     "InvalidationsWithDirectMessagesPerPlatform": [
         {
             "platforms": [
@@ -16276,6 +16291,27 @@
             ]
         }
     ],
+    "PasswordFormClientsideClassifier": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "chromeos_lacros",
+                "ios",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "PasswordFormClientsideClassifier"
+                    ]
+                }
+            ]
+        }
+    ],
     "PasswordFormGroupedAffiliations": [
         {
             "platforms": [
@@ -16351,21 +16387,6 @@
             ]
         }
     ],
-    "PasswordSuggestionBottomSheetV2": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "PasswordSuggestionBottomSheetV2"
-                    ]
-                }
-            ]
-        }
-    ],
     "PasswordlessGaiaForConsumers": [
         {
             "platforms": [
@@ -19367,6 +19388,27 @@
             ]
         }
     ],
+    "RustyPng": [
+        {
+            "platforms": [
+                "android",
+                "android_webview",
+                "chromeos",
+                "ios",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "RustPng"
+                    ]
+                }
+            ]
+        }
+    ],
     "SafeBrowsingAsyncRealTimeCheck": [
         {
             "platforms": [
diff --git a/third_party/abseil-cpp/absl/hash/internal/hash.h b/third_party/abseil-cpp/absl/hash/internal/hash.h
index b4006b2..93fefde 100644
--- a/third_party/abseil-cpp/absl/hash/internal/hash.h
+++ b/third_party/abseil-cpp/absl/hash/internal/hash.h
@@ -339,7 +339,7 @@
 template <>
 struct is_uniquely_represented<bool> : std::false_type {};
 
-#if ABSL_HAVE_INTRINSIC_INT128
+#ifdef ABSL_HAVE_INTRINSIC_INT128
 // Specialize the trait for GNU extension types.
 template <>
 struct is_uniquely_represented<__int128> : std::true_type {};
diff --git a/third_party/abseil-cpp/patches/0005-ifdef-absl-have-intrinsic-int128.patch b/third_party/abseil-cpp/patches/0005-ifdef-absl-have-intrinsic-int128.patch
new file mode 100644
index 0000000..faed4d7
--- /dev/null
+++ b/third_party/abseil-cpp/patches/0005-ifdef-absl-have-intrinsic-int128.patch
@@ -0,0 +1,20 @@
+diff --git a/native_client b/native_client
+index 6944e6b79dbd1..f9cb132c419b9 160000
+--- a/native_client
++++ b/native_client
+@@ -1 +1 @@
+-Subproject commit 6944e6b79dbd1b9776681c025bd4f4c281bb4791
++Subproject commit f9cb132c419b9e019853103e88c518026b9f5083
+diff --git a/third_party/abseil-cpp/absl/hash/internal/hash.h b/third_party/abseil-cpp/absl/hash/internal/hash.h
+index b4006b2b8940e..93fefde1ae7dc 100644
+--- a/third_party/abseil-cpp/absl/hash/internal/hash.h
++++ b/third_party/abseil-cpp/absl/hash/internal/hash.h
+@@ -339,7 +339,7 @@ struct is_uniquely_represented<
+ template <>
+ struct is_uniquely_represented<bool> : std::false_type {};
+ 
+-#if ABSL_HAVE_INTRINSIC_INT128
++#ifdef ABSL_HAVE_INTRINSIC_INT128
+ // Specialize the trait for GNU extension types.
+ template <>
+ struct is_uniquely_represented<__int128> : std::true_type {};
diff --git a/third_party/blink/public/strings/translations/blink_strings_it.xtb b/third_party/blink/public/strings/translations/blink_strings_it.xtb
index 97557460..3070b7c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_it.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_it.xtb
@@ -86,7 +86,7 @@
 <translation id="8117451130807776954">Questa settimana</translation>
 <translation id="8131955114056917397">0,25</translation>
 <translation id="8199524924445686405">aaaa</translation>
-<translation id="8284326494547611709">Sottotitoli</translation>
+<translation id="8284326494547611709">Sottotitoli codificati</translation>
 <translation id="835897206747267392">Valore non valido.</translation>
 <translation id="839593075537728968">Il valore deve essere compreso tra <ph name="MINIMUM_TIME" /> e <ph name="MAXIMUM_TIME" />.</translation>
 <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES" /> file</translation>
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni
index cae51f38..e579ccd 100644
--- a/third_party/blink/renderer/bindings/generated_in_core.gni
+++ b/third_party/blink/renderer/bindings/generated_in_core.gni
@@ -2040,6 +2040,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_internals.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_internals_ukm_recorder.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_internals_ukm_recorder.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_nadc_attribute_test.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_nadc_attribute_test.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_origin_trials_test.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_origin_trials_test.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_record_test.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_core.gni b/third_party/blink/renderer/bindings/idl_in_core.gni
index 9342c92..c271f4a 100644
--- a/third_party/blink/renderer/bindings/idl_in_core.gni
+++ b/third_party/blink/renderer/bindings/idl_in_core.gni
@@ -821,6 +821,7 @@
   "//third_party/blink/renderer/core/testing/origin_trials_test_dictionary.idl",
   "//third_party/blink/renderer/core/testing/origin_trials_test_partial.idl",
   "//third_party/blink/renderer/core/testing/origin_trials_test_window.idl",
+  "//third_party/blink/renderer/core/testing/nadc_attribute_test.idl",
   "//third_party/blink/renderer/core/testing/record_test.idl",
   "//third_party/blink/renderer/core/testing/sequence_test.idl",
   "//third_party/blink/renderer/core/testing/static_selection.idl",
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
index e0a1d6b..6334b01 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
@@ -2015,6 +2015,84 @@
     return func_def
 
 
+def nadc_parameter_v8_type_and_symbol_node(cg_context, argument, v8_arg_name,
+                                           blink_arg_name):
+    assert isinstance(cg_context, CodeGenContext)
+    assert isinstance(v8_arg_name, str)
+    assert isinstance(blink_arg_name, str)
+    assert isinstance(argument, web_idl.Argument) or isinstance(
+        argument, web_idl.Attribute)
+
+    unwrapped_idl_type = argument.idl_type.unwrap()
+    if "PassAsSpan" in argument.idl_type.effective_annotations:
+        return ("v8::Local<v8::Value>",
+                make_v8_to_blink_value(blink_arg_name,
+                                       "${{{}}}".format(v8_arg_name),
+                                       argument.idl_type,
+                                       argument=argument,
+                                       error_exit_return_statement="return;",
+                                       cg_context=cg_context))
+    if unwrapped_idl_type.is_interface or unwrapped_idl_type.is_sequence:
+        return ("v8::Local<v8::Value>"
+                if unwrapped_idl_type.is_interface else "v8::Local<v8::Array>",
+                make_v8_to_blink_value(blink_arg_name,
+                                       "${{{}}}".format(v8_arg_name),
+                                       argument.idl_type,
+                                       argument=argument,
+                                       error_exit_return_statement="return;",
+                                       cg_context=cg_context))
+    else:
+        return (blink_type_info(argument.idl_type).value_t,
+                SymbolNode(
+                    blink_arg_name,
+                    "auto&& {} = {};".format(blink_arg_name, v8_arg_name)))
+
+
+def make_attribute_set_nadc_callback_def(cg_context):
+    assert isinstance(cg_context, CodeGenContext)
+
+    if not "NoAllocDirectCall" in cg_context.attribute.extended_attributes:
+        return None, None
+    if not "Setter" in cg_context.attribute.extended_attributes.get(
+            "NoAllocDirectCall").values:
+        return None, None
+
+    param_type, param_symbol = nadc_parameter_v8_type_and_symbol_node(
+        cg_context=cg_context,
+        argument=cg_context.attribute,
+        v8_arg_name="value",
+        blink_arg_name="blink_value")
+
+    func_name = callback_function_name(cg_context)
+    func_def = CxxFuncDefNode(
+        name=func_name,
+        arg_decls=[
+            "v8::Local<v8::Object> v8_arg0_receiver",
+            "{} value".format(param_type),
+            "v8::FastApiCallbackOptions& v8_arg_callback_options"
+        ],
+        return_type="void")
+    func_def.set_base_template_vars(cg_context.template_bindings())
+    body = func_def.body
+
+    body.register_code_symbols([
+        SymbolNode(
+            "isolate",
+            "v8::Isolate* ${isolate} = v8_arg_callback_options.isolate;"),
+        SymbolNode("blink_receiver", (_format(
+            "{}* ${blink_receiver} = "
+            "${class_name}::ToWrappableUnsafe(${isolate}, v8_arg0_receiver);",
+            blink_class_name(cg_context.interface)))), param_symbol
+    ])
+    bind_callback_local_vars(body, cg_context)
+
+    body.append(
+        FormatNode("${blink_receiver}->{member_func}(${blink_value});",
+                   member_func=name_style.api_func(
+                       "set", cg_context.attribute.identifier)))
+    return func_name, func_def
+
+
 def make_attribute_set_callback_def(cg_context, function_name):
     assert isinstance(cg_context, CodeGenContext)
     assert isinstance(function_name, str)
@@ -2490,7 +2568,6 @@
             entries.append(Entry(operation, 0))
     return entries
 
-
 def make_no_alloc_direct_call_callback_def(cg_context, function_name,
                                            argument_count):
     """
@@ -2518,32 +2595,6 @@
             self.blink_arg_name = blink_arg_name
             self.symbol_node = symbol_node
 
-    def v8_type_and_symbol_node(argument, v8_arg_name, blink_arg_name):
-        unwrapped_idl_type = argument.idl_type.unwrap()
-        if "PassAsSpan" in argument.idl_type.effective_annotations:
-            return ("v8::Local<v8::Value>",
-                    make_v8_to_blink_value(
-                        blink_arg_name,
-                        "${{{}}}".format(v8_arg_name),
-                        argument.idl_type,
-                        argument=argument,
-                        error_exit_return_statement="return;",
-                        cg_context=cg_context))
-        if unwrapped_idl_type.is_interface or unwrapped_idl_type.is_sequence:
-            return ("v8::Local<v8::Value>" if unwrapped_idl_type.is_interface
-                    else "v8::Local<v8::Array>",
-                    make_v8_to_blink_value(
-                        blink_arg_name,
-                        "${{{}}}".format(v8_arg_name),
-                        argument.idl_type,
-                        argument=argument,
-                        error_exit_return_statement="return;",
-                        cg_context=cg_context))
-        else:
-            return (blink_type_info(argument.idl_type).value_t,
-                    S(blink_arg_name,
-                      "auto&& {} = {};".format(blink_arg_name, v8_arg_name)))
-
     arg_list = []
     for argument in function_like.arguments:
         if not (argument.index < argument_count):
@@ -2552,8 +2603,8 @@
                                           argument.identifier)
         v8_arg_name = name_style.arg_f("v8_arg{}_{}", argument.index + 1,
                                        argument.identifier)
-        v8_type, symbol_node = v8_type_and_symbol_node(argument, v8_arg_name,
-                                                       blink_arg_name)
+        v8_type, symbol_node = nadc_parameter_v8_type_and_symbol_node(
+            cg_context, argument, v8_arg_name, blink_arg_name)
 
         arg_list.append(
             ArgumentInfo(v8_type, v8_arg_name, blink_arg_name, symbol_node))
@@ -4513,7 +4564,15 @@
 
     T = TextNode
 
+    no_alloc_direct_call_count = sum(
+        map(lambda entry: bool(entry.attr_set_nadc_callback_name),
+            attribute_entries))
+    assert (no_alloc_direct_call_count == 0
+            or no_alloc_direct_call_count == len(attribute_entries))
+    no_alloc_direct_call_enabled = bool(no_alloc_direct_call_count)
+
     entry_nodes = []
+    attr_set_cfunctions = []
     pattern = ("{{"
                "\"{property_name}\", "
                "\"${{class_like.identifier}}\", "
@@ -4528,7 +4587,20 @@
                "{v8_side_effect}, "
                "{v8_cached_accessor}"
                "}},")
+    if no_alloc_direct_call_enabled:
+        pattern = "{{" + pattern + "{attr_set_nadc_callback_name}}},"
     for entry in attribute_entries:
+        # If no fast call callback exists for this function, we just pass "nullptr".
+        attr_set_nadc_callback_name = ""
+        if no_alloc_direct_call_enabled:
+            attr_set_nadc_callback_name = "k" + entry.attr_set_nadc_callback_name
+            attr_set_cfunctions.append(
+                FormatNode(
+                    "static const v8::CFunction {array_name}[] = "
+                    "{{v8::CFunctionBuilder().Fn({function_name}).Build()}};",
+                    function_name=entry.attr_set_nadc_callback_name,
+                    array_name=attr_set_nadc_callback_name))
+
         text = _format(
             pattern,
             property_name=entry.property_.identifier,
@@ -4549,12 +4621,17 @@
             v8_side_effect=_make_property_entry_v8_side_effect(
                 entry.property_),
             v8_cached_accessor=_make_property_entry_v8_cached_accessor(
-                entry.property_))
+                entry.property_),
+            attr_set_nadc_callback_name=attr_set_nadc_callback_name)
         entry_nodes.append(T(text))
 
     return ListNode([
-        T("static const IDLMemberInstaller::AttributeConfig " + table_name +
-          "[] = {"),
+        ListNode(attr_set_cfunctions),
+        FormatNode(
+            "static const IDLMemberInstaller::{config_name} {table_name}[] = {{",
+            config_name="NoAllocDirectCallAttributeConfig"
+            if no_alloc_direct_call_enabled else "AttributeConfig",
+            table_name=table_name),
         ListNode(entry_nodes),
         T("};"),
     ])
@@ -4659,10 +4736,9 @@
     T = TextNode
     F = FormatNode
 
-    no_alloc_direct_call_count = len(
-        list(
-            filter(lambda entry: entry.no_alloc_direct_call_callbacks,
-                   operation_entries)))
+    no_alloc_direct_call_count = sum(
+        map(lambda entry: bool(entry.no_alloc_direct_call_callbacks),
+            operation_entries))
     assert (no_alloc_direct_call_count == 0
             or no_alloc_direct_call_count == len(operation_entries))
     no_alloc_direct_call_enabled = bool(no_alloc_direct_call_count)
@@ -4805,14 +4881,17 @@
 
 class _PropEntryAttribute(_PropEntryBase):
     def __init__(self, is_context_dependent, exposure_conditional, world,
-                 attribute, attr_get_callback_name, attr_set_callback_name):
+                 attribute, attr_get_callback_name, attr_set_callback_name,
+                 attr_set_nadc_callback_name):
         assert isinstance(attr_get_callback_name, str)
         assert _is_none_or_str(attr_set_callback_name)
+        assert _is_none_or_str(attr_set_nadc_callback_name)
 
         _PropEntryBase.__init__(self, is_context_dependent,
                                 exposure_conditional, world, attribute)
         self.attr_get_callback_name = attr_get_callback_name
         self.attr_set_callback_name = attr_set_callback_name
+        self.attr_set_nadc_callback_name = attr_set_nadc_callback_name
 
 
 class _PropEntryConstant(_PropEntryBase):
@@ -4935,11 +5014,18 @@
     def process_attribute(attribute, is_context_dependent,
                           exposure_conditional, world):
         cgc_attr = cg_context.make_copy(attribute=attribute, for_world=world)
+        cgc = cgc_attr.make_copy(no_alloc_direct_call=True, attribute_set=True)
+
+        attr_set_nadc_callback_name, attr_set_nadc_callback_node = make_attribute_set_nadc_callback_def(
+            cgc)
+
         cgc = cgc_attr.make_copy(attribute_get=True)
         attr_get_callback_name = callback_function_name(cgc)
+
         attr_get_callback_node = make_attribute_get_callback_def(
             cgc, attr_get_callback_name)
         cgc = cgc_attr.make_copy(attribute_set=True)
+
         attr_set_callback_name = callback_function_name(cgc)
         attr_set_callback_node = make_attribute_set_callback_def(
             cgc, attr_set_callback_name)
@@ -4947,6 +5033,8 @@
             attr_set_callback_name = None
 
         callback_def_nodes.extend([
+            attr_set_nadc_callback_node,
+            EmptyNode(),
             attr_get_callback_node,
             EmptyNode(),
             attr_set_callback_node,
@@ -4960,7 +5048,8 @@
                 world=world,
                 attribute=attribute,
                 attr_get_callback_name=attr_get_callback_name,
-                attr_set_callback_name=attr_set_callback_name))
+                attr_set_callback_name=attr_set_callback_name,
+                attr_set_nadc_callback_name=attr_set_nadc_callback_name))
 
     def process_constant(constant, is_context_dependent, exposure_conditional,
                          world):
@@ -5818,8 +5907,20 @@
         pattern,
         install_func="IDLMemberInstaller::InstallAttributes",
         table_name=table_name)
-    install_properties(table_name, attribute_entries,
-                       _make_attribute_registration_table, installer_call_text)
+
+    entries = list(
+        filter(lambda entry: not entry.attr_set_nadc_callback_name,
+               attribute_entries))
+
+    install_properties(table_name, entries, _make_attribute_registration_table,
+                       installer_call_text)
+
+    entries = list(
+        filter(lambda entry: entry.attr_set_nadc_callback_name,
+               attribute_entries))
+
+    install_properties(table_name, entries, _make_attribute_registration_table,
+                       installer_call_text)
 
     table_name = "kConstantCallbackTable"
     installer_call_text = _format(
diff --git a/third_party/blink/renderer/bindings/scripts/validator/rules/supported_extended_attributes.py b/third_party/blink/renderer/bindings/scripts/validator/rules/supported_extended_attributes.py
index 8cbea39..427a6f5 100644
--- a/third_party/blink/renderer/bindings/scripts/validator/rules/supported_extended_attributes.py
+++ b/third_party/blink/renderer/bindings/scripts/validator/rules/supported_extended_attributes.py
@@ -152,7 +152,10 @@
           ],
           forms=F.IDENT),
         E("NewObject", applicable_to=[T.OPERATION]),
-        E("NoAllocDirectCall", applicable_to=[T.OPERATION]),
+        E("NoAllocDirectCall",
+          applicable_to=[T.ATTRIBUTE, T.OPERATION],
+          forms=[F.NO_ARGS, F.IDENT],
+          values=["Getter", "Setter"]),
         E("NodeWrapInOwnContext",
           applicable_to=[T.ATTRIBUTE, T.OPERATION, T.TYPE]),
         E("NotEnumerable", applicable_to=[T.ATTRIBUTE, T.OPERATION]),
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index 679005c..2bb0f079 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -579,6 +579,7 @@
     "testing/mock_hyphenation.h",
     "testing/mock_policy_container_host.cc",
     "testing/mock_policy_container_host.h",
+    "testing/nadc_attribute_test.h",
     "testing/null_execution_context.cc",
     "testing/null_execution_context.h",
     "testing/origin_trials_test.cc",
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc
index 9e162a6f..b58b017 100644
--- a/third_party/blink/renderer/core/animation/animation.cc
+++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -1271,14 +1271,7 @@
   ResolveTimelineOffsets(timeline_ ? timeline_->GetTimelineRange()
                                    : TimelineRange());
 
-  SetOutdated();
-
-  // 7. Run the procedure to update an animation’s finished state for animation
-  //    with the did seek flag set to false (continuous), and the synchronously
-  //    notify flag set to false (async).
-  UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync);
-
-  SetCompositorPending(CompositorPendingReason::kPendingEffectChange);
+  EffectInvalidated();
 
   // Notify of a potential state change.
   NotifyProbe();
@@ -2375,6 +2368,26 @@
           timeline()->IsMonotonicallyIncreasing(), boundary_aligned);
 }
 
+Animation::NativePaintWorkletReasons Animation::GetNativePaintWorkletReasons() {
+  if (native_paint_worklet_reasons_) {
+    return native_paint_worklet_reasons_.value();
+  }
+  NativePaintWorkletReasons reasons = kNoPaintWorklet;
+  if (KeyframeEffect* keyframe_effect = DynamicTo<KeyframeEffect>(effect())) {
+    if (RuntimeEnabledFeatures::CompositeBGColorAnimationEnabled() &&
+        keyframe_effect->Affects(
+            PropertyHandle(GetCSSPropertyBackgroundColor()))) {
+      reasons |= kBackgroundColorPaintWorklet;
+    }
+    if (RuntimeEnabledFeatures::CompositeClipPathAnimationEnabled() &&
+        keyframe_effect->Affects(PropertyHandle(GetCSSPropertyClipPath()))) {
+      reasons |= kClipPathPaintWorklet;
+    }
+  }
+  native_paint_worklet_reasons_ = reasons;
+  return reasons;
+}
+
 // TODO(crbug.com/960944): Rename to SetPendingCommit. This method handles both
 // composited and non-composited animations. The use of 'compositor' in the name
 // is confusing.
@@ -2833,7 +2846,7 @@
     // After updating the animation time if the animation is no longer current
     // blink will no longer composite the element (see
     // CompositingReasonFinder::RequiresCompositingFor*Animation).
-    if (!content_->IsCurrent()) {
+    if (!content_->IsCurrent() && HasActiveAnimationsOnCompositor()) {
       SetCompositorPending(CompositorPendingReason::kPendingCancel);
     }
   }
@@ -2874,6 +2887,9 @@
 }
 
 void Animation::EffectInvalidated() {
+  prior_native_paint_worklet_reasons_ = native_paint_worklet_reasons_;
+  native_paint_worklet_reasons_ = std::nullopt;
+
   SetOutdated();
   UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync);
   // FIXME: Needs to consider groups when added.
@@ -3381,15 +3397,22 @@
 }
 
 void Animation::UpdateCompositedPaintStatus() {
-  if (!NativePaintImageGenerator::NativePaintWorkletAnimationsEnabled()) {
-    return;
+  if (GetNativePaintWorkletReasons() == Animation::kNoPaintWorklet) {
+    if (!prior_native_paint_worklet_reasons_ ||
+        prior_native_paint_worklet_reasons_ == Animation::kNoPaintWorklet) {
+      return;
+    }
   }
 
+  prior_native_paint_worklet_reasons_ = GetNativePaintWorkletReasons();
+
   KeyframeEffect* keyframe_effect = DynamicTo<KeyframeEffect>(content_.Get());
   if (!keyframe_effect) {
     return;
   }
 
+  // TODO(crbug.com/383562308): If the target changed since the last update, we
+  // need to trigger an update for the previous and current target.
   Element* target = keyframe_effect->EffectTarget();
   if (!target) {
     return;
@@ -3398,14 +3421,7 @@
   ElementAnimations* element_animations = target->GetElementAnimations();
   DCHECK(element_animations);
 
-  if (RuntimeEnabledFeatures::CompositeBGColorAnimationEnabled()) {
-    element_animations->RecalcCompositedStatus(target,
-                                               GetCSSPropertyBackgroundColor());
-  }
-  if (RuntimeEnabledFeatures::CompositeClipPathAnimationEnabled()) {
-    element_animations->RecalcCompositedStatus(target,
-                                               GetCSSPropertyClipPath());
-  }
+  element_animations->RecalcCompositedStatus(target);
 }
 
 void Animation::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/animation/animation.h b/third_party/blink/renderer/core/animation/animation.h
index 61007d7..bc0a891 100644
--- a/third_party/blink/renderer/core/animation/animation.h
+++ b/third_party/blink/renderer/core/animation/animation.h
@@ -393,6 +393,15 @@
     start_time_ = start_time;
   }
 
+  enum NativePaintWorkletProperties {
+    kNoPaintWorklet = 0,
+    kBackgroundColorPaintWorklet = 1,
+    kClipPathPaintWorklet = 2
+  };
+
+  using NativePaintWorkletReasons = uint32_t;
+  NativePaintWorkletReasons GetNativePaintWorkletReasons();
+
  protected:
   DispatchEventResult DispatchEventInternal(Event&) override;
   void AddedEventListener(const AtomicString& event_type,
@@ -583,6 +592,13 @@
 
   Member<Event> pending_remove_event_;
 
+  // Cache whether animation can potentially have native paint worklets.
+  // In the event of the keyframes changing, we need a new evaluation, of
+  // the composited status for native paint worklet eligible properties.
+  // A change in the playState can also necessitate a composited style update.
+  std::optional<NativePaintWorkletReasons> native_paint_worklet_reasons_;
+  std::optional<NativePaintWorkletReasons> prior_native_paint_worklet_reasons_;
+
   // TODO(crbug.com/960944): Consider reintroducing kPause and cleanup use of
   // mutually exclusive pending_play_ and pending_pause_ flags.
   enum class CompositorAction { kNone, kStart, kCancel };
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc
index b60c729..449ce33 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.cc
+++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -356,8 +356,7 @@
   StringKeyframeVector keyframes;
   const HeapVector<Member<StyleRuleKeyframe>>& style_keyframes =
       keyframes_rule->Keyframes();
-  for (wtf_size_t i = 0; i < style_keyframes.size(); ++i) {
-    const StyleRuleKeyframe* style_keyframe = style_keyframes[i].Get();
+  for (const StyleRuleKeyframe* style_keyframe : style_keyframes) {
     auto* keyframe = MakeGarbageCollected<StringKeyframe>(tree_scope);
     const Vector<KeyframeOffset>& offsets = style_keyframe->Keys();
     DCHECK(!offsets.empty());
@@ -365,9 +364,7 @@
     has_named_range_keyframes |= SetOffsets(*keyframe, offsets[0]);
     keyframe->SetEasing(default_timing_function);
     const CSSPropertyValueSet& properties = style_keyframe->Properties();
-    for (unsigned j = 0; j < properties.PropertyCount(); j++) {
-      CSSPropertyValueSet::PropertyReference property_reference =
-          properties.PropertyAt(j);
+    for (const CSSPropertyValue& property_reference : properties.Properties()) {
       CSSPropertyRef ref(property_reference.Name(), document);
       const CSSProperty& property = ref.GetProperty();
       if (property.PropertyID() == CSSPropertyID::kAnimationComposition) {
diff --git a/third_party/blink/renderer/core/animation/element_animations.cc b/third_party/blink/renderer/core/animation/element_animations.cc
index ca2864f..b1f3b32 100644
--- a/third_party/blink/renderer/core/animation/element_animations.cc
+++ b/third_party/blink/renderer/core/animation/element_animations.cc
@@ -97,43 +97,59 @@
     Element& element,
     AnimationEffect* effect) {
   if (KeyframeEffect* keyframe_effect = DynamicTo<KeyframeEffect>(effect)) {
-    if (CompositedBackgroundColorStatus() ==
-            ElementAnimations::CompositedPaintStatus::kComposited &&
-        keyframe_effect->Affects(
-            PropertyHandle(GetCSSPropertyBackgroundColor())) &&
-        element.GetLayoutObject()) {
-      SetCompositedBackgroundColorStatus(
-          ElementAnimations::CompositedPaintStatus::kNeedsRepaint);
-      element.GetLayoutObject()->SetShouldDoFullPaintInvalidation();
+    if (RuntimeEnabledFeatures::CompositeBGColorAnimationEnabled()) {
+      if (CompositedBackgroundColorStatus() ==
+              ElementAnimations::CompositedPaintStatus::kComposited &&
+          keyframe_effect->Affects(
+              PropertyHandle(GetCSSPropertyBackgroundColor())) &&
+          element.GetLayoutObject()) {
+        SetCompositedBackgroundColorStatus(
+            ElementAnimations::CompositedPaintStatus::kNeedsRepaint);
+        element.GetLayoutObject()->SetShouldDoFullPaintInvalidation();
+      }
     }
 
-    if (CompositedClipPathStatus() ==
-            ElementAnimations::CompositedPaintStatus::kComposited &&
-        keyframe_effect->Affects(PropertyHandle(GetCSSPropertyClipPath())) &&
-        element.GetLayoutObject()) {
-      SetCompositedClipPathStatus(
-          ElementAnimations::CompositedPaintStatus::kNeedsRepaint);
-      element.GetLayoutObject()->SetShouldDoFullPaintInvalidation();
-      // For clip paths, we also need to update the paint properties to switch
-      // from path based to mask based clip.
-      element.GetLayoutObject()->SetNeedsPaintPropertyUpdate();
+    if (RuntimeEnabledFeatures::CompositeClipPathAnimationEnabled()) {
+      if (CompositedClipPathStatus() ==
+              ElementAnimations::CompositedPaintStatus::kComposited &&
+          keyframe_effect->Affects(PropertyHandle(GetCSSPropertyClipPath())) &&
+          element.GetLayoutObject()) {
+        SetCompositedClipPathStatus(
+            ElementAnimations::CompositedPaintStatus::kNeedsRepaint);
+        element.GetLayoutObject()->SetShouldDoFullPaintInvalidation();
+        // For clip paths, we also need to update the paint properties to switch
+        // from path based to mask based clip.
+        element.GetLayoutObject()->SetNeedsPaintPropertyUpdate();
+      }
     }
   }
 }
 
-void ElementAnimations::RecalcCompositedStatus(Element* element,
-                                               const CSSProperty& property) {
-  ElementAnimations::CompositedPaintStatus status =
-      HasAnimationForProperty(property)
-          ? ElementAnimations::CompositedPaintStatus::kNeedsRepaint
-          : ElementAnimations::CompositedPaintStatus::kNoAnimation;
+void ElementAnimations::RecalcCompositedStatus(Element* element) {
+  Animation::NativePaintWorkletReasons reasons = Animation::kNoPaintWorklet;
+  for (auto& entry : Animations()) {
+    if (entry.key->CalculateAnimationPlayState() ==
+        V8AnimationPlayState::Enum::kIdle) {
+      continue;
+    }
+    reasons |= entry.key->GetNativePaintWorkletReasons();
+  }
 
-  if (property.PropertyID() == CSSPropertyID::kBackgroundColor) {
+  if (RuntimeEnabledFeatures::CompositeBGColorAnimationEnabled()) {
+    ElementAnimations::CompositedPaintStatus status =
+        reasons & Animation::kBackgroundColorPaintWorklet
+            ? ElementAnimations::CompositedPaintStatus::kNeedsRepaint
+            : ElementAnimations::CompositedPaintStatus::kNoAnimation;
     if (SetCompositedBackgroundColorStatus(status) &&
         element->GetLayoutObject()) {
       element->GetLayoutObject()->SetShouldDoFullPaintInvalidation();
     }
-  } else if (property.PropertyID() == CSSPropertyID::kClipPath) {
+  }
+  if (RuntimeEnabledFeatures::CompositeClipPathAnimationEnabled()) {
+    ElementAnimations::CompositedPaintStatus status =
+        reasons & Animation::kClipPathPaintWorklet
+            ? ElementAnimations::CompositedPaintStatus::kNeedsRepaint
+            : ElementAnimations::CompositedPaintStatus::kNoAnimation;
     if (SetCompositedClipPathStatus(status) && element->GetLayoutObject()) {
       element->GetLayoutObject()->SetShouldDoFullPaintInvalidation();
       // For clip paths, we also need to update the paint properties to switch
diff --git a/third_party/blink/renderer/core/animation/element_animations.h b/third_party/blink/renderer/core/animation/element_animations.h
index 624f542..3171061 100644
--- a/third_party/blink/renderer/core/animation/element_animations.h
+++ b/third_party/blink/renderer/core/animation/element_animations.h
@@ -120,7 +120,7 @@
 
   void RecalcCompositedStatusForKeyframeChange(Element& element,
                                                AnimationEffect* effect);
-  void RecalcCompositedStatus(Element* element, const CSSProperty& property);
+  void RecalcCompositedStatus(Element* element);
 
   // TODO(crbug.com/1301961): Consider converting to an array or flat map of
   // fields for paint properties that can be composited.
diff --git a/third_party/blink/renderer/core/animation/string_keyframe.cc b/third_party/blink/renderer/core/animation/string_keyframe.cc
index 8afb039d..701efaac 100644
--- a/third_party/blink/renderer/core/animation/string_keyframe.cc
+++ b/third_party/blink/renderer/core/animation/string_keyframe.cc
@@ -101,11 +101,11 @@
     // Logical shorthands to not directly map to physical shorthands. Determine
     // if the shorthand is for a logical property by checking the first
     // longhand.
-    if (property_value_set->PropertyCount()) {
-      CSSPropertyValueSet::PropertyReference reference =
-          property_value_set->PropertyAt(0);
-      if (IsLogicalProperty(reference.Id()))
+    if (!property_value_set->IsEmpty()) {
+      const CSSPropertyValue& reference = property_value_set->PropertyAt(0);
+      if (IsLogicalProperty(reference.PropertyID())) {
         is_logical = true;
+      }
     }
   } else {
     is_logical = IsLogicalProperty(property_id);
@@ -175,9 +175,8 @@
   EnsureCssPropertyMap();
   PropertyHandleSet properties;
 
-  for (unsigned i = 0; i < css_property_map_->PropertyCount(); ++i) {
-    CSSPropertyValueSet::PropertyReference property_reference =
-        css_property_map_->PropertyAt(i);
+  for (const CSSPropertyValue& property_reference :
+       css_property_map_->Properties()) {
     const CSSPropertyName& name = property_reference.Name();
     DCHECK(!name.IsCustomProperty() ||
            !CSSProperty::Get(name.Id()).IsShorthand())
@@ -186,10 +185,10 @@
     properties.insert(PropertyHandle(name));
   }
 
-  for (unsigned i = 0; i < presentation_attribute_map_->PropertyCount(); ++i) {
-    properties.insert(PropertyHandle(
-        CSSProperty::Get(presentation_attribute_map_->PropertyAt(i).Id()),
-        true));
+  for (const CSSPropertyValue& property :
+       presentation_attribute_map_->Properties()) {
+    properties.insert(
+        PropertyHandle(CSSProperty::Get(property.PropertyID()), true));
   }
 
   for (auto* const key : svg_attribute_map_.Keys())
@@ -434,11 +433,10 @@
     if (is_logical_) {
       // Walk set of properties converting each property name to its
       // corresponding physical property.
-      for (unsigned i = 0; i < css_property_value_set_->PropertyCount(); i++) {
-        CSSPropertyValueSet::PropertyReference reference =
-            css_property_value_set_->PropertyAt(i);
-        SetProperty(property_value_set, reference.Id(), reference.Value(),
-                    writing_direction);
+      for (const CSSPropertyValue& reference :
+           css_property_value_set_->Properties()) {
+        SetProperty(property_value_set, reference.PropertyID(),
+                    reference.Value(), writing_direction);
       }
     } else {
       property_value_set->MergeAndOverrideOnConflict(css_property_value_set_);
diff --git a/third_party/blink/renderer/core/css/css_keyframe_shorthand_value.cc b/third_party/blink/renderer/core/css/css_keyframe_shorthand_value.cc
index 9941eb40..b3489714 100644
--- a/third_party/blink/renderer/core/css/css_keyframe_shorthand_value.cc
+++ b/third_party/blink/renderer/core/css/css_keyframe_shorthand_value.cc
@@ -35,8 +35,8 @@
 String CSSKeyframeShorthandValue::CustomCSSText() const {
 #if DCHECK_IS_ON()
   // Check that all property/value pairs belong to the same shorthand.
-  for (unsigned i = 0; i < properties_->PropertyCount(); i++) {
-    DCHECK(ShorthandMatches(shorthand_, properties_->PropertyAt(i).Id()))
+  for (const CSSPropertyValue& property : properties_->Properties()) {
+    DCHECK(ShorthandMatches(shorthand_, property.PropertyID()))
         << "These are not the longhands you're looking for.";
   }
 #endif
diff --git a/third_party/blink/renderer/core/css/css_property_value.cc b/third_party/blink/renderer/core/css/css_property_value.cc
index 86fd249..4e3c263 100644
--- a/third_party/blink/renderer/core/css/css_property_value.cc
+++ b/third_party/blink/renderer/core/css/css_property_value.cc
@@ -29,30 +29,14 @@
 namespace blink {
 
 struct SameSizeAsCSSPropertyValue {
-  uint32_t bitfields;
   void* property;
+  uint32_t bitfields;
   Member<void*> value;
 };
 
 ASSERT_SIZE(CSSPropertyValue, SameSizeAsCSSPropertyValue);
 
-CSSPropertyValueMetadata::CSSPropertyValueMetadata(
-    const CSSPropertyName& name,
-    bool is_set_from_shorthand,
-    int index_in_shorthands_vector,
-    bool important,
-    bool implicit)
-    : property_id_(static_cast<unsigned>(name.Id())),
-      is_set_from_shorthand_(is_set_from_shorthand),
-      index_in_shorthands_vector_(index_in_shorthands_vector),
-      important_(important),
-      implicit_(implicit) {
-  if (name.IsCustomProperty()) {
-    custom_name_ = name.ToAtomicString();
-  }
-}
-
-CSSPropertyID CSSPropertyValueMetadata::ShorthandID() const {
+CSSPropertyID CSSPropertyValue::ShorthandID() const {
   if (!is_set_from_shorthand_) {
     return CSSPropertyID::kInvalid;
   }
@@ -65,7 +49,7 @@
   return shorthands.at(index_in_shorthands_vector_).id();
 }
 
-CSSPropertyName CSSPropertyValueMetadata::Name() const {
+CSSPropertyName CSSPropertyValue::Name() const {
   if (PropertyID() != CSSPropertyID::kVariable) {
     return CSSPropertyName(PropertyID());
   }
diff --git a/third_party/blink/renderer/core/css/css_property_value.h b/third_party/blink/renderer/core/css/css_property_value.h
index f1c459f..c0b8b5b 100644
--- a/third_party/blink/renderer/core/css/css_property_value.h
+++ b/third_party/blink/renderer/core/css/css_property_value.h
@@ -30,35 +30,6 @@
 
 namespace blink {
 
-struct CORE_EXPORT CSSPropertyValueMetadata {
-  DISALLOW_NEW();
-  CSSPropertyValueMetadata() = default;
-
-  CSSPropertyValueMetadata(const CSSPropertyName&,
-                           bool is_set_from_shorthand,
-                           int index_in_shorthands_vector,
-                           bool important,
-                           bool implicit);
-
-  CSSPropertyID ShorthandID() const;
-  CSSPropertyID PropertyID() const {
-    return ConvertToCSSPropertyID(property_id_);
-  }
-
-  CSSPropertyName Name() const;
-
-  AtomicString custom_name_;
-  unsigned property_id_ : kCSSPropertyIDBitLength;
-  unsigned is_set_from_shorthand_ : 1;
-  // If this property was set as part of an ambiguous shorthand, gives the index
-  // in the shorthands vector.
-  unsigned index_in_shorthands_vector_ : 2;
-  unsigned important_ : 1;
-  // Whether or not the property was set implicitly as the result of a
-  // shorthand.
-  unsigned implicit_ : 1;
-};
-
 class CORE_EXPORT CSSPropertyValue {
   DISALLOW_NEW();
 
@@ -69,44 +40,63 @@
                    bool is_set_from_shorthand = false,
                    int index_in_shorthands_vector = 0,
                    bool implicit = false)
-      : metadata_(name,
-                  is_set_from_shorthand,
-                  index_in_shorthands_vector,
-                  important,
-                  implicit),
-        value_(value, decltype(value_)::AtomicInitializerTag{}) {}
+      : property_id_(static_cast<unsigned>(name.Id())),
+        is_set_from_shorthand_(is_set_from_shorthand),
+        index_in_shorthands_vector_(index_in_shorthands_vector),
+        important_(important),
+        implicit_(implicit),
+        value_(value, decltype(value_)::AtomicInitializerTag{}) {
+    if (name.IsCustomProperty()) {
+      custom_name_ = name.ToAtomicString();
+    }
+  }
 
   CSSPropertyValue(const CSSPropertyValue& other)
-      : metadata_(other.metadata_),
+      : custom_name_(other.custom_name_),
+        property_id_(other.property_id_),
+        is_set_from_shorthand_(other.is_set_from_shorthand_),
+        index_in_shorthands_vector_(other.index_in_shorthands_vector_),
+        important_(other.important_),
+        implicit_(other.implicit_),
         value_(other.value_.Get(), decltype(value_)::AtomicInitializerTag{}) {}
   CSSPropertyValue& operator=(const CSSPropertyValue& other) = default;
 
-  // FIXME: Remove this.
-  CSSPropertyValue(CSSPropertyValueMetadata metadata, const CSSValue& value)
-      : metadata_(metadata),
-        value_(value, decltype(value_)::AtomicInitializerTag{}) {}
-
-  CSSPropertyID Id() const { return metadata_.PropertyID(); }
-  const AtomicString& CustomPropertyName() const {
-    DCHECK_EQ(Id(), CSSPropertyID::kVariable);
-    return metadata_.custom_name_;
+  CSSPropertyID PropertyID() const {
+    return ConvertToCSSPropertyID(property_id_);
   }
-  bool IsSetFromShorthand() const { return metadata_.is_set_from_shorthand_; }
-  CSSPropertyID ShorthandID() const { return metadata_.ShorthandID(); }
-  bool IsImportant() const { return metadata_.important_; }
-  void SetImportant() { metadata_.important_ = true; }
-  CSSPropertyName Name() const { return metadata_.Name(); }
+  const AtomicString& CustomPropertyName() const {
+    DCHECK_EQ(PropertyID(), CSSPropertyID::kVariable);
+    return custom_name_;
+  }
+  bool IsSetFromShorthand() const { return is_set_from_shorthand_; }
+  CSSPropertyID ShorthandID() const;
+  bool IsImportant() const { return important_; }
+  void SetImportant() { important_ = true; }
+  bool IsImplicit() const { return implicit_; }
+  bool IsAffectedByAll() const {
+    return PropertyID() != CSSPropertyID::kVariable &&
+           CSSProperty::Get(PropertyID()).IsAffectedByAll();
+  }
+  CSSPropertyName Name() const;
 
-  const CSSValue* Value() const { return value_.Get(); }
-
-  const CSSPropertyValueMetadata& Metadata() const { return metadata_; }
+  const CSSValue& Value() const { return *value_; }
 
   bool operator==(const CSSPropertyValue& other) const;
 
   void Trace(Visitor* visitor) const { visitor->Trace(value_); }
 
  private:
-  CSSPropertyValueMetadata metadata_;
+  AtomicString custom_name_;
+  unsigned property_id_ : kCSSPropertyIDBitLength;
+  unsigned is_set_from_shorthand_ : 1;
+  // If this property was set as part of an ambiguous shorthand, gives the index
+  // in the shorthands vector.
+  unsigned index_in_shorthands_vector_ : 2;
+  unsigned important_ : 1;
+  // Whether or not the property was set implicitly as the result of a
+  // shorthand.
+  unsigned implicit_ : 1;
+  // 17 free bits here.
   Member<const CSSValue> value_;
 };
 
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.cc b/third_party/blink/renderer/core/css/css_property_value_set.cc
index 5ad63c4..5e2ac6f 100644
--- a/third_party/blink/renderer/core/css/css_property_value_set.cc
+++ b/third_party/blink/renderer/core/css/css_property_value_set.cc
@@ -43,10 +43,7 @@
 static AdditionalBytes
 AdditionalBytesForImmutableCSSPropertyValueSetWithPropertyCount(
     unsigned count) {
-  return AdditionalBytes(
-      base::bits::AlignUp(sizeof(Member<CSSValue>) * count,
-                          alignof(CSSPropertyValueMetadata)) +
-      sizeof(CSSPropertyValueMetadata) * count);
+  return AdditionalBytes(sizeof(CSSPropertyValue) * count);
 }
 
 ImmutableCSSPropertyValueSet* ImmutableCSSPropertyValueSet::Create(
@@ -76,14 +73,11 @@
 unsigned CSSPropertyValueSet::ComputeHash() const {
   unsigned hash = 3141592653;
 
-  const unsigned num_properties = PropertyCount();
-  for (unsigned i = 0; i < num_properties; ++i) {
-    const PropertyReference property = PropertyAt(i);
-
-    if (property.Id() == CSSPropertyID::kVariable) {
+  for (const CSSPropertyValue& property : Properties()) {
+    if (property.PropertyID() == CSSPropertyID::kVariable) {
       WTF::AddIntToHash(hash, property.Name().ToAtomicString().Hash());
     } else {
-      WTF::AddIntToHash(hash, static_cast<unsigned>(property.Id()));
+      WTF::AddIntToHash(hash, static_cast<unsigned>(property.PropertyID()));
     }
     WTF::AddIntToHash(hash, property.IsImportant());
     WTF::AddIntToHash(hash, property.Value().Hash());
@@ -101,22 +95,6 @@
   return hash;
 }
 
-bool CSSPropertyValueSet::ContentsEqual(
-    const CSSPropertyValueSet& other) const {
-  const unsigned num_properties = PropertyCount();
-  if (num_properties != other.PropertyCount()) {
-    return false;
-  }
-
-  for (unsigned i = 0; i < num_properties; ++i) {
-    if (!(PropertyAt(i) == other.PropertyAt(i))) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
 MutableCSSPropertyValueSet::MutableCSSPropertyValueSet(
     CSSParserMode css_parser_mode)
     : CSSPropertyValueSet(css_parser_mode) {}
@@ -127,7 +105,8 @@
   property_vector_.ReserveInitialCapacity(properties.size());
   for (const CSSPropertyValue& property : properties) {
     property_vector_.UncheckedAppend(property);
-    may_have_logical_properties_ |= kLogicalGroupProperties.Has(property.Id());
+    may_have_logical_properties_ |=
+        kLogicalGroupProperties.Has(property.PropertyID());
   }
 }
 
@@ -143,20 +122,15 @@
     // SAFETY: By funneling all allocation of ImmutableCSSPropertyValueSet
     // through Create(), we guarantee that the arrays will have storage where we
     // expect.
-    UNSAFE_BUFFERS(base::span<CSSPropertyValueMetadata> metadata_array(
-        const_cast<CSSPropertyValueMetadata*>(MetadataArrayBase()),
-        array_size_));
-    UNSAFE_BUFFERS(base::span<Member<const CSSValue>> value_array(
-        const_cast<Member<const CSSValue>*>(ValueArrayBase()), array_size_));
+    UNSAFE_BUFFERS(base::span<CSSPropertyValue> array(
+        const_cast<CSSPropertyValue*>(ArrayBase()), array_size_));
     for (unsigned i = 0; i < array_size_; ++i) {
-      new (&metadata_array[i]) CSSPropertyValueMetadata();
-      metadata_array[i] = properties[i].Metadata();
-      value_array[i] = properties[i].Value();
+      new (&array[i]) CSSPropertyValue(properties[i]);
     }
   }
 }
 
-// Convert property into an uint16_t for comparison with metadata's property id
+// Convert property into an uint16_t for comparison with property's ID
 // to avoid the compiler converting it to an int multiple times in a loop.
 static uint16_t GetConvertedCSSPropertyID(CSSPropertyID property_id) {
   return static_cast<uint16_t>(property_id);
@@ -171,11 +145,11 @@
       AtRuleDescriptorIDAsCSSPropertyID(descriptor_id));
 }
 
-static bool IsPropertyMatch(const CSSPropertyValueMetadata& metadata,
+static bool IsPropertyMatch(const CSSPropertyValue& property,
                             uint16_t id,
                             CSSPropertyID property_id) {
   DCHECK_EQ(id, static_cast<uint16_t>(property_id));
-  bool result = static_cast<uint16_t>(metadata.PropertyID()) == id;
+  bool result = static_cast<uint16_t>(property.PropertyID()) == id;
 // Only enabled properties except kInternalFontSizeDelta should be part of the
 // style.
 // TODO(hjkim3323@gmail.com): Remove kInternalFontSizeDelta bypassing hack
@@ -186,26 +160,26 @@
   return result;
 }
 
-static bool IsPropertyMatch(const CSSPropertyValueMetadata& metadata,
+static bool IsPropertyMatch(const CSSPropertyValue& property,
                             uint16_t id,
                             const AtomicString& custom_property_name) {
   DCHECK_EQ(id, static_cast<uint16_t>(CSSPropertyID::kVariable));
-  return metadata.Name() == CSSPropertyName(custom_property_name);
+  return property.Name() == CSSPropertyName(custom_property_name);
 }
 
-static bool IsPropertyMatch(const CSSPropertyValueMetadata& metadata,
+static bool IsPropertyMatch(const CSSPropertyValue& property,
                             uint16_t id,
                             AtRuleDescriptorID descriptor_id) {
-  return IsPropertyMatch(metadata, id,
+  return IsPropertyMatch(property, id,
                          AtRuleDescriptorIDAsCSSPropertyID(descriptor_id));
 }
 
 template <typename T>
 int ImmutableCSSPropertyValueSet::FindPropertyIndex(const T& property) const {
   uint16_t id = GetConvertedCSSPropertyID(property);
-  const base::span<const CSSPropertyValueMetadata> metadata = MetadataArray();
+  const base::span<const CSSPropertyValue> properties = Properties();
   for (size_t n = array_size_; n; --n) {
-    if (IsPropertyMatch(metadata[n - 1], id, property)) {
+    if (IsPropertyMatch(properties[n - 1], id, property)) {
       return static_cast<int>(n - 1);
     }
   }
@@ -221,7 +195,7 @@
 
 void ImmutableCSSPropertyValueSet::TraceAfterDispatch(
     blink::Visitor* visitor) const {
-  for (const auto value : ValueArray()) {
+  for (const CSSPropertyValue& value : Properties()) {
     visitor->Trace(value);
   }
   CSSPropertyValueSet::TraceAfterDispatch(visitor);
@@ -237,12 +211,10 @@
         other_mutable_property_set->may_have_logical_properties_;
   } else {
     property_vector_.ReserveInitialCapacity(other.PropertyCount());
-    for (unsigned i = 0; i < other.PropertyCount(); ++i) {
-      PropertyReference property = other.PropertyAt(i);
-      property_vector_.UncheckedAppend(
-          CSSPropertyValue(property.PropertyMetadata(), property.Value()));
+    for (const CSSPropertyValue& property : other.Properties()) {
+      property_vector_.UncheckedAppend(CSSPropertyValue(property));
       may_have_logical_properties_ |=
-          kLogicalGroupProperties.Has(property.Id());
+          kLogicalGroupProperties.Has(property.PropertyID());
     }
   }
 }
@@ -536,7 +508,7 @@
           static_cast<int>(to_replace - property_vector_.data());
       for (int n = property_vector_.size() - 1; n > to_replace_index; --n) {
         if (prop.IsInSameLogicalPropertyGroupWithDifferentMappingLogic(
-                PropertyAt(n).Id())) {
+                PropertyAt(n).PropertyID())) {
           RemovePropertyAtIndex(to_replace_index, nullptr);
           return nullptr;
         }
@@ -548,7 +520,7 @@
 
 MutableCSSPropertyValueSet::SetResult
 MutableCSSPropertyValueSet::SetLonghandProperty(CSSPropertyValue property) {
-  const CSSPropertyID id = property.Id();
+  const CSSPropertyID id = property.PropertyID();
   DCHECK_EQ(shorthandForProperty(id).length(), 0u)
       << CSSProperty::Get(id).GetPropertyNameString() << " is a shorthand";
   CSSPropertyValue* to_replace;
@@ -619,11 +591,11 @@
 
 MutableCSSPropertyValueSet::SetResult
 MutableCSSPropertyValueSet::AddParsedProperties(
-    const HeapVector<CSSPropertyValue, 64>& properties) {
+    base::span<CSSPropertyValue> properties) {
   SetResult changed = kUnchanged;
   property_vector_.reserve(property_vector_.size() + properties.size());
-  for (unsigned i = 0; i < properties.size(); ++i) {
-    changed = std::max(changed, SetLonghandProperty(properties[i]));
+  for (const CSSPropertyValue& property : properties) {
+    changed = std::max(changed, SetLonghandProperty(property));
   }
   return changed;
 }
@@ -631,7 +603,7 @@
 bool MutableCSSPropertyValueSet::AddRespectingCascade(
     const CSSPropertyValue& property) {
   // Only add properties that have no !important counterpart present
-  if (!PropertyIsImportant(property.Id()) || property.IsImportant()) {
+  if (!PropertyIsImportant(property.PropertyID()) || property.IsImportant()) {
     return SetLonghandProperty(property);
   }
   return false;
@@ -643,18 +615,14 @@
 
 void MutableCSSPropertyValueSet::MergeAndOverrideOnConflict(
     const CSSPropertyValueSet* other) {
-  unsigned size = other->PropertyCount();
-  for (unsigned n = 0; n < size; ++n) {
-    PropertyReference to_merge = other->PropertyAt(n);
-    SetLonghandProperty(
-        CSSPropertyValue(to_merge.PropertyMetadata(), to_merge.Value()));
+  for (const CSSPropertyValue& property : other->Properties()) {
+    SetLonghandProperty(property);
   }
 }
 
 bool CSSPropertyValueSet::HasFailedOrCanceledSubresources() const {
-  unsigned size = PropertyCount();
-  for (unsigned i = 0; i < size; ++i) {
-    if (PropertyAt(i).Value().HasFailedOrCanceledSubresources()) {
+  for (const CSSPropertyValue& property : Properties()) {
+    if (property.Value().HasFailedOrCanceledSubresources()) {
       return true;
     }
   }
@@ -688,7 +656,7 @@
   unsigned new_index = 0;
   for (unsigned old_index = 0; old_index < old_size; ++old_index) {
     const CSSPropertyValue& property = properties[old_index];
-    if (ContainsId(set, property.Id())) {
+    if (ContainsId(set, property.PropertyID())) {
       continue;
     }
     // Modify property_vector_ in-place since this method is
@@ -725,30 +693,28 @@
   Vector<CSSPropertyID> properties_to_remove;
   unsigned size = property_vector_.size();
   for (unsigned i = 0; i < size; ++i) {
-    PropertyReference property = PropertyAt(i);
-    if (style->PropertyMatches(property.Id(), property.Value())) {
-      properties_to_remove.push_back(property.Id());
+    const CSSPropertyValue& property = PropertyAt(i);
+    if (style->PropertyMatches(property.PropertyID(), property.Value())) {
+      properties_to_remove.push_back(property.PropertyID());
     }
   }
   // FIXME: This should use mass removal.
-  for (unsigned i = 0; i < properties_to_remove.size(); ++i) {
-    RemoveProperty(properties_to_remove[i]);
+  for (CSSPropertyID id : properties_to_remove) {
+    RemoveProperty(id);
   }
 }
 
 void MutableCSSPropertyValueSet::RemoveEquivalentProperties(
     const CSSStyleDeclaration* style) {
   Vector<CSSPropertyID> properties_to_remove;
-  unsigned size = property_vector_.size();
-  for (unsigned i = 0; i < size; ++i) {
-    PropertyReference property = PropertyAt(i);
-    if (style->CssPropertyMatches(property.Id(), property.Value())) {
-      properties_to_remove.push_back(property.Id());
+  for (const CSSPropertyValue& property : property_vector_) {
+    if (style->CssPropertyMatches(property.PropertyID(), property.Value())) {
+      properties_to_remove.push_back(property.PropertyID());
     }
   }
   // FIXME: This should use mass removal.
-  for (unsigned i = 0; i < properties_to_remove.size(); ++i) {
-    RemoveProperty(properties_to_remove[i]);
+  for (CSSPropertyID id : properties_to_remove) {
+    RemoveProperty(id);
   }
 }
 
@@ -804,7 +770,7 @@
   auto it = std::find_if(
       property_vector_.begin(), property_vector_.end(),
       [property, id](const CSSPropertyValue& css_property) -> bool {
-        return IsPropertyMatch(css_property.Metadata(), id, property);
+        return IsPropertyMatch(css_property, id, property);
       });
   return (it == property_vector_.end()) ? nullptr : &*it;
 }
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.h b/third_party/blink/renderer/core/css/css_property_value_set.h
index 31ce442..8cfac35 100644
--- a/third_party/blink/renderer/core/css/css_property_value_set.h
+++ b/third_party/blink/renderer/core/css/css_property_value_set.h
@@ -54,50 +54,11 @@
 
   void FinalizeGarbageCollectedObject();
 
-  class PropertyReference {
-    STACK_ALLOCATED();
-
-   public:
-    PropertyReference(const CSSPropertyValueSet& property_set, unsigned index)
-        : property_set_(&property_set), index_(index) {}
-
-    CSSPropertyID Id() const {
-      return static_cast<CSSPropertyID>(PropertyMetadata().PropertyID());
-    }
-    CSSPropertyID ShorthandID() const {
-      return PropertyMetadata().ShorthandID();
-    }
-
-    CSSPropertyName Name() const { return PropertyMetadata().Name(); }
-
-    bool IsImportant() const { return PropertyMetadata().important_; }
-    bool IsImplicit() const { return PropertyMetadata().implicit_; }
-    bool IsAffectedByAll() const {
-      return Id() != CSSPropertyID::kVariable &&
-             CSSProperty::Get(Id()).IsAffectedByAll();
-    }
-
-    const CSSValue& Value() const { return PropertyValue(); }
-
-    const CSSPropertyValueMetadata& PropertyMetadata() const;
-
-    bool operator==(const PropertyReference& other) const {
-      return Name() == other.Name() && IsImportant() == other.IsImportant() &&
-             Value() == other.Value();
-    }
-
-   private:
-    const CSSValue& PropertyValue() const;
-
-    const CSSPropertyValueSet* property_set_;
-    unsigned index_;
-  };
-
   unsigned PropertyCount() const;
   bool IsEmpty() const;
-  PropertyReference PropertyAt(unsigned index) const {
-    return PropertyReference(*this, index);
-  }
+
+  const CSSPropertyValue& PropertyAt(unsigned index) const;
+  base::span<const CSSPropertyValue> Properties() const;
 
   template <typename T>  // CSSPropertyID or AtomicString
   int FindPropertyIndex(const T& property) const;
@@ -183,7 +144,7 @@
     if (this == &other) {
       return true;
     }
-    return ContentsEqual(other);
+    return Properties() == other.Properties();
   }
 
   bool HasFailedOrCanceledSubresources() const;
@@ -200,7 +161,7 @@
   void TraceAfterDispatch(blink::Visitor* visitor) const {}
 
  protected:
-  enum { kMaxArraySize = (1 << 27) - 1 };
+  static constexpr unsigned kMaxArraySize = (1 << 25) - 1;
 
   explicit CSSPropertyValueSet(CSSParserMode css_parser_mode)
       : array_size_(0),
@@ -221,12 +182,12 @@
         contains_cursor_hand_(contains_cursor_hand) {}
 
   unsigned ComputeHash() const;
-  bool ContentsEqual(const CSSPropertyValueSet& other) const;
 
-  const uint32_t array_size_ : 26;
+  const uint32_t array_size_ : 25;  // Only for immutable sets.
   const uint32_t css_parser_mode_ : 4;
   const uint32_t is_mutable_ : 1;
   const uint32_t contains_cursor_hand_ : 1;
+  uint32_t may_have_logical_properties_ : 1 = false;  // Only for mutable sets.
 
   // EmptyValue() means “not computed yet”. DeletedValue() means “invalid”
   // (see GetHash()).
@@ -246,9 +207,8 @@
   virtual void Trace(Visitor*) const;
 };
 
-class CORE_EXPORT alignas(std::max(alignof(Member<const CSSValue>),
-                                   alignof(CSSPropertyValueMetadata)))
-    ImmutableCSSPropertyValueSet : public CSSPropertyValueSet {
+class CORE_EXPORT alignas(CSSPropertyName) ImmutableCSSPropertyValueSet
+    : public CSSPropertyValueSet {
  public:
   // The value and metadata arrays are allocated in-line with the containing
   // ImmutableCSSPropertyValueSet. In order to guarantee safety when accessing
@@ -268,8 +228,7 @@
 
   unsigned PropertyCount() const { return array_size_; }
 
-  base::span<const Member<const CSSValue>> ValueArray() const;
-  base::span<const CSSPropertyValueMetadata> MetadataArray() const;
+  base::span<const CSSPropertyValue> Properties() const;
 
   template <typename T>  // CSSPropertyID or AtomicString
   int FindPropertyIndex(const T& property) const;
@@ -277,58 +236,27 @@
   void TraceAfterDispatch(blink::Visitor*) const;
 
  private:
-  const Member<const CSSValue>* ValueArrayBase() const;
-  const CSSPropertyValueMetadata* MetadataArrayBase() const;
+  const CSSPropertyValue* ArrayBase() const;
 };
 
-inline const Member<const CSSValue>*
-ImmutableCSSPropertyValueSet::ValueArrayBase() const {
+inline const CSSPropertyValue* ImmutableCSSPropertyValueSet::ArrayBase() const {
   static_assert(
-      sizeof(ImmutableCSSPropertyValueSet) % alignof(Member<const CSSValue>) ==
-          0,
+      sizeof(ImmutableCSSPropertyValueSet) % alignof(CSSPropertyName) == 0,
       "ValueArray may be improperly aligned");
   // SAFETY: By funneling all allocation of ImmutableCSSPropertyValueSet through
   // Create(), we guarantee that the array will exist where we expect it.
   CHECK_GT(array_size_, 0u);
-  return UNSAFE_BUFFERS(
-      reinterpret_cast<const Member<const CSSValue>*>(this + 1));
+  return UNSAFE_BUFFERS(reinterpret_cast<const CSSPropertyValue*>(this + 1));
 }
 
-inline const CSSPropertyValueMetadata*
-ImmutableCSSPropertyValueSet::MetadataArrayBase() const {
-  static_assert(sizeof(ImmutableCSSPropertyValueSet) %
-                        alignof(CSSPropertyValueMetadata) ==
-                    0,
-                "MetadataArray may be improperly aligned");
-  // Size of Member<> can be smaller than that of CSSPropertyValueMetadata.
-  // Align it up.
-  // SAFETY: By funneling all allocation of ImmutableCSSPropertyValueSet through
-  // Create(), we guarantee that the array will exist where we expect it.
-  CHECK_GT(array_size_, 0u);
-  return UNSAFE_BUFFERS(
-      reinterpret_cast<const CSSPropertyValueMetadata*>(base::bits::AlignUp(
-          reinterpret_cast<const uint8_t*>(ValueArrayBase() + array_size_),
-          alignof(CSSPropertyValueMetadata))));
-}
-
-inline base::span<const Member<const CSSValue>>
-ImmutableCSSPropertyValueSet::ValueArray() const {
+inline base::span<const CSSPropertyValue>
+ImmutableCSSPropertyValueSet::Properties() const {
   if (array_size_ == 0) {
-    return base::span<const Member<const CSSValue>>();
+    return base::span<CSSPropertyValue>();
   }
   // SAFETY: By funneling all allocation of ImmutableCSSPropertyValueSet through
   // Create(), we guarantee that the array will have the size we expect.
-  return UNSAFE_BUFFERS(base::span(ValueArrayBase(), array_size_));
-}
-
-inline base::span<const CSSPropertyValueMetadata>
-ImmutableCSSPropertyValueSet::MetadataArray() const {
-  if (array_size_ == 0) {
-    return base::span<const CSSPropertyValueMetadata>();
-  }
-  // SAFETY: By funneling all allocation of ImmutableCSSPropertyValueSet through
-  // Create(), we guarantee that the array will have the size we expect.
-  return UNSAFE_BUFFERS(base::span(MetadataArrayBase(), array_size_));
+  return UNSAFE_BUFFERS(base::span(ArrayBase(), array_size_));
 }
 
 template <>
@@ -347,6 +275,9 @@
   ~MutableCSSPropertyValueSet() = default;
 
   unsigned PropertyCount() const { return property_vector_.size(); }
+  const HeapVector<CSSPropertyValue, 4>& Properties() const {
+    return property_vector_;
+  }
 
   enum SetResult {
     // The value failed to parse correctly, and thus, there was no change.
@@ -368,7 +299,7 @@
 
   // Wrapper around SetLonghandProperty() for setting multiple properties
   // at a time.
-  SetResult AddParsedProperties(const HeapVector<CSSPropertyValue, 64>&);
+  SetResult AddParsedProperties(base::span<CSSPropertyValue>);
 
   // Wrapper around SetLonghandProperty() that does nothing if the same property
   // already exists with an !important declaration.
@@ -472,7 +403,6 @@
   friend class CSSPropertyValueSet;
 
   HeapVector<CSSPropertyValue, 4> property_vector_;
-  bool may_have_logical_properties_{false};
 };
 
 template <>
@@ -482,23 +412,22 @@
   }
 };
 
-inline const CSSPropertyValueMetadata&
-CSSPropertyValueSet::PropertyReference::PropertyMetadata() const {
+inline const CSSPropertyValue& CSSPropertyValueSet::PropertyAt(
+    unsigned index) const {
   if (auto* mutable_property_set =
-          DynamicTo<MutableCSSPropertyValueSet>(property_set_)) {
-    return mutable_property_set->property_vector_.at(index_).Metadata();
+          DynamicTo<MutableCSSPropertyValueSet>(this)) {
+    return mutable_property_set->property_vector_.at(index);
   }
-  return To<ImmutableCSSPropertyValueSet>(*property_set_)
-      .MetadataArray()[index_];
+  return To<ImmutableCSSPropertyValueSet>(*this).Properties()[index];
 }
 
-inline const CSSValue& CSSPropertyValueSet::PropertyReference::PropertyValue()
+inline base::span<const CSSPropertyValue> CSSPropertyValueSet::Properties()
     const {
   if (auto* mutable_property_set =
-          DynamicTo<MutableCSSPropertyValueSet>(property_set_)) {
-    return *mutable_property_set->property_vector_.at(index_).Value();
+          DynamicTo<MutableCSSPropertyValueSet>(this)) {
+    return mutable_property_set->Properties();
   }
-  return *To<ImmutableCSSPropertyValueSet>(*property_set_).ValueArray()[index_];
+  return To<ImmutableCSSPropertyValueSet>(*this).Properties();
 }
 
 inline unsigned CSSPropertyValueSet::PropertyCount() const {
diff --git a/third_party/blink/renderer/core/css/cssom/declared_style_property_map.cc b/third_party/blink/renderer/core/css/cssom/declared_style_property_map.cc
index 3b03794..afee9c5 100644
--- a/third_party/blink/renderer/core/css/cssom/declared_style_property_map.cc
+++ b/third_party/blink/renderer/core/css/cssom/declared_style_property_map.cc
@@ -106,8 +106,8 @@
     return;
   }
   const CSSPropertyValueSet& declared_style_set = GetStyleRule()->Properties();
-  for (unsigned i = 0; i < declared_style_set.PropertyCount(); i++) {
-    const auto& property_reference = declared_style_set.PropertyAt(i);
+  for (const CSSPropertyValue& property_reference :
+       declared_style_set.Properties()) {
     visitor(property_reference.Name(), property_reference.Value());
   }
 }
diff --git a/third_party/blink/renderer/core/css/cssom/inline_style_property_map.cc b/third_party/blink/renderer/core/css/cssom/inline_style_property_map.cc
index 7fa1b7b..4653282 100644
--- a/third_party/blink/renderer/core/css/cssom/inline_style_property_map.cc
+++ b/third_party/blink/renderer/core/css/cssom/inline_style_property_map.cc
@@ -76,9 +76,8 @@
 void InlineStylePropertyMap::ForEachProperty(IterationFunction visitor) {
   CSSPropertyValueSet& inline_style_set =
       owner_element_->EnsureMutableInlineStyle();
-  for (unsigned i = 0; i < inline_style_set.PropertyCount(); i++) {
-    const auto& property_reference = inline_style_set.PropertyAt(i);
-    visitor(property_reference.Name(), property_reference.Value());
+  for (const CSSPropertyValue& property : inline_style_set.Properties()) {
+    visitor(property.Name(), property.Value());
   }
 }
 
diff --git a/third_party/blink/renderer/core/css/cssom/style_value_factory.cc b/third_party/blink/renderer/core/css/cssom/style_value_factory.cc
index fe47227f..6f7b7e3 100644
--- a/third_party/blink/renderer/core/css/cssom/style_value_factory.cc
+++ b/third_party/blink/renderer/core/css/cssom/style_value_factory.cc
@@ -317,8 +317,8 @@
           parser_context, parsed_properties, StyleRule::RuleType::kStyle)) {
     if (parsed_properties.size() == 1) {
       const auto result = StyleValueFactory::CssValueToStyleValueVector(
-          CSSPropertyName(parsed_properties[0].Id()),
-          *parsed_properties[0].Value());
+          CSSPropertyName(parsed_properties[0].PropertyID()),
+          parsed_properties[0].Value());
       // TODO(801935): Handle list-valued properties.
       if (result.size() == 1U) {
         result[0]->SetCSSText(css_text);
diff --git a/third_party/blink/renderer/core/css/element_rule_collector.cc b/third_party/blink/renderer/core/css/element_rule_collector.cc
index a525c12..e397cb5c 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.cc
+++ b/third_party/blink/renderer/core/css/element_rule_collector.cc
@@ -197,11 +197,9 @@
 }
 
 bool AffectsAnimations(const RuleData& rule_data) {
-  const CSSPropertyValueSet& properties = rule_data.Rule()->Properties();
-  unsigned count = properties.PropertyCount();
-  for (unsigned i = 0; i < count; ++i) {
-    auto reference = properties.PropertyAt(i);
-    CSSPropertyID id = reference.Id();
+  for (const CSSPropertyValue& property :
+       rule_data.Rule()->Properties().Properties()) {
+    CSSPropertyID id = property.PropertyID();
     if (id == CSSPropertyID::kAll) {
       return true;
     }
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
index f1d271f1..477862b 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
@@ -223,33 +223,50 @@
 }
 
 static inline void FilterProperties(
-    bool important,
-    const HeapVector<CSSPropertyValue, 64>& input,
-    HeapVector<CSSPropertyValue, 64>& output,
+    HeapVector<CSSPropertyValue, 64>& values,
     wtf_size_t& unused_entries,
     std::bitset<kNumCSSProperties>& seen_properties,
     HashSet<AtomicString>& seen_custom_properties) {
+  // Move !important declarations last, using a simple insertion sort.
+  // This is O(n²), but n is typically small, and std::stable_partition
+  // wants to allocate memory to get to O(n), which is overkill here.
+  // Moreover, this is O(n) if there are no !important properties
+  // (the common case) or only !important properties.
+  wtf_size_t last_nonimportant_idx = values.size() - 1;
+  for (wtf_size_t i = values.size(); i--;) {
+    if (values[i].IsImportant()) {
+      if (i != last_nonimportant_idx) {
+        // Move this element to the end, preserving the order
+        // of the other elements.
+        CSSPropertyValue tmp = std::move(values[i]);
+        for (unsigned j = i; j < last_nonimportant_idx; ++j) {
+          values[j] = std::move(values[j + 1]);
+        }
+        values[last_nonimportant_idx] = std::move(tmp);
+      }
+      --last_nonimportant_idx;
+    }
+  }
+
   // Add properties in reverse order so that highest priority definitions are
   // reached first. Duplicate definitions can then be ignored when found.
-  for (wtf_size_t i = input.size(); i--;) {
-    const CSSPropertyValue& property = input[i];
-    if (property.IsImportant() != important) {
-      continue;
-    }
-    if (property.Id() == CSSPropertyID::kVariable) {
+  for (wtf_size_t i = values.size(); i--;) {
+    const CSSPropertyValue& property = values[i];
+    if (property.PropertyID() == CSSPropertyID::kVariable) {
       const AtomicString& name = property.CustomPropertyName();
       if (seen_custom_properties.Contains(name)) {
         continue;
       }
       seen_custom_properties.insert(name);
     } else {
-      const unsigned property_id_index = GetCSSPropertyIDIndex(property.Id());
+      const unsigned property_id_index =
+          GetCSSPropertyIDIndex(property.PropertyID());
       if (seen_properties.test(property_id_index)) {
         continue;
       }
       seen_properties.set(property_id_index);
     }
-    output[--unused_entries] = property;
+    values[--unused_entries] = property;
   }
 }
 
@@ -257,29 +274,28 @@
     HeapVector<CSSPropertyValue, 64>& parsed_properties,
     CSSParserMode mode,
     const Document* document) {
-  if (mode != kHTMLQuirksMode &&
-      (parsed_properties.size() < 2 ||
-       (parsed_properties.size() == 2 &&
-        parsed_properties[0].Id() != parsed_properties[1].Id()))) {
+  if (mode != kHTMLQuirksMode && (parsed_properties.size() < 2 ||
+                                  (parsed_properties.size() == 2 &&
+                                   parsed_properties[0].PropertyID() !=
+                                       parsed_properties[1].PropertyID()))) {
     // Fast path for the situations where we can trivially detect that there can
     // be no collision between properties, and don't need to reorder, make
     // bitsets, or similar.
     ImmutableCSSPropertyValueSet* result =
         ImmutableCSSPropertyValueSet::Create(parsed_properties, mode);
-    parsed_properties.clear();
+    parsed_properties.resize(0);  // clear() deallocates the backing.
     return result;
   }
 
   std::bitset<kNumCSSProperties> seen_properties;
   wtf_size_t unused_entries = parsed_properties.size();
-  HeapVector<CSSPropertyValue, 64> results(unused_entries);
   HashSet<AtomicString> seen_custom_properties;
 
-  FilterProperties(true, parsed_properties, results, unused_entries,
-                   seen_properties, seen_custom_properties);
-  FilterProperties(false, parsed_properties, results, unused_entries,
-                   seen_properties, seen_custom_properties);
+  FilterProperties(parsed_properties, unused_entries, seen_properties,
+                   seen_custom_properties);
 
+  // TODO: When we remove this use counter, we can move seen_properties
+  // into FilterProperties().
   bool count_cursor_hand = false;
   if (document && mode == kHTMLQuirksMode &&
       seen_properties.test(GetCSSPropertyIDIndex(CSSPropertyID::kCursor))) {
@@ -309,8 +325,9 @@
   }
 
   ImmutableCSSPropertyValueSet* result = ImmutableCSSPropertyValueSet::Create(
-      base::span(results).subspan(unused_entries), mode, count_cursor_hand);
-  parsed_properties.clear();
+      base::span(parsed_properties).subspan(unused_entries), mode,
+      count_cursor_hand);
+  parsed_properties.resize(0);  // clear() deallocates the backing.
   return result;
 }
 
@@ -369,16 +386,11 @@
 
   std::bitset<kNumCSSProperties> seen_properties;
   wtf_size_t unused_entries = parser.parsed_properties_.size();
-  HeapVector<CSSPropertyValue, 64> results(unused_entries);
   HashSet<AtomicString> seen_custom_properties;
-  FilterProperties(true, parser.parsed_properties_, results, unused_entries,
-                   seen_properties, seen_custom_properties);
-  FilterProperties(false, parser.parsed_properties_, results, unused_entries,
-                   seen_properties, seen_custom_properties);
-  if (unused_entries) {
-    results.EraseAt(0, unused_entries);
-  }
-  return declaration->AddParsedProperties(results);
+  FilterProperties(parser.parsed_properties_, unused_entries, seen_properties,
+                   seen_custom_properties);
+  return declaration->AddParsedProperties(
+      base::span(parser.parsed_properties_).subspan(unused_entries));
 }
 
 StyleRuleBase* CSSParserImpl::ParseNestedDeclarationsRule(
@@ -583,7 +595,7 @@
   observer_ = observer_copy;
 
   bool result = !parsed_properties_.empty();
-  parsed_properties_.clear();
+  parsed_properties_.resize(0);  // clear() deallocates the backing.
   return result;
 }
 
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_expansion-inl.h b/third_party/blink/renderer/core/css/resolver/cascade_expansion-inl.h
index b3179682..4891cccd 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_expansion-inl.h
+++ b/third_party/blink/renderer/core/css/resolver/cascade_expansion-inl.h
@@ -26,26 +26,26 @@
   // We can't handle a MatchResult with more than 0xFFFF MatchedProperties,
   // or a MatchedProperties object with more than 0xFFFF declarations. If this
   // happens, we skip right to the end, and emit nothing.
-  wtf_size_t size = matched_properties.properties->PropertyCount();
-  if (size > kMaxDeclarationIndex + 1 ||
+  base::span<const CSSPropertyValue> properties =
+      matched_properties.properties->Properties();
+  if (properties.size() > kMaxDeclarationIndex + 1 ||
       matched_properties_index > kMaxMatchedPropertiesIndex) {
     return;
   }
 
   const bool expand_visited = !filter.Rejects(CSSProperty::kVisited, true);
 
-  for (wtf_size_t property_idx = 0; property_idx < size; ++property_idx) {
-    auto reference = matched_properties.properties->PropertyAt(property_idx);
-    const auto& metadata = reference.PropertyMetadata();
-    CSSPropertyID id = metadata.PropertyID();
+  unsigned property_idx = 0;
+  for (const CSSPropertyValue& reference : properties) {
+    CSSPropertyID id = reference.PropertyID();
     CascadePriority priority(
-        matched_properties.data_.origin, metadata.important_,
+        matched_properties.data_.origin, reference.IsImportant(),
         matched_properties.data_.tree_order,
         matched_properties.data_.is_inline_style,
         matched_properties.data_.is_try_style,
         matched_properties.data_.is_try_tactics_style,
         matched_properties.data_.layer_order,
-        EncodeMatchResultPosition(matched_properties_index, property_idx));
+        EncodeMatchResultPosition(matched_properties_index, property_idx++));
 
     if (id == CSSPropertyID::kVariable) {
       CustomProperty custom(reference.Name().ToAtomicString(), document);
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
index 993a873..5a3ec98d 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -1202,13 +1202,13 @@
 
   unsigned parsed_properties_count = parsed_properties.size();
   for (unsigned i = 0; i < parsed_properties_count; ++i) {
-    const CSSProperty& longhand = CSSProperty::Get(parsed_properties[i].Id());
-    const CSSValue* parsed = parsed_properties[i].Value();
+    const CSSProperty& longhand =
+        CSSProperty::Get(parsed_properties[i].PropertyID());
 
     // When using var() in a css-logical shorthand (e.g. margin-inline),
     // the longhands here will also be logical.
     if (unvisited_property == &ResolveSurrogate(longhand)) {
-      return parsed;
+      return &parsed_properties[i].Value();
     }
   }
 
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
index a99d6c0c..35fb1e3b 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -180,7 +180,7 @@
         ParseDeclarationBlock(name + ":" + value, kHTMLStandardMode);
     DCHECK(set);
     DCHECK(set->PropertyCount());
-    CSSPropertyValueSet::PropertyReference reference = set->PropertyAt(0);
+    const CSSPropertyValue& reference = set->PropertyAt(0);
     return StyleCascade::Resolve(state, reference.Name(), reference.Value());
   }
 
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index 1f10dd2..64a42de 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1493,11 +1493,7 @@
 
   const CSSPropertyValueSet* inline_style = element->InlineStyle();
   if (inline_style) {
-    int num_properties = inline_style->PropertyCount();
-    for (int property_idx = 0; property_idx < num_properties; ++property_idx) {
-      CSSPropertyValueSet::PropertyReference property =
-          inline_style->PropertyAt(property_idx);
-
+    for (const CSSPropertyValue& property : inline_style->Properties()) {
       // If a script mutated inline style properties that are not idempotent,
       // we would not normally even reach this path (we wouldn't get a changed
       // signal saying “inline incremental style modified”, just “style
@@ -1505,7 +1501,7 @@
       // _before_ this calculation, and their continued existence blocks us from
       // reusing the style (because e.g. the StyleAdjuster is not necessarily
       // idempotent in such cases).
-      if (!CSSProperty::Get(property.Id()).IsIdempotent()) {
+      if (!CSSProperty::Get(property.PropertyID()).IsIdempotent()) {
         return false;
       }
 
@@ -1819,11 +1815,7 @@
 
     const CSSPropertyValueSet* inline_style = element->InlineStyle();
     if (inline_style) {
-      int num_properties = inline_style->PropertyCount();
-      for (int property_idx = 0; property_idx < num_properties;
-           ++property_idx) {
-        CSSPropertyValueSet::PropertyReference property =
-            inline_style->PropertyAt(property_idx);
+      for (const CSSPropertyValue& property : inline_style->Properties()) {
         StyleBuilder::ApplyProperty(
             property.Name(), state,
             property.Value().EnsureScopedValue(&GetDocument()));
@@ -1977,17 +1969,17 @@
     return InitialStyleForElement();
   }
   DCHECK(!GetDocument().NeedsLayoutTreeUpdateForNode(*root_element));
-  const ComputedStyle* parent_style = root_element->EnsureComputedStyle();
-  StyleResolverState state(GetDocument(), *root_element,
-                           nullptr /* StyleRecalcContext */,
-                           StyleRequest(parent_style));
-  state.CreateNewStyle(*InitialStyleForElement(), *parent_style);
-
-  if (parent_style->Display() == EDisplay::kNone) {
+  const ComputedStyle* parent_style =
+      ComputedStyle::NullifyEnsured(root_element->GetComputedStyle());
+  if (!parent_style) {
     // The root is display:none. One page box will still be created, but no
     // properties should apply.
     return InitialStyleForElement();
   }
+  StyleResolverState state(GetDocument(), *root_element,
+                           nullptr /* StyleRecalcContext */,
+                           StyleRequest(parent_style));
+  state.CreateNewStyle(*InitialStyleForElement(), *parent_style);
 
   auto& builder = state.StyleBuilder();
   // Page boxes are blocks.
diff --git a/third_party/blink/renderer/core/css/style_property_serializer.cc b/third_party/blink/renderer/core/css/style_property_serializer.cc
index 087c795..437acf4e 100644
--- a/third_party/blink/renderer/core/css/style_property_serializer.cc
+++ b/third_party/blink/renderer/core/css/style_property_serializer.cc
@@ -102,11 +102,9 @@
     return;
   }
 
-  CSSPropertyValueSet::PropertyReference all_property =
-      property_set_->PropertyAt(all_index_);
+  const CSSPropertyValue& all_property = property_set_->PropertyAt(all_index_);
   for (unsigned i = 0; i < property_set_->PropertyCount(); ++i) {
-    CSSPropertyValueSet::PropertyReference property =
-        property_set_->PropertyAt(i);
+    const CSSPropertyValue& property = property_set_->PropertyAt(i);
     if (property.IsAffectedByAll()) {
       if (all_property.IsImportant() && !property.IsImportant()) {
         continue;
@@ -120,10 +118,10 @@
       }
       need_to_expand_all_ = true;
     }
-    if (!IsCSSPropertyIDWithName(property.Id())) {
+    if (!IsCSSPropertyIDWithName(property.PropertyID())) {
       continue;
     }
-    longhand_property_used_.set(GetCSSPropertyIDIndex(property.Id()));
+    longhand_property_used_.set(GetCSSPropertyIDIndex(property.PropertyID()));
   }
 }
 
@@ -167,8 +165,7 @@
         property_set_->PropertyAt(real_index));
   }
 
-  CSSPropertyValueSet::PropertyReference property =
-      property_set_->PropertyAt(all_index_);
+  const CSSPropertyValue& property = property_set_->PropertyAt(all_index_);
   return StylePropertySerializer::PropertyValueForSerializer(
       CSSProperty::Get(property_id).GetCSSPropertyName(), &property.Value(),
       property.IsImportant());
@@ -184,21 +181,23 @@
   // If all is not expanded, we need to process "all" and properties which
   // are not overwritten by "all".
   if (!need_to_expand_all_) {
-    CSSPropertyValueSet::PropertyReference property =
-        property_set_->PropertyAt(index);
-    if (property.Id() == CSSPropertyID::kAll || !property.IsAffectedByAll()) {
+    const CSSPropertyValue& property = property_set_->PropertyAt(index);
+    if (property.PropertyID() == CSSPropertyID::kAll ||
+        !property.IsAffectedByAll()) {
       return true;
     }
-    if (!IsCSSPropertyIDWithName(property.Id())) {
+    if (!IsCSSPropertyIDWithName(property.PropertyID())) {
       return false;
     }
-    return longhand_property_used_.test(GetCSSPropertyIDIndex(property.Id()));
+    return longhand_property_used_.test(
+        GetCSSPropertyIDIndex(property.PropertyID()));
   }
 
   // Custom property declarations are never overridden by "all" and are only
   // traversed for the indices into the property set.
   if (IsIndexInPropertySet(index)) {
-    return property_set_->PropertyAt(index).Id() == CSSPropertyID::kVariable;
+    return property_set_->PropertyAt(index).PropertyID() ==
+           CSSPropertyID::kVariable;
   }
 
   CSSPropertyID property_id = IndexToPropertyID(index);
diff --git a/third_party/blink/renderer/core/css/style_property_serializer.h b/third_party/blink/renderer/core/css/style_property_serializer.h
index be7e0b4..a41ccf6 100644
--- a/third_party/blink/renderer/core/css/style_property_serializer.h
+++ b/third_party/blink/renderer/core/css/style_property_serializer.h
@@ -114,8 +114,7 @@
     STACK_ALLOCATED();
 
    public:
-    explicit PropertyValueForSerializer(
-        CSSPropertyValueSet::PropertyReference property)
+    explicit PropertyValueForSerializer(const CSSPropertyValue& property)
         : value_(&property.Value()),
           name_(property.Name()),
           is_important_(property.IsImportant()) {}
diff --git a/third_party/blink/renderer/core/css/try_value_flips_test.cc b/third_party/blink/renderer/core/css/try_value_flips_test.cc
index c104c74..5149bec 100644
--- a/third_party/blink/renderer/core/css/try_value_flips_test.cc
+++ b/third_party/blink/renderer/core/css/try_value_flips_test.cc
@@ -86,8 +86,7 @@
   // for debugging failing tests.
   Vector<String> DeclarationStrings(const CSSPropertyValueSet* set) {
     Vector<String> result;
-    for (unsigned i = 0; i < set->PropertyCount(); ++i) {
-      CSSPropertyValueSet::PropertyReference ref = set->PropertyAt(i);
+    for (const CSSPropertyValue& ref : set->Properties()) {
       result.push_back(ref.Name().ToAtomicString() + ":" +
                        ref.Value().CssText());
     }
@@ -323,7 +322,7 @@
       css_test_helpers::ParseDeclarationBlock(string);
   CHECK(set);
   CHECK_EQ(1u, set->PropertyCount());
-  CSSPropertyValueSet::PropertyReference ref = set->PropertyAt(0);
+  const CSSPropertyValue& ref = set->PropertyAt(0);
   return Declaration{.property_id = ref.Name().Id(), .value = &ref.Value()};
 }
 
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index fe8b5cf..1e35ea1 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -9256,8 +9256,8 @@
   if (!style) {
     return false;
   }
-  for (unsigned i = 0; i < style->PropertyCount(); ++i) {
-    if (style->PropertyAt(i).Value().MayContainUrl()) {
+  for (const CSSPropertyValue& property : style->Properties()) {
+    if (property.Value().MayContainUrl()) {
       return true;
     }
   }
@@ -9266,8 +9266,8 @@
 
 static void ReResolveURLsInInlineStyle(const Document& document,
                                        MutableCSSPropertyValueSet& style) {
-  for (unsigned i = 0; i < style.PropertyCount(); ++i) {
-    const CSSValue& value = style.PropertyAt(i).Value();
+  for (const CSSPropertyValue& property : style.Properties()) {
+    const CSSValue& value = property.Value();
     if (value.MayContainUrl()) {
       value.ReResolveUrl(document);
     }
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc
index bf49d43..420a8da 100644
--- a/third_party/blink/renderer/core/dom/node.cc
+++ b/third_party/blink/renderer/core/dom/node.cc
@@ -855,7 +855,7 @@
       isConnected() == new_child->isConnected() &&
       // "If parent’s shadow-including root is not the same as node’s
       // shadow-including root, then..."
-      GetDocument() == new_child->GetDocument() &&
+      ShadowIncludingRoot() == new_child->ShadowIncludingRoot() &&
       // "If node is not an Element or a CharacterData node, then ..."
       (new_child->IsElementNode() || new_child->IsCharacterDataNode());
   // These three conditions below are caught by `EnsurePreInsertionValidity()`
diff --git a/third_party/blink/renderer/core/editing/editing_style.cc b/third_party/blink/renderer/core/editing/editing_style.cc
index d0f7d9d..61f1641 100644
--- a/third_party/blink/renderer/core/editing/editing_style.cc
+++ b/third_party/blink/renderer/core/editing/editing_style.cc
@@ -890,9 +890,9 @@
       kAllEditingProperties);
   element_style->RemoveEquivalentProperties(parent_style);
 
-  unsigned property_count = element_style->PropertyCount();
-  for (unsigned i = 0; i < property_count; ++i)
-    mutable_style_->RemoveProperty(element_style->PropertyAt(i).Id());
+  for (const CSSPropertyValue& property : element_style->Properties()) {
+    mutable_style_->RemoveProperty(property.PropertyID());
+  }
 }
 
 void EditingStyle::CollapseTextDecorationProperties(
@@ -1038,9 +1038,8 @@
   if (!mutable_style_ || !inline_style)
     return false;
 
-  unsigned property_count = mutable_style_->PropertyCount();
-  for (unsigned i = 0; i < property_count; ++i) {
-    CSSPropertyID property_id = mutable_style_->PropertyAt(i).Id();
+  for (const CSSPropertyValue& property : mutable_style_->Properties()) {
+    CSSPropertyID property_id = property.PropertyID();
 
     // We don't override `white-space-collapse` property of a tab span because
     // that would collapse the tab into a space.
@@ -1321,11 +1320,11 @@
 
   if (element->hasAttribute(html_names::kStyleAttr)) {
     if (const CSSPropertyValueSet* style = element->InlineStyle()) {
-      unsigned property_count = style->PropertyCount();
-      for (unsigned i = 0; i < property_count; ++i) {
+      for (const CSSPropertyValue& property : style->Properties()) {
         if (!IsEditingProperty(element->GetExecutionContext(),
-                               style->PropertyAt(i).Id()))
+                               property.PropertyID())) {
           return false;
+        }
       }
     }
     matched_attributes++;
@@ -1524,18 +1523,20 @@
 
   unsigned property_count = style->PropertyCount();
   for (unsigned i = 0; i < property_count; ++i) {
-    CSSPropertyValueSet::PropertyReference property = style->PropertyAt(i);
-    const CSSValue* value = mutable_style_->GetPropertyCSSValue(property.Id());
+    const CSSPropertyValue& property = style->PropertyAt(i);
+    const CSSValue* value =
+        mutable_style_->GetPropertyCSSValue(property.PropertyID());
 
     // text decorations never override values
     const auto* property_value_list = DynamicTo<CSSValueList>(property.Value());
-    if ((property.Id() == CSSPropertyID::kTextDecorationLine ||
-         property.Id() == CSSPropertyID::kWebkitTextDecorationsInEffect) &&
+    if ((property.PropertyID() == CSSPropertyID::kTextDecorationLine ||
+         property.PropertyID() ==
+             CSSPropertyID::kWebkitTextDecorationsInEffect) &&
         property_value_list && value) {
       if (const auto* value_list = DynamicTo<CSSValueList>(value)) {
         const CSSValueList& result =
             MergeTextDecorationValues(*value_list, *property_value_list);
-        mutable_style_->SetProperty(property.Id(), result,
+        mutable_style_->SetProperty(property.PropertyID(), result,
                                     property.IsImportant());
         continue;
       }
@@ -1544,8 +1545,7 @@
     }
 
     if (mode == kOverrideValues || (mode == kDoNotOverrideValues && !value)) {
-      mutable_style_->SetLonghandProperty(
-          CSSPropertyValue(property.PropertyMetadata(), property.Value()));
+      mutable_style_->SetLonghandProperty(property);
     }
   }
 }
@@ -1592,8 +1592,7 @@
   {
     unsigned property_count = mutable_style_->PropertyCount();
     for (unsigned i = 0; i < property_count; ++i) {
-      CSSPropertyValueSet::PropertyReference property =
-          mutable_style_->PropertyAt(i);
+      const CSSPropertyValue& property = mutable_style_->PropertyAt(i);
       const CSSValue& value = property.Value();
       const auto* primitive_value = DynamicTo<CSSPrimitiveValue>(value);
       if (!primitive_value)
@@ -1610,7 +1609,7 @@
   }
   mutable_style_->MergeAndOverrideOnConflict(from_computed_style);
 
- // There are some scenarios, like when copying rich text while in ForcedColors
+  // There are some scenarios, like when copying rich text while in ForcedColors
   // mode where we don't want to keep the ForcedColors styling, so that if it is
   // pasted and sent to someone with no ForcedColors applied it does not affect
   // their styling.
@@ -1631,7 +1630,8 @@
   Vector<const CSSProperty*> properties_to_remove(property_count);
   for (unsigned i = 0; i < property_count; ++i) {
     // TODO(crbug.com/980160): Remove access to static Variable instance.
-    properties_to_remove[i] = &CSSProperty::Get(style->PropertyAt(i).Id());
+    properties_to_remove[i] =
+        &CSSProperty::Get(style->PropertyAt(i).PropertyID());
   }
 
   style_to_remove_properties_from->RemovePropertiesInSet(properties_to_remove);
diff --git a/third_party/blink/renderer/core/frame/frame_serializer.cc b/third_party/blink/renderer/core/frame/frame_serializer.cc
index 49fdd863..ad7ad4e 100644
--- a/third_party/blink/renderer/core/frame/frame_serializer.cc
+++ b/third_party/blink/renderer/core/frame/frame_serializer.cc
@@ -1278,10 +1278,8 @@
     // The background-image and list-style-image (for ul or ol) are the CSS
     // properties that make use of images. We iterate to make sure we include
     // any other image properties there might be.
-    unsigned property_count = style_declaration->PropertyCount();
-    for (unsigned i = 0; i < property_count; ++i) {
-      const CSSValue& css_value = style_declaration->PropertyAt(i).Value();
-      RetrieveResourcesForCSSValue(css_value, document);
+    for (const CSSPropertyValue& property : style_declaration->Properties()) {
+      RetrieveResourcesForCSSValue(property.Value(), document);
     }
   }
 
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index 7f73102c..53d3e48 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -95,6 +95,7 @@
 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
 #include "third_party/blink/renderer/core/fullscreen/fullscreen.h"
 #include "third_party/blink/renderer/core/highlight/highlight_registry.h"
+#include "third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.h"
 #include "third_party/blink/renderer/core/html/fenced_frame/document_fenced_frames.h"
 #include "third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h"
 #include "third_party/blink/renderer/core/html/forms/text_control_element.h"
@@ -4720,6 +4721,12 @@
 
   if (auto* metrics_aggregator = GetUkmAggregator())
     metrics_aggregator->DidReachFirstContentfulPaint();
+
+  if (auto* viewport_position_tracker =
+          AnchorElementViewportPositionTracker::MaybeGetOrCreateFor(
+              *frame_->GetDocument())) {
+    viewport_position_tracker->OnFirstContentfulPaint();
+  }
 }
 
 void LocalFrameView::RegisterForLifecycleNotifications(
diff --git a/third_party/blink/renderer/core/html/anchor_element_metrics_sender_test.cc b/third_party/blink/renderer/core/html/anchor_element_metrics_sender_test.cc
index 350ce14..3406309b 100644
--- a/third_party/blink/renderer/core/html/anchor_element_metrics_sender_test.cc
+++ b/third_party/blink/renderer/core/html/anchor_element_metrics_sender_test.cc
@@ -8,6 +8,7 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
+#include "base/time/time.h"
 #include "cc/trees/browser_controls_params.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
@@ -30,6 +31,7 @@
 #include "third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h"
 #include "third_party/blink/renderer/core/loader/document_loader.h"
 #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
+#include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
 #include "third_party/blink/renderer/core/script/classic_script.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
@@ -1891,4 +1893,69 @@
   ProcessEvents(1);
 }
 
+TEST_F(AnchorElementMetricsSenderTest,
+       IntersectionObservationDelayedToAfterFCP) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kNavigationPredictor,
+      {{"random_anchor_sampling_period", "1"},
+       {"intersection_observation_after_fcp_only", "true"},
+       {"post_fcp_observation_delay", "200ms"}});
+
+  String source("https://foo.com");
+  SimRequest main_resource(source, "text/html");
+  LoadURL(source);
+
+  String fcp_blocking_script("https://foo.com/script");
+  SimRequest fcp_blocking_script_resource(fcp_blocking_script,
+                                          "text/javascript");
+
+  main_resource.Complete(String::Format(R"html(
+    <body>
+      <script>
+        window.onload = () => {
+          const script = document.createElement("script");
+          script.src = "%s";
+          document.body.appendChild(script);
+        }
+      </script>
+    </body>
+  )html",
+                                        fcp_blocking_script.Utf8().c_str()));
+  ProcessEvents(0);
+  auto* tracker =
+      AnchorElementViewportPositionTracker::MaybeGetOrCreateFor(GetDocument());
+  EXPECT_EQ(tracker->GetIntersectionObserverForTesting(), nullptr);
+
+  // Run the FCP blocking script.
+  fcp_blocking_script_resource.Complete(String(R"js(
+    let anchor = document.createElement("a");
+    anchor.innerText = "one";
+    anchor.href = "https://foo.com/one";
+    document.body.appendChild(anchor);
+  )js"));
+  platform_->RunForPeriod(base::Milliseconds(10));
+  ASSERT_EQ(GetDocument().links()->length(), 1u);
+
+  // Run a lifecycle update, FCP should happen.
+  GetDocument().View()->UpdateAllLifecyclePhasesForTest();
+  ASSERT_FALSE(PaintTiming::From(GetDocument())
+                   .FirstContentfulPaintRenderedButNotPresentedAsMonotonicTime()
+                   .is_null());
+  EXPECT_EQ(tracker->GetIntersectionObserverForTesting(), nullptr);
+
+  // Wait for the delay configured with "post_fcp_observation_delay". The
+  // IntersectionObserver should now be initialized.
+  platform_->RunForPeriod(base::Milliseconds(200));
+  EXPECT_NE(tracker->GetIntersectionObserverForTesting(), nullptr);
+
+  // Just sanity check that things still work.
+  ProcessEvents(1);
+  platform_->RunForPeriod(base::Milliseconds(1));
+  ASSERT_EQ(hosts_.size(), 1u);
+  EXPECT_EQ(hosts_[0]->elements_.size(), 1u);
+  EXPECT_EQ(hosts_[0]->entered_viewport_.size(), 1u);
+  EXPECT_EQ(hosts_[0]->left_viewport_.size(), 0u);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.cc b/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.cc
index f0bd43c..e83be78b 100644
--- a/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.cc
+++ b/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.cc
@@ -22,6 +22,7 @@
 #include "third_party/blink/renderer/core/intersection_observer/intersection_observer.h"
 #include "third_party/blink/renderer/core/intersection_observer/intersection_observer_entry.h"
 #include "third_party/blink/renderer/core/page/page.h"
+#include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
 #include "third_party/blink/renderer/platform/graphics/dom_node_id.h"
 #include "third_party/blink/renderer/platform/widget/frame_widget.h"
 
@@ -45,6 +46,20 @@
   return param.Get();
 }
 
+bool ShouldOnlyObserveAfterFCP() {
+  const base::FeatureParam<bool> param{
+      &features::kNavigationPredictor,
+      "intersection_observation_after_fcp_only", false};
+  return param.Get();
+}
+
+base::TimeDelta PostFCPObservationDelay() {
+  const base::FeatureParam<base::TimeDelta> param{
+      &features::kNavigationPredictor, "post_fcp_observation_delay",
+      base::Milliseconds(1300)};
+  return param.Get();
+}
+
 bool ShouldReportViewportPositions() {
   return base::FeatureList::IsEnabled(
       features::kNavigationPredictorNewViewportFeatures);
@@ -78,15 +93,19 @@
           document.GetExecutionContext()->GetTaskRunner(
               TaskType::kInternalDefault),
           this,
-          &AnchorElementViewportPositionTracker::PositionUpdateTimerFired) {
-  intersection_observer_ = IntersectionObserver::Create(
-      document,
-      WTF::BindRepeating(
-          &AnchorElementViewportPositionTracker::UpdateVisibleAnchors,
-          WrapWeakPersistent(this)),
-      LocalFrameUkmAggregator::kAnchorElementMetricsIntersectionObserver,
-      {.thresholds = {kIntersectionRatioThreshold},
-       .delay = intersection_observer_delay_});
+          &AnchorElementViewportPositionTracker::PositionUpdateTimerFired),
+      post_fcp_delay_timer_(
+          document.GetExecutionContext()->GetTaskRunner(
+              TaskType::kInternalDefault),
+          this,
+          &AnchorElementViewportPositionTracker::PostFCPDelayTimerFired) {
+  const bool after_fcp =
+      !PaintTiming::From(document)
+           .FirstContentfulPaintRenderedButNotPresentedAsMonotonicTime()
+           .is_null();
+  if (!ShouldOnlyObserveAfterFCP() || after_fcp) {
+    InitializeIntersectionObserver();
+  }
 }
 
 AnchorElementViewportPositionTracker::~AnchorElementViewportPositionTracker() =
@@ -97,6 +116,7 @@
   visitor->Trace(intersection_observer_);
   visitor->Trace(anchors_in_viewport_);
   visitor->Trace(position_update_timer_);
+  visitor->Trace(post_fcp_delay_timer_);
   visitor->Trace(observers_);
 }
 
@@ -145,14 +165,18 @@
         DOMNodeIds::NodeForId(smallest_observed_anchor_it->dom_node_id);
     CHECK(node);
     anchor_unobserved = To<HTMLAnchorElementBase>(node);
-    intersection_observer_->unobserve(anchor_unobserved);
+    if (intersection_observer_) {
+      intersection_observer_->unobserve(anchor_unobserved);
+    }
     not_observed_anchors_.insert(
         observed_anchors_.extract(smallest_observed_anchor_it));
   }
 
   if (should_observe) {
     // Observe the element to collect time_in_viewport stats.
-    intersection_observer_->observe(&anchor_element);
+    if (intersection_observer_) {
+      intersection_observer_->observe(&anchor_element);
+    }
     observed_anchors_.insert(
         {.percent_area = percent_area,
          .dom_node_id = DOMNodeIds::IdForNode(&anchor_element)});
@@ -176,13 +200,17 @@
     if (auto observed_anchors_it = base::ranges::find(
             observed_anchors_, node_id, &AnchorObservation::dom_node_id);
         observed_anchors_it != observed_anchors_.end()) {
-      intersection_observer_->unobserve(&anchor);
+      if (intersection_observer_) {
+        intersection_observer_->unobserve(&anchor);
+      }
       observed_anchors_.erase(observed_anchors_it);
       if (!not_observed_anchors_.empty()) {
         auto largest_non_observed_anchor_it =
             std::prev(not_observed_anchors_.end());
-        intersection_observer_->observe(To<Element>(DOMNodeIds::NodeForId(
-            largest_non_observed_anchor_it->dom_node_id)));
+        if (intersection_observer_) {
+          intersection_observer_->observe(To<Element>(DOMNodeIds::NodeForId(
+              largest_non_observed_anchor_it->dom_node_id)));
+        }
         observed_anchors_.insert(
             not_observed_anchors_.extract(largest_non_observed_anchor_it));
       }
@@ -214,7 +242,7 @@
 }
 
 void AnchorElementViewportPositionTracker::OnScrollEnd() {
-  if (!ShouldReportViewportPositions()) {
+  if (!ShouldReportViewportPositions() || !intersection_observer_) {
     return;
   }
 
@@ -237,6 +265,15 @@
   }
 }
 
+void AnchorElementViewportPositionTracker::OnFirstContentfulPaint() {
+  if (!ShouldOnlyObserveAfterFCP()) {
+    CHECK(intersection_observer_);
+    return;
+  }
+
+  post_fcp_delay_timer_.StartOneShot(PostFCPObservationDelay(), FROM_HERE);
+}
+
 IntersectionObserver*
 AnchorElementViewportPositionTracker::GetIntersectionObserverForTesting() {
   return intersection_observer_;
@@ -393,4 +430,25 @@
   }
 }
 
+void AnchorElementViewportPositionTracker::InitializeIntersectionObserver() {
+  CHECK(!intersection_observer_);
+  intersection_observer_ = IntersectionObserver::Create(
+      *GetSupplementable(),
+      WTF::BindRepeating(
+          &AnchorElementViewportPositionTracker::UpdateVisibleAnchors,
+          WrapWeakPersistent(this)),
+      LocalFrameUkmAggregator::kAnchorElementMetricsIntersectionObserver,
+      {.thresholds = {kIntersectionRatioThreshold},
+       .delay = intersection_observer_delay_});
+
+  for (const AnchorObservation& observed_anchor : observed_anchors_) {
+    intersection_observer_->observe(
+        To<Element>(DOMNodeIds::NodeForId(observed_anchor.dom_node_id)));
+  }
+}
+
+void AnchorElementViewportPositionTracker::PostFCPDelayTimerFired(TimerBase*) {
+  InitializeIntersectionObserver();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.h b/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.h
index 05e8a181..bfe21f4 100644
--- a/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.h
+++ b/third_party/blink/renderer/core/html/anchor_element_viewport_position_tracker.h
@@ -94,6 +94,7 @@
   // Called when a scroll completes. Triggers computation of position related
   // metrics for all observed anchors that are currently in the viewport.
   void OnScrollEnd();
+  void OnFirstContentfulPaint();
 
   IntersectionObserver* GetIntersectionObserverForTesting();
 
@@ -105,6 +106,8 @@
       const LocalFrameView& local_frame_view) override;
   void DispatchAnchorElementsPositionUpdates();
   void RegisterForLifecycleNotifications();
+  void InitializeIntersectionObserver();
+  void PostFCPDelayTimerFired(TimerBase*);
 
   Member<IntersectionObserver> intersection_observer_;
   // Maximum number of observations for `intersection_observer_`.
@@ -162,6 +165,12 @@
   HeapTaskRunnerTimer<AnchorElementViewportPositionTracker>
       position_update_timer_;
 
+  // Used to wait for a period of time after OnFirstContentfulPaint() is called,
+  // (to approximate waiting for LCP) before initializing
+  // |intersection_observer_|.
+  HeapTaskRunnerTimer<AnchorElementViewportPositionTracker>
+      post_fcp_delay_timer_;
+
   HeapHashSet<WeakMember<Observer>> observers_;
 };
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.cc b/third_party/blink/renderer/core/input/pointer_event_manager.cc
index 55d8f92..9c4b8ca 100644
--- a/third_party/blink/renderer/core/input/pointer_event_manager.cc
+++ b/third_party/blink/renderer/core/input/pointer_event_manager.cc
@@ -1134,52 +1134,56 @@
       pointer_event->type() == event_type_names::kPointercancel) {
     ReleasePointerCapture(pointer_event->pointerId());
 
-    // Send got/lostpointercapture rightaway if necessary.
-    if (pointer_event->type() == event_type_names::kPointerup) {
-      // We also send boundary events here rightaway.  To find the new position
-      // under the pointer, we perform a hit-test again if a pointer-capture is
-      // going to be released now; otherwise we use the original hit-test target
-      // (or its ancestor in the event-path if it has been removed from DOM).
-      if (pointer_capture_target_.find(pointer_event->pointerId()) !=
-          pointer_capture_target_.end()) {
-        HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease;
-        HitTestRequest request(hit_type);
-        MouseEventWithHitTestResults mev =
-            event_handling_util::PerformMouseEventHitTest(frame_, request,
-                                                          mouse_event);
-        target = mev.InnerElement();
-      } else if (RuntimeEnabledFeatures::
-                     BoundaryEventDispatchTracksNodeRemovalEnabled()) {
-        target = NonDeletedElementTarget(target, pointer_event);
-      }
-
-      // Dispatch the click event if applicable, when the flag is enabled.
-      if (consider_click_dispatch &&
-          RuntimeEnabledFeatures::ClickToCapturedPointerEnabled()) {
-        ProcessPendingPointerCapture(pointer_event);
-        mouse_event_manager_->DispatchMouseClickIfNeeded(
-            mouse_target, captured_click_target, mouse_event,
-            pointer_event->pointerId(), pointer_event->pointerType());
-        // TODO(https://crbug.com/40851596): The following call to
-        // `ProcessCaptureAndPositionOfPointerEvent()` does not see any pending
-        // capture.  Clean this up after the flag is enabled.
-      }
-
-      ProcessCaptureAndPositionOfPointerEvent(pointer_event, target,
-                                              &mouse_event);
-    } else {
-      // Don't send boundary events in this case as it is a little tricky.
-      // This case happens for the drag operation and currently we don't
-      // let the page know that the pointer left the page while dragging.
-      ProcessPendingPointerCapture(pointer_event);
-    }
-
     if (pointer_event->isPrimary()) {
       prevent_mouse_event_for_pointer_type_[ToPointerTypeIndex(
           mouse_event.pointer_type)] = false;
     }
   }
 
+  // Update `target` before processing pending pointer capture below.
+  //
+  // To find the new position under the pointer, we perform a hit-test again if
+  // a pointer-capture is going to be released now; otherwise we use the
+  // original hit-test target (or its ancestor in the event-path if it has been
+  // removed from DOM).
+  if (pointer_event->type() == event_type_names::kPointerup) {
+    if (pointer_capture_target_.find(pointer_event->pointerId()) !=
+        pointer_capture_target_.end()) {
+      HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease;
+      HitTestRequest request(hit_type);
+      MouseEventWithHitTestResults mev =
+          event_handling_util::PerformMouseEventHitTest(frame_, request,
+                                                        mouse_event);
+      target = mev.InnerElement();
+    } else if (RuntimeEnabledFeatures::
+                   BoundaryEventDispatchTracksNodeRemovalEnabled()) {
+      target = NonDeletedElementTarget(target, pointer_event);
+    }
+  }
+
+  // Dispatch the click event if applicable, when the flag is enabled.
+  if (consider_click_dispatch &&
+      RuntimeEnabledFeatures::ClickToCapturedPointerEnabled()) {
+    ProcessPendingPointerCapture(pointer_event);
+    mouse_event_manager_->DispatchMouseClickIfNeeded(
+        mouse_target, captured_click_target, mouse_event,
+        pointer_event->pointerId(), pointer_event->pointerType());
+    // TODO(https://crbug.com/40851596): The following call to
+    // `ProcessCaptureAndPositionOfPointerEvent()` does not see any pending
+    // capture.  Clean this up after the flag is enabled.
+  }
+
+  // Send got/lostpointercapture rightaway if necessary.
+  if (pointer_event->type() == event_type_names::kPointerup) {
+    ProcessCaptureAndPositionOfPointerEvent(pointer_event, target,
+                                            &mouse_event);
+  } else if (pointer_event->type() == event_type_names::kPointercancel) {
+    // Don't send boundary events in this case as it is a little tricky.
+    // This case happens for the drag operation and currently we don't
+    // let the page know that the pointer left the page while dragging.
+    ProcessPendingPointerCapture(pointer_event);
+  }
+
   if (mouse_event.GetType() == WebInputEvent::Type::kMouseLeave &&
       (mouse_event.pointer_type == WebPointerProperties::PointerType::kPen ||
        mouse_event.pointer_type ==
diff --git a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
index d73b6dc..64574eff 100644
--- a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
@@ -930,7 +930,7 @@
     auto result =
         std::make_unique<protocol::Array<protocol::CSS::CSSProperty>>();
     for (auto longhand_property : longhand_properties) {
-      String value = longhand_property.Value()->CssText();
+      String value = longhand_property.Value().CssText();
       std::unique_ptr<protocol::CSS::CSSProperty> longhand =
           protocol::CSS::CSSProperty::create()
               .setName(longhand_property.Name().ToAtomicString())
diff --git a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
index 0307608..48ab70d7 100644
--- a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
+++ b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
@@ -111,13 +111,6 @@
   }
 }
 
-// static
-const LogicalAnchorQuery& LogicalAnchorQuery::Empty() {
-  DEFINE_STATIC_LOCAL(Persistent<LogicalAnchorQuery>, empty,
-                      (MakeGarbageCollected<LogicalAnchorQuery>()));
-  return *empty;
-}
-
 namespace {
 
 bool IsScopedByElement(const ScopedCSSName* lookup_name,
@@ -444,8 +437,13 @@
     return anchor_query_;
   if (anchor_queries_) {
     DCHECK(containing_block_);
-    anchor_query_ = &anchor_queries_->AnchorQuery(*containing_block_);
-    DCHECK(anchor_query_);
+    anchor_query_ = anchor_queries_->AnchorQuery(*containing_block_);
+    if (!anchor_query_) {
+      // The above operation is expensive. If there were no anchors for the
+      // containing block, make sure that we don't try again every time this
+      // function is called.
+      anchor_queries_ = nullptr;
+    }
     return anchor_query_;
   }
   return nullptr;
diff --git a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.h b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.h
index 3da17b8..a81882a 100644
--- a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.h
+++ b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.h
@@ -211,9 +211,6 @@
  public:
   using Base = AnchorQueryBase<LogicalAnchorReference>;
 
-  // Returns an empty instance.
-  static const LogicalAnchorQuery& Empty();
-
   const LogicalAnchorReference* AnchorReference(const LayoutBox& query_box,
                                                 const AnchorKey&) const;
 
@@ -383,7 +380,7 @@
 
   const LayoutBox* query_box_ = nullptr;
   mutable const LogicalAnchorQuery* anchor_query_ = nullptr;
-  const LogicalAnchorQueryMap* anchor_queries_ = nullptr;
+  mutable const LogicalAnchorQueryMap* anchor_queries_ = nullptr;
   const LayoutObject* implicit_anchor_ = nullptr;
   const LayoutObject* containing_block_ = nullptr;
   const WritingModeConverter container_converter_{
diff --git a/third_party/blink/renderer/core/layout/anchor_query_map.cc b/third_party/blink/renderer/core/layout/anchor_query_map.cc
index c83dd09..f64dc6fd 100644
--- a/third_party/blink/renderer/core/layout/anchor_query_map.cc
+++ b/third_party/blink/renderer/core/layout/anchor_query_map.cc
@@ -361,23 +361,25 @@
   }
 }
 
-const LogicalAnchorQuery& LogicalAnchorQueryMap::AnchorQuery(
+const LogicalAnchorQuery* LogicalAnchorQueryMap::AnchorQuery(
     const LayoutObject& containing_block) const {
   DCHECK(&containing_block);
   DCHECK(containing_block.CanContainAbsolutePositionObjects() ||
          containing_block.CanContainFixedPositionObjects());
 
-  if (!has_anchor_queries_)
-    return LogicalAnchorQuery::Empty();
+  if (!has_anchor_queries_) {
+    return nullptr;
+  }
 
   // Update |queries_| if it hasn't computed for |containing_block|.
   if (!computed_for_ || !computed_for_->IsDescendantOf(&containing_block))
     Update(containing_block);
 
   const auto& it = queries_.find(&containing_block);
-  if (it != queries_.end())
-    return *it->value;
-  return LogicalAnchorQuery::Empty();
+  if (it != queries_.end()) {
+    return it->value;
+  }
+  return nullptr;
 }
 
 // Update |queries_| for the given |layout_object| and its ancestors. This is
diff --git a/third_party/blink/renderer/core/layout/anchor_query_map.h b/third_party/blink/renderer/core/layout/anchor_query_map.h
index 6572cc1..5deb3b1 100644
--- a/third_party/blink/renderer/core/layout/anchor_query_map.h
+++ b/third_party/blink/renderer/core/layout/anchor_query_map.h
@@ -43,7 +43,7 @@
   // Get |LogicalAnchorQuery| in the stitched coordinate system for the given
   // containing block. If there is no anchor query for the containing block,
   // returns an empty instance.
-  const LogicalAnchorQuery& AnchorQuery(
+  const LogicalAnchorQuery* AnchorQuery(
       const LayoutObject& containing_block) const;
 
   // Update |children| when their anchor queries are changed.
diff --git a/third_party/blink/renderer/core/layout/exclusions/exclusion_area.cc b/third_party/blink/renderer/core/layout/exclusions/exclusion_area.cc
index 72e4b3f..3feafc1d 100644
--- a/third_party/blink/renderer/core/layout/exclusions/exclusion_area.cc
+++ b/third_party/blink/renderer/core/layout/exclusions/exclusion_area.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/exclusions/exclusion_area.h"
 
 #include "third_party/blink/renderer/core/layout/layout_box.h"
@@ -37,7 +32,8 @@
   const unsigned index = static_cast<unsigned>(printable.value);
   if (index >= std::size(kStrings))
     return os << "EFloat::" << index;
-  return os << "EFloat::" << kStrings[index];
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  return os << "EFloat::" << UNSAFE_TODO(kStrings[index]);
 }
 
 struct PrintableKind {
@@ -53,7 +49,8 @@
   const unsigned index = static_cast<unsigned>(printable.value);
   if (index >= std::size(kStrings))
     return os << "Kind::" << index;
-  return os << kStrings[index];
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  return os << UNSAFE_TODO(kStrings[index]);
 }
 
 }  // namespace
diff --git a/third_party/blink/renderer/core/layout/flex/flexible_box_algorithm.h b/third_party/blink/renderer/core/layout/flex/flexible_box_algorithm.h
index af207f06..5426b656 100644
--- a/third_party/blink/renderer/core/layout/flex/flexible_box_algorithm.h
+++ b/third_party/blink/renderer/core/layout/flex/flexible_box_algorithm.h
@@ -28,11 +28,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_FLEX_FLEXIBLE_BOX_ALGORITHM_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_FLEX_FLEXIBLE_BOX_ALGORITHM_H_
 
@@ -177,10 +172,13 @@
     return vector_->at(start_ + i);
   }
 
-  FlexItem* begin() { return vector_->data() + start_; }
-  const FlexItem* begin() const { return vector_->data() + start_; }
-  FlexItem* end() { return vector_->data() + end_; }
-  const FlexItem* end() const { return vector_->data() + end_; }
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  FlexItem* begin() { return UNSAFE_TODO(vector_->data() + start_); }
+  const FlexItem* begin() const {
+    return UNSAFE_TODO(vector_->data() + start_);
+  }
+  FlexItem* end() { return UNSAFE_TODO(vector_->data() + end_); }
+  const FlexItem* end() const { return UNSAFE_TODO(vector_->data() + end_); }
 
  private:
   FlexItemVector* vector_;
diff --git a/third_party/blink/renderer/core/layout/forms/layout_text_control.cc b/third_party/blink/renderer/core/layout/forms/layout_text_control.cc
index 92d575ddd..f6b3b00 100644
--- a/third_party/blink/renderer/core/layout/forms/layout_text_control.cc
+++ b/third_party/blink/renderer/core/layout/forms/layout_text_control.cc
@@ -20,11 +20,6 @@
  *
  */
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/forms/layout_text_control.h"
 
 #include "third_party/blink/renderer/core/css/style_change_reason.h"
@@ -163,8 +158,9 @@
     font_families_with_invalid_char_width_map = new HashSet<AtomicString>;
 
     for (size_t i = 0; i < std::size(kFontFamiliesWithInvalidCharWidth); ++i) {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       font_families_with_invalid_char_width_map->insert(
-          AtomicString(kFontFamiliesWithInvalidCharWidth[i]));
+          AtomicString(UNSAFE_TODO(kFontFamiliesWithInvalidCharWidth[i])));
     }
   }
 
diff --git a/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
index 5b122b8a..84bdbb0 100644
--- a/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.h"
 
 #include "third_party/blink/renderer/core/layout/constraint_space_builder.h"
@@ -2650,7 +2645,8 @@
   GridSetPtrVector sets_to_grow_beyond_limit;
 
   while (group_begin != group_end) {
-    GridItemData& grid_item = **(group_begin++);
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    GridItemData& grid_item = **(UNSAFE_TODO(group_begin++));
     DCHECK(grid_item.IsSpanningIntrinsicTrack(track_direction));
 
     sets_to_grow.Shrink(0);
@@ -2816,7 +2812,8 @@
     auto current_group_end = current_group_begin;
     do {
       DCHECK(!(*current_group_end)->IsSpanningFlexibleTrack(track_direction));
-      ++current_group_end;
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      UNSAFE_TODO(++current_group_end);
     } while (current_group_end != reordered_grid_items.end() &&
              !(*current_group_end)->IsSpanningFlexibleTrack(track_direction) &&
              (*current_group_end)->SpanSize(track_direction) ==
@@ -2854,7 +2851,9 @@
   //   sizing function...
 #if DCHECK_IS_ON()
   // Every grid item of the remaining group should span a flexible track.
-  for (auto it = current_group_begin; it != reordered_grid_items.end(); ++it) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (auto it = current_group_begin; it != reordered_grid_items.end();
+       UNSAFE_TODO(++it)) {
     DCHECK((*it)->IsSpanningFlexibleTrack(track_direction));
   }
 #endif
@@ -3050,7 +3049,8 @@
       while (next_set != flexible_sets.end() &&
              (*next_set)->FlexFactor() * leftover_space.RawValue() <
                  (*next_set)->BaseSize().RawValue() * flex_factor_sum) {
-        ++next_set;
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+        UNSAFE_TODO(++next_set);
       }
 
       // Any upcoming flexible set will receive a share of free space of at
@@ -3063,7 +3063,8 @@
       // Otherwise, treat all those sets that does not receive a share of free
       // space of at least their base size as inflexible, effectively excluding
       // them from the leftover space and flex factor sum computation.
-      for (auto it = current_set; it != next_set; ++it) {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      for (auto it = current_set; it != next_set; UNSAFE_TODO(++it)) {
         flex_factor_sum -= (*it)->FlexFactor();
         leftover_space -= (*it)->BaseSize();
       }
@@ -3838,7 +3839,8 @@
 
     for (const auto& grid_item : grid_items) {
       // Grab the offsets and break-token (if present) for this child.
-      auto& item_placement_data = *(placement_data_it++);
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      auto& item_placement_data = *(UNSAFE_TODO(placement_data_it++));
       const BlockBreakToken* break_token = nullptr;
       if (child_break_token_it != child_break_tokens.end()) {
         if ((*child_break_token_it)->InputNode() == grid_item.node)
@@ -4112,9 +4114,11 @@
     *intrinsic_block_size += row_offset_delta;
     AdjustItemOffsets(breakpoint_row_set_index, row_offset_delta);
 
-    auto it = row_offset_adjustments->begin() + breakpoint_row_set_index;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    auto it =
+        UNSAFE_TODO(row_offset_adjustments->begin() + breakpoint_row_set_index);
     while (it != row_offset_adjustments->end())
-      *(it++) += row_offset_delta;
+      *(UNSAFE_TODO(it++)) += row_offset_delta;
 
     return true;
   };
diff --git a/third_party/blink/renderer/core/layout/grid/grid_node.cc b/third_party/blink/renderer/core/layout/grid/grid_node.cc
index d531f32..0106349 100644
--- a/third_party/blink/renderer/core/layout/grid/grid_node.cc
+++ b/third_party/blink/renderer/core/layout/grid/grid_node.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/grid/grid_node.h"
 
 #include "third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.h"
@@ -120,7 +115,8 @@
   // Copy each resolved position to its respective grid item data.
   auto resolved_position = cached_placement_data->grid_item_positions.begin();
   for (auto& grid_item : grid_items) {
-    grid_item.resolved_position = *(resolved_position++);
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    grid_item.resolved_position = *(UNSAFE_TODO(resolved_position++));
   }
   return grid_items;
 }
diff --git a/third_party/blink/renderer/core/layout/inline/fragment_items_builder.cc b/third_party/blink/renderer/core/layout/inline/fragment_items_builder.cc
index 4f0cf1f..0233c3d 100644
--- a/third_party/blink/renderer/core/layout/inline/fragment_items_builder.cc
+++ b/third_party/blink/renderer/core/layout/inline/fragment_items_builder.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/fragment_items_builder.h"
 
 #include "base/not_fatal_until.h"
@@ -410,7 +405,8 @@
   WritingModeConverter line_converter(
       {ToLineWritingMode(GetWritingMode()), TextDirection::kLtr});
 
-  for (auto iter = items_.begin(); iter != items_.end(); ++iter) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (auto iter = items_.begin(); iter != items_.end(); UNSAFE_TODO(++iter)) {
     FragmentItem* item = &iter->item;
     item->SetOffset(converter.ToPhysical(iter->offset, item->Size()));
 
@@ -424,7 +420,8 @@
         const PhysicalRect line_box_bounds = item->RectInContainerFragment();
         line_converter.SetOuterSize(line_box_bounds.size);
         while (--descendants_count) {
-          ++iter;
+          // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+          UNSAFE_TODO(++iter);
           CHECK_NE(iter, items_.end(), base::NotFatalUntil::M130);
           item = &iter->item;
           item->SetOffset(
@@ -440,7 +437,8 @@
 
 void FragmentItemsBuilder::MoveChildrenInBlockDirection(LayoutUnit delta) {
   DCHECK(!is_converted_to_physical_);
-  for (auto iter = items_.begin(); iter != items_.end(); ++iter) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (auto iter = items_.begin(); iter != items_.end(); UNSAFE_TODO(++iter)) {
     if (iter->item->Type() == FragmentItem::kLine) {
       iter->offset.block_offset += delta;
       std::advance(iter, iter->item->DescendantsCount() - 1);
diff --git a/third_party/blink/renderer/core/layout/inline/inline_box_state.cc b/third_party/blink/renderer/core/layout/inline/inline_box_state.cc
index 648a011..e27b86b 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_box_state.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_box_state.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_box_state.h"
 
 #include "base/containers/adapters.h"
@@ -1198,11 +1193,14 @@
   // Because |box| is an item in |stack_|, |box[-1]| is its parent box.
   // If this box doesn't have a parent; i.e., this box is a line box,
   // 'vertical-align' has no effect.
-  DCHECK(box >= stack_.data() && box < stack_.data() + stack_.size());
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  DCHECK(box >= stack_.data() &&
+         box < UNSAFE_TODO(stack_.data() + stack_.size()));
   if (box == stack_.data()) {
     return kPositionNotPending;
   }
-  InlineBoxState& parent_box = box[-1];
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  InlineBoxState& parent_box = UNSAFE_TODO(box[-1]);
 
   switch (vertical_align) {
     case EVerticalAlign::kSub:
@@ -1237,7 +1235,8 @@
       // 'top' and 'bottom' require the layout size of the nearest ancestor that
       // has 'top' or 'bottom', or the line box if none.
       InlineBoxState* ancestor = &parent_box;
-      for (; ancestor != stack_.data(); --ancestor) {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      for (; ancestor != stack_.data(); UNSAFE_TODO(--ancestor)) {
         if (ancestor->style->VerticalAlign() == EVerticalAlign::kTop ||
             ancestor->style->VerticalAlign() == EVerticalAlign::kBottom)
           break;
@@ -1271,10 +1270,12 @@
   if (box == stack_.data()) {
     return result;
   }
-  if (const auto* font_data = box[-1].font->PrimaryFont()) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  if (const auto* font_data = UNSAFE_TODO(box[-1]).font->PrimaryFont()) {
     const FontMetrics& parent_metrics = font_data->GetFontMetrics();
-    result -= parent_metrics.FixedAscent(box[-1].style->GetFontBaseline()) -
-              parent_metrics.FixedAscent(box[-1].alignment_type);
+    result -= parent_metrics.FixedAscent(
+                  UNSAFE_TODO(box[-1]).style->GetFontBaseline()) -
+              parent_metrics.FixedAscent(UNSAFE_TODO(box[-1]).alignment_type);
   }
 
   return result;
diff --git a/third_party/blink/renderer/core/layout/inline/inline_cursor.cc b/third_party/blink/renderer/core/layout/inline/inline_cursor.cc
index 34d51b6..bc44655 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_cursor.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_cursor.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_cursor.h"
 
 #include "base/containers/adapters.h"
@@ -270,9 +265,10 @@
     if (descendants_count > 1) {
       DCHECK(root_box_fragment_);
       DCHECK(fragment_items_);
-      return InlineCursor(
-          *root_box_fragment_, *fragment_items_,
-          ItemsSpan(&*(current_.item_iter_ + 1), descendants_count - 1));
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      return InlineCursor(*root_box_fragment_, *fragment_items_,
+                          UNSAFE_TODO(ItemsSpan(&*(current_.item_iter_ + 1),
+                                                descendants_count - 1)));
     }
     return InlineCursor();
   }
diff --git a/third_party/blink/renderer/core/layout/inline/inline_item_segment.cc b/third_party/blink/renderer/core/layout/inline/inline_item_segment.cc
index 92455cdb..a5821d0 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_item_segment.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_item_segment.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_item_segment.h"
 
 #include "third_party/blink/renderer/core/layout/inline/inline_item.h"
@@ -117,8 +112,9 @@
 #if DCHECK_IS_ON()
 void InlineItemSegments::CheckOffset(unsigned offset,
                                      const InlineItemSegment* segment) const {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   DCHECK(segment >= segments_.data() &&
-         segment < segments_.data() + segments_.size());
+         segment < UNSAFE_TODO(segments_.data() + segments_.size()));
   DCHECK_GE(offset, OffsetForSegment(*segment));
   DCHECK_LT(offset, segment->EndOffset());
 }
@@ -153,9 +149,10 @@
                                    : segments_.size();
   CHECK_GT(end_segment_index, segment_index);
   CHECK_LE(end_segment_index, segments_.size());
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   segment = std::upper_bound(
-      segment, segment + (end_segment_index - segment_index), start_offset,
-      [](unsigned offset, const InlineItemSegment& segment) {
+      segment, UNSAFE_TODO(segment + (end_segment_index - segment_index)),
+      start_offset, [](unsigned offset, const InlineItemSegment& segment) {
         return offset < segment.EndOffset();
       });
   CheckOffset(start_offset, segment);
@@ -244,7 +241,8 @@
     while (segment_index < segments_.size() &&
            item.StartOffset() >= segment->EndOffset()) {
       ++segment_index;
-      ++segment;
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      UNSAFE_TODO(++segment);
     }
     items_to_segments_[item_index++] = segment_index;
   }
diff --git a/third_party/blink/renderer/core/layout/inline/inline_item_segment.h b/third_party/blink/renderer/core/layout/inline/inline_item_segment.h
index 6c2bdc0..4b8d7f54 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_item_segment.h
+++ b/third_party/blink/renderer/core/layout/inline/inline_item_segment.h
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_INLINE_ITEM_SEGMENT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_INLINE_ITEM_SEGMENT_H_
 
@@ -208,7 +203,8 @@
     return;
   }
   start_offset_ = range_.end;
-  ++segment_;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  UNSAFE_TODO(++segment_);
   range_ = segment_->ToRunSegmenterRange(start_offset_, end_offset_);
 }
 
diff --git a/third_party/blink/renderer/core/layout/inline/inline_item_span.h b/third_party/blink/renderer/core/layout/inline/inline_item_span.h
index 7cce43a7..0c803b9b5 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_item_span.h
+++ b/third_party/blink/renderer/core/layout/inline/inline_item_span.h
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_INLINE_ITEM_SPAN_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_INLINE_ITEM_SPAN_H_
 
@@ -43,11 +38,13 @@
 
   const InlineItem* begin() const {
     SECURITY_DCHECK(begin_ < data_->items.size());
-    return data_->items.data() + begin_;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    return UNSAFE_TODO(data_->items.data() + begin_);
   }
   const InlineItem* end() const {
     SECURITY_DCHECK(begin_ + size_ <= data_->items.size());
-    return begin() + size_;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    return UNSAFE_TODO(begin() + size_);
   }
 
   const InlineItem& front() const {
diff --git a/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc b/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc
index 0471f04..45828dbd 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_items_builder.h"
 
 #include <type_traits>
@@ -575,9 +570,7 @@
   const Vector<unsigned> length_map = TransformedString::CreateLengthMap(
       original_length, transformed.length(), offset_map);
   CHECK(transformed.length() == length_map.size() || length_map.size() == 0);
-  AppendText(
-      TransformedString(transformed, {length_map.data(), length_map.size()}),
-      *layout_text);
+  AppendText(TransformedString(transformed, length_map), *layout_text);
 }
 
 template <typename MappingBuilder>
@@ -1341,7 +1334,10 @@
 
   // Trailing spaces can be removed across non-character items.
   // Adjust their offsets if after the removed index.
-  for (item++; item != items_->data() + items_->size(); item++) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (UNSAFE_TODO(item++);
+       item != UNSAFE_TODO(items_->data() + items_->size());
+       UNSAFE_TODO(item++)) {
     item->SetOffset(item->StartOffset() - 1, item->EndOffset() - 1);
   }
 }
@@ -1381,7 +1377,10 @@
   item->SetEndOffset(item->EndOffset() + 1);
   item->SetEndCollapseType(InlineItem::kCollapsible);
 
-  for (item++; item != items_->data() + items_->size(); item++) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (UNSAFE_TODO(item++);
+       item != UNSAFE_TODO(items_->data() + items_->size());
+       UNSAFE_TODO(item++)) {
     item->SetOffset(item->StartOffset() + 1, item->EndOffset() + 1);
   }
 }
diff --git a/third_party/blink/renderer/core/layout/inline/inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/inline/inline_layout_algorithm.cc
index 0838b29..99f287e 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_layout_algorithm.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_layout_algorithm.h"
 
 #include <memory>
@@ -1116,7 +1111,8 @@
 
 #if DCHECK_IS_ON()
     // Make sure the last opportunity has the correct properties.
-    if (opportunities_it + 1 == opportunities.end()) {
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    if (UNSAFE_TODO(opportunities_it + 1) == opportunities.end()) {
       // We shouldn't have any shapes affecting the last opportunity.
       DCHECK(!opportunity.HasShapeExclusions());
       DCHECK_EQ(line_block_size, LayoutUnit());
@@ -1141,10 +1137,11 @@
         opportunity.ComputeLineLayoutOpportunity(constraint_space,
                                                  line_block_size, block_delta);
     if (line_break_strategy.NeedsToPrepare()) [[unlikely]] {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       line_break_strategy.Prepare(
           context_, Node(), constraint_space,
-          base::span(opportunities_it, opportunities.end()), line_opportunity,
-          leading_floats, break_token, &GetExclusionSpace());
+          UNSAFE_TODO(base::span(opportunities_it, opportunities.end())),
+          line_opportunity, leading_floats, break_token, &GetExclusionSpace());
     }
     bool is_line_info_cached = false;
     LineInfo& line_info =
@@ -1232,10 +1229,12 @@
       }
       // We've either don't have any shapes, or run out of block-delta space
       // to test, proceed to the next layout opportunity.
-      if (opportunities_it + 1 != opportunities.end()) {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      if (UNSAFE_TODO(opportunities_it + 1) != opportunities.end()) {
         block_delta = LayoutUnit();
         line_block_size = LayoutUnit();
-        ++opportunities_it;
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+        UNSAFE_TODO(++opportunities_it);
         continue;
       }
       // Normally the last opportunity should fit the line, but arithmetic
@@ -1315,7 +1314,8 @@
     if (total_block_size + block_delta > opportunity.rect.BlockSize()) {
       block_delta = LayoutUnit();
       line_block_size = LayoutUnit();
-      ++opportunities_it;
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      UNSAFE_TODO(++opportunities_it);
       continue;
     }
 
diff --git a/third_party/blink/renderer/core/layout/inline/inline_node.cc b/third_party/blink/renderer/core/layout/inline/inline_node.cc
index 9bdd761..79908c3 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_node.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_node.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_node.h"
 
 #include <memory>
@@ -246,12 +241,13 @@
     HeapVector<Member<const ShapeResult>> shape_results;
     if (!reusable_items_)
       return shape_results;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
     for (auto item = std::lower_bound(
              reusable_items_->begin(), reusable_items_->end(), start_offset,
              [](const InlineItem& item, unsigned offset) {
                return item.EndOffset() <= offset;
              });
-         item != reusable_items_->end(); ++item) {
+         item != reusable_items_->end(); UNSAFE_TODO(++item)) {
       if (end_offset <= item->StartOffset())
         break;
       if (item->EndOffset() < start_offset)
@@ -710,7 +706,8 @@
     // Copy items before replaced range
     auto end = data_->items.end();
     auto it = data_->items.begin();
-    for (; it != end && it->end_offset_ < start_offset; ++it) {
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    for (; it != end && it->end_offset_ < start_offset; UNSAFE_TODO(++it)) {
       CHECK(it != data_->items.end(), base::NotFatalUntil::M130);
       items.push_back(*it);
     }
@@ -727,8 +724,10 @@
       }
 
       // Skip items in replaced range.
-      while (it != end && it->end_offset_ < end_offset)
-        ++it;
+      while (it != end && it->end_offset_ < end_offset) {
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+        UNSAFE_TODO(++it);
+      }
 
       if (it == end)
         break;
@@ -752,12 +751,14 @@
       }
 
       // Copy items after replaced range
-      ++it;
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      UNSAFE_TODO(++it);
       while (it != end) {
         DCHECK_LE(end_offset, it->start_offset_);
         items.push_back(*it);
         ShiftItem(&items.back(), diff);
-        ++it;
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+        UNSAFE_TODO(++it);
       }
       break;
     }
@@ -1697,8 +1698,11 @@
   memcpy(characters, text, length * sizeof(CharType));
   for (const InlineItem& item : items) {
     if (item.Type() == InlineItem::kAtomicInline && item.IsImage()) {
-      DCHECK_EQ(characters[item.StartOffset()], kObjectReplacementCharacter);
-      characters[item.StartOffset()] = kNoBreakSpaceCharacter;
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      DCHECK_EQ(UNSAFE_TODO(characters[item.StartOffset()]),
+                kObjectReplacementCharacter);
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      UNSAFE_TODO(characters[item.StartOffset()]) = kNoBreakSpaceCharacter;
     }
   }
   return buffer.Release();
@@ -1841,7 +1845,8 @@
     // may break text into multiple lines, and may remove trailing spaces. For
     // max size, use the original text widths from InlineItem instead.
     void AddTextUntil(ItemIterator end) {
-      for (; next_item != end; ++next_item) {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      for (; next_item != end; UNSAFE_TODO(++next_item)) {
         if (next_item->Type() == InlineItem::kOpenTag &&
             next_item->GetLayoutObject()->IsInlineRubyText()) {
           ++annotation_nesting_level;
@@ -1861,7 +1866,9 @@
       // Add all text up to the end of the line. There may be spaces that were
       // removed during the line breaking.
       CHECK_LE(line_info.EndItemIndex(), items_data.items.size());
-      AddTextUntil(items_data.items.begin() + line_info.EndItemIndex());
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      AddTextUntil(
+          UNSAFE_TODO(items_data.items.begin() + line_info.EndItemIndex()));
       max_size = floats->ComputeMaxSizeForLine(position.ClampNegativeToZero(),
                                                max_size);
       position = LayoutUnit();
diff --git a/third_party/blink/renderer/core/layout/inline/inline_text_auto_space.cc b/third_party/blink/renderer/core/layout/inline/inline_text_auto_space.cc
index c22d6353..ae09d697 100644
--- a/third_party/blink/renderer/core/layout/inline/inline_text_auto_space.cc
+++ b/third_party/blink/renderer/core/layout/inline/inline_text_auto_space.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/inline_text_auto_space.h"
 
 #include <unicode/uchar.h>
@@ -39,7 +34,9 @@
   // They will be, for example, `USCRIPT_LATIN` if the previous character is
   // `USCRIPT_LATIN`. Check if we have any such characters.
   CHECK(!text.Is8Bit());
-  return std::any_of(text.Characters16(), text.Characters16() + text.length(),
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  return std::any_of(text.Characters16(),
+                     UNSAFE_TODO(text.Characters16() + text.length()),
                      [](const UChar ch) {
                        return ch >= TextAutoSpace::kNonHanIdeographMin &&
                               ch <= TextAutoSpace::kNonHanIdeographMax;
@@ -71,7 +68,8 @@
         // https://drafts.csswg.org/css-text-4/#propdef-text-autospace.
         offsets_with_spacing_.emplace_back(
             OffsetWithSpacing({.offset = *offset, .spacing = spacing}));
-        ++offset;
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+        UNSAFE_TODO(++offset);
       } else {
         // This branch holds an assumption that RTL texts cannot be ideograph.
         // The assumption might be wrong, but should work for almost all cases.
@@ -87,7 +85,8 @@
 
     // Update the previous item in prepare for the next iteration.
     last_item_ = current_item;
-    for (; offset != offsets.end(); ++offset) {
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    for (; offset != offsets.end(); UNSAFE_TODO(++offset)) {
       offsets_with_spacing_.emplace_back(
           OffsetWithSpacing({.offset = *offset, .spacing = spacing}));
     }
@@ -204,7 +203,8 @@
     do {
       // Find the `RunSegmenterRange` for `offset`.
       while (offset >= range->end) {
-        ++range;
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+        UNSAFE_TODO(++range);
         CHECK_NE(range, ranges_.end());
       }
       DCHECK_GE(offset, range->start);
diff --git a/third_party/blink/renderer/core/layout/inline/line_breaker.cc b/third_party/blink/renderer/core/layout/inline/line_breaker.cc
index 203c702a..4dc0f4c 100644
--- a/third_party/blink/renderer/core/layout/inline/line_breaker.cc
+++ b/third_party/blink/renderer/core/layout/inline/line_breaker.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/line_breaker.h"
 
 #include "base/containers/adapters.h"
@@ -282,9 +277,10 @@
     const HeapVector<InlineItem>& items,
     wtf_size_t item_index) {
   LayoutUnit inline_end_size;
-  for (const InlineItem *cur = items.data() + item_index,
-                        *end = items.data() + items.size();
-       cur != end; ++cur) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (const InlineItem *cur = UNSAFE_TODO(items.data() + item_index),
+                        *end = UNSAFE_TODO(items.data() + items.size());
+       cur != end; UNSAFE_TODO(++cur)) {
     const InlineItem& item = *cur;
 
     if (item.Type() == InlineItem::kCloseTag) {
@@ -1226,17 +1222,20 @@
   for (wtf_size_t i =
            base::checked_cast<wtf_size_t>(std::distance(items, &item)) + 1;
        i < end_item_index_; ++i) {
-    if (items[i].Length() == 0u) {
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    const InlineItem& item_i = UNSAFE_TODO(items[i]);
+    if (item_i.Length() == 0u) {
       continue;
     }
-    if (items[i].Type() != InlineItem::kOpenRubyColumn &&
-        items[i].Type() != InlineItem::kCloseRubyColumn) {
-      return items[i].StartOffset() - item.EndOffset();
+    if (item_i.Type() != InlineItem::kOpenRubyColumn &&
+        item_i.Type() != InlineItem::kCloseRubyColumn) {
+      return item_i.StartOffset() - item.EndOffset();
     }
   }
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   return (end_item_index_ >= Items().size()
               ? Text().length()
-              : items[end_item_index_].StartOffset()) -
+              : UNSAFE_TODO(items[end_item_index_]).StartOffset()) -
          item.EndOffset();
 }
 
diff --git a/third_party/blink/renderer/core/layout/inline/line_info.cc b/third_party/blink/renderer/core/layout/inline/line_info.cc
index 5b3cb09..d8ad595 100644
--- a/third_party/blink/renderer/core/layout/inline/line_info.cc
+++ b/third_party/blink/renderer/core/layout/inline/line_info.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/line_info.h"
 
 #include "base/containers/adapters.h"
@@ -589,8 +584,9 @@
                           return a->StartItemIndex() < b->StartItemIndex();
                         }));
 #endif  //  EXPENSIVE_DCHECKS_ARE_ON()
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (auto iter = parallel_flow_break_tokens_.begin();
-       iter != parallel_flow_break_tokens_.end(); ++iter) {
+       iter != parallel_flow_break_tokens_.end(); UNSAFE_TODO(++iter)) {
     const InlineBreakToken* break_token = *iter;
     DCHECK(break_token->IsInParallelBlockFlow());
     if (break_token->StartItemIndex() >= item_index) {
diff --git a/third_party/blink/renderer/core/layout/inline/line_info_list.h b/third_party/blink/renderer/core/layout/inline/line_info_list.h
index 7b21c01..ba53bda 100644
--- a/third_party/blink/renderer/core/layout/inline/line_info_list.h
+++ b/third_party/blink/renderer/core/layout/inline/line_info_list.h
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_LINE_INFO_LIST_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_LINE_INFO_LIST_H_
 
@@ -34,13 +29,15 @@
   // max_lines_`.
   LineInfo& operator[](wtf_size_t index) {
     DCHECK_LT(index, Size());
-    return line_infos_[(start_index_ + index) % max_lines_];
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    return UNSAFE_TODO(line_infos_[(start_index_ + index) % max_lines_]);
   }
   // Out-of-bounds `index` will hit `DCHECK` and returns the value at `index %
   // max_lines_`.
   const LineInfo& operator[](wtf_size_t index) const {
     DCHECK_LT(index, Size());
-    return line_infos_[(start_index_ + index) % max_lines_];
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    return UNSAFE_TODO(line_infos_[(start_index_ + index) % max_lines_]);
   }
   // If empty, this will hit `DCHECK`.
   LineInfo& Front() { return (*this)[0]; }
diff --git a/third_party/blink/renderer/core/layout/inline/offset_mapping.cc b/third_party/blink/renderer/core/layout/inline/offset_mapping.cc
index b8eae2a..6c8f995 100644
--- a/third_party/blink/renderer/core/layout/inline/offset_mapping.cc
+++ b/third_party/blink/renderer/core/layout/inline/offset_mapping.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/inline/offset_mapping.h"
 
 #include <algorithm>
@@ -302,11 +297,12 @@
   if (range_start == range_end || units_[range_start].DOMStart() > offset)
     return nullptr;
   // Find the last unit where unit.dom_start <= offset
-  auto unit = std::prev(std::upper_bound(
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  auto unit = std::prev(UNSAFE_TODO(std::upper_bound(
       units_.begin() + range_start, units_.begin() + range_end, offset,
       [](unsigned offset, const OffsetMappingUnit& unit) {
         return offset < unit.DOMStart();
-      }));
+      })));
   if (unit->DOMEnd() < offset)
     return nullptr;
   return &*unit;
@@ -332,22 +328,25 @@
     return UnitVector();
 
   // Find the first unit where unit.dom_end >= start_offset
-  auto result_begin = std::lower_bound(
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  auto result_begin = UNSAFE_TODO(std::lower_bound(
       units_.begin() + range_start, units_.begin() + range_end, start_offset,
       [](const OffsetMappingUnit& unit, unsigned offset) {
         return unit.DOMEnd() < offset;
-      });
+      }));
 
   // Find the next of the last unit where unit.dom_start <= end_offset
-  auto result_end =
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  auto result_end = UNSAFE_TODO(
       std::upper_bound(result_begin, units_.begin() + range_end, end_offset,
                        [](unsigned offset, const OffsetMappingUnit& unit) {
                          return offset < unit.DOMStart();
-                       });
+                       }));
 
   UnitVector result;
   result.reserve(base::checked_cast<wtf_size_t>(result_end - result_begin));
-  for (const auto& unit : base::span(result_begin, result_end)) {
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  for (const auto& unit : UNSAFE_TODO(base::span(result_begin, result_end))) {
     // If the unit isn't fully within the range, create a new unit that's
     // within the range.
     const unsigned clamped_start = std::max(unit.DOMStart(), start_offset);
@@ -386,7 +385,8 @@
                      return unit.GetLayoutObject() != layout_object;
                    });
   DCHECK_LT(begin, end);
-  return base::span(begin, end);
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  return UNSAFE_TODO(base::span(begin, end));
 }
 
 base::span<const OffsetMappingUnit>
@@ -407,7 +407,8 @@
   // Find the next of the last unit where unit.text_content_start < end
   auto result_end = std::ranges::upper_bound(
       units_, end, std::less_equal<>{}, &OffsetMappingUnit::TextContentStart);
-  return base::span(result_begin, result_end);
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  return UNSAFE_TODO(base::span(result_begin, result_end));
 }
 
 std::optional<unsigned> OffsetMapping::GetTextContentOffset(
@@ -429,14 +430,16 @@
   const auto node_and_offset = ToNodeOffsetPair(position);
   const Node& node = node_and_offset.first;
   const unsigned offset = node_and_offset.second;
-  while (unit != units_.data() + units_.size() &&
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  while (unit != UNSAFE_TODO(units_.data() + units_.size()) &&
          unit->AssociatedNode() == node) {
     if (unit->DOMEnd() > offset &&
         unit->GetType() != OffsetMappingUnitType::kCollapsed) {
       const unsigned result = std::max(offset, unit->DOMStart());
       return CreatePositionForOffsetMapping(node, result);
     }
-    ++unit;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    UNSAFE_TODO(++unit);
   }
   return Position();
 }
@@ -460,7 +463,8 @@
     if (unit == units_.data()) {
       break;
     }
-    --unit;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    UNSAFE_TODO(--unit);
   }
   return Position();
 }
diff --git a/third_party/blink/renderer/core/layout/table/table_layout_algorithm_types.cc b/third_party/blink/renderer/core/layout/table/table_layout_algorithm_types.cc
index e59b19a..6e17e0b 100644
--- a/third_party/blink/renderer/core/layout/table/table_layout_algorithm_types.cc
+++ b/third_party/blink/renderer/core/layout/table/table_layout_algorithm_types.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/table/table_layout_algorithm_types.h"
 
 #include "third_party/blink/renderer/core/layout/block_node.h"
@@ -370,8 +365,11 @@
       break;
     case kBody:
       ++position_;
-      if (body_vector_->begin() + position_ == grouped_children_.bodies.end())
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      if (UNSAFE_TODO(body_vector_->begin() + position_) ==
+          grouped_children_.bodies.end()) {
         AdvanceForwardToNonEmptySection();
+      }
       break;
     case kEnd:
       break;
diff --git a/third_party/blink/renderer/core/layout/table/table_layout_utils.cc b/third_party/blink/renderer/core/layout/table/table_layout_utils.cc
index 31ef93a..5222ff9 100644
--- a/third_party/blink/renderer/core/layout/table/table_layout_utils.cc
+++ b/third_party/blink/renderer/core/layout/table/table_layout_utils.cc
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/layout/table/table_layout_utils.h"
 
 #include "third_party/blink/renderer/core/layout/block_layout_algorithm_utils.h"
@@ -76,9 +71,11 @@
       std::min(span, column_constraints->data.size() - start_column_index);
   TableTypes::Column* start_column =
       &column_constraints->data[start_column_index];
-  TableTypes::Column* end_column = start_column + effective_span;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  TableTypes::Column* end_column = UNSAFE_TODO(start_column + effective_span);
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column != end_column;
-       ++column) {
+       UNSAFE_TODO(++column)) {
     if (!column->is_collapsed) {
       column->is_mergeable = false;
       return;
@@ -487,8 +484,9 @@
   LayoutUnit total_auto_max_inline_size;
   LayoutUnit total_fixed_max_inline_size;
 
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (const TableTypes::Column* column = start_column; column != end_column;
-       ++column) {
+       UNSAFE_TODO(++column)) {
     all_columns_count++;
     DCHECK(column->min_inline_size);
     DCHECK(column->max_inline_size);
@@ -503,29 +501,30 @@
       total_percent += *column->percent;
       LayoutUnit percent_inline_size =
           column->ResolvePercentInlineSize(target_inline_size);
-      guess_sizes[kMinGuess] += *column->min_inline_size;
-      guess_sizes[kPercentageGuess] += percent_inline_size;
-      guess_sizes[kSpecifiedGuess] += percent_inline_size;
-      guess_sizes[kMaxGuess] += percent_inline_size;
-      guess_size_total_increases[kPercentageGuess] +=
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      UNSAFE_TODO(guess_sizes[kMinGuess]) += *column->min_inline_size;
+      UNSAFE_TODO(guess_sizes[kPercentageGuess]) += percent_inline_size;
+      UNSAFE_TODO(guess_sizes[kSpecifiedGuess]) += percent_inline_size;
+      UNSAFE_TODO(guess_sizes[kMaxGuess]) += percent_inline_size;
+      UNSAFE_TODO(guess_size_total_increases[kPercentageGuess]) +=
           percent_inline_size - *column->min_inline_size;
     } else if (column->is_constrained) {  // Fixed column
       fixed_columns_count++;
       total_fixed_max_inline_size += *column->max_inline_size;
-      guess_sizes[kMinGuess] += *column->min_inline_size;
-      guess_sizes[kPercentageGuess] += *column->min_inline_size;
-      guess_sizes[kSpecifiedGuess] += *column->max_inline_size;
-      guess_sizes[kMaxGuess] += *column->max_inline_size;
-      guess_size_total_increases[kSpecifiedGuess] +=
+      UNSAFE_TODO(guess_sizes[kMinGuess]) += *column->min_inline_size;
+      UNSAFE_TODO(guess_sizes[kPercentageGuess]) += *column->min_inline_size;
+      UNSAFE_TODO(guess_sizes[kSpecifiedGuess]) += *column->max_inline_size;
+      UNSAFE_TODO(guess_sizes[kMaxGuess]) += *column->max_inline_size;
+      UNSAFE_TODO(guess_size_total_increases[kSpecifiedGuess]) +=
           *column->max_inline_size - *column->min_inline_size;
     } else {  // Auto column
       auto_columns_count++;
       total_auto_max_inline_size += *column->max_inline_size;
-      guess_sizes[kMinGuess] += *column->min_inline_size;
-      guess_sizes[kPercentageGuess] += *column->min_inline_size;
-      guess_sizes[kSpecifiedGuess] += *column->min_inline_size;
-      guess_sizes[kMaxGuess] += *column->max_inline_size;
-      guess_size_total_increases[kMaxGuess] +=
+      UNSAFE_TODO(guess_sizes[kMinGuess]) += *column->min_inline_size;
+      UNSAFE_TODO(guess_sizes[kPercentageGuess]) += *column->min_inline_size;
+      UNSAFE_TODO(guess_sizes[kSpecifiedGuess]) += *column->min_inline_size;
+      UNSAFE_TODO(guess_sizes[kMaxGuess]) += *column->max_inline_size;
+      UNSAFE_TODO(guess_size_total_increases[kMaxGuess]) +=
           *column->max_inline_size - *column->min_inline_size;
     }
   }
@@ -537,11 +536,14 @@
   // Target inline size must be wider than sum of min inline sizes.
   // This is always true for assignable_table_inline_size, but not for
   // colspan_cells.
-  target_inline_size = std::max(target_inline_size, guess_sizes[kMinGuess]);
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  target_inline_size =
+      std::max(target_inline_size, UNSAFE_TODO(guess_sizes[kMinGuess]));
 
   unsigned starting_guess = kAboveMax;
   for (unsigned i = kMinGuess; i != kAboveMax; ++i) {
-    if (guess_sizes[i] >= target_inline_size) {
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+    if (UNSAFE_TODO(guess_sizes[i]) >= target_inline_size) {
       starting_guess = i;
       break;
     }
@@ -551,8 +553,9 @@
     case kMinGuess: {
       // All columns are their min inline-size.
       LayoutUnit* computed_size = computed_sizes.data();
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       for (const TableTypes::Column* column = start_column;
-           column != end_column; ++column, ++computed_size) {
+           column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
         if (column->is_mergeable) {
           continue;
         }
@@ -562,15 +565,17 @@
     case kPercentageGuess: {
       // Percent columns grow in proportion to difference between their
       // percentage size and their minimum size.
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       LayoutUnit percent_inline_size_increase =
-          guess_size_total_increases[kPercentageGuess];
+          UNSAFE_TODO(guess_size_total_increases[kPercentageGuess]);
       LayoutUnit distributable_inline_size =
-          target_inline_size - guess_sizes[kMinGuess];
+          target_inline_size - UNSAFE_TODO(guess_sizes[kMinGuess]);
       LayoutUnit remaining_deficit = distributable_inline_size;
       LayoutUnit* computed_size = computed_sizes.data();
       LayoutUnit* last_computed_size = nullptr;
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       for (const TableTypes::Column* column = start_column;
-           column != end_column; ++column, ++computed_size) {
+           column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
         if (column->is_mergeable) {
           continue;
         }
@@ -601,15 +606,16 @@
     } break;
     case kSpecifiedGuess: {
       // Fixed columns grow, auto gets min, percent gets %max.
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       LayoutUnit fixed_inline_size_increase =
-          guess_size_total_increases[kSpecifiedGuess];
+          UNSAFE_TODO(guess_size_total_increases[kSpecifiedGuess]);
       LayoutUnit distributable_inline_size =
-          target_inline_size - guess_sizes[kPercentageGuess];
+          target_inline_size - UNSAFE_TODO(guess_sizes[kPercentageGuess]);
       LayoutUnit remaining_deficit = distributable_inline_size;
       LayoutUnit* last_computed_size = nullptr;
       LayoutUnit* computed_size = computed_sizes.data();
       for (const TableTypes::Column* column = start_column;
-           column != end_column; ++column, ++computed_size) {
+           column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
         if (column->is_mergeable) {
           continue;
         }
@@ -639,23 +645,27 @@
     } break;
     case kMaxGuess: {
       // Auto columns grow, fixed gets max, percent gets %max.
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       LayoutUnit auto_inline_size_increase =
-          guess_size_total_increases[kMaxGuess];
+          UNSAFE_TODO(guess_size_total_increases[kMaxGuess]);
       LayoutUnit distributable_inline_size =
-          target_inline_size - guess_sizes[kSpecifiedGuess];
+          UNSAFE_TODO(target_inline_size - guess_sizes[kSpecifiedGuess]);
       // When the inline-sizes match exactly, this usually means that table
       // inline-size is auto, and that columns should be wide enough to
       // accommodate content without wrapping.
       // Instead of using the distributing math to compute final column
       // inline-size, we use the max inline-size. Using distributing math can
       // cause rounding errors, and unintended line wrap.
-      bool is_exact_match = target_inline_size == guess_sizes[kMaxGuess];
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+      bool is_exact_match =
+          target_inline_size == UNSAFE_TODO(guess_sizes[kMaxGuess]);
       LayoutUnit remaining_deficit =
           is_exact_match ? LayoutUnit() : distributable_inline_size;
       LayoutUnit* last_computed_size = nullptr;
       LayoutUnit* computed_size = computed_sizes.data();
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       for (const TableTypes::Column* column = start_column;
-           column != end_column; ++column, ++computed_size) {
+           column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
         if (column->is_mergeable) {
           continue;
         }
@@ -684,15 +694,17 @@
       }
     } break;
     case kAboveMax: {
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       LayoutUnit distributable_inline_size =
-          target_inline_size - guess_sizes[kMaxGuess];
+          target_inline_size - UNSAFE_TODO(guess_sizes[kMaxGuess]);
       if (auto_columns_count > 0) {
         // Grow auto columns if available.
         LayoutUnit remaining_deficit = distributable_inline_size;
         LayoutUnit* last_computed_size = nullptr;
         LayoutUnit* computed_size = computed_sizes.data();
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
         for (const TableTypes::Column* column = start_column;
-             column != end_column; ++column, ++computed_size) {
+             column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
           if (column->is_mergeable) {
             continue;
           }
@@ -723,8 +735,9 @@
         LayoutUnit remaining_deficit = distributable_inline_size;
         LayoutUnit* last_computed_size = nullptr;
         LayoutUnit* computed_size = computed_sizes.data();
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
         for (const TableTypes::Column* column = start_column;
-             column != end_column; ++column, ++computed_size) {
+             column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
           if (column->is_mergeable) {
             continue;
           }
@@ -757,8 +770,9 @@
         LayoutUnit remaining_deficit = distributable_inline_size;
         LayoutUnit* last_computed_size = nullptr;
         LayoutUnit* computed_size = computed_sizes.data();
+        // TODO(crbug.com/351564777): Resolve a buffer safety issue.
         for (const TableTypes::Column* column = start_column;
-             column != end_column; ++column, ++computed_size) {
+             column != end_column; UNSAFE_TODO(++column, ++computed_size)) {
           if (column->is_mergeable || !column->percent) {
             continue;
           }
@@ -847,8 +861,10 @@
       }
     }
     LayoutUnit* column_size = column_sizes.data();
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
     for (auto column = column_constraints.data.begin();
-         column != column_constraints.data.end(); ++column, ++column_size) {
+         column != column_constraints.data.end();
+         UNSAFE_TODO(++column, ++column_size)) {
       if (!TreatAsFixed(*column)) {
         continue;
       }
@@ -886,8 +902,10 @@
       }
     }
     LayoutUnit* column_size = column_sizes.data();
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
     for (auto column = column_constraints.data.begin();
-         column != column_constraints.data.end(); ++column, ++column_size) {
+         column != column_constraints.data.end();
+         UNSAFE_TODO(++column, ++column_size)) {
       if (!column->percent) {
         continue;
       }
@@ -911,8 +929,10 @@
   bool distribute_zero_inline_size =
       zero_inline_size_constrained_colums_count == all_columns_count;
 
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (auto column = column_constraints.data.begin();
-       column != column_constraints.data.end(); ++column, ++column_size) {
+       column != column_constraints.data.end();
+       UNSAFE_TODO(++column, ++column_size)) {
     if (column->percent || TreatAsFixed(*column)) {
       continue;
     }
@@ -945,15 +965,18 @@
             column_constraints->data.size() - colspan_cell.start_column);
   TableTypes::Column* start_column =
       &column_constraints->data[colspan_cell.start_column];
-  TableTypes::Column* end_column = start_column + colspan_cell.span;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  TableTypes::Column* end_column =
+      UNSAFE_TODO(start_column + colspan_cell.span);
   DCHECK_NE(start_column, end_column);
 
   // Inline sizes for redistribution exclude border spacing.
   LayoutUnit total_inner_border_spacing;
   unsigned effective_span = 0;
   bool is_first_column = true;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column != end_column;
-       ++column) {
+       UNSAFE_TODO(++column)) {
     if (column->is_mergeable) {
       continue;
     }
@@ -992,8 +1015,9 @@
   }
 
   TableTypes::Column* last_column = nullptr;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column < end_column;
-       ++column) {
+       UNSAFE_TODO(++column)) {
     if (column->is_mergeable) {
       continue;
     }
@@ -1035,13 +1059,15 @@
                column_constraints->data.size() - colspan_cell.start_column);
   TableTypes::Column* start_column =
       &column_constraints->data[colspan_cell.start_column];
-  TableTypes::Column* end_column = start_column + effective_span;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
+  TableTypes::Column* end_column = UNSAFE_TODO(start_column + effective_span);
 
   // Inline sizes for redistribution exclude border spacing.
   LayoutUnit total_inner_border_spacing;
   bool is_first_column = true;
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column != end_column;
-       ++column) {
+       UNSAFE_TODO(++column)) {
     if (!column->is_mergeable) {
       if (!is_first_column) {
         total_inner_border_spacing += inline_border_spacing;
@@ -1068,8 +1094,9 @@
     unsigned percent_columns_count = 0;
     unsigned nonpercent_columns_count = 0;
     LayoutUnit nonpercent_columns_max_inline_size;
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
     for (TableTypes::Column* column = start_column; column != end_column;
-         ++column) {
+         UNSAFE_TODO(++column)) {
       if (!column->max_inline_size) {
         column->max_inline_size = LayoutUnit();
       }
@@ -1092,8 +1119,9 @@
     if (surplus_percent > 0.0f && all_columns_count > percent_columns_count) {
       // Distribute surplus percent to non-percent columns in proportion to
       // max_inline_size.
+      // TODO(crbug.com/351564777): Resolve a buffer safety issue.
       for (TableTypes::Column* column = start_column; column != end_column;
-           ++column) {
+           UNSAFE_TODO(++column)) {
         if (column->percent || column->is_mergeable) {
           continue;
         }
@@ -1117,8 +1145,9 @@
   // TODO(atotic) See crbug.com/531752 for discussion about differences
   // between FF/Chrome.
   // Minimum inline size gets distributed with standard distribution algorithm.
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column != end_column;
-       ++column) {
+       UNSAFE_TODO(++column)) {
     if (!column->min_inline_size) {
       column->min_inline_size = LayoutUnit();
     }
@@ -1130,8 +1159,9 @@
       DistributeInlineSizeToComputedInlineSizeAuto(
           colspan_cell_min_inline_size, start_column, end_column, true);
   LayoutUnit* computed_size = computed_sizes.data();
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column != end_column;
-       ++column, ++computed_size) {
+       UNSAFE_TODO(++column, ++computed_size)) {
     column->min_inline_size =
         std::max(*column->min_inline_size, *computed_size);
   }
@@ -1140,8 +1170,9 @@
       end_column, /* treat_target_size_as_constrained */
       colspan_cell.cell_inline_constraint.is_constrained);
   computed_size = computed_sizes.data();
+  // TODO(crbug.com/351564777): Resolve a buffer safety issue.
   for (TableTypes::Column* column = start_column; column != end_column;
-       ++column, ++computed_size) {
+       UNSAFE_TODO(++column, ++computed_size)) {
     column->max_inline_size =
         std::max(std::max(*column->min_inline_size, *column->max_inline_size),
                  *computed_size);
@@ -1884,8 +1915,9 @@
         assignable_table_inline_size, column_constraints);
   } else {
     const TableTypes::Column* start_column = &column_constraints.data[0];
+    // TODO(crbug.com/351564777): Resolve a buffer safety issue.
     const TableTypes::Column* end_column =
-        start_column + column_constraints.data.size();
+        UNSAFE_TODO(start_column + column_constraints.data.size());
     return DistributeInlineSizeToComputedInlineSizeAuto(
         assignable_table_inline_size, start_column, end_column,
         /* treat_target_size_as_constrained */ true);
diff --git a/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc b/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc
index ea154e7..848e9f9 100644
--- a/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc
+++ b/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc
@@ -11,6 +11,7 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
+#include "base/time/time.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/input/synthetic_web_input_event_builders.h"
@@ -568,7 +569,9 @@
   AnchorElementInteractionViewportHeuristicsTest() {
     feature_list_.InitWithFeaturesAndParameters(
         {{features::kNavigationPredictor,
-          {{"random_anchor_sampling_period", "1"}}},
+          {{"random_anchor_sampling_period", "1"},
+           {"intersection_observation_after_fcp_only", "true"},
+           {"post_fcp_observation_delay", "10ms"}}},
          {features::kNavigationPredictorNewViewportFeatures, {}},
          {features::kPreloadingViewportHeuristics,
           {{"delay", "100ms"},
@@ -634,12 +637,15 @@
     main_resource.Complete(params.main_resource_body);
 
     Compositor().BeginFrame();
+    // The 10ms matches the "post_fcp_observation_delay" param set for
+    // kNavigationPredictor.
+    platform_->RunForPeriod(base::Milliseconds(10));
     DispatchPointerDownAndVerticalScroll(params.pointer_down_location,
                                          params.scroll_delta);
     ProcessPositionUpdates();
 
     // The 100ms matches the delay param set for kPreloadingViewportHeuristic.
-    platform_->RunForPeriodSeconds(0.1);
+    platform_->RunForPeriod(base::Milliseconds(100));
     base::RunLoop().RunUntilIdle();
   }
 
@@ -808,10 +814,13 @@
   )HTML");
 
   Compositor().BeginFrame();
+  // The 10ms matches the "post_fcp_observation_delay" param set for
+  // kNavigationPredictor.
+  platform_->RunForPeriod(base::Milliseconds(10));
   DispatchPointerDownAndVerticalScroll(gfx::PointF(100, 200), -100);
   ProcessPositionUpdates();
 
-  platform_->RunForPeriodSeconds(0.01);
+  platform_->RunForPeriod(base::Milliseconds(10));
   // Second pointerdown happens 10ms after the scroll end, which is within the
   // configured delay period of 100ms.
   DispatchPointerDown(gfx::PointF(200, 375));
diff --git a/third_party/blink/renderer/core/svg/svg_element.cc b/third_party/blink/renderer/core/svg/svg_element.cc
index 68dfba4..ce5d198 100644
--- a/third_party/blink/renderer/core/svg/svg_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_element.cc
@@ -558,6 +558,9 @@
 }
 
 SVGSVGElement* SVGElement::ownerSVGElement() const {
+  if (IsOutermostSVGSVGElement()) {
+    return nullptr;
+  }
   ContainerNode* n = ParentOrShadowHostNode();
   while (n) {
     if (auto* svg_svg_element = DynamicTo<SVGSVGElement>(n))
@@ -798,9 +801,8 @@
       AddPropertyToPresentationAttributeStyle(style, property_id, value);
       if (unsigned count = style->PropertyCount()) {
         // Cache the value if it was added.
-        CSSPropertyValueSet::PropertyReference last_decl =
-            style->PropertyAt(--count);
-        if (last_decl.Id() == property_id) {
+        const CSSPropertyValue& last_decl = style->PropertyAt(--count);
+        if (last_decl.PropertyID() == property_id) {
           engine.AddCachedFillOrClipPathURIValue(value, last_decl.Value());
         }
       }
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc
index 76b9c70..a41a786 100644
--- a/third_party/blink/renderer/core/testing/internals.cc
+++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -172,6 +172,7 @@
 #include "third_party/blink/renderer/core/testing/internal_settings.h"
 #include "third_party/blink/renderer/core/testing/internals_ukm_recorder.h"
 #include "third_party/blink/renderer/core/testing/mock_hyphenation.h"
+#include "third_party/blink/renderer/core/testing/nadc_attribute_test.h"
 #include "third_party/blink/renderer/core/testing/origin_trials_test.h"
 #include "third_party/blink/renderer/core/testing/record_test.h"
 #include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h"
@@ -2851,6 +2852,10 @@
   return MakeGarbageCollected<CallbackFunctionTest>();
 }
 
+NADCAttributeTest* Internals::nadcAttributeTest() const {
+  return MakeGarbageCollected<NADCAttributeTest>();
+}
+
 Vector<String> Internals::getReferencedFilePaths() const {
   if (!GetFrame())
     return Vector<String>();
diff --git a/third_party/blink/renderer/core/testing/internals.h b/third_party/blink/renderer/core/testing/internals.h
index 979e3518..331ea1b 100644
--- a/third_party/blink/renderer/core/testing/internals.h
+++ b/third_party/blink/renderer/core/testing/internals.h
@@ -72,6 +72,7 @@
 class LocalDOMWindow;
 class LocalFrame;
 class Location;
+class NADCAttributeTest;
 class Node;
 class OriginTrialsTest;
 class Page;
@@ -415,6 +416,7 @@
   UnionTypesTest* unionTypesTest() const;
   OriginTrialsTest* originTrialsTest() const;
   CallbackFunctionTest* callbackFunctionTest() const;
+  NADCAttributeTest* nadcAttributeTest() const;
 
   Vector<String> getReferencedFilePaths() const;
   void disableReferencedFilePathsVerification() const;
diff --git a/third_party/blink/renderer/core/testing/internals.idl b/third_party/blink/renderer/core/testing/internals.idl
index edbacb8..9633dea3 100644
--- a/third_party/blink/renderer/core/testing/internals.idl
+++ b/third_party/blink/renderer/core/testing/internals.idl
@@ -333,6 +333,10 @@
     UnionTypesTest unionTypesTest();
     InternalsUkmRecorder initializeUKMRecorder();
     CallbackFunctionTest callbackFunctionTest();
+    // Creates and returns an `NADCAttributeTest` object, which provides test
+    // functions to test attributes with the IDL extended attributei
+    // `NoAllocDirectCall`.
+    NADCAttributeTest nadcAttributeTest();
 
     DOMString selectedHTMLForClipboard();
     DOMString selectedTextForClipboard();
diff --git a/third_party/blink/renderer/core/testing/nadc_attribute_test.h b/third_party/blink/renderer/core/testing/nadc_attribute_test.h
new file mode 100644
index 0000000..f97a480
--- /dev/null
+++ b/third_party/blink/renderer/core/testing/nadc_attribute_test.h
@@ -0,0 +1,30 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_NADC_ATTRIBUTE_TEST_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_NADC_ATTRIBUTE_TEST_H_
+
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+
+namespace blink {
+
+class NADCAttributeTest final : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  NADCAttributeTest() = default;
+  ~NADCAttributeTest() override = default;
+
+  void setFloat64Value(double value) { value_ = value; }
+  double float64Value() const { return value_; }
+
+  void Trace(Visitor* visitor) const override {
+    blink::ScriptWrappable::Trace(visitor);
+  }
+
+ private:
+  double value_;
+};
+}  // namespace blink
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_NADC_ATTRIBUTE_TEST_H_
diff --git a/third_party/blink/renderer/core/testing/nadc_attribute_test.idl b/third_party/blink/renderer/core/testing/nadc_attribute_test.idl
new file mode 100644
index 0000000..59b69666
--- /dev/null
+++ b/third_party/blink/renderer/core/testing/nadc_attribute_test.idl
@@ -0,0 +1,9 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// NADCAttributeTest provides functionality to test attributes with the
+// IDL extended attribute `NoAllocDirectCall`.
+interface NADCAttributeTest {
+    [NoAllocDirectCall=Setter] attribute double float64Value;
+};
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.idl b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.idl
index 1b9f58e..c019cd7 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.idl
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.idl
@@ -106,7 +106,7 @@
 
     // FIXME: factor out to CanvasDrawingStyles
     // line caps/joins
-    attribute unrestricted double lineWidth; // (default 1)
+    [NoAllocDirectCall=Setter] attribute unrestricted double lineWidth; // (default 1)
     attribute DOMString lineCap; // "butt", "round", "square" (default "butt")
     attribute DOMString lineJoin; // "round", "bevel", "miter" (default "miter")
     attribute unrestricted double miterLimit; // (default 10)
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
index 66aa2617..7072f52 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
@@ -179,13 +179,6 @@
     EXPECT_EQ(config.noise_suppression.level,
               webrtc::AudioProcessing::Config::NoiseSuppression::kHigh);
     EXPECT_FALSE(config.transient_suppression.enabled);
-
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
-    // Android uses echo cancellation optimized for mobiles.
-    EXPECT_TRUE(config.echo_canceller.mobile_mode);
-#else
-    EXPECT_FALSE(config.echo_canceller.mobile_mode);
-#endif
   }
 
   test::TaskEnvironment task_environment_;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
index 6f405a2..a7fcc87 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
@@ -109,14 +109,14 @@
   }
   return SkColorInfo(viz::ToClosestSkColorType(
                          /*gpu_compositing=*/true, swap_buffers_->Format()),
-                     alpha_mode_ == V8GPUCanvasAlphaMode::Enum::kOpaque
-                         ? kOpaque_SkAlphaType
-                         : kPremul_SkAlphaType,
+                     GetAlphaType(),
                      PredefinedColorSpaceToSkColorSpace(color_space_));
 }
 
 SkAlphaType GPUCanvasContext::GetAlphaType() const {
-  return CanvasRenderingContextSkColorInfo().alphaType();
+  return alpha_mode_ == V8GPUCanvasAlphaMode::Enum::kOpaque
+             ? kOpaque_SkAlphaType
+             : kPremul_SkAlphaType;
 }
 
 void GPUCanvasContext::Stop() {
@@ -650,9 +650,7 @@
   // "dirty", so always call DidDraw() when a new texture is created.
   DidDraw(CanvasPerformanceMonitor::DrawType::kOther);
 
-  SkAlphaType alpha_type = alpha_mode_ == V8GPUCanvasAlphaMode::Enum::kOpaque
-                               ? kOpaque_SkAlphaType
-                               : kPremul_SkAlphaType;
+  SkAlphaType alpha_type = GetAlphaType();
   scoped_refptr<WebGPUMailboxTexture> mailbox_texture =
       swap_buffers_->GetNewTexture(swap_texture_descriptor_, alpha_type);
   if (!mailbox_texture) {
diff --git a/third_party/blink/renderer/platform/bindings/idl_member_installer.cc b/third_party/blink/renderer/platform/bindings/idl_member_installer.cc
index d68e1646..bb9b5c71 100644
--- a/third_party/blink/renderer/platform/bindings/idl_member_installer.cc
+++ b/third_party/blink/renderer/platform/bindings/idl_member_installer.cc
@@ -204,7 +204,8 @@
                       v8::Local<v8::Template> prototype_template,
                       v8::Local<v8::Template> interface_template,
                       v8::Local<v8::Signature> signature,
-                      const IDLMemberInstaller::AttributeConfig& config) {
+                      const IDLMemberInstaller::AttributeConfig& config,
+                      const v8::CFunction* v8_cfunction_for_set = nullptr) {
   if (!DoesWorldMatch(config, world))
     return;
 
@@ -236,7 +237,8 @@
   v8::Local<v8::FunctionTemplate> set_func =
       CreateFunctionTemplate<v8::ExceptionContext::kAttributeSet>(
           isolate, world, signature, set_name, interface_name,
-          v8::ExceptionContext::kAttributeSet, config);
+          v8::ExceptionContext::kAttributeSet, config, v8_cfunction_for_set,
+          v8_cfunction_for_set == nullptr ? 0 : 1);
 
   v8::Local<v8::Template> target_template;
   switch (location) {
@@ -264,7 +266,8 @@
                       v8::Local<v8::Object> prototype_object,
                       v8::Local<v8::Object> interface_object,
                       v8::Local<v8::Signature> signature,
-                      const IDLMemberInstaller::AttributeConfig& config) {
+                      const IDLMemberInstaller::AttributeConfig& config,
+                      const v8::CFunction* v8_cfunction_for_set = nullptr) {
   if (!DoesWorldMatch(config, world))
     return;
 
@@ -295,7 +298,8 @@
   v8::Local<v8::Function> set_func =
       CreateFunction<v8::ExceptionContext::kAttributeSet>(
           isolate, context, world, signature, set_name, interface_name,
-          v8::ExceptionContext::kAttributeSet, config);
+          v8::ExceptionContext::kAttributeSet, config, v8_cfunction_for_set,
+          v8_cfunction_for_set == nullptr ? 0 : 1);
 
   v8::Local<v8::Object> target_object;
   switch (location) {
@@ -451,6 +455,39 @@
 }
 
 // static
+void IDLMemberInstaller::InstallAttributes(
+    v8::Isolate* isolate,
+    const DOMWrapperWorld& world,
+    v8::Local<v8::Template> instance_template,
+    v8::Local<v8::Template> prototype_template,
+    v8::Local<v8::Template> interface_template,
+    v8::Local<v8::Signature> signature,
+    base::span<const NoAllocDirectCallAttributeConfig> configs) {
+  for (const auto& config : configs) {
+    InstallAttribute(isolate, world, instance_template, prototype_template,
+                     interface_template, signature, config.attribute_config,
+                     config.v8_cfunction_for_set);
+  }
+}
+
+// static
+void IDLMemberInstaller::InstallAttributes(
+    v8::Isolate* isolate,
+    const DOMWrapperWorld& world,
+    v8::Local<v8::Object> instance_object,
+    v8::Local<v8::Object> prototype_object,
+    v8::Local<v8::Object> interface_object,
+    v8::Local<v8::Signature> signature,
+    base::span<const NoAllocDirectCallAttributeConfig> configs) {
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
+  for (const auto& config : configs) {
+    InstallAttribute(isolate, context, world, instance_object, prototype_object,
+                     interface_object, signature, config.attribute_config,
+                     config.v8_cfunction_for_set);
+  }
+}
+
+// static
 void IDLMemberInstaller::InstallConstants(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
diff --git a/third_party/blink/renderer/platform/bindings/idl_member_installer.h b/third_party/blink/renderer/platform/bindings/idl_member_installer.h
index c328168..b9bff532 100644
--- a/third_party/blink/renderer/platform/bindings/idl_member_installer.h
+++ b/third_party/blink/renderer/platform/bindings/idl_member_installer.h
@@ -79,6 +79,31 @@
                                 v8::Local<v8::Signature> signature,
                                 base::span<const AttributeConfig> configs);
 
+  struct NoAllocDirectCallAttributeConfig {
+    NoAllocDirectCallAttributeConfig& operator=(
+        const NoAllocDirectCallAttributeConfig&) = delete;
+
+    AttributeConfig attribute_config;
+    raw_ptr<const v8::CFunction> v8_cfunction_for_set;
+  };
+
+  static void InstallAttributes(
+      v8::Isolate* isolate,
+      const DOMWrapperWorld& world,
+      v8::Local<v8::Template> instance_template,
+      v8::Local<v8::Template> prototype_template,
+      v8::Local<v8::Template> interface_template,
+      v8::Local<v8::Signature> signature,
+      base::span<const NoAllocDirectCallAttributeConfig> configs);
+  static void InstallAttributes(
+      v8::Isolate* isolate,
+      const DOMWrapperWorld& world,
+      v8::Local<v8::Object> instance_object,
+      v8::Local<v8::Object> prototype_object,
+      v8::Local<v8::Object> interface_object,
+      v8::Local<v8::Signature> signature,
+      base::span<const NoAllocDirectCallAttributeConfig> configs);
+
   // Web IDL constant
   struct ConstantCallbackConfig {
     ConstantCallbackConfig& operator=(const ConstantCallbackConfig&) = delete;
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shape_result.h b/third_party/blink/renderer/platform/fonts/shaping/shape_result.h
index e1b9f13c..7ae228f8 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/shape_result.h
+++ b/third_party/blink/renderer/platform/fonts/shaping/shape_result.h
@@ -581,5 +581,7 @@
 
 WTF_ALLOW_CLEAR_UNUSED_SLOTS_WITH_MEM_FUNCTIONS(blink::ShapeResult::ShapeRange)
 WTF_ALLOW_CLEAR_UNUSED_SLOTS_WITH_MEM_FUNCTIONS(blink::ShapeResult::RunFontData)
+WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(
+    blink::ShapeResultCharacterData)
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_SHAPING_SHAPE_RESULT_H_
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.cc b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
index e12aa2a8..8f282a32 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
@@ -183,32 +183,27 @@
   if (!out_resource)
     return true;
 
-  if (CreatesAcceleratedTransferableResources()) {
-    return UsesClientSharedImage()
-               ? PrepareAcceleratedTransferableResourceFromClientSI(
-                     out_resource, needs_verified_synctoken)
-               : PrepareAcceleratedTransferableResourceWithoutClientSI(
-                     out_resource);
+  if (!CreatesAcceleratedTransferableResources()) {
+    // Create a TransferableResource to be used with the software compositor.
+    TRACE_EVENT0("blink",
+                 "CanvasResource::PrepareUnacceleratedTransferableResource");
+
+    auto client_shared_image = GetClientSharedImage();
+    if (!client_shared_image) {
+      return false;
+    }
+
+    *out_resource = viz::TransferableResource::MakeSoftwareSharedImage(
+        client_shared_image, GetSyncToken(), client_shared_image->size(),
+        client_shared_image->format(),
+        viz::TransferableResource::ResourceSource::kCanvas);
+
+    out_resource->color_space = client_shared_image->color_space();
+    return true;
   }
 
-  // Create a TransferableResource to be used with the software compositor.
-  TRACE_EVENT0("blink",
-               "CanvasResource::PrepareUnacceleratedTransferableResource");
-
-  CHECK(UsesClientSharedImage());
-  auto client_shared_image = GetClientSharedImage();
-  if (!client_shared_image) {
-    return false;
-  }
-
-  *out_resource = viz::TransferableResource::MakeSoftwareSharedImage(
-      client_shared_image, GetSyncToken(), client_shared_image->size(),
-      client_shared_image->format(),
-      viz::TransferableResource::ResourceSource::kCanvas);
-
-  out_resource->color_space = client_shared_image->color_space();
-
-  return true;
+  return PrepareAcceleratedTransferableResourceFromClientSI(
+      out_resource, needs_verified_synctoken);
 }
 
 bool CanvasResource::PrepareAcceleratedTransferableResourceFromClientSI(
@@ -217,7 +212,6 @@
   TRACE_EVENT0("blink",
                "CanvasResource::PrepareAcceleratedTransferableResource");
   CHECK(CreatesAcceleratedTransferableResources());
-  CHECK(UsesClientSharedImage());
 
   // Gpu compositing is a prerequisite for compositing an accelerated resource
   DCHECK(SharedGpuContext::IsGpuCompositingEnabled());
@@ -905,25 +899,6 @@
   return context_provider_wrapper_;
 }
 
-bool ExternalCanvasResource::
-    PrepareAcceleratedTransferableResourceWithoutClientSI(
-        viz::TransferableResource* out_resource) {
-  TRACE_EVENT0(
-      "blink",
-      "ExternalCanvasResource::PrepareAcceleratedTransferableResource");
-
-  *out_resource = viz::TransferableResource::MakeGpu(
-      client_si_, client_si_->GetTextureTarget(),
-      GetSyncTokenWithOptionalVerification(false), client_si_->size(),
-      client_si_->format(), IsOverlayCandidate(),
-      GetTransferableResourceSource());
-  out_resource->color_space = client_si_->color_space();
-  out_resource->hdr_metadata = GetHDRMetadata();
-  out_resource->origin = client_si_->surface_origin();
-
-  return true;
-}
-
 ExternalCanvasResource::ExternalCanvasResource(
     scoped_refptr<gpu::ClientSharedImage> client_si,
     const gpu::SyncToken& sync_token,
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.h b/third_party/blink/renderer/platform/graphics/canvas_resource.h
index ebf09cef62..92dbc3a 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource.h
@@ -122,17 +122,9 @@
   // The bounds for this resource.
   gfx::Size Size() const { return size_; }
 
-  // Whether this resource uses ClientSharedImage.
-  // TODO(crbug.com/351275962): Remove this method once
-  // ExternalCanvasResource either holds ClientSharedImage or is removed.
-  virtual bool UsesClientSharedImage() { return false; }
-
-  // The ClientSharedImage containing information on the SharedImage (if any)
+  // The ClientSharedImage containing information on the SharedImage
   // attached to the resource.
-  // NOTE: Valid to call only if UsesClientSharedImage() is true.
-  virtual scoped_refptr<gpu::ClientSharedImage> GetClientSharedImage() {
-    NOTREACHED();
-  }
+  virtual scoped_refptr<gpu::ClientSharedImage> GetClientSharedImage() = 0;
 
   // A CanvasResource is not thread-safe and does not allow concurrent usage
   // from multiple threads. But it maybe used from any thread. It remains bound
@@ -206,21 +198,11 @@
   ContextProviderWrapper() const = 0;
 
   // Prepares GPU TransferableResource from the resource's ClientSharedImage.
-  // Invoked if the resource is accelerated and UsesClientSharedImage() returns
-  // true.
+  // Invoked if the resource is accelerated.
   bool PrepareAcceleratedTransferableResourceFromClientSI(
       viz::TransferableResource* out_resource,
       bool needs_verified_synctoken);
 
-  // Prepares GPU TransferableResource for resources for which
-  // CreatesAcceleratedTransferableResources() is true but
-  // UsesClientSharedImage() returns false. Subclasses that match these
-  // conditions *must* override this method.
-  virtual bool PrepareAcceleratedTransferableResourceWithoutClientSI(
-      viz::TransferableResource* out_resource) {
-    NOTREACHED();
-  }
-
   CanvasResourceProvider* Provider() { return provider_.get(); }
   base::WeakPtr<CanvasResourceProvider> WeakProvider() { return provider_; }
 
@@ -263,7 +245,6 @@
   bool IsRecycleable() const final { return IsValid(); }
   bool IsValid() const final;
   bool CreatesAcceleratedTransferableResources() const final { return false; }
-  bool UsesClientSharedImage() final { return true; }
   scoped_refptr<gpu::ClientSharedImage> GetClientSharedImage() final {
     return shared_image_;
   }
@@ -341,7 +322,6 @@
 
   // Uploads the contents of |sk_surface| to the resource's backing memory.
   void UploadSoftwareRenderingResults(SkSurface* sk_surface);
-  bool UsesClientSharedImage() override { return true; }
   scoped_refptr<gpu::ClientSharedImage> GetClientSharedImage() override;
   const scoped_refptr<gpu::ClientSharedImage>& GetClientSharedImage() const;
   void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd,
@@ -440,15 +420,6 @@
 // context that support GL.
 class PLATFORM_EXPORT ExternalCanvasResource final : public CanvasResource {
  public:
-  // Creates ExternalCanvasResource with a ClientSharedImage instance whose
-  // mailbox matches that of `transferable_resource`.
-  // TODO(crbug.com/353744937): Remove this class taking in
-  // TransferableResource:
-  // * Ensure that it would be correct for CanvasResource to go into all
-  //   relevant UsesClientSharedImage() codepaths for ExternalCanvasResource
-  //   (in particular, PrepareAcceleratedTransferableResourceFromClientSI())
-  // * Change ExternalCanvasResource to take *only* the ClientSharedImage and
-  //   override UsesClientSharedImage() to return true
   static scoped_refptr<ExternalCanvasResource> Create(
       scoped_refptr<gpu::ClientSharedImage> client_si,
       const gpu::SyncToken& sync_token,
@@ -465,6 +436,9 @@
   bool OriginClean() const final { return is_origin_clean_; }
   void SetOriginClean(bool value) final { is_origin_clean_ = value; }
   void NotifyResourceLost() override { resource_is_lost_ = true; }
+  scoped_refptr<gpu::ClientSharedImage> GetClientSharedImage() final {
+    return client_si_;
+  }
 
   scoped_refptr<StaticBitmapImage> Bitmap() override;
   viz::ReleaseCallback TakeVizReleaseCallback() override {
@@ -486,8 +460,6 @@
       bool needs_verified_token) override;
   base::WeakPtr<WebGraphicsContext3DProviderWrapper> ContextProviderWrapper()
       const override;
-  bool PrepareAcceleratedTransferableResourceWithoutClientSI(
-      viz::TransferableResource* out_resource) override;
   void GenOrFlushSyncToken();
 
   ExternalCanvasResource(
@@ -539,7 +511,6 @@
     return back_buffer_shared_image_;
   }
   void PresentSwapChain();
-  bool UsesClientSharedImage() override { return true; }
   scoped_refptr<gpu::ClientSharedImage> GetClientSharedImage() override;
 
  private:
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
index 6887e39..21d858c 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -805,7 +805,6 @@
     // The only resources that should be coming in here are
     // CanvasResourceSharedImage instances, since that is the only type of
     // resource that this class creates.
-    CHECK(resource->UsesClientSharedImage());
     return resource->GetClientSharedImage()->usage().HasAll(
         shared_image_usage_flags_);
   }
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.cc b/third_party/blink/renderer/platform/graphics/graphics_context.cc
index 8503c0d..e79a0e2 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_context.cc
+++ b/third_party/blink/renderer/platform/graphics/graphics_context.cc
@@ -555,15 +555,13 @@
   DrawEmphasisMarksInternal(font, text_info, mark, point, auto_dark_mode);
 }
 
-void GraphicsContext::DrawBidiText(
-    const Font& font,
-    const TextRunPaintInfo& run_info,
-    const gfx::PointF& point,
-    const AutoDarkMode& auto_dark_mode,
-    Font::CustomFontNotReadyAction custom_font_not_ready_action) {
+void GraphicsContext::DrawBidiText(const Font& font,
+                                   const TextRunPaintInfo& run_info,
+                                   const gfx::PointF& point,
+                                   const AutoDarkMode& auto_dark_mode) {
   DrawTextPasses([&](const cc::PaintFlags& flags) {
     if (font.DrawBidiText(canvas_, run_info, point,
-                          custom_font_not_ready_action,
+                          Font::kDoNotPaintIfFontNotReady,
                           DarkModeFlags(this, auto_dark_mode, flags),
                           printing_ ? Font::DrawType::kGlyphsAndClusters
                                     : Font::DrawType::kGlyphsOnly)) {
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.h b/third_party/blink/renderer/platform/graphics/graphics_context.h
index c61e67b..45c46cf 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_context.h
+++ b/third_party/blink/renderer/platform/graphics/graphics_context.h
@@ -413,12 +413,10 @@
                          const gfx::PointF&,
                          const AutoDarkMode& auto_dark_mode);
 
-  void DrawBidiText(
-      const Font&,
-      const TextRunPaintInfo&,
-      const gfx::PointF&,
-      const AutoDarkMode& auto_dark_mode,
-      Font::CustomFontNotReadyAction = Font::kDoNotPaintIfFontNotReady);
+  void DrawBidiText(const Font&,
+                    const TextRunPaintInfo&,
+                    const gfx::PointF&,
+                    const AutoDarkMode& auto_dark_mode);
 
   // BeginLayer()/EndLayer() behave like Save()/Restore() for CTM and clip
   // states. Apply opacity, blend mode, filter when the layer is composited on
diff --git a/third_party/blink/renderer/platform/image-decoders/png/png_image_decoder_test.cc b/third_party/blink/renderer/platform/image-decoders/png/png_image_decoder_test.cc
index 0f1b2d84..3f1cc51 100644
--- a/third_party/blink/renderer/platform/image-decoders/png/png_image_decoder_test.cc
+++ b/third_party/blink/renderer/platform/image-decoders/png/png_image_decoder_test.cc
@@ -16,6 +16,7 @@
 #include "skia/buildflags.h"
 #include "skia/rusty_png_feature.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/graphics/color_behavior.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_decoder_test_helpers.h"
 #include "third_party/blink/renderer/platform/image-decoders/png/png_decoder_factory.h"
 #include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
@@ -50,12 +51,18 @@
 namespace {
 
 std::unique_ptr<ImageDecoder> CreatePNGDecoder(
-    ImageDecoder::AlphaOption alpha_option) {
+    ImageDecoder::AlphaOption alpha_option,
+    ColorBehavior color_behavior) {
   return CreatePngImageDecoder(alpha_option, ImageDecoder::kDefaultBitDepth,
-                               ColorBehavior::kTransformToSRGB,
+                               color_behavior,
                                ImageDecoder::kNoDecodedImageByteLimit);
 }
 
+std::unique_ptr<ImageDecoder> CreatePNGDecoder(
+    ImageDecoder::AlphaOption alpha_option) {
+  return CreatePNGDecoder(alpha_option, ColorBehavior::kTransformToSRGB);
+}
+
 std::unique_ptr<ImageDecoder> CreatePNGDecoder() {
   return CreatePNGDecoder(ImageDecoder::kAlphaNotPremultiplied);
 }
@@ -1735,6 +1742,20 @@
   EXPECT_TRUE(skcms_TransferFunction_isPQish(&png_profile->trc[0].parametric));
 }
 
+TEST_P(PNGTests, IgnoringColorProfile) {
+  const char* png_file = "/images/resources/cicp_pq.png";
+  scoped_refptr<SharedBuffer> data = ReadFileToSharedBuffer(png_file);
+  ASSERT_TRUE(data);
+
+  auto decoder = CreatePNGDecoder(ImageDecoder::kAlphaNotPremultiplied,
+                                  ColorBehavior::kIgnore);
+  decoder->SetData(data.get(), true);
+  auto* frame = decoder->DecodeFrameBufferAtIndex(0);
+  ASSERT_TRUE(frame);
+  ASSERT_FALSE(decoder->Failed());
+  ASSERT_FALSE(decoder->HasEmbeddedColorProfile());
+}
+
 TEST_P(PNGTests, HDRMetadata) {
   const char* png_file = "/images/resources/cicp_pq.png";
   scoped_refptr<SharedBuffer> data = ReadFileToSharedBuffer(png_file);
diff --git a/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.cc b/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.cc
index 4420248..26a44bf0 100644
--- a/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.cc
+++ b/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.cc
@@ -96,8 +96,10 @@
                      static_cast<unsigned>(image_info.height()))) {
           return;
         }
-        if (const skcms_ICCProfile* profile = codec_->getICCProfile()) {
-          SetEmbeddedColorProfile(std::make_unique<ColorProfile>(*profile));
+        if (!IgnoresColorSpace()) {
+          if (const skcms_ICCProfile* profile = codec_->getICCProfile()) {
+            SetEmbeddedColorProfile(std::make_unique<ColorProfile>(*profile));
+          }
         }
         return;
       }
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 8c0c1bd9..f97a91a 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -609,6 +609,17 @@
     "args": ["--js-flags=--wasm-tiering-budget=100 --allow-natives-syntax"],
     "expires": "Jul 1, 2025"
   },
+  "The fast api bindings test requires access to V8 internals, so only the",
+  "virtual test should be run.",
+  {
+    "prefix": "fast-api",
+    "owners": ["ahaas@chromium.org", "caseq@chromium.org", "mlippautz@chromium.org"],
+    "platforms": ["Linux", "Mac", "Win", "Fuchsia"],
+    "bases": ["bindings/fast-api-attributes.html"],
+    "exclusive_tests": "ALL",
+    "args": ["--js-flags=--allow_natives_syntax"],
+    "expires": "Dec 30, 2026"
+  },
 
   "==== Tests incompatible with the default WPT Origin Isolation start here ==VV",
   "The section below lists web tests that are incompatible with the WPT Origin",
diff --git a/third_party/blink/web_tests/bindings/fast-api-attributes.html b/third_party/blink/web_tests/bindings/fast-api-attributes.html
new file mode 100644
index 0000000..e7e99eb
--- /dev/null
+++ b/third_party/blink/web_tests/bindings/fast-api-attributes.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script>
+  test(() => {
+    let nadcAttributeTest = internals.nadcAttributeTest();
+    function testAttributeSet(value) {
+      nadcAttributeTest.float64Value = value;
+    }
+
+    %PrepareFunctionForOptimization(testAttributeSet);
+    testAttributeSet(12.5);
+    testAttributeSet(7.5);
+    %OptimizeFunctionOnNextCall(testAttributeSet);
+    testAttributeSet(5.5);
+    assert_equals(nadcAttributeTest.float64Value, 5.5);
+  }, "Test attribute setter with fast API");
+</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index ca9af456..41fd52f 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -363621,15 +363621,15 @@
       []
      ],
      "scrollWidthHeight-contain-layout-expected.txt": [
-      "452c3acd369af729fd8900b3e0c7f75433a1d6a0",
+      "042c8eed90149ef3ae55e8045a317c0ca5c35036",
       []
      ],
      "scrollWidthHeight-negative-margin-002-expected.txt": [
-      "cac4713d86a25d91c877a4887c28931c3e5345f6",
+      "f0690d432e60a54c58e4cc497d28cc112cee9cbe",
       []
      ],
      "scrollWidthHeightWhenNotScrollable-expected.txt": [
-      "1af39257afc270f47fd24287a1722b81a1ff81b8",
+      "729999dc7061ff46497f00f566e763996ee24a4e",
       []
      ],
      "scrollingElement-expected.txt": [
@@ -374456,11 +374456,11 @@
        []
       ],
       "ba-fledge-util.sub.js": [
-       "d981e6a056e978d41879cb5b7b05285d5b931351",
+       "3aef43d70d6ea79a5fe743543de865ba4266ba5f",
        []
       ],
       "ba-public-keys": [
-       "60580a74d06a78db23d0d551a9d4a014bee77994",
+       "32b1c1babe5b6da9441e5ffc44f7eecc33454fa0",
        []
       ],
       "bidding-logic.sub.py": [
@@ -440936,7 +440936,7 @@
       ]
      ],
      "comp_name_from_content.html": [
-      "32a9a7b3c43b0f25fc09045c1a630a71c784b265",
+      "b0c92c8142c28a5dde5fd87ed1077b88421765bd",
       [
        null,
        {
@@ -504879,7 +504879,7 @@
       ]
      ],
      "scrollWidthHeight-contain-layout.html": [
-      "1afab08850664326132ebeb7adbca2337be6ef61",
+      "f787f1a156f773aac904fbdad42a1365564ccc0d",
       [
        null,
        {}
@@ -504893,7 +504893,14 @@
       ]
      ],
      "scrollWidthHeight-negative-margin-002.html": [
-      "418b631f4ba1801157bc4431a28a92bc8d18f888",
+      "1192680c0351cf63259974e2ef46de93158fb83a",
+      [
+       null,
+       {}
+      ]
+     ],
+     "scrollWidthHeight-overflow-visible-margin-collapsing.html": [
+      "322c91afc0838c17ddf9a23f2597017fa8a999fe",
       [
        null,
        {}
@@ -504907,7 +504914,7 @@
       ]
      ],
      "scrollWidthHeightWhenNotScrollable.xht": [
-      "8eb08d55203a5a12a6c1bca93342ea51a1d780a2",
+      "463d31772eb8a7c962fed6eae95bcbe0c746b477",
       [
        null,
        {}
@@ -617817,7 +617824,7 @@
          ]
         ],
         "selectedcontent.tentative.html": [
-         "77ff46a3b33437584309d19e23567760a11faeb1",
+         "eef68a9237fb7f5e71345d3c2bcc1d77509d6156",
          [
           null,
           {
@@ -618687,7 +618694,7 @@
         ]
        ],
        "dialog-requestclose.tentative.html": [
-        "18486f791b4a6c6e2f23f4c9f1c566f9f3dbf8a1",
+        "5cbad9c651935e8296d1fad3c94433965b9303db",
         [
          null,
          {
@@ -681882,7 +681889,7 @@
      ]
     ],
     "requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.js": [
-     "7ccb9824e699a3a269fa257b2c889d50f89d8f88",
+     "1cede45d59d8ef13ec40ab18ff107bf97ba1324a",
      [
       "storage-access-api/requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.html",
       {
@@ -681908,7 +681915,7 @@
      ]
     ],
     "requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js": [
-     "691c8c86b62005880c0babeb686cfc18113579ec",
+     "ce0d69cfaa54c77b7d60562b6d04884bf680dc1f",
      [
       "storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.html",
       {
diff --git a/third_party/blink/web_tests/external/wpt/accname/name/comp_name_from_content.html b/third_party/blink/web_tests/external/wpt/accname/name/comp_name_from_content.html
index 32a9a7b..b0c92c8 100644
--- a/third_party/blink/web_tests/external/wpt/accname/name/comp_name_from_content.html
+++ b/third_party/blink/web_tests/external/wpt/accname/name/comp_name_from_content.html
@@ -259,6 +259,29 @@
 <h1 data-expectedlabel="Call Us" data-testname="heading name from content with text-transform:capitalize" class="ex" style="text-transform:capitalize;">Call us</h1>
 <h1 data-expectedlabel="call us" data-testname="heading name from content with text-transform:lowercase" class="ex" style="text-transform:lowercase;">Call us</h1>
 
+<!-- Tests `Name from Each Child` edge case failures with an embedded `term` as a child element role. -->
+<!-- https://w3c.github.io/accname/#comp_name_from_content_for_each_child -->
+
+<h2>Elements with implicit button, heading, link roles containing element with implicit term role</h2>
+<button data-expectedlabel="this is an example" data-testname="implicit button name from content containing a dfn element" class="ex iblock"><span>this is an </span><dfn>example</dfn></button>
+<h3 data-expectedlabel="this is an example" data-testname="implicit heading name from content containing a dfn element" class="ex iblock"><span>this is an </span><dfn>example</dfn></h3>
+<a href="#" data-expectedlabel="this is an example" data-testname="implicit link name from content containing a dfn element" class="ex iblock"><span>this is an </span><dfn>example</dfn></a>
+
+<h2>Elements with implicit button, heading, link roles containing element with explicit term role</h2>
+<button data-expectedlabel="this is an example" data-testname="implicit button name from content containing an element with explicit term role" class="ex iblock"><span>this is an </span><span role="term">example</span></button>
+<h3 data-expectedlabel="this is an example" data-testname="implicit heading name from content containing an element with explicit term role" class="ex iblock"><span>this is an </span><span role="term">example</span></h3>
+<a href="#" data-expectedlabel="this is an example" data-testname="implicit link name from content containing an element explicit with term role" class="ex iblock"><span>this is an </span><span role="term">example</span></a>
+
+<h2>Elements with explicit button, heading, link roles containing element with implicit term role</h2>
+<div role="button" tabindex="0" data-expectedlabel="this is an example" data-testname="explicit button name from content containing a dfn element" class="ex iblock"><span>this is an </span><dfn>example</dfn></div>
+<div role="heading" data-expectedlabel="this is an example" data-testname="explicit heading name from content containing a dfn element" class="ex iblock"><span>this is an </span><dfn>example</dfn></div>
+<div role="link" tabindex="0" data-expectedlabel="this is an example" data-testname="explicit link name from content containing a dfn element" class="ex iblock"><span>this is an </span><dfn>example</dfn></div>
+
+<h2>Elements with explicit button, heading, link roles containing element with explicit term role</h2>
+<div role="button" tabindex="0" data-expectedlabel="this is an example" data-testname="explicit button name from content containing an element explicit with term role" class="ex iblock"><span>this is an </span><span role="term">example</span></div>
+<div role="heading" data-expectedlabel="this is an example" data-testname="explicit heading name from content containing an element explicit with term role" class="ex iblock"><span>this is an </span><span role="term">example</span></div>
+<div role="link" tabindex="0" data-expectedlabel="this is an example" data-testname="explicit link name from content containing an element explicit with term role" class="ex iblock"><span>this is an </span><span role="term">example</span></div>
+
 <script>
 AriaUtils.verifyLabelsBySelector(".ex");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-multicol-007.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-multicol-007.html
new file mode 100644
index 0000000..b8aca116
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-multicol-007.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#anchor-pos">
+<style>
+  #query_elm {
+    position: absolute;
+    left: anchor(--a1 left);
+    top: anchor(--a1 top);
+    right: anchor(--a1 right);
+    bottom: anchor(--a1 bottom);
+    background: green;
+  }
+</style>
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="width:100px; height:100px; background:red;">
+  <div style="columns:3; column-fill:auto; gap:10px; inline-size:230px; block-size:100px; writing-mode:vertical-rl;">
+    <div style="block-size:30px;"></div>
+    <div style="position:relative; inline-size:100px; block-size:200px;">
+      <div style="block-size:20px;"></div>
+      <div style="anchor-name:--a1; inline-size:20px; block-size:70px;"></div>
+      <div id="query_elm"></div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-multicol-008.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-multicol-008.html
new file mode 100644
index 0000000..f652b6a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-multicol-008.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#anchor-pos">
+<style>
+  #query_elm {
+    position: absolute;
+    left: anchor(--a1 left);
+    top: anchor(--a1 top);
+    width: 80px;
+    height: 100px;
+    background: green;
+  }
+</style>
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="width:100px; height:100px; background:red;">
+  <div style="columns:1; inline-size:100px; column-fill:auto; border-block-end:20px solid green; block-size:70px; writing-mode:vertical-rl;">
+    <div style="block-size:30px;"></div>
+    <div style="position:relative; inline-size:100px; block-size:100px;">
+      <div style="block-size:20px;"></div>
+      <div style="anchor-name:--a1; inline-size:50px; block-size:70px;"></div>
+      <div id="query_elm"></div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout-expected.txt
index 452c3ac..042c8ee 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout-expected.txt
@@ -1,39 +1,51 @@
 This is a testharness.js-based test.
-Found 18 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 24 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [FAIL] scroll{Width,Height} should match with contain: layout for display: flex, overflow: hidden, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-block, overflow: hidden, padding: 2px, border: 0
+[FAIL] scroll{Width,Height} should match with contain: layout for display: flow-root, overflow: hidden, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: grid, overflow: hidden, padding: 2px, border: 0
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-flex, overflow: hidden, padding: 2px, border: 0
+  assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-grid, overflow: hidden, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
 [FAIL] scroll{Width,Height} should match with contain: layout for display: flex, overflow: hidden, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-block, overflow: hidden, padding: 2px, border: 3px solid
+[FAIL] scroll{Width,Height} should match with contain: layout for display: flow-root, overflow: hidden, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: grid, overflow: hidden, padding: 2px, border: 3px solid
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-flex, overflow: hidden, padding: 2px, border: 3px solid
+  assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-grid, overflow: hidden, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and hidden expected 2004 but got 4
 [FAIL] scroll{Width,Height} should match with contain: layout for display: flex, overflow: auto, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-block, overflow: auto, padding: 2px, border: 0
+[FAIL] scroll{Width,Height} should match with contain: layout for display: flow-root, overflow: auto, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: grid, overflow: auto, padding: 2px, border: 0
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-flex, overflow: auto, padding: 2px, border: 0
+  assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-grid, overflow: auto, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
 [FAIL] scroll{Width,Height} should match with contain: layout for display: flex, overflow: auto, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-block, overflow: auto, padding: 2px, border: 3px solid
+[FAIL] scroll{Width,Height} should match with contain: layout for display: flow-root, overflow: auto, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: grid, overflow: auto, padding: 2px, border: 3px solid
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-flex, overflow: auto, padding: 2px, border: 3px solid
+  assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-grid, overflow: auto, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and auto expected 2004 but got 4
 [FAIL] scroll{Width,Height} should match with contain: layout for display: flex, overflow: scroll, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-block, overflow: scroll, padding: 2px, border: 0
+[FAIL] scroll{Width,Height} should match with contain: layout for display: flow-root, overflow: scroll, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: grid, overflow: scroll, padding: 2px, border: 0
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-flex, overflow: scroll, padding: 2px, border: 0
+  assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-grid, overflow: scroll, padding: 2px, border: 0
   assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
 [FAIL] scroll{Width,Height} should match with contain: layout for display: flex, overflow: scroll, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-block, overflow: scroll, padding: 2px, border: 3px solid
+[FAIL] scroll{Width,Height} should match with contain: layout for display: flow-root, overflow: scroll, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
-[FAIL] scroll{Width,Height} should match with contain: layout for display: grid, overflow: scroll, padding: 2px, border: 3px solid
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-flex, overflow: scroll, padding: 2px, border: 3px solid
+  assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
+[FAIL] scroll{Width,Height} should match with contain: layout for display: inline-grid, overflow: scroll, padding: 2px, border: 3px solid
   assert_equals: scrollHeight should match for visible and scroll expected 2004 but got 4
 Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout.html
index 1afab088..f787f1a 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout.html
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-contain-layout.html
@@ -25,7 +25,7 @@
 for (let overflow of ["hidden", "auto", "scroll", "clip"]) {
   for (let padding of ["0", "2px"]) {
     for (let border of ["0", "3px solid"]) {
-      for (let display of ["flex", "block", "inline-block", "inline-flex", "grid", "inline-grid", "inline"]) {
+      for (let display of ["flex", "block", "flow-root", "inline-block", "inline-flex", "grid", "inline-grid", "inline"]) {
         test(function() {
           target.style.display = display;
           target.style.border = border;
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002-expected.txt
index cac4713d..f0690d43 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002-expected.txt
@@ -1,12 +1,12 @@
 This is a testharness.js-based test.
 Found 104 FAIL, 0 TIMEOUT, 0 NOTRUN.
-[FAIL] scrollHeight with negative margins: display: block; overflow: visible; direction: rtl; writing-mode: vertical-lr; flex-direction: row;
+[FAIL] scrollHeight with negative margins: display: flow-root; overflow: visible; direction: rtl; writing-mode: vertical-lr; flex-direction: row;
   assert_equals: scrollHeight expected 208 but got 181
-[FAIL] scrollHeight with negative margins: display: block; overflow: clip; direction: rtl; writing-mode: vertical-lr; flex-direction: row;
+[FAIL] scrollHeight with negative margins: display: flow-root; overflow: clip; direction: rtl; writing-mode: vertical-lr; flex-direction: row;
   assert_equals: scrollHeight expected 208 but got 181
-[FAIL] scrollHeight with negative margins: display: block; overflow: visible; direction: rtl; writing-mode: vertical-rl; flex-direction: row;
+[FAIL] scrollHeight with negative margins: display: flow-root; overflow: visible; direction: rtl; writing-mode: vertical-rl; flex-direction: row;
   assert_equals: scrollHeight expected 208 but got 181
-[FAIL] scrollHeight with negative margins: display: block; overflow: clip; direction: rtl; writing-mode: vertical-rl; flex-direction: row;
+[FAIL] scrollHeight with negative margins: display: flow-root; overflow: clip; direction: rtl; writing-mode: vertical-rl; flex-direction: row;
   assert_equals: scrollHeight expected 208 but got 181
 [FAIL] scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; writing-mode: vertical-lr; flex-direction: row; scrollbar-width: none;
   assert_equals: scrollHeight expected 188 but got 181
@@ -209,4 +209,3 @@
 [FAIL] scrollHeight with negative margins: display: grid; overflow: clip; direction: rtl; writing-mode: vertical-rl; flex-direction: row;
   assert_equals: scrollHeight expected 208 but got 181
 Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002.html
index 418b631..1192680 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-negative-margin-002.html
@@ -39,7 +39,7 @@
   width: contentBox.width + 4 + 16,
   height: contentBox.height + 1 + 8,
 };
-for (let display of ["block", "flex", "grid"]) {
+for (let display of ["flow-root", "flex", "grid"]) {
   for (let flexDirection of ["row", "row-reverse", "column", "column-reverse"]) {
     if (flexDirection != "row" && display != "flex") {
       // Don't bother retesting with all flexDirection values unless we're actually a flex container
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-overflow-visible-margin-collapsing.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-overflow-visible-margin-collapsing.html
new file mode 100644
index 0000000..322c91a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeight-overflow-visible-margin-collapsing.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollwidth">
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollheight">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1936156">
+<title>scroll{Width,Height} shouldn't account for collapsed margins, in order not to report unnecessary overflow</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+  #target div {
+    height: 20px;
+    min-width: 20px;
+    background-color: green;
+    margin: 20px 10px;
+  }
+</style>
+<div id="target">
+  <div>
+    <div></div>
+  </div>
+  <div></div>
+  <div></div>
+  <div></div>
+</div>
+<script>
+let target = document.getElementById("target");
+// "clip" is not really scrollable, but should match as well.
+for (let overflow of ["visible", "hidden", "auto", "scroll", "clip"]) {
+  for (let padding of ["0", "2px"]) {
+    for (let border of ["0", "3px solid"]) {
+      for (let display of ["flex", "block", "flow-root", "inline-block", "inline-flex", "grid", "inline-grid"]) {
+        test(function() {
+          target.style.overflow = overflow;
+          target.style.display = display;
+          target.style.border = border;
+          target.style.padding = padding;
+          let sh = target.scrollHeight;
+          let sw = target.scrollWidth;
+          let ch = target.clientHeight;
+          let cw = target.clientWidth;
+          assert_equals(sh, ch, "scrollHeight should match clientHeight, since there's no overflow");
+          assert_equals(sw, cw, "scrollWidth should match clientWidth, since there's no overflow");
+        }, `scroll{Width,Height} with margins should match client{Width,Height} if there would be no overflow width overflow: ${overflow}, padding: ${padding}, border: ${border}, display: ${display}`);
+      }
+    }
+  }
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable-expected.txt
index 1af39257..729999dc 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-[FAIL] elemOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)
+[FAIL] elemOverflow.scrollHeight is the height of its scrolled contents (plus padding, since we overflowed)
   assert_equals: expected 200 but got 150
 [FAIL] elemOverflow.scrollHeight is the width of its scrolled contents (plus padding)
   assert_equals: expected 290 but got 250
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht
index 8eb08d5..463d3177 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht
@@ -79,7 +79,7 @@
 
             test(function(){
                 assert_equals(elemOverflow.scrollHeight, 200);
-            }, "elemOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)");
+            }, "elemOverflow.scrollHeight is the height of its scrolled contents (plus padding, since we overflowed)");
 
             test(function(){
                 assert_equals(elemOverflow.clientWidth, 240);
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/Node-moveBefore.html b/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/Node-moveBefore.html
index 732314d..bfee97b 100644
--- a/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/Node-moveBefore.html
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/Node-moveBefore.html
@@ -253,10 +253,34 @@
   const disconnectedDestination = document.createElement('div');
   const p = disconnectedOrigin.appendChild(document.createElement('p'));
 
+  assert_throws_dom("HIERARCHY_REQUEST_ERR", () => {
+    disconnectedDestination.moveBefore(p, null);
+  });
+}, "Moving a node from a disconnected container to a disconnected new parent " +
+   "without a shared ancestor throws a HIERARCHY_REQUEST_ERR");
+
+test(() => {
+  const disconnectedOrigin = document.createElement('div');
+  const disconnectedDestination = disconnectedOrigin.appendChild(document.createElement('div'));
+  const p = disconnectedOrigin.appendChild(document.createElement('p'));
+
   disconnectedDestination.moveBefore(p, null);
 
   assert_equals(disconnectedDestination.firstChild, p, "<p> Was successfully moved");
-}, "Moving a node from a disconnected container to a disconnected new parent succeeds");
+}, "Moving a node from a disconnected container to a disconnected new parent in the same tree succeeds");
+
+test(() => {
+  const disconnectedOrigin = document.createElement('div');
+  const disconnectedHost = disconnectedOrigin.appendChild(document.createElement('div'));
+  const p = disconnectedOrigin.appendChild(document.createElement('p'));
+  const shadow = disconnectedHost.attachShadow({mode: "closed"});
+  const disconnectedDestination = shadow.appendChild(document.createElement('div'));
+
+  disconnectedDestination.moveBefore(p, null);
+
+  assert_equals(disconnectedDestination.firstChild, p, "<p> Was successfully moved");
+}, "Moving a node from a disconnected container to a disconnected new parent in the same tree succeeds," +
+   "also across shadow-roots");
 
 test(() => {
   const disconnectedOrigin = document.createElement('div');
@@ -285,7 +309,7 @@
     });
 
   const oldParent = document.createElement('div');
-  const newParent = document.createElement('div');
+  const newParent = oldParent.appendChild(document.createElement('div'));
   const element = oldParent.appendChild(document.createElement(element_name));
   t.add_cleanup(() => {
     element.remove();
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_click_on_chorded_mouse_button.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_click_on_chorded_mouse_button.tentative-expected.txt
new file mode 100644
index 0000000..3bb3a28
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_click_on_chorded_mouse_button.tentative-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+[FAIL] Chorded button sequence L-down M-down M-up L-up
+  assert_equals: received click-like events expected "auxclick,click" but got "auxclick"
+[FAIL] Chorded button sequence M-down L-down L-up M-up
+  assert_equals: received click-like events expected "click,auxclick" but got "click"
+Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_click_on_chorded_mouse_button.tentative.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_click_on_chorded_mouse_button.tentative.html
new file mode 100644
index 0000000..4c643175
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_click_on_chorded_mouse_button.tentative.html
@@ -0,0 +1,91 @@
+<!doctype html>
+<!--
+  Tentative due to:
+  https://github.com/w3c/pointerevents/issues/530
+
+  TODO: Revisit the asserts below when the spec issue is resolved.
+-->
+<title>Click-like events on chorded button state changes</title>
+<meta name="viewport" content="width=device-width">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script type="text/javascript" src="pointerevent_support.js"></script>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+    touch-action: none;
+    user-select: none;
+  }
+</style>
+<body onload="run()">
+  <div id="target"></div>
+  <div id="done"></div>
+</body>
+<script>
+  "use strict";
+
+  let event_log = [];
+
+  function eventLogger(e) {
+    event_log.push(e.type);
+  }
+
+  function run() {
+    var target = document.getElementById("target");
+    var done = document.getElementById("done");
+
+    ["click", "auxclick"].forEach(ename => {
+      target.addEventListener(ename, eventLogger);
+    });
+
+    promise_test(async test => {
+      event_log = [];
+
+      let done_click_promise = getEvent("click", done);
+
+      let actions = new test_driver.Actions();
+      actions = actions
+          .pointerMove(0,0, {origin:target})
+          .pointerDown({button:actions.ButtonType.LEFT})
+          .pointerDown({button:actions.ButtonType.MIDDLE})
+          .pointerUp({button:actions.ButtonType.MIDDLE})
+          .pointerUp({button:actions.ButtonType.LEFT})
+          .pointerMove(0,0, {origin:done})
+          .pointerDown()
+          .pointerUp();
+
+      await actions.send();
+      await done_click_promise;
+
+      assert_equals(event_log.toString(), "auxclick,click",
+          "received click-like events");
+    }, "Chorded button sequence L-down M-down M-up L-up");
+
+    promise_test(async test => {
+      event_log = [];
+
+      let done_click_promise = getEvent("click", done);
+
+      let actions = new test_driver.Actions();
+      actions = actions
+          .pointerMove(0,0, {origin:target})
+          .pointerDown({button:actions.ButtonType.MIDDLE})
+          .pointerDown({button:actions.ButtonType.LEFT})
+          .pointerUp({button:actions.ButtonType.LEFT})
+          .pointerUp({button:actions.ButtonType.MIDDLE})
+          .pointerMove(0,0, {origin:done})
+          .pointerDown()
+          .pointerUp();
+
+      await actions.send();
+      await done_click_promise;
+
+      assert_equals(event_log.toString(), "click,auxclick",
+          "received click-like events");
+    }, "Chorded button sequence M-down L-down L-up M-up");
+  }
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.js b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.js
index 7ccb9824..1cede45 100644
--- a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.js
@@ -46,6 +46,8 @@
 
     assert_true(await FrameHasStorageAccess(frame), "innermost frame has storage access after refresh.");
     assert_true(await HasUnpartitionedCookie(frame), "innermost frame has access to cookies after refresh.");
+    let cookieOnLoad = await GetHTTPCookiesFromFrame(frame);
+    assert_true(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has cookie in initial load");
   }, "Same-site-initiated same-origin navigations preserve storage access");
 
   promise_test(async (t) => {
@@ -59,7 +61,7 @@
     assert_false(await FrameHasStorageAccess(frame), "innermost frame has no storage access after refresh.");
     assert_false(await HasUnpartitionedCookie(frame), "innermost frame has no access to cookies after refresh.");
     let cookieOnLoad = await GetHTTPCookiesFromFrame(frame);
-    assert_false(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has cookie in initial load");
+    assert_false(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has no cookie in initial load");
   }, "Same-site-initiated cross-origin navigations do not preserve storage access");
 
 })();
diff --git a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js
index 691c8c8..ce0d69cf 100644
--- a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js
@@ -44,6 +44,9 @@
 
     assert_true(await FrameHasStorageAccess(frame), "frame has storage access after refresh.");
     assert_true(await HasUnpartitionedCookie(frame), "frame has access to cookies after refresh.");
+
+    let cookieOnLoad = await GetHTTPCookiesFromFrame(frame);
+    assert_true(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has cookie in initial load");
   }, "Self-initiated reloads preserve storage access");
 
   promise_test(async (t) => {
@@ -56,6 +59,8 @@
 
     assert_true(await FrameHasStorageAccess(frame), "frame has storage access after refresh.");
     assert_true(await HasUnpartitionedCookie(frame), "frame has access to cookies after refresh.");
+    let cookieOnLoad = await GetHTTPCookiesFromFrame(frame);
+    assert_true(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has cookie in initial load");
   }, "Self-initiated same-origin navigations preserve storage access");
 
   promise_test(async (t) => {
@@ -71,6 +76,8 @@
 
     assert_false(await FrameHasStorageAccess(frame), "frame does not have storage access after refresh.");
     assert_false(await HasUnpartitionedCookie(frame), "frame has access to cookies after refresh.");
+    let cookieOnLoad = await GetHTTPCookiesFromFrame(frame);
+    assert_false(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has no cookie in initial load");
   }, "Non-self-initiated same-origin navigations do not preserve storage access");
 
   promise_test(async (t) => {
@@ -83,5 +90,7 @@
 
     assert_false(await FrameHasStorageAccess(frame), "frame does not have storage access after refresh.");
     assert_false(await HasUnpartitionedCookie(frame), "frame has access to cookies after refresh.");
+    let cookieOnLoad = await GetHTTPCookiesFromFrame(frame);
+    assert_false(cookieStringHasCookie("cookie", "unpartitioned", cookieOnLoad), "innermost frame has no cookie in initial load");
   }, "Self-initiated cross-origin navigations do not preserve storage access");
 })();
diff --git a/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01-expected.txt b/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01-expected.txt
deleted file mode 100644
index 9c0da63..0000000
--- a/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This is a testharness.js-based test.
-Harness Error. harness_status.status = 1 , harness_status.message = Uncaught ReferenceError: tests is not defined
-Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01.html b/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01.html
index 3750c8ff..8e064ad 100644
--- a/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01.html
+++ b/third_party/blink/web_tests/external/wpt/svg/types/SVGElement.ownerSVGElement-01.html
@@ -29,13 +29,13 @@
 setup(() => {
   var topSVG = document.querySelector("#top-svg");
   var innerSVG = document.querySelector("#inner-svg");
-  var tests = [
+  window.tests = [
     // [Element or selector used to find element,
     //  expected ownerSVGElement value,
     //  description]
     [topSVG, null, "outer <svg> element"],
     ["rect", topSVG, "non-<svg> child of outer <svg> element"],
-    ["title", topSVG, "non-<svg> descendant of outer <svg> element"],
+    ["#top-svg title", topSVG, "non-<svg> descendant of outer <svg> element"],
     [innerSVG, topSVG, "inner <svg> descendant of outer <svg> element"],
     ["polygon", innerSVG, "non-<svg> descendant of inner <svg> element"],
     ["#svg-in-fo", null, "outer <svg> in foreignObject"],
diff --git a/third_party/blink/web_tests/platform/mac-mac11/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac11/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt
new file mode 100644
index 0000000..5b37deb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+All subtests passed and are omitted for brevity.
+See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md#Text-Test-Baselines for details.
+Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt
new file mode 100644
index 0000000..5b37deb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+All subtests passed and are omitted for brevity.
+See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md#Text-Test-Baselines for details.
+Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/mac-mac12/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac12/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt
new file mode 100644
index 0000000..d157f14
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker-expected.txt
@@ -0,0 +1,3 @@
+This is a testharness.js-based test.
+Harness Error. harness_status.status = 1 , harness_status.message = Uncaught SyntaxError: Failed to execute 'importScripts' on 'WorkerGlobalScope': Unexpected token ';'
+Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/mac-mac13/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt b/third_party/blink/web_tests/platform/mac-mac13/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt
deleted file mode 100644
index 08f9dab..0000000
--- a/third_party/blink/web_tests/platform/mac-mac13/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Basic B&A auction - response marked as non-chaff
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - incorrectly includes topLevelSeller
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - http:// topLevelSeller is bad, too
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - positive bid is good
-  assert_true: valid key Id expected true got false
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac14-arm64/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt b/third_party/blink/web_tests/platform/mac-mac14-arm64/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt
deleted file mode 100644
index 08f9dab..0000000
--- a/third_party/blink/web_tests/platform/mac-mac14-arm64/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Basic B&A auction - response marked as non-chaff
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - incorrectly includes topLevelSeller
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - http:// topLevelSeller is bad, too
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - positive bid is good
-  assert_true: valid key Id expected true got false
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac14/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt b/third_party/blink/web_tests/platform/mac-mac14/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt
deleted file mode 100644
index b549646..0000000
--- a/third_party/blink/web_tests/platform/mac-mac14/external/wpt/fledge/tentative/server-response.https.window_17-20-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Basic B&A auction - response marked as non-chaff
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - incorrectly includes topLevelSeller
-  promise_test: Unhandled rejection with value: object "OpenError"
-[FAIL] Basic B&A auction - http:// topLevelSeller is bad, too
-  assert_true: valid key Id expected true got false
-[FAIL] Basic B&A auction - positive bid is good
-  assert_true: valid key Id expected true got false
-Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/virtual/fast-api/README.md b/third_party/blink/web_tests/virtual/fast-api/README.md
new file mode 100644
index 0000000..02252f4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/fast-api/README.md
@@ -0,0 +1,4 @@
+# This suite runs the tests in bindings/ with --js-flags=--allow-natives-syntax.
+# Fast api tests require that the test function gets optimized with the top tier
+# compiler of V8, and there is no way to achieve this consistently and
+# deterministically  without V8-internal testing functions.
diff --git a/third_party/dawn b/third_party/dawn
index 234aca7..c30d053 160000
--- a/third_party/dawn
+++ b/third_party/dawn
@@ -1 +1 @@
-Subproject commit 234aca793b7c6747e0722cc40f928faf18a03b86
+Subproject commit c30d05355f3bc95e19ad57f9a9145953ada11435
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index 2b37d5a..afe4e3d 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit 2b37d5a78000721d748fd0115ff93a8c25151d76
+Subproject commit afe4e3d12323531919deb89d9ef25e403fc6ee2a
diff --git a/third_party/icu b/third_party/icu
index ba7ed88..bbccc2f 160000
--- a/third_party/icu
+++ b/third_party/icu
@@ -1 +1 @@
-Subproject commit ba7ed88cc5ffa428a82a0f787dd61031aa5ef4ca
+Subproject commit bbccc2f6efc1b825de5f2c903c48be685cd0cf22
diff --git a/third_party/llvm-libc/src b/third_party/llvm-libc/src
index 758bbca..78e463d 160000
--- a/third_party/llvm-libc/src
+++ b/third_party/llvm-libc/src
@@ -1 +1 @@
-Subproject commit 758bbcaa6aac74bab506d56a2db64cc865c04cae
+Subproject commit 78e463d935378e41c2d088e3a1dd659998a8c3ac
diff --git a/third_party/skia b/third_party/skia
index 3610527..b3a5771 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit 361052740f2e87cd9032df5e19d2626c20940b03
+Subproject commit b3a5771e987296e9c0191d2f92f5b76be4063303
diff --git a/third_party/webgpu-cts/src b/third_party/webgpu-cts/src
index 5b26e0e..64eb522 160000
--- a/third_party/webgpu-cts/src
+++ b/third_party/webgpu-cts/src
@@ -1 +1 @@
-Subproject commit 5b26e0e8957b05b2a7ef76448a46b9901073f125
+Subproject commit 64eb522c87efb458b46d84048c3bb4c3c063a21c
diff --git a/third_party/webrtc b/third_party/webrtc
index adc536a..575d323 160000
--- a/third_party/webrtc
+++ b/third_party/webrtc
@@ -1 +1 @@
-Subproject commit adc536af5aa82c6be09600302b4c553c62a792d7
+Subproject commit 575d32367143909e6fe6991e80170e2d44b5a90d
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml
index f6680be3..e31f11b 100644
--- a/tools/metrics/histograms/metadata/accessibility/histograms.xml
+++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -2960,6 +2960,22 @@
   </token>
 </histogram>
 
+<histogram name="Accessibility.ScreenAI.Searchify.ScreenReaderModeEnabled"
+    enum="Boolean" expires_after="2025-11-01">
+  <owner>rhalavati@chromium.org</owner>
+  <owner>thestig@chromium.org</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    Tracks if screen reader mode was enabled in the browser when PDF Searchifier
+    added text to a PDF. This metric is recorded only once for each PDF, and
+    records the status when searchify adds the first text to the page. If screen
+    reader status changes after the first page is searchified, it's not
+    recorded. The metric is recorded when browser is in screen reader compatible
+    mode and it does not necessarily mean that a screen reader is running on the
+    OS.
+  </summary>
+</histogram>
+
 <histogram name="Accessibility.ScreenAI.Service.Initialization"
     enum="BooleanSuccess" expires_after="2025-04-13">
   <owner>rhalavati@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml
index 3b773be..f852fee 100644
--- a/tools/metrics/histograms/metadata/cookie/histograms.xml
+++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -690,7 +690,7 @@
 <histogram name="Cookie.OnCookiesAccessed.BatchSize" units="accesses"
     expires_after="2025-04-13">
   <owner>olivierli@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     Records the number of cookie access details batches received in
     RenderFrameHostImpl. Recorded every time accesses are reported from the
@@ -701,7 +701,7 @@
 <histogram name="Cookie.OnCookiesAccessed.TotalAccesses" units="accesses"
     expires_after="2025-04-13">
   <owner>olivierli@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     Records the number of cookie access details received in RenderFrameHostImpl.
     Recorded every time accesses are reported from the network service.
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index 71f00d5..33e9a34 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -3429,6 +3429,18 @@
   <summary>The length of the selection received from javascript.</summary>
 </histogram>
 
+<histogram name="IOS.PasswordBottomSheet.Activated" enum="Boolean"
+    expires_after="2025-05-11">
+  <owner>vincb@google.com</owner>
+  <owner>tmartino@google.com</owner>
+  <owner>bling-transactions@google.com</owner>
+  <summary>
+    Tracks whether the password suggestion bottom sheet is activated. Recorded
+    when a password form is parsed with available credentials, which corresponds
+    to the moment where the bottom sheet listeners are attached.
+  </summary>
+</histogram>
+
 <histogram name="IOS.PasswordBottomSheet.ExitReason"
     enum="PasswordSuggestionBottomSheetExitReason" expires_after="2025-05-11">
   <owner>sugoi@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 6c451bdd..54c4320 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -7642,17 +7642,6 @@
   </summary>
 </histogram>
 
-<histogram name="Process.Sandbox.PreloadLibraryFailed.ErrorCode"
-    enum="WinGetLastError" expires_after="2025-01-26">
-  <owner>ajgo@chromium.org</owner>
-  <owner>rhalavati@chromium.org</owner>
-  <owner>src/sandbox/policy/win/OWNERS</owner>
-  <summary>
-    Records the error result of trying to preload a library before creating a
-    sandboxed process on Windows. Only recorded if library loading failed.
-  </summary>
-</histogram>
-
 <histogram name="Process.Sandbox.StartSandboxedWin.{Event}Duration"
     units="microseconds" expires_after="2025-05-11">
   <owner>ajgo@chromium.org</owner>
@@ -8737,7 +8726,7 @@
     expires_after="2025-10-22">
   <owner>olivierli@chromium.org</owner>
   <owner>leszeks@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     The size in bytes of data being stored in the code cache. Recorded on
     receiving the cached code. Recorded only if the size in non-zero.
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml
index 9d6fd42..5c5063d9 100644
--- a/tools/metrics/histograms/metadata/page/histograms.xml
+++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -3846,7 +3846,7 @@
     name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NonTabWebUI{WebUIName}"
     units="ms" expires_after="2025-06-08">
   <owner>anthonyvd@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     Measures the time from navigation start to first contentful paint. This is
     only recorded for non-tab webUI pages, such as side-panel content.
@@ -4042,7 +4042,7 @@
     name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.NonTabWebUI{WebUIName}"
     units="ms" expires_after="2025-06-08">
   <owner>anthonyvd@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     Measures the time from navigation timing's navigation start to the time the
     largest content (text or image) is first painted, for main frame documents
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index cf3d92f7..2d3cb46 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -3559,16 +3559,6 @@
   </summary>
 </histogram>
 
-<histogram name="PasswordManager.ProfileStore.TotalAccountsBeforeInitialSync"
-    units="accounts" expires_after="M134">
-  <owner>vasilii@chromium.org</owner>
-  <owner>mamir@chromium.org</owner>
-  <summary>
-    Records the number of locally saved passwords just before the password Sync
-    was successfully turned on.
-  </summary>
-</histogram>
-
 <histogram name="PasswordManager.PromoCard.ActionButtonClicked"
     enum="PasswordManagerPromoCard" expires_after="2025-06-08">
   <owner>vasilii@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml
index e0b437b..c7b39d7 100644
--- a/tools/metrics/histograms/metadata/uma/histograms.xml
+++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -262,7 +262,7 @@
 <histogram name="UMA.DriveIs{Attribute}Result" enum="OptionalBoolRecord"
     expires_after="2025-02-28">
   <owner>spvw@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     Whether the hard drive containing either the user profile or chrome binary
     was able to be queried for whether it is {Attribute}, and if so, the result
@@ -818,7 +818,7 @@
 <histogram name="UMA.SeekPenaltyResult.{Implementation}"
     enum="OptionalBoolRecord" expires_after="2025-02-28">
   <owner>spvw@chromium.org</owner>
-  <owner>chrome-catan@chromium.org</owner>
+  <owner>catan-team@chromium.org</owner>
   <summary>
     Whether the hard drive containing either the user profile or chrome binary
     was able to be queried for seek delay using the {Implementation}
diff --git a/tools/warning_analysis/pull_logs.py b/tools/warning_analysis/pull_logs.py
index 6b5105a..1516b8b 100755
--- a/tools/warning_analysis/pull_logs.py
+++ b/tools/warning_analysis/pull_logs.py
@@ -28,6 +28,57 @@
     "presubmit",  # No compilation at all
 ]
 
+# List of all ToT builder. Generated by running
+# bb builders chromium/ci | grep /ToT
+# then adding a few to the end by looking at the chromium.clang dashboard
+ToT_builders = [
+    "chromium/ci/ToTAndroid",
+    "chromium/ci/ToTAndroid (dbg)",
+    "chromium/ci/ToTAndroid x64",
+    "chromium/ci/ToTAndroid x86",
+    "chromium/ci/ToTAndroid64",
+    "chromium/ci/ToTAndroidASan",
+    "chromium/ci/ToTAndroidCoverage x86",
+    "chromium/ci/ToTAndroidOfficial",
+    "chromium/ci/ToTChromeOS",
+    "chromium/ci/ToTChromeOS (dbg)",
+    "chromium/ci/ToTFuchsia x64",
+    "chromium/ci/ToTFuchsiaOfficial arm64",
+    "chromium/ci/ToTLinux",
+    "chromium/ci/ToTLinux (dbg)",
+    "chromium/ci/ToTLinuxASan",
+    "chromium/ci/ToTLinuxASanLibfuzzer",
+    "chromium/ci/ToTLinuxCoverage",
+    "chromium/ci/ToTLinuxMSan",
+    "chromium/ci/ToTLinuxPGO",
+    "chromium/ci/ToTLinuxTSan",
+    "chromium/ci/ToTLinuxUBSanVptr",
+    "chromium/ci/ToTMac",
+    "chromium/ci/ToTMac (dbg)",
+    "chromium/ci/ToTMacASan",
+    "chromium/ci/ToTMacArm64",
+    "chromium/ci/ToTMacArm64PGO",
+    "chromium/ci/ToTMacCoverage",
+    "chromium/ci/ToTMacPGO",
+    "chromium/ci/ToTWin",
+    "chromium/ci/ToTWin(dbg)",
+    "chromium/ci/ToTWin(dll)",
+    "chromium/ci/ToTWin64",
+    "chromium/ci/ToTWin64(dbg)",
+    "chromium/ci/ToTWin64(dll)",
+    "chromium/ci/ToTWin64PGO",
+    "chromium/ci/ToTWinASanLibfuzzer",
+    "chromium/ci/ToTWinArm64PGO",
+    "chromium/ci/ToTWindowsCoverage",
+    "chromium/ci/ToTiOS",
+    "chromium/ci/ToTiOSDevice",
+    "chromium/ci/CFI Linux CF",
+    "chromium/ci/CFI Linux ToT",
+    "chromium/ci/linux-win-cross-clang-tot-rel",
+    "chromium/ci/CrWinAsan",
+    "chromium/ci/CrWinAsan(dll)",
+]
+
 verbose = False
 
 
@@ -76,6 +127,14 @@
                         default=default_config["patchset"],
                         help="Patchset number whose logs should be pulled.")
     parser.add_argument(
+        "-t",
+        "--tot",
+        action="store_true",
+        help="If passed, pull scripts from all the ToT bots (as defined at "
+        "the top of the script) instead of from a specific CL. Useful for "
+        "debugging new warnings when gardening clang. "
+        "Overrides --cl and --patchset.")
+    parser.add_argument(
         "-l",
         "-o",
         "--log-dir",
@@ -209,6 +268,45 @@
     return target_builds
 
 
+def identify_tot_builds():
+    """
+    Use the bb tool to retrieve the information for the most recent builds of
+    each tot bot.
+    """
+    target_builds = []
+    failures = []
+    for bot in ToT_builders:
+        build_info = subprocess.run([
+            bb, "ls", "-json", "-fields", "input", "-1", "-status", "ended", bot
+        ],
+                                    check=True,
+                                    stdout=subprocess.PIPE,
+                                    text=True)
+        if (len(build_info.stdout) == 0):
+            raise RuntimeError("Couldn't find any builds for " + bot)
+
+        build = json.loads(build_info.stdout)
+
+        if (build["status"] != "SUCCESS"):
+            failures.append(bot)
+            continue
+
+        target_builds.append((build["builder"]["builder"], build["id"]))
+
+    log("Found {} ToT builds".format(len(target_builds)))
+    if failures:
+        sys.stderr.write(
+            "Couldn't find any recent successful builds for the following bots."
+            " Make sure -Werror is off and wait for a build to succeed.\n"
+            "If you re-run the script later, you can use the --resume argument "
+            "to skip re-downloading logs that are already presnet in the output"
+            " directory.")
+        for bot in failures:
+            sys.stderr.write(bot + "\n")
+        sys.stderr.write("\n")
+    return target_builds
+
+
 def try_pull_step(build_id, step_names):
     """
     Try to pull each possible step name until one works or we've tried them all.
@@ -298,7 +396,10 @@
 
 def main(args):
     parsed_args = parse_args(args)
-    builds = identify_builds(parsed_args["cl"], parsed_args["patchset"])
+    if (parsed_args["tot"]):
+        builds = identify_tot_builds()
+    else:
+        builds = identify_builds(parsed_args["cl"], parsed_args["patchset"])
     failures, partial_logs = pull_and_filter_logs(parsed_args, builds)
 
     if len(failures) > 0:
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
index 6e2f6b3..1e8abd22 100644
--- a/ui/android/BUILD.gn
+++ b/ui/android/BUILD.gn
@@ -601,6 +601,7 @@
     "junit/src/org/chromium/ui/AsyncViewStubTest.java",
     "junit/src/org/chromium/ui/InsetObserverTest.java",
     "junit/src/org/chromium/ui/InsetsRectProviderTest.java",
+    "junit/src/org/chromium/ui/animation/AnimationHandlerUnitTest.java",
     "junit/src/org/chromium/ui/animation/AnimationPerformanceTrackerUnitTest.java",
     "junit/src/org/chromium/ui/animation/PathAnimationUtilsUnitTest.java",
     "junit/src/org/chromium/ui/base/ActivityKeyboardVisibilityDelegateUnitTest.java",
diff --git a/ui/android/junit/src/org/chromium/ui/animation/AnimationHandlerUnitTest.java b/ui/android/junit/src/org/chromium/ui/animation/AnimationHandlerUnitTest.java
new file mode 100644
index 0000000..303e7d6b
--- /dev/null
+++ b/ui/android/junit/src/org/chromium/ui/animation/AnimationHandlerUnitTest.java
@@ -0,0 +1,73 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.ui.animation;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
+
+import android.animation.Animator;
+import android.animation.ValueAnimator;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+
+/** Unit tests for {@link AnimationHandler}. */
+@RunWith(BaseRobolectricTestRunner.class)
+public class AnimationHandlerUnitTest {
+    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    private AnimationHandler mHandler;
+    private @Mock Animator mAnimator;
+
+    @Before
+    public void setUp() {
+        mHandler = new AnimationHandler();
+    }
+
+    @Test
+    public void testStartAnimation() {
+        mHandler.startAnimation(mAnimator);
+        verify(mAnimator).start();
+        verify(mAnimator).addListener(any());
+    }
+
+    @Test
+    public void testAnimationPresent() {
+        mHandler.startAnimation(mAnimator);
+        assertTrue(mHandler.isAnimationPresent());
+    }
+
+    @Test
+    public void testNoAnimationPresent() {
+        assertFalse(mHandler.isAnimationPresent());
+    }
+
+    @Test
+    public void testForceAnimation() {
+        Animator animator = ValueAnimator.ofFloat(0, 1);
+        animator.setDuration(Long.MAX_VALUE);
+
+        mHandler.startAnimation(animator);
+        assertTrue(mHandler.isAnimationPresent());
+
+        mHandler.forceFinishAnimation();
+        assertFalse(mHandler.isAnimationPresent());
+    }
+
+    @Test(expected = AssertionError.class)
+    public void testForceAnimationFails() {
+        mHandler.startAnimation(mAnimator);
+        mHandler.forceFinishAnimation();
+    }
+}
diff --git a/ui/base/pointer/pointer_device_util.cc b/ui/base/pointer/pointer_device_util.cc
index acd24fc4..798ae5f 100644
--- a/ui/base/pointer/pointer_device_util.cc
+++ b/ui/base/pointer/pointer_device_util.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <utility>
+
 #include "ui/base/pointer/pointer_device.h"
 
 namespace ui {
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 1fded14..694ee1a8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -73,6 +73,7 @@
 <translation id="1577977504532381335">Pregledajte smernice administratora</translation>
 <translation id="158849752021629804">Potrebna je matična mreža</translation>
 <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation>
+<translation id="1601786938618212857">Poštanski broj</translation>
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="162175252992296058">portugalski sa američkom internacionalnom tastaturom</translation>
 <translation id="1629521517399325891">Korisnički sertifikat nije dostupan za potvrdu identiteta mreže.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index b937e5dc..743a632 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -73,6 +73,7 @@
 <translation id="1577977504532381335">Прегледајте смернице администратора</translation>
 <translation id="158849752021629804">Потребна је матична мрежа</translation>
 <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation>
+<translation id="1601786938618212857">Поштански број</translation>
 <translation id="1620510694547887537">Камера</translation>
 <translation id="162175252992296058">португалски са америчком интернационалном тастатуром</translation>
 <translation id="1629521517399325891">Кориснички сертификат није доступан за потврду идентитета мреже.</translation>
diff --git a/ui/events/keyboard_event_counter.h b/ui/events/keyboard_event_counter.h
index 96f4a4c79b..9b4072e8 100644
--- a/ui/events/keyboard_event_counter.h
+++ b/ui/events/keyboard_event_counter.h
@@ -6,6 +6,7 @@
 #define UI_EVENTS_KEYBOARD_EVENT_COUNTER_H_
 
 #include <stddef.h>
+#include <stdint.h>
 
 #include <atomic>
 #include <set>
diff --git a/ui/gfx/animation/keyframe/timing_function.h b/ui/gfx/animation/keyframe/timing_function.h
index 79cd1d6..2ca2603 100644
--- a/ui/gfx/animation/keyframe/timing_function.h
+++ b/ui/gfx/animation/keyframe/timing_function.h
@@ -5,6 +5,8 @@
 #ifndef UI_GFX_ANIMATION_KEYFRAME_TIMING_FUNCTION_H_
 #define UI_GFX_ANIMATION_KEYFRAME_TIMING_FUNCTION_H_
 
+#include <stddef.h>
+
 #include <memory>
 #include <vector>
 
diff --git a/ui/gfx/x/generated_protos/extension_manager.h b/ui/gfx/x/generated_protos/extension_manager.h
index 2ab2e79..c1fde26 100644
--- a/ui/gfx/x/generated_protos/extension_manager.h
+++ b/ui/gfx/x/generated_protos/extension_manager.h
@@ -24,6 +24,8 @@
 #ifndef UI_GFX_X_GENERATED_PROTOS_EXTENSION_MANAGER_H_
 #define UI_GFX_X_GENERATED_PROTOS_EXTENSION_MANAGER_H_
 
+#include <stdint.h>
+
 #include <memory>
 
 #include "base/component_export.h"
diff --git a/v8 b/v8
index e103082..d5908b7 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit e103082d1e96b2296fbab3a04a2c21d75594e917
+Subproject commit d5908b7835ce2be112082dc6b053227ed3373376