diff --git a/DEPS b/DEPS
index ee5c290..c31cf6f 100644
--- a/DEPS
+++ b/DEPS
@@ -300,23 +300,23 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'src_internal_revision': 'a7c34a939f03868b62478dd1b8fe6eae2aa2df5c',
+  'src_internal_revision': 'ee6b0d656f2c6feb3d3e4b3a7371439443e87957',
   # 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': '44d45ac4de6f86ba7c1006f67e3af1690ad565f4',
+  'skia_revision': '5218f67ec716edb39f5d005ddaf6e9d70eca7cc9',
   # 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': '5be7a6bb31b5fca6e842f8aa66774cf3a65945f4',
+  'v8_revision': '0e9d96c8d5d7422ed6256456365031f474643843',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '81c119619542772179921f3680d20812fecd1355',
+  'angle_revision': '0040cda1170f9d481135a95d2fbff616120f404b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '8580e3a98e50357e295a792a984a06cc0bb500ad',
+  'swiftshader_revision': '72ca2005cd3242a961ce0de120fe916d25d42281',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -380,7 +380,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling CrossBench
   # and whatever else without interference from each other.
-  'crossbench_revision': 'b5c57759e53875c8756b659a82d8643635978f04',
+  'crossbench_revision': 'de2d0bbb34999a3266e0c02af50ca51a1480cd4d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -396,7 +396,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '45fcf9641a5a9ec8565ef4e4dcba324bd147e12c',
+  'devtools_frontend_revision': '5fea877e0b17578765cd4520857b5b3b172b5199',
   # 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.
@@ -1295,12 +1295,12 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    'e2d266ec5429616c72bd9f2c5fb80c3667560bb5',
+    '59c00202c7c9270d760bf9a57ffd242ef6b0f271',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
   'src/docs/website': {
-    'url': Var('chromium_git') + '/website.git' + '@' + '37e25408c3a45296dfb4fe2a6683a6c98c670a26',
+    'url': Var('chromium_git') + '/website.git' + '@' + 'c1dd82899ac158ed48629c0b140f33847619bdfc',
   },
 
   'src/ios/third_party/earl_grey2/src': {
@@ -1774,7 +1774,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '4b9fa640bc42f38524f48c27b280b81d93369501',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '51db6cf38207673d6bfa25c8e136277c3cfb6e9c',
     'condition': 'checkout_src_internal',
   },
 
@@ -2026,7 +2026,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/kotlinc',
-              'version': 'sWflNFi1lIChwNkfw5cn9pvABtOAVLcuUQMHvx9s0ccC',
+              'version': 'XQ53U9_IMFOEUFAchvXNwUI-6HvUmhhNcQk7FFsaBgEC',
           },
       ],
       'condition': 'checkout_android',
@@ -2266,7 +2266,7 @@
     Var('pdfium_git') + '/pdfium.git' + '@' +  Var('pdfium_revision'),
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '074514fc06ccc3da014e8912117a7465fefd4aa4',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '077bb360edecb33551e88c8097035e4b8cef245b',
 
   'src/base/tracing/test/data': {
     'bucket': 'perfetto',
@@ -2420,7 +2420,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'LHNTk_-ajFbwrjtRsvuqgsLQGXD5dbTlWyV1MJ4_u2EC',
+              'version': 'I9NkcalmFScQACQtkXVKfzARFBmSev5KPsswXhNBQy8C',
           },
       ],
       'condition': 'checkout_android and non_git_source',
@@ -4313,7 +4313,7 @@
 
   'src/components/autofill/core/browser/form_parsing/internal_resources': {
       'url': Var('chrome_git') + '/chrome/components/autofill_regex_patterns.git' + '@' +
-        '63fcf0a84bea083e8d0957ce94af91c1373da328',
+        '003e8a7f35140e7515f911bd5f5472f2c1483c83',
       'condition': 'checkout_src_internal',
   },
 
@@ -4396,7 +4396,7 @@
 
   'src/ios_internal':  {
       'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' +
-        'f17fd6e8cd1a625d259c96d0dfcfdd41b0687ef1',
+        'c7ca556bc732c861810971db63ceffa352c2442e',
       'condition': 'checkout_ios and checkout_src_internal',
   },
 
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index b2eff260..032b4cbc 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Skakel toegang tot presiese ligging aan?</translation>
 <translation id="3269597722229482060">Regsklik</translation>
 <translation id="3271554781793662131">Soek om in te voeg</translation>
-<translation id="3273040715184276344">Caps Lock is af</translation>
 <translation id="3274634049061007184">Bekyk jou foon se apps</translation>
 <translation id="3289364673986435196">Aan/af-kieslys</translation>
 <translation id="3289544412142055976">Linux-programme word nie tans gesteun nie</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Maak hierdie datum in Google Kalender oop.</translation>
 <translation id="7671610481353807627">Programme word volgens kleur gerangskik</translation>
 <translation id="7672095158465655885">Gekoppel aan <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock is aan</translation>
 <translation id="7682351277038250258">Plak inhoud van knipbord af as skoonteks</translation>
 <translation id="7684531502177797067">Kamera-invoer is gestel op <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Jy het dit oopgemaak</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index fe389171..1316cc2 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">የትክክለኛ አካባቢ መዳረሻ ይብራ?</translation>
 <translation id="3269597722229482060">የቀኝ ጠቅታ</translation>
 <translation id="3271554781793662131">ለማስገባት ይፈልጉ</translation>
-<translation id="3273040715184276344">Caps Lock ጠፍቷል</translation>
 <translation id="3274634049061007184">የስልክዎን መተግበሪያዎች ይመልከቱ</translation>
 <translation id="3289364673986435196">የኃይል ምናሌ</translation>
 <translation id="3289544412142055976">የሊኑክስ መተግበሪያዎች በአሁኑ ጊዜ አይደገፉም</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">ይህንን ቀን በGoogle ቀን መቁጠሪያ ውስጥ ይክፈቱ</translation>
 <translation id="7671610481353807627">መተግበሪያዎች በቀለም ተደርድረዋል</translation>
 <translation id="7672095158465655885">ከ<ph name="NAME" /> ጋር ተገናኝቷል፣ <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock በርቷል</translation>
 <translation id="7682351277038250258">ይዘትን ከቅንጥብ ሰሌዳው እንደ ቅርፀት አልባ ጽሁፍ ይለጥፉ</translation>
 <translation id="7684531502177797067">የካሜራ ግቤት ወደ <ph name="CAMERA_NAME" /> ተቀናብሯል።</translation>
 <translation id="7687172143976244806">እርስዎ ከፍተውታል</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 90b51a69..e69fb76 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -635,7 +635,6 @@
 <translation id="3265032511221679826">هل تريد تفعيل إذن الوصول إلى بيانات الموقع الجغرافي الدقيق؟</translation>
 <translation id="3269597722229482060">النقر بزر الماوس الأيمن</translation>
 <translation id="3271554781793662131">ابحث عن روابط أو ملفات لإدراجها</translation>
-<translation id="3273040715184276344">‏تم إيقاف مفتاح Caps Lock</translation>
 <translation id="3274634049061007184">عرض التطبيقات في هاتفك</translation>
 <translation id="3289364673986435196">قائمة زر التشغيل</translation>
 <translation id="3289544412142055976">‏هذا الخيار غير متوفّر حاليًا لتطبيقات Linux.</translation>
@@ -1956,7 +1955,6 @@
 <translation id="7670953955701272011">‏فتح هذا التاريخ في "تقويم Google"</translation>
 <translation id="7671610481353807627">تم ترتيب التطبيقات حسب اللون.</translation>
 <translation id="7672095158465655885">تم الاتصال بـ "<ph name="NAME" />"، <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">‏تم تفعيل مفتاح Caps Lock</translation>
 <translation id="7682351277038250258">لصق المحتوى من الحافظة كنص عادي</translation>
 <translation id="7684531502177797067">تم ضبط إعدادات الكاميرا على <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">فتحتَه</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 2af9f6aa..d809095 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">সঠিক অৱস্থানৰ এক্সেছ অন কৰিবনে?</translation>
 <translation id="3269597722229482060">সোঁফালে ক্লিক কৰক</translation>
 <translation id="3271554781793662131">ভৰাবলৈ সন্ধান কৰক</translation>
-<translation id="3273040715184276344">Caps Lock অফ কৰা আছে</translation>
 <translation id="3274634049061007184">আপোনাৰ ফ’নৰ এপ্‌সমূহ চাওক</translation>
 <translation id="3289364673986435196">পাৱাৰ মেনু</translation>
 <translation id="3289544412142055976">বৰ্তমান Linux এপ্‌সমূহ সমৰ্থিত নহয়</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendarত এই তাৰিখটো খোলক</translation>
 <translation id="7671610481353807627">ৰং অনুসৰি এপ্ সজোৱা হৈছে</translation>
 <translation id="7672095158465655885"><ph name="NAME" />ৰ সৈতে সংযুক্ত হৈছে, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock অন কৰা আছে</translation>
 <translation id="7682351277038250258">ক্লিপব’ৰ্ডৰ পৰা সমল সাধাৰণ পাঠ হিচাপে পে’ষ্ট কৰক</translation>
 <translation id="7684531502177797067">কেমেৰাৰ ইনপুট <ph name="CAMERA_NAME" /> হিচাপে ছেট কৰা হৈছে।</translation>
 <translation id="7687172143976244806">আপুনি খুলিছে</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index e1aa776..65dc16ff 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Dəqiq məkana giriş aktiv edilsin?</translation>
 <translation id="3269597722229482060">Sağ düymə ilə toxunun</translation>
 <translation id="3271554781793662131">Daxil etmək üçün axtarın</translation>
-<translation id="3273040715184276344">Caps Lock deaktivdir</translation>
 <translation id="3274634049061007184">Telefon tətbiqlərinə baxın</translation>
 <translation id="3289364673986435196">Enerji menyusu</translation>
 <translation id="3289544412142055976">Linux tətbiqləri hazırda dəstəklənmir</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Bu tarixi Google Calendar'da açın</translation>
 <translation id="7671610481353807627">Tətbiqlər rəngə görə sıralanıb</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> şəbəkəsinə qoşuldunuz, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock aktivdir</translation>
 <translation id="7682351277038250258">Mübadilə buferindən kontenti sadə mətn kimi əlavə edin</translation>
 <translation id="7684531502177797067">Kamera daxiletməsi <ph name="CAMERA_NAME" /> olaraq ayarlanıb.</translation>
 <translation id="7687172143976244806">Açdınız</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index ac3c907..e7729b2f 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Уключыць доступ да даных дакладнага месцазнаходжання?</translation>
 <translation id="3269597722229482060">Націснуць правай кнопкай мышы</translation>
 <translation id="3271554781793662131">Шукайце, каб уставіць</translation>
-<translation id="3273040715184276344">Caps Lock выключаны</translation>
 <translation id="3274634049061007184">Прагляд праграм з тэлефона</translation>
 <translation id="3289364673986435196">Меню кнопкі сілкавання</translation>
 <translation id="3289544412142055976">Праграмы Linux цяпер не падтрымліваюцца</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Адкрыць гэту дату ў Google Календары</translation>
 <translation id="7671610481353807627">Праграмы адсартаваны па колеры</translation>
 <translation id="7672095158465655885">Устаноўлена падключэнне да сеткі "<ph name="NAME" />", <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock уключаны</translation>
 <translation id="7682351277038250258">Уставіць змесціва з буфера абмену як звычайны тэкст</translation>
 <translation id="7684531502177797067">Ажыццяўляецца ўвод з відэакамеры "<ph name="CAMERA_NAME" />".</translation>
 <translation id="7687172143976244806">Вы адкрывалі</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 16420ba8..fd73236d 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Да се включи ли достъпът до точното местоположение?</translation>
 <translation id="3269597722229482060">Кликване с десния бутон</translation>
 <translation id="3271554781793662131">Търсете за вмъкване</translation>
-<translation id="3273040715184276344">Режимът Caps Lock е изключен</translation>
 <translation id="3274634049061007184">Преглед на приложенията на телефона ви</translation>
 <translation id="3289364673986435196">Меню за включване/изключване</translation>
 <translation id="3289544412142055976">Понастоящем приложенията за Linux не се поддържат</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Отваряне на тази дата в Google Календар</translation>
 <translation id="7671610481353807627">Приложенията са сортирани по цвят</translation>
 <translation id="7672095158465655885">Установена е връзка с мрежата <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Режимът Caps Lock е включен</translation>
 <translation id="7682351277038250258">Поставяне на съдържанието от буферната памет като неформатиран текст</translation>
 <translation id="7684531502177797067">Избрана е камерата <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Отворено от вас</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 4e9906d..04bd9406 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">সুনির্দিষ্ট লোকেশন সংক্রান্ত অ্যাক্সেসের অনুমতি চালু করবেন?</translation>
 <translation id="3269597722229482060">ডানদিকের বোতামে ক্লিক করুন</translation>
 <translation id="3271554781793662131">যোগ করার জন্য সার্চ করুন</translation>
-<translation id="3273040715184276344">Caps Lock বন্ধ করা আছে</translation>
 <translation id="3274634049061007184">আপনার ফোনের অ্যাপ দেখুন</translation>
 <translation id="3289364673986435196">পাওয়ার মেনু</translation>
 <translation id="3289544412142055976">বর্তমানে Linux অ্যাপ ব্যবহারের সুবিধা নেই</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendar-এ এই তারিখটি খুলুন</translation>
 <translation id="7671610481353807627">আইকনের রঙ অনুযায়ী অ্যাপ সাজানো হয়েছে</translation>
 <translation id="7672095158465655885"><ph name="NAME" />-এর সাথে কানেক্ট করা রয়েছে, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock চালু করা আছে</translation>
 <translation id="7682351277038250258">ক্লিপবোর্ড থেকে সাধারণ টেক্সট হিসেবে কন্টেন্ট পেস্ট করুন</translation>
 <translation id="7684531502177797067">ক্যামেরা ইনপুট <ph name="CAMERA_NAME" />-এ সেট করা আছে।</translation>
 <translation id="7687172143976244806">আপনি খুলেছেন</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index fc1297e8..eaf005ae 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Uključiti pristup tačnoj lokaciji?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3271554781793662131">Pretražite da umetnete</translation>
-<translation id="3273040715184276344">Caps Lock je isključen</translation>
 <translation id="3274634049061007184">Pregledajte aplikacije telefona</translation>
 <translation id="3289364673986435196">Meni napajanja</translation>
 <translation id="3289544412142055976">Linux aplikacije trenutno nisu podržane</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Otvorite ovaj datum u Google Kalendaru</translation>
 <translation id="7671610481353807627">Aplikacije su poredane po boji</translation>
 <translation id="7672095158465655885">Povezano s mrežom <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock je uključen</translation>
 <translation id="7682351277038250258">Lijepljenje sadržaja iz međumemorije u obliku običnog teksta</translation>
 <translation id="7684531502177797067">Ulaz kamere je postavljen na <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Otvorili ste</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index b6d15d24..2861e49 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vols activar l'accés a la ubicació precisa?</translation>
 <translation id="3269597722229482060">Clic amb el botó dret</translation>
 <translation id="3271554781793662131">Cerca per inserir</translation>
-<translation id="3273040715184276344">Bloqueig de majúscules desactivat</translation>
 <translation id="3274634049061007184">Consulta les aplicacions del telèfon</translation>
 <translation id="3289364673986435196">Menú d'engegada</translation>
 <translation id="3289544412142055976">Actualment, les aplicacions de Linux no s'admeten</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Obre aquesta data a Google Calendar</translation>
 <translation id="7671610481353807627">Les aplicacions estan ordenades per color</translation>
 <translation id="7672095158465655885">Connectat a <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Bloqueig de majúscules activat</translation>
 <translation id="7682351277038250258">Enganxa el contingut del porta-retalls com a text sense format</translation>
 <translation id="7684531502177797067">L'entrada per càmera s'ha establert en <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">L'has obert</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 6f9384c..a68d666 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Zapnout přístup k přesné poloze?</translation>
 <translation id="3269597722229482060">Kliknutí pravým tlačítkem</translation>
 <translation id="3271554781793662131">Vyhledat položky k vložení</translation>
-<translation id="3273040715184276344">Režim Caps Lock je vypnutý</translation>
 <translation id="3274634049061007184">Zobrazovat aplikace z telefonu</translation>
 <translation id="3289364673986435196">Nabídka vypínače</translation>
 <translation id="3289544412142055976">Linuxové aplikace v současné době nejsou podporovány</translation>
@@ -1951,7 +1950,6 @@
 <translation id="7670953955701272011">Otevřít toto datum v Kalendáři Google</translation>
 <translation id="7671610481353807627">Aplikace jsou seřazeny podle barvy</translation>
 <translation id="7672095158465655885">Jste připojeni k síti <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Režim Caps Lock je zapnutý</translation>
 <translation id="7682351277038250258">Vložit obsah ze schránky jako prostý text</translation>
 <translation id="7684531502177797067">Vstup z kamery nastaven na <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Otevřeli jste</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb
index c9d315a0..d40df92d8 100644
--- a/ash/strings/ash_strings_cy.xtb
+++ b/ash/strings/ash_strings_cy.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Troi mynediad union leoliad ymlaen?</translation>
 <translation id="3269597722229482060">De-glicio</translation>
 <translation id="3271554781793662131">Chwilio i fewnosod</translation>
-<translation id="3273040715184276344">Mae Clo CAPS wedi'i ddiffodd</translation>
 <translation id="3274634049061007184">Gweld apiau eich ffôn</translation>
 <translation id="3289364673986435196">Dewislen pŵer</translation>
 <translation id="3289544412142055976">Ni chefnogir apiau Linux ar hyn o bryd</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Agor y dyddiad hwn yn Google Calendar</translation>
 <translation id="7671610481353807627">Mae apiau'n cael eu trefnu yn ôl lliw</translation>
 <translation id="7672095158465655885">Wedi cysylltu â <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Mae Clo CAPS ymlaen</translation>
 <translation id="7682351277038250258">Gludo cynnwys o'r clipfwrdd fel testun plaen</translation>
 <translation id="7684531502177797067">Mae mewnbwn y camera wedi'i osod i <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Gwnaethoch agor</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 1001544..a4e1d1c 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vil du aktivere præcis lokationsadgang?</translation>
 <translation id="3269597722229482060">Højreklik</translation>
 <translation id="3271554781793662131">Søg for at indsætte</translation>
-<translation id="3273040715184276344">Caps Lock er slået fra</translation>
 <translation id="3274634049061007184">Se din telefons apps</translation>
 <translation id="3289364673986435196">Menu for afbryderknappen</translation>
 <translation id="3289544412142055976">Linux-apps understøttes ikke i øjeblikket</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">Brug skabelon</translation>
 <translation id="5986723678596105470">Deltag via Google Meet</translation>
 <translation id="598882571027504733">Genstart din Chromebook med det tilsluttede tastatur for at hente opdateringen.</translation>
+<translation id="5990992855591814753">Bevar arbejdskoncentrationen med personligt tilpassede fokusplaylister. Få YouTube Music og YouTube uden annoncer med 3 måneders YouTube Premium uden beregning. Vilkår er gældende.</translation>
 <translation id="5998374579424866922">Deaktiver spilstyring</translation>
 <translation id="6000279412553873020">Taster, knapper m.m.</translation>
 <translation id="6012623610530968780">Side <ph name="SELECTED_PAGE" /> ud af <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1952,7 +1952,6 @@
 <translation id="7670953955701272011">Åbn denne dato i Google Kalender</translation>
 <translation id="7671610481353807627">Apps er sorteret efter farve</translation>
 <translation id="7672095158465655885">Der er forbindelse til <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock er slået til</translation>
 <translation id="7682351277038250258">Indsæt indhold fra udklipsholderen som almindelig tekst</translation>
 <translation id="7684531502177797067">Kamerainput er indstillet til <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Åbnet af dig</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index b50affc..a09c395 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Zugriff auf genauen Standort aktivieren?</translation>
 <translation id="3269597722229482060">Rechtsklick</translation>
 <translation id="3271554781793662131">Zum Einfügen suchen</translation>
-<translation id="3273040715184276344">Feststelltaste deaktiviert</translation>
 <translation id="3274634049061007184">Apps auf deinem Smartphone anzeigen</translation>
 <translation id="3289364673986435196">Ein-/Aus-Menü</translation>
 <translation id="3289544412142055976">Linux-Apps werden derzeit nicht unterstützt</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Dieses Datum in Google Kalender öffnen</translation>
 <translation id="7671610481353807627">Apps wurden nach Farbe sortiert</translation>
 <translation id="7672095158465655885">Verbunden mit <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Feststelltaste aktiviert</translation>
 <translation id="7682351277038250258">Inhalt aus Zwischenablage als unformatierten Text einfügen</translation>
 <translation id="7684531502177797067">Kameraeingabe ist auf <ph name="CAMERA_NAME" /> festgelegt.</translation>
 <translation id="7687172143976244806">Von dir geöffnet</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 3a9fe1e2..2675501a 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Ενεργοποίηση πρόσβασης στην ακριβή τοποθεσία;</translation>
 <translation id="3269597722229482060">Δεξί κλικ</translation>
 <translation id="3271554781793662131">Αναζήτηση για εισαγωγή</translation>
-<translation id="3273040715184276344">Caps Lock ανενεργό</translation>
 <translation id="3274634049061007184">Προβολή των εφαρμογών του τηλεφώνου σας</translation>
 <translation id="3289364673986435196">Μενού λειτουργίας</translation>
 <translation id="3289544412142055976">Προς το παρόν, δεν υποστηρίζονται οι εφαρμογές Linux</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Άνοιγμα αυτής της ημερομηνίας στο Ημερολόγιο Google</translation>
 <translation id="7671610481353807627">Οι εφαρμογές ταξινομούνται κατά χρώμα</translation>
 <translation id="7672095158465655885">Συνδέθηκε σε <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ενεργό</translation>
 <translation id="7682351277038250258">Επικόλληση περιεχομένου από το πρόχειρο ως απλό κείμενο</translation>
 <translation id="7684531502177797067">Η είσοδος κάμερας ρυθμίστηκε σε <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Το ανοίξατε εσείς</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 2c70ec1..f7873df 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Turn on precise location access?</translation>
 <translation id="3269597722229482060">Right-click</translation>
 <translation id="3271554781793662131">Search to insert</translation>
-<translation id="3273040715184276344">Caps lock off.</translation>
 <translation id="3274634049061007184">View your phone's apps</translation>
 <translation id="3289364673986435196">Power menu</translation>
 <translation id="3289544412142055976">Linux apps aren’t currently supported</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Open this date in Google Calendar</translation>
 <translation id="7671610481353807627">Apps are sorted by colour</translation>
 <translation id="7672095158465655885">Connected to <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps lock on</translation>
 <translation id="7682351277038250258">Paste content from clipboard as plain text</translation>
 <translation id="7684531502177797067">Camera input set to <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">You opened</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index c69685b0..9d3f6db9 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">¿Quieres activar el acceso a la ubicación precisa?</translation>
 <translation id="3269597722229482060">Hacer clic con el botón derecho</translation>
 <translation id="3271554781793662131">Buscar para insertar</translation>
-<translation id="3273040715184276344">Bloqueo de mayúsculas desactivado</translation>
 <translation id="3274634049061007184">Ver las apps de tu teléfono</translation>
 <translation id="3289364673986435196">Menú de encendido</translation>
 <translation id="3289544412142055976">Por el momento, las apps de Linux no son compatibles</translation>
@@ -1954,7 +1953,6 @@
 <translation id="7670953955701272011">Abrir esta fecha en el Calendario de Google</translation>
 <translation id="7671610481353807627">Las apps están ordenadas por color</translation>
 <translation id="7672095158465655885">Conectado con <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Bloqueo de mayúsculas activado</translation>
 <translation id="7682351277038250258">Pegar el contenido del portapapeles como texto sin formato</translation>
 <translation id="7684531502177797067">Se estableció la entrada de cámara como <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Lo abriste</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index a033291c..182a6a6 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">¿Activar acceso a ubicación precisa?</translation>
 <translation id="3269597722229482060">Clic derecho</translation>
 <translation id="3271554781793662131">Buscar para insertar</translation>
-<translation id="3273040715184276344">Bloqueo de mayúsculas desactivado</translation>
 <translation id="3274634049061007184">Consulta las aplicaciones de tu teléfono</translation>
 <translation id="3289364673986435196">Menú de encendido</translation>
 <translation id="3289544412142055976">Por el momento no se admiten aplicaciones de Linux</translation>
@@ -1470,6 +1469,7 @@
 <translation id="598407983968395253">Utilizar plantilla</translation>
 <translation id="5986723678596105470">Unirme con Google Meet</translation>
 <translation id="598882571027504733">Para recibir la actualización, reinicia tu Chromebook con el teclado conectado.</translation>
+<translation id="5990992855591814753">Mantén la concentración con listas de reproducción personalizadas. Disfruta de YouTube Music y YouTube sin anuncios con 3 meses de YouTube Premium sin coste económico. Oferta sujeta a condiciones.</translation>
 <translation id="5998374579424866922">Desactivar los controles del juego</translation>
 <translation id="6000279412553873020">Teclas, botones y más</translation>
 <translation id="6012623610530968780">Página <ph name="SELECTED_PAGE" /> de <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1953,7 +1953,6 @@
 <translation id="7670953955701272011">Abre esta fecha en Google Calendar</translation>
 <translation id="7671610481353807627">Las aplicaciones se han ordenado por color</translation>
 <translation id="7672095158465655885">Conectado a <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Bloqueo de mayúsculas activado</translation>
 <translation id="7682351277038250258">Pegar el contenido del portapapeles como texto sin formato</translation>
 <translation id="7684531502177797067">Entrada por cámara definida como <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Lo has abierto</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index d0d9f27a9..5bc00740 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Kas lülitada sisse juurdepääs täpsele asukohale?</translation>
 <translation id="3269597722229482060">Paremklikk</translation>
 <translation id="3271554781793662131">Sisestamiseks otsige</translation>
-<translation id="3273040715184276344">Suurtähelukk on väljas</translation>
 <translation id="3274634049061007184">Teie telefoni rakenduste kuvamine</translation>
 <translation id="3289364673986435196">Toitemenüü</translation>
 <translation id="3289544412142055976">Linuxi rakendusi praegu ei toetata</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Avage see kuupäev Google'i kalendris</translation>
 <translation id="7671610481353807627">Rakendused on sorditud värvi järgi</translation>
 <translation id="7672095158465655885">Ühendatud võrguga <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Suurtähelukk on sees</translation>
 <translation id="7682351277038250258">Lõikelaua sisu lihttekstina kleepimine</translation>
 <translation id="7684531502177797067">Kaamerasisendiks on määratud <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Teie avasite</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 59a7607a..83d7609 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Kokapen zehatza erabiltzeko aukera aktibatu nahi duzu?</translation>
 <translation id="3269597722229482060">Egin klik eskuineko botoiarekin</translation>
 <translation id="3271554781793662131">Bilatu txertatzeko</translation>
-<translation id="3273040715184276344">Maiuskulen blokeoa desaktibatuta dago</translation>
 <translation id="3274634049061007184">Ikusi telefonoko aplikazioak</translation>
 <translation id="3289364673986435196">Itzaltzeko menua</translation>
 <translation id="3289544412142055976">Une honetan ez dira onartzen Linux-eko aplikazioak</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Ireki data hau Google Calendar-en</translation>
 <translation id="7671610481353807627">Kolorearen arabera daude ordenatuta aplikazioak</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> sarera konektatuta, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Maiuskulen blokeoa aktibatuta dago</translation>
 <translation id="7682351277038250258">Itsatsi arbeleko edukia testu arrunt gisa</translation>
 <translation id="7684531502177797067">"<ph name="CAMERA_NAME" />" dago ezarrita kameraren sarrera gisa.</translation>
 <translation id="7687172143976244806">Zuk ireki duzu</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index bde23deb..e6c2cda 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">دسترسی به مکان دقیق روشن شود؟</translation>
 <translation id="3269597722229482060">کلیک راست</translation>
 <translation id="3271554781793662131">جستجو برای وارد کردن</translation>
-<translation id="3273040715184276344">کلید «قفل تبدیل» خاموش شد</translation>
 <translation id="3274634049061007184">مشاهده برنامه‌های تلفن</translation>
 <translation id="3289364673986435196">منوی روشن/خاموش</translation>
 <translation id="3289544412142055976">‏درحال‌حاضر از برنامه‌های Linux پشتیبانی نمی‌شود</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">‏باز کردن این تاریخ در «تقویم Google»</translation>
 <translation id="7671610481353807627">برنامه‌ها براساس رنگ مرتب شده‌اند</translation>
 <translation id="7672095158465655885">متصل به <ph name="NAME" />، <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">کلید «قفل تبدیل» روشن شد</translation>
 <translation id="7682351277038250258">جای‌گذاری محتوا از بریده‌دان به‌عنوان متن ساده</translation>
 <translation id="7684531502177797067">ورودی دوربین روی <ph name="CAMERA_NAME" /> تنظیم شد.</translation>
 <translation id="7687172143976244806">باز کردید</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index b2b363b..add8bc2f 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Sallitaanko tarkan sijainnin käyttö?</translation>
 <translation id="3269597722229482060">Klikkaa kakkospainiketta</translation>
 <translation id="3271554781793662131">Hae lisättäviä lähteitä</translation>
-<translation id="3273040715184276344">Caps Lock pois päältä</translation>
 <translation id="3274634049061007184">Katsele puhelimesi sovelluksia</translation>
 <translation id="3289364673986435196">Virtavalikko</translation>
 <translation id="3289544412142055976">Linux-sovelluksia ei tällä hetkellä tueta</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Avaa tämä päivämäärä Google Kalenterissa</translation>
 <translation id="7671610481353807627">Sovellukset on lajiteltu värin perusteella</translation>
 <translation id="7672095158465655885">Yhdistetty: <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock päällä</translation>
 <translation id="7682351277038250258">Liitä leikepöydän sisältö vain teksti ‑muodossa</translation>
 <translation id="7684531502177797067"><ph name="CAMERA_NAME" /> on asetettu kamerasyötteeksi.</translation>
 <translation id="7687172143976244806">Sinä avasit</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 05706a3f..42ddb69 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">I-on ang access sa eksaktong lokasyon?</translation>
 <translation id="3269597722229482060">Mag-right Click</translation>
 <translation id="3271554781793662131">Maghanap para ilagay</translation>
-<translation id="3273040715184276344">Naka-off ang Caps Lock</translation>
 <translation id="3274634049061007184">Tingnan ang mga app ng iyong telepono</translation>
 <translation id="3289364673986435196">Power menu</translation>
 <translation id="3289544412142055976">Kasalukuyang hindi sinusuportahan ang mga Linux app.</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">Gamitin ang template</translation>
 <translation id="5986723678596105470">Sumali gamit ang Google Meet</translation>
 <translation id="598882571027504733">Para makuha ang update, i-restart ang iyong Chromebook nang nakakabit ang keyboard.</translation>
+<translation id="5990992855591814753">Tuloy lang sa ginagawa mo gamit ang mga naka-personalize na playlist para sa pag-focus. Kunin ang YouTube Music at YouTube, na walang ad, at may 3 buwang YouTube Premium na libre. May mga nalalapat na tuntunin.</translation>
 <translation id="5998374579424866922">I-off ang mga kontrol ng laro</translation>
 <translation id="6000279412553873020">Mga key, button, at higit pa</translation>
 <translation id="6012623610530968780">Page <ph name="SELECTED_PAGE" /> ng <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1951,7 +1951,6 @@
 <translation id="7670953955701272011">Buksan ang petsang ito sa Google Calendar</translation>
 <translation id="7671610481353807627">Pinagbukod-bukod ang mga app ayon sa kulay</translation>
 <translation id="7672095158465655885">Nakakonekta sa <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Naka-on ang Caps Lock</translation>
 <translation id="7682351277038250258">I-paste ang content mula sa clipboard bilang plain text</translation>
 <translation id="7684531502177797067">Nakatakda ang input ng camera sa <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Binuksan mo</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 585e55d..42a3fef 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Activer l'accès à la position exacte?</translation>
 <translation id="3269597722229482060">Clic droit</translation>
 <translation id="3271554781793662131">Rechercher pour insérer</translation>
-<translation id="3273040715184276344">Verrouillage des majuscules désactivé</translation>
 <translation id="3274634049061007184">Affichez les applications de votre téléphone</translation>
 <translation id="3289364673986435196">Menu de l'interrupteur</translation>
 <translation id="3289544412142055976">Les applications Linux ne sont pas prises en charge actuellement</translation>
@@ -1951,7 +1950,6 @@
 <translation id="7670953955701272011">Ouvrir cette date dans Google Agenda</translation>
 <translation id="7671610481353807627">Les applications sont triées par couleur</translation>
 <translation id="7672095158465655885">Connecté à <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Verrouillage des majuscules activé</translation>
 <translation id="7682351277038250258">Coller le contenu du presse-papiers en tant que texte brut</translation>
 <translation id="7684531502177797067">Caméra <ph name="CAMERA_NAME" /> activée.</translation>
 <translation id="7687172143976244806">Vous avez ouvert</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 265ed2d..d3d47ebb 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Activer l'accès à la position exacte ?</translation>
 <translation id="3269597722229482060">Clic droit</translation>
 <translation id="3271554781793662131">Recherchez pour insérer</translation>
-<translation id="3273040715184276344">Verr Maj désactivé</translation>
 <translation id="3274634049061007184">Afficher les applis de votre téléphone</translation>
 <translation id="3289364673986435196">Menu Marche/Arrêt</translation>
 <translation id="3289544412142055976">Les applis Linux ne sont pas prises en charge actuellement</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Ouvrir cette date dans Google Agenda</translation>
 <translation id="7671610481353807627">Les applis sont triées par couleur</translation>
 <translation id="7672095158465655885">Connecté à <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Verr Maj activé</translation>
 <translation id="7682351277038250258">Coller le contenu du presse-papiers en texte brut</translation>
 <translation id="7684531502177797067">Saisie par photo définie sur <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Ouvert par vous</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index a99a57d7..6848526f 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Queres activar o acceso á localización precisa?</translation>
 <translation id="3269597722229482060">Facer clic co botón dereito</translation>
 <translation id="3271554781793662131">Busca ligazóns ou ficheiros para inserilos</translation>
-<translation id="3273040715184276344">Bloqueo de maiúsculas desactivado</translation>
 <translation id="3274634049061007184">Consulta as aplicacións do teu teléfono</translation>
 <translation id="3289364673986435196">Menú de acendido</translation>
 <translation id="3289544412142055976">As aplicación de Linux agora mesmo non son compatibles</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Abrir esta data en Google Calendar</translation>
 <translation id="7671610481353807627">As aplicacións están ordenadas por cor</translation>
 <translation id="7672095158465655885">Conexión establecida con <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Bloqueo de maiúsculas activado</translation>
 <translation id="7682351277038250258">Pega o contido do portapapeis como texto sen formato</translation>
 <translation id="7684531502177797067">Definiuse a entrada por cámara como <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Abríchelo</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 5882dcb..65aa5c8 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">શું સચોટ લોકેશનનો ઍક્સેસ ચાલુ કરીએ?</translation>
 <translation id="3269597722229482060">રાઇટ ક્લિક કરો</translation>
 <translation id="3271554781793662131">દાખલ કરવા માટે શોધો</translation>
-<translation id="3273040715184276344">Caps Lock બંધ છે</translation>
 <translation id="3274634049061007184">તમારા ફોનની ઍપ જુઓ</translation>
 <translation id="3289364673986435196">પાવર મેનૂ</translation>
 <translation id="3289544412142055976">હાલમાં Linux ઍપને સપોર્ટ કરવામાં આવતો નથી</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendarમાં આ તારીખ ખોલો</translation>
 <translation id="7671610481353807627">ઍપને રંગ અનુસાર સૉર્ટ કરવામાં આવી છે</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> સાથે કનેક્ટેડ, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ચાલુ છે</translation>
 <translation id="7682351277038250258">ક્લિપબોર્ડમાંના કન્ટેન્ટને સાદી ટેક્સ્ટ તરીકે પેસ્ટ કરો</translation>
 <translation id="7684531502177797067">કૅમેરા ઇનપુટને <ph name="CAMERA_NAME" /> પર સેટ કર્યું.</translation>
 <translation id="7687172143976244806">તમારા દ્વારા ખોલવામાં આવેલી</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 7b9aede..766813f 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">क्या आपको जगह की सटीक जानकारी शेयर करने की सुविधा चालू करनी है?</translation>
 <translation id="3269597722229482060">दायां क्लिक करें</translation>
 <translation id="3271554781793662131">फ़ाइलें शामिल करने के लिए खोजें</translation>
-<translation id="3273040715184276344">Caps Lock बंद किया गया</translation>
 <translation id="3274634049061007184">अपने फ़ोन में मौजूद ऐप्लिकेशन देखें</translation>
 <translation id="3289364673986435196">पावर मेन्यू</translation>
 <translation id="3289544412142055976">फ़िलहाल, Linux ऐप्लिकेशन के लिए यह सुविधा उपलब्ध नहीं है</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendar में यह तारीख खोलें</translation>
 <translation id="7671610481353807627">ऐप्लिकेशन को रंग के हिसाब से क्रम में लगाया गया है</translation>
 <translation id="7672095158465655885"><ph name="NAME" />, <ph name="SUBTEXT" /> से कनेक्ट किया गया</translation>
-<translation id="7680417644536099065">Caps Lock चालू किया गया</translation>
 <translation id="7682351277038250258">क्लिपबोर्ड के कॉन्टेंट को सादे टेक्स्ट के तौर पर चिपकाएं</translation>
 <translation id="7684531502177797067">कैमरा इनपुट, <ph name="CAMERA_NAME" /> पर सेट किया गया है.</translation>
 <translation id="7687172143976244806">खोलने का समय</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 55e82c3..3fd8fd6 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Želite li uključiti pristup točnoj lokaciji?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3271554781793662131">Pretražite za umetanje</translation>
-<translation id="3273040715184276344">Caps Lock isključen</translation>
 <translation id="3274634049061007184">Prikaz aplikacija telefona</translation>
 <translation id="3289364673986435196">Izbornik tipke za uključivanje</translation>
 <translation id="3289544412142055976">Linux aplikacije trenutačno nisu podržane</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Otvorite ovaj datum u Google kalendaru</translation>
 <translation id="7671610481353807627">Aplikacije su poredane po boji</translation>
 <translation id="7672095158465655885">Povezano s: <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock uključen</translation>
 <translation id="7682351277038250258">Lijepljenje sadržaja iz međuspremnika kao običnog teksta</translation>
 <translation id="7684531502177797067">Unos kamerom postavljen je na kameru <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Otvorili ste</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index a891b6e..8908ee0 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Bekapcsolja a pontos helyhez való hozzáférést?</translation>
 <translation id="3269597722229482060">Kattintás jobb egérgombbal</translation>
 <translation id="3271554781793662131">Keressen a beszúráshoz</translation>
-<translation id="3273040715184276344">Caps Lock kikapcsolva</translation>
 <translation id="3274634049061007184">A telefon alkalmazásainak megtekintése</translation>
 <translation id="3289364673986435196">Bekapcsológombhoz tartozó menü</translation>
 <translation id="3289544412142055976">A Linux-alkalmazások jelenleg nem támogatottak.</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Ennek a napnak a megnyitása a Google Naptárban</translation>
 <translation id="7671610481353807627">Az alkalmazások szín szerint rendezettek</translation>
 <translation id="7672095158465655885">Csatlakozva <ph name="NAME" /> hálózathoz, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock bekapcsolva</translation>
 <translation id="7682351277038250258">Tartalom beillesztése a vágólapról egyszerű szövegként</translation>
 <translation id="7684531502177797067">Kamerás bevitel a következőre állítva: <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Megnyitotta a fájlt</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index 61c2813..4816e71b 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Միացնե՞լ ճշգրիտ տեղորոշումը</translation>
 <translation id="3269597722229482060">Աջ սեղմում</translation>
 <translation id="3271554781793662131">Որոնեք զետեղելու համար</translation>
-<translation id="3273040715184276344">Caps Lock-ն անջատված է</translation>
 <translation id="3274634049061007184">Դիտել հեռախոսի հավելվածները</translation>
 <translation id="3289364673986435196">Սնուցման կոճակի ընտրացանկ</translation>
 <translation id="3289544412142055976">Լինուքսի հավելվածները ներկայումս չեն աջակցվում</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Բացել այս ամսաթիվը Google Օրացույցում</translation>
 <translation id="7671610481353807627">Հավելվածները դասավորված են ըստ գույնի</translation>
 <translation id="7672095158465655885">Միացած է <ph name="NAME" /> ցանցին, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock-ը միացված է</translation>
 <translation id="7682351277038250258">Տեղադրել բովանդակությունը սեղմատախտակից որպես սովորական տեքստ</translation>
 <translation id="7684531502177797067">Օգտագործվում է «<ph name="CAMERA_NAME" />» տեսախցիկը։</translation>
 <translation id="7687172143976244806">Դուք եք բացել</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 830258b..fd7b78e 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Aktifkan akses lokasi presisi?</translation>
 <translation id="3269597722229482060">Klik Kanan</translation>
 <translation id="3271554781793662131">Telusuri untuk menyisipkan</translation>
-<translation id="3273040715184276344">Caps Lock nonaktif</translation>
 <translation id="3274634049061007184">Lihat aplikasi ponsel Anda</translation>
 <translation id="3289364673986435196">Menu daya</translation>
 <translation id="3289544412142055976">Aplikasi Linux saat ini tidak didukung</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">Gunakan template</translation>
 <translation id="5986723678596105470">Bergabung dengan Google Meet</translation>
 <translation id="598882571027504733">Untuk mendapatkan update, nyalakan ulang Chromebook dengan keyboard dalam keadaan terhubung.</translation>
+<translation id="5990992855591814753">Lakukan kegiatan dengan playlist untuk berfokus yang dipersonalisasi. Dapatkan YouTube Music dan YouTube bebas iklan dengan 3 bulan YouTube Premium tanpa biaya. Persyaratan berlaku.</translation>
 <translation id="5998374579424866922">Nonaktifkan kontrol game</translation>
 <translation id="6000279412553873020">Kunci, tombol, dan lainnya</translation>
 <translation id="6012623610530968780">Halaman <ph name="SELECTED_PAGE" /> dari <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1952,7 +1952,6 @@
 <translation id="7670953955701272011">Buka tanggal ini di Google Kalender</translation>
 <translation id="7671610481353807627">Aplikasi diurutkan menurut warna</translation>
 <translation id="7672095158465655885">Terhubung ke <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock aktif</translation>
 <translation id="7682351277038250258">Tempelkan konten dari papan klip dalam bentuk teks biasa</translation>
 <translation id="7684531502177797067">Input kamera disetel ke <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Dibuka oleh Anda</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb
index 058a4b64c..c604bf7 100644
--- a/ash/strings/ash_strings_is.xtb
+++ b/ash/strings/ash_strings_is.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Kveikja á aðgangi að nákvæmri staðsetningu?</translation>
 <translation id="3269597722229482060">Hægrismella</translation>
 <translation id="3271554781793662131">Leita til að setja inn</translation>
-<translation id="3273040715184276344">Slökkt á hástafalás</translation>
 <translation id="3274634049061007184">Skoða forrit símans</translation>
 <translation id="3289364673986435196">Aflrofavalmynd</translation>
 <translation id="3289544412142055976">Linux-forrit eru ekki studd eins og er</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Opna þessa dagsetningu í Google dagatali</translation>
 <translation id="7671610481353807627">Forritum er raðað eftir lit</translation>
 <translation id="7672095158465655885">Tengdist við <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Kveikt á hástafalás</translation>
 <translation id="7682351277038250258">Líma efni af klippiborði inn sem ósniðinn texta</translation>
 <translation id="7684531502177797067">Myndalestur stilltur á <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Þú opnaðir</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 5db8b1eb..229bae6 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vuoi attivare l'accesso alla posizione esatta?</translation>
 <translation id="3269597722229482060">Clic con il pulsante destro</translation>
 <translation id="3271554781793662131">Cerca per inserire</translation>
-<translation id="3273040715184276344">Bloc Maiusc off</translation>
 <translation id="3274634049061007184">Visualizza le app dello smartphone</translation>
 <translation id="3289364673986435196">Menu del tasto di accensione</translation>
 <translation id="3289544412142055976">Al momento le app Linux non sono supportate</translation>
@@ -1950,7 +1949,6 @@
 <translation id="7670953955701272011">Apri questa data in Google Calendar</translation>
 <translation id="7671610481353807627">Le app sono ordinate per colore</translation>
 <translation id="7672095158465655885">Connessione a <ph name="NAME" /> stabilita, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Bloc Maiusc on</translation>
 <translation id="7682351277038250258">Incolla i contenuti dagli appunti come testo normale</translation>
 <translation id="7684531502177797067">Dati fotocamera impostati su <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Aperto da te</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 9909eb4..ef9402d4 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">להפעיל את הגישה למיקום המדויק?</translation>
 <translation id="3269597722229482060">לחיצה ימנית</translation>
 <translation id="3271554781793662131">אפשר לחפש כדי להוסיף</translation>
-<translation id="3273040715184276344">‏מקש Caps Lock מושבת</translation>
 <translation id="3274634049061007184">הצגת האפליקציות שבטלפון</translation>
 <translation id="3289364673986435196">תפריט ההפעלה</translation>
 <translation id="3289544412142055976">‏בשלב הזה, אין תמיכה באפליקציות Linux</translation>
@@ -1954,7 +1953,6 @@
 <translation id="7670953955701272011">‏פתיחת התאריך הזה ביומן Google</translation>
 <translation id="7671610481353807627">האפליקציות ממוינות לפי צבע</translation>
 <translation id="7672095158465655885">מחובר אל <ph name="NAME" />,‏ <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">‏מקש Caps Lock מופעל</translation>
 <translation id="7682351277038250258">הדבקת התוכן מהלוח כטקסט פשוט</translation>
 <translation id="7684531502177797067">הקלט של המצלמה מוגדר בתור <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">נפתח על ידך</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index b283d36..93a3bc7 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">正確な位置情報へのアクセスをオンにしますか?</translation>
 <translation id="3269597722229482060">右クリック</translation>
 <translation id="3271554781793662131">検索して挿入</translation>
-<translation id="3273040715184276344">CapsLock オフ</translation>
 <translation id="3274634049061007184">スマートフォンのアプリを表示する</translation>
 <translation id="3289364673986435196">電源ボタン メニュー</translation>
 <translation id="3289544412142055976">Linux アプリは現在サポートされていません</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">テンプレートを使用</translation>
 <translation id="5986723678596105470">Google Meet に参加する</translation>
 <translation id="598882571027504733">アップデートを取得するには、キーボードを接続した状態で Chromebook を再起動してください。</translation>
+<translation id="5990992855591814753">自分専用のフォーカス モード プレイリストで集中力を高めましょう。YouTube Music と YouTube を広告なしで利用できる YouTube Premium を 3 か月間無料でお試しいただけます。利用規約が適用されます。</translation>
 <translation id="5998374579424866922">ゲーム操作キーをオフにする</translation>
 <translation id="6000279412553873020">キー、ボタンなど</translation>
 <translation id="6012623610530968780"><ph name="SELECTED_PAGE" /> / <ph name="TOTAL_PAGE_NUM" /> ページ</translation>
@@ -1953,7 +1953,6 @@
 <translation id="7670953955701272011">この日を Google カレンダーで開きます</translation>
 <translation id="7671610481353807627">アプリは色で並べ替えられています</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> に接続しました。<ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">CapsLock オン</translation>
 <translation id="7682351277038250258">クリップボードの内容をプレーン テキストとして貼り付ける</translation>
 <translation id="7684531502177797067">カメラ入力を <ph name="CAMERA_NAME" /> に設定しました。</translation>
 <translation id="7687172143976244806">最終閲覧</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index 62623c6f..d21ffc4 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">გსურთ, ზუსტ მდებარეობაზე წვდომის ჩართვა?</translation>
 <translation id="3269597722229482060">მარჯვენა დაწკაპუნება</translation>
 <translation id="3271554781793662131">ჩასასმელად მოიძიეთ</translation>
-<translation id="3273040715184276344">Caps Lock გამორთულია</translation>
 <translation id="3274634049061007184">თქვენი ტელეფონის აპების ნახვა</translation>
 <translation id="3289364673986435196">ჩართვის მენიუ</translation>
 <translation id="3289544412142055976">Linux აპები ამჟამად მხარდაუჭერელია</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">ამ თარიღის Google Calendar-ში გახსნა</translation>
 <translation id="7671610481353807627">აპები დალაგებულია ფერის მიხედვით</translation>
 <translation id="7672095158465655885">დაკავშირებულია <ph name="NAME" />-თან, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ჩართულია</translation>
 <translation id="7682351277038250258">გაცვლის ბუფერში არსებული კონტენტის ჩასმა ჩვეულებრივი ტექსტის სახით</translation>
 <translation id="7684531502177797067">კამერის შემავალ სიგნალად დაყენებულია <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">თქვენ გახსენით</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 1599229..02bb745 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Нақты геодеректі пайдалану мүмкіндігін қосу керек пе?</translation>
 <translation id="3269597722229482060">Тінтуірдің оң жақ түймесін басу</translation>
 <translation id="3271554781793662131">Енгізу үшін іздеңіз</translation>
-<translation id="3273040715184276344">Caps Lock өшірулі.</translation>
 <translation id="3274634049061007184">Телефондағы қолданбаларды көру</translation>
 <translation id="3289364673986435196">Қуат мәзірі</translation>
 <translation id="3289544412142055976">Linux қолданбаларына қазір қолдау көрсетілмейді.</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Google Calendar қолданбасында осы күнді ашу</translation>
 <translation id="7671610481353807627">Қолданбалар түсі бойынша сұрыпталған.</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> құрылғысына жалғанған, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock қосулы.</translation>
 <translation id="7682351277038250258">Мазмұнды буферден қарапайым мәтін ретінде қою</translation>
 <translation id="7684531502177797067">Камера кірісі <ph name="CAMERA_NAME" /> деп өзгертілді.</translation>
 <translation id="7687172143976244806">Сіз аштыңыз</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index c01b8d0..67fe959 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">បើក​សិទ្ធិចូលប្រើប្រាស់ទីតាំងជាក់លាក់​ឬ?</translation>
 <translation id="3269597722229482060">ចុចកណ្ដុរខាងស្ដាំ</translation>
 <translation id="3271554781793662131">ស្វែងរកដើម្បីបញ្ចូល</translation>
-<translation id="3273040715184276344">Caps Lock ត្រូវបានបិទ</translation>
 <translation id="3274634049061007184">មើល​កម្មវិធី​លើ​ទូរសព្ទ​របស់​អ្នក</translation>
 <translation id="3289364673986435196">ម៉ឺនុយ​ថាមពល</translation>
 <translation id="3289544412142055976">បច្ចុប្បន្ន មិនអាចប្រើកម្មវិធី Linux បានទេ</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">បើកកាលបរិច្ឆេទនេះនៅក្នុង Google ប្រតិទិន</translation>
 <translation id="7671610481353807627">កម្មវិធីត្រូវបាន​តម្រៀបតាមពណ៌</translation>
 <translation id="7672095158465655885">បានភ្ជាប់ជាមួយ <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ត្រូវបានបើក</translation>
 <translation id="7682351277038250258">ដាក់​ខ្លឹមសារ​ពីឃ្លីបបត​​ចូល​ជាអក្សរ​​ធម្មតា</translation>
 <translation id="7684531502177797067">បានកំណត់​ការបញ្ចូលពី​កាមេរ៉ាទៅ <ph name="CAMERA_NAME" />។</translation>
 <translation id="7687172143976244806">អ្នក​បាន​បើក</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index bf5d1d8b..571645d 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">ನಿಖರವಾದ ಸ್ಥಳ ಪ್ರವೇಶವನ್ನು ಆನ್ ಮಾಡಬೇಕೆ?</translation>
 <translation id="3269597722229482060">ಬಲ-ಕ್ಲಿಕ್</translation>
 <translation id="3271554781793662131">ಸೇರಿಸುವುದಕ್ಕಾಗಿ ಹುಡುಕಿ</translation>
-<translation id="3273040715184276344">Caps Lock ಆಫ್ ಆಗಿದೆ</translation>
 <translation id="3274634049061007184">ನಿಮ್ಮ ಫೋನ್‌ನ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ</translation>
 <translation id="3289364673986435196">ಪವರ್ ಮೆನು</translation>
 <translation id="3289544412142055976">Linux ಆ್ಯಪ್‌ಗಳು ಪ್ರಸ್ತುತ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendar ನಲ್ಲಿ ಈ ದಿನಾಂಕವನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="7671610481353807627">ಆ್ಯಪ್‌ಗಳನ್ನು ಬಣ್ಣದಿಂದ ವಿಂಗಡಿಸಲಾಗಿದೆ</translation>
 <translation id="7672095158465655885"><ph name="NAME" />, <ph name="SUBTEXT" /> ಗೆ ಕನೆಕ್ಟ್ ಆಗಿದೆ</translation>
-<translation id="7680417644536099065">Caps Lock ಆನ್ ಆಗಿದೆ</translation>
 <translation id="7682351277038250258">ಸರಳ ಪಠ್ಯದಂತೆ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಿಂದ ವಿಷಯವನ್ನು ಅಂಟಿಸಿ</translation>
 <translation id="7684531502177797067">ಕ್ಯಾಮರಾ ಇನ್‌ಪುಟ್ ಅನ್ನು <ph name="CAMERA_NAME" /> ಗೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="7687172143976244806">ನೀವು ತೆರೆದಿದ್ದೀರಿ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index 87394fc..f9ad5bf 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">정확한 위치 액세스를 사용 설정하시겠습니까?</translation>
 <translation id="3269597722229482060">마우스 오른쪽 버튼 클릭</translation>
 <translation id="3271554781793662131">검색하여 삽입</translation>
-<translation id="3273040715184276344">Caps Lock 꺼짐</translation>
 <translation id="3274634049061007184">휴대전화의 앱 보기</translation>
 <translation id="3289364673986435196">전원 메뉴</translation>
 <translation id="3289544412142055976">Linux 앱은 현재 지원되지 않습니다.</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendar에서 이 날짜를 엽니다.</translation>
 <translation id="7671610481353807627">앱이 색상별로 정렬됩니다.</translation>
 <translation id="7672095158465655885"><ph name="NAME" />에 연결됨, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock 켜짐</translation>
 <translation id="7682351277038250258">클립보드의 콘텐츠를 일반 텍스트로 붙여넣기</translation>
 <translation id="7684531502177797067">카메라 입력이 <ph name="CAMERA_NAME" /> 카메라로 설정되었습니다.</translation>
 <translation id="7687172143976244806">내가 열어봄</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 5d0d266..8378ff7 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Так даректи аныктоону күйгүзөсүзбү?</translation>
 <translation id="3269597722229482060">Оң баскычын чыкылдатуу</translation>
 <translation id="3271554781793662131">Киргизүү үчүн издеңиз</translation>
-<translation id="3273040715184276344">Caps Lock өчүк</translation>
 <translation id="3274634049061007184">Телефонуңуздагы колдонмолорду көрүү</translation>
 <translation id="3289364673986435196">Кубат баскычынын менюсу</translation>
 <translation id="3289544412142055976">Учурда Linux колдонмолору колдоого алынбайт</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Бул күндү Google Жылнаамада ачуу</translation>
 <translation id="7671610481353807627">Колдонмолор түсү боюнча иргелет</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> тармагына туташып турат, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock күйүк</translation>
 <translation id="7682351277038250258">Алмашуу буфериндеги мазмунду жөнөкөй текст катары чаптоо</translation>
 <translation id="7684531502177797067"><ph name="CAMERA_NAME" /> камерадан киргизүү үчүн тандалды.</translation>
 <translation id="7687172143976244806">Ачтыңыз</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 1738e6bf..6b9f846 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">ເປີດສິດເຂົ້າເຖິງສະຖານທີ່ແບບລະອຽດບໍ?</translation>
 <translation id="3269597722229482060">ຄລິກຂວາ</translation>
 <translation id="3271554781793662131">ຊອກຫາເພື່ອແຊກ</translation>
-<translation id="3273040715184276344">ປິດ Caps Lock</translation>
 <translation id="3274634049061007184">ເບິ່ງແອັບຂອງໂທລະສັບທ່ານ</translation>
 <translation id="3289364673986435196">ເມນູເປີດປິດ</translation>
 <translation id="3289544412142055976">ຕອນນີ້ບໍ່ຮອງຮັບແອັບ Linux ເທື່ອ</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">ເປີດວັນທີນີ້ໃນ Google ປະຕິທິນ</translation>
 <translation id="7671610481353807627">ແອັບແມ່ນຈັດຮຽງຕາມສີ</translation>
 <translation id="7672095158465655885">ເຊື່ອມຕໍ່ຫາ <ph name="NAME" /> ແລ້ວ, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">ເປີດ Caps Lock</translation>
 <translation id="7682351277038250258">ວາງເນື້ອຫາຈາກຄລິບບອດເປັນຂໍ້ຄວາມທຳມະດາ</translation>
 <translation id="7684531502177797067">ຕັ້ງການປ້ອນຂໍ້ມູນຈາກກ້ອງຖ່າຍຮູບເປັນ <ph name="CAMERA_NAME" /> ແລ້ວ.</translation>
 <translation id="7687172143976244806">ທ່ານໄດ້ເປີດ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 9e3cb1c..1df5497 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Įjungti prieigą prie tikslios vietovės?</translation>
 <translation id="3269597722229482060">Spustelėti dešiniuoju klavišu</translation>
 <translation id="3271554781793662131">Ieškokite, jei norite įterpti</translation>
-<translation id="3273040715184276344">Didžiųjų raidžių režimas išjungtas</translation>
 <translation id="3274634049061007184">Peržiūrėkite telefono programas</translation>
 <translation id="3289364673986435196">Įjungimo meniu</translation>
 <translation id="3289544412142055976">„Linux“ programos šiuo metu nepalaikomos</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">Naudoti šabloną</translation>
 <translation id="5986723678596105470">Prisijungti prie „Google Meet“</translation>
 <translation id="598882571027504733">Kad gautumėte naujinį, iš naujo paleiskite „Chromebook“ su prijungta klaviatūra.</translation>
+<translation id="5990992855591814753">Naudokite suasmenintus grojaraščius, padedančius sutelkti dėmesį. Gaukite „YouTube Music“ ir „YouTube“ be skelbimų ir 3 mėnesius naudokitės „YouTube Premium“ be piniginio mokėjimo. Yra sąlygų.</translation>
 <translation id="5998374579424866922">Išjungti žaidimų valdiklius</translation>
 <translation id="6000279412553873020">Klavišai, mygtukai ir kt.</translation>
 <translation id="6012623610530968780"><ph name="SELECTED_PAGE" /> psl. iš <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1952,7 +1952,6 @@
 <translation id="7670953955701272011">Atidaryti šią datą „Google“ kalendoriuje</translation>
 <translation id="7671610481353807627">Programos rūšiuojamos pagal spalvą</translation>
 <translation id="7672095158465655885">Prisijungta prie „<ph name="NAME" />“, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Didžiųjų raidžių režimas įjungtas</translation>
 <translation id="7682351277038250258">Įklijuoti turinį iš iškarpinės kaip grynąjį tekstą</translation>
 <translation id="7684531502177797067">Fotoaparato įvestis nustatyta kaip <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Jūs atidarėte</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 6465b09..e958cdb 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vai ieslēgt piekļuvi precīzai atrašanās vietai?</translation>
 <translation id="3269597722229482060">Noklikšķināt ar peles labo pogu</translation>
 <translation id="3271554781793662131">Meklēt, lai ievietotu</translation>
-<translation id="3273040715184276344">Burtslēga taustiņš ir izslēgts</translation>
 <translation id="3274634049061007184">Skatīt tālruņa lietotnes</translation>
 <translation id="3289364673986435196">Barošanas izvēlne</translation>
 <translation id="3289544412142055976">Linux lietotnes pašlaik netiek atbalstītas.</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Atvērt šo datumu Google kalendārā</translation>
 <translation id="7671610481353807627">Lietotnes ir kārtotas pēc krāsas</translation>
 <translation id="7672095158465655885">Izveidots savienojums ar tīklu <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Burtslēga taustiņš ir ieslēgts</translation>
 <translation id="7682351277038250258">Ielīmēt saturu no starpliktuves kā vienkāršu tekstu</translation>
 <translation id="7684531502177797067">Kameras ievadei iestatīta kamera <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Jūs atvērāt</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index 47495df..1d91dab 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Дали да се вклучи пристап до прецизна локација?</translation>
 <translation id="3269597722229482060">Десен клик</translation>
 <translation id="3271554781793662131">Пребарајте за да вметнете</translation>
-<translation id="3273040715184276344">Caps Lock е исклучено</translation>
 <translation id="3274634049061007184">Прегледајте ги апликациите на телефонот</translation>
 <translation id="3289364673986435196">Мени на копчето за вклучување</translation>
 <translation id="3289544412142055976">Апликациите на Linux не се поддржани во моментов</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Отворете го датумов во „Календарот на Google“</translation>
 <translation id="7671610481353807627">Апликациите се подредени по боја</translation>
 <translation id="7672095158465655885">Поврзано со <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock е вклучено</translation>
 <translation id="7682351277038250258">Ги лепи содржините од привремената меморија како обичен текст</translation>
 <translation id="7684531502177797067">Влезот на камерата е поставен на <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Вие отворивте</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index a6c27de1..a3321e2 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">കൃത്യമായ ലൊക്കേഷൻ ആക്‌സസ് ഓണാക്കണോ?</translation>
 <translation id="3269597722229482060">വലത് ക്ലിക്ക്</translation>
 <translation id="3271554781793662131">ഉൾപ്പെടുത്താൻ, തിരയുക</translation>
-<translation id="3273040715184276344">ക്യാപ്‌സ് ലോക്ക് ഓഫാണ്</translation>
 <translation id="3274634049061007184">നിങ്ങളുടെ ഫോണിലെ ആപ്പുകൾ കാണുക</translation>
 <translation id="3289364673986435196">പവർ മെനു</translation>
 <translation id="3289544412142055976">Linux ആപ്പുകൾക്ക് നിലവിൽ പിന്തുണയില്ല</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google Calendar-ൽ ഈ തീയതി തുറക്കുക</translation>
 <translation id="7671610481353807627">നിറം അനുസരിച്ച് ആപ്പുകൾ അടുക്കിയിരിക്കുന്നു</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> എന്നതിലേക്ക് കണക്റ്റ് ചെയ്‌തു, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">ക്യാപ്‌സ് ലോക്ക് ഓണാണ്</translation>
 <translation id="7682351277038250258">ക്ലിപ്‌ബോർഡിൽ നിന്നുള്ള ഉള്ളടക്കം പ്ലെയിൻ ടെക്‌സ്റ്റ് ആയി ഒട്ടിക്കുക</translation>
 <translation id="7684531502177797067">ക്യാമറാ ഇൻപുട്ട് ആയി <ph name="CAMERA_NAME" /> സജ്ജീകരിച്ചു.</translation>
 <translation id="7687172143976244806">നിങ്ങൾ തുറന്നത്</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index 081fc51..c4d0aa5 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Нарийвчилсан байршлын хандалтыг асаах уу?</translation>
 <translation id="3269597722229482060">Баруун талыг товших</translation>
 <translation id="3271554781793662131">Оруулахын тулд хайх</translation>
-<translation id="3273040715184276344">Caps Lock унтраалттай байна</translation>
 <translation id="3274634049061007184">Утасныхаа аппуудыг харах</translation>
 <translation id="3289364673986435196">Асаах/унтраах цэс</translation>
 <translation id="3289544412142055976">Linux аппуудыг одоогоор дэмждэггүй</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Энэ огноог Google Календарьт нээнэ үү</translation>
 <translation id="7671610481353807627">Аппуудыг өнгөөр эрэмбэлсэн</translation>
 <translation id="7672095158465655885"><ph name="NAME" />-д холбогдсон, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock асаалттай байна</translation>
 <translation id="7682351277038250258">Түр санах ойгоос контентыг энгийн бичвэрээр буулгах</translation>
 <translation id="7684531502177797067">Камерын өгөгдлийг <ph name="CAMERA_NAME" /> болгож тохируулсан.</translation>
 <translation id="7687172143976244806">Та нээсэн</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 99e12fb..9a93a67 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">अचूक स्थान अ‍ॅक्सेस सुरू करायचा आहे करा?</translation>
 <translation id="3269597722229482060">राइट क्लिक</translation>
 <translation id="3271554781793662131">घालण्यासाठी शोधा</translation>
-<translation id="3273040715184276344">कॅप्स लॉक बंद आहे</translation>
 <translation id="3274634049061007184">तुमच्या फोनमधील ॲप्स पहा</translation>
 <translation id="3289364673986435196">पॉवर मेनू</translation>
 <translation id="3289544412142055976">Linux ॲप्सना सध्या सपोर्ट नाही</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Google Calendar यामध्ये ही तारीख उघडा</translation>
 <translation id="7671610481353807627">अ‍ॅप्स रंगानुसार क्रमाने लावली जातात</translation>
 <translation id="7672095158465655885"><ph name="NAME" />, <ph name="SUBTEXT" /> शी कनेक्ट केलेले</translation>
-<translation id="7680417644536099065">कॅप्स लॉक सुरू आहे</translation>
 <translation id="7682351277038250258">साधा मजकूर म्हणून क्लिपबोर्डवरून आशय पेस्ट करा</translation>
 <translation id="7684531502177797067">कॅमेरा इनपुट हे <ph name="CAMERA_NAME" /> वर सेट केले आहे.</translation>
 <translation id="7687172143976244806">तुम्ही उघडली आहे</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index 94141bfd..f087053f 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Hidupkan akses lokasi tepat?</translation>
 <translation id="3269597722229482060">Klik Kanan</translation>
 <translation id="3271554781793662131">Cari untuk disisipkan</translation>
-<translation id="3273040715184276344">Kunci Huruf Besar dimatikan</translation>
 <translation id="3274634049061007184">Lihat apl telefon anda</translation>
 <translation id="3289364673986435196">Menu kuasa</translation>
 <translation id="3289544412142055976">Apl Linux tidak disokong pada masa ini</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Buka tarikh ini dalam Google Calendar</translation>
 <translation id="7671610481353807627">Apl diisih mengikut warna</translation>
 <translation id="7672095158465655885">Disambungkan kepada <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Kunci Huruf Besar dihidupkan</translation>
 <translation id="7682351277038250258">Tampalkan kandungan daripada papan keratan sebagai teks biasa</translation>
 <translation id="7684531502177797067">Input kamera ditetapkan kepada <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Anda buka</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 01587b9f..dcb7710 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">နေရာအတိအကျ သုံးခွင့် ဖွင့်မလား။</translation>
 <translation id="3269597722229482060">ညာဘက်ခလုတ်ကို နှိပ်ရန်</translation>
 <translation id="3271554781793662131">ထည့်ရန်အတွက် ရှာရန်</translation>
-<translation id="3273040715184276344">စာလုံးကြီးခလုတ် ပိတ်ထားသည်</translation>
 <translation id="3274634049061007184">သင့်ဖုန်းရှိ အက်ပ်များကို ကြည့်ရန်</translation>
 <translation id="3289364673986435196">ပါဝါမီနူး</translation>
 <translation id="3289544412142055976">Linux အက်ပ်များကို လောလောဆယ် ပံ့ပိုးမထားပါ</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Google Calendar တွင် ဤရက်စွဲကို ဖွင့်နိုင်သည်</translation>
 <translation id="7671610481353807627">အက်ပ်များကို အရောင်ဖြင့်စီထားသည်</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> နှင့် ချိတ်ဆက်ထားသည်၊ <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">စာလုံးကြီးခလုတ် ဖွင့်ထားသည်</translation>
 <translation id="7682351277038250258">ကလစ်ဘုတ်ပေါ်ရှိ အကြောင်းအရာကို စာသားသီးသန့်အဖြစ် ကူးထည့်ရန်</translation>
 <translation id="7684531502177797067">ကင်မရာသုံးခြင်းကို <ph name="CAMERA_NAME" /> သို့ သတ်မှတ်လိုက်သည်။</translation>
 <translation id="7687172143976244806">သင်က ဖွင့်ထားသည်</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index 0f9d664..1f5acbfe 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">सटीक लोकेसन प्रयोग गर्ने अनुमति दिने हो?</translation>
 <translation id="3269597722229482060">दायाँ क्लिक गर्नुहोस्</translation>
 <translation id="3271554781793662131">हाल्न चाहेको कुरा खोज्नुहोस्</translation>
-<translation id="3273040715184276344">क्याप्स लक अफ गरियो</translation>
 <translation id="3274634049061007184">आफ्नो फोनमा भएका एपहरू हेर्नुहोस्</translation>
 <translation id="3289364673986435196">पावर मेनु</translation>
 <translation id="3289544412142055976">Linux एपहरू हाल प्रयोग गर्न मिल्दैन</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Google पात्रोमा यो मिति खोल्नुहोस्</translation>
 <translation id="7671610481353807627">एपहरू रङअनुसार क्रमबद्ध गरिन्छन्</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> मा कनेक्ट गरिएको छ, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">क्याप्स लक अन गरियो</translation>
 <translation id="7682351277038250258">क्लिपबोर्डमा भएको सामग्रीलाई प्लेन टेक्स्टका रूपमा पेस्ट गर्नुहोस्</translation>
 <translation id="7684531502177797067"><ph name="CAMERA_NAME" /> लाई क्यामेरा इनपुटका रूपमा सेट गरियो।</translation>
 <translation id="7687172143976244806">तपाईंले खोल्नुभएको</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 7971390..17ba52a 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Toegang tot exacte locatie aanzetten?</translation>
 <translation id="3269597722229482060">Klikken met rechtermuisknop</translation>
 <translation id="3271554781793662131">Zoeken om in te voegen</translation>
-<translation id="3273040715184276344">Caps Lock uit</translation>
 <translation id="3274634049061007184">Apps van je telefoon bekijken</translation>
 <translation id="3289364673986435196">Aan/uit-menu</translation>
 <translation id="3289544412142055976">Linux-apps worden momenteel niet ondersteund</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Deze datum openen in Google Agenda</translation>
 <translation id="7671610481353807627">Apps zijn gesorteerd op kleur</translation>
 <translation id="7672095158465655885">Verbonden met <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock aan</translation>
 <translation id="7682351277038250258">Content vanaf klembord plakken als platte tekst</translation>
 <translation id="7684531502177797067">Camera-invoer ingesteld op <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Geopend door jou</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 2d1457b..a106c70 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vil du slå på nøyaktig posisjonstilgang?</translation>
 <translation id="3269597722229482060">Høyreklikk</translation>
 <translation id="3271554781793662131">Søk for å sette inn</translation>
-<translation id="3273040715184276344">Caps Lock er av</translation>
 <translation id="3274634049061007184">Se apper fra telefonen din</translation>
 <translation id="3289364673986435196">På/av-meny</translation>
 <translation id="3289544412142055976">Linux-apper støttes ikke for øyeblikket</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Åpne denne datoen i Google Kalender</translation>
 <translation id="7671610481353807627">Appene er sortert etter farge</translation>
 <translation id="7672095158465655885">Koblet til <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock er på</translation>
 <translation id="7682351277038250258">Lim inn innhold fra utklippstavlen som ren tekst</translation>
 <translation id="7684531502177797067">Kamerakilden er satt til <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Du åpnet</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index b648e1f..8deb6c9 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">ସଠିକ ଲୋକେସନ ଆକ୍ସେସକୁ ଚାଲୁ କରିବେ?</translation>
 <translation id="3269597722229482060">ଡାହାଣ କ୍ଲିକ୍ କରନ୍ତୁ</translation>
 <translation id="3271554781793662131">ଇନସାର୍ଟ କରିବା ପାଇଁ ସର୍ଚ୍ଚ କରନ୍ତୁ</translation>
-<translation id="3273040715184276344">Caps Lock ବନ୍ଦ ଅଛି</translation>
 <translation id="3274634049061007184">ଆପଣଙ୍କ ଫୋନର ଆପ୍ସକୁ ଭ୍ୟୁ କରନ୍ତୁ</translation>
 <translation id="3289364673986435196">ପାୱାର ମେନୁ</translation>
 <translation id="3289544412142055976">Linux ଆପ୍ସ ବର୍ତ୍ତମାନ ସମର୍ଥିତ ନୁହେଁ</translation>
@@ -1951,7 +1950,6 @@
 <translation id="7670953955701272011">Google Calendarରେ ଏହି ତାରିଖ ଖୋଲନ୍ତୁ</translation>
 <translation id="7671610481353807627">ଆପଗୁଡ଼ିକୁ ରଙ୍ଗ ଅନୁସାରେ ସର୍ଟ କରାଯାଇଛି</translation>
 <translation id="7672095158465655885"><ph name="NAME" />, <ph name="SUBTEXT" /> ସହ କନେକ୍ଟ କରାଯାଇଛି</translation>
-<translation id="7680417644536099065">Caps Lock ଚାଲୁ ଅଛି</translation>
 <translation id="7682351277038250258">ପ୍ଲେନ ଟେକ୍ସଟ ପରି କ୍ଲିପବୋର୍ଡରୁ ବିଷୟବସ୍ତୁ ପେଷ୍ଟ କରନ୍ତୁ</translation>
 <translation id="7684531502177797067">କ୍ୟାମେରା ଇନପୁଟ <ph name="CAMERA_NAME" />ରେ ସେଟ ହୋଇଛି।</translation>
 <translation id="7687172143976244806">ଆପଣ ଖୋଲିଛନ୍ତି</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index 12532aa..295c02b 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">ਕੀ ਸਹੀ ਟਿਕਾਣੇ ਦੀ ਪਹੁੰਚ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਹੈ?</translation>
 <translation id="3269597722229482060">ਸੱਜਾ-ਕਲਿੱਕ</translation>
 <translation id="3271554781793662131">ਦਾਖਲ ਕਰਨ ਲਈ ਖੋਜੋ</translation>
-<translation id="3273040715184276344">Caps Lock ਬੰਦ ਹੈ</translation>
 <translation id="3274634049061007184">ਆਪਣੇ ਫ਼ੋਨ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਦੇਖੋ</translation>
 <translation id="3289364673986435196">ਪਾਵਰ ਮੀਨੂ</translation>
 <translation id="3289544412142055976">Linux ਐਪਾਂ ਫ਼ਿਲਹਾਲ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ</translation>
@@ -1954,7 +1953,6 @@
 <translation id="7670953955701272011">Google Calendar ਵਿੱਚ ਇਹ ਤਾਰੀਖ ਖੋਲ੍ਹੋ</translation>
 <translation id="7671610481353807627">ਐਪਾਂ ਨੂੰ ਰੰਗ ਮੁਤਾਬਕ ਕ੍ਰਮ-ਬੱਧ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ਚਾਲੂ ਹੈ</translation>
 <translation id="7682351277038250258">ਕਲਿੱਪਬੋਰਡ ਤੋਂ ਸਮੱਗਰੀ ਨੂੰ ਸਰਲ ਲਿਖਤ ਵਜੋਂ ਪੇਸਟ ਕਰੋ</translation>
 <translation id="7684531502177797067">ਕੈਮਰਾ ਇਨਪੁੱਟ <ph name="CAMERA_NAME" /> 'ਤੇ ਸੈੱਟ ਹੈ।</translation>
 <translation id="7687172143976244806">ਤੁਸੀਂ ਖੋਲ੍ਹਿਆ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 93d001eb..9e5510f2 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Włączyć dostęp do dokładnej lokalizacji?</translation>
 <translation id="3269597722229482060">Kliknij prawym</translation>
 <translation id="3271554781793662131">Wyszukaj, aby wstawić</translation>
-<translation id="3273040715184276344">Caps Lock wyłączony</translation>
 <translation id="3274634049061007184">Wyświetlaj aplikacje z telefonu</translation>
 <translation id="3289364673986435196">Menu zasilania</translation>
 <translation id="3289544412142055976">Aplikacje na Linuksa nie są obecnie obsługiwane</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Otwórz tę datę w Kalendarzu Google</translation>
 <translation id="7671610481353807627">Aplikacje są posortowane według koloru</translation>
 <translation id="7672095158465655885">Połączono z: <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock włączony</translation>
 <translation id="7682351277038250258">Wklej zawartość schowka jako zwykły tekst</translation>
 <translation id="7684531502177797067">Zmieniono kamerę. Obecnie podłączone urządzenie to <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Otwarty przez Ciebie</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index 134c846..6d65ae4 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Ativar o acesso ao local exato?</translation>
 <translation id="3269597722229482060">Clique com o botão direito do mouse</translation>
 <translation id="3271554781793662131">Pesquise para inserir</translation>
-<translation id="3273040715184276344">Caps Lock desativado</translation>
 <translation id="3274634049061007184">Visualize os apps do smartphone</translation>
 <translation id="3289364673986435196">Menu liga/desliga</translation>
 <translation id="3289544412142055976">No momento, não há suporte para os apps do Linux</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Abrir esta data no Google Agenda</translation>
 <translation id="7671610481353807627">Os apps estão ordenados por cor</translation>
 <translation id="7672095158465655885">Conectado a <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ativado</translation>
 <translation id="7682351277038250258">Colar conteúdo da área de transferência como texto simples</translation>
 <translation id="7684531502177797067">Entrada de câmera definida como <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Você abriu</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 7310bd5..8165d67 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Ativar o acesso à localização exata?</translation>
 <translation id="3269597722229482060">Clicar com o botão direito do rato</translation>
 <translation id="3271554781793662131">Pesquise para inserir</translation>
-<translation id="3273040715184276344">Caps Lock desativado</translation>
 <translation id="3274634049061007184">Veja as apps do seu telemóvel</translation>
 <translation id="3289364673986435196">Menu ligar/desligar</translation>
 <translation id="3289544412142055976">De momento, as apps para Linux não são suportadas</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Abra esta data no Calendário Google</translation>
 <translation id="7671610481353807627">As apps estão ordenadas por cor</translation>
 <translation id="7672095158465655885">Ligação estabelecida a <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock ativado</translation>
 <translation id="7682351277038250258">Colar o conteúdo da área de transferência como texto simples</translation>
 <translation id="7684531502177797067">Entrada da câmara definida como <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Aberto por si</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 66e87b5..3dc98ea 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Activezi accesul la locația exactă?</translation>
 <translation id="3269597722229482060">Clic dreapta</translation>
 <translation id="3271554781793662131">Caută pentru a insera</translation>
-<translation id="3273040715184276344">Caps Lock este dezactivat</translation>
 <translation id="3274634049061007184">Afișează aplicațiile telefonului</translation>
 <translation id="3289364673986435196">Meniul de pornire</translation>
 <translation id="3289544412142055976">Aplicațiile Linux nu sunt acceptate</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Deschide data în Google Calendar</translation>
 <translation id="7671610481353807627">Aplicațiile se sortează după culoare</translation>
 <translation id="7672095158465655885">Conectat la <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock este activat</translation>
 <translation id="7682351277038250258">Inserează conținutul din clipboard ca text simplu</translation>
 <translation id="7684531502177797067">Introducerea cu ajutorul camerei foto este setată la <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Deschis de tine</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index f3d1e7c..2124398 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Открыть доступ к данным о точном местоположении?</translation>
 <translation id="3269597722229482060">Правый клик</translation>
 <translation id="3271554781793662131">Найдите то, что хотите вставить</translation>
-<translation id="3273040715184276344">Режим Caps Lock отключен.</translation>
 <translation id="3274634049061007184">Просматривайте приложения с телефона.</translation>
 <translation id="3289364673986435196">Меню кнопки питания</translation>
 <translation id="3289544412142055976">Приложения для Linux пока не поддерживаются</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Посмотреть эту дату в Google Календаре</translation>
 <translation id="7671610481353807627">Приложения упорядочены по цвету.</translation>
 <translation id="7672095158465655885">Подключено к сети <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Режим Caps Lock включен.</translation>
 <translation id="7682351277038250258">Вставить содержимое из буфера обмена в виде обычного текста</translation>
 <translation id="7684531502177797067">Используется камера "<ph name="CAMERA_NAME" />".</translation>
 <translation id="7687172143976244806">Вы открывали</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 07395c68..f23e2b35 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">නිශ්චිත ස්ථාන ප්‍රවේශය ක්‍රියාත්මක කරන්න ද?</translation>
 <translation id="3269597722229482060">දකුණු ක්ලික් කිරීම</translation>
 <translation id="3271554781793662131">ඇතුළත් කිරීමට සොයන්න</translation>
-<translation id="3273040715184276344">මහකුරු අගුල ක්‍රියාවිරහිතයි</translation>
 <translation id="3274634049061007184">ඔබේ දුරකථනයේ යෙදුම් බලන්න</translation>
 <translation id="3289364673986435196">බල මෙනුව</translation>
 <translation id="3289544412142055976">Linux යෙදුම් දැනට සහාය නොදක්වයි</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Google දින දර්ශනය තුළ මෙම දිනය විවෘත කරන්න</translation>
 <translation id="7671610481353807627">වර්ණය අනුව යෙදුම් අනුපිළිවෙළට සකසා ඇත</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> වෙත සම්බන්ධිතයි, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">මහකුරු අගුල ක්‍රියාත්මකයි</translation>
 <translation id="7682351277038250258">සරල පෙළ ලෙස ක්ලිප්බෝඩ් වෙතින් අන්තර්ගතය අලවන්න</translation>
 <translation id="7684531502177797067">කැමරා ආදානය <ph name="CAMERA_NAME" />ට සකසා ඇත.</translation>
 <translation id="7687172143976244806">ඔබ විවෘත කළා</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index dcc997d8..c13ffba 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Chcete zapnúť prístup k presnej polohe?</translation>
 <translation id="3269597722229482060">Kliknúť pravým tlačidlom</translation>
 <translation id="3271554781793662131">Vyhľadaním vložíte</translation>
-<translation id="3273040715184276344">Caps Lock je vypnutý</translation>
 <translation id="3274634049061007184">Zobrazujte si aplikácie z telefónu</translation>
 <translation id="3289364673986435196">Ponuka vypínača</translation>
 <translation id="3289544412142055976">Aplikácie pre Linux nie sú momentálne podporované</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Otvoriť tento dátum v Kalendári Google</translation>
 <translation id="7671610481353807627">Aplikácie sú zoradené podľa farby</translation>
 <translation id="7672095158465655885">Pripojené k sieti <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock je zapnutý</translation>
 <translation id="7682351277038250258">Prilepenie obsahu zo schránky ako čistého textu</translation>
 <translation id="7684531502177797067">Pre kameru <ph name="CAMERA_NAME" /> je nastavený vstup.</translation>
 <translation id="7687172143976244806">Otvorili ste vy</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index c3848955..74af9eb06 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Želite vklopiti dostop do natančne lokacije?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3271554781793662131">Poiščite, da vstavite</translation>
-<translation id="3273040715184276344">Tipka Caps Lock je izklopljena</translation>
 <translation id="3274634049061007184">Ogled aplikacij telefona</translation>
 <translation id="3289364673986435196">Meni za vklop/izklop</translation>
 <translation id="3289544412142055976">Aplikacije za Linux trenutno niso podprte.</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Odpiranje tega datuma v Google Koledarju</translation>
 <translation id="7671610481353807627">Aplikacije so razvrščene po barvi</translation>
 <translation id="7672095158465655885">Vzpostavljena povezava z omrežjem <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Tipka Caps Lock je vklopljena</translation>
 <translation id="7682351277038250258">Lepljenje vsebine iz odložišča kot navadno besedilo</translation>
 <translation id="7684531502177797067">Vnos s fotoaparatom je nastavljen za »<ph name="CAMERA_NAME" />«.</translation>
 <translation id="7687172143976244806">Odprli ste vi</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index a60b722..4211416 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Të aktivizohet qasja te vendndodhja e saktë?</translation>
 <translation id="3269597722229482060">Kliko me butonin djathtas</translation>
 <translation id="3271554781793662131">Kërko për të futur</translation>
-<translation id="3273040715184276344">Caps Lock joaktiv</translation>
 <translation id="3274634049061007184">Shiko aplikacionet e telefonit tënd</translation>
 <translation id="3289364673986435196">Menyja e energjisë</translation>
 <translation id="3289544412142055976">Aplikacionet për Linux nuk mbështeten aktualisht</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Hape këtë datë në "Kalendarin e Google"</translation>
 <translation id="7671610481353807627">Aplikacionet janë renditur sipas ngjyrës</translation>
 <translation id="7672095158465655885">Lidhur me <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock aktiv</translation>
 <translation id="7682351277038250258">Ngjite përmbajtjen nga kujtesa e fragmenteve si tekst të thjeshtë</translation>
 <translation id="7684531502177797067">Hyrja e kamerës u caktua te <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">E ke hapur</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index bdc5f20..b637c2d 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Želite da uključite pristup preciznoj lokaciji?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3271554781793662131">Pretražite da biste umetnuli</translation>
-<translation id="3273040715184276344">Caps Lock je isključen</translation>
 <translation id="3274634049061007184">Pregledajte aplikacije na telefonu</translation>
 <translation id="3289364673986435196">Meni dugmeta za uključivanje</translation>
 <translation id="3289544412142055976">Linux aplikacije trenutno nisu podržane</translation>
@@ -1955,7 +1954,6 @@
 <translation id="7670953955701272011">Otvorite ovaj datum u Google kalendaru</translation>
 <translation id="7671610481353807627">Aplikacije su sortirane prema boji</translation>
 <translation id="7672095158465655885">Uspostavljena je veza sa: <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock je uključen</translation>
 <translation id="7682351277038250258">Nalepi sadržaj iz privremene memorije kao običan tekst</translation>
 <translation id="7684531502177797067">Unos pomoću kamere je podešen na <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Otvorili ste</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 3d8d757e..c405abf 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Желите да укључите приступ прецизној локацији?</translation>
 <translation id="3269597722229482060">Десни клик</translation>
 <translation id="3271554781793662131">Претражите да бисте уметнули</translation>
-<translation id="3273040715184276344">Caps Lock је искључен</translation>
 <translation id="3274634049061007184">Прегледајте апликације на телефону</translation>
 <translation id="3289364673986435196">Мени дугмета за укључивање</translation>
 <translation id="3289544412142055976">Linux апликације тренутно нису подржане</translation>
@@ -1955,7 +1954,6 @@
 <translation id="7670953955701272011">Отворите овај датум у Google календару</translation>
 <translation id="7671610481353807627">Апликације су сортиране према боји</translation>
 <translation id="7672095158465655885">Успостављена је веза са: <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock је укључен</translation>
 <translation id="7682351277038250258">Налепи садржај из привремене меморије као обичан текст</translation>
 <translation id="7684531502177797067">Унос помоћу камере је подешен на <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Отворили сте</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index ce893e8..4bbbfaa 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vill du aktivera exakt platsåtkomst?</translation>
 <translation id="3269597722229482060">Högerklicka</translation>
 <translation id="3271554781793662131">Sök för att infoga</translation>
-<translation id="3273040715184276344">Caps Lock har inaktiverats</translation>
 <translation id="3274634049061007184">Visa telefonens appar</translation>
 <translation id="3289364673986435196">Startmeny</translation>
 <translation id="3289544412142055976">Linux-appar stöds inte för närvarande</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Öppna det här datumet i Google Kalender</translation>
 <translation id="7671610481353807627">Apparna har sorterats efter färg</translation>
 <translation id="7672095158465655885">Ansluten till <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock har aktiverats</translation>
 <translation id="7682351277038250258">Klistra in innehållet i Urklipp som oformaterad text</translation>
 <translation id="7684531502177797067">Indata från kameran har ställts in på <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Öppnades av dig</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index b557bc84..82e1997e 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Je, ungependa kuwasha kipengele cha uwezo wa kufikia eneo mahsusi?</translation>
 <translation id="3269597722229482060">Bofya Kulia</translation>
 <translation id="3271554781793662131">Tafuta ili uweke</translation>
-<translation id="3273040715184276344">Umezima Caps Lock</translation>
 <translation id="3274634049061007184">Angalia programu za simu yako</translation>
 <translation id="3289364673986435196">Menyu ya kuzima au kuwasha</translation>
 <translation id="3289544412142055976">Programu za Linux haziwezi kutumika kwa sasa</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">Tumia kiolezo</translation>
 <translation id="5986723678596105470">Jiunge ukutumia Google Meet</translation>
 <translation id="598882571027504733">Ili upate sasisho, washa Chromebook yako upya huku kibodi ikiwa imeunganishwa.</translation>
+<translation id="5990992855591814753">Endelea kumakinika ukitumia orodha ya muziki wa kuongeza umakini, iliyowekewa mapendeleo. Pata YouTube Music na YouTube, bila matangazo, ukitumia YouTube Premium kwa miezi 3 bila malipo. Sheria na masharti yatatumika.</translation>
 <translation id="5998374579424866922">Zima vidhibiti vya mchezo</translation>
 <translation id="6000279412553873020">Vitufe, vitufe na zaidi</translation>
 <translation id="6012623610530968780">Ukurasa wa <ph name="SELECTED_PAGE" /> kati ya <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1953,7 +1953,6 @@
 <translation id="7670953955701272011">Fungua tarehe hii kwenye Kalenda ya Google</translation>
 <translation id="7671610481353807627">Programu zimepangwa kwa rangi</translation>
 <translation id="7672095158465655885">Imeunganishwa kwenye <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Umewasha Caps Lock</translation>
 <translation id="7682351277038250258">Bandika maudhui kwenye ubao wa kunakili katika muundo wa maandishi dhahiri</translation>
 <translation id="7684531502177797067">Kamera imewekwa kuwa <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Uliifungua</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 136c5ac2..b8ed5234 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">துல்லியமான இருப்பிட அணுகலை இயக்கவா?</translation>
 <translation id="3269597722229482060">வலது கிளிக்</translation>
 <translation id="3271554781793662131">சேர்க்க தேடுங்கள்</translation>
-<translation id="3273040715184276344">Caps Lock முடக்கப்பட்டுள்ளது</translation>
 <translation id="3274634049061007184">மொபைலில் உள்ள ஆப்ஸைப் பார்க்கலாம்</translation>
 <translation id="3289364673986435196">பவர் மெனு</translation>
 <translation id="3289544412142055976">Linux ஆப்ஸைத் தற்போது பயன்படுத்த முடியாது</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Google Calendarரில் இந்தத் தேதியைத் திறக்கும்</translation>
 <translation id="7671610481353807627">வண்ணத்தின்படி ஆப்ஸ் வரிசைப்படுத்தப்பட்டுள்ளன</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> உடன் இணைக்கப்பட்டது, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock இயக்கப்பட்டுள்ளது</translation>
 <translation id="7682351277038250258">கிளிப்போர்டில் உள்ள உள்ளடக்கத்தை எளிய உரையாக ஒட்டும்</translation>
 <translation id="7684531502177797067">கேமரா உள்ளீடு <ph name="CAMERA_NAME" /> என அமைக்கப்பட்டுள்ளது.</translation>
 <translation id="7687172143976244806">திறந்துள்ளீர்கள்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 41c72e34..e91f952 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">ఖచ్చితమైన లొకేషన్ యాక్సెస్‌ను ఆన్ చేయాలా?</translation>
 <translation id="3269597722229482060">కుడి క్లిక్</translation>
 <translation id="3271554781793662131">ఇన్సర్ట్ చేయడానికి సెర్చ్ చేయండి</translation>
-<translation id="3273040715184276344">Caps Lock ఆఫ్‌లో ఉంది</translation>
 <translation id="3274634049061007184">మీ ఫోన్‌లోని యాప్‌లను చూడండి</translation>
 <translation id="3289364673986435196">పవర్ మెనూ</translation>
 <translation id="3289544412142055976">ప్రస్తుతం Linux యాప్‌లు సపోర్ట్ చేయవు</translation>
@@ -1954,7 +1953,6 @@
 <translation id="7670953955701272011">Google Calendarలో ఈ తేదీని తెరవండి</translation>
 <translation id="7671610481353807627">రంగు ఆధారంగా యాప్‌లు క్రమపద్ధతిలో అమర్చబడ్డాయి</translation>
 <translation id="7672095158465655885"><ph name="NAME" />, <ph name="SUBTEXT" />కు కనెక్ట్ చేయబడింది</translation>
-<translation id="7680417644536099065">Caps Lock ఆన్‌లో ఉంది</translation>
 <translation id="7682351277038250258">క్లిప్‌బోర్డ్‌లోని కంటెంట్‌ను సాదా టెక్స్ట్‌గా పేస్ట్ చేయండి</translation>
 <translation id="7684531502177797067">కెమెరా ఇన్‌పుట్ <ph name="CAMERA_NAME" />కు సెట్ చేయబడింది.</translation>
 <translation id="7687172143976244806">మీరు తెరిచినది</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index cbf7916..45a9df90 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">เปิดการเข้าถึงตำแหน่งที่แน่นอนไหม</translation>
 <translation id="3269597722229482060">คลิกขวา</translation>
 <translation id="3271554781793662131">ค้นหาเพื่อแทรก</translation>
-<translation id="3273040715184276344">ปิด Caps Lock</translation>
 <translation id="3274634049061007184">ดูแอปของโทรศัพท์</translation>
 <translation id="3289364673986435196">เมนูเปิด/ปิด</translation>
 <translation id="3289544412142055976">ขณะนี้ยังไม่รองรับแอป Linux</translation>
@@ -1948,7 +1947,6 @@
 <translation id="7670953955701272011">เปิดวันที่นี้ใน Google ปฏิทิน</translation>
 <translation id="7671610481353807627">จัดเรียงแอปตามสีแล้ว</translation>
 <translation id="7672095158465655885">เชื่อมต่อกับ <ph name="NAME" /> แล้ว <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">เปิด Caps Lock</translation>
 <translation id="7682351277038250258">วางเนื้อหาจากคลิปบอร์ดเป็นข้อความธรรมดา</translation>
 <translation id="7684531502177797067">ตั้ง <ph name="CAMERA_NAME" /> เป็นกล้องที่ใช้ป้อนข้อมูล</translation>
 <translation id="7687172143976244806">คุณเปิดเมื่อ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 3b265d9..5e5c001 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Tam konum erişimi açılsın mı?</translation>
 <translation id="3269597722229482060">Sağ Tıkla</translation>
 <translation id="3271554781793662131">Eklemek için arama yapın</translation>
-<translation id="3273040715184276344">Caps Lock kapalı</translation>
 <translation id="3274634049061007184">Telefonunuzdaki uygulamaları görün</translation>
 <translation id="3289364673986435196">Güç menüsü</translation>
 <translation id="3289544412142055976">Linux uygulamaları şu anda desteklenmiyor</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Bu tarihi Google Takvim'de aç</translation>
 <translation id="7671610481353807627">Uygulamalar renge göre sıralandı</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> ağına bağlı, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock açık</translation>
 <translation id="7682351277038250258">Panodaki içeriği düz metin olarak yapıştır</translation>
 <translation id="7684531502177797067">Kamera girişi <ph name="CAMERA_NAME" /> olarak ayarlandı.</translation>
 <translation id="7687172143976244806">Siz açtınız</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index a5f33f6b..2e4a7c0 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Увімкнути доступ до точного місцезнаходження?</translation>
 <translation id="3269597722229482060">Натиснути правою кнопкою миші</translation>
 <translation id="3271554781793662131">Шукати, щоб вставити</translation>
-<translation id="3273040715184276344">Caps Lock вимкнено</translation>
 <translation id="3274634049061007184">Переглядайте додатки на телефоні</translation>
 <translation id="3289364673986435196">Меню кнопки живлення</translation>
 <translation id="3289544412142055976">Додатки Linux наразі не підтримуються</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">Використати шаблон</translation>
 <translation id="5986723678596105470">Приєднатися через Google Meet</translation>
 <translation id="598882571027504733">Щоб завантажити оновлення, перезапустіть Chromebook із під’єднаною клавіатурою.</translation>
+<translation id="5990992855591814753">Зберігайте концентрацію уваги завдяки персоналізованим спискам відтворення для зосередження. Отримайте YouTube Music і YouTube без реклами з безкоштовною пробною підпискою YouTube Premium на 3 місяці. Діють умови.</translation>
 <translation id="5998374579424866922">Вимкнути елементи керування іграми</translation>
 <translation id="6000279412553873020">Клавіші, кнопки тощо</translation>
 <translation id="6012623610530968780">Сторінка <ph name="SELECTED_PAGE" /> з <ph name="TOTAL_PAGE_NUM" /></translation>
@@ -1952,7 +1952,6 @@
 <translation id="7670953955701272011">Відкрити цю дату в Google Календарі</translation>
 <translation id="7671610481353807627">Додатки відсортовано за кольором</translation>
 <translation id="7672095158465655885">Підключено до мережі "<ph name="NAME" />", <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock увімкнено</translation>
 <translation id="7682351277038250258">Вставити контент із буфера обміну як простий текст</translation>
 <translation id="7684531502177797067">Використовується камера "<ph name="CAMERA_NAME" />".</translation>
 <translation id="7687172143976244806">Ви відкривали</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index c4be890..3cacbe7 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">قطعی مقام تک رسائی کو آن کریں؟</translation>
 <translation id="3269597722229482060">دائیں طرف کلک کریں</translation>
 <translation id="3271554781793662131">داخل کرنے کیلئے تلاش کریں</translation>
-<translation id="3273040715184276344">‏‫Caps Lock آف ہے</translation>
 <translation id="3274634049061007184">اپنے فون کی ایپس دیکھیں</translation>
 <translation id="3289364673986435196">پاور مینیو</translation>
 <translation id="3289544412142055976">‏Linux ایپس فی الحال تعاون یافتہ نہیں ہیں</translation>
@@ -1469,6 +1468,7 @@
 <translation id="598407983968395253">تمثیل استعمال کریں</translation>
 <translation id="5986723678596105470">‏‫Google Meet کے ساتھ شامل ہوں</translation>
 <translation id="598882571027504733">‏اپ ڈیٹ حاصل کرنے کیلئے، منسلک شدہ کی بورڈ سے اپنا Chromebook دوبارہ شروع کریں۔</translation>
+<translation id="5990992855591814753">‏ذاتی نوعیت کی فوکس والی پلے لسٹس کے ساتھ اپنے کام مکمل کریں۔ بغیر کسی قیمت کے 3 ماہ کے YouTube Premium کے ساتھ، اشتہارات سے پاک، YouTube Music اور YouTube حاصل کریں۔ شرائط لاگو ہیں۔</translation>
 <translation id="5998374579424866922">گیم کنٹرولز آف کریں</translation>
 <translation id="6000279412553873020">کلیدیں، بٹنز، اور مزید بہت کچھ</translation>
 <translation id="6012623610530968780">صفحہ <ph name="TOTAL_PAGE_NUM" /> کا <ph name="SELECTED_PAGE" /></translation>
@@ -1951,7 +1951,6 @@
 <translation id="7670953955701272011">‏Google کیلنڈر میں اس تاریخ کو کھولیں</translation>
 <translation id="7671610481353807627">ایپس رنگ کے لحاظ سے ترتیب دی گئی ہیں</translation>
 <translation id="7672095158465655885"><ph name="NAME" />، <ph name="SUBTEXT" /> سے منسلک ہیں</translation>
-<translation id="7680417644536099065">‏‫Caps Lock آن ہے</translation>
 <translation id="7682351277038250258">کلپ بورڈ کے مواد کو سادہ ٹیکسٹ کے طور پر پیسٹ کریں</translation>
 <translation id="7684531502177797067">کیمرا ان پٹ <ph name="CAMERA_NAME" /> پر سیٹ ہے۔</translation>
 <translation id="7687172143976244806">آپ نے کھولا</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb
index 794faac..ca3e967c 100644
--- a/ash/strings/ash_strings_uz.xtb
+++ b/ash/strings/ash_strings_uz.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Aniq joylashuv maʼlumotlariga ruxsat berilsinmi?</translation>
 <translation id="3269597722229482060">Oʻng klik</translation>
 <translation id="3271554781793662131">Joylash uchun qidiring</translation>
-<translation id="3273040715184276344">Caps Lock oʻchiq</translation>
 <translation id="3274634049061007184">Telefondagi ilovalarni koʻring</translation>
 <translation id="3289364673986435196">Quvvat menyusi</translation>
 <translation id="3289544412142055976">Linux ilovalari hozirda ishlamaydi</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Bu sanani Google Taqvimda ochish</translation>
 <translation id="7671610481353807627">Ilovalar rangi asosida saralandi</translation>
 <translation id="7672095158465655885"><ph name="NAME" /> qurilmasiga ulangan, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock yoniq</translation>
 <translation id="7682351277038250258">Vaqtincha xotiradagi kontentni oddiy matn sifatida joylash</translation>
 <translation id="7684531502177797067"><ph name="CAMERA_NAME" /> uchun kameradan kiritish sozlandi.</translation>
 <translation id="7687172143976244806">Siz ochgansiz</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 5a0e871..825f0b2 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Bật quyền truy cập vào thông tin vị trí chính xác?</translation>
 <translation id="3269597722229482060">Nhấp chuột phải</translation>
 <translation id="3271554781793662131">Tìm để chèn</translation>
-<translation id="3273040715184276344">Caps Lock đã tắt</translation>
 <translation id="3274634049061007184">Xem ứng dụng có trên điện thoại</translation>
 <translation id="3289364673986435196">Trình đơn nguồn</translation>
 <translation id="3289544412142055976">Hiện không hỗ trợ ứng dụng Linux</translation>
@@ -1952,7 +1951,6 @@
 <translation id="7670953955701272011">Mở ngày này trong Lịch Google</translation>
 <translation id="7671610481353807627">Ứng dụng được sắp xếp theo màu sắc</translation>
 <translation id="7672095158465655885">Đã kết nối với <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">Caps Lock đã bật</translation>
 <translation id="7682351277038250258">Dán nội dung trong bảng nhớ tạm dưới dạng văn bản thuần tuý</translation>
 <translation id="7684531502177797067">Đặt chế độ nhập dữ liệu bằng máy ảnh thành <ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Bạn đã mở</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index df864ce..8c69e18 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">开启确切位置信息访问权限?</translation>
 <translation id="3269597722229482060">右键点击</translation>
 <translation id="3271554781793662131">搜索即可插入</translation>
-<translation id="3273040715184276344">大写锁定模式已关闭</translation>
 <translation id="3274634049061007184">查看手机中的应用</translation>
 <translation id="3289364673986435196">电源菜单</translation>
 <translation id="3289544412142055976">尚不支持 Linux 应用</translation>
@@ -1950,7 +1949,6 @@
 <translation id="7670953955701272011">在 Google 日历中打开此日期</translation>
 <translation id="7671610481353807627">应用已按颜色排序</translation>
 <translation id="7672095158465655885">已连接到网络“<ph name="NAME" />”,<ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">大写锁定模式已开启</translation>
 <translation id="7682351277038250258">以纯文本形式粘贴剪贴板中的内容</translation>
 <translation id="7684531502177797067">相机输入已设为“<ph name="CAMERA_NAME" />”。</translation>
 <translation id="7687172143976244806">您打开过</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 5611f19..87ce4f0e 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">要開啟精確位置的存取權嗎?</translation>
 <translation id="3269597722229482060">按滑鼠右鍵</translation>
 <translation id="3271554781793662131">搜尋即可插入</translation>
-<translation id="3273040715184276344">已關閉 Caps Lock 鍵</translation>
 <translation id="3274634049061007184">查看手機的應用程式</translation>
 <translation id="3289364673986435196">電源選單</translation>
 <translation id="3289544412142055976">目前不支援 Linux 應用程式</translation>
@@ -1950,7 +1949,6 @@
 <translation id="7670953955701272011">在「Google 日曆」中開啟此日期</translation>
 <translation id="7671610481353807627">應用程式已按顏色排序</translation>
 <translation id="7672095158465655885">連咗線去 <ph name="NAME" />,<ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">已開啟 Caps Lock 鍵</translation>
 <translation id="7682351277038250258">以純文字貼上剪貼簿中的內容</translation>
 <translation id="7684531502177797067">攝錄機輸入裝置設定咗做「<ph name="CAMERA_NAME" />」。</translation>
 <translation id="7687172143976244806">你曾開啟</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index c020e16d..ce374a9 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">要開啟精確位置存取權嗎?</translation>
 <translation id="3269597722229482060">按一下滑鼠右鍵</translation>
 <translation id="3271554781793662131">搜尋即可插入</translation>
-<translation id="3273040715184276344">大寫鎖定模式已關閉</translation>
 <translation id="3274634049061007184">查看手機的應用程式</translation>
 <translation id="3289364673986435196">電源鍵選單</translation>
 <translation id="3289544412142055976">目前不支援 Linux 應用程式</translation>
@@ -1948,7 +1947,6 @@
 <translation id="7670953955701272011">在 Google 日曆中開啟此日期</translation>
 <translation id="7671610481353807627">依顏色將應用程式排序</translation>
 <translation id="7672095158465655885">已連上「<ph name="NAME" />」,<ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">大寫鎖定模式已開啟</translation>
 <translation id="7682351277038250258">以純文字格式貼上剪貼簿中的內容</translation>
 <translation id="7684531502177797067">攝影機輸入裝置設為「<ph name="CAMERA_NAME" />」。</translation>
 <translation id="7687172143976244806">你開啟過</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 53764f1..b6486b27 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -634,7 +634,6 @@
 <translation id="3265032511221679826">Vula ukufinyelela kwendawo okunembile?</translation>
 <translation id="3269597722229482060">Ukuchofoza Kwesokudla</translation>
 <translation id="3271554781793662131">Sesha ukuze ufake</translation>
-<translation id="3273040715184276344">ICaps Lock ivaliwe</translation>
 <translation id="3274634049061007184">Buka ama-app efoni yakho</translation>
 <translation id="3289364673986435196">Imenyu yamandla</translation>
 <translation id="3289544412142055976">Ama-app we-Linux apps okwamanje awasekelwe</translation>
@@ -1953,7 +1952,6 @@
 <translation id="7670953955701272011">Vula leli langa ku-Google Calendar</translation>
 <translation id="7671610481353807627">Ama-app ahlungwe ngokombala</translation>
 <translation id="7672095158465655885">Uxhume ku-<ph name="NAME" />, <ph name="SUBTEXT" /></translation>
-<translation id="7680417644536099065">ICaps Lock ivuliwe</translation>
 <translation id="7682351277038250258">Namathisela okuqukethwe kusukela kubhodi lokunamathisela njengombhalo ongenalutho</translation>
 <translation id="7684531502177797067">Okokufaka kwekhamera kusethwe ku-<ph name="CAMERA_NAME" />.</translation>
 <translation id="7687172143976244806">Uvule</translation>
diff --git a/base/allocator/partition_allocator/src/partition_alloc/partition_page.h b/base/allocator/partition_allocator/src/partition_alloc/partition_page.h
index 83e3af87..f9ccbe9 100644
--- a/base/allocator/partition_allocator/src/partition_alloc/partition_page.h
+++ b/base/allocator/partition_allocator/src/partition_alloc/partition_page.h
@@ -173,8 +173,7 @@
       : SlotSpanMetadataBase<MetadataKind::kReadOnly>(b) {}
 #endif  // PA_CONFIG(ENABLE_SHADOW_METADATA)
   // pa_tcache_inspect needs the copy constructor.
-  SlotSpanMetadata<MetadataKind::kReadOnly>(
-      const SlotSpanMetadata<MetadataKind::kReadOnly>&) = default;
+  SlotSpanMetadata(const SlotSpanMetadata<MetadataKind::kReadOnly>&) = default;
 
   // Public API
   // Pointer/address manipulation functions. These must be static as the input
diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py
index 517ebbb..efac6ab 100755
--- a/build/android/gyp/lint.py
+++ b/build/android/gyp/lint.py
@@ -42,6 +42,7 @@
     "VisibleForTests",  # Does not recognize "ForTesting" methods.
     "UniqueConstants",  # Chromium enums allow aliases.
     "UnusedAttribute",  # Chromium apks have various minSdkVersion values.
+    "NullSafeMutableLiveData",  # Broken. See b/370586513.
 ]
 
 _RES_ZIP_DIR = 'RESZIPS'
@@ -200,6 +201,7 @@
              android_sdk_root,
              lint_gen_dir,
              baseline,
+             create_cache,
              warnings_as_errors=False):
   logging.info('Lint starting')
   if not cache_dir:
@@ -246,10 +248,17 @@
       '--offline',
       '--quiet',  # Silences lint's "." progress updates.
       '--stacktrace',  # Prints full stacktraces for internal lint errors.
-      '--disable',
-      ','.join(_DISABLED_ALWAYS),
   ]
 
+  # Only disable for real runs since otherwise you get UnknownIssueId warnings
+  # when disabling custom lint checks since they are not passed during cache
+  # creation.
+  if not create_cache:
+    cmd += [
+        '--disable',
+        ','.join(_DISABLED_ALWAYS),
+    ]
+
   if not manifest_path:
     manifest_path = os.path.join(build_utils.DIR_SOURCE_ROOT, 'build',
                                  'android', 'AndroidManifest.xml')
@@ -327,8 +336,19 @@
   _WriteXmlFile(project_file_root, project_xml_path)
   cmd += ['--project', project_xml_path]
 
-  # This filter is necessary for JDK11.
-  stdout_filter = lambda x: build_utils.FilterLines(x, 'No issues found')
+  def stdout_filter(output):
+    filter_patterns = [
+        # This filter is necessary for JDK11.
+        'No issues found',
+        # Custom checks are not always available in every lint run so an
+        # UnknownIssueId warning is sometimes printed for custom checks in the
+        # _DISABLED_ALWAYS list.
+        r'\[UnknownIssueId\]',
+        # If all the warnings are filtered, we should not fail on the final
+        # summary line.
+        r'\d+ errors, \d+ warnings',
+    ]
+    return build_utils.FilterLines(output, '|'.join(filter_patterns))
 
   def stderr_filter(output):
     output = build_utils.FilterReflectiveAccessJavaWarnings(output)
@@ -522,6 +542,7 @@
            args.android_sdk_root,
            args.lint_gen_dir,
            args.baseline,
+           args.create_cache,
            warnings_as_errors=args.warnings_as_errors)
   logging.info('Creating stamp file')
   build_utils.Touch(args.stamp)
diff --git a/chrome/VERSION b/chrome/VERSION
index f449d3a..6d872abf 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=131
 MINOR=0
-BUILD=6751
+BUILD=6752
 PATCH=0
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 369c7f0..ce7fd23 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -369,6 +369,7 @@
   "java/src/org/chromium/chrome/browser/compositor/layouts/eventfilter/OverlayPanelEventFilter.java",
   "java/src/org/chromium/chrome/browser/compositor/layouts/phone/SimpleAnimationLayout.java",
   "java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java",
+  "java/src/org/chromium/chrome/browser/compositor/overlays/strip/ActionConfirmationDelegate.java",
   "java/src/org/chromium/chrome/browser/compositor/overlays/strip/ReorderDelegate.java",
   "java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java",
   "java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ActionConfirmationDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ActionConfirmationDelegate.java
new file mode 100644
index 0000000..970c05e
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ActionConfirmationDelegate.java
@@ -0,0 +1,145 @@
+// 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.chrome.browser.compositor.overlays.strip;
+
+import android.view.View;
+
+import org.chromium.base.Callback;
+import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tasks.tab_management.ActionConfirmationManager;
+import org.chromium.chrome.browser.tasks.tab_management.ActionConfirmationManager.ConfirmationResult;
+import org.chromium.components.prefs.PrefService;
+import org.chromium.components.user_prefs.UserPrefs;
+
+/** Tab-strip specific wrapper for the {@link ActionConfirmationManager} */
+public class ActionConfirmationDelegate {
+    private ActionConfirmationManager mActionConfirmationManager;
+    private View mToolbarContainerView;
+
+    private ObservableSupplierImpl<Integer> mGroupIdToHideSupplier;
+    private Profile mProfile;
+    private PrefService mPrefService;
+
+    /**
+     * @param actionConfirmationManager The {@link ActionConfirmationManager} that is being handled.
+     * @param toolbarContainerView The {@link View} that hosts the tab strip's drag and drop events.
+     */
+    ActionConfirmationDelegate(
+            ActionConfirmationManager actionConfirmationManager, View toolbarContainerView) {
+        mActionConfirmationManager = actionConfirmationManager;
+        mToolbarContainerView = toolbarContainerView;
+    }
+
+    /**
+     * @param profile The {@link Profile} tied to the given tab strip.
+     * @param groupIdToHideSupplier A supplier for the interacting tab group ID. Observed by the tab
+     *     strip to hide a given group indicatorwhen showing the action confirmation dialog.
+     */
+    void initialize(Profile profile, ObservableSupplierImpl<Integer> groupIdToHideSupplier) {
+        mProfile = profile;
+        mGroupIdToHideSupplier = groupIdToHideSupplier;
+    }
+
+    ActionConfirmationManager getActionConfirmationManager() {
+        return mActionConfirmationManager;
+    }
+
+    /**
+     * This method checks if the tab group delete dialog should be shown and temporarily hides the
+     * tab group that may be deleted upon user confirmation.
+     *
+     * @param rootId The root id of the interacting tab.
+     * @param draggingLastTabOffStrip Whether the last tab in group is being dragged off strip.
+     * @param tabClosing Whether this method is triggered from a tab closure.
+     * @param confirmationCallback The callback method to close the tab or move the tab out of group
+     *     when user confirms the tab group deletion.
+     */
+    void handleDeleteGroupAction(
+            int rootId,
+            boolean draggingLastTabOffStrip,
+            boolean tabClosing,
+            Runnable confirmationCallback) {
+        if (mGroupIdToHideSupplier.get() == Tab.INVALID_TAB_ID) {
+            // Hide the tab group.
+            mGroupIdToHideSupplier.set(rootId);
+
+            // Show confirmation dialog and handle user response.
+            showConfirmationDialogAndHandleResponse(
+                    confirmationCallback, draggingLastTabOffStrip, tabClosing);
+        }
+    }
+
+    /**
+     * @return Whether or not we should show the confirmation dialog when a tab is removed from the
+     *     group.
+     */
+    boolean isTabRemoveDialogSkipped() {
+        if (mPrefService == null) mPrefService = UserPrefs.get(mProfile);
+        return mPrefService.getBoolean(Pref.STOP_SHOWING_TAB_GROUP_CONFIRMATION_ON_TAB_REMOVE);
+    }
+
+    /**
+     * This method prompts a confirmation dialog for deleting the tab group and handles the user
+     * response.
+     *
+     * @param confirmationCallback The callback method to close the last tab or move the last tab
+     *     out of the group when the user confirms the tab group deletion.
+     * @param dragTabOffStrip Whether the tab is being dragged off tab strip.
+     * @param tabClosing Whether this method is triggered from a tab closure.
+     */
+    private void showConfirmationDialogAndHandleResponse(
+            Runnable confirmationCallback, boolean dragTabOffStrip, boolean tabClosing) {
+        // Clear any drag and drop in progress to display the dialog.
+        if (!isTabRemoveDialogSkipped() && mToolbarContainerView != null) {
+            mToolbarContainerView.cancelDragAndDrop();
+        }
+
+        // Do not run callback if the call is from tab drag and drop, tab group will be restored
+        // if drop is not handled. If the tab drop is handled, the tab group will be deleted
+        // when the tab is re-parented, so no action is needed here.
+        boolean shouldRunIfImmediateContinue = !dragTabOffStrip || tabClosing;
+        Callback<Integer> onResult =
+                (@ConfirmationResult Integer result) ->
+                        handleUserConfirmation(
+                                result, confirmationCallback, shouldRunIfImmediateContinue);
+
+        // Show the delete group dialog for either removing or closing the last tab in the group.
+        if (tabClosing) {
+            mActionConfirmationManager.processCloseTabAttempt(onResult);
+        } else {
+            mActionConfirmationManager.processUngroupTabAttempt(onResult);
+        }
+    }
+
+    /**
+     * This method handles the user response for the tab group delete dialog.
+     *
+     * @param result The integer value representing the user's response on whether to proceed with
+     *     deleting the group.
+     * @param confirmationCallback The callback method to close the last tab or move the last tab
+     *     out of the group when the user confirms the tab group deletion.
+     * @param shouldRunIfImmediateContinue Whether to run the callback method when dialog is
+     *     skipped.
+     */
+    private void handleUserConfirmation(
+            @ConfirmationResult Integer result,
+            Runnable confirmationCallback,
+            boolean shouldRunIfImmediateContinue) {
+        if ((result == ConfirmationResult.IMMEDIATE_CONTINUE && shouldRunIfImmediateContinue)
+                || result == ConfirmationResult.CONFIRMATION_POSITIVE) {
+            confirmationCallback.run();
+        }
+        // Reset the group ID to hide after the group deletion has occurred, so we rebuild the strip
+        // with the correct tab state, meaning the indicator won't unexpectedly reappear.
+        mGroupIdToHideSupplier.set(Tab.INVALID_TAB_ID);
+    }
+
+    void setPrefServiceForTesting(PrefService prefService) {
+        mPrefService = prefService;
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
index 171d985..5e8da35c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
@@ -47,6 +47,7 @@
 import org.chromium.base.Token;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
+import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.base.task.PostTask;
 import org.chromium.base.task.TaskTraits;
@@ -68,7 +69,6 @@
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.layouts.animation.CompositorAnimator;
 import org.chromium.chrome.browser.layouts.components.VirtualView;
-import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncIphController;
@@ -80,7 +80,6 @@
 import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
 import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilterObserver;
 import org.chromium.chrome.browser.tasks.tab_management.ActionConfirmationManager;
-import org.chromium.chrome.browser.tasks.tab_management.ActionConfirmationManager.ConfirmationResult;
 import org.chromium.chrome.browser.tasks.tab_management.ColorPickerUtils;
 import org.chromium.chrome.browser.tasks.tab_management.TabGroupTitleEditor;
 import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
@@ -92,7 +91,6 @@
 import org.chromium.components.feature_engagement.Tracker;
 import org.chromium.components.prefs.PrefService;
 import org.chromium.components.tab_groups.TabGroupColorId;
-import org.chromium.components.user_prefs.UserPrefs;
 import org.chromium.ui.MotionEventUtils;
 import org.chromium.ui.base.LocalizationUtils;
 import org.chromium.ui.base.WindowAndroid;
@@ -241,10 +239,16 @@
                     updateGroupTitleText(mSourceRootId);
                     // Removing the tab at the end of a group through the GTS will result in the
                     // width of a group changing without a tab moving. This means a rebuild won't
-                    // occur, and we'll need to manually update the bottom indicator here.
-                    if (!mInReorderMode
-                            || mTabGroupModelFilter.getTabGroupCount()
-                                    != mStripGroupTitles.length) {
+                    // occur, and we'll need to manually update the bottom indicator here. Skip this
+                    // step if the rebuild will be handled elsewhere after reaching a "proper" tab
+                    // state, such in reorder mode or confirming the group deletion.
+                    int groupIdToHide = mGroupIdToHideSupplier.get();
+                    boolean removedLastTabInGroup =
+                            (groupIdToHide != Tab.INVALID_TAB_ID)
+                                    && (movedTab.getRootId() == groupIdToHide);
+                    boolean groupCountChanged =
+                            mTabGroupModelFilter.getTabGroupCount() != mStripGroupTitles.length;
+                    if (!removedLastTabInGroup && (!mInReorderMode || groupCountChanged)) {
                         finishAnimations();
                         computeAndUpdateTabOrders(false, false);
                         mRenderHost.requestRender();
@@ -334,8 +338,6 @@
     private TabGroupModelFilter mTabGroupModelFilter;
     private TabCreator mTabCreator;
     private LayerTitleCache mLayerTitleCache;
-    private ActionConfirmationManager mActionConfirmationManager;
-    private StripStacker mStripStacker = new ScrollingStripStacker();
 
     // Internal State
     private StripLayoutView[] mStripViews = new StripLayoutView[0];
@@ -349,6 +351,12 @@
     private final TabLoadTrackerCallback mTabLoadTrackerHost = new TabLoadTrackerCallbackImpl();
     private final RectF mTouchableRect = new RectF();
 
+    // Delegates that manage different functions for the tab strip.
+    private final ActionConfirmationDelegate mActionConfirmationDelegate;
+    private final StripStacker mStripStacker = new ScrollingStripStacker();
+    private final ScrollDelegate mScrollDelegate = new ScrollDelegate();
+    private final ReorderDelegate mReorderDelegate = new ReorderDelegate();
+
     // Common state used for animations on the strip triggered by independent actions including and
     // not limited to tab closure, tab creation/selection, and tab reordering. Not intended to be
     // used for hover actions. Consider using setAndStartRunningAnimator() to set and start this
@@ -373,8 +381,6 @@
     private final float mGroupTitleOverlapWidth;
 
     // Strip State
-    private ScrollDelegate mScrollDelegate = new ScrollDelegate();
-    private ReorderDelegate mReorderDelegate = new ReorderDelegate();
     private float mCachedTabWidth;
 
     // Reorder State
@@ -447,7 +453,7 @@
     private int mPlaceholdersNeededDuringRestore;
 
     // Tab Drag and Drop state to hold clicked tab being dragged.
-    private View mToolbarContainerView;
+    private final View mToolbarContainerView;
     @Nullable private final TabDragSource mTabDragSource;
     private StripLayoutTab mActiveClickedTab;
 
@@ -460,7 +466,6 @@
     private StripLayoutTab mLastHoveredTab;
     private StripTabHoverCardView mTabHoverCardView;
     private long mLastHoverCardExitTime;
-    private boolean mHoverCardDelayDisabledForTesting;
 
     // Tab Group Sync.
     private float mTabStripHeight;
@@ -469,8 +474,8 @@
     private final Supplier<Boolean> mTabStripVisibleSupplier;
 
     // Tab group delete dialog.
-    private int mTabGroupIdToHide = Tab.INVALID_TAB_ID;
-    private PrefService mPrefService;
+    private final ObservableSupplierImpl<Integer> mGroupIdToHideSupplier =
+            new ObservableSupplierImpl<>(Tab.INVALID_TAB_ID);
 
     // Tab group context menu.
     private TabGroupContextMenuCoordinator mTabGroupContextMenuCoordinator;
@@ -519,7 +524,6 @@
         mToolbarContainerView = toolbarContainerView;
         mTabDragSource = tabDragSource;
         mWindowAndroid = windowAndroid;
-        mActionConfirmationManager = actionConfirmationManager;
         mLastHoverCardExitTime = INVALID_TIME;
         mTabStripHeight = tabStripHeight;
         mTabStripVisibleSupplier = tabStripVisibleSupplier;
@@ -655,6 +659,11 @@
         int menuWidth = mContext.getResources().getDimensionPixelSize(R.dimen.menu_width);
         mTabMenu.setWidth(menuWidth);
         mTabMenu.setModal(true);
+
+        mActionConfirmationDelegate =
+                new ActionConfirmationDelegate(actionConfirmationManager, mToolbarContainerView);
+        mGroupIdToHideSupplier.addObserver((newIdToHide) -> rebuildStripViews());
+
         mIsFirstLayoutPass = true;
     }
 
@@ -996,6 +1005,8 @@
         mTabGroupModelFilter = tabGroupModelFilter;
         mTabGroupModelFilter.addTabGroupObserver(mTabGroupModelFilterObserver);
 
+        mActionConfirmationDelegate.initialize(
+                tabGroupModelFilter.getTabModel().getProfile(), mGroupIdToHideSupplier);
         mReorderDelegate.initialize(mTabGroupModelFilter, mScrollDelegate);
         updateTitleCacheForInit();
         rebuildStripViews();
@@ -1912,7 +1923,7 @@
                     TabGroupContextMenuCoordinator.createContextMenuCoordinator(
                             mModel,
                             mTabGroupModelFilter,
-                            mActionConfirmationManager,
+                            mActionConfirmationDelegate.getActionConfirmationManager(),
                             mTabCreator,
                             mWindowAndroid,
                             mDataSharingTabManager,
@@ -2199,11 +2210,6 @@
                 mHeight);
     }
 
-    /** Disables hover card delay for testing purposes. */
-    public void disableHoverCardDelayForTesting() {
-        mHoverCardDelayDisabledForTesting = true;
-    }
-
     private void updateHoveredTabAttachedState(StripLayoutTab tab, boolean hovered) {
         if (tab == null) return;
 
@@ -2419,11 +2425,23 @@
         int tabId = tab.getTabId();
         int rootId = getTabById(tabId).getRootId();
         if (isLastTabInGroup(tabId) && !mIncognito) {
-            showDeleteGroupDialogAndProcessTabAction(
+            mActionConfirmationDelegate.handleDeleteGroupAction(
                     rootId,
                     /* draggingLastTabOffStrip= */ false,
-                    /* closeTab= */ true,
-                    () -> handleCloseTab(tab, time));
+                    /* tabClosing= */ true,
+                    () -> {
+                        // Remove the tab from the group before animating the closure, so the group
+                        // title does not unexpectedly reappear. This is because the tab closure
+                        // animation doesn't actually remove the tab from the model (and therefore
+                        // delete the tab group), until after the animation finishes.
+                        mTabGroupModelFilter.moveTabOutOfGroup(tab.getTabId());
+
+                        // Clear the hidden group ID now. This will prevent a rebuild from occurring
+                        // right after we kick off the closure, clobbering the close animation.
+                        mGroupIdToHideSupplier.set(Tab.INVALID_TAB_ID);
+
+                        handleCloseTab(tab, time);
+                    });
         } else {
             handleCloseTab(tab, time);
         }
@@ -2971,7 +2989,7 @@
             StripLayoutGroupTitle groupTitle = mStripGroupTitles[i];
             if (groupTitle == null
                     || groupTitle.isCollapsed()
-                    || groupTitle.getRootId() == mTabGroupIdToHide) {
+                    || groupTitle.getRootId() == mGroupIdToHideSupplier.get()) {
                 continue;
             }
 
@@ -3026,7 +3044,7 @@
 
         // If we have tab group to hide due to running tab group delete dialog, then skip the tab
         // group when rebuilding StripViews.
-        if (mTabGroupIdToHide != Tab.INVALID_TAB_ID && numGroups > 0) {
+        if (mGroupIdToHideSupplier.get() != Tab.INVALID_TAB_ID && numGroups > 0) {
             numGroups -= 1;
         }
 
@@ -3044,7 +3062,7 @@
         if (mTabGroupModelFilter.isTabInTabGroup(firstTab)) {
             int rootId = firstTab.getRootId();
             StripLayoutGroupTitle groupTitle = findOrCreateGroupTitle(rootId);
-            if (rootId != mTabGroupIdToHide) {
+            if (rootId != mGroupIdToHideSupplier.get()) {
                 if (firstTab.getLaunchType() == TabLaunchType.FROM_SYNC_BACKGROUND) {
                     mLastSyncedGroupId = rootId;
                 }
@@ -3064,7 +3082,7 @@
             boolean areRelatedTabs = currTab.getRootId() == nextRootId;
             if (nextTabInGroup && !areRelatedTabs) {
                 StripLayoutGroupTitle groupTitle = findOrCreateGroupTitle(nextRootId);
-                if (nextRootId != mTabGroupIdToHide) {
+                if (nextRootId != mGroupIdToHideSupplier.get()) {
                     if (nextTab.getLaunchType() == TabLaunchType.FROM_SYNC_BACKGROUND) {
                         mLastSyncedGroupId = nextRootId;
                     }
@@ -3796,7 +3814,6 @@
         // 5. Lift the container off the toolbar and perform haptic feedback.
         ArrayList<Animator> animationList =
                 mAnimationsDisabledForTesting ? null : new ArrayList<>();
-        Tab tab = getTabById(mInteractingTab.getTabId());
         updateTabAttachState(mInteractingTab, /* attached= */ false, animationList);
         performHapticFeedback();
 
@@ -4000,15 +4017,17 @@
                         targetGroupTitle, interactingGroupTitle, curIndex, true, towardEnd);
             }
 
-            if (isLastTabInGroup(tabId) && mTabGroupIdToHide == Tab.INVALID_TAB_ID && !mIncognito) {
+            if (isLastTabInGroup(tabId)
+                    && mGroupIdToHideSupplier.get() == Tab.INVALID_TAB_ID
+                    && !mIncognito) {
                 // When dragging the last tab out of group on strip, the tab group delete dialog
                 // will show and we will hide the indicators for the interacting tab group until the
                 // user confirms the next action. e.g delete tab group when user confirms the
                 // delete, or restore indicators back on strip when user cancel the delete.
-                showDeleteGroupDialogAndProcessTabAction(
+                mActionConfirmationDelegate.handleDeleteGroupAction(
                         rootId,
                         /* draggingLastTabOffStrip= */ false,
-                        /* closeTab= */ false,
+                        /* tabClosing= */ false,
                         () -> {
                             mTabGroupModelFilter.moveTabOutOfGroupInDirection(tabId, towardEnd);
                             RecordUserAction.record("MobileToolbarReorderTab.TabRemovedFromGroup");
@@ -4023,18 +4042,6 @@
         return TabModel.INVALID_TAB_INDEX;
     }
 
-    @VisibleForTesting
-    boolean isTabRemoveDialogSkipped() {
-        if (mPrefService == null) {
-            mPrefService = UserPrefs.get(mModel.getProfile());
-        }
-        return mPrefService.getBoolean(Pref.STOP_SHOWING_TAB_GROUP_CONFIRMATION_ON_TAB_REMOVE);
-    }
-
-    void setPrefServiceForTesting(PrefService prefService) {
-        mPrefService = prefService;
-    }
-
     /**
      * This method checks whether or not interacting tab has met the conditions to be merged to an
      * adjacent tab group. If so, it merges the tab to the group and returns the new index for
@@ -4211,7 +4218,7 @@
         Tab tab = getTabById(stripLayoutTab.getTabId());
         if (tab == null
                 || !mTabGroupModelFilter.isTabInTabGroup(tab)
-                || tab.getRootId() == mTabGroupIdToHide) {
+                || tab.getRootId() == mGroupIdToHideSupplier.get()) {
             return false;
         }
 
@@ -4381,71 +4388,6 @@
     }
 
     /**
-     * This method prompts a confirmation dialog for deleting the tab group and handles the user
-     * response.
-     *
-     * @param confirmationCallback The callback method to close the last tab or move the last tab
-     *     out of the group when the user confirms the tab group deletion.
-     * @param dragTabOffStrip Whether the tab is being dragged off tab strip.
-     * @param closeTab Whether this method is triggered from tab closing.
-     */
-    private void showConfirmationDialogAndHandleResponse(
-            Runnable confirmationCallback, boolean dragTabOffStrip, boolean closeTab) {
-        // Clear any drag and drop in progress to display the dialog.
-        if (!isTabRemoveDialogSkipped()) {
-            if (mToolbarContainerView != null) {
-                mToolbarContainerView.cancelDragAndDrop();
-            }
-        }
-
-        // Do not run callback if the call is from tab drag and drop, tab group will be restored
-        // if drop is not handled. If the tab drop is handled, the tab group will be deleted
-        // when the tab is re-parented, so no action is needed here.
-        boolean shouldRunIfImmediateContinue = closeTab || !dragTabOffStrip;
-
-        // Show the delete group dialog for either removing or closing the last tab in the group.
-        if (closeTab) {
-            mActionConfirmationManager.processCloseTabAttempt(
-                    (@ConfirmationResult Integer result) -> {
-                        handleUserConfirmation(
-                                result, confirmationCallback, shouldRunIfImmediateContinue);
-                    });
-        } else {
-            mActionConfirmationManager.processUngroupTabAttempt(
-                    (@ConfirmationResult Integer result) -> {
-                        handleUserConfirmation(
-                                result, confirmationCallback, shouldRunIfImmediateContinue);
-                    });
-        }
-    }
-
-    /**
-     * This method handles the user response for the tab group delete dialog.
-     *
-     * @param result The integer value representing the user's response on whether to proceed with
-     *     deleting the group.
-     * @param confirmationCallback The callback method to close the last tab or move the last tab
-     *     out of the group when the user confirms the tab group deletion.
-     * @param shouldRunIfImmediateContinue Whether to run the callback method when dialog is
-     *     skipped.
-     */
-    private void handleUserConfirmation(
-            @ConfirmationResult Integer result,
-            Runnable confirmationCallback,
-            boolean shouldRunIfImmediateContinue) {
-        mTabGroupIdToHide = Tab.INVALID_TAB_ID;
-        if (result == ConfirmationResult.CONFIRMATION_NEGATIVE) {
-            rebuildStripViews();
-        } else if (result == ConfirmationResult.CONFIRMATION_POSITIVE) {
-            confirmationCallback.run();
-        } else {
-            if (shouldRunIfImmediateContinue) {
-                confirmationCallback.run();
-            }
-        }
-    }
-
-    /**
      * This method determines whether this tab drag is interacting with tab group title indicator.
      *
      * @param curIndexInStripTab The index of the interacting tab in mStripTabs.
@@ -5068,6 +5010,10 @@
         mInReorderMode = inReorderMode;
     }
 
+    void setPrefServiceForTesting(PrefService prefService) {
+        mActionConfirmationDelegate.setPrefServiceForTesting(prefService); // IN-TEST
+    }
+
     private void setAccessibilityDescription(StripLayoutTab stripTab, Tab tab) {
         if (tab != null) setAccessibilityDescription(stripTab, tab.getTitle(), tab.isHidden());
     }
@@ -5129,9 +5075,9 @@
                 && selectedTab.isDraggedOffStrip()) {
             // Rebuild tab groups to unhide the interacting tab group as tab is restored back on tab
             // strip.
-            if (isTabRemoveDialogSkipped() && isLastTabInGroup(selectedTab.getTabId())) {
-                mTabGroupIdToHide = Tab.INVALID_TAB_ID;
-                rebuildStripViews();
+            if (mActionConfirmationDelegate.isTabRemoveDialogSkipped()
+                    && isLastTabInGroup(selectedTab.getTabId())) {
+                mGroupIdToHideSupplier.set(Tab.INVALID_TAB_ID);
             }
             dragActiveClickedTabOntoStrip(LayoutManagerImpl.time(), 0.0f, false);
         }
@@ -5218,32 +5164,6 @@
         }
     }
 
-    /**
-     * This method checks if the tab group delete dialog should be shown and temporarily hides the
-     * tab group that may be deleted upon user confirmation.
-     *
-     * @param rootId The root id of the interacting tab.
-     * @param draggingLastTabOffStrip Whether the last tab in group is being dragged off strip.
-     * @param closeTab The tab being closed.
-     * @param confirmationCallback The callback method to close the tab or move the tab out of group
-     *     when user confirms the tab group deletion.
-     */
-    private void showDeleteGroupDialogAndProcessTabAction(
-            int rootId,
-            boolean draggingLastTabOffStrip,
-            boolean closeTab,
-            Runnable confirmationCallback) {
-        if (mTabGroupIdToHide == Tab.INVALID_TAB_ID) {
-            // Hide the tab group and rebuild tab strip view.
-            mTabGroupIdToHide = rootId;
-            rebuildStripViews();
-
-            // Show confirmation dialog and handle user response.
-            showConfirmationDialogAndHandleResponse(
-                    confirmationCallback, draggingLastTabOffStrip, closeTab);
-        }
-    }
-
     private void dragActiveClickedTabOutOfStrip(long time) {
         StripLayoutTab draggedTab = getSelectedStripTab();
         assert draggedTab != null;
@@ -5254,10 +5174,10 @@
         // Show group delete dialog when the last tab in group is being dragged off tab strip.
         boolean draggingLastTabInGroup = isLastTabInGroup(tabId);
         if (draggingLastTabInGroup && !mIncognito) {
-            showDeleteGroupDialogAndProcessTabAction(
+            mActionConfirmationDelegate.handleDeleteGroupAction(
                     tab.getRootId(),
                     /* draggingLastTabOffStrip= */ true,
-                    /* closeTab= */ false,
+                    /* tabClosing= */ false,
                     () -> {
                         mTabGroupModelFilter.moveTabOutOfGroupInDirection(tabId, false);
                     });
@@ -5269,7 +5189,7 @@
         finishAnimationsAndPushTabUpdates();
 
         // Skip hiding dragged tab container when tab group delete dialog is showing.
-        if (!draggingLastTabInGroup || isTabRemoveDialogSkipped()) {
+        if (!draggingLastTabInGroup || mActionConfirmationDelegate.isTabRemoveDialogSkipped()) {
 
             // Immediately hide the dragged tab container, as if it were being translated off like a
             // closed tab.
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
index 80a9f5b..3625b04 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
@@ -73,6 +73,7 @@
 import org.chromium.chrome.browser.layouts.components.VirtualView;
 import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab_ui.TabContentManager;
 import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
@@ -120,6 +121,7 @@
     @Mock private TabGroupModelFilter mTabGroupModelFilter;
     @Mock private TabModelFilterProvider mTabModelFilterProvider;
     @Mock private TabModel mStandardTabModel;
+    @Mock private Profile mProfile;
     @Mock private Tab mSelectedTab;
     @Mock private StripLayoutTab mHoveredStripTab;
     @Mock private ViewStub mTabHoverCardViewStub;
@@ -170,9 +172,11 @@
     private void initializeTest() {
         when(mTabModelFilterProvider.getTabModelFilter(anyBoolean()))
                 .thenReturn(mTabGroupModelFilter);
+        when(mTabGroupModelFilter.getTabModel()).thenReturn(mStandardTabModel);
         when(mTabModelSelector.getTabModelFilterProvider()).thenReturn(mTabModelFilterProvider);
         when(mTabModelSelector.getCurrentModel()).thenReturn(mStandardTabModel);
         when(mTabModelSelector.getCurrentTabModelSupplier()).thenReturn(mTabModelSupplier);
+        when(mStandardTabModel.getProfile()).thenReturn(mProfile);
 
         mTabModelStartupInfoSupplier = new ObservableSupplierImpl<>();
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
index 767237c..f743e90 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
@@ -2749,10 +2749,6 @@
         // Verify tab is moved out of group as user chooses delete tab group without showing the
         // dialog.
         verify(mTabGroupModelFilter).moveTabOutOfGroupInDirection(tabs[0].getTabId(), true);
-
-        // Verify group title is removed from the tab strip
-        StripLayoutView[] views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertFalse(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2775,10 +2771,6 @@
 
         // Verify tab is moved out of group as user confirms tab group delete.
         verify(mTabGroupModelFilter).moveTabOutOfGroupInDirection(tabs[0].getTabId(), true);
-
-        // Verify group title is removed from the tab strip
-        views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertFalse(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2802,10 +2794,6 @@
         // Verify tab is not moved out of group as user cancels tab group delete.
         verify(mTabGroupModelFilter, never())
                 .moveTabOutOfGroupInDirection(tabs[0].getTabId(), true);
-
-        // Verify group title is restored back on the tab strip
-        views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertTrue(EXPECTED_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2829,10 +2817,6 @@
         // Assume the drop is unsuccessful; the tab and the tab group will be restored to its
         // original position.
         mStripLayoutHelper.clearTabDragState();
-
-        // Verify group title is restored back on the tab strip.
-        StripLayoutView[] views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertTrue(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2855,10 +2839,6 @@
 
         // Verify tab is moved out of group as user confirms tab group delete.
         verify(mTabGroupModelFilter).moveTabOutOfGroupInDirection(tabs[0].getTabId(), false);
-
-        // Verify group title is removed from the tab strip
-        views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertFalse(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2882,10 +2862,6 @@
         // Verify tab is not moved out of group as user cancels tab group delete.
         verify(mTabGroupModelFilter, never())
                 .moveTabOutOfGroupInDirection(tabs[0].getTabId(), true);
-
-        // Verify group title is restored back on the tab strip
-        views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertTrue(EXPECTED_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2904,10 +2880,6 @@
 
         // Assert tab is being closed.
         assertTrue("Tab should be closing", tabs[0].isDying());
-
-        // Verify group title is removed from the tab strip
-        StripLayoutView[] views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertFalse(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2930,10 +2902,6 @@
 
         // Assert tab is being closed.
         assertTrue("Tab should be closing", tabs[0].isDying());
-
-        // Verify group title is removed from the tab strip
-        views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertFalse(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     @Test
@@ -2956,10 +2924,6 @@
 
         // Assert tab should not be closed.
         assertFalse("Tab should not be closing", tabs[0].isDying());
-
-        // Verify group title is restored back to the tab strip
-        views = mStripLayoutHelper.getStripLayoutViewsForTesting();
-        assertTrue(EXPECTED_NON_TITLE, views[0] instanceof StripLayoutGroupTitle);
     }
 
     private void setUpTabGroupAndDialog(
@@ -3022,7 +2986,7 @@
                 "Tab strip should match tab model.",
                 expectedNumTabs,
                 mStripLayoutHelper.getStripLayoutTabsForTesting().length);
-        verify(mUpdateHost, times(6)).requestUpdate();
+        verify(mUpdateHost, times(7)).requestUpdate();
     }
 
     @Test
@@ -4530,8 +4494,6 @@
         mStripLayoutHelper.setTabHoverCardView(mTabHoverCardView);
         // For ease of dp/px calculation.
         mContext.getResources().getDisplayMetrics().density = 1f;
-
-        mStripLayoutHelper.disableHoverCardDelayForTesting();
     }
 
     @Test
@@ -4544,6 +4506,7 @@
 
         // Set a new TabGroupModelFilter.
         TabGroupModelFilter newModelFilter = mock(TabGroupModelFilter.class);
+        when(newModelFilter.getTabModel()).thenReturn(mModel);
         mStripLayoutHelper.setTabGroupModelFilter(newModelFilter);
 
         // Verify the observers have been updated as expected.
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt
index c56a736..a7e5e1d 100644
--- a/chrome/android/profiles/arm.newest.txt
+++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-131.0.6749.0_rc-r1-merged.afdo.bz2
+chromeos-chrome-arm-131.0.6750.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/profiles_strings.grdp b/chrome/app/profiles_strings.grdp
index 02d1815..897f4e10 100644
--- a/chrome/app/profiles_strings.grdp
+++ b/chrome/app/profiles_strings.grdp
@@ -626,7 +626,10 @@
       About this profile
     </message>
     <message name="IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_SUBTITLE" desc="Subtitle of the dialog disclaiming information about the profile they are about to create.">
-      This profile is managed by your organization, which can view certain kinds of information
+      This profile is managed by your organization, which can view certain kinds of information, including
+    </message>
+    <message name="IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_KNOWN_DOMAIN_SUBTITLE" desc="Subtitle of the dialog disclaiming information about the profile they are about to create.">
+      This profile is managed by <ph name="PROFILE_MANAGER">$1<ex>example.com</ex></ph>, which can view certain kinds of information, including
     </message>
     <message name="IDS_ENTERPRISE_WELCOME_PROFILE_INFORMATION_TITLE" desc="Title of a section disclaiming to the user what their organization can do with their profile information.">
       Profile information
@@ -662,7 +665,7 @@
       You can try again or contact your administrator for help
     </message>
     <message name="IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE" desc="Subtitle the value proposition dialog for creating an enterprise profile.">
-      Sign in to securely separate your work and personal browsing. Increase your productivity while protecting sensitive company data.
+      Sign in to get your bookmarks, passwords, and more on all your devices
     </message>
     <message name="IDS_ENTERPRISE_WELCOME_SEPARATE_BROWSING_TITLE" desc="Title of the dialog that asks the user to either keep their browsing data in the work profile they will create or keep it separate.">
       Keep existing browsing data separate from your work profile?
diff --git a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1
index 1f4877e8..eaf2ed7 100644
--- a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1
+++ b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_VALUE_PROPOSITION_SUBTITLE.png.sha1
@@ -1 +1 @@
-32fcfeb8567c08d353c07599fe97741b29612149
\ No newline at end of file
+fc022e6c6e688cc193ee06d6ba5c87c844568847
\ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_KNOWN_DOMAIN_SUBTITLE.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_KNOWN_DOMAIN_SUBTITLE.png.sha1
new file mode 100644
index 0000000..79490e5
--- /dev/null
+++ b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_KNOWN_DOMAIN_SUBTITLE.png.sha1
@@ -0,0 +1 @@
+ee07e5c7df5593c8537feee8142449824db19cd1
\ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_SUBTITLE.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_SUBTITLE.png.sha1
index 16d8947..0190a9a 100644
--- a/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_SUBTITLE.png.sha1
+++ b/chrome/app/profiles_strings_grdp/IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_SUBTITLE.png.sha1
@@ -1 +1 @@
-33f0532b0892390cfe78ffe6b7f80ca05a8a525c
\ No newline at end of file
+2e33a4c867bf86d8779aca7f4bd471e6eb7414d1
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb
index 77fbd34b..0bc7a5a 100644
--- a/chrome/app/resources/chromium_strings_sr-Latn.xtb
+++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -333,6 +333,7 @@
 <translation id="5761096224651992291">Niste skoro posećivali sajt. Chromium je uklonio dozvole <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i <ph name="PERMISSION_3" /></translation>
 <translation id="5800158606660203929">Prilagodite i kontrolišite Chromium. Podesite Chromium kao podrazumevani pregledač.</translation>
 <translation id="5809516625706423866">Povezivanje sa internetom nije uspelo. Nije ovlašćen pristup (HTTP 401). Proverite konfiguraciju proksija.</translation>
+<translation id="5821520528363214608">Da biste koristili i čuvali Chromium podatke na Google nalogu, ažurirajte Chromium</translation>
 <translation id="5862307444128926510">Dobro došli u Chromium</translation>
 <translation id="5871205389137001634">Kliknite da biste napustili pretragu slika</translation>
 <translation id="5883558403894052917">Chromium je otkrio malver u ovim stavkama:</translation>
@@ -493,6 +494,7 @@
 <translation id="7686590090926151193">Chromium nije podrazumevani pregledač</translation>
 <translation id="7689606757190482937">Sinhronizujte i personalizujte Chromium na svim uređajima</translation>
 <translation id="7699779824407626136">Ažuriranje za Chromium</translation>
+<translation id="77283119132245232">Pruža usluge praćenja sistema za <ph name="BROWSER_NAME" />. Ako je ova usluga onemogućena, tragovi učinka koje napravi pregledač neće sadržati događaje u celom sistemu, poput promene konteksta i pripremljenih događaja sa nitima.</translation>
 <translation id="7745317241717453663">Ovim ćete izbrisati podatke pregledanja sa ovog uređaja. Da biste kasnije vratili podatke, prijavite se u Chromium kao <ph name="USER_EMAIL" />.</translation>
 <translation id="7747138024166251722">Program za instalaciju nije mogao da napravi privremeni direktorijum. Proverite da li imate slobodnog prostora na disku, kao i dozvolu da instalirate softver.</translation>
 <translation id="7786760609782648049">Ubrzajte Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index 2b0d162..a980e235 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -333,6 +333,7 @@
 <translation id="5761096224651992291">Нисте скоро посећивали сајт. Chromium је уклонио дозволе <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и <ph name="PERMISSION_3" /></translation>
 <translation id="5800158606660203929">Прилагодите и контролишите Chromium. Подесите Chromium као подразумевани прегледач.</translation>
 <translation id="5809516625706423866">Повезивање са интернетом није успело. Није овлашћен приступ (HTTP 401). Проверите конфигурацију проксија.</translation>
+<translation id="5821520528363214608">Да бисте користили и чували Chromium податке на Google налогу, ажурирајте Chromium</translation>
 <translation id="5862307444128926510">Добро дошли у Chromium</translation>
 <translation id="5871205389137001634">Кликните да бисте напустили претрагу слика</translation>
 <translation id="5883558403894052917">Chromium је открио малвер у овим ставкама:</translation>
@@ -493,6 +494,7 @@
 <translation id="7686590090926151193">Chromium није подразумевани прегледач</translation>
 <translation id="7689606757190482937">Синхронизујте и персонализујте Chromium на свим уређајима</translation>
 <translation id="7699779824407626136">Ажурирање за Chromium</translation>
+<translation id="77283119132245232">Пружа услуге праћења система за <ph name="BROWSER_NAME" />. Ако је ова услуга онемогућена, трагови учинка које направи прегледач неће садржати догађаје у целом систему, попут промене контекста и припремљених догађаја са нитима.</translation>
 <translation id="7745317241717453663">Овим ћете избрисати податке прегледања са овог уређаја. Да бисте касније вратили податке, пријавите се у Chromium као <ph name="USER_EMAIL" />.</translation>
 <translation id="7747138024166251722">Програм за инсталацију није могао да направи привремени директоријум. Проверите да ли имате слободног простора на диску, као и дозволу да инсталирате софтвер.</translation>
 <translation id="7786760609782648049">Убрзајте Chromium</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 50651c14..984d2fb 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -3209,7 +3209,6 @@
 <translation id="3275778913554317645">Maak as venster oop</translation>
 <translation id="3277214528693754078">Navigeer met teksskermpyltjie (karetblaai)</translation>
 <translation id="3277594800340743211">Groot skaduwee</translation>
-<translation id="3277784185056747463">Toestelwagwoord of Google-rekeningwagwoord</translation>
 <translation id="3278001907972365362">Jou Google-rekening(e) het aandag nodig</translation>
 <translation id="3279092821516760512">Geselekteerde kontakte kan met jou deel wanneer hulle in die omtrek is. Oordragte sal nie begin voordat jy aanvaar het nie.</translation>
 <translation id="3279230909244266691">Hierdie proses kan 'n paar minute neem. Begin tans die virtuele masjien.</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 027f132..fd5fed1 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -3205,7 +3205,6 @@
 <translation id="3275778913554317645">እንደ መስኮት ክፈት</translation>
 <translation id="3277214528693754078">በጽሑፍ ጠቋሚ (የጽሑፍ ጠቋሚ አሰሳ) ያስሱ</translation>
 <translation id="3277594800340743211">ትልቅ ጥላ</translation>
-<translation id="3277784185056747463">የመሣሪያ የይለፍ ቃል ወይም or የGoogle መለያ የይለፍ ቃል</translation>
 <translation id="3278001907972365362">የእርስዎ Google መለያ(ዎች) ትኩረት ይፈልጋል(ሉ)</translation>
 <translation id="3279092821516760512">በአቅራቢያ ሲሆኑ የተመረጡ እውቂያዎች ከእርስዎ ጋር ሊጋሩ ይችላሉ። እስኪቀበሉ ድረስ ዝውውሮች አይጀምሩም።</translation>
 <translation id="3279230909244266691">ይህ ሂደት ጥቂት ደቂቃዎች ሊወስድ ይችላል። ምናባዊ ማሽኑን በመጀመር ላይ።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index dca4288d..e22f2ab6 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -3203,7 +3203,6 @@
 <translation id="3275778913554317645">فتح كنافذة</translation>
 <translation id="3277214528693754078">التنقُّل في الصفحة باستخدام مؤشر النص (ميزة "التصفُّح النصي بالمؤشر")</translation>
 <translation id="3277594800340743211">ظل كبير</translation>
-<translation id="3277784185056747463">‏كلمة مرور الجهاز أو كلمة مرور الحساب على Google</translation>
 <translation id="3278001907972365362">‏حسابك (حساباتك) على Google تتطلب الانتباه</translation>
 <translation id="3279092821516760512">يمكن لجهات الاتصال المحدَّدة القريبة منك مشاركة الوسائط معك. ولن تبدأ عمليات النقل إلا عند موافقتك.</translation>
 <translation id="3279230909244266691">قد تستغرق هذه العملية بضع دقائق. جارٍ بدء الآلة الافتراضية.</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 206d5d13..76799ef 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -3209,7 +3209,6 @@
 <translation id="3275778913554317645">ৱিণ্ড’ হিচাপে খোলক</translation>
 <translation id="3277214528693754078">পাঠৰ কাৰ্ছৰডালৰ জৰিয়তে নেভিগে’ট কৰক (caret browsing)</translation>
 <translation id="3277594800340743211">ডাঙৰ ছাঁ</translation>
-<translation id="3277784185056747463">ডিভাইচৰ পাছৱৰ্ড অথবা Google একাউণ্টৰ পাছৱৰ্ড</translation>
 <translation id="3278001907972365362">আপোনাৰ Google একাউণ্ট(সমূহ)ত মনোযোগ দিয়াৰ দৰকাৰ</translation>
 <translation id="3279092821516760512">ওচৰত থাকিলে সম্পৰ্কসূচীত থকা বাছনি কৰা লোকসকলে আপোনাৰ সৈতে শ্বেয়াৰ কৰিব পাৰে। আপুনি গ্ৰহণ নকৰালৈকে স্থানান্তৰণ আৰম্ভ নহ’ব।</translation>
 <translation id="3279230909244266691">এই প্ৰক্ৰিয়াৰ বাবে কিছু সময়ৰ প্ৰয়োজন হ’ব। কোনো ভাৰ্চুৱেল মেচিন আৰম্ভ কৰি থকা হৈছে।</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index cdb4e0b..927321d 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -3197,7 +3197,6 @@
 <translation id="3275778913554317645">Pəncərə kimi açın</translation>
 <translation id="3277214528693754078">Mətn kursoru ilə naviqasiya (klaviatura ilə baxış)</translation>
 <translation id="3277594800340743211">Böyük kölgə</translation>
-<translation id="3277784185056747463">Cihaz parolu və ya Google Hesabı parolu</translation>
 <translation id="3278001907972365362">Google Hesablarına baxın</translation>
 <translation id="3279092821516760512">Seçilmiş kontaktlar yalnız yaxında olduqda sizinlə paylaşa bilər. Siz qəbul etmədən köçürmələr başlamayacaq.</translation>
 <translation id="3279230909244266691">Bir az səbr edin; virtual maşın başladılır.</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index a251d02..e0a68a3 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -3199,7 +3199,6 @@
 <translation id="3275778913554317645">Адкрываць як акно</translation>
 <translation id="3277214528693754078">Ажыццяўляць навігацыю з дапамогай тэкставага курсора (навігацыю клавішамі)</translation>
 <translation id="3277594800340743211">Вялікі цень</translation>
-<translation id="3277784185056747463">Пароль прылады або пароль Уліковага запісу Google</translation>
 <translation id="3278001907972365362">Патрабуе ўвагі ваш Уліковы запіс Google (або некалькі запісаў)</translation>
 <translation id="3279092821516760512">Выбраныя кантакты могуць ажыццяўляць абагульванне даных з вамі, калі знаходзяцца паблізу. Перадача даных не пачнецца, пакуль вы яе не ўхваліце.</translation>
 <translation id="3279230909244266691">Гэты працэс можа заняць некалькі хвілін. Запуск віртуальнай машыны.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 18cf73c7..2479fd0 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -3205,7 +3205,6 @@
 <translation id="3275778913554317645">Отваряне като прозорец</translation>
 <translation id="3277214528693754078">Навигиране чрез текстов курсор (клавишно сърфиране)</translation>
 <translation id="3277594800340743211">Голяма сянка</translation>
-<translation id="3277784185056747463">Парола за устройството или за профила в Google</translation>
 <translation id="3278001907972365362">Профилите ви в Google изискват внимание</translation>
 <translation id="3279092821516760512">Избраните контакти могат да споделят с вас, когато са в близост. Прехвърлянето няма да стартира, докато не се съгласите.</translation>
 <translation id="3279230909244266691">Това може да отнеме няколко минути. Виртуалната машина стартира.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 640fa146..77249aa 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -3210,7 +3210,6 @@
 <translation id="3275778913554317645">উইন্ডো হিসাবে খুলুন</translation>
 <translation id="3277214528693754078">টেক্সট কার্সরের সাহায্যে নেভিগেট করা (ক্যারেট ব্রাউজিং)</translation>
 <translation id="3277594800340743211">বড় শ্যাডো</translation>
-<translation id="3277784185056747463">ডিভাইসের পাসওয়ার্ড বা Google অ্যাকাউন্টের পাসওয়ার্ড</translation>
 <translation id="3278001907972365362">আপনার Google অ্যাকাউন্টের(গুলির) প্রতি নজর দেওয়া দরকার</translation>
 <translation id="3279092821516760512">পরিচিতি তালিকার অন্তর্গত বাছাই করা পরিচিতিগুলি আশেপাশে থাকলে তবেই তারা আপনার সাথে শেয়ার করতে পারবে। আপনি সম্মতি না দেওয়া পর্যন্ত ট্রান্সফার চালু করা যাবে না।</translation>
 <translation id="3279230909244266691">এতে কয়েক মিনিট সময় লাগতে পারে। ভার্চুয়াল মেশিন শুরু করা হচ্ছে।</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index d0f3046a..d229f79 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -3213,7 +3213,6 @@
 <translation id="3275778913554317645">Otvori kao prozor</translation>
 <translation id="3277214528693754078">Navigirajte kursorom teksta (navigacija kursorom)</translation>
 <translation id="3277594800340743211">Velika sjenka</translation>
-<translation id="3277784185056747463">Lozinka uređaja ili lozinka za Google račun</translation>
 <translation id="3278001907972365362">Obratite pažnju na svoj(e) Google račun(e)</translation>
 <translation id="3279092821516760512">Odabrani kontakti mogu dijeliti sadržaj s vama kada su u blizini. Prijenosi neće započeti dok ne prihvatite.</translation>
 <translation id="3279230909244266691">Ovo može potrajati nekoliko minuta. Pokretanje virtualnog uređaja.</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 9bb5c58..e44ee4bd 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -3194,7 +3194,6 @@
 <translation id="3275778913554317645">Obre com a finestra</translation>
 <translation id="3277214528693754078">Navega amb un cursor de text (navegació amb cursor de text)</translation>
 <translation id="3277594800340743211">Ombra gran</translation>
-<translation id="3277784185056747463">Contrasenya del dispositiu o del Compte de Google</translation>
 <translation id="3278001907972365362">Els teus Comptes de Google requereixen atenció</translation>
 <translation id="3279092821516760512">Els contactes seleccionats poden compartir contingut amb tu quan siguis a prop. Les transferències no començaran fins que no les acceptis.</translation>
 <translation id="3279230909244266691">Aquest procés pot tardar uns quants minuts. S'està iniciant la màquina virtual.</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 3f0302b..ab846df8 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -3196,7 +3196,6 @@
 <translation id="3275778913554317645">Otevřít jako okno</translation>
 <translation id="3277214528693754078">Navigovat pomocí textového kurzoru (procházení pomocí kurzoru)</translation>
 <translation id="3277594800340743211">Velký stín</translation>
-<translation id="3277784185056747463">Heslo zařízení nebo heslo účtu Google</translation>
 <translation id="3278001907972365362">Váš účet Google vyžaduje pozornost</translation>
 <translation id="3279092821516760512">Vybrané kontakty s vámi mohou sdílet obsah, když jsou v okolí. Přenosy nezačnou, dokud je nepotvrdíte.</translation>
 <translation id="3279230909244266691">Tento proces může trvat několik minut. Probíhá spouštění virtuálního počítače.</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index 271858a2..63b87b8 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -3211,7 +3211,6 @@
 <translation id="3275778913554317645">Agor fel ffenestr</translation>
 <translation id="3277214528693754078">Llywiwch gyda chyrchwr testun (pori caret)</translation>
 <translation id="3277594800340743211">Cysgod mawr</translation>
-<translation id="3277784185056747463">Cyfrinair dyfais neu gyfrinair Cyfrif Google</translation>
 <translation id="3278001907972365362">Mae angen eich sylw ar eich Cyfrif(on) Google</translation>
 <translation id="3279092821516760512">Gall cysylltiadau a ddewisir rannu â chi pan fyddant gerllaw. Ni fydd trosglwyddiadau yn dechrau nes i chi dderbyn.</translation>
 <translation id="3279230909244266691">Mae'n bosib y bydd y broses hon yn cymryd ychydig funudau. Wrthi'n cychwyn y peiriant rhithwir.</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 4f8c131..14e440e 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -330,7 +330,9 @@
 <translation id="1227660082540388410">Rediger adgangsnøgle</translation>
 <translation id="1227993798763400520">Det lykkedes ikke at caste – prøv igen</translation>
 <translation id="1230417814058465809">Standardbeskyttelse er aktiveret. Du kan øge sikkerheden ved at bruge forbedret beskyttelse.</translation>
+<translation id="1230961867057865279">Siden findes ikke på <ph name="LANGUAGE" /></translation>
 <translation id="1231426483209637778">Vi husker dit netværk, næste gang du bruger <ph name="DEVICE_TYPE" /></translation>
+<translation id="1231489110997683307">Siden findes ikke på <ph name="LANGUAGE" /></translation>
 <translation id="1231572247662419826">Websites kan anmode om tilladelse til at registrere og bruge dit museinput</translation>
 <translation id="1232569758102978740">Unavngivet</translation>
 <translation id="1233497634904001272">Tryk på din sikkerhedsnøgle igen for at fuldføre anmodningen.</translation>
@@ -3210,7 +3212,6 @@
 <translation id="3275778913554317645">Åbn som vindue</translation>
 <translation id="3277214528693754078">Naviger med tekstmarkør (tastenavigation)</translation>
 <translation id="3277594800340743211">Stor skygge</translation>
-<translation id="3277784185056747463">Adgangskoden til enheden eller adgangskoden til Google-kontoen</translation>
 <translation id="3278001907972365362">Din Google-konto kræver handling</translation>
 <translation id="3279092821516760512">Dine valgte kontakter kan dele med dig, når de er i nærheden. Overførsler starter først, når du har accepteret dem.</translation>
 <translation id="3279230909244266691">Denne proces kan tage et par minutter. Den virtuelle maskine startes.</translation>
@@ -8558,6 +8559,7 @@
 <translation id="7212097698621322584">Angiv din aktuelle pinkode for at ændre den. Hvis du ikke kender din pinkode, skal du nulstille sikkerhedsnøglen og derefter oprette en ny pinkode.</translation>
 <translation id="7214047272988222011">Tilladt – <ph name="PERMISSION_DETAILS" />. Aktivér <ph name="LINK_BEGIN" />systemets kameraadgang<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Importér adgangskoder</translation>
+<translation id="7217208603285112910">Ikke tilgængelig på <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">Vil du slette websitedata?</translation>
 <translation id="7219473482981809164">Vi har fundet flere profiler, der kan downloades. Vælg dem, du vil downloade, før du fortsætter.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{Ingen svage adgangskoder}=1{1 svag adgangskode}one{{NUM_WEAK} svag adgangskode}other{{NUM_WEAK} svage adgangskoder}}</translation>
@@ -10119,6 +10121,7 @@
 <translation id="8325413836429495820">Har ikke tilladelse til at se din udklipsholder</translation>
 <translation id="8326478304147373412">PKCS #7, certifikatkæde</translation>
 <translation id="8327386430364625757">Matematisk skrifttype</translation>
+<translation id="8327490658947427005">Ikke tilgængelig på <ph name="LANGUAGE" /></translation>
 <translation id="8327676037044516220">Tilladelser og indstillinger for indhold</translation>
 <translation id="8328228852664998535">Hvis du fortsætter, slettes dine adgangskoder, adgangsnøgler og andre data permanent fra <ph name="BRAND" />. Alle konti, du har oprettet til websites eller apps, slettes ikke.</translation>
 <translation id="8328777765163860529">Luk alt</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 1dff7fc..a8fe4ed7 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -3191,7 +3191,6 @@
 <translation id="3275778913554317645">In neuem Fenster öffnen</translation>
 <translation id="3277214528693754078">Textcursor verwenden (Tastaturnavigation)</translation>
 <translation id="3277594800340743211">Großer Schatten</translation>
-<translation id="3277784185056747463">Gerätepasswort oder Passwort des Google-Kontos</translation>
 <translation id="3278001907972365362">Deine Google-Konten erfordern Aufmerksamkeit</translation>
 <translation id="3279092821516760512">Ausgewählte Kontakte können Daten mit dir teilen, wenn du in der Nähe bist. Die Übertragung beginnt erst, nachdem du die Einladung angenommen hast.</translation>
 <translation id="3279230909244266691">Der Vorgang kann einige Minuten dauern. Virtuelle Maschine wird gestartet.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 53db9ea..be36653 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -3209,7 +3209,6 @@
 <translation id="3275778913554317645">Άνοιγμα σε παράθυρο</translation>
 <translation id="3277214528693754078">Πλοήγηση με δείκτη κειμένου (περιήγηση με σύμβολα προσθήκης)</translation>
 <translation id="3277594800340743211">Μεγάλη σκιά</translation>
-<translation id="3277784185056747463">Κωδικός πρόσβασης συσκευής ή κωδικός πρόσβασης Λογαριασμού Google</translation>
 <translation id="3278001907972365362">Απαιτείται η προσοχή σας σχετικά με τον Λογαριασμό σας Google</translation>
 <translation id="3279092821516760512">Οι επιλεγμένες επαφές μπορούν να μοιραστούν περιεχόμενο μαζί σας όταν βρίσκονται κοντά. Οι μεταφορές δεν θα ξεκινήσουν έως ότου αποδεχτείτε.</translation>
 <translation id="3279230909244266691">Αυτή η διαδικασία μπορεί να διαρκέσει μερικά λεπτά. Έναρξη του εικονικού μηχανήματος.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 16d8e67..972225d8 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -3209,7 +3209,6 @@
 <translation id="3275778913554317645">Open as window</translation>
 <translation id="3277214528693754078">Navigate with text cursor (Caret Browsing)</translation>
 <translation id="3277594800340743211">Large shadow</translation>
-<translation id="3277784185056747463">Device password or Google Account password</translation>
 <translation id="3278001907972365362">Your Google Account(s) need attention</translation>
 <translation id="3279092821516760512">Selected contacts can share with you when nearby. Transfers won't start until you accept.</translation>
 <translation id="3279230909244266691">This process may take a few minutes. Starting the virtual machine.</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index b4d9497..2dc3212 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -3195,7 +3195,6 @@
 <translation id="3275778913554317645">Abrir como ventana</translation>
 <translation id="3277214528693754078">Navegar con el cursor de texto (navegación por cursor de texto)</translation>
 <translation id="3277594800340743211">Sombra grande</translation>
-<translation id="3277784185056747463">Contraseña del dispositivo o de la Cuenta de Google</translation>
 <translation id="3278001907972365362">Tus Cuentas de Google necesitan atención</translation>
 <translation id="3279092821516760512">Ciertos contactos pueden compartir contenido contigo cuando están cerca. Las transferencias no comenzarán hasta que las aceptes.</translation>
 <translation id="3279230909244266691">Este proceso puede demorar unos minutos. Se está iniciando la máquina virtual.</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 56a9f1a..310f785 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -329,7 +329,9 @@
 <translation id="1227660082540388410">Editar clave de acceso</translation>
 <translation id="1227993798763400520">Error al enviar. Vuelve a intentarlo.</translation>
 <translation id="1230417814058465809">La protección estándar está activada. Para navegar con aún más seguridad, usa la protección mejorada.</translation>
+<translation id="1230961867057865279">La página no está en <ph name="LANGUAGE" /></translation>
 <translation id="1231426483209637778">Recordaremos tu red la próxima vez que uses el dispositivo (<ph name="DEVICE_TYPE" />)</translation>
+<translation id="1231489110997683307">La página no está en <ph name="LANGUAGE" /></translation>
 <translation id="1231572247662419826">Los sitios pueden solicitar permiso para capturar y usar la entrada de tu ratón</translation>
 <translation id="1232569758102978740">Sin título</translation>
 <translation id="1233497634904001272">Vuelve a tocar tu llave de seguridad para completar la solicitud.</translation>
@@ -3197,7 +3199,6 @@
 <translation id="3275778913554317645">Abrir como ventana</translation>
 <translation id="3277214528693754078">Desplazarse con el cursor de texto (navegación por cursor de texto)</translation>
 <translation id="3277594800340743211">Sombra grande</translation>
-<translation id="3277784185056747463">Contraseña del dispositivo o de la cuenta de Google</translation>
 <translation id="3278001907972365362">Parece que hay algún problema con tus cuentas de Google</translation>
 <translation id="3279092821516760512">Determinados contactos pueden compartir archivos contigo cuando estéis cerca. Las transferencias no se iniciarán hasta que las aceptes.</translation>
 <translation id="3279230909244266691">Iniciando la máquina virtual. Este proceso puede tardar unos minutos.</translation>
@@ -8540,6 +8541,7 @@
 <translation id="7212097698621322584">Introduce tu PIN actual para cambiarlo. Si no sabes cuál es tu PIN, tendrás que restablecer la llave de seguridad y crear un nuevo PIN.</translation>
 <translation id="7214047272988222011">Permitido (<ph name="PERMISSION_DETAILS" />). Activa el <ph name="LINK_BEGIN" />acceso a la cámara del sistema<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Importar contraseñas</translation>
+<translation id="7217208603285112910">La selección no está en <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">¿Eliminar datos del sitio?</translation>
 <translation id="7219473482981809164">Hemos encontrado varios perfiles disponibles para descargar. Selecciona los que quieras descargar antes de continuar.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{No hay contraseñas poco seguras}=1{1 contraseña poco segura}other{{NUM_WEAK} contraseñas poco seguras}}</translation>
@@ -10102,6 +10104,7 @@
 <translation id="8325413836429495820">No puede ver tu portapapeles</translation>
 <translation id="8326478304147373412">PKCS #7, cadena de certificados</translation>
 <translation id="8327386430364625757">Fuente matemática</translation>
+<translation id="8327490658947427005">La selección no está en <ph name="LANGUAGE" /></translation>
 <translation id="8327676037044516220">Permisos y configuración de contenido</translation>
 <translation id="8328228852664998535">Si continúas, tus contraseñas, llaves de acceso y otros datos se eliminarán de forma permanente de <ph name="BRAND" />. Las cuentas que hayas creado para sitios o aplicaciones no se eliminarán.</translation>
 <translation id="8328777765163860529">Cerrar todo</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 5aa9886..8d715408 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -3200,7 +3200,6 @@
 <translation id="3275778913554317645">Ava aknana</translation>
 <translation id="3277214528693754078">Tekstikursoriga navigeerimine (sisestusmärgiga sirvimine)</translation>
 <translation id="3277594800340743211">Suur vari</translation>
-<translation id="3277784185056747463">Seadme parool või Google'i konto parool</translation>
 <translation id="3278001907972365362">Teie Google'i kontod vajavad tähelepanu</translation>
 <translation id="3279092821516760512">Valitud kontaktid saavad läheduses olles teiega jagada. Ülekandeid ei alustata enne, kui nõusoleku annate.</translation>
 <translation id="3279230909244266691">Protsess võib võtta mõne minuti. Virtuaalset masinat käivitatakse.</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 0eaeda7..ac276f9 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -3194,7 +3194,6 @@
 <translation id="3275778913554317645">Ireki leiho gisa</translation>
 <translation id="3277214528693754078">Nabigatu testu-kurtsorearekin (testu-kurtsorearen bidez arakatzeko eginbidea)</translation>
 <translation id="3277594800340743211">Itzal handia</translation>
-<translation id="3277784185056747463">Gailuko pasahitza edo Google-ko kontuko pasahitza</translation>
 <translation id="3278001907972365362">Google-ko kontuak zure arreta behar du</translation>
 <translation id="3279092821516760512">Zure inguruan daudenean, hautatu dituzun kontaktuek edukia parteka dezakete zurekin. Transferentziak ez dira abiaraziko onartzen dituzun arte.</translation>
 <translation id="3279230909244266691">Baliteke prozesuak minutu batzuk behar izatea. Makina birtuala abiarazten.</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 024de9c..ad838b5 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -3208,7 +3208,6 @@
 <translation id="3275778913554317645">باز کردن به‌عنوان پنجره</translation>
 <translation id="3277214528693754078">پیمایش با مکان‌نمای نوشتار (مرور با هشتک)</translation>
 <translation id="3277594800340743211">سایه بزرگ</translation>
-<translation id="3277784185056747463">‏گذرواژه دستگاه یا گذرواژه «حساب Google»</translation>
 <translation id="3278001907972365362">‏حساب(های) Google شما به توجه نیاز دارد</translation>
 <translation id="3279092821516760512">وقتی مخاطبین انتخابی نزدیک شما باشند می‌توانند با شما هم‌رسانی کنند. تا درخواست را نپذیرید، انتقال شروع نخواهد شد.</translation>
 <translation id="3279230909244266691">این فرایند ممکن است چند دقیقه طول بکشد. درحال شروع دستگاه مجازی.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index ba00858b..3144d75 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -3208,7 +3208,6 @@
 <translation id="3275778913554317645">Avaa ikkunana</translation>
 <translation id="3277214528693754078">Siirry tekstin kohdistimen avulla (näppäimistöselaaminen)</translation>
 <translation id="3277594800340743211">Suuri varjo</translation>
-<translation id="3277784185056747463">Laitteen tai Google-tilin salasana</translation>
 <translation id="3278001907972365362">Google-tilisi vaativat toimenpiteitä</translation>
 <translation id="3279092821516760512">Valitut kontaktit voivat jakaa sinulle sisältöä ollessaan lähistöllä. Siirtoa ei aloiteta ilman hyväksyntääsi.</translation>
 <translation id="3279230909244266691">Tämä voi kestää muutaman minuutin. Käynnistetään virtuaalikonetta.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index f1d9f6e..fd4398c3 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -330,7 +330,9 @@
 <translation id="1227660082540388410">I-edit ang passkey</translation>
 <translation id="1227993798763400520">Hindi na-cast. Pakisubukan ulit.</translation>
 <translation id="1230417814058465809">Naka-on ang standard na proteksyon. Para sa higit pang seguridad, gamitin ang pinahusay na proteksyon.</translation>
+<translation id="1230961867057865279">Hindi Nakasalin sa <ph name="LANGUAGE" /> ang Page</translation>
 <translation id="1231426483209637778">Tatandaan namin ang iyong network sa susunod na gamitin mo ang <ph name="DEVICE_TYPE" /></translation>
+<translation id="1231489110997683307">Hindi nakasalin sa <ph name="LANGUAGE" /> ang page</translation>
 <translation id="1231572247662419826">Puwedeng hilingin ng mga site na i-capture at gamitin ang input ng iyong mouse</translation>
 <translation id="1232569758102978740">Walang pamagat</translation>
 <translation id="1233497634904001272">Pindutin ulit ang iyong security key para kumpletuhin ang kahilingan.</translation>
@@ -3210,7 +3212,6 @@
 <translation id="3275778913554317645">Buksan bilang window</translation>
 <translation id="3277214528693754078">Mag-navigate gamit ang cursor ng text (caret browsing)</translation>
 <translation id="3277594800340743211">Malaking shadow</translation>
-<translation id="3277784185056747463">Password ng device o password ng Google Account</translation>
 <translation id="3278001907972365362">Nangangailangan ng pansin ang iyong (mga) Google Account</translation>
 <translation id="3279092821516760512">Makakapagbahagi sa iyo ang mga piling contact kapag malapit sila. Hindi magsisimula ang mga paglilipat hangga't hindi mo tinatanggap ang mga ito.</translation>
 <translation id="3279230909244266691">Maaaring abutin nang ilang minuto ang prosesong ito. Sinisimulan ang virtual machine.</translation>
@@ -8558,6 +8559,7 @@
 <translation id="7212097698621322584">Ilagay ang kasalukuyan mong PIN para palitan ito. Kung hindi mo alam ang iyong PIN, kakailanganin mong i-reset ang security key, pagkatapos ay gumawa ng bagong PIN.</translation>
 <translation id="7214047272988222011">Pinapayagan – <ph name="PERMISSION_DETAILS" />. I-on ang <ph name="LINK_BEGIN" />access sa camera ng system<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Mag-import ng mga password</translation>
+<translation id="7217208603285112910">Hindi nakasalin sa <ph name="LANGUAGE" /> ang seleksyon</translation>
 <translation id="7219254577985949841">I-delete ang data ng site?</translation>
 <translation id="7219473482981809164">Marami kaming nakitang profile na available na i-download. Piliin ang mga profile na gusto mong i-download bago magpatuloy.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{Walang mahinang password}=1{1 mahinang password}one{{NUM_WEAK} mahinang password}other{{NUM_WEAK} na mahinang password}}</translation>
@@ -10120,6 +10122,7 @@
 <translation id="8325413836429495820">Hindi pinapayagang tingnan ang iyong clipboard</translation>
 <translation id="8326478304147373412">PKCS #7, certificate chain</translation>
 <translation id="8327386430364625757">Mathematical na font</translation>
+<translation id="8327490658947427005">Hindi Nakasalin sa <ph name="LANGUAGE" /> ang Seleksyon</translation>
 <translation id="8327676037044516220">Mga pahintulot at setting ng content</translation>
 <translation id="8328228852664998535">Kung magpapatuloy ka, permanenteng made-delete ang iyong mga password, passkey, at iba pang data sa <ph name="BRAND" />. Hindi made-delete ang anumang account na ginawa mo para sa mga site o app.</translation>
 <translation id="8328777765163860529">Isara Lahat</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index be54e642..e1ad5d8 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -3199,7 +3199,6 @@
 <translation id="3275778913554317645">Ouvrir dans une fenêtre</translation>
 <translation id="3277214528693754078">Naviguer à l'aide du curseur de texte (navigation au clavier)</translation>
 <translation id="3277594800340743211">Grande ombre</translation>
-<translation id="3277784185056747463">Mot de passe de l'appareil ou mot de passe du compte Google</translation>
 <translation id="3278001907972365362">Un ou plusieurs de vos comptes Google nécessitent votre attention</translation>
 <translation id="3279092821516760512">Certains contacts peuvent partager du contenu avec vous lorsqu'ils sont à proximité. Les transferts ne démarreront pas tant que vous ne les autoriserez pas.</translation>
 <translation id="3279230909244266691">Ce processus peut prendre quelques minutes. Démarrage de la machine virtuelle en cours…</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 2bd4ed0..a69c79c 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -3195,7 +3195,6 @@
 <translation id="3275778913554317645">Ouvrir dans une fenêtre</translation>
 <translation id="3277214528693754078">Parcourir avec le curseur de texte (navigation au clavier)</translation>
 <translation id="3277594800340743211">Ombre large</translation>
-<translation id="3277784185056747463">Mot de passe de l'appareil ou du compte Google</translation>
 <translation id="3278001907972365362">Vos comptes Google nécessitent votre attention</translation>
 <translation id="3279092821516760512">Certains contacts peuvent partager du contenu avec vous lorsqu'ils sont à proximité. Les transferts ne démarreront pas tant que vous ne les aurez pas acceptés.</translation>
 <translation id="3279230909244266691">Cette opération peut prendre quelques minutes. Démarrage de la machine virtuelle…</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 5b51a84..d07735e 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -3195,7 +3195,6 @@
 <translation id="3275778913554317645">Abrir como ventá</translation>
 <translation id="3277214528693754078">Navegar co cursor de texto (Navegación por cursor de texto)</translation>
 <translation id="3277594800340743211">Sombra grande</translation>
-<translation id="3277784185056747463">Contrasinal do dispositivo ou contrasinal da Conta de Google</translation>
 <translation id="3278001907972365362">A/s túa/s Conta/s de Google precisan atención</translation>
 <translation id="3279092821516760512">Os contactos seleccionados poden compartir ficheiros contigo cando estean preto. As transferencias non comezarán ata que as aceptes.</translation>
 <translation id="3279230909244266691">Este proceso pode tardar uns minutos. Iniciando a máquina virtual.</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 7ebb9fd..57a2f15 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -3196,7 +3196,6 @@
 <translation id="3275778913554317645">વિંડો તરીકે ખોલો</translation>
 <translation id="3277214528693754078">ટેક્સ્ટ કર્સર વડે નૅવિગેટ કરો (કૅરેટ બ્રાઉઝિંગ)</translation>
 <translation id="3277594800340743211">વિશાળ શૅડો</translation>
-<translation id="3277784185056747463">ડિવાઇસનો પાસવર્ડ કે Google એકાઉન્ટનો પાસવર્ડ</translation>
 <translation id="3278001907972365362">તમારા Google એકાઉન્ટ પર ધ્યાન આપવાની જરૂર છે</translation>
 <translation id="3279092821516760512">નજીકમાં હોય ત્યારે પસંદ કરેલા સંપર્કો તમારી સાથે શેર કરી શકે છે. તમે સ્વીકારશો નહીં ત્યાં સુધી ટ્રાન્સફર શરૂ થઈ શકશે નહીં.</translation>
 <translation id="3279230909244266691">આ પ્રક્રિયામાં થોડો સમય લાગી શકે છે. વર્ચ્યુઅલ મશીન શરૂ કરી રહ્યાં છીએ.</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 18d82af..01d060c4 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -3210,7 +3210,6 @@
 <translation id="3275778913554317645">विंडो के रूप में खोलें</translation>
 <translation id="3277214528693754078">टेक्स्ट कर्सर की मदद से नेविगेट करें (कैरेट ब्राउज़िंग)</translation>
 <translation id="3277594800340743211">बड़ा शैडो</translation>
-<translation id="3277784185056747463">डिवाइस का पासवर्ड या Google खाते का पासवर्ड</translation>
 <translation id="3278001907972365362">आपके Google खाता (खातों) पर ध्यान देना होगा</translation>
 <translation id="3279092821516760512">चुने गए संपर्क, आस-पास होने पर आपके साथ शेयर कर सकते हैं. आपके स्वीकार करने तक ट्रांसफ़र शुरू नहीं होगा.</translation>
 <translation id="3279230909244266691">इस प्रोसेस में कुछ मिनट लग सकते हैं. वर्चुअल मशीन को शुरू किया जा रहा है.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index a29499f..3bf137d 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -3203,7 +3203,6 @@
 <translation id="3275778913554317645">Otvori kao prozor</translation>
 <translation id="3277214528693754078">Krećite se pomoću pokazivača za tekst (pregledavanje kursorom)</translation>
 <translation id="3277594800340743211">Veliko sjenčenje</translation>
-<translation id="3277784185056747463">Zaporka uređaja ili zaporka Google računa</translation>
 <translation id="3278001907972365362">Morate učiniti nešto u vezi sa svojim Google računima</translation>
 <translation id="3279092821516760512">Odabrani kontakti mogu dijeliti s vama kad su u blizini. Prijenosi neće početi prije nego što ih prihvatite.</translation>
 <translation id="3279230909244266691">Taj postupak može potrajati nekoliko minuta. Pokreće se virtualno računalo.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index aa3c596..80869dda 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -3208,7 +3208,6 @@
 <translation id="3275778913554317645">Megnyitás ablakként</translation>
 <translation id="3277214528693754078">Navigálás szövegkurzorral (Caret Browsing)</translation>
 <translation id="3277594800340743211">Nagy árnyék</translation>
-<translation id="3277784185056747463">Eszköz vagy Google-fiók jelszava</translation>
 <translation id="3278001907972365362">Google-fiókjaival kapcsolatban teendői akadtak</translation>
 <translation id="3279092821516760512">A kiválasztott ismerősök tartalmakat oszthatnak meg Önnel, amikor a közelben vannak. Az elfogadásig nem kezdődik meg az átküldés.</translation>
 <translation id="3279230909244266691">Ez a folyamat néhány percet is igénybe vehet. A virtuális gép indítása folyamatban van.</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 698c3fa..bc1ffae 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -3198,7 +3198,6 @@
 <translation id="3275778913554317645">Բացել որպես պատուհան</translation>
 <translation id="3277214528693754078">Նավիգացիա տեքստային նշորդի միջոցով (ակտիվ նշորդի ռեժիմ)</translation>
 <translation id="3277594800340743211">Մեծ շողք</translation>
-<translation id="3277784185056747463">Սարքի կամ Google հաշվի գաղտնաբառը</translation>
 <translation id="3278001907972365362">Google հաշվի համար պահանջվում է գործողություն</translation>
 <translation id="3279092821516760512">Նշված կոնտակտները կարող են տվյալներով կիսվել ձեզ հետ, երբ մոտակայքում են։ Տվյալների փոխանցումը չի սկսվի, մինչև դուք չհաստատեք։</translation>
 <translation id="3279230909244266691">Այս գործընթացը կարող է տևել մի քանի րոպե: Վիրտուալ մեքենան գործարկվում է:</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index fc700c7..9633359 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -329,7 +329,9 @@
 <translation id="1227660082540388410">Edit kunci sandi</translation>
 <translation id="1227993798763400520">Gagal mentransmisikan. Coba lagi.</translation>
 <translation id="1230417814058465809">Perlindungan standar aktif. Untuk keamanan yang lebih baik, gunakan perlindungan yang ditingkatkan.</translation>
+<translation id="1230961867057865279">Halaman Tidak dalam Bahasa <ph name="LANGUAGE" /></translation>
 <translation id="1231426483209637778">Kami akan mengingat jaringan saat Anda kembali menggunakan <ph name="DEVICE_TYPE" /></translation>
+<translation id="1231489110997683307">Halaman tidak dalam bahasa <ph name="LANGUAGE" /></translation>
 <translation id="1231572247662419826">Situs dapat meminta untuk merekam dan menggunakan input mouse Anda</translation>
 <translation id="1232569758102978740">Tanpa Judul</translation>
 <translation id="1233497634904001272">Sentuh kunci keamanan sekali lagi untuk menyelesaikan permintaan.</translation>
@@ -3209,7 +3211,6 @@
 <translation id="3275778913554317645">Buka sebagai jendela</translation>
 <translation id="3277214528693754078">Navigasi dengan kursor teks (penjelajahan dengan keyboard)</translation>
 <translation id="3277594800340743211">Bayangan besar</translation>
-<translation id="3277784185056747463">Sandi perangkat atau sandi Akun Google</translation>
 <translation id="3278001907972365362">Ada yang perlu diperhatikan di Akun Google Anda</translation>
 <translation id="3279092821516760512">Kontak yang dipilih dapat berbagi dengan Anda saat berada di sekitar. Transfer tidak akan dimulai sampai Anda menerimanya.</translation>
 <translation id="3279230909244266691">Proses ini dapat memerlukan waktu beberapa menit. Memulai mesin virtual.</translation>
@@ -8555,6 +8556,7 @@
 <translation id="7212097698621322584">Masukkan PIN saat ini untuk mengubahnya. Jika tidak mengetahui PIN Anda, reset kunci keamanan, lalu buat PIN baru.</translation>
 <translation id="7214047272988222011">Diizinkan – <ph name="PERMISSION_DETAILS" />. Aktifkan <ph name="LINK_BEGIN" />akses kamera sistem<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Impor sandi</translation>
+<translation id="7217208603285112910">Pilihan tidak dalam bahasa <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">Hapus data situs?</translation>
 <translation id="7219473482981809164">Kami menemukan beberapa profil yang tersedia untuk didownload. Pilih salah satu yang ingin Anda download sebelum melanjutkan.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{Tidak ada sandi lemah}=1{1 sandi lemah}other{{NUM_WEAK} sandi lemah}}</translation>
@@ -10116,6 +10118,7 @@
 <translation id="8325413836429495820">Tidak diizinkan melihat papan klip Anda</translation>
 <translation id="8326478304147373412">PKCS #7, rantai sertifikat</translation>
 <translation id="8327386430364625757">Font matematika</translation>
+<translation id="8327490658947427005">Pilihan Tidak dalam Bahasa <ph name="LANGUAGE" /></translation>
 <translation id="8327676037044516220">Izin dan setelan konten</translation>
 <translation id="8328228852664998535">Jika Anda melanjutkan, sandi, kunci sandi, dan data Anda lainnya akan dihapus secara permanen dari <ph name="BRAND" />. Akun apa pun yang Anda buat untuk situs atau aplikasi tidak akan dihapus.</translation>
 <translation id="8328777765163860529">Tutup Semua</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 632ef839..4d451c9 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -3210,7 +3210,6 @@
 <translation id="3275778913554317645">Opna sem glugga</translation>
 <translation id="3277214528693754078">Fletta með textabendli (skoðun með textabendli)</translation>
 <translation id="3277594800340743211">Stór skuggi</translation>
-<translation id="3277784185056747463">Aðgangsorð tækis eða Google-reiknings</translation>
 <translation id="3278001907972365362">Huga þarf að Google reikningnum/reikningunum þínum</translation>
 <translation id="3279092821516760512">Valdir tengiliðir geta deilt með þér þegar þeir eru nálægt. Flutningur hefst ekki fyrr en þú samþykkir.</translation>
 <translation id="3279230909244266691">Þetta ferli gæti tekið nokkrar mínútur. Ræsir sýndarvél.</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index d5a2e7eb..9c9007f 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -272,6 +272,7 @@
 <translation id="1187722533808055681">Riattivazioni</translation>
 <translation id="1188807932851744811">Log non caricato.</translation>
 <translation id="1190086046506744802">Molto larga</translation>
+<translation id="1190155014618058972">Crea una combinazione di tasti personalizzata</translation>
 <translation id="11901918071949011">{NUM_FILES,plural, =1{Accesso a un file memorizzato sul computer}other{Accesso a # file memorizzati sul computer}}</translation>
 <translation id="1190706173655543975">Criteri delle applicazioni Microsoft</translation>
 <translation id="1191353342579061195">Scegli il tema più adatto alle tue esigenze. Per cambiare tema, sfondo, salvaschermo e altro ancora, fai clic con il pulsante destro del mouse sul desktop.</translation>
@@ -1130,6 +1131,7 @@
 <translation id="1794212650797661990">Nascondi password per <ph name="DOMAIN" /></translation>
 <translation id="1794791083288629568">Invia feedback per aiutarci a risolvere questo problema.</translation>
 <translation id="1795214765651529549">Usa classico</translation>
+<translation id="1795438342141780114">Riporta il cursore al centro</translation>
 <translation id="1795668164971917185">La prossima volta che Google Navigazione sicura rileva un download sospetto, lo analizzerà automaticamente come parte della <ph name="LINK" /> che hai scelto</translation>
 <translation id="1796588414813960292">Le funzionalità che richiedono l'audio non funzioneranno</translation>
 <translation id="1797117170091578105">Gioca usando la tastiera di Chromebook. Puoi personalizzare i tasti assegnando loro azioni specifiche.</translation>
@@ -1814,6 +1816,7 @@
 <translation id="2278562042389100163">Apri finestra browser</translation>
 <translation id="2278668501808246459">Avvio del gestore di container</translation>
 <translation id="2280486287150724112">Margine destro</translation>
+<translation id="228059581448666199">Fai clic con il tasto sinistro del mouse</translation>
 <translation id="2281863813036651454">Clic con il tasto sinistro del mouse</translation>
 <translation id="2282146716419988068">Processo GPU</translation>
 <translation id="228293613124499805">La maggior parte dei siti che visiti probabilmente salva dati sul dispositivo, spesso per migliorare la tua esperienza salvando le tue preferenze o le informazioni che condividi con i siti stessi. Ti consigliamo di mantenere questa impostazione attiva.</translation>
@@ -3198,7 +3201,6 @@
 <translation id="3275778913554317645">Apri come finestra</translation>
 <translation id="3277214528693754078">Naviga con il cursore di testo (navigazione con cursore)</translation>
 <translation id="3277594800340743211">Ombra grande</translation>
-<translation id="3277784185056747463">Password del dispositivo o password dell'Account Google</translation>
 <translation id="3278001907972365362">I tuoi Account Google richiedono la tua attenzione</translation>
 <translation id="3279092821516760512">I contatti selezionati possono condividere contenuti con te quando sono nelle vicinanze. I trasferimenti non inizieranno finché non accetti.</translation>
 <translation id="3279230909244266691">Questa procedura potrebbe richiedere alcuni minuti. Avvio della macchina virtuale in corso.</translation>
@@ -4708,6 +4710,7 @@
 <translation id="4359408040881008151">Installata a causa di estensioni dipendenti.</translation>
 <translation id="4359717112757026264">Cityscape</translation>
 <translation id="4359809482106103048">Riepilogo sulla sicurezza</translation>
+<translation id="4360738659108163902">Fai clic con il tasto destro del mouse</translation>
 <translation id="4361142739114356624">La chiave privata per il certificato client manca o non è valida</translation>
 <translation id="4361745360460842907">Apri in una scheda</translation>
 <translation id="4362675504017386626"><ph name="ACCOUNT_EMAIL" /> è l'account predefinito sul tuo <ph name="DEVICE_TYPE" /></translation>
@@ -5336,6 +5339,7 @@
 <translation id="482952334869563894">Dispositivi USB del fornitore <ph name="VENDOR_ID" /></translation>
 <translation id="4830502475412647084">Installazione dell'aggiornamento del sistema operativo in corso</translation>
 <translation id="4831226137013573603">disattivazione dell'audio del microfono</translation>
+<translation id="483262387981411190">Metti in pausa o riprendi il controllo del volto</translation>
 <translation id="4833683849865011483">1 stampante trovata sul server di stampa</translation>
 <translation id="4835598628985424375">Protendi insieme le labbra</translation>
 <translation id="4835677468087803981">Nascondi il PIN</translation>
@@ -5896,6 +5900,7 @@
 <translation id="5240931875940563122">Accedi con uno smartphone Android</translation>
 <translation id="5242724311594467048">Attivare "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Riprova tra qualche istante</translation>
+<translation id="5243752692914402705">Quando attivi la modalità di scorrimento, muovi la testa nella direzione in cui vuoi scorrere</translation>
 <translation id="5244234799035360187">OneDrive comparirà ora nell'app File</translation>
 <translation id="5244466461749935369">Mantieni per ora</translation>
 <translation id="5244474230056479698">Sincronizzazione con <ph name="EMAIL" /></translation>
@@ -6645,6 +6650,7 @@
 <translation id="5805697420284793859">Gestione finestre</translation>
 <translation id="5806447147478173900">Spazio di archiviazione totale usato dai siti visualizzati: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5806773519584576205">0° (valore predefinito)</translation>
+<translation id="5807774529265708172">Mostra o nascondi la tastiera sullo schermo</translation>
 <translation id="5809835394668218762">Altre azioni per <ph name="WEBSITE" /></translation>
 <translation id="5809840528400421362">Il PIN deve contenere 6 cifre</translation>
 <translation id="5810809306422959727">Questo account non è idoneo per la funzionalità Controllo genitori</translation>
@@ -6838,6 +6844,7 @@
 <translation id="5945002094477276055">Il file <ph name="FILE_NAME" /> potrebbe essere pericoloso. Inviare a Google Navigazione sicura per la scansione?</translation>
 <translation id="5945363896952315544">Impossibile memorizzare altre impronte sul token di sicurezza. Per aggiungere una nuova impronta, devi prima eliminarne una esistente.</translation>
 <translation id="5946591249682680882">ID report <ph name="WEBRTC_LOG_REPORT_ID" /></translation>
+<translation id="5947651424015173580">Fai doppio clic con il tasto sinistro del mouse</translation>
 <translation id="5948476936444935795">Annulla importazione</translation>
 <translation id="5948536763493709626">Collega una tastiera o un mouse oppure continua la configurazione usando il touchscreen. Se usi dispositivi Bluetooth, assicurati che siano pronti per essere accoppiati.</translation>
 <translation id="5949544233750246342">Impossibile analizzare il file</translation>
@@ -9589,6 +9596,7 @@
 <translation id="7958828865373988933">Se vuoi creare una passkey per <ph name="APP_NAME" /> su un token di sicurezza USB, inserisci il token e toccalo ora</translation>
 <translation id="7959074893852789871">Il file conteneva più certificati, alcuni dei quali non sono stati importati:</translation>
 <translation id="7959665254555683862">Nuova scheda di navigazione in incognito</translation>
+<translation id="7960540720012720106">Apri la panoramica delle finestre</translation>
 <translation id="7961015016161918242">Mai</translation>
 <translation id="7963001036288347286">Accelerazione del touchpad</translation>
 <translation id="7963513503134856713">Finestra spostata a destra</translation>
@@ -9668,6 +9676,7 @@
 <translation id="8014154204619229810">Lo strumento di aggiornamento è in esecuzione. Aggiorna tra un minuto per ricontrollare.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> non riesce a tornare alla versione precedente installata. Prova a eseguire il Powerwash del dispositivo.</translation>
 <translation id="8015565302826764056">{NUM_OF_FILES,plural, =1{1 file copiato}other{{NUM_OF_FILES} file copiati}}</translation>
+<translation id="8017004049696748317">Avvia o interrompi la dettatura</translation>
 <translation id="8017176852978888182">Directory condivise di Linux</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Scorciatoia modificata</translation>
@@ -9682,6 +9691,7 @@
 <translation id="8025291188699172126">Informazioni sugli aggiornamenti</translation>
 <translation id="8026471514777758216">Tutti i tuoi dispositivi</translation>
 <translation id="8026784703228858744">Salva i tuoi preferiti e altro ancora con la sincronizzazione</translation>
+<translation id="8027325966409484573">{NUM_DAYS,plural, =0{Visitato 0 giorni fa}=1{Visitato 1 giorno fa}other{Visitato # giorni fa}}</translation>
 <translation id="8028060951694135607">Recupero chiavi Microsoft</translation>
 <translation id="8028803902702117856">Download in corso di <ph name="SIZE" />, <ph name="FILE_NAME" /></translation>
 <translation id="8028993641010258682">Dimensioni</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 15092e6..3f087732 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -3208,7 +3208,6 @@
 <translation id="3275778913554317645">פתיחה כחלון</translation>
 <translation id="3277214528693754078">ניווט באמצעות סמן הטקסט (דפדוף עם סמן הטקסט)</translation>
 <translation id="3277594800340743211">צל גדול</translation>
-<translation id="3277784185056747463">‏סיסמת המכשיר או הסיסמה לחשבון Google</translation>
 <translation id="3278001907972365362">‏כדאי לבדוק אם צריך לבצע פעולה כלשהי בחשבונות Google שלך</translation>
 <translation id="3279092821516760512">אנשי הקשר שנבחרו יוכלו לשתף איתך כשהם יימצאו בקרבת מקום. תהליך ההעברה לא יתחיל לפני שיתקבל ממך אישור.</translation>
 <translation id="3279230909244266691">הפעולה עשויה להימשך מספר דקות. מתבצעת הפעלה של המכונה הווירטואלית.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index c045bf4..0f409fec 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -329,7 +329,9 @@
 <translation id="1227660082540388410">パスキーの編集</translation>
 <translation id="1227993798763400520">キャストできませんでした。もう一度お試しください。</translation>
 <translation id="1230417814058465809">標準保護機能がオンになっています。セキュリティをさらに強化するには、保護強化機能を使用してください。</translation>
+<translation id="1230961867057865279">ページが <ph name="LANGUAGE" /> ではない場合</translation>
 <translation id="1231426483209637778">次回 <ph name="DEVICE_TYPE" /> を使用するときにご利用のネットワークが表示されます。</translation>
+<translation id="1231489110997683307">ページが <ph name="LANGUAGE" /> ではない場合</translation>
 <translation id="1231572247662419826">サイトがマウス入力の取得と使用を要求できるようにする</translation>
 <translation id="1232569758102978740">無題</translation>
 <translation id="1233497634904001272">リクエストを完了するには、セキュリティ キーをもう一度タップしてください。</translation>
@@ -3188,7 +3190,6 @@
 <translation id="3275778913554317645">ウィンドウとして開く</translation>
 <translation id="3277214528693754078">テキスト カーソルを使って移動する(カーソル ブラウジング)</translation>
 <translation id="3277594800340743211">大きいシャドウ</translation>
-<translation id="3277784185056747463">デバイスのパスワードまたは Google アカウントのパスワード</translation>
 <translation id="3278001907972365362">お使いの Google アカウントは対応が必要です</translation>
 <translation id="3279092821516760512">近くにいる連絡先のうち、選択した人があなたと共有できます。許可するまで転送は行われません。</translation>
 <translation id="3279230909244266691">この処理には数分かかることがあります。仮想マシンを起動します。</translation>
@@ -8525,6 +8526,7 @@
 <translation id="7212097698621322584">PIN を変更するには、現在の PIN を入力してください。PIN がわからない場合は、セキュリティ キーをリセットしたうえで新しい PIN を作成する必要があります。</translation>
 <translation id="7214047272988222011">許可 – <ph name="PERMISSION_DETAILS" />。<ph name="LINK_BEGIN" />システムのカメラへのアクセス<ph name="LINK_END" />をオンにする。</translation>
 <translation id="721490496276866468">パスワードをインポート</translation>
+<translation id="7217208603285112910">選択内容が <ph name="LANGUAGE" /> ではない場合</translation>
 <translation id="7219254577985949841">サイトデータを削除しますか?</translation>
 <translation id="7219473482981809164">ダウンロード可能なプロファイルが複数見つかりました。続行する前に、ダウンロードするプロファイルを選択してください。</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{脆弱なパスワードはありません}=1{脆弱なパスワード: 1 件}other{脆弱なパスワード: {NUM_WEAK} 件}}</translation>
@@ -10085,6 +10087,7 @@
 <translation id="8325413836429495820">クリップボードの読み取りを許可しないサイト</translation>
 <translation id="8326478304147373412">PKCS #7、証明書チェーン</translation>
 <translation id="8327386430364625757">数字フォント</translation>
+<translation id="8327490658947427005">選択内容が <ph name="LANGUAGE" /> ではない場合</translation>
 <translation id="8327676037044516220">権限とコンテンツの設定</translation>
 <translation id="8328228852664998535">続行すると、パスワードやパスキーなどのデータが <ph name="BRAND" /> から完全に削除されます。サイトやアプリで作成したアカウントは削除されません。</translation>
 <translation id="8328777765163860529">すべて閉じる</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 8bc8cbf0..1ab27af2 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -3198,7 +3198,6 @@
 <translation id="3275778913554317645">გახსნა ფანჯარაში</translation>
 <translation id="3277214528693754078">ტექსტური კურსორით ნავიგაცია (კურსორით დათვალიერება)</translation>
 <translation id="3277594800340743211">დიდი ჩრდილი</translation>
-<translation id="3277784185056747463">მოწყობილობის ან Google ანგარიშის პაროლი</translation>
 <translation id="3278001907972365362">თქვენი Google ანგარიშ(ებ)ი საჭიროებს ყურადღებას</translation>
 <translation id="3279092821516760512">არჩეულ კონტაქტებს შეეძლებათ კონტენტის თქვენთვის გაზიარება, როცა ახლომახლო იქნებიან. მონაცემთა გადაცემა არ დაიწყება, სანამ არ დაეთანხმებით.</translation>
 <translation id="3279230909244266691">მიმდინარეობს ვირტუალური მოწყობილობის გაშვება, რასაც შეიძლება რამდენიმე წუთი დასჭირდეს.</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 402cd46..1c9f8aec 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -3191,7 +3191,6 @@
 <translation id="3275778913554317645">Терезе ретінде ашу</translation>
 <translation id="3277214528693754078">Мәтін курсорымен қозғалу (белсенді курсор режимі)</translation>
 <translation id="3277594800340743211">Үлкен көлеңке</translation>
-<translation id="3277784185056747463">Құрылғы құпия сөзі немесе Google аккаунтының құпия сөзі</translation>
 <translation id="3278001907972365362">Google аккаунттарыңызды тексеріңіз</translation>
 <translation id="3279092821516760512">Таңдалған контактілер маңайда болған кезде, сізбен бөлісе алады. Сіз қабылдамайынша, тасымалдау басталмайды.</translation>
 <translation id="3279230909244266691">Бұл процесс бірнеше минутқа созылуы мүмкін. Виртуалдық құрылғы іске қосылуда.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index a54e018..7544b59 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -3212,7 +3212,6 @@
 <translation id="3275778913554317645">បើកជាផ្ទាំង</translation>
 <translation id="3277214528693754078">រុករក​ដោយ​ប្រើ​ទស្សន៍ទ្រនិច​អក្សរ (caret browsing)</translation>
 <translation id="3277594800340743211">ស្រមោល​ធំ</translation>
-<translation id="3277784185056747463">ពាក្យ​សម្ងាត់​ឧបករណ៍ ឬ​ពាក្យសម្ងាត់​គណនី Google</translation>
 <translation id="3278001907972365362">គណនី Google របស់អ្នកត្រូវការ​ការយកចិត្តទុកដាក់</translation>
 <translation id="3279092821516760512">ទំនាក់ទំនងដែលបានជ្រើសរើស​អាចចែករំលែក​ជាមួយអ្នក នៅពេលនៅជិត។ ការផ្ទេរ​នឹងមិនចាប់ផ្ដើមទេ រហូតទាល់តែ​អ្នកយល់ព្រម។</translation>
 <translation id="3279230909244266691">ដំណើរការ​នេះ​អាចចំណាយពេល​ពីរបីនាទី។ កំពុង​ចាប់ផ្ដើម​ម៉ាស៊ីន​និម្មិត។</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 09452cd..2f9ab19 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3205,7 +3205,6 @@
 <translation id="3275778913554317645">ವಿಂಡೊ ಅಂತೆ ತೆರೆಯಿರಿ</translation>
 <translation id="3277214528693754078">ಪಠ್ಯ ಕರ್ಸರ್‌ನೊಂದಿಗೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ (ಕೆರೆಟ್ ಬ್ರೌಸಿಂಗ್)</translation>
 <translation id="3277594800340743211">ದೊಡ್ಡ ಶ್ಯಾಡೋ</translation>
-<translation id="3277784185056747463">ಸಾಧನದ ಪಾಸ್‌ವರ್ಡ್ ಅಥವಾ Google ಖಾತೆಯ ಪಾಸ್‌ವರ್ಡ್</translation>
 <translation id="3278001907972365362">ನಿಮ್ಮ Google ಖಾತೆಗಳ ಮೇಲೆ ಗಮನಹರಿಸಬೇಕಿದೆ</translation>
 <translation id="3279092821516760512">ಆಯ್ಕೆಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು ಸಮೀಪದಲ್ಲಿರುವಾಗ ನಿಮ್ಮ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಬಹುದು. ನೀವು ಸಮ್ಮತಿಸುವವರೆಗೆ ವರ್ಗಾವಣೆಗಳು ಪ್ರಾರಂಭವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="3279230909244266691">ಈ ಪ್ರಕ್ರಿಯೆಯು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ.</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 6cabc789..13760833 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3213,7 +3213,6 @@
 <translation id="3275778913554317645">창으로 열기</translation>
 <translation id="3277214528693754078">텍스트 커서로 이동(캐럿 브라우징)</translation>
 <translation id="3277594800340743211">큰 음영</translation>
-<translation id="3277784185056747463">기기 비밀번호 또는 Google 계정 비밀번호</translation>
 <translation id="3278001907972365362">Google 계정에 주의가 필요합니다.</translation>
 <translation id="3279092821516760512">선택한 연락처의 사용자가 근처에 있는 경우 나와 공유할 수 있습니다. 내가 수락하지 않으면 전송이 시작되지 않습니다.</translation>
 <translation id="3279230909244266691">이 과정은 몇 분 정도 소요될 수 있습니다. 가상 머신을 시작합니다.</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 7c718cd..09fb6b7 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -272,6 +272,7 @@
 <translation id="1187722533808055681">Сенек мезгилинде ойготуу</translation>
 <translation id="1188807932851744811">Таржымал жүктөлүп берилген жок.</translation>
 <translation id="1190086046506744802">Саптардын аралыгы өтө алыс</translation>
+<translation id="1190155014618058972">Ыңгайлаштырылган ачкыч айкалышын түзүү</translation>
 <translation id="11901918071949011">{NUM_FILES,plural, =1{Компьютериңизде сакталган файлга кирүү}other{Компьютериңизде сакталган # файлга кирүү}}</translation>
 <translation id="1190706173655543975">Microsoft'тун Колдонмолор эрежелери</translation>
 <translation id="1191353342579061195">Өзүңүзгө ыңгайлуу теманы тандаңыз. Теманы, тушкагазды, көшөгөнү жана башкаларды өзгөртүү үчүн жөн гана иш тактада чычкандын оң баскычын басыңыз.</translation>
@@ -1137,6 +1138,7 @@
 <translation id="1794212650797661990"><ph name="DOMAIN" /> сырсөзүн жашыруу</translation>
 <translation id="1794791083288629568">Бул көйгөйдү оңдоого жардам берүү үчүн пикириңизди билдириңиз.</translation>
 <translation id="1795214765651529549">Классикалык теманы колдонуу</translation>
+<translation id="1795438342141780114">Курсорду борборго кайра коюңуз</translation>
 <translation id="1795668164971917185">Кийинки жолу Google Коопсуз серептөө шектүү жүктөп алынган файлды тапканда, ал сиз тандаган <ph name="LINK" /> бир бөлүгү катары аны автоматтык түрдө скандайт</translation>
 <translation id="1796588414813960292">Добушту колдонгон функциялар иштебей калат</translation>
 <translation id="1797117170091578105">Chromebook баскычтобун колдонуп ойноңуз. Баскычтарды белгилүү бир аракеттерге ыңгайлаштыра аласыз.</translation>
@@ -1825,6 +1827,7 @@
 <translation id="2278562042389100163">Серепчи терезесин ачуу</translation>
 <translation id="2278668501808246459">Контейнерди башкаруучу иштетилип баштады</translation>
 <translation id="2280486287150724112">Оң жактагы чек</translation>
+<translation id="228059581448666199">Чычкандын сол баскычын чыкылдатыңыз</translation>
 <translation id="2281863813036651454">Чычкандын сол баскычын чыкылдатуу</translation>
 <translation id="2282146716419988068">GPU процесси</translation>
 <translation id="228293613124499805">Сиз баш баккан сайттардын көпчүлүгү параметрлериңизди же сайт менен бөлүшкөн маалыматыңызды түзмөгүңүзгө сакташы мүмкүн. Бул көбүнчө кызматты жакшыртуу максатында аткарылат. Бул параметрди күйүк бойдон калтырууну сунуштайбыз.</translation>
@@ -3209,7 +3212,6 @@
 <translation id="3275778913554317645">Терезе катары ачуу</translation>
 <translation id="3277214528693754078">Тексттеги курсор менен өтүү (caret серептөөсү)</translation>
 <translation id="3277594800340743211">Чоң көлөкө</translation>
-<translation id="3277784185056747463">Түзмөктүн сырсөзү же Google аккаунтунун сырсөзү</translation>
 <translation id="3278001907972365362">Google аккаунттарыңызды карап чыгыңыз</translation>
 <translation id="3279092821516760512">Тандалган байланыштар жакын жерде болгондо, сиз менен ар кандай нерселерди бөлүшө алышат. Алар сиздин макулдугуңуз менен гана өткөрүлө баштайт.</translation>
 <translation id="3279230909244266691">Бир нече мүнөткө созулушу мүмкүн. Виртуалдык машина иштетилип баштады.</translation>
@@ -4719,6 +4721,7 @@
 <translation id="4359408040881008151">Көз каранды кеңейтүү(лөр)дөн улам орноту Installed because of dependent extension(s).</translation>
 <translation id="4359717112757026264">Шаар пейзажы</translation>
 <translation id="4359809482106103048">Коопсуздук тууралуу жалпы маалымат</translation>
+<translation id="4360738659108163902">Чычкандын оң баскычын чыкылдатыңыз</translation>
 <translation id="4361142739114356624">Бул Кардар тастыктамасынын Купуя ачкычы жок же жараксыз</translation>
 <translation id="4361745360460842907">Өтмөк катары ачуу</translation>
 <translation id="4362675504017386626"><ph name="ACCOUNT_EMAIL" /> <ph name="DEVICE_TYPE" /> түзмөгүңүздө демейки аккаунт</translation>
@@ -5348,6 +5351,7 @@
 <translation id="482952334869563894"><ph name="VENDOR_ID" /> камсыздаган USB түзмөктөр</translation>
 <translation id="4830502475412647084"> OS жаңырууда</translation>
 <translation id="4831226137013573603">микрофондун үнүн басуу</translation>
+<translation id="483262387981411190">Жүз көзөмөлдөөсүн тындыруу же улантуу</translation>
 <translation id="4833683849865011483">Басып чыгаруу серверинен 1 принтер табылды</translation>
 <translation id="4835598628985424375">Эриндерди кысып, бырыштыруу</translation>
 <translation id="4835677468087803981">PIN кодду жашыруу</translation>
@@ -5908,6 +5912,7 @@
 <translation id="5240931875940563122">Android телефону менен кирүү</translation>
 <translation id="5242724311594467048">"<ph name="EXTENSION_NAME" />" иштетилсинби?</translation>
 <translation id="5243522832766285132">Бир аздан кийин кайталап көрүңүз</translation>
+<translation id="5243752692914402705">Сыдыруу режимин баштагандан кийин, башыңызды сыдыргыңыз келген тарапка жылдырыңыз</translation>
 <translation id="5244234799035360187">OneDrive эми Файлдар колдонмосунда көрүнөт</translation>
 <translation id="5244466461749935369">Азырынча орнотулган бойдон калсын</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> менен шайкештирилүүдө</translation>
@@ -6659,6 +6664,7 @@
 <translation id="5805697420284793859">Терезе башкаргычы</translation>
 <translation id="5806447147478173900">Көрсөтүлгөн сайттар ээлеген жалпы орун: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5806773519584576205">0° (Демейки)</translation>
+<translation id="5807774529265708172">Экрандагы баскычтопту көрсөтүү же жашыруу</translation>
 <translation id="5809835394668218762"><ph name="WEBSITE" /> боюнча башка аракеттер</translation>
 <translation id="5809840528400421362">PIN код 6 сандан турушу керек</translation>
 <translation id="5810809306422959727">Бул аккаунтта Ата-эненин көзөмөлүн колдонууга болбойт</translation>
@@ -6852,6 +6858,7 @@
 <translation id="5945002094477276055"><ph name="FILE_NAME" /> кооптуу болушу мүмкүн. Текшерүү үчүн Google Коопсуз серептөөгө жөнөтүлсүнбү?</translation>
 <translation id="5945363896952315544">Коопсуздук ачкычыңызда орун жетишсиз. Жаңы манжа изин кошуу үчүн алгач учурдагысын өчүрүңүз.</translation>
 <translation id="5946591249682680882">Кабарлоо ID <ph name="WEBRTC_LOG_REPORT_ID" /></translation>
+<translation id="5947651424015173580">Чычканды эки жолу чыкылдатыңыз</translation>
 <translation id="5948476936444935795">Өткөрүп алууну жокко чыгаруу</translation>
 <translation id="5948536763493709626">Баскычтопту же чычканды туташтырыңыз, же болбосо сенсордук экран аркылуу жөндөй бериңиз. Bluetooth түзмөктөрүн колдонуп жатсаңыз, түзмөктөрүңүз жупташтырууга даяр экенин текшериңиз.</translation>
 <translation id="5949544233750246342">Файл талданбай жатат</translation>
@@ -9602,6 +9609,7 @@
 <translation id="7958828865373988933">Эгер <ph name="APP_NAME" /> үчүн киргизүүчү ачкычты USB коопсуздук ачкычында түзгүңүз келсе, аны азыр сайып, ага тийип коюңуз</translation>
 <translation id="7959074893852789871">Файлда бир нече тастыктама камтылган, алардын айрымдары импорттолгон жок:</translation>
 <translation id="7959665254555683862">Жаңы жашыруун &amp;өтмөк</translation>
+<translation id="7960540720012720106">Терезелер тууралуу жалпы маалыматты ачуу</translation>
 <translation id="7961015016161918242">Эч качан</translation>
 <translation id="7963001036288347286">Тийме тактасынын ылдамдаткычы</translation>
 <translation id="7963513503134856713">Терезе оңго жылдырылды</translation>
@@ -9681,6 +9689,7 @@
 <translation id="8014154204619229810">Учурда жаңырткыч иштетилүүдө. Кайра текшерүү үчүн бир мүнөттөн кийин жаңылаңыз.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> буга чейин орнотулган версияга кайта албайт. Түзмөгүңүздү дагы бир жолу "жууп" көрүңүз.</translation>
 <translation id="8015565302826764056">{NUM_OF_FILES,plural, =1{1 файл көчүрүлдү}other{{NUM_OF_FILES} файл көчүрүлдү}}</translation>
+<translation id="8017004049696748317">Текстти айтып терүү/киргизүүнү баштоо же токтотуу</translation>
 <translation id="8017176852978888182">Linux'тун бөлүшүлгөн каталогдору</translation>
 <translation id="8017679124341497925">Кыска жол түзөтүлдү</translation>
 <translation id="8018298733481692628">Бул профиль жок кылынсынбы?</translation>
@@ -9694,6 +9703,7 @@
 <translation id="8025291188699172126">Жаңыртуулар тууралуу</translation>
 <translation id="8026471514777758216">Бардык түзмөктөрүңүздө</translation>
 <translation id="8026784703228858744">Шайкештирүү менен кыстармаларды, сырсөздөрдү жана башкаларды сактаңыз</translation>
+<translation id="8027325966409484573">{NUM_DAYS,plural, =0{0 күн мурун болгонсуз}=1{1 күн мурун болгонсуз}other{# күн мурун болгонсуз}}</translation>
 <translation id="8028060951694135607">Microsoft Ачкычты калыбына келтирүү</translation>
 <translation id="8028803902702117856"><ph name="SIZE" />, <ph name="FILE_NAME" /> жүктөлүп алынууда</translation>
 <translation id="8028993641010258682">Өлчөм</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 1cad388..880e2ba 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -3213,7 +3213,6 @@
 <translation id="3275778913554317645">ເປີດເປັນໜ້າຕ່າງ</translation>
 <translation id="3277214528693754078">ນໍາທາງດ້ວຍເຄີເຊີຂໍ້ຄວາມ (ການຮຽກເບິ່ງດ້ວຍແປ້ນພິມ)</translation>
 <translation id="3277594800340743211">ເງົາຂະໜາດໃຫຍ່</translation>
-<translation id="3277784185056747463">ລະຫັດຜ່ານອຸປະກອນ ຫຼື ລະຫັດຜ່ານບັນຊີ Google</translation>
 <translation id="3278001907972365362">ບັນຊີ Google ຂອງທ່ານຕ້ອງການການດຳເນີນການ</translation>
 <translation id="3279092821516760512">ລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ເລືອກສາມາດແບ່ງປັນກັບທ່ານໄດ້ເມື່ອຢູ່ໃກ້ຄຽງ. ການໂອນຍ້າຍຈະບໍ່ເລີ່ມຂຶ້ນຈົນກວ່າທ່ານຍອມຮັບ.</translation>
 <translation id="3279230909244266691">ຂະບວນການນີ້ອາດຈະໃຊ້ເວລາສອງສາມນາທີ. ໂດຍເລີ່ມຈາກເຄື່ອງຈຳລອງສະເໝືອນຈິງ.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index b2965585..e0a038c 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -272,6 +272,7 @@
 <translation id="1187722533808055681">Neaktyvumo režimo nutraukimo veiksmai</translation>
 <translation id="1188807932851744811">Žurnalas neįkeltas.</translation>
 <translation id="1190086046506744802">Labai laisvas</translation>
+<translation id="1190155014618058972">Sukurti tinkintą klavišų derinį</translation>
 <translation id="11901918071949011">{NUM_FILES,plural, =1{Suteikta prieiga prie kompiuteryje saugomo failo}one{Suteikta prieiga prie # kompiuteryje saugomo failo}few{Suteikta prieiga prie # kompiuteryje saugomų failų}many{Suteikta prieiga prie # kompiuteryje saugomo failo}other{Suteikta prieiga prie # kompiuteryje saugomų failų}}</translation>
 <translation id="1190706173655543975">„Microsoft“ programų politika</translation>
 <translation id="1191353342579061195">Pasirinkite jūsų poreikius atitinkančią temą. Jei norite pakeisti temą, ekrano foną, ekrano užsklandą ir kt., tiesiog dešiniuoju pelės klavišu spustelėkite darbalaukį.</translation>
@@ -332,7 +333,9 @@
 <translation id="1227660082540388410">„Passkey“ redagavimas</translation>
 <translation id="1227993798763400520">Nepavyko perduoti. Bandykite dar kartą.</translation>
 <translation id="1230417814058465809">Įprasta apsauga įjungta. Jei norite apsisaugoti dar labiau, naudokite sustiprintą apsaugą.</translation>
+<translation id="1230961867057865279">Puslapio kalba nėra <ph name="LANGUAGE" /></translation>
 <translation id="1231426483209637778">Įsiminsime jūsų tinklą, kai kitą kartą naudosite „<ph name="DEVICE_TYPE" />“</translation>
+<translation id="1231489110997683307">Puslapio kalba nėra <ph name="LANGUAGE" /></translation>
 <translation id="1231572247662419826">Svetainėse gali būti prašoma užfiksuoti ir naudoti pelės įvestį</translation>
 <translation id="1232569758102978740">Be pavadinimo</translation>
 <translation id="1233497634904001272">Norėdami baigti užklausą dar kartą palieskite saugos raktą.</translation>
@@ -1140,6 +1143,7 @@
 <translation id="1794212650797661990">Slėpti <ph name="DOMAIN" /> slaptažodį</translation>
 <translation id="1794791083288629568">Atsiųskite atsiliepimų, kad padėtumėte mums išspręsti šią problemą.</translation>
 <translation id="1795214765651529549">Naudoti klasikinę</translation>
+<translation id="1795438342141780114">Iš naujo nustatyti žymeklį į centrą</translation>
 <translation id="1795668164971917185">Kai kitą kartą „Google“ saugaus naršymo funkcija aptiks įtartiną atsisiuntimą, ji automatiškai nuskaitys jį taikydama <ph name="LINK" /></translation>
 <translation id="1796588414813960292">Funkcijos, kurioms reikalingas garsas, neveiks</translation>
 <translation id="1797117170091578105">Žaiskite naudodami „Chromebook“ klaviatūrą. Galite tinkinti konkrečių veiksmų klavišus.</translation>
@@ -1828,6 +1832,7 @@
 <translation id="2278562042389100163">Atidaryti naršyklės langą</translation>
 <translation id="2278668501808246459">Paleidžiama sudėtinių rodinių tvarkytuvė</translation>
 <translation id="2280486287150724112">Dešinioji paraštė</translation>
+<translation id="228059581448666199">Paspausti kairiuoju pelės klavišu</translation>
 <translation id="2281863813036651454">Paspaudimas kairiuoju pelės klavišu</translation>
 <translation id="2282146716419988068">GPU procesas</translation>
 <translation id="228293613124499805">Paprastai dauguma svetainių, kuriose lankotės, išsaugo duomenis įrenginyje, pvz., išsaugo jūsų nuostatas ar informaciją, kurią bendrinate su svetaine, kad jums būtų patogiau naudotis svetainių funkcijomis. Rekomenduojame palikti šį nustatymą įjungtą.</translation>
@@ -3212,7 +3217,6 @@
 <translation id="3275778913554317645">Atidaryti kaip langą</translation>
 <translation id="3277214528693754078">Naršymas naudojant teksto žymeklį („Caret Browsing“)</translation>
 <translation id="3277594800340743211">Didelis šešėlis</translation>
-<translation id="3277784185056747463">Įrenginio slaptažodis arba „Google“ paskyros slaptažodis</translation>
 <translation id="3278001907972365362">Reikia atkreipti dėmesį į „Google“ paskyrą (-as)</translation>
 <translation id="3279092821516760512">Pasirinkti kontaktai gali bendrinti su jumis, kai būna netoliese. Perdavimai nebus pradėti, kol nesutiksite.</translation>
 <translation id="3279230909244266691">Šis procesas gali užtrukti kelias minutes. Paleidžiamas virtualus įrenginys.</translation>
@@ -4722,6 +4726,7 @@
 <translation id="4359408040881008151">Įdiegta, nes priklauso nuo plėtinio (-ių).</translation>
 <translation id="4359717112757026264">Miesto architektūra</translation>
 <translation id="4359809482106103048">Saugumo apžvalga</translation>
+<translation id="4360738659108163902">Spustelėti dešiniuoju pelės klavišu</translation>
 <translation id="4361142739114356624">Trūksta šio kliento sertifikato privataus rakto arba jis netinkamas</translation>
 <translation id="4361745360460842907">Atidaryti kaip skirtuko lapą</translation>
 <translation id="4362675504017386626"><ph name="ACCOUNT_EMAIL" /> yra numatytoji paskyra šiame „<ph name="DEVICE_TYPE" />“ įrenginyje</translation>
@@ -5351,6 +5356,7 @@
 <translation id="482952334869563894">USB įrenginiai (teikėjas: „<ph name="VENDOR_ID" />“)</translation>
 <translation id="4830502475412647084">Įdiegiamas OS naujinys</translation>
 <translation id="4831226137013573603">mikrofono nutildymas</translation>
+<translation id="483262387981411190">Pristabdyti arba atnaujinti veido kontrolę</translation>
 <translation id="4833683849865011483">Rastas vienas spausdintuvas iš spausdinimo serverio</translation>
 <translation id="4835598628985424375">Suspausti lūpas tarsi vamzdelį</translation>
 <translation id="4835677468087803981">Slėpti PIN kodą</translation>
@@ -5911,6 +5917,7 @@
 <translation id="5240931875940563122">Prisijungti „Android“ telefonu</translation>
 <translation id="5242724311594467048">Įgalinti „<ph name="EXTENSION_NAME" />“?</translation>
 <translation id="5243522832766285132">Po kelių minučių bandykite dar kartą</translation>
+<translation id="5243752692914402705">Paleidę slinkimo režimą, pasukite galvą norima slinkimo kryptimi</translation>
 <translation id="5244234799035360187">„OneDrive“ dabar bus rodoma programoje „Files“</translation>
 <translation id="5244466461749935369">Kol kas palikti</translation>
 <translation id="5244474230056479698">Sinchronizavimas su <ph name="EMAIL" /></translation>
@@ -6663,6 +6670,7 @@
 <translation id="5805697420284793859">Langų tvarkytuvė</translation>
 <translation id="5806447147478173900">Iš viso pateiktų svetainių naudojamos vietos saugykloje: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5806773519584576205">0° (numatytasis)</translation>
+<translation id="5807774529265708172">Rodyti arba slėpti ekrano klaviatūrą</translation>
 <translation id="5809835394668218762">Daugiau veiksmų (<ph name="WEBSITE" />)</translation>
 <translation id="5809840528400421362">PIN kodas turi būti 6 skaitmenų</translation>
 <translation id="5810809306422959727">Šioje paskyroje tėvų kontrolės naudoti negalima</translation>
@@ -6856,6 +6864,7 @@
 <translation id="5945002094477276055">Failas „<ph name="FILE_NAME" />“ gali būti pavojingas. Siųsti „Google“ saugaus naršymo funkcijai, kad nuskaitytų?</translation>
 <translation id="5945363896952315544">Naudojant jūsų saugos raktą nebegalima išsaugoti daugiau kontrolinių kodų. Norėdami pridėti naują, pirmiausia ištrinkite kurį nors esamą kontrolinį kodą.</translation>
 <translation id="5946591249682680882">Ataskaitos ID <ph name="WEBRTC_LOG_REPORT_ID" /></translation>
+<translation id="5947651424015173580">Dukart spustelėti pelės klavišu</translation>
 <translation id="5948476936444935795">Atšaukti importavimą</translation>
 <translation id="5948536763493709626">Prijunkite klaviatūrą ar pelę arba tęskite sąranką naudodamiesi jutikliniu ekranu. Jei naudojate „Bluetooth“ įrenginius, įsitikinkite, kad įrenginiai parengti susieti.</translation>
 <translation id="5949544233750246342">Nepavyksta išanalizuoti failo</translation>
@@ -8565,6 +8574,7 @@
 <translation id="7212097698621322584">Įveskite dabartinį PIN kodą, jei norite jį pakeisti. Jei dabartinio PIN kodo nežinote, turėsite nustatyti saugos raktą iš naujo ir sukurti naują PIN kodą.</translation>
 <translation id="7214047272988222011">Leidžiama – <ph name="PERMISSION_DETAILS" />. Įjunkite <ph name="LINK_BEGIN" />sistemos prieigą prie vaizdo kameros<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Slaptažodžių importavimas</translation>
+<translation id="7217208603285112910">Pasirinkto teksto kalba nėra <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">Ištrinti svetainės duomenis?</translation>
 <translation id="7219473482981809164">Radome kelis profilius, kuriuos galima atsisiųsti. Prieš tęsdami pasirinkite tuos, kuriuos norite atsisiųsti.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{Nėra nesudėtingų slaptažodžių}=1{1 nesudėtingas slaptažodis}one{{NUM_WEAK} nesudėtingas slaptažodis}few{{NUM_WEAK} nesudėtingi slaptažodžiai}many{{NUM_WEAK} nesudėtingo slaptažodžio}other{{NUM_WEAK} nesudėtingų slaptažodžių}}</translation>
@@ -9613,6 +9623,7 @@
 <translation id="7958828865373988933">Jei norite sukurti programos „<ph name="APP_NAME" />“ prieigos raktą USB saugos rakte, įdėkite ir palieskite jį dabar</translation>
 <translation id="7959074893852789871">Faile buvo keli sertifikatai; kai kurie iš jų nebuvo importuoti:</translation>
 <translation id="7959665254555683862">Naujas inkognito &amp;skirtukas</translation>
+<translation id="7960540720012720106">Atidaryti langų apžvalgą</translation>
 <translation id="7961015016161918242">Niekada</translation>
 <translation id="7963001036288347286">Jutiklinės dalies spartinimas</translation>
 <translation id="7963513503134856713">Langas perkeltas į dešinę</translation>
@@ -9692,6 +9703,7 @@
 <translation id="8014154204619229810">Atnaujinimo programa šiuo metu paleista. Netrukus atnaujinkite ir vėl patikrinkite.</translation>
 <translation id="8014206674403687691">Neįmanoma grąžinti ankstesnės įdiegtos „<ph name="IDS_SHORT_PRODUCT_NAME" />“ versijos. Pabandykite vykdyti funkciją „Powerwash“.</translation>
 <translation id="8015565302826764056">{NUM_OF_FILES,plural, =1{Nukopijuotas vienas failas}one{Nukopijuotas {NUM_OF_FILES} failas}few{Nukopijuoti {NUM_OF_FILES} failai}many{Nukopijuota {NUM_OF_FILES} failo}other{Nukopijuota {NUM_OF_FILES} failų}}</translation>
+<translation id="8017004049696748317">Pradėti arba sustabdyti diktavimą</translation>
 <translation id="8017176852978888182">„Linux“ bendrinami katalogai</translation>
 <translation id="8017335670460187064">„<ph name="LABEL" />“</translation>
 <translation id="8017679124341497925">Spartusis klavišas redaguotas</translation>
@@ -9706,6 +9718,7 @@
 <translation id="8025291188699172126">Apie naujinius</translation>
 <translation id="8026471514777758216">Visi jūsų įrenginiai</translation>
 <translation id="8026784703228858744">Saugokite žymes ir atlikite daugiau veiksmų naudodami sinchronizavimą</translation>
+<translation id="8027325966409484573">{NUM_DAYS,plural, =0{Lankėtės prieš 0 dienų}=1{Lankėtės prieš 1 dieną}one{Lankėtės prieš # dieną}few{Lankėtės prieš # dienas}many{Lankėtės prieš # dienos}other{Lankėtės prieš # dienų}}</translation>
 <translation id="8028060951694135607">„Microsoft“ rakto atkūrimas</translation>
 <translation id="8028803902702117856">Atsisiunčiama: <ph name="SIZE" /> (<ph name="FILE_NAME" />)</translation>
 <translation id="8028993641010258682">Dydis</translation>
@@ -10127,6 +10140,7 @@
 <translation id="8325413836429495820">Neleidžiama peržiūrėti iškarpinės</translation>
 <translation id="8326478304147373412">PKCS Nr. 7, sertifikato grandinė</translation>
 <translation id="8327386430364625757">Matematinis šriftas</translation>
+<translation id="8327490658947427005">Pasirinkto teksto kalba nėra <ph name="LANGUAGE" /></translation>
 <translation id="8327676037044516220">Leidimai ir turinio nustatymai</translation>
 <translation id="8328228852664998535">Jei tęsite, slaptažodžiai, prieigos raktai ir kiti duomenys bus visam laikui ištrinti iš paslaugos <ph name="BRAND" />. Jokios paskyros, kurias sukūrėte svetainėms ar programoms, nebus ištrintos.</translation>
 <translation id="8328777765163860529">Uždaryti viską</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 5315278..080925d 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -3196,7 +3196,6 @@
 <translation id="3275778913554317645">Atvērt kā logu</translation>
 <translation id="3277214528693754078">Pārvietoties ar teksta kursoru (taustiņpārlūkošana)</translation>
 <translation id="3277594800340743211">Liela ēna</translation>
-<translation id="3277784185056747463">Ierīces parole vai Google konta parole</translation>
 <translation id="3278001907972365362">Pievērsiet uzmanību savam(-iem) Google kontam(-iem).</translation>
 <translation id="3279092821516760512">Atlasītās kontaktpersonas var kopīgot ar jums saturu, kad tās atrodas tuvumā. Satura pārsūtīšana tiks sāka tikai pēc jūsu apstiprinājuma.</translation>
 <translation id="3279230909244266691">Šis process var ilgt dažas minūtes. Notiek virtuālās mašīnas startēšana.</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 961275d..7a379db 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -3210,7 +3210,6 @@
 <translation id="3275778913554317645">Отвори како прозорец</translation>
 <translation id="3277214528693754078">Движете се со курсорот за текст (прелистување со курсор)</translation>
 <translation id="3277594800340743211">Голема сенка</translation>
-<translation id="3277784185056747463">Лозинка за уред или лозинка за сметката на Google</translation>
 <translation id="3278001907972365362">Потребно им е внимание на вашите сметки на Google</translation>
 <translation id="3279092821516760512">Избраните контакти може да споделуваат со вас кога се во близина. Преносите нема да започнат додека не прифатите.</translation>
 <translation id="3279230909244266691">Овој процес можеби ќе потрае неколку минути. Се стартува виртуелната машина.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index e8b1c0b..f5133cba 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -2645,7 +2645,7 @@
 <translation id="2856776373509145513">പുതിയ കണ്ടെയ്‌നർ സൃഷ്‌ടിക്കുക</translation>
 <translation id="2856907950922663165">URL എൻക്രിപ്ഷൻ ഓഫാക്കണോ?</translation>
 <translation id="2859741939921354763"><ph name="BRAND" /> എന്നതിലേക്ക് പാസ്‌വേഡുകൾ ഇമ്പോർട്ട് ചെയ്യുക</translation>
-<translation id="2860710618359053450">താടി വലത്തേക്ക് നീക്കുക</translation>
+<translation id="2860710618359053450">താടിയെല്ല് വലത്തേക്ക് നീക്കുക</translation>
 <translation id="2861301611394761800">സിസ്റ്റം അപ്ഡേറ്റ് പൂര്‍ത്തിയായി. ദയവായി സിസ്റ്റം റീസ്റ്റാർട്ട് ചെയ്യുക.</translation>
 <translation id="2861402191395139055">Passpoint സബ്‌സ്‌ക്രിപ്ഷനുകൾ</translation>
 <translation id="2861941300086904918">നേറ്റിവ് ക്ലയന്‍റ് സുരക്ഷ മാനേജര്‍</translation>
@@ -3064,7 +3064,7 @@
 <translation id="3179982752812949580">ടെക്‌സ്‌റ്റ് ഫോണ്ട്</translation>
 <translation id="3180284704187420717">സമന്വയിപ്പിക്കൽ ഉപയോഗിച്ച് നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകളും പാസ്‌വേഡുകളും മറ്റും സംരക്ഷിക്കൂ</translation>
 <translation id="3180716079618904608">ആപ്പുകളും ഗെയിമുകളും നേടുക</translation>
-<translation id="3180990259147710757">താടി ഇടത്തേക്ക് നീക്കുക</translation>
+<translation id="3180990259147710757">താടിയെല്ല് ഇടത്തേക്ക് നീക്കുക</translation>
 <translation id="3181954750937456830">സുരക്ഷിത ബ്രൗസിംഗ് (അപകടകരമായ സൈറ്റുകളിൽ നിന്ന് നിങ്ങളെയും ഉപകരണത്തെയും പരിരക്ഷിക്കുന്നു)</translation>
 <translation id="3182749001423093222">സ്പെൽ ചെക്ക്</translation>
 <translation id="3183139917765991655">പ്രൊഫൈൽ ഇംപോർട്ടർ</translation>
@@ -3193,7 +3193,6 @@
 <translation id="3275778913554317645">വിന്‍ഡോ ആയി തുറക്കുക</translation>
 <translation id="3277214528693754078">ടെക്സ്റ്റ് കഴ്‌സർ ഉപയോഗിച്ച് നാവിഗേറ്റ് ചെയ്യുക ( കാരറ്റ് ബ്രൗസിംഗ്)</translation>
 <translation id="3277594800340743211">വലിയ ഷാഡോ</translation>
-<translation id="3277784185056747463">ഉപകരണത്തിന്റെ പാസ്‌വേഡ് അല്ലെങ്കിൽ Google Account പാസ്‌വേഡ്</translation>
 <translation id="3278001907972365362">നിങ്ങളുടെ Google അക്കൗണ്ടിന്(കൾക്ക്) ശ്രദ്ധ ആവശ്യമാണ്</translation>
 <translation id="3279092821516760512">നിങ്ങളുടെ സമീപത്തുള്ളപ്പോൾ തിരഞ്ഞെടുത്ത കോൺടാക്‌റ്റുകൾക്ക് നിങ്ങളുമായി പങ്കിടാം. നിങ്ങൾ അത് സ്വീകരിക്കുന്നത് വരെ കൈമാറ്റം ആരംഭിക്കില്ല.</translation>
 <translation id="3279230909244266691">ഈ പ്രക്രിയയ്ക്ക് കുറച്ച് സമയമെടുത്തേക്കാം. വെർച്വൽ മെഷീൻ പ്രവർത്തനം ആരംഭിക്കുന്നു.</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index 619f8e0..f792ea9 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -3205,7 +3205,6 @@
 <translation id="3275778913554317645">Цонх хэлбэрээр нээ</translation>
 <translation id="3277214528693754078">Текстийн курсороор шилжих (caret browsing)</translation>
 <translation id="3277594800340743211">Том сүүдэр</translation>
-<translation id="3277784185056747463">Төхөөрөмжийн нууц үг эсвэл Google Бүртгэлийн нууц үг</translation>
 <translation id="3278001907972365362">Та Google Бүртгэлээ шалгах шаардлагатай байна</translation>
 <translation id="3279092821516760512">Сонгосон харилцагчид ойролцоо байх үедээ тантай хуваалцах боломжтой. Таныг зөвшөөрөх хүртэл шилжүүлгийг эхлүүлэхгүй.</translation>
 <translation id="3279230909244266691">Энэ үйл явцад хэдэн минут шаардлагатай. Виртуал машиныг эхлүүлж байна.</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index eb0d8af..a44b098f 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -3208,7 +3208,6 @@
 <translation id="3275778913554317645">विंडो म्हणून उघडा</translation>
 <translation id="3277214528693754078">मजकूर कर्सर वापरून नेव्हिगेट करा (कॅरेट ब्राउझिंग)</translation>
 <translation id="3277594800340743211">मोठी शॅडो</translation>
-<translation id="3277784185056747463">डिव्हाइस पासवर्ड किंवा Google खाते पासवर्ड</translation>
 <translation id="3278001907972365362">तुमच्या Google खात्या(त्यां)कडे लक्ष देण्याची आवश्यकता आहे</translation>
 <translation id="3279092821516760512">निवडलेले संपर्क हे जवळपास असताना तुमच्यासोबत शेअर करू शकतात. तुम्ही स्वीकारेपर्यंत ट्रान्सफर सुरू होणार नाहीत.</translation>
 <translation id="3279230909244266691">या प्रक्रियेला काही मिनिटे लागू शकतात. व्हर्च्युअल मशीन सुरू करत आहे.</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index ae2e197..1b0826d 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -3214,7 +3214,6 @@
 <translation id="3275778913554317645">Buka sebagai tetingkap</translation>
 <translation id="3277214528693754078">Navigasi dengan kursor teks (penyemakan imbas karet)</translation>
 <translation id="3277594800340743211">Bebayang besar</translation>
-<translation id="3277784185056747463">Kata laluan peranti atau kata laluan Google Account</translation>
 <translation id="3278001907972365362">Google Account anda memerlukan perhatian</translation>
 <translation id="3279092821516760512">Kenalan yang dipilih boleh berkongsi dengan anda apabila mereka berada berdekatan. Pemindahan tidak akan bermula sehinggalah anda menerima perkongsian.</translation>
 <translation id="3279230909244266691">Proses ini mungkin mengambil masa beberapa minit. Memulakan mesin maya.</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 329a59e6..e39335b 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -3208,7 +3208,6 @@
 <translation id="3275778913554317645">ဝင်ဒိုး အဖြစ် ဖွင့်ရန်</translation>
 <translation id="3277214528693754078">စာသားကာဆာဖြင့် ရွှေ့ကြည့်ခြင်း (Caret ဖြင့် ဖွင့်ကြည့်ခြင်း)</translation>
 <translation id="3277594800340743211">အရိပ်ကြီး</translation>
-<translation id="3277784185056747463">စက်စကားဝှက် (သို့) Google Account စကားဝှက်</translation>
 <translation id="3278001907972365362">သင့် Google အကောင့်(များ)တွင် ပြင်ဆင်စရာ ရှိနေပါသည်</translation>
 <translation id="3279092821516760512">ရွေးချယ်ထားသော အဆက်အသွယ်များသည် အနီးတွင်ရှိသောအခါ သင်နှင့်မျှဝေနိုင်သည်။ သင်လက်မခံမချင်း လွှဲပြောင်းမှုကို စတင်မည်မဟုတ်ပါ။</translation>
 <translation id="3279230909244266691">ဤလုပ်ဆောင်ချက်သည် မိနစ်အနည်းငယ်ကြာနိုင်ပါသည်။ ပကတိအသွင်စက်ကို စတင်နေသည်။</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index efb87234..f292684 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -3194,7 +3194,6 @@
 <translation id="3275778913554317645">विन्डोको रूपमा खोल्नुहोस्</translation>
 <translation id="3277214528693754078">टेक्स्ट कर्सर प्रयोग गरी नेभिगेट गर्नुहोस् (क्यारेट ब्राउजिङ)</translation>
 <translation id="3277594800340743211">ठुलो छाया</translation>
-<translation id="3277784185056747463">डिभाइसको पासवर्ड वा Google खाताको पासवर्ड</translation>
 <translation id="3278001907972365362">तपाईंका Google खाता(हरू) मा ध्यान दिनु पर्ने हुन्छ</translation>
 <translation id="3279092821516760512">तपाईंको वरपर हुँदा तपाईंसँग सामग्री सेयर गर्न सक्ने कन्ट्याक्टमा भएका व्यक्तिहरू चयन गर्नुहोस्। तपाईंले सामग्री सार्ने निम्तो स्वीकार नगरेसम्म सामग्री सार्ने काम सुरु हुँदैन।</translation>
 <translation id="3279230909244266691">यो प्रक्रिया पूरा हुन केही बेर लाग्न सक्छ। भर्चुअल मेसिन सुरु गर्दै।</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 0fe4f9422..9074cef0 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -3194,7 +3194,6 @@
 <translation id="3275778913554317645">Openen als venster</translation>
 <translation id="3277214528693754078">Navigeren met tekstcursor (browsen met navigatietoetsen)</translation>
 <translation id="3277594800340743211">Grote schaduw</translation>
-<translation id="3277784185056747463">Apparaatwachtwoord of Google-accountwachtwoord</translation>
 <translation id="3278001907972365362">Je Google-accounts vereisen aandacht</translation>
 <translation id="3279092821516760512">Geselecteerde contacten kunnen met je delen als ze in de buurt zijn. Overdrachten worden pas gestart nadat je ze accepteert.</translation>
 <translation id="3279230909244266691">Dit proces kan enkele minuten duren. De virtuele machine wordt gestart.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 71f11e7..a4516db 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -3203,7 +3203,6 @@
 <translation id="3275778913554317645">Åpne som vindu</translation>
 <translation id="3277214528693754078">Naviger med tekstmarkøren (markørsurfing)</translation>
 <translation id="3277594800340743211">Stor skygge</translation>
-<translation id="3277784185056747463">Enhetspassord eller Google-kontopassord</translation>
 <translation id="3278001907972365362">Sjekk Google-kontoen(e) din(e)</translation>
 <translation id="3279092821516760512">Kontakter du velger, kan dele med deg når de er i nærheten. Overføringer starter ikke før du godtar.</translation>
 <translation id="3279230909244266691">Denne prosessen kan ta noen minutter. Starter den virtuelle maskinen.</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index e324d0c..54a9e82 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -3192,7 +3192,6 @@
 <translation id="3275778913554317645">ୱିଣ୍ଡୋ ଭଳି ଖୋଲନ୍ତୁ</translation>
 <translation id="3277214528693754078">ଟେକ୍ସଟ କର୍ସର ମାଧ୍ୟମରେ ନାଭିଗେଟ କରନ୍ତୁ (କ୍ୟାରେଟ ବ୍ରାଉଜିଂ)</translation>
 <translation id="3277594800340743211">ବଡ଼ ଛାଇ</translation>
-<translation id="3277784185056747463">ଡିଭାଇସ ପାସୱାର୍ଡ କିମ୍ବା Google ଆକାଉଣ୍ଟ ପାସୱାର୍ଡ</translation>
 <translation id="3278001907972365362">ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟ (ଗୁଡ଼ିକ) ଉପରେ ଧ୍ୟାନ ରଖିବା ଆବଶ୍ୟକ</translation>
 <translation id="3279092821516760512">ଆଖପାଖରେ ଥିବା ସମୟରେ ଚୟନିତ ଯୋଗାଯୋଗଗୁଡ଼ିକ ଆପଣଙ୍କ ସହିତ ସେୟାର୍ କରାଯାଇପାରିବ। ଆପଣ ଗ୍ରହଣ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ସ୍ଥାନାନ୍ତର ଆରମ୍ଭ ହେବ ନାହିଁ।</translation>
 <translation id="3279230909244266691">ଏହି ପ୍ରକ୍ରିୟା ପାଇଁ ହୁଏତ କିଛି ସମୟ ଲାଗିପାରେ। ଭର୍ଚୁଆଲ୍ ମେସିନ୍ ଆରମ୍ଭ ହେଉଛି।</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 2973abd..5e716bd 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -3213,7 +3213,6 @@
 <translation id="3275778913554317645">window ਦੇ ਤੌਰ ਤੇ ਖੋਲ੍ਹੋ</translation>
 <translation id="3277214528693754078">ਲਿਖਤ ਕਰਸਰ (ਕੈਰਟ ਬ੍ਰਾਊਜ਼ਿੰਗ) ਨਾਲ ਨੈਵੀਗੇਟ ਕਰੋ</translation>
 <translation id="3277594800340743211">ਵੱਡੀ ਸ਼ੈਡੋ</translation>
-<translation id="3277784185056747463">ਡੀਵਾਈਸ ਦਾ ਪਾਸਵਰਡ ਜਾਂ Google ਖਾਤੇ ਦਾ ਪਾਸਵਰਡ</translation>
 <translation id="3278001907972365362">ਆਪਣੇ Google ਖਾਤੇ(ਖਾਤਿਆਂ) ਵੱਲ ਧਿਆਨ ਦਿਓ</translation>
 <translation id="3279092821516760512">ਨਜ਼ਦੀਕੀ ਸਾਂਝ ਹੋਣ 'ਤੇ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਤੁਹਾਡੇ ਨਾਲ ਸਾਂਝਾ ਕਰ ਸਕਦੇ ਹਨ। ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰਦੇ, ਟ੍ਰਾਂਸਫ਼ਰ ਸ਼ੁਰੂ ਨਹੀਂ ਹੁੰਦਾ।</translation>
 <translation id="3279230909244266691">ਇਸ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਕੁਝ ਮਿੰਟ ਲੱਗ ਸਕਦੇ ਹਨ। ਆਭਾਸੀ ਮਸ਼ੀਨ ਸ਼ੁਰੂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 988ae9ac..2f62b24 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -3180,7 +3180,6 @@
 <translation id="3275778913554317645">Otwórz jako okno</translation>
 <translation id="3277214528693754078">Nawigacja za pomocą kursora tekstowego (przeglądanie przy użyciu kursora)</translation>
 <translation id="3277594800340743211">Duży cień</translation>
-<translation id="3277784185056747463">Hasło urządzenia lub hasło do konta Google</translation>
 <translation id="3278001907972365362">Musisz się zająć swoimi kontami Google</translation>
 <translation id="3279092821516760512">Wybrane kontakty mogą udostępniać Ci dane, gdy znajdują się w pobliżu. Przesyłanie danych nie rozpocznie się bez Twojej zgody.</translation>
 <translation id="3279230909244266691">Może to potrwać kilka minut. Uruchamiam maszynę wirtualną.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 952c78c..d62dc88 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -3211,7 +3211,6 @@
 <translation id="3275778913554317645">Abrir como janela</translation>
 <translation id="3277214528693754078">Navegar com o cursor de texto (Caret Browsing)</translation>
 <translation id="3277594800340743211">Sombra grande</translation>
-<translation id="3277784185056747463">Senha do dispositivo ou da Conta do Google</translation>
 <translation id="3278001907972365362">Suas Contas do Google requerem atenção</translation>
 <translation id="3279092821516760512">Contatos selecionados podem compartilhar itens com você quando estão por perto. As transferências só são iniciadas depois que você as aceita.</translation>
 <translation id="3279230909244266691">O processo pode levar alguns minutos. Iniciando a máquina virtual.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 637c387..118a84fd 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -3202,7 +3202,6 @@
 <translation id="3275778913554317645">Abrir como janela</translation>
 <translation id="3277214528693754078">Navegar com o cursor de texto (Navegação por cursor)</translation>
 <translation id="3277594800340743211">Sombra grande</translation>
-<translation id="3277784185056747463">Palavra-passe do dispositivo ou palavra-passe da Conta Google</translation>
 <translation id="3278001907972365362">A(s) sua(s) Conta(s) Google necessita(m) de atenção</translation>
 <translation id="3279092821516760512">Os contactos selecionados podem partilhar consigo quando estiverem nas proximidades. As transferências só irão começar quando aceitar.</translation>
 <translation id="3279230909244266691">Este processo pode demorar alguns minutos. A iniciar a máquina virtual…</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 792629d..5812694 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -3198,7 +3198,6 @@
 <translation id="3275778913554317645">Deschide ca fereastră</translation>
 <translation id="3277214528693754078">Navighează folosind cursorul de text (navigare cu tastatura)</translation>
 <translation id="3277594800340743211">Umbră mare</translation>
-<translation id="3277784185056747463">Parola dispozitivului sau parola Contului Google</translation>
 <translation id="3278001907972365362">Trebuie să te ocupi de Conturile Google.</translation>
 <translation id="3279092821516760512">Persoanele de contact selectate îți pot trimite fișiere când sunt în apropiere. Transferurile nu vor începe până când nu accepți.</translation>
 <translation id="3279230909244266691">Poate dura câteva minute. Se pornește mașina virtuală.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 6017eb2..abb60d9 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -3200,7 +3200,6 @@
 <translation id="3275778913554317645">Открыть в отдельном окне</translation>
 <translation id="3277214528693754078">Навигация с помощью курсора (режим активного курсора)</translation>
 <translation id="3277594800340743211">Крупная тень</translation>
-<translation id="3277784185056747463">Пароль устройства или пароль аккаунта Google</translation>
 <translation id="3278001907972365362">Требуются действия в аккаунте Google.</translation>
 <translation id="3279092821516760512">Выбранные контакты могут обмениваться с вами контентом, когда находятся поблизости. Передача данных не начинается без вашего согласия.</translation>
 <translation id="3279230909244266691">Подождите несколько минут. Запуск виртуальной машины…</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 42f1180e..15dfc1b 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -3199,7 +3199,6 @@
 <translation id="3275778913554317645">කවුළුවක් විවෘත කරන්න</translation>
 <translation id="3277214528693754078">පෙළ කර්සරය සමග සංචාලනය කරන්න (කැරට් බ්‍රවුස් කිරීම)</translation>
 <translation id="3277594800340743211">විශාල සෙවනැල්ල</translation>
-<translation id="3277784185056747463">උපාංග මුරපදය හෝ Google ගිණුම් මුරපදය</translation>
 <translation id="3278001907972365362">ඔබේ Google ගිණුමට (ගිණුම්වලට) අවධානය අවශ්‍යයි</translation>
 <translation id="3279092821516760512">තෝරා ගත් සම්බන්ධතාවලට අවට සිටින විට ඔබ සමග බෙදා ගත හැකිය. ඔබ පිළිගන්නා තුරු මාරුවීම් ආරම්භ නොවනු ඇත.</translation>
 <translation id="3279230909244266691">මෙම ක්‍රියාවලියට විනාඩි කිහිපයක් ගත විය හැක. අතථ්‍ය යන්ත්‍රය අරඹමින්.</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 6320c38c..cfc84c5 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -3198,7 +3198,6 @@
 <translation id="3275778913554317645">Otvárať ako okno</translation>
 <translation id="3277214528693754078">Navigácia textovým kurzorom (kurzorové prehliadanie)</translation>
 <translation id="3277594800340743211">Veľký tieň</translation>
-<translation id="3277784185056747463">Heslo zariadenia alebo heslo účtu Google</translation>
 <translation id="3278001907972365362">Vaše účty Google vyžadujú pozornosť</translation>
 <translation id="3279092821516760512">Vybrané kontakty môžu s vami zdieľať obsah, keď sú nablízku. Prenosy sa začnú až vtedy, keď ich prijmete.</translation>
 <translation id="3279230909244266691">Tento proces môže trvať niekoľko minút. Spúšťa sa virtuálny počítač.</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index f2445e0..454e196 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -3214,7 +3214,6 @@
 <translation id="3275778913554317645">Odpri kot okno</translation>
 <translation id="3277214528693754078">Premikanje s kazalcem besedila (brskanje s kazalko)</translation>
 <translation id="3277594800340743211">Velika senca</translation>
-<translation id="3277784185056747463">Geslo naprave ali geslo za račun Google</translation>
 <translation id="3278001907972365362">V računih Google je potrebno ukrepanje</translation>
 <translation id="3279092821516760512">Izbrani stiki lahko delijo z vami, ko so v bližini. Prenosi se ne začnejo, dokler ne sprejmete.</translation>
 <translation id="3279230909244266691">To lahko traja nekaj minut. Zagon navideznega računalnika.</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 82eb126..d0dc2166 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -3192,7 +3192,6 @@
 <translation id="3275778913554317645">Hape si dritare</translation>
 <translation id="3277214528693754078">Navigo me kursorin e tekstit (shfletimi me kursorin e tekstit)</translation>
 <translation id="3277594800340743211">Hije e madhe</translation>
-<translation id="3277784185056747463">Fjalëkalimi i pajisjes ose fjalëkalimi i "Llogarisë së Google"</translation>
 <translation id="3278001907972365362">"Llogaria(të) jote e Google" ka nevojë për vëmendje</translation>
 <translation id="3279092821516760512">Kontaktet e zgjedhura mund të ndajnë me ty kur je në afërsi. Transferimet nuk do të fillojnë derisa të pranosh.</translation>
 <translation id="3279230909244266691">Procesi mund të zgjasë disa minuta. Po niset pajisja virtuale.</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index d916936..2bf4daa4 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -13,6 +13,7 @@
 <translation id="1005671386794704751">Roze</translation>
 <translation id="1005919400326853998">Prikažite detalje sertifikata za <ph name="CERT_NAME" /> u novom dijalogu</translation>
 <translation id="1006033052970139968">Pristup mikrofonu je dozvoljen za aplikacije, veb-sajtove sa dozvolom za mikrofon i sistemske usluge</translation>
+<translation id="1006471148601930095">Nije pronađen nijedan čitač pametnih kartica.</translation>
 <translation id="1006873397406093306">Ovaj dodatak može da čita i menja podatke na sajtovima. Možete da kontrolišete kojim sajtovima dodatak može da pristupa.</translation>
 <translation id="1007057452468855774">Uključite Google Play prodavnicu</translation>
 <translation id="1008186147501209563">Izvezi obeleživače</translation>
@@ -2427,6 +2428,7 @@
 <translation id="2710101514844343743">Podaci o korišćenju i dijagnostički podaci</translation>
 <translation id="271033894570825754">Novo</translation>
 <translation id="2710507903599773521"><ph name="DEVICE_TYPE" /> je sada otključan</translation>
+<translation id="2710676967944965821">Želite da resetujete sve dozvole za čitače pametnih kartica?</translation>
 <translation id="2713106313042589954">Isključi kameru</translation>
 <translation id="2713444072780614174">Bela</translation>
 <translation id="2714180132046334502">Tamna pozadina</translation>
@@ -3199,7 +3201,6 @@
 <translation id="3275778913554317645">Otvori kao prozor</translation>
 <translation id="3277214528693754078">Krećite se pomoću kursora za tekst (navigacija kursorom)</translation>
 <translation id="3277594800340743211">Velika senka</translation>
-<translation id="3277784185056747463">Lozinka uređaja ili lozinka za Google nalog</translation>
 <translation id="3278001907972365362">Treba da proverite Google naloge</translation>
 <translation id="3279092821516760512">Izabrani kontakti mogu da dele sa vama kada ste u blizini. Prenosi neće započeti dok ne prihvatite.</translation>
 <translation id="3279230909244266691">Ovo može da potraje par minuta. Pokreće se virtuelna mašina.</translation>
@@ -6865,6 +6866,7 @@
 <translation id="5958836583172610505">Sinhronizacija je uključena</translation>
 <translation id="5959471481388474538">Mreža nije dostupna</translation>
 <translation id="5959982036207776176">Lupa prati reč koja se čita pomoću usluge Izaberite za govor</translation>
+<translation id="5961545272769624207">Dodeli pokret</translation>
 <translation id="5963413905009737549">Odeljak</translation>
 <translation id="5963453369025043595"><ph name="NUM_HANDLES" /> (najviše <ph name="NUM_KILOBYTES_LIVE" />)</translation>
 <translation id="5964113968897211042">{COUNT,plural, =0{Otvori sve u &amp;novom prozoru}=1{Otvori u &amp;novom prozoru}one{Otvori sve ({COUNT}) u &amp;novom prozoru}few{Otvori sve ({COUNT}) u &amp;novom prozoru}other{Otvori sve ({COUNT}) u &amp;novom prozoru}}</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index bb887ed..7bf59b6 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -13,6 +13,7 @@
 <translation id="1005671386794704751">Розе</translation>
 <translation id="1005919400326853998">Прикажите детаље сертификата за <ph name="CERT_NAME" /> у новом дијалогу</translation>
 <translation id="1006033052970139968">Приступ микрофону је дозвољен за апликације, веб-сајтове са дозволом за микрофон и системске услуге</translation>
+<translation id="1006471148601930095">Није пронађен ниједан читач паметних картица.</translation>
 <translation id="1006873397406093306">Овај додатак може да чита и мења податке на сајтовима. Можете да контролишете којим сајтовима додатак може да приступа.</translation>
 <translation id="1007057452468855774">Укључите Google Play продавницу</translation>
 <translation id="1008186147501209563">Извези обележиваче</translation>
@@ -2427,6 +2428,7 @@
 <translation id="2710101514844343743">Подаци о коришћењу и дијагностички подаци</translation>
 <translation id="271033894570825754">Ново</translation>
 <translation id="2710507903599773521"><ph name="DEVICE_TYPE" /> је сада откључан</translation>
+<translation id="2710676967944965821">Желите да ресетујете све дозволе за читаче паметних картица?</translation>
 <translation id="2713106313042589954">Искључи камеру</translation>
 <translation id="2713444072780614174">Бела</translation>
 <translation id="2714180132046334502">Тамна позадина</translation>
@@ -3199,7 +3201,6 @@
 <translation id="3275778913554317645">Отвори као прозор</translation>
 <translation id="3277214528693754078">Крећите се помоћу курсора за текст (навигација курсором)</translation>
 <translation id="3277594800340743211">Велика сенка</translation>
-<translation id="3277784185056747463">Лозинка уређаја или лозинка за Google налог</translation>
 <translation id="3278001907972365362">Треба да проверите Google налоге</translation>
 <translation id="3279092821516760512">Изабрани контакти могу да деле са вама када сте у близини. Преноси неће започети док не прихватите.</translation>
 <translation id="3279230909244266691">Ово може да потраје пар минута. Покреће се виртуелна машина.</translation>
@@ -6865,6 +6866,7 @@
 <translation id="5958836583172610505">Синхронизација је укључена</translation>
 <translation id="5959471481388474538">Мрежа није доступна</translation>
 <translation id="5959982036207776176">Лупа прати реч која се чита помоћу услуге Изаберите за говор</translation>
+<translation id="5961545272769624207">Додели покрет</translation>
 <translation id="5963413905009737549">Одељак</translation>
 <translation id="5963453369025043595"><ph name="NUM_HANDLES" /> (највише <ph name="NUM_KILOBYTES_LIVE" />)</translation>
 <translation id="5964113968897211042">{COUNT,plural, =0{Отвори све у &amp;новом прозору}=1{Отвори у &amp;новом прозору}one{Отвори све ({COUNT}) у &amp;новом прозору}few{Отвори све ({COUNT}) у &amp;новом прозору}other{Отвори све ({COUNT}) у &amp;новом прозору}}</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index d8cb0cd..1074a3c2 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -3209,7 +3209,6 @@
 <translation id="3275778913554317645">Öppna som fönster</translation>
 <translation id="3277214528693754078">Navigera med textmarkören (textmarkörläge)</translation>
 <translation id="3277594800340743211">Stor skugga</translation>
-<translation id="3277784185056747463">Lösenord för enhet eller Google-konto</translation>
 <translation id="3278001907972365362">Ditt Google-konto/dina Google-konton kräver åtgärd</translation>
 <translation id="3279092821516760512">Utvalda kontakter kan dela med dig när de är i närheten. Inga överföringar startas förrän du har godkänt dem.</translation>
 <translation id="3279230909244266691">Detta kan ta några minuter. Den virtuella maskinen startas.</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index fa48f15..e87cefe 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -329,7 +329,9 @@
 <translation id="1227660082540388410">Badilisha ufunguo wa siri</translation>
 <translation id="1227993798763400520">Imeshindwa kutuma. Tafadhali jaribu tena.</translation>
 <translation id="1230417814058465809">Kipengele cha ulinzi wa kawaida kimewashwa. Kwa usalama zaidi, tumia kipengele cha usalama ulioboreshwa.</translation>
+<translation id="1230961867057865279">Ukurasa Haupatikani kwa <ph name="LANGUAGE" /></translation>
 <translation id="1231426483209637778">Tutakumbuka mtandao wako wakati mwingine utakapotumia <ph name="DEVICE_TYPE" /></translation>
+<translation id="1231489110997683307">Ukurasa haupatikani kwa <ph name="LANGUAGE" /></translation>
 <translation id="1231572247662419826">Tovuti zinaweza kuomba zinase na zitumie data uliyoweka ukitumia kipanya</translation>
 <translation id="1232569758102978740">Hakina Jina</translation>
 <translation id="1233497634904001272">Gusa tena ufunguo wako wa usalama ili ukamilishe ombi.</translation>
@@ -3206,7 +3208,6 @@
 <translation id="3275778913554317645">Fungua kama dirisha</translation>
 <translation id="3277214528693754078">Sogeza kwa kutumia kiteuzi cha maandishi (kuvinjari kwa kutumia kibodi)</translation>
 <translation id="3277594800340743211">Kihariri cha kivuli kikubwa</translation>
-<translation id="3277784185056747463">Nenosiri la kifaa au nenosiri la Akaunti ya Google</translation>
 <translation id="3278001907972365362">Unahitaji kukagua Akaunti zako za Google</translation>
 <translation id="3279092821516760512">Unaowasiliana nao uliochagua wanaweza kushiriki nawe wakiwa karibu. Uhamishaji hautaanza hadi utakapokubali.</translation>
 <translation id="3279230909244266691">Huenda mchakato ukachukua dakika kadhaa. Inaanzisha kompyuta iliyo mbali.</translation>
@@ -8550,6 +8551,7 @@
 <translation id="7212097698621322584">Weka PIN yako ya sasa ili uibadilishe. Ikiwa hujui PIN yako, utahitaji kubadilisha ufunguo wako wa usalama, kisha uunde PIN mpya.</translation>
 <translation id="7214047272988222011">Umeruhusu – <ph name="PERMISSION_DETAILS" />. Washa <ph name="LINK_BEGIN" />ufikiaji wa kamera ya kifaa<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Pakia manenosiri</translation>
+<translation id="7217208603285112910">Maudhui uliyochagua hayapatikani kwa <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">Je, ungependa kufuta data ya tovuti?</translation>
 <translation id="7219473482981809164">Tumepata wasifu kadhaa unaoweza kupakua. Chagua wasifu ambao ungependa kupakua kabla ya kuendelea.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{Hamna manenosiri dhaifu}=1{Nenosiri moja dhaifu}other{Manenosiri {NUM_WEAK} dhaifu}}</translation>
@@ -10113,6 +10115,7 @@
 <translation id="8325413836429495820">Zisizoruhusiwa kuona ubao wako wa kunakili</translation>
 <translation id="8326478304147373412">PKCS #7, msururu wa vyeti</translation>
 <translation id="8327386430364625757">Fonti ya kihisabati</translation>
+<translation id="8327490658947427005">Maudhui Uliyochagua Hayapatikani kwa <ph name="LANGUAGE" /></translation>
 <translation id="8327676037044516220">Mipangilio ya maudhui na ruhusa</translation>
 <translation id="8328228852664998535">Ikiwa utaendelea, maneno siri, funguo za siri na data yako nyingine zitafutwa kabisa kwenye <ph name="BRAND" />. Akaunti zozote ulizofungua kwenye tovuti au programu hazitafutwa.</translation>
 <translation id="8328777765163860529">Funga Vyote</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 75ceb35..1f0b9c9 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3209,7 +3209,6 @@
 <translation id="3275778913554317645">சாளரமாகத் திற</translation>
 <translation id="3277214528693754078">எழுத்துக் கர்சரைப் பயன்படுத்தி உலாவு (சுட்டி உலாவல்)</translation>
 <translation id="3277594800340743211">அதிகளவில் கருமைச் சாயல்</translation>
-<translation id="3277784185056747463">சாதனத்தின் கடவுச்சொல் அல்லது Google கணக்கின் கடவுச்சொல்</translation>
 <translation id="3278001907972365362">உங்கள் Google கணக்கு(கள்) மதிப்பாய்வு செய்யப்பட வேண்டும்.</translation>
 <translation id="3279092821516760512">தேர்ந்தெடுத்த தொடர்புகள் அருகில் இருக்கும்போது உங்களுடன் பகிர முடியும். நீங்கள் ஏற்கும் வரை பரிமாற்றங்கள் தொடங்காது.</translation>
 <translation id="3279230909244266691">இதற்குச் சில நிமிடங்கள் ஆகலாம். விர்ச்சுவல் மெஷினைத் தொடங்குகிறது.</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 48124046..32ad2547 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -3212,7 +3212,6 @@
 <translation id="3275778913554317645">విండో లాగా తెరవండి</translation>
 <translation id="3277214528693754078">టెక్స్ట్ కర్సర్‌తో నావిగేట్ చేయండి (కేరెట్ బ్రౌజింగ్)</translation>
 <translation id="3277594800340743211">పెద్ద షాడో</translation>
-<translation id="3277784185056747463">పరికరం పాస్‌వర్డ్ లేదా Google ఖాతా పాస్‌వర్డ్</translation>
 <translation id="3278001907972365362">మీ Google ఖాతా లేదా ఖాతాలను జాగ్రత్తగా గమనించాలి</translation>
 <translation id="3279092821516760512">ఎంచుకున్న కాంటాక్ట్‌లు సమీపంలో ఉన్నప్పుడు వారు మీతో షేర్ చేయగలరు. మీరు అంగీకరించే వరకు బదిలీలు ప్రారంభం కావు.</translation>
 <translation id="3279230909244266691">ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. వర్చ్యువల్ మెషీన్‌ను ప్రారంభిస్తోంది.</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 39ce058..695f298 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -3199,7 +3199,6 @@
 <translation id="3275778913554317645">เปิดเป็นหน้าต่าง</translation>
 <translation id="3277214528693754078">ไปยังส่วนต่างๆ ด้วยเคอร์เซอร์ข้อความ (การเรียกดูด้วยแป้นพิมพ์)</translation>
 <translation id="3277594800340743211">เงาขนาดใหญ่</translation>
-<translation id="3277784185056747463">รหัสผ่านของอุปกรณ์หรือรหัสผ่านของบัญชี Google</translation>
 <translation id="3278001907972365362">บัญชี Google ของคุณต้องการการดำเนินการ</translation>
 <translation id="3279092821516760512">รายชื่อติดต่อที่เลือกจะแชร์เนื้อหากับคุณได้เมื่ออยู่ใกล้เคียง การโอนจะไม่เริ่มจนกว่าคุณจะยอมรับ</translation>
 <translation id="3279230909244266691">ขั้นตอนนี้อาจใช้เวลาสักครู่ กำลังเริ่มเครื่องเสมือน</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 12ecef79..0b58587 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -3192,7 +3192,6 @@
 <translation id="3275778913554317645">Pencere olarak aç</translation>
 <translation id="3277214528693754078">Metin imleciyle gezinin (klavyeyle göz atma)</translation>
 <translation id="3277594800340743211">Büyük gölge</translation>
-<translation id="3277784185056747463">Cihaz şifresi veya Google Hesabı şifresi</translation>
 <translation id="3278001907972365362">Google Hesabınız/Hesaplarınız işlem gerektiriyor</translation>
 <translation id="3279092821516760512">Seçili kişiler yakındayken sizinle içerik paylaşabilirler. Siz kabul edene kadar aktarım başlamaz.</translation>
 <translation id="3279230909244266691">Bu işlem birkaç dakika sürebilir. Sanal makine başlatılıyor.</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index dd0f5ef..2d399a8 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -332,7 +332,9 @@
 <translation id="1227660082540388410">Змінити ключ доступу</translation>
 <translation id="1227993798763400520">Не вдалося транслювати. Повторіть спробу.</translation>
 <translation id="1230417814058465809">Стандартний захист увімкнено. Щоб посилити свою безпеку, активуйте покращений захист.</translation>
+<translation id="1230961867057865279">Мова цієї сторінки не <ph name="LANGUAGE" /></translation>
 <translation id="1231426483209637778">Ми збережемо дані вашої мережі, і вам не доведеться вводити їх знову, коли ви наступного разу користуватиметеся пристроєм <ph name="DEVICE_TYPE" /></translation>
+<translation id="1231489110997683307">Мова цієї сторінки не <ph name="LANGUAGE" /></translation>
 <translation id="1231572247662419826">Сайти можуть просити дозвіл отримувати й використовувати дані, введені за допомогою миші</translation>
 <translation id="1232569758102978740">Без імені</translation>
 <translation id="1233497634904001272">Щоб завершити запит, знову торкніться ключа безпеки.</translation>
@@ -3212,7 +3214,6 @@
 <translation id="3275778913554317645">Відкрити вікно</translation>
 <translation id="3277214528693754078">Навігація за допомогою текстового курсора (режим активного курсора)</translation>
 <translation id="3277594800340743211">Велика тінь</translation>
-<translation id="3277784185056747463">Пароль пристрою або пароль облікового запису Google</translation>
 <translation id="3278001907972365362">Імовірна проблема з обліковим записом Google</translation>
 <translation id="3279092821516760512">Вибрані контакти можуть надсилати вам дані, коли перебувають неподалік. Передача інформації розпочнеться, лише коли ви приймете запит.</translation>
 <translation id="3279230909244266691">Це може тривати кілька хвилин. Запускається віртуальна машина.</translation>
@@ -8559,6 +8560,7 @@
 <translation id="7212097698621322584">Введіть поточний PIN-код, щоб змінити його. Якщо ви не знаєте його, необхідно скинути ключ безпеки, а тоді створити новий PIN-код.</translation>
 <translation id="7214047272988222011">Дозволено: <ph name="PERMISSION_DETAILS" />. Надайте <ph name="LINK_BEGIN" />доступ до системної камери<ph name="LINK_END" />.</translation>
 <translation id="721490496276866468">Імпортувати паролі</translation>
+<translation id="7217208603285112910">Мова вибраного тексту не <ph name="LANGUAGE" /></translation>
 <translation id="7219254577985949841">Видалити дані сайту?</translation>
 <translation id="7219473482981809164">Ми виявили кілька профілів, які можна завантажити. Перш ніж продовжити, виберіть потрібний.</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{Немає ненадійних паролів}=1{1 ненадійний пароль}one{{NUM_WEAK} ненадійний пароль}few{{NUM_WEAK} ненадійні паролі}many{{NUM_WEAK} ненадійних паролів}other{{NUM_WEAK} ненадійного пароля}}</translation>
@@ -10120,6 +10122,7 @@
 <translation id="8325413836429495820">Заборонено переглядати буфер обміну</translation>
 <translation id="8326478304147373412">PKCS #7, ланцюжок сертифікатів</translation>
 <translation id="8327386430364625757">Математичний шрифт</translation>
+<translation id="8327490658947427005">Мова вибраного тексту не <ph name="LANGUAGE" /></translation>
 <translation id="8327676037044516220">Дозволи й налаштування контенту</translation>
 <translation id="8328228852664998535">Якщо продовжити, ваші паролі, ключі доступу й інші дані буде назавжди видалено із сервісу <ph name="BRAND" />. Облікові записи, створені для сайтів або додатків, не видалятимуться.</translation>
 <translation id="8328777765163860529">Закрити всі</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 1907b858..10168fb 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -329,7 +329,9 @@
 <translation id="1227660082540388410">پاس کی میں ترمیم کریں</translation>
 <translation id="1227993798763400520">کاسٹ کرنے میں ناکام۔ براہ کرم دوبارہ کوشش کریں۔</translation>
 <translation id="1230417814058465809">معیاری تحفظ آن ہے۔ اور بھی مزید سیکیورٹی کے لیے، بہتر تحفظ کا استعمال کریں۔</translation>
+<translation id="1230961867057865279"><ph name="LANGUAGE" /> میں صفحہ نہیں ہے</translation>
 <translation id="1231426483209637778">اگلی بار جب آپ <ph name="DEVICE_TYPE" /> استعمال کریں گے تو ہم آپ کے نیٹ ورک کو یاد رکھیں گے</translation>
+<translation id="1231489110997683307"><ph name="LANGUAGE" /> میں صفحہ نہیں ہے</translation>
 <translation id="1231572247662419826">سائٹس آپ کے ماؤس ان پٹ کو کیپچر کرنے اور استعمال کرنے کے لیے اجازت طلب کر سکتی ہیں</translation>
 <translation id="1232569758102978740">بلا عنوان</translation>
 <translation id="1233497634904001272">درخواست کو مکمل کرنے کیلئے، اپنی سیکیورٹی کلید پر دوبارہ ٹچ کریں۔</translation>
@@ -3196,7 +3198,6 @@
 <translation id="3275778913554317645">بطور ونڈو کھولیں</translation>
 <translation id="3277214528693754078">ٹیکسٹ کرسر کی مدد سے نیویگیٹ کریں (کیرٹ براؤزنگ)</translation>
 <translation id="3277594800340743211">بڑا شیڈو</translation>
-<translation id="3277784185056747463">‏آلے کا پاس ورڈ یا Google اکاؤنٹ کا پاس ورڈ</translation>
 <translation id="3278001907972365362">‏آپ کے Google اکاؤنٹ (اکاؤنٹس) کو توجہ کی ضرورت ہے</translation>
 <translation id="3279092821516760512">منتخب رابطے قریب میں ہونے پر آپ کے ساتھ اشتراک کر سکتے ہیں۔ آپ کے قبول کئے بغیر منتقلیاں شروع نہیں ہوں گی۔</translation>
 <translation id="3279230909244266691">اس کارروائی میں کچھ منٹ لگ سکتے ہيں۔ ورچوئل مشین شروع ہو رہی ہے۔</translation>
@@ -8538,6 +8539,7 @@
 <translation id="7212097698621322584">‏PIN تبدیل کرنے کیلئے، اپنا موجودہ PIN درج کریں۔ اگر آپ کو اپنا PIN نہیں معلوم ہے تو آپ کو پہلے اپنی سیکیورٹی کلید دوبارہ ترتیب دینی ہوگی اور پھر ایک نیا PIN تخلیق کرنا ہوگا۔</translation>
 <translation id="7214047272988222011">اجازت دی گئی – <ph name="PERMISSION_DETAILS" />۔ <ph name="LINK_BEGIN" />سسٹم کیمرا کی رسائی<ph name="LINK_END" /> آن کریں۔</translation>
 <translation id="721490496276866468">پاس ورڈز درآمد کریں</translation>
+<translation id="7217208603285112910"><ph name="LANGUAGE" /> میں انتخاب نہیں ہے</translation>
 <translation id="7219254577985949841">سائٹ ڈیٹا کو حذف کریں؟</translation>
 <translation id="7219473482981809164">ہمیں ڈاؤن لوڈ کے لیے متعدد دستیاب پروفائلز ملی ہیں۔ آگے بڑھنے سے پہلے اس ایک کو منتخب کریں جسے آپ ڈاؤن لوڈ کرنا چاہتے ہیں۔</translation>
 <translation id="7219762788664143869">{NUM_WEAK,plural, =0{کوئی کمزور پاس ورڈ نہیں}=1{1 کمزور پاس ورڈ}other{{NUM_WEAK} کمزور پاس ورڈز}}</translation>
@@ -10099,6 +10101,7 @@
 <translation id="8325413836429495820">آپ کے کلپ بورڈ کو دیکھنے کی اجازت نہیں ہے</translation>
 <translation id="8326478304147373412">‏PKCS #7، سرٹیفیکیٹ چین</translation>
 <translation id="8327386430364625757">ریاضی کا فونٹ</translation>
+<translation id="8327490658947427005"><ph name="LANGUAGE" /> میں انتخاب نہیں ہے</translation>
 <translation id="8327676037044516220">اجازتیں اور مواد کی ترتیبات</translation>
 <translation id="8328228852664998535">اگر آپ جاری رکھتے ہیں تو آپ کے پاس ورڈز، پاس کیز، اور دیگر ڈیٹا کو <ph name="BRAND" /> سے مستقل طور پر حذف کر دیا جائے گا۔ سائٹس یا ایپس کے لیے آپ کے بنائے ہوئے اکاؤنٹس کو حذف نہیں کیا جائے گا۔</translation>
 <translation id="8328777765163860529">تمام بند کریں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 47aaafb..ab71d55 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -3198,7 +3198,6 @@
 <translation id="3275778913554317645">Alohida oynada ochish</translation>
 <translation id="3277214528693754078">Matn kursori bilan harakatlanish (faol kursor rejimi)</translation>
 <translation id="3277594800340743211">Katta soya</translation>
-<translation id="3277784185056747463">Qurilma paroli yoki Google hisobi paroli</translation>
 <translation id="3278001907972365362">Google hisob(lar)ingiz bilan muammo bor</translation>
 <translation id="3279092821516760512">Tanlangan kontaktlar atrofdaligida sizga fayl yubora oladi. Uzatmalar qabul qilinmaguncha boshlanmaydi.</translation>
 <translation id="3279230909244266691">Bu jarayon bir necha daqiqa olishi mumkin. Virtual mashina ishga tushirilmoqda.</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 5c6773f..8336261 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -272,6 +272,7 @@
 <translation id="1187722533808055681">Đánh thức khỏi chế độ rảnh</translation>
 <translation id="1188807932851744811">Nhật ký chưa được tải lên.</translation>
 <translation id="1190086046506744802">Cách nhau rất xa</translation>
+<translation id="1190155014618058972">Tạo tổ hợp phím tuỳ chỉnh</translation>
 <translation id="11901918071949011">{NUM_FILES,plural, =1{Truy cập một tệp được lưu trữ trên máy tính của bạn}other{Truy cập # tệp được lưu trữ trên máy tính của bạn}}</translation>
 <translation id="1190706173655543975">Chính sách ứng dụng của Microsoft</translation>
 <translation id="1191353342579061195">Chọn giao diện phù hợp với nhu cầu của bạn. Để thay đổi giao diện, hình nền, trình bảo vệ màn hình, v.v., bạn chỉ cần nhấp chuột phải vào màn hình.</translation>
@@ -1137,6 +1138,7 @@
 <translation id="1794212650797661990">Ẩn mật khẩu của <ph name="DOMAIN" /></translation>
 <translation id="1794791083288629568">Gửi ý kiến phản hồi để giúp chúng tôi khắc phục sự cố này.</translation>
 <translation id="1795214765651529549">Sử dụng chủ đề Cổ điển</translation>
+<translation id="1795438342141780114">Đặt lại con trỏ về vị trí chính giữa</translation>
 <translation id="1795668164971917185">Vào lần tới phát hiện ra nội dung tải xuống đáng ngờ, tính năng Duyệt web An toàn của Google sẽ tự động quét tệp đó theo cấp độ <ph name="LINK" /> mà bạn đã chọn</translation>
 <translation id="1796588414813960292">Các tính năng cần dùng âm thanh sẽ không hoạt động</translation>
 <translation id="1797117170091578105">Chơi bằng bàn phím Chromebook. Bạn có thể tùy chỉnh các phím cho các thao tác cụ thể.</translation>
@@ -1825,6 +1827,7 @@
 <translation id="2278562042389100163">Mở cửa sổ trình duyệt</translation>
 <translation id="2278668501808246459">Đang khởi động dịch vụ quản lý vùng chứa</translation>
 <translation id="2280486287150724112">Lề phải</translation>
+<translation id="228059581448666199">Nhấp chuột trái</translation>
 <translation id="2281863813036651454">Nhấn chuột trái</translation>
 <translation id="2282146716419988068">Quá trình GPU</translation>
 <translation id="228293613124499805">Hầu hết trang web bạn truy cập có thể sẽ lưu dữ liệu vào thiết bị, thường là để cải thiện trải nghiệm của bạn bằng cách lưu các lựa chọn ưu tiên hoặc thông tin mà bạn chia sẻ với trang web. Chúng tôi khuyên bạn luôn bật chế độ cài đặt này.</translation>
@@ -3209,7 +3212,6 @@
 <translation id="3275778913554317645">Mở dưới dạng cửa sổ</translation>
 <translation id="3277214528693754078">Di chuyển bằng con trỏ văn bản (duyệt web bằng con nháy)</translation>
 <translation id="3277594800340743211">Bóng lớn</translation>
-<translation id="3277784185056747463">Mật khẩu thiết bị hoặc mật khẩu của Tài khoản Google</translation>
 <translation id="3278001907972365362">Bạn cần chú ý đến Tài khoản Google của mình</translation>
 <translation id="3279092821516760512">Những người liên hệ mà bạn đã chọn có thể chia sẻ với bạn khi họ ở gần. Quá trình truyền tệp sẽ bắt đầu khi bạn chấp nhận.</translation>
 <translation id="3279230909244266691">Quá trình này có thể mất vài phút. Đang khởi động máy ảo.</translation>
@@ -4719,6 +4721,7 @@
 <translation id="4359408040881008151">Đã được cài đặt vì (các) tiện ích phụ thuộc.</translation>
 <translation id="4359717112757026264">Cảnh thành phố</translation>
 <translation id="4359809482106103048">Tổng quan về an toàn</translation>
+<translation id="4360738659108163902">Nhấp chuột phải</translation>
 <translation id="4361142739114356624">Khóa cá nhân cho chứng chỉ ứng dụng này còn thiếu hoặc không hợp lệ</translation>
 <translation id="4361745360460842907">Mở dưới dạng thẻ</translation>
 <translation id="4362675504017386626"><ph name="ACCOUNT_EMAIL" /> là tài khoản mặc định trên <ph name="DEVICE_TYPE" /> của bạn</translation>
@@ -5348,6 +5351,7 @@
 <translation id="482952334869563894">Các thiết bị USB của nhà cung cấp <ph name="VENDOR_ID" /></translation>
 <translation id="4830502475412647084">Đang cài đặt bản cập nhật hệ điều hành</translation>
 <translation id="4831226137013573603">tắt micrô</translation>
+<translation id="483262387981411190">Tạm dừng hoặc tiếp tục điều khiển bằng khuôn mặt</translation>
 <translation id="4833683849865011483">Tìm thấy 1 máy in trên máy chủ máy in</translation>
 <translation id="4835598628985424375">Ngập môi lại bằng cách mím chặt môi</translation>
 <translation id="4835677468087803981">Ẩn mã PIN</translation>
@@ -5908,6 +5912,7 @@
 <translation id="5240931875940563122">Đăng nhập bằng điện thoại Android</translation>
 <translation id="5242724311594467048">Cho phép "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Vui lòng thử lại sau giây lát</translation>
+<translation id="5243752692914402705">Sau khi bạn bắt đầu chế độ cuộn, hãy di chuyển đầu theo hướng bạn muốn cuộn</translation>
 <translation id="5244234799035360187">Giờ đây, OneDrive sẽ xuất hiện trong ứng dụng Files</translation>
 <translation id="5244466461749935369">Giữ lại</translation>
 <translation id="5244474230056479698">Đang đồng bộ hóa với <ph name="EMAIL" /></translation>
@@ -6659,6 +6664,7 @@
 <translation id="5805697420284793859">Trình quản lý cửa sổ</translation>
 <translation id="5806447147478173900">Tổng bộ nhớ mà các trang web hiển thị sử dụng: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5806773519584576205">0° (Mặc định)</translation>
+<translation id="5807774529265708172">Hiện hoặc ẩn bàn phím ảo</translation>
 <translation id="5809835394668218762">Thao tác khác cho <ph name="WEBSITE" /></translation>
 <translation id="5809840528400421362">Mã PIN phải bao gồm 6 chữ số</translation>
 <translation id="5810809306422959727">Tài khoản này không đủ điều kiện để thêm các quyền kiểm soát của cha mẹ</translation>
@@ -6852,6 +6858,7 @@
 <translation id="5945002094477276055"><ph name="FILE_NAME" /> có thể nguy hiểm. Gửi đến tính năng Duyệt web An toàn của Google để quét?</translation>
 <translation id="5945363896952315544">Khóa bảo mật của bạn không thể lưu trữ thêm vân tay. Để thêm một vân tay mới, trước tiên, hãy xóa một vân tay hiện có.</translation>
 <translation id="5946591249682680882">ID báo cáo <ph name="WEBRTC_LOG_REPORT_ID" /></translation>
+<translation id="5947651424015173580">Nhấp đúp chuột</translation>
 <translation id="5948476936444935795">Huỷ nhập</translation>
 <translation id="5948536763493709626">Kết nối bàn phím/chuột hoặc tiếp tục thiết lập bằng màn hình cảm ứng. Nếu bạn đang dùng thiết bị Bluetooth, hãy đảm bảo thiết bị đã sẵn sàng ghép nối.</translation>
 <translation id="5949544233750246342">Không thể phân tích cú pháp tệp</translation>
@@ -9605,6 +9612,7 @@
 <translation id="7958828865373988933">Nếu bạn muốn tạo khoá truy cập cho <ph name="APP_NAME" /> trên khoá bảo mật USB, hãy cắm rồi chạm vào khoá bảo mật đó ngay</translation>
 <translation id="7959074893852789871">Tệp có chứa nhiều chứng chỉ, một vài chứng chỉ trong đó chưa được nhập:</translation>
 <translation id="7959665254555683862">&amp;Thẻ ẩn danh mới</translation>
+<translation id="7960540720012720106">Mở màn hình tổng quan về cửa sổ</translation>
 <translation id="7961015016161918242">Không bao giờ</translation>
 <translation id="7963001036288347286">Tăng tốc bàn di chuột</translation>
 <translation id="7963513503134856713">Đã di chuyển cửa sổ sang bên phải</translation>
@@ -9684,6 +9692,7 @@
 <translation id="8014154204619229810">Trình cập nhật hiện đang chạy. Hãy làm mới sau một phút nữa để kiểm tra lại.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> không thể hoàn nguyên về phiên bản được cài đặt trước. Vui lòng thử lại để Powerwash thiết bị của bạn.</translation>
 <translation id="8015565302826764056">{NUM_OF_FILES,plural, =1{Đã sao chép 1 tệp}other{Đã sao chép {NUM_OF_FILES} tệp}}</translation>
+<translation id="8017004049696748317">Bắt đầu hoặc dừng nhập bằng giọng nói</translation>
 <translation id="8017176852978888182">Thư mục do Linux chia sẻ</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Đã chỉnh sửa phím tắt</translation>
@@ -9698,6 +9707,7 @@
 <translation id="8025291188699172126">Giới thiệu về bản cập nhật</translation>
 <translation id="8026471514777758216">Tất cả thiết bị của bạn</translation>
 <translation id="8026784703228858744">Lưu dấu trang và các nội dung khác bằng tính năng đồng bộ hoá</translation>
+<translation id="8027325966409484573">{NUM_DAYS,plural, =0{Đã truy cập 0 ngày trước}=1{Đã truy cập 1 ngày trước}other{Đã truy cập # ngày trước}}</translation>
 <translation id="8028060951694135607">Khôi phục Khoá Microsoft</translation>
 <translation id="8028803902702117856">Đang tải xuống <ph name="SIZE" />, <ph name="FILE_NAME" /></translation>
 <translation id="8028993641010258682">Kích thước</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index eceb572..9424f9b 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -3186,7 +3186,6 @@
 <translation id="3275778913554317645">在窗口中打开</translation>
 <translation id="3277214528693754078">使用文本光标(光标浏览模式)进行导航</translation>
 <translation id="3277594800340743211">大阴影</translation>
-<translation id="3277784185056747463">设备密码或 Google 账号密码</translation>
 <translation id="3278001907972365362">您需要注意自己的 Google 账号</translation>
 <translation id="3279092821516760512">附近的所选联系人可与您分享内容。仅当您接受后,系统才会开始传输内容。</translation>
 <translation id="3279230909244266691">此过程可能需要几分钟的时间。正在启动虚拟机。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 2a77d53..a504dc4 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -3206,7 +3206,6 @@
 <translation id="3275778913554317645">在視窗中開啟</translation>
 <translation id="3277214528693754078">透過文字游標導覽 (鍵盤瀏覽)</translation>
 <translation id="3277594800340743211">大型陰影</translation>
-<translation id="3277784185056747463">裝置密碼或 Google 帳戶密碼</translation>
 <translation id="3278001907972365362">您需要注意自己的 Google 帳戶</translation>
 <translation id="3279092821516760512">所選聯絡人在附近時可與您分享內容。您必須選擇接受,系統才能傳送檔案。</translation>
 <translation id="3279230909244266691">此程序可能需時幾分鐘。正在啟動虛擬機器。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index f3c563b0..f87d865 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -3193,7 +3193,6 @@
 <translation id="3275778913554317645">在視窗中開啟</translation>
 <translation id="3277214528693754078">使用文字游標進行瀏覽 (鍵盤瀏覽)</translation>
 <translation id="3277594800340743211">大型陰影</translation>
-<translation id="3277784185056747463">裝置密碼或 Google 帳戶密碼</translation>
 <translation id="3278001907972365362">你的 Google 帳戶有狀況需處理</translation>
 <translation id="3279092821516760512">指定聯絡人在附近時可與你分享內容。系統會先確認你是否同意,然後才會開始進行資料傳輸作業。</translation>
 <translation id="3279230909244266691">正在啟動虛擬機器,過程可能需要幾分鐘。</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index fa59207c..b51b65e7 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -3212,7 +3212,6 @@
 <translation id="3275778913554317645">Vula njengewindi</translation>
 <translation id="3277214528693754078">Zulazula nge-cursor yombhalo (ukubhrawuza kwe-caret)</translation>
 <translation id="3277594800340743211">Isithunzi esikhulu</translation>
-<translation id="3277784185056747463">Iphasiwedi yedivayisi noma iphasiwedi ye-Google Account</translation>
 <translation id="3278001907972365362">Ama-akhawunti akho e-Google adinga ukunakwa</translation>
 <translation id="3279092821516760512">Abathintwayo abakhethiwe bangakwazi ukwabelana nawe lapho useduze. Ukudlulisa ngeke kuqale kuze kube yilapho wamukela.</translation>
 <translation id="3279230909244266691">Le nqubo ingathatha amaminithi ambalwa. Iqalisa umshini obonakalayo.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
index ab3f331..c59519e 100644
--- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -540,6 +540,7 @@
 <translation id="7668816516367091728">Obavljajte zadatke poput prevođenja, računanja i drugih zadataka direktno iz trake za adresu</translation>
 <translation id="7670287553302121848">Chrome nalog zahteva ponovnu potvrdu identiteta</translation>
 <translation id="769538538642757151">Chrome će vas obavestiti ako treba da pregledate nešto</translation>
+<translation id="77283119132245232">Pruža usluge praćenja sistema za <ph name="BROWSER_NAME" />. Ako je ova usluga onemogućena, tragovi učinka koje napravi pregledač neće sadržati događaje u celom sistemu, poput promene konteksta i pripremljenih događaja sa nitima.</translation>
 <translation id="7747138024166251722">Program za instalaciju nije mogao da napravi privremeni direktorijum. Proverite da li imate slobodnog prostora na disku, kao i dozvolu da instalirate softver.</translation>
 <translation id="7761834446675418963">Kliknite na ime da biste otvorili Chrome i počnite da pregledate.</translation>
 <translation id="7763983146198734674">Sačuvajte lozinke i pristupajte im dok ste u pokretu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index 2ac28ac..3c455c5f 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -540,6 +540,7 @@
 <translation id="7668816516367091728">Обављајте задатке попут превођења, рачунања и других задатака директно из траке за адресу</translation>
 <translation id="7670287553302121848">Chrome налог захтева поновну потврду идентитета</translation>
 <translation id="769538538642757151">Chrome ће вас обавестити ако треба да прегледате нешто</translation>
+<translation id="77283119132245232">Пружа услуге праћења система за <ph name="BROWSER_NAME" />. Ако је ова услуга онемогућена, трагови учинка које направи прегледач неће садржати догађаје у целом систему, попут промене контекста и припремљених догађаја са нитима.</translation>
 <translation id="7747138024166251722">Програм за инсталацију није могао да направи привремени директоријум. Проверите да ли имате слободног простора на диску, као и дозволу да инсталирате софтвер.</translation>
 <translation id="7761834446675418963">Кликните на име да бисте отворили Chrome и почните да прегледате.</translation>
 <translation id="7763983146198734674">Сачувајте лозинке и приступајте им док сте у покрету</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 316a6f6..a826cc0 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -6877,6 +6877,8 @@
       "enterprise/signin/enterprise_signin_service_factory.h",
       "enterprise/signin/managed_profile_creator.cc",
       "enterprise/signin/managed_profile_creator.h",
+      "enterprise/signin/managed_profile_required_navigation_throttle.cc",
+      "enterprise/signin/managed_profile_required_navigation_throttle.h",
       "enterprise/signin/oidc_authentication_signin_interceptor.cc",
       "enterprise/signin/oidc_authentication_signin_interceptor.h",
       "enterprise/signin/oidc_authentication_signin_interceptor_factory.cc",
diff --git a/chrome/browser/ash/file_suggest/file_suggest_keyed_service.cc b/chrome/browser/ash/file_suggest/file_suggest_keyed_service.cc
index 7c33959..d8a8ee9 100644
--- a/chrome/browser/ash/file_suggest/file_suggest_keyed_service.cc
+++ b/chrome/browser/ash/file_suggest/file_suggest_keyed_service.cc
@@ -86,17 +86,23 @@
     return;
   }
 
-  GetSuggestFileDataCallback filter_suggestions_callback =
+  // Deduplicate file suggestions, then filter out removed suggestions.
+  GetSuggestFileDataCallback filter_removed_suggestions_callback =
       base::BindOnce(&FileSuggestKeyedService::FilterRemovedSuggestions,
                      weak_factory_.GetWeakPtr(), std::move(callback));
+  GetSuggestFileDataCallback dedupe_suggestions_callback =
+      base::BindOnce(&FileSuggestKeyedService::FilterDuplicateSuggestions,
+                     weak_factory_.GetWeakPtr(),
+                     std::move(filter_removed_suggestions_callback));
+
   switch (type) {
     case FileSuggestionType::kDriveFile:
       drive_file_suggestion_provider_->GetSuggestFileData(
-          std::move(filter_suggestions_callback));
+          std::move(dedupe_suggestions_callback));
       return;
     case FileSuggestionType::kLocalFile:
       local_file_suggestion_provider_->GetSuggestFileData(
-          std::move(filter_suggestions_callback));
+          std::move(dedupe_suggestions_callback));
       return;
   }
 }
@@ -182,6 +188,30 @@
          IsProtoInitialized();
 }
 
+void FileSuggestKeyedService::FilterDuplicateSuggestions(
+    GetSuggestFileDataCallback callback,
+    const std::optional<std::vector<FileSuggestData>>& suggestions) {
+  // There are no candidate suggestions. Therefore, return early.
+  if (!suggestions.has_value() || suggestions->empty()) {
+    std::move(callback).Run(suggestions);
+    return;
+  }
+
+  // Dedupe any items with duplicate file_path.
+  std::vector<FileSuggestData> unique_suggestions;
+  std::set<base::FilePath> unique_file_paths;
+  for (const auto& suggestion : *suggestions) {
+    auto result = unique_file_paths.insert(suggestion.file_path);
+    if (result.second) {
+      // Insertion took place, current `suggestion` file path is not a
+      // duplicate.
+      unique_suggestions.push_back(suggestion);
+    }
+  }
+
+  std::move(callback).Run(unique_suggestions);
+}
+
 void FileSuggestKeyedService::FilterRemovedSuggestions(
     GetSuggestFileDataCallback callback,
     const std::optional<std::vector<FileSuggestData>>& suggestions) {
diff --git a/chrome/browser/ash/file_suggest/file_suggest_keyed_service.h b/chrome/browser/ash/file_suggest/file_suggest_keyed_service.h
index a047433..33be9a08 100644
--- a/chrome/browser/ash/file_suggest/file_suggest_keyed_service.h
+++ b/chrome/browser/ash/file_suggest/file_suggest_keyed_service.h
@@ -105,6 +105,12 @@
   // Called whenever a suggestion provider updates.
   void OnSuggestionProviderUpdated(FileSuggestionType type);
 
+  // Filters `suggestions` so that any suggestons which have a duplicate file
+  // path will be removed. Then returns the filtered result through `callback`.
+  void FilterDuplicateSuggestions(
+      GetSuggestFileDataCallback callback,
+      const std::optional<std::vector<FileSuggestData>>& suggestions);
+
   // Filters `suggestions` so that the suggestions that were removed before do
   // not appear. Then returns the filtered result through `callback`.
   void FilterRemovedSuggestions(
diff --git a/chrome/browser/ash/file_suggest/file_suggest_keyed_service_unittest.cc b/chrome/browser/ash/file_suggest/file_suggest_keyed_service_unittest.cc
index 4100d66..472fe8c 100644
--- a/chrome/browser/ash/file_suggest/file_suggest_keyed_service_unittest.cc
+++ b/chrome/browser/ash/file_suggest/file_suggest_keyed_service_unittest.cc
@@ -197,6 +197,15 @@
     return suggested_file_paths;
   }
 
+  MockFileSuggestKeyedService* file_suggest_service() {
+    return file_suggest_service_;
+  }
+  ScopedTestMountPoint* drive_mount_point() {
+    return drive_fs_mount_point_.get();
+  }
+  ScopedTestMountPoint* local_mount_point() {
+    return local_fs_mount_point_.get();
+  }
   // Hosts the proto file.
   base::ScopedTempDir temp_dir_;
 
@@ -314,4 +323,72 @@
   EXPECT_TRUE(GetSuggestionsForType(FileSuggestionType::kLocalFile)->empty());
 }
 
+// Verifies filtering out duplicate drive file suggestions.
+TEST_F(FileSuggestKeyedServiceRemoveTest, FilterDuplicateDriveFileSuggestions) {
+  const base::FilePath file_path_1 = drive_mount_point()->CreateArbitraryFile();
+  std::optional<std::vector<FileSuggestData>> suggestions;
+  suggestions =
+      std::vector<FileSuggestData>{{FileSuggestionType::kDriveFile, file_path_1,
+                                    /*title=*/std::nullopt,
+                                    /*new_prediction_reason=*/std::nullopt,
+                                    /*modified_time=*/std::nullopt,
+                                    /*viewed_time=*/std::nullopt,
+                                    /*shared_time=*/std::nullopt,
+                                    /*new_score=*/std::nullopt,
+                                    /*drive_file_id=*/std::nullopt,
+                                    /*icon_url=*/std::nullopt},
+                                   {FileSuggestionType::kDriveFile, file_path_1,
+                                    /*title=*/std::nullopt,
+                                    /*new_prediction_reason=*/std::nullopt,
+                                    /*modified_time=*/std::nullopt,
+                                    /*viewed_time=*/std::nullopt,
+                                    /*shared_time=*/std::nullopt,
+                                    /*new_score=*/std::nullopt,
+                                    /*drive_file_id=*/std::nullopt,
+                                    /*icon_url=*/std::nullopt}};
+
+  EXPECT_EQ(suggestions->size(), 2u);
+  file_suggest_service()->SetSuggestionsForType(FileSuggestionType::kDriveFile,
+                                                /*suggestions=*/suggestions);
+
+  // Check the suggested drive files, duplicate files should be removed.
+  suggestions = GetSuggestionsForType(FileSuggestionType::kDriveFile);
+  EXPECT_EQ(suggestions->size(), 1u);
+  EXPECT_EQ(suggestions->at(0).file_path.value(), file_path_1.value());
+}
+
+// Verifies filtering out duplicate local file suggestions.
+TEST_F(FileSuggestKeyedServiceRemoveTest, FilterDuplicateLocalFileSuggestions) {
+  const base::FilePath file_path_1 = local_mount_point()->CreateArbitraryFile();
+  std::optional<std::vector<FileSuggestData>> suggestions;
+  suggestions =
+      std::vector<FileSuggestData>{{FileSuggestionType::kLocalFile, file_path_1,
+                                    /*title=*/std::nullopt,
+                                    /*new_prediction_reason=*/std::nullopt,
+                                    /*modified_time=*/std::nullopt,
+                                    /*viewed_time=*/std::nullopt,
+                                    /*shared_time=*/std::nullopt,
+                                    /*new_score=*/std::nullopt,
+                                    /*drive_file_id=*/std::nullopt,
+                                    /*icon_url=*/std::nullopt},
+                                   {FileSuggestionType::kLocalFile, file_path_1,
+                                    /*title=*/std::nullopt,
+                                    /*new_prediction_reason=*/std::nullopt,
+                                    /*modified_time=*/std::nullopt,
+                                    /*viewed_time=*/std::nullopt,
+                                    /*shared_time=*/std::nullopt,
+                                    /*new_score=*/std::nullopt,
+                                    /*drive_file_id=*/std::nullopt,
+                                    /*icon_url=*/std::nullopt}};
+
+  EXPECT_EQ(suggestions->size(), 2u);
+  file_suggest_service()->SetSuggestionsForType(FileSuggestionType::kLocalFile,
+                                                /*suggestions=*/suggestions);
+
+  // Check the suggested local files, duplicate files should be removed.
+  suggestions = GetSuggestionsForType(FileSuggestionType::kLocalFile);
+  EXPECT_EQ(suggestions->size(), 1u);
+  EXPECT_EQ(suggestions->at(0).file_path.value(), file_path_1.value());
+}
+
 }  // namespace ash::test
diff --git a/chrome/browser/ash/file_suggest/mock_file_suggest_keyed_service.cc b/chrome/browser/ash/file_suggest/mock_file_suggest_keyed_service.cc
index 44b1d6cf..09cac577 100644
--- a/chrome/browser/ash/file_suggest/mock_file_suggest_keyed_service.cc
+++ b/chrome/browser/ash/file_suggest/mock_file_suggest_keyed_service.cc
@@ -68,7 +68,11 @@
   if (iter != type_suggestion_mappings_.end()) {
     suggestions = iter->second;
   }
-  FilterRemovedSuggestions(std::move(callback), suggestions);
+  GetSuggestFileDataCallback filter_removed_suggestions_callback =
+      base::BindOnce(&MockFileSuggestKeyedService::FilterRemovedSuggestions,
+                     weak_factory_.GetWeakPtr(), std::move(callback));
+  FilterDuplicateSuggestions(std::move(filter_removed_suggestions_callback),
+                             suggestions);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/screens/pin_setup_screen.cc b/chrome/browser/ash/login/screens/pin_setup_screen.cc
index 42be4539..0d0fd5b4 100644
--- a/chrome/browser/ash/login/screens/pin_setup_screen.cc
+++ b/chrome/browser/ash/login/screens/pin_setup_screen.cc
@@ -195,13 +195,13 @@
 
 void PinSetupScreen::HideImpl() {
   token_lifetime_timeout_.Stop();
-  ClearAuthData(*context());
 }
 
 void PinSetupScreen::OnUserAction(const base::Value::List& args) {
   const std::string& action_id = args[0].GetString();
   if (action_id == kUserActionDoneButtonClicked) {
     RecordUserAction(action_id);
+    ClearAuthData(*context());
     token_lifetime_timeout_.Stop();
     exit_callback_.Run(Result::kDone);
     return;
@@ -209,6 +209,7 @@
   if (action_id == kUserActionSkipButtonClickedOnStart ||
       action_id == kUserActionSkipButtonClickedInFlow) {
     RecordUserAction(action_id);
+    ClearAuthData(*context());
     token_lifetime_timeout_.Stop();
     exit_callback_.Run(Result::kUserSkip);
     return;
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index 860a875..36f5bc88 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -166,14 +166,6 @@
   closure.Run();
 }
 
-// Version of `kTestShippingFormString` which uses <selectlist> instead of
-// <select>.
-std::string GenerateTestShippingFormWithSelectList() {
-  std::string out = kTestShippingFormString;
-  RE2::GlobalReplace(&out, "<(/?)select", "<\\1selectlist");
-  return out;
-}
-
 // Searches all frames of the primary page in |web_contents| and returns one
 // called |name|. If there are none, returns null, if there are more, returns
 // an arbitrary one.
@@ -881,8 +873,6 @@
     command_line->AppendSwitchASCII(
         translate::switches::kTranslateScriptURL,
         embedded_test_server()->GetURL("/mock_translate_script.js").spec());
-    command_line->AppendSwitchASCII("enable-blink-features",
-                                    "HTMLSelectListElement");
   }
 };
 
@@ -1078,12 +1068,9 @@
   autofill_manager->RemoveObserver(&observer);
 }
 
-void DoModifySelectFieldAndFill(AutofillInteractiveTest* test,
-                                bool should_test_selectlist) {
+void DoModifySelectFieldAndFill(AutofillInteractiveTest* test) {
   test->CreateTestProfile();
-  test->SetTestUrlResponse(should_test_selectlist
-                               ? GenerateTestShippingFormWithSelectList()
-                               : kTestShippingFormString);
+  test->SetTestUrlResponse(kTestShippingFormString);
   ASSERT_TRUE(
       ui_test_utils::NavigateToURL(test->browser(), test->GetTestUrl()));
 
@@ -1100,13 +1087,7 @@
 // Test that autofill doesn't refill a <select> field initially modified by the
 // user.
 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ModifySelectFieldAndFill) {
-  DoModifySelectFieldAndFill(this, /*should_test_selectlist=*/false);
-}
-
-// Test that autofill doesn't refill a <selectlist> field initially modified by
-// the user.
-IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ModifySelectListFieldAndFill) {
-  DoModifySelectFieldAndFill(this, /*should_test_selectlist=*/true);
+  DoModifySelectFieldAndFill(this);
 }
 
 // Test that autofill works when the website prefills the form.
@@ -1715,10 +1696,6 @@
           var selectinput = false;
           var selectchange = false;
           var selectblur = false;
-          var selectlistfocus = false;
-          var selectlistinput = false;
-          var selectlistchange = false;
-          var selectlistblur = false;
           </script>
           A form for testing events.
           <form action="https://www.example.com/" method="POST" id="shipping">
@@ -1751,13 +1728,11 @@
           <label for="zip">ZIP code:</label>
            <input type="text" id="zip"><br>
           <label for="country">Country:</label>
-           <selectlist id="country"
-           onfocus="selectlistfocus = true" oninput="selectlistinput = true"
-           onchange="selectlistchange = true" onblur="selectlistblur = true" >
+           <select id="country">
            <option value="" selected="yes">--</option>
            <option value="CA">Canada</option>
            <option value="US">United States</option>
-           </selectlist><br>
+           </select><br>
           <label for="phone">Phone number:</label>
            <input type="text" id="phone"><br>
           </form> )";
@@ -1792,12 +1767,6 @@
   EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectinput;"));
   EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectchange;"));
   EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectblur;"));
-
-  // Checks that all the events were fired for the selectlist field.
-  EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectlistfocus;"));
-  EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectlistinput;"));
-  EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectlistchange;"));
-  EXPECT_EQ(true, content::EvalJs(GetWebContents(), "selectlistblur;"));
 }
 
 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterTranslate) {
@@ -2349,45 +2318,6 @@
       GetFieldValueById("phone"));
 }
 
-// Test that an 'onchange' event is not fired when a <selectlist> preview
-// suggestion is shown or hidden.
-IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
-                       NoEventFiredWhenExitingSelectListPreview) {
-  // It is hard to test that an event will not happen in the future, but we
-  // assume that applying similar operations on two elements in sequence results
-  // in a consistent order of events triggered by the operations. So the test
-  // strategy here is to first trigger a preview on `state` select, and then
-  // select an element on `other`.
-
-  CreateTestProfile();
-  GURL url = embedded_test_server()->GetURL(
-      "/autofill/form_selectlist_preview_no_onchange.html");
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-
-  // Show autofill preview.
-  ASSERT_TRUE(
-      AutofillFlow(GetElementById("firstname"), this, {.do_accept = false}));
-
-  // Hide autofill preview.
-  content::RenderWidgetHost* render_widget_host =
-      GetWebContents()->GetRenderWidgetHostView()->GetRenderWidgetHost();
-  ASSERT_TRUE(SendKeyToPopupAndWait(ui::DomKey::ESCAPE,
-                                    {ObservedUiEvents::kSuggestionsHidden},
-                                    render_widget_host));
-  ASSERT_FALSE(IsPopupShown());
-
-  // Select element on `other` and wait for `onchange` event.
-  ValueWaiter onchange_waiter =
-      ListenForValueChange("other", std::nullopt, GetWebContents());
-  ASSERT_TRUE(FocusField(GetElementById("other"), GetWebContents()));
-  EXPECT_EQ("First", GetFieldValueById("other"));
-  FillElementWithValue("other", "Second");
-  ASSERT_TRUE(std::move(onchange_waiter).Wait());
-
-  EXPECT_EQ(true, content::EvalJs(GetWebContents(), "other_changed;"));
-  EXPECT_EQ(false, content::EvalJs(GetWebContents(), "state_changed;"));
-}
-
 // An extension of the test fixture for tests with site isolation.
 class AutofillInteractiveIsolationTest : public AutofillInteractiveTestBase {
  protected:
@@ -2970,20 +2900,17 @@
 void DoDynamicChangingFormFill_SelectUpdated(
     AutofillInteractiveTestDynamicForm* test,
     net::EmbeddedTestServer* test_server,
-    bool should_test_selectlist,
     bool should_test_async_update) {
   test->CreateTestProfile();
   GURL url = test_server->GetURL(
       "a.com",
-      base::StringPrintf(
-          ("/autofill/dynamic_form_select_or_selectlist_options_change.html"
-           "?is_selectlist=%s&is_async=%s"),
-          should_test_selectlist ? "true" : "false",
-          should_test_async_update ? "true" : "false"));
+      base::StringPrintf(("/autofill/dynamic_form_select_options_change.html"
+                          "?is_async=%s"),
+                         should_test_async_update ? "true" : "false"));
   ASSERT_TRUE(ui_test_utils::NavigateToURL(test->browser(), url));
 
-  // Check that the test page correctly parsed the 'is_selectlist' GET parameter
-  // by checking type of the inserted field.
+  // Check that the test page correctly parsed the GET parameters by checking
+  // type of the inserted field.
   auto has_n_controls_of_type = [](FormControlType control_type,
                                    size_t expected_number,
                                    const FormStructure& form) {
@@ -2995,13 +2922,10 @@
     }
     return num_found == expected_number;
   };
-  ASSERT_TRUE(WaitForMatchingForm(
-      test->GetBrowserAutofillManager(),
-      should_test_selectlist
-          ? base::BindRepeating(has_n_controls_of_type,
-                                FormControlType::kSelectList, 1)
-          : base::BindRepeating(has_n_controls_of_type,
-                                FormControlType::kSelectOne, 2)));
+  ASSERT_TRUE(
+      WaitForMatchingForm(test->GetBrowserAutofillManager(),
+                          base::BindRepeating(has_n_controls_of_type,
+                                              FormControlType::kSelectOne, 2)));
 
   ValueWaiter refill = test->ListenForRefill("state");
   // Trigger first fill.
@@ -3028,16 +2952,6 @@
 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTestDynamicForm,
                        DynamicChangingFormFill_SelectUpdated) {
   DoDynamicChangingFormFill_SelectUpdated(this, embedded_test_server(),
-                                          /*should_test_selectlist=*/false,
-                                          /*should_test_async_update=*/false);
-}
-
-// Test that we can Autofill dynamically changing selectlists that have options
-// added and removed.
-IN_PROC_BROWSER_TEST_F(AutofillInteractiveTestDynamicForm,
-                       DynamicChangingFormFill_SelectListUpdated) {
-  DoDynamicChangingFormFill_SelectUpdated(this, embedded_test_server(),
-                                          /*should_test_selectlist=*/true,
                                           /*should_test_async_update=*/false);
 }
 
@@ -3046,16 +2960,6 @@
 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTestDynamicForm,
                        DynamicChangingFormFill_SelectUpdatedAsync) {
   DoDynamicChangingFormFill_SelectUpdated(this, embedded_test_server(),
-                                          /*should_test_selectlist=*/false,
-                                          /*should_test_async_update=*/true);
-}
-
-// Test that we can Autofill dynamically changing selectlists that have options
-// added and removed, when the updating occurs asynchronously.
-IN_PROC_BROWSER_TEST_F(AutofillInteractiveTestDynamicForm,
-                       DynamicChangingFormFill_SelectListUpdatedAsync) {
-  DoDynamicChangingFormFill_SelectUpdated(this, embedded_test_server(),
-                                          /*should_test_selectlist=*/true,
                                           /*should_test_async_update=*/true);
 }
 
diff --git a/chrome/browser/banners/app_banner_manager_browsertest.cc b/chrome/browser/banners/app_banner_manager_browsertest.cc
index ecfae0a..9ea5309 100644
--- a/chrome/browser/banners/app_banner_manager_browsertest.cc
+++ b/chrome/browser/banners/app_banner_manager_browsertest.cc
@@ -351,30 +351,57 @@
   base::AutoReset<double> total_engagement_;
 };
 
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_WebAppBannerNoTypeInManifest DISABLED_WebAppBannerNoTypeInManifest
+#else
+#define MAYBE_WebAppBannerNoTypeInManifest WebAppBannerNoTypeInManifest
+#endif
 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
-                       WebAppBannerNoTypeInManifest) {
+                       MAYBE_WebAppBannerNoTypeInManifest) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   RunBannerTest(web_contents(), manager.get(),
                 GetBannerURLWithManifest("/banners/manifest_no_type.json"),
                 std::nullopt);
 }
 
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_WebAppBannerNoTypeInManifestCapsExtension \
+  DISABLED_WebAppBannerNoTypeInManifestCapsExtension
+#else
+#define MAYBE_WebAppBannerNoTypeInManifestCapsExtension \
+  WebAppBannerNoTypeInManifestCapsExtension
+#endif
 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
-                       WebAppBannerNoTypeInManifestCapsExtension) {
+                       MAYBE_WebAppBannerNoTypeInManifestCapsExtension) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   RunBannerTest(web_contents(), manager.get(),
                 GetBannerURLWithManifest("/banners/manifest_no_type_caps.json"),
                 std::nullopt);
 }
 
-IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerSvgIcon) {
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_WebAppBannerSvgIcon DISABLED_WebAppBannerSvgIcon
+#else
+#define MAYBE_WebAppBannerSvgIcon WebAppBannerSvgIcon
+#endif
+IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MAYBE_WebAppBannerSvgIcon) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   RunBannerTest(web_contents(), manager.get(),
                 GetBannerURLWithManifest("/banners/manifest_svg_icon.json"),
                 std::nullopt);
 }
 
-IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerWebPIcon) {
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_WebAppBannerWebPIcon DISABLED_WebAppBannerWebPIcon
+#else
+#define MAYBE_WebAppBannerWebPIcon WebAppBannerWebPIcon
+#endif
+IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
+                       MAYBE_WebAppBannerWebPIcon) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   RunBannerTest(web_contents(), manager.get(),
                 GetBannerURLWithManifest("/banners/manifest_webp_icon.json"),
@@ -589,8 +616,15 @@
                                 InstallableStatusCode::RENDERER_CANCELLED, 1);
 }
 
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_WebAppBannerPromptWithGesture \
+  DISABLED_WebAppBannerPromptWithGesture
+#else
+#define MAYBE_WebAppBannerPromptWithGesture WebAppBannerPromptWithGesture
+#endif
 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
-                       WebAppBannerPromptWithGesture) {
+                       MAYBE_WebAppBannerPromptWithGesture) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   base::HistogramTester histograms;
 
@@ -616,8 +650,14 @@
                                 1);
 }
 
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_WebAppBannerNeedsEngagement DISABLED_WebAppBannerNeedsEngagement
+#else
+#define MAYBE_WebAppBannerNeedsEngagement WebAppBannerNeedsEngagement
+#endif
 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
-                       WebAppBannerNeedsEngagement) {
+                       MAYBE_WebAppBannerNeedsEngagement) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   base::AutoReset<double> scoped_engagement =
       AppBannerSettingsHelper::ScopeTotalEngagementForTesting(1);
@@ -733,8 +773,15 @@
       InstallableStatusCode::PREFER_RELATED_APPLICATIONS, 1);
 }
 
+// TODO(crbug.com/370270547): Many related tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_ListedRelatedChromeAppInstalled \
+  DISABLED_ListedRelatedChromeAppInstalled
+#else
+#define MAYBE_ListedRelatedChromeAppInstalled ListedRelatedChromeAppInstalled
+#endif
 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
-                       ListedRelatedChromeAppInstalled) {
+                       MAYBE_ListedRelatedChromeAppInstalled) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   base::HistogramTester histograms;
 
@@ -1012,7 +1059,13 @@
   EXPECT_EQ(manager->state(), AppBannerManager::State::INACTIVE);
 }
 
-IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, ShowBanner) {
+// TODO(crbug.com/370270547): Many tests are failing.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_ShowBanner DISABLED_ShowBanner
+#else
+#define MAYBE_ShowBanner ShowBanner
+#endif
+IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MAYBE_ShowBanner) {
   std::unique_ptr<AppBannerManagerTest> manager(CreateAppBannerManager());
   RunBannerTest(
       web_contents(), manager.get(),
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index d7e9610..09d6cc5 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -632,6 +632,7 @@
 #include "chrome/browser/enterprise/chrome_browser_main_extra_parts_enterprise.h"
 #include "chrome/browser/enterprise/profile_management/oidc_auth_response_capture_navigation_throttle.h"
 #include "chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.h"
+#include "chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.h"
 #include "chrome/browser/ui/webui/app_settings/web_app_settings_navigation_throttle.h"
 #endif
 
@@ -5532,6 +5533,9 @@
       profile_management::OidcAuthResponseCaptureNavigationThrottle::
           MaybeCreateThrottleFor(handle),
       &throttles);
+  MaybeAddThrottle(
+      ManagedProfileRequiredNavigationThrottle::MaybeCreateThrottleFor(handle),
+      &throttles);
 #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
 
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \
diff --git a/chrome/browser/chromeos/policy/dlp/BUILD.gn b/chrome/browser/chromeos/policy/dlp/BUILD.gn
index 35685dd..bf6df94 100644
--- a/chrome/browser/chromeos/policy/dlp/BUILD.gn
+++ b/chrome/browser/chromeos/policy/dlp/BUILD.gn
@@ -59,17 +59,6 @@
     "dlp_scoped_file_access_delegate.h",
   ]
 
-  if (is_chromeos_lacros) {
-    sources += [
-      "dlp_browser_helper_lacros.cc",
-      "dlp_browser_helper_lacros.h",
-      "dlp_content_manager_lacros.cc",
-      "dlp_content_manager_lacros.h",
-      "dlp_files_controller_lacros.cc",
-      "dlp_files_controller_lacros.h",
-    ]
-  }
-
   public_deps = [
     "//chrome/browser:browser_public_dependencies",
     "//chrome/browser/ui:browser_list",
@@ -77,10 +66,16 @@
   ]
 
   deps = [
+    "//ash",
+    "//ash/constants",
+    "//ash/public/cpp",
+    "//ash/resources/vector_icons",
+    "//ash/webui/file_manager:constants",
     "//base",
     "//build:chromeos_buildflags",
     "//chrome/app:generated_resources",
     "//chrome/browser:browser_process",
+    "//chrome/browser/ash/profiles",
     "//chrome/browser/chromeos/policy/dlp/dialogs",
     "//chrome/browser/favicon",
     "//chrome/browser/profiles",
@@ -133,24 +128,6 @@
 
   allow_circular_includes_from =
       [ "//chrome/browser/chromeos/policy/dlp/dialogs" ]
-
-  if (is_chromeos_ash) {
-    deps += [
-      "//ash",
-      "//ash/constants",
-      "//ash/public/cpp",
-      "//ash/resources/vector_icons",
-      "//ash/webui/file_manager:constants",
-      "//chrome/browser/ash/profiles",
-    ]
-  }
-
-  if (is_chromeos_lacros) {
-    deps += [
-      "//chromeos/lacros",
-      "//ui/platform_window",
-    ]
-  }
 }
 
 source_set("unit_tests") {
@@ -173,12 +150,9 @@
     "dlp_scoped_file_access_delegate_unittest.cc",
   ]
 
-  if (is_chromeos_lacros) {
-    sources += [ "dlp_files_controller_lacros_unittest.cc" ]
-  }
-
   deps = [
     ":dlp",
+    "//ash/constants",
     "//base",
     "//base/test:test_support",
     "//build:chromeos_buildflags",
@@ -222,105 +196,57 @@
     "//ui/views",
     "//url",
   ]
-
-  if (is_chromeos_lacros) {
-    deps += [
-      "//chromeos/lacros",
-      "//chromeos/startup",
-      "//components/reporting/metrics:metrics_data_collection",
-      "//components/reporting/metrics/fakes:test_support",
-      "//components/reporting/util:rate_limiter_interface",
-      "//components/reporting/util:rate_limiter_slide_window",
-    ]
-  }
-
-  if (is_chromeos_ash) {
-    deps += [ "//ash/constants" ]
-  }
 }
 
-if (is_chromeos_ash) {
-  source_set("browser_tests") {
-    testonly = true
+source_set("browser_tests") {
+  testonly = true
 
-    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
 
-    sources = [
-      "dlp_content_restriction_set_browsertest.cc",
-      "dlp_content_tab_helper_browsertest.cc",
-      "dlp_data_transfer_notifier_browsertest.cc",
-      "dlp_rules_manager_impl_browsertest.cc",
-      "dlp_scoped_file_access_delegate_browsertest.cc",
-    ]
+  sources = [
+    "dlp_content_restriction_set_browsertest.cc",
+    "dlp_content_tab_helper_browsertest.cc",
+    "dlp_data_transfer_notifier_browsertest.cc",
+    "dlp_rules_manager_impl_browsertest.cc",
+    "dlp_scoped_file_access_delegate_browsertest.cc",
+  ]
 
-    deps = [
-      ":dlp",
-      "//base",
-      "//base/test:test_support",
-      "//chrome/browser",
-      "//chrome/browser:browser_process",
-      "//chrome/browser/chromeos/policy/dlp/test:test_support",
-      "//chrome/browser/file_system_access",
-      "//chrome/browser/profiles:profile",
-      "//chrome/browser/ui",
-      "//chrome/common:constants",
-      "//chrome/test:test_support",
-      "//chrome/test:test_support_ui",
-      "//chromeos/dbus/dlp",
-      "//chromeos/dbus/dlp:dlp_proto",
-      "//components/enterprise/data_controls/core/browser",
-      "//components/file_access",
-      "//components/file_access:test_support",
-      "//components/keyed_service/core",
-      "//components/policy:generated",
-      "//components/policy/core/common",
-      "//components/policy/core/common:common_constants",
-      "//components/prefs",
-      "//content/public/browser",
-      "//content/public/common",
-      "//content/test:test_support",
-      "//extensions:test_support",
-      "//net:test_support",
-      "//storage/browser",
-      "//testing/gmock",
-      "//testing/gtest",
-      "//ui/base/metadata",
-      "//ui/shell_dialogs",
-      "//ui/views",
-      "//ui/views:test_support",
-    ]
-  }
-}
-
-if (is_chromeos_lacros) {
-  source_set("lacros_chrome_browsertests") {
-    testonly = true
-
-    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
-
-    sources = [
-      "dlp_files_controller_lacros_browsertest.cc",
-
-      # dlp_content_manager_lacros_browsertest.cc should become a unit test.
-      "dlp_content_manager_lacros_browsertest.cc",
-    ]
-
-    deps = [
-      ":dlp",
-      "//base/test:test_support",
-      "//chrome/browser/chromeos/policy/dlp/test:test_support",
-      "//chrome/browser/ui",
-      "//chrome/test:test_support",
-      "//chrome/test:test_support_ui",
-      "//chromeos/crosapi/mojom",
-      "//chromeos/lacros",
-      "//chromeos/startup",
-      "//content/test:test_support",
-      "//mojo/public/cpp/bindings",
-      "//testing/gmock",
-      "//testing/gtest",
-    ]
-  }
+  deps = [
+    ":dlp",
+    "//base",
+    "//base/test:test_support",
+    "//chrome/browser",
+    "//chrome/browser:browser_process",
+    "//chrome/browser/chromeos/policy/dlp/test:test_support",
+    "//chrome/browser/file_system_access",
+    "//chrome/browser/profiles:profile",
+    "//chrome/browser/ui",
+    "//chrome/common:constants",
+    "//chrome/test:test_support",
+    "//chrome/test:test_support_ui",
+    "//chromeos/dbus/dlp",
+    "//chromeos/dbus/dlp:dlp_proto",
+    "//components/enterprise/data_controls/core/browser",
+    "//components/file_access",
+    "//components/file_access:test_support",
+    "//components/keyed_service/core",
+    "//components/policy:generated",
+    "//components/policy/core/common",
+    "//components/policy/core/common:common_constants",
+    "//components/prefs",
+    "//content/public/browser",
+    "//content/public/common",
+    "//content/test:test_support",
+    "//extensions:test_support",
+    "//net:test_support",
+    "//storage/browser",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//ui/base/metadata",
+    "//ui/shell_dialogs",
+    "//ui/views",
+    "//ui/views:test_support",
+  ]
 }
 
 if (!is_chromeos_device) {
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_browser_helper_lacros.cc b/chrome/browser/chromeos/policy/dlp/dlp_browser_helper_lacros.cc
deleted file mode 100644
index 348d90ec..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_browser_helper_lacros.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2021 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/chromeos/policy/dlp/dlp_browser_helper_lacros.h"
-
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "ui/aura/window_tree_host.h"
-
-namespace policy {
-
-namespace dlp {
-
-// Retrieves the aura::Window for the last active browser. Returns nullptr if no
-// browser window is currently visible.
-aura::Window* GetActiveAuraWindow() {
-  BrowserList* browser_list = BrowserList::GetInstance();
-  DCHECK(browser_list);
-
-  auto* browser = browser_list->GetLastActive();
-  if (browser && browser->window()) {
-    return browser->window()->GetNativeWindow();
-  }
-
-  return nullptr;
-}
-
-aura::WindowTreeHost* GetActiveWindowTreeHost() {
-  aura::Window* active_window = GetActiveAuraWindow();
-
-  if (active_window) {
-    return active_window->GetRootWindow()->GetHost();
-  }
-
-  return nullptr;
-}
-
-}  // namespace dlp
-
-}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_browser_helper_lacros.h b/chrome/browser/chromeos/policy/dlp/dlp_browser_helper_lacros.h
deleted file mode 100644
index 7d815934..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_browser_helper_lacros.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2021 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_CHROMEOS_POLICY_DLP_DLP_BROWSER_HELPER_LACROS_H_
-#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_BROWSER_HELPER_LACROS_H_
-
-namespace aura {
-class Window;
-class WindowTreeHost;
-}
-
-namespace policy {
-
-namespace dlp {
-
-// Retrieves the aura::Window for the last active browser.
-aura::Window* GetActiveAuraWindow();
-
-// Retrieves the aura::WindowTreeHost for the last active browser.
-aura::WindowTreeHost* GetActiveWindowTreeHost();
-
-}  // namespace dlp
-
-}  // namespace policy
-
-#endif  // CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_BROWSER_HELPER_LACROS_H_
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc
deleted file mode 100644
index f27a9f4b..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright 2021 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/chromeos/policy/dlp/dlp_content_manager_lacros.h"
-
-#include <vector>
-
-#include "chrome/browser/ui/lacros/window_utility.h"
-#include "chromeos/crosapi/mojom/dlp.mojom.h"
-#include "chromeos/lacros/lacros_service.h"
-#include "content/public/browser/visibility.h"
-#include "content/public/browser/web_contents.h"
-#include "ui/aura/window.h"
-#include "ui/platform_window/platform_window.h"
-
-namespace policy {
-
-namespace {
-
-crosapi::mojom::DlpRestrictionLevel ConvertLevelToMojo(
-    DlpRulesManager::Level level) {
-  switch (level) {
-    case DlpRulesManager::Level::kReport:
-      return crosapi::mojom::DlpRestrictionLevel::kReport;
-    case DlpRulesManager::Level::kWarn:
-      return crosapi::mojom::DlpRestrictionLevel::kWarn;
-    case DlpRulesManager::Level::kBlock:
-      return crosapi::mojom::DlpRestrictionLevel::kBlock;
-    case DlpRulesManager::Level::kAllow:
-      return crosapi::mojom::DlpRestrictionLevel::kAllow;
-    case DlpRulesManager::Level::kNotSet:
-      return crosapi::mojom::DlpRestrictionLevel::kNotSet;
-  }
-}
-
-crosapi::mojom::DlpRestrictionLevelAndUrlPtr ConvertLevelAndUrlToMojo(
-    RestrictionLevelAndUrl level_and_url) {
-  auto result = crosapi::mojom::DlpRestrictionLevelAndUrl::New();
-  result->level = ConvertLevelToMojo(level_and_url.level);
-  result->url = level_and_url.url;
-  return result;
-}
-
-crosapi::mojom::DlpRestrictionSetPtr ConvertRestrictionSetToMojo(
-    const DlpContentRestrictionSet& restriction_set) {
-  auto result = crosapi::mojom::DlpRestrictionSet::New();
-  result->screenshot =
-      ConvertLevelAndUrlToMojo(restriction_set.GetRestrictionLevelAndUrl(
-          DlpContentRestriction::kScreenshot));
-  result->privacy_screen =
-      ConvertLevelAndUrlToMojo(restriction_set.GetRestrictionLevelAndUrl(
-          DlpContentRestriction::kPrivacyScreen));
-  result->print = ConvertLevelAndUrlToMojo(
-      restriction_set.GetRestrictionLevelAndUrl(DlpContentRestriction::kPrint));
-  result->screen_share =
-      ConvertLevelAndUrlToMojo(restriction_set.GetRestrictionLevelAndUrl(
-          DlpContentRestriction::kScreenShare));
-  return result;
-}
-
-crosapi::mojom::ScreenShareAreaPtr ConvertToScreenShareArea(
-    const content::DesktopMediaID& media_id) {
-  auto result = crosapi::mojom::ScreenShareArea::New();
-  if (media_id.type == content::DesktopMediaID::Type::TYPE_SCREEN) {
-    return result;
-  }
-  DCHECK_EQ(media_id.type, content::DesktopMediaID::Type::TYPE_WINDOW);
-  aura::Window* window = content::DesktopMediaID::GetNativeWindowById(media_id);
-  if (window) {
-    result->window_id = lacros_window_utility::GetRootWindowUniqueId(window);
-  }
-  result->snapshot_source_id = media_id.id;
-  return result;
-}
-
-}  // namespace
-
-// static
-DlpContentManagerLacros* DlpContentManagerLacros::Get() {
-  return static_cast<DlpContentManagerLacros*>(DlpContentObserver::Get());
-}
-
-void DlpContentManagerLacros::CheckScreenShareRestriction(
-    const content::DesktopMediaID& media_id,
-    const std::u16string& application_title,
-    WarningCallback callback) {
-  if (media_id.type == content::DesktopMediaID::Type::TYPE_WEB_CONTENTS) {
-    ProcessScreenShareRestriction(
-        application_title,
-        GetScreenShareConfidentialContentsInfoForWebContents(
-            GetWebContentsFromMediaId(media_id)),
-        std::move(callback));
-    return;
-  }
-  chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-  if (!lacros_service->IsAvailable<crosapi::mojom::Dlp>()) {
-    LOG(WARNING) << "DLP mojo service not available";
-    std::move(callback).Run(true);
-    return;
-  }
-
-  int dlp_mojo_version =
-      lacros_service->GetInterfaceVersion<crosapi::mojom::Dlp>();
-  if (dlp_mojo_version < int{crosapi::mojom::Dlp::MethodMinVersions::
-                                 kCheckScreenShareRestrictionMinVersion}) {
-    LOG(WARNING) << "DLP mojo service version does not support screen share "
-                    "restrictions";
-    std::move(callback).Run(true);
-    return;
-  }
-
-  lacros_service->GetRemote<crosapi::mojom::Dlp>()->CheckScreenShareRestriction(
-      ConvertToScreenShareArea(media_id), application_title,
-      std::move(callback));
-}
-
-void DlpContentManagerLacros::OnScreenShareStarted(
-    const std::string& label,
-    std::vector<content::DesktopMediaID> screen_share_ids,
-    const std::u16string& application_title,
-    base::RepeatingClosure stop_callback,
-    content::MediaStreamUI::StateChangeCallback state_change_callback,
-    content::MediaStreamUI::SourceCallback source_callback) {
-  for (const content::DesktopMediaID& media_id : screen_share_ids) {
-    if (media_id.type == content::DesktopMediaID::Type::TYPE_WEB_CONTENTS) {
-      AddOrUpdateScreenShare(label, media_id, application_title, stop_callback,
-                             state_change_callback, source_callback);
-    } else {
-      chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-      auto delegate = std::make_unique<ScreenShareStateChangeDelegate>(
-          label, media_id, state_change_callback, stop_callback);
-      if (lacros_service->IsAvailable<crosapi::mojom::Dlp>()) {
-        lacros_service->GetRemote<crosapi::mojom::Dlp>()->OnScreenShareStarted(
-            label, ConvertToScreenShareArea(media_id), application_title,
-            delegate->BindDelegate());
-        running_remote_screen_shares_.push_back(std::move(delegate));
-      }
-    }
-  }
-  CheckRunningScreenShares();
-}
-
-void DlpContentManagerLacros::OnScreenShareStopped(
-    const std::string& label,
-    const content::DesktopMediaID& media_id) {
-  if (media_id.type == content::DesktopMediaID::Type::TYPE_WEB_CONTENTS) {
-    RemoveScreenShare(label, media_id);
-  } else {
-    chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-    if (lacros_service->IsAvailable<crosapi::mojom::Dlp>()) {
-      lacros_service->GetRemote<crosapi::mojom::Dlp>()->OnScreenShareStopped(
-          label, ConvertToScreenShareArea(media_id));
-    }
-    std::erase_if(
-        running_remote_screen_shares_,
-        [=](const std::unique_ptr<
-            DlpContentManagerLacros::ScreenShareStateChangeDelegate>& delegate)
-            -> bool {
-          return delegate->label() == label && delegate->media_id() == media_id;
-        });
-  }
-}
-
-void DlpContentManagerLacros::TabLocationMaybeChanged(
-    content::WebContents* web_contents) {
-  UpdateRestrictions(web_contents->GetNativeView());
-}
-
-DlpContentManagerLacros::ScreenShareStateChangeDelegate::
-    ScreenShareStateChangeDelegate(
-        const std::string& label,
-        const content::DesktopMediaID& media_id,
-        content::MediaStreamUI::StateChangeCallback state_change_callback,
-        base::OnceClosure stop_callback)
-    : label_(label),
-      media_id_(media_id),
-      state_change_callback_(std::move(state_change_callback)),
-      stop_callback_(std::move(stop_callback)) {}
-
-DlpContentManagerLacros::ScreenShareStateChangeDelegate::
-    ~ScreenShareStateChangeDelegate() = default;
-
-bool DlpContentManagerLacros::ScreenShareStateChangeDelegate::operator==(
-    const DlpContentManagerLacros::ScreenShareStateChangeDelegate& other)
-    const {
-  return label_ == other.label_ && media_id_ == other.media_id_;
-}
-
-bool DlpContentManagerLacros::ScreenShareStateChangeDelegate::operator!=(
-    const DlpContentManagerLacros::ScreenShareStateChangeDelegate& other)
-    const {
-  return !(*this == other);
-}
-
-mojo::PendingRemote<crosapi::mojom::StateChangeDelegate>
-DlpContentManagerLacros::ScreenShareStateChangeDelegate::BindDelegate() {
-  return receiver_.BindNewPipeAndPassRemoteWithVersion();
-}
-
-void DlpContentManagerLacros::ScreenShareStateChangeDelegate::OnPause() {
-  state_change_callback_.Run(media_id_,
-                             blink::mojom::MediaStreamStateChange::PAUSE);
-}
-
-void DlpContentManagerLacros::ScreenShareStateChangeDelegate::OnResume() {
-  state_change_callback_.Run(media_id_,
-                             blink::mojom::MediaStreamStateChange::PLAY);
-}
-
-void DlpContentManagerLacros::ScreenShareStateChangeDelegate::OnStop() {
-  DCHECK(stop_callback_);
-  if (stop_callback_) {
-    std::move(stop_callback_).Run();
-  }
-}
-
-DlpContentManagerLacros::DlpContentManagerLacros() = default;
-
-DlpContentManagerLacros::~DlpContentManagerLacros() {
-  // Clean up still observed windows.
-  for (const auto& window_pair : window_webcontents_) {
-    window_pair.first->RemoveObserver(this);
-  }
-}
-
-void DlpContentManagerLacros::OnConfidentialityChanged(
-    content::WebContents* web_contents,
-    const DlpContentRestrictionSet& restriction_set) {
-  DlpContentManager::OnConfidentialityChanged(web_contents, restriction_set);
-  aura::Window* window = web_contents->GetNativeView();
-  if (!window_webcontents_.contains(window)) {
-    window_webcontents_[window] = {};
-    window->AddObserver(this);
-  }
-  window_webcontents_[window].insert(web_contents);
-  UpdateRestrictions(window);
-  CheckRunningScreenShares();
-}
-
-void DlpContentManagerLacros::OnWebContentsDestroyed(
-    content::WebContents* web_contents) {
-  DlpContentManager::OnWebContentsDestroyed(web_contents);
-  aura::Window* window = web_contents->GetNativeView();
-  if (window_webcontents_.contains(window)) {
-    window_webcontents_[window].erase(web_contents);
-    UpdateRestrictions(window);
-  }
-}
-
-void DlpContentManagerLacros::OnVisibilityChanged(
-    content::WebContents* web_contents) {
-  aura::Window* window = web_contents->GetNativeView();
-  UpdateRestrictions(window);
-}
-
-void DlpContentManagerLacros::OnWindowDestroying(aura::Window* window) {
-  window->RemoveObserver(this);
-  window_webcontents_.erase(window);
-  confidential_windows_.erase(window);
-}
-
-void DlpContentManagerLacros::UpdateRestrictions(aura::Window* window) {
-  DlpContentRestrictionSet new_restrictions;
-  for (content::WebContents* web_contents : window_webcontents_[window]) {
-    if (web_contents->GetNativeView()->IsVisible()) {
-      new_restrictions.UnionWith(confidential_web_contents_[web_contents]);
-    }
-  }
-  if (new_restrictions != confidential_windows_[window]) {
-    confidential_windows_[window] = new_restrictions;
-    chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-    if (lacros_service->IsAvailable<crosapi::mojom::Dlp>()) {
-      lacros_service->GetRemote<crosapi::mojom::Dlp>()->DlpRestrictionsUpdated(
-          lacros_window_utility::GetRootWindowUniqueId(window),
-          ConvertRestrictionSetToMojo(new_restrictions));
-    }
-  }
-}
-
-DlpContentManager::ConfidentialContentsInfo
-DlpContentManagerLacros::GetScreenShareConfidentialContentsInfo(
-    const content::DesktopMediaID& media_id,
-    content::WebContents* web_contents) const {
-  if (media_id.type == content::DesktopMediaID::Type::TYPE_WEB_CONTENTS) {
-    return GetScreenShareConfidentialContentsInfoForWebContents(web_contents);
-  }
-  NOTREACHED_IN_MIGRATION();
-  return ConfidentialContentsInfo();
-}
-
-}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.h b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.h
deleted file mode 100644
index 86d587e..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.h
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2021 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_CHROMEOS_POLICY_DLP_DLP_CONTENT_MANAGER_LACROS_H_
-#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CONTENT_MANAGER_LACROS_H_
-
-#include "base/containers/flat_map.h"
-#include "base/containers/flat_set.h"
-#include "base/memory/raw_ptr.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_content_manager.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_content_restriction_set.h"
-#include "chromeos/crosapi/mojom/dlp.mojom.h"
-#include "content/public/browser/desktop_media_id.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "ui/aura/window_observer.h"
-
-namespace aura {
-class Window;
-}  // namespace aura
-
-namespace content {
-class WebContents;
-}  // namespace content
-
-namespace policy {
-
-// LaCros-wide class that tracks the set of currently known confidential
-// WebContents and whether any of them are currently visible.
-class DlpContentManagerLacros : public DlpContentManager,
-                                public aura::WindowObserver {
- public:
-  // Creates the instance if not yet created.
-  // There will always be a single instance created on the first access.
-  static DlpContentManagerLacros* Get();
-
-  // DlpContentManager overrides:
-  void CheckScreenShareRestriction(const content::DesktopMediaID& media_id,
-                                   const std::u16string& application_title,
-                                   WarningCallback callback) override;
-  void OnScreenShareStarted(
-      const std::string& label,
-      std::vector<content::DesktopMediaID> screen_share_ids,
-      const std::u16string& application_title,
-      base::RepeatingClosure stop_callback,
-      content::MediaStreamUI::StateChangeCallback state_change_callback,
-      content::MediaStreamUI::SourceCallback source_callback) override;
-  void OnScreenShareStopped(const std::string& label,
-                            const content::DesktopMediaID& media_id) override;
-  void TabLocationMaybeChanged(content::WebContents* web_contents) override;
-
- private:
-  friend class DlpContentManagerTestHelper;
-  friend class DlpContentObserver;
-
-  // Class that tracks connection with screen share tracking in Ash.
-  class ScreenShareStateChangeDelegate
-      : public crosapi::mojom::StateChangeDelegate {
-   public:
-    ScreenShareStateChangeDelegate(
-        const std::string& label,
-        const content::DesktopMediaID& media_id,
-        content::MediaStreamUI::StateChangeCallback state_change_callback,
-        base::OnceClosure stop_callback);
-    ScreenShareStateChangeDelegate(const ScreenShareStateChangeDelegate&) =
-        delete;
-    ScreenShareStateChangeDelegate& operator=(
-        const ScreenShareStateChangeDelegate&) = delete;
-    ~ScreenShareStateChangeDelegate() override;
-
-    bool operator==(const ScreenShareStateChangeDelegate& other) const;
-    bool operator!=(const ScreenShareStateChangeDelegate& other) const;
-
-    mojo::PendingRemote<crosapi::mojom::StateChangeDelegate> BindDelegate();
-
-    // crosapi::mojom::StateChangeDelegate overrides:
-    void OnPause() override;
-    void OnResume() override;
-    void OnStop() override;
-
-    const std::string& label() const { return label_; }
-    const content::DesktopMediaID& media_id() const { return media_id_; }
-
-   private:
-    const std::string label_;
-    const content::DesktopMediaID media_id_;
-    content::MediaStreamUI::StateChangeCallback state_change_callback_;
-    base::OnceClosure stop_callback_;
-    mojo::Receiver<crosapi::mojom::StateChangeDelegate> receiver_{this};
-  };
-
-  DlpContentManagerLacros();
-  ~DlpContentManagerLacros() override;
-
-  // DlpContentObserver overrides:
-  void OnConfidentialityChanged(
-      content::WebContents* web_contents,
-      const DlpContentRestrictionSet& restriction_set) override;
-  void OnWebContentsDestroyed(content::WebContents* web_contents) override;
-  void OnVisibilityChanged(content::WebContents* web_contents) override;
-
-  // aura::WindowObserver overrides:
-  void OnWindowDestroying(aura::Window* window) override;
-
-  // Updates |confidential_windows_| entry for |window| and notifies Ash if
-  // needed.
-  void UpdateRestrictions(aura::Window* window);
-
-  // DlpContentManager override:
-  ConfidentialContentsInfo GetScreenShareConfidentialContentsInfo(
-      const content::DesktopMediaID& media_id,
-      content::WebContents* web_contents) const override;
-
-  // Tracks set of known confidential WebContents* for each Window*.
-  base::flat_map<aura::Window*,
-                 base::flat_set<raw_ptr<content::WebContents, CtnExperimental>>>
-      window_webcontents_;
-
-  // Tracks current restrictions applied to Window* based on visible
-  // WebContents* belonging to Window*.
-  base::flat_map<aura::Window*, DlpContentRestrictionSet> confidential_windows_;
-
-  // List of currently running screen shares that are tracked remotely in Ash.
-  std::vector<std::unique_ptr<ScreenShareStateChangeDelegate>>
-      running_remote_screen_shares_;
-};
-
-}  // namespace policy
-
-#endif  // CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CONTENT_MANAGER_LACROS_H_
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc
deleted file mode 100644
index 977ee3ca..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc
+++ /dev/null
@@ -1,272 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.h"
-
-#include "base/test/bind.h"
-#include "chrome/browser/chromeos/policy/dlp/test/dlp_content_manager_test_helper.h"
-#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "chromeos/crosapi/mojom/dlp.mojom.h"
-#include "chromeos/lacros/lacros_service.h"
-#include "chromeos/startup/browser_init_params.h"
-#include "content/public/test/browser_test.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace policy {
-
-namespace {
-
-const std::u16string kAppId = u"app_id";
-constexpr char kScreenShareLabel[] = "label";
-
-}  // namespace
-
-class DlpContentManagerLacrosBrowserTest : public InProcessBrowserTest {
- public:
-  // InProcessBrowserTest:
-  void SetUpOnMainThread() override {
-    InProcessBrowserTest::SetUpOnMainThread();
-
-    // If DLP interface is not available on this version of ash-chrome, this
-    // test suite will no-op.
-    if (!IsServiceAvailable())
-      return;
-
-    test_helper_ = std::make_unique<DlpContentManagerTestHelper>();
-
-    // Replace the production DLP service with a mock for testing.
-    mojo::Remote<crosapi::mojom::Dlp>& remote =
-        chromeos::LacrosService::Get()->GetRemote<crosapi::mojom::Dlp>();
-    remote.reset();
-    receiver_.Bind(remote.BindNewPipeAndPassReceiver());
-  }
-
-  // Returns whether the DLP interface is available. It may
-  // not be available on earlier versions of ash-chrome.
-  bool IsServiceAvailable() const {
-    chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-    return lacros_service && lacros_service->IsAvailable<crosapi::mojom::Dlp>();
-  }
-
-  void SetDlpInterfaceVersion(int version) {
-    crosapi::mojom::BrowserInitParamsPtr init_params =
-        chromeos::BrowserInitParams::GetForTests()->Clone();
-    init_params->interface_versions.value()[crosapi::mojom::Dlp::Uuid_] =
-        version;
-    chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params));
-  }
-
-  DlpContentManagerLacros* manager() {
-    return static_cast<DlpContentManagerLacros*>(
-        test_helper_->GetContentManager());
-  }
-
-  testing::StrictMock<MockDlpCrosapi>& service() { return service_; }
-
- private:
-  testing::StrictMock<MockDlpCrosapi> service_;
-  mojo::Receiver<crosapi::mojom::Dlp> receiver_{&service_};
-  std::unique_ptr<DlpContentManagerTestHelper> test_helper_;
-};
-
-IN_PROC_BROWSER_TEST_F(
-    DlpContentManagerLacrosBrowserTest,
-    CheckScreenShareRestrictionFullScreenNotSupportedVersion) {
-  // If DLP interface is not available on this version of ash-chrome, this test
-  // suite will no-op.
-  if (!IsServiceAvailable())
-    return;
-
-  SetDlpInterfaceVersion(0);
-
-  // No call to mojo remote should happen in this case (ensured by StrictMock).
-  // The request is just silently allowed.
-  base::RunLoop run_loop;
-  manager()->CheckScreenShareRestriction(
-      content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN,
-                              content::DesktopMediaID::kFakeId),
-      kAppId, base::BindLambdaForTesting([&](bool allowed) {
-        EXPECT_TRUE(allowed);
-        run_loop.Quit();
-      }));
-  run_loop.Run();
-}
-
-IN_PROC_BROWSER_TEST_F(DlpContentManagerLacrosBrowserTest,
-                       CheckScreenShareRestrictionFullScreenAllowed) {
-  // If DLP interface is not available on this version of ash-chrome, this test
-  // suite will no-op.
-  if (!IsServiceAvailable())
-    return;
-
-  SetDlpInterfaceVersion(service().Version_);
-
-  EXPECT_CALL(service(), CheckScreenShareRestriction)
-      .WillOnce([](crosapi::mojom::ScreenShareAreaPtr area,
-                   const std::u16string& application_title,
-                   base::OnceCallback<void(bool)> callback) {
-        EXPECT_FALSE(area->window_id.has_value());
-        EXPECT_EQ(kAppId, application_title);
-        std::move(callback).Run(/*should_proceed=*/true);
-      });
-
-  base::RunLoop run_loop;
-  manager()->CheckScreenShareRestriction(
-      content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN,
-                              content::DesktopMediaID::kFakeId),
-      kAppId, base::BindLambdaForTesting([&](bool allowed) {
-        EXPECT_TRUE(allowed);
-        run_loop.Quit();
-      }));
-  run_loop.Run();
-}
-
-IN_PROC_BROWSER_TEST_F(DlpContentManagerLacrosBrowserTest,
-                       CheckScreenShareRestrictionFullScreenNotAllowed) {
-  // If DLP interface is not available on this version of ash-chrome, this test
-  // suite will no-op.
-  if (!IsServiceAvailable())
-    return;
-
-  SetDlpInterfaceVersion(service().Version_);
-
-  EXPECT_CALL(service(), CheckScreenShareRestriction)
-      .WillOnce([](crosapi::mojom::ScreenShareAreaPtr area,
-                   const std::u16string& application_title,
-                   base::OnceCallback<void(bool)> callback) {
-        EXPECT_FALSE(area->window_id.has_value());
-        EXPECT_EQ(kAppId, application_title);
-        std::move(callback).Run(/*should_proceed=*/false);
-      });
-
-  base::RunLoop run_loop;
-  manager()->CheckScreenShareRestriction(
-      content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN,
-                              content::DesktopMediaID::kFakeId),
-      kAppId, base::BindLambdaForTesting([&](bool allowed) {
-        EXPECT_FALSE(allowed);
-        run_loop.Quit();
-      }));
-  run_loop.Run();
-}
-
-IN_PROC_BROWSER_TEST_F(DlpContentManagerLacrosBrowserTest,
-                       ScreenShareStartedStop) {
-  // If DLP interface is not available on this version of ash-chrome, this test
-  // suite will no-op.
-  if (!IsServiceAvailable())
-    return;
-
-  SetDlpInterfaceVersion(service().Version_);
-
-  // Setup callback on remote service.
-  base::RunLoop bound_loop;
-  ::mojo::PendingRemote<crosapi::mojom::StateChangeDelegate> pending_delegate;
-  EXPECT_CALL(service(), OnScreenShareStarted)
-      .WillOnce([&](const std::string& label,
-                    crosapi::mojom::ScreenShareAreaPtr area,
-                    const std::u16string& application_title,
-                    ::mojo::PendingRemote<crosapi::mojom::StateChangeDelegate>
-                        delegate) {
-        EXPECT_EQ(kScreenShareLabel, label);
-        EXPECT_FALSE(area->window_id.has_value());
-        EXPECT_EQ(kAppId, application_title);
-        pending_delegate = std::move(delegate);
-        bound_loop.Quit();
-      });
-
-  // Call DLP manager and expect stop callback.
-  base::RunLoop stopped_run_loop;
-  manager()->OnScreenShareStarted(
-      kScreenShareLabel,
-      {content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN,
-                               content::DesktopMediaID::kFakeId)},
-      kAppId, base::BindLambdaForTesting([&]() { stopped_run_loop.Quit(); }),
-      /*state_change_callback=*/base::DoNothing(),
-      /*source_callback=*/base::DoNothing());
-
-  // Bind remote delegate.
-  bound_loop.Run();
-  mojo::Remote<crosapi::mojom::StateChangeDelegate> remote_delegate(
-      std::move(pending_delegate));
-  EXPECT_TRUE(remote_delegate);
-
-  // Request remote delegate to stop.
-  remote_delegate->OnStop();
-
-  // Wait for stop callback.
-  stopped_run_loop.Run();
-}
-
-IN_PROC_BROWSER_TEST_F(DlpContentManagerLacrosBrowserTest,
-                       ScreenShareStartedPauseAndResume) {
-  // If DLP interface is not available on this version of ash-chrome, this test
-  // suite will no-op.
-  if (!IsServiceAvailable())
-    return;
-
-  SetDlpInterfaceVersion(service().Version_);
-
-  // Setup callback on remote service.
-  base::RunLoop bound_loop;
-  ::mojo::PendingRemote<crosapi::mojom::StateChangeDelegate> pending_delegate;
-  EXPECT_CALL(service(), OnScreenShareStarted)
-      .WillOnce([&](const std::string& label,
-                    crosapi::mojom::ScreenShareAreaPtr area,
-                    const std::u16string& application_title,
-                    ::mojo::PendingRemote<crosapi::mojom::StateChangeDelegate>
-                        delegate) {
-        EXPECT_EQ(kScreenShareLabel, label);
-        EXPECT_FALSE(area->window_id.has_value());
-        EXPECT_EQ(kAppId, application_title);
-        pending_delegate = std::move(delegate);
-        bound_loop.Quit();
-      });
-
-  // Call DLP manager and expect state change callbacks.
-  base::RunLoop paused_run_loop;
-  base::RunLoop resumed_run_loop;
-  content::DesktopMediaID media_id(content::DesktopMediaID::TYPE_SCREEN,
-                                   content::DesktopMediaID::kFakeId);
-  manager()->OnScreenShareStarted(
-      kScreenShareLabel, {media_id}, kAppId,
-      /*stop_callback=*/base::DoNothing(),
-      base::BindLambdaForTesting(
-          [&](const content::DesktopMediaID& in_media_id,
-              blink::mojom::MediaStreamStateChange new_state) {
-            EXPECT_EQ(media_id, in_media_id);
-            if (new_state == blink::mojom::MediaStreamStateChange::PAUSE) {
-              paused_run_loop.Quit();
-            } else if (new_state ==
-                       blink::mojom::MediaStreamStateChange::PLAY) {
-              resumed_run_loop.Quit();
-            } else {
-              NOTREACHED_IN_MIGRATION();
-            }
-          }),
-      /*source_callback=*/base::DoNothing());
-
-  // Bind remote delegate.
-  bound_loop.Run();
-  mojo::Remote<crosapi::mojom::StateChangeDelegate> remote_delegate(
-      std::move(pending_delegate));
-  EXPECT_TRUE(remote_delegate);
-
-  // Request remote delegate to pause.
-  remote_delegate->OnPause();
-
-  // Wait for stop callback.
-  paused_run_loop.Run();
-
-  // Request remote delegate to resume.
-  remote_delegate->OnResume();
-
-  // Wait for stop callback.
-  resumed_run_loop.Run();
-}
-
-}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc
deleted file mode 100644
index 583b61c..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-// 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.
-#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h"
-
-#include "base/files/file_path.h"
-#include "base/path_service.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_file_destination.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_paths_lacros.h"
-#include "chromeos/crosapi/mojom/dlp.mojom.h"
-#include "chromeos/lacros/lacros_service.h"
-
-namespace policy {
-namespace {
-crosapi::mojom::FileAction ConvertFileActionToMojo(dlp::FileAction action) {
-  switch (action) {
-    case dlp::FileAction::kUnknown:
-      return crosapi::mojom::FileAction::kUnknown;
-    case dlp::FileAction::kDownload:
-      return crosapi::mojom::FileAction::kDownload;
-    case dlp::FileAction::kTransfer:
-      return crosapi::mojom::FileAction::kTransfer;
-    case dlp::FileAction::kUpload:
-      return crosapi::mojom::FileAction::kUpload;
-    case dlp::FileAction::kCopy:
-      return crosapi::mojom::FileAction::kCopy;
-    case dlp::FileAction::kMove:
-      return crosapi::mojom::FileAction::kMove;
-    case dlp::FileAction::kOpen:
-      return crosapi::mojom::FileAction::kOpen;
-    case dlp::FileAction::kShare:
-      return crosapi::mojom::FileAction::kShare;
-  }
-}
-}  // namespace
-
-DlpFilesControllerLacros::DlpFilesControllerLacros(
-    const DlpRulesManager& rules_manager)
-    : DlpFilesController(rules_manager) {}
-DlpFilesControllerLacros::~DlpFilesControllerLacros() = default;
-
-// TODO(b/283764626): Add OneDrive component
-std::optional<data_controls::Component>
-DlpFilesControllerLacros::MapFilePathToPolicyComponent(
-    Profile* profile,
-    const base::FilePath& file_path) {
-  base::FilePath reference;
-
-  if (chrome::GetAndroidFilesPath(&reference) &&
-      reference.IsParent(file_path)) {
-    return data_controls::Component::kArc;
-  }
-
-  if (chrome::GetRemovableMediaPath(&reference) &&
-      reference.IsParent(file_path)) {
-    return data_controls::Component::kUsb;
-  }
-
-  if (chrome::GetDriveFsMountPointPath(&reference) &&
-      reference.IsParent(file_path)) {
-    return data_controls::Component::kDrive;
-  }
-
-  if (chrome::GetLinuxFilesPath(&reference) &&
-      (reference == file_path || reference.IsParent(file_path))) {
-    return data_controls::Component::kCrostini;
-  }
-
-  return {};
-}
-
-bool DlpFilesControllerLacros::IsInLocalFileSystem(
-    const base::FilePath& file_path) {
-  base::FilePath my_files_folder;
-  base::PathService::Get(chrome::DIR_USER_DOCUMENTS, &my_files_folder);
-  if (my_files_folder == file_path || my_files_folder.IsParent(file_path)) {
-    return true;
-  }
-  return false;
-}
-
-void DlpFilesControllerLacros::ShowDlpBlockedFiles(
-    std::optional<uint64_t> task_id,
-    std::vector<base::FilePath> blocked_files,
-    dlp::FileAction action) {
-  chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-  if (!lacros_service->IsAvailable<crosapi::mojom::Dlp>()) {
-    LOG(WARNING) << "DLP mojo service not available";
-    return;
-  }
-  lacros_service->GetRemote<crosapi::mojom::Dlp>()->ShowBlockedFiles(
-      task_id, std::move(blocked_files), ConvertFileActionToMojo(action));
-}
-
-}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h
deleted file mode 100644
index 652459ce..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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.
-
-#ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_FILES_CONTROLLER_LACROS_H_
-#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_FILES_CONTROLLER_LACROS_H_
-
-#include <optional>
-
-#include "base/files/file_path.h"
-#include "base/gtest_prod_util.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
-
-namespace policy {
-class DlpFilesControllerLacros : public DlpFilesController {
- public:
-  explicit DlpFilesControllerLacros(const DlpRulesManager& rules_manager);
-
-  ~DlpFilesControllerLacros() override;
-
- protected:
-  // DlpFilesController overrides:
-  std::optional<data_controls::Component> MapFilePathToPolicyComponent(
-      Profile* profile,
-      const base::FilePath& file_path) override;
-  bool IsInLocalFileSystem(const base::FilePath& file_path) override;
-  void ShowDlpBlockedFiles(std::optional<uint64_t> task_id,
-                           std::vector<base::FilePath> blocked_files,
-                           dlp::FileAction action) override;
-
-  // TODO(b/284122497): Cleanup friend for testing
-  FRIEND_TEST_ALL_PREFIXES(DlpFilesControllerLacrosTest,
-                           MapFilePathToPolicyComponentTest);
-
-  FRIEND_TEST_ALL_PREFIXES(DlpFilesControllerLacrosBlockUITest,
-                           ShowDlpBlockedFilesTest);
-};
-}  // namespace policy
-
-#endif  // CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_FILES_CONTROLLER_LACROS_H_
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc
deleted file mode 100644
index 74653d6..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-// 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.
-
-#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h"
-
-#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h"
-#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h"
-#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_rules_manager.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chromeos/crosapi/mojom/dlp.mojom.h"
-#include "chromeos/lacros/lacros_service.h"
-#include "chromeos/startup/browser_init_params.h"
-#include "content/public/test/browser_test.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace policy {
-
-namespace {
-constexpr char kFilePath[] = "test.txt";
-}  // namespace
-
-class DlpFilesControllerLacrosBlockUITest
-    : public InProcessBrowserTest,
-      public ::testing::WithParamInterface<
-          std::pair<crosapi::mojom::FileAction, policy::dlp::FileAction>> {
- public:
-  // InProcessBrowserTest:
-  void SetUpOnMainThread() override {
-    InProcessBrowserTest::SetUpOnMainThread();
-
-    // If DLP interface is not available on this version of ash-chrome, this
-    // test suite will no-op.
-    if (!IsServiceAvailable()) {
-      return;
-    }
-
-    // Replace the production DLP service with a mock for testing.
-    mojo::Remote<crosapi::mojom::Dlp>& remote =
-        chromeos::LacrosService::Get()->GetRemote<crosapi::mojom::Dlp>();
-    remote.reset();
-    receiver_.Bind(remote.BindNewPipeAndPassReceiver());
-
-    ASSERT_TRUE(browser());
-    policy::DlpRulesManagerFactory::GetInstance()->SetTestingFactory(
-        browser()->profile(),
-        base::BindRepeating(
-            &DlpFilesControllerLacrosBlockUITest::SetDlpRulesManager,
-            base::Unretained(this)));
-    ASSERT_TRUE(policy::DlpRulesManagerFactory::GetForPrimaryProfile());
-    ASSERT_TRUE(rules_manager_);
-
-    files_controller_ =
-        std::make_unique<DlpFilesControllerLacros>(*rules_manager_);
-  }
-
-  void TearDownOnMainThread() override {
-    InProcessBrowserTest::TearDownOnMainThread();
-  }
-
-  std::unique_ptr<KeyedService> SetDlpRulesManager(
-      content::BrowserContext* context) {
-    auto dlp_rules_manager = std::make_unique<MockDlpRulesManager>(
-        Profile::FromBrowserContext(context));
-    rules_manager_ = dlp_rules_manager.get();
-    return dlp_rules_manager;
-  }
-
-  // Returns whether the DLP interface is available. It may
-  // not be available on earlier versions of ash-chrome.
-  bool IsServiceAvailable() const {
-    chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get();
-    return lacros_service && lacros_service->IsAvailable<crosapi::mojom::Dlp>();
-  }
-
-  void SetDlpInterfaceVersion(int version) {
-    crosapi::mojom::BrowserInitParamsPtr init_params =
-        chromeos::BrowserInitParams::GetForTests()->Clone();
-    init_params->interface_versions.value()[crosapi::mojom::Dlp::Uuid_] =
-        version;
-    chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params));
-  }
-
-  testing::StrictMock<MockDlpCrosapi>& service() { return service_; }
-
- protected:
-  testing::StrictMock<MockDlpCrosapi> service_;
-  mojo::Receiver<crosapi::mojom::Dlp> receiver_{&service_};
-
-  raw_ptr<MockDlpRulesManager, DisableDanglingPtrDetection> rules_manager_ =
-      nullptr;
-
-  std::unique_ptr<DlpFilesControllerLacros> files_controller_;
-};
-
-INSTANTIATE_TEST_SUITE_P(
-    DlpFilesControllerLacrosBlockUI,
-    DlpFilesControllerLacrosBlockUITest,
-    ::testing::Values(std::make_tuple(crosapi::mojom::FileAction::kUnknown,
-                                      policy::dlp::FileAction::kUnknown),
-                      std::make_tuple(crosapi::mojom::FileAction::kDownload,
-                                      policy::dlp::FileAction::kDownload),
-                      std::make_tuple(crosapi::mojom::FileAction::kTransfer,
-                                      policy::dlp::FileAction::kTransfer),
-                      std::make_tuple(crosapi::mojom::FileAction::kUpload,
-                                      policy::dlp::FileAction::kUpload),
-                      std::make_tuple(crosapi::mojom::FileAction::kCopy,
-                                      policy::dlp::FileAction::kCopy),
-                      std::make_tuple(crosapi::mojom::FileAction::kMove,
-                                      policy::dlp::FileAction::kMove),
-                      std::make_tuple(crosapi::mojom::FileAction::kOpen,
-                                      policy::dlp::FileAction::kOpen),
-                      std::make_tuple(crosapi::mojom::FileAction::kShare,
-                                      policy::dlp::FileAction::kShare)));
-
-IN_PROC_BROWSER_TEST_P(DlpFilesControllerLacrosBlockUITest,
-                       ShowDlpBlockedFilesTest) {
-  auto [mojo_action, dlp_action] = GetParam();
-
-  // If DLP interface is not available on this version of ash-chrome, this test
-  // suite will no-op.
-  if (!IsServiceAvailable()) {
-    return;
-  }
-
-  SetDlpInterfaceVersion(service().Version_);
-
-  std::optional<uint64_t> task_id = std::nullopt;
-  base::FilePath path(kFilePath);
-
-  EXPECT_CALL(service(),
-              ShowBlockedFiles(task_id, std::vector<base::FilePath>{path},
-                               mojo_action));
-
-  files_controller_->ShowDlpBlockedFiles(task_id, {path}, dlp_action);
-}
-
-}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_unittest.cc
deleted file mode 100644
index 6f63a70..0000000
--- a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_unittest.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// 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.
-#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h"
-
-#include <memory>
-#include <tuple>
-
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/functional/callback.h"
-#include "base/path_service.h"
-#include "base/test/gmock_callback_support.h"
-#include "base/test/mock_callback.h"
-#include "chrome/browser/chromeos/policy/dlp/test/dlp_files_test_base.h"
-#include "chrome/common/chrome_paths_lacros.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace policy {
-
-class DlpFilesControllerLacrosTest
-    : public DlpFilesTestBase,
-      public ::testing::WithParamInterface<
-          std::tuple<std::string, std::optional<data_controls::Component>>> {
- public:
-  DlpFilesControllerLacrosTest(const DlpFilesControllerLacrosTest&) = delete;
-  DlpFilesControllerLacrosTest& operator=(const DlpFilesControllerLacrosTest&) =
-      delete;
-
- protected:
-  DlpFilesControllerLacrosTest() = default;
-  ~DlpFilesControllerLacrosTest() override = default;
-
-  void SetUp() override {
-    DlpFilesTestBase::SetUp();
-    files_controller_ =
-        std::make_unique<DlpFilesControllerLacros>(*rules_manager_);
-
-    base::PathService::Get(base::DIR_HOME, &my_files_dir_);
-    ASSERT_TRUE(base::CreateDirectory(my_files_dir_));
-
-    drivefs_ = my_files_dir_.Append(FILE_PATH_LITERAL("drive"));
-    removable_media_dir_ = my_files_dir_.Append(FILE_PATH_LITERAL("USB"));
-    android_files_dir_ = my_files_dir_.Append(FILE_PATH_LITERAL("android"));
-    linux_files_dir_ = my_files_dir_.Append(FILE_PATH_LITERAL("linux"));
-    documents_dir_ = my_files_dir_.Append(FILE_PATH_LITERAL("Documents"));
-    downloads_dir_ = my_files_dir_.Append(FILE_PATH_LITERAL("Downloads"));
-    chrome::SetLacrosDefaultPaths(
-        documents_dir_, downloads_dir_, drivefs_, /*onedrive=*/base::FilePath(),
-        removable_media_dir_, android_files_dir_, linux_files_dir_,
-        ash_resources_dir_, share_cache_dir_, preinstalled_web_app_config_dir_,
-        preinstalled_web_app_extra_config_dir_);
-  }
-
-  std::unique_ptr<DlpFilesControllerLacros> files_controller_;
-
-  base::FilePath my_files_dir_;
-
-  base::FilePath documents_dir_;
-  base::FilePath downloads_dir_;
-  base::FilePath drivefs_;
-  base::FilePath removable_media_dir_;
-  base::FilePath android_files_dir_;
-  base::FilePath linux_files_dir_;
-  base::FilePath ash_resources_dir_;
-  base::FilePath share_cache_dir_;
-  base::FilePath preinstalled_web_app_config_dir_;
-  base::FilePath preinstalled_web_app_extra_config_dir_;
-};
-
-INSTANTIATE_TEST_SUITE_P(
-    DlpFiles,
-    DlpFilesControllerLacrosTest,
-    ::testing::Values(std::make_tuple("/android/path/filename",
-                                      data_controls::Component::kArc),
-                      std::make_tuple("/USB/path/filename",
-                                      data_controls::Component::kUsb),
-                      std::make_tuple("/linux/path/filename",
-                                      data_controls::Component::kCrostini),
-                      std::make_tuple("/drive/path/filename",
-                                      data_controls::Component::kDrive),
-                      std::make_tuple("/Downloads", std::nullopt)));
-TEST_P(DlpFilesControllerLacrosTest, MapFilePathToPolicyComponentTest) {
-  auto [path, expected_component] = GetParam();
-  EXPECT_EQ(files_controller_->MapFilePathToPolicyComponent(
-                profile_, base::FilePath(my_files_dir_.value() + path)),
-            expected_component);
-}
-
-}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
index 67f1ba1..3012f2a01 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/ash/policy/dlp/dlp_files_controller_ash.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_policy_constants.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h"
diff --git a/chrome/browser/devtools/visual_logging.h b/chrome/browser/devtools/visual_logging.h
index 3cc54deb..c6e259d1 100644
--- a/chrome/browser/devtools/visual_logging.h
+++ b/chrome/browser/devtools/visual_logging.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_DEVTOOLS_VISUAL_LOGGING_H_
 #define CHROME_BROWSER_DEVTOOLS_VISUAL_LOGGING_H_
 
+#include <cstdint>
 #include <vector>
 
 struct VisualElementImpression {
diff --git a/chrome/browser/enterprise/data_protection/clipboard_browsertest.cc b/chrome/browser/enterprise/data_protection/clipboard_browsertest.cc
index ad17ea8..0c25389f 100644
--- a/chrome/browser/enterprise/data_protection/clipboard_browsertest.cc
+++ b/chrome/browser/enterprise/data_protection/clipboard_browsertest.cc
@@ -31,6 +31,13 @@
 
 namespace {
 
+// TODO(crbug.com/360052665): Flaky on Mac
+#if BUILDFLAG(IS_MAC)
+#define MAYBE(x) DISABLED_##x
+#else
+#define MAYBE(x) x
+#endif
+
 // Browser tests that test data protection integration with Chrome's clipboard
 // logic. If a browser test you're adding is specific to a single
 // function/class, consider using a browsertest.cc file specific to that code.
@@ -93,18 +100,13 @@
     }
     base::RunLoop().RunUntilIdle();
 
-    // This permission is required to use `readText()` and `writeText()` without
-    // user input.
+    // This permission is required to use `readText()` without user input.
     content::PermissionController* permission_controller =
         rfh()->GetBrowserContext()->GetPermissionController();
     SetPermissionControllerOverrideForDevTools(
         permission_controller, url::Origin::Create(url()),
         blink::PermissionType::CLIPBOARD_READ_WRITE,
         blink::mojom::PermissionStatus::GRANTED);
-    SetPermissionControllerOverrideForDevTools(
-        permission_controller, url::Origin::Create(url()),
-        blink::PermissionType::CLIPBOARD_SANITIZED_WRITE,
-        blink::mojom::PermissionStatus::GRANTED);
     base::RunLoop().RunUntilIdle();
   }
 
@@ -115,7 +117,7 @@
 }  // namespace
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       CopyBlockedByDataControls) {
+                       MAYBE(CopyBlockedByDataControls)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "sources": { "urls": ["*"] },
                     "restrictions": [
@@ -152,7 +154,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       CopyWarnedByDataControls_Cancel) {
+                       MAYBE(CopyWarnedByDataControls_Cancel)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "sources": { "urls": ["*"] },
                     "restrictions": [
@@ -189,7 +191,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       CopyWarnedByDataControls_Bypass) {
+                       MAYBE(CopyWarnedByDataControls_Bypass)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "sources": { "urls": ["*"] },
                     "restrictions": [
@@ -227,7 +229,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       CopyAllowedByDataControls) {
+                       MAYBE(CopyAllowedByDataControls)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "sources": { "urls": ["google.com"] },
                     "restrictions": [
@@ -252,7 +254,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       PasteBlockedByDataControls) {
+                       MAYBE(PasteBlockedByDataControls)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "destinations": { "urls": ["*"] },
                     "restrictions": [
@@ -281,7 +283,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       PasteWarnedByDataControls_Cancel) {
+                       MAYBE(PasteWarnedByDataControls_Cancel)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "destinations": { "urls": ["*"] },
                     "restrictions": [
@@ -310,7 +312,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       PasteWarnedByDataControls_Bypass) {
+                       MAYBE(PasteWarnedByDataControls_Bypass)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "destinations": { "urls": ["*"] },
                     "restrictions": [
@@ -339,7 +341,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DataProtectionClipboardBrowserTest,
-                       PasteAllowedByDataControls) {
+                       MAYBE(PasteAllowedByDataControls)) {
   data_controls::SetDataControls(browser()->profile()->GetPrefs(), {R"({
                     "destinations": { "urls": ["google.com"] },
                     "restrictions": [
diff --git a/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.cc b/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.cc
new file mode 100644
index 0000000..4b8c4a3e
--- /dev/null
+++ b/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.cc
@@ -0,0 +1,131 @@
+// 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/enterprise/signin/managed_profile_required_navigation_throttle.h"
+
+#include <memory>
+
+#include "base/feature_list.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/enterprise/signin/interstitials/managed_profile_required_controller_client.h"
+#include "chrome/browser/enterprise/signin/interstitials/managed_profile_required_page.h"
+#include "chrome/browser/enterprise/util/managed_browser_utils.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/dice_web_signin_interceptor.h"
+#include "chrome/browser/signin/dice_web_signin_interceptor_factory.h"
+#include "chrome/browser/signin/signin_util.h"
+#include "chrome/browser/ui/managed_ui.h"
+#include "chrome/browser/ui/ui_features.h"
+#include "components/security_interstitials/content/security_interstitial_tab_helper.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/navigation_throttle.h"
+
+namespace {
+
+std::u16string GetManagerRequestingProfileSeparation(
+    const DiceWebSigninInterceptor& interceptor,
+    const std::u16string& profile_management_domain) {
+  const std::string& email = interceptor.intercepted_account_info().email;
+  std::u16string manager;
+  if (signin_util::IsProfileSeparationEnforcedByPolicies(
+          interceptor.intercepted_account_profile_separation_policies()
+              .value_or(policy::ProfileSeparationPolicies()))) {
+    manager = base::UTF8ToUTF16(enterprise_util::GetDomainFromEmail(email));
+  } else if (!profile_management_domain.empty()) {
+    manager = profile_management_domain;
+  } else if (auto device_manager = chrome::GetDeviceManagerIdentity();
+             device_manager) {
+    manager = base::UTF8ToUTF16(*device_manager);
+  }
+
+  return manager;
+}
+
+}  // namespace
+
+// static
+std::unique_ptr<ManagedProfileRequiredNavigationThrottle>
+ManagedProfileRequiredNavigationThrottle::MaybeCreateThrottleFor(
+    content::NavigationHandle* navigation_handle) {
+  if (!base::FeatureList::IsEnabled(
+          features::kEnterpriseUpdatedProfileCreationScreen)) {
+    return nullptr;
+  }
+
+  if (!navigation_handle->IsInPrimaryMainFrame() &&
+      !navigation_handle->IsInPrerenderedMainFrame()) {
+    return nullptr;
+  }
+  auto* profile = Profile::FromBrowserContext(
+      navigation_handle->GetWebContents()->GetBrowserContext());
+  auto* interceptor = DiceWebSigninInterceptorFactory::GetForProfile(profile);
+  if (!interceptor) {
+    return nullptr;
+  }
+  return std::make_unique<ManagedProfileRequiredNavigationThrottle>(
+      navigation_handle,
+      base::UTF8ToUTF16(
+          chrome::GetEnterpriseAccountDomain(*profile).value_or(std::string())),
+      interceptor);
+}
+
+ManagedProfileRequiredNavigationThrottle::
+    ManagedProfileRequiredNavigationThrottle(
+        content::NavigationHandle* navigation_handle,
+        const std::u16string& profile_management_domain,
+        DiceWebSigninInterceptor* signin_interceptor)
+    : content::NavigationThrottle(navigation_handle),
+      profile_management_domain_(profile_management_domain),
+      signin_interceptor_(signin_interceptor) {}
+
+ManagedProfileRequiredNavigationThrottle::
+    ~ManagedProfileRequiredNavigationThrottle() = default;
+
+content::NavigationThrottle::ThrottleCheckResult
+ManagedProfileRequiredNavigationThrottle::WillStartRequest() {
+  return ProcessThrottleEvent();
+}
+
+content::NavigationThrottle::ThrottleCheckResult
+ManagedProfileRequiredNavigationThrottle::WillRedirectRequest() {
+  return ProcessThrottleEvent();
+}
+
+content::NavigationThrottle::ThrottleCheckResult
+ManagedProfileRequiredNavigationThrottle::WillProcessResponse() {
+  return ProcessThrottleEvent();
+}
+
+content::NavigationThrottle::ThrottleCheckResult
+ManagedProfileRequiredNavigationThrottle::WillFailRequest() {
+  return ProcessThrottleEvent();
+}
+
+content::NavigationThrottle::ThrottleCheckResult
+ManagedProfileRequiredNavigationThrottle::ProcessThrottleEvent() {
+  if (!signin_interceptor_->managed_profile_creation_required_by_policy() ||
+      signin_interceptor_->web_contents() !=
+          navigation_handle()->GetWebContents()) {
+    return PROCEED;
+  }
+
+  auto managed_profile_required = std::make_unique<ManagedProfileRequiredPage>(
+      navigation_handle()->GetWebContents(), navigation_handle()->GetURL(),
+      GetManagerRequestingProfileSeparation(*signin_interceptor_,
+                                            profile_management_domain_),
+      base::UTF8ToUTF16(signin_interceptor_->intercepted_account_info().email),
+      std::make_unique<ManagedProfileRequiredControllerClient>(
+          navigation_handle()->GetWebContents(),
+          navigation_handle()->GetURL()));
+
+  std::string error_page_content = managed_profile_required->GetHTMLContents();
+  security_interstitials::SecurityInterstitialTabHelper::AssociateBlockingPage(
+      navigation_handle(), std::move(managed_profile_required));
+  return content::NavigationThrottle::ThrottleCheckResult(
+      CANCEL, net::ERR_BLOCKED_BY_CLIENT, error_page_content);
+}
+
+const char* ManagedProfileRequiredNavigationThrottle::GetNameForLogging() {
+  return "ManagedProfileRequiredNavigationThrottle";
+}
diff --git a/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.h b/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.h
new file mode 100644
index 0000000..282a9fa
--- /dev/null
+++ b/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.h
@@ -0,0 +1,63 @@
+// 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_ENTERPRISE_SIGNIN_MANAGED_PROFILE_REQUIRED_NAVIGATION_THROTTLE_H_
+#define CHROME_BROWSER_ENTERPRISE_SIGNIN_MANAGED_PROFILE_REQUIRED_NAVIGATION_THROTTLE_H_
+
+#include <memory>
+
+#include "base/containers/flat_map.h"
+#include "base/memory/weak_ptr.h"
+#include "content/public/browser/navigation_throttle.h"
+
+class DiceWebSigninInterceptor;
+
+namespace content {
+class NavigationHandle;
+}  // namespace content
+
+// This navigation throttle will show an interstitial on a page where an
+// an enterprise signin interception where a managed profile is required by
+// policy occurs.
+// The navigation is canceled and an interstitial is shown when the WebContents
+// of the navigation is the same as the one of DiceWebSigninInterceptor and the
+// current interception time is an forced enterprise interception.
+class ManagedProfileRequiredNavigationThrottle
+    : public content::NavigationThrottle {
+ public:
+  // Create a navigation throttle for the given navigation if third-party
+  // profile management is enabled. Returns nullptr if no throttling should be
+  // done.
+  static std::unique_ptr<ManagedProfileRequiredNavigationThrottle>
+  MaybeCreateThrottleFor(content::NavigationHandle* navigation_handle);
+
+  ManagedProfileRequiredNavigationThrottle(
+      content::NavigationHandle* navigation_handle,
+      const std::u16string& profile_management_domain,
+      DiceWebSigninInterceptor* signin_interceptor);
+
+  ManagedProfileRequiredNavigationThrottle(
+      const ManagedProfileRequiredNavigationThrottle&) = delete;
+  ManagedProfileRequiredNavigationThrottle& operator=(
+      const ManagedProfileRequiredNavigationThrottle&) = delete;
+  ~ManagedProfileRequiredNavigationThrottle() override;
+
+  ThrottleCheckResult WillStartRequest() override;
+  ThrottleCheckResult WillRedirectRequest() override;
+  ThrottleCheckResult WillProcessResponse() override;
+  ThrottleCheckResult WillFailRequest() override;
+  const char* GetNameForLogging() override;
+  void SetManagerForTesting(const std::u16string& manager_for_testing) {
+    profile_management_domain_ = manager_for_testing;
+  }
+
+ private:
+  ThrottleCheckResult ProcessThrottleEvent();
+  std::u16string profile_management_domain_;
+  raw_ptr<DiceWebSigninInterceptor> signin_interceptor_;
+  base::WeakPtrFactory<ManagedProfileRequiredNavigationThrottle>
+      weak_ptr_factory_{this};
+};
+
+#endif  // CHROME_BROWSER_ENTERPRISE_SIGNIN_MANAGED_PROFILE_REQUIRED_NAVIGATION_THROTTLE_H_
diff --git a/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle_browsertest.cc b/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle_browsertest.cc
new file mode 100644
index 0000000..dbca566
--- /dev/null
+++ b/chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle_browsertest.cc
@@ -0,0 +1,121 @@
+// 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/enterprise/signin/managed_profile_required_navigation_throttle.h"
+
+#include <memory>
+
+#include "base/feature_list.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/enterprise/signin/interstitials/managed_profile_required_controller_client.h"
+#include "chrome/browser/enterprise/signin/interstitials/managed_profile_required_page.h"
+#include "chrome/browser/enterprise/util/managed_browser_utils.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/dice_web_signin_interceptor.h"
+#include "chrome/browser/signin/dice_web_signin_interceptor_factory.h"
+#include "chrome/browser/signin/signin_util.h"
+#include "chrome/browser/signin/web_signin_interceptor.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/managed_ui.h"
+#include "chrome/browser/ui/ui_features.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "components/security_interstitials/content/security_interstitial_tab_helper.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/navigation_throttle.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/mock_navigation_handle.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+bool Equals(content::NavigationThrottle::ThrottleCheckResult& expected,
+            content::NavigationThrottle::ThrottleCheckResult&& actual) {
+  return expected.action() == actual.action() &&
+         expected.net_error_code() == actual.net_error_code() &&
+         expected.error_page_content() == actual.error_page_content();
+}
+}  // namespace
+
+class ManagedProfileRequiredNavigationThrottleFeatureDisabledTest
+    : public InProcessBrowserTest {
+ public:
+  ManagedProfileRequiredNavigationThrottleFeatureDisabledTest() {
+    feature_list_.InitAndDisableFeature(
+        features::kEnterpriseUpdatedProfileCreationScreen);
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(
+    ManagedProfileRequiredNavigationThrottleFeatureDisabledTest,
+    NoThrottle) {
+  auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
+  content::MockNavigationHandle mock_nav_handle(web_contents);
+
+  EXPECT_FALSE(ManagedProfileRequiredNavigationThrottle::MaybeCreateThrottleFor(
+      &mock_nav_handle));
+}
+
+class ManagedProfileRequiredNavigationThrottleTest
+    : public InProcessBrowserTest {
+ private:
+  base::test::ScopedFeatureList feature_list_{
+      features::kEnterpriseUpdatedProfileCreationScreen};
+};
+
+IN_PROC_BROWSER_TEST_F(ManagedProfileRequiredNavigationThrottleTest,
+                       ProceedsWhenNoForcedInterception) {
+  auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
+  content::MockNavigationHandle mock_nav_handle(web_contents);
+
+  auto throttle =
+      ManagedProfileRequiredNavigationThrottle::MaybeCreateThrottleFor(
+          &mock_nav_handle);
+  ASSERT_TRUE(throttle);
+  EXPECT_EQ(content::NavigationThrottle::ThrottleAction::PROCEED,
+            throttle->WillStartRequest());
+  EXPECT_EQ(content::NavigationThrottle::ThrottleAction::PROCEED,
+            throttle->WillRedirectRequest());
+  EXPECT_EQ(content::NavigationThrottle::ThrottleAction::PROCEED,
+            throttle->WillProcessResponse());
+  EXPECT_EQ(content::NavigationThrottle::ThrottleAction::PROCEED,
+            throttle->WillFailRequest());
+}
+
+IN_PROC_BROWSER_TEST_F(ManagedProfileRequiredNavigationThrottleTest,
+                       CancelsWithInterstitialWhenForcedInterception) {
+  auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
+  content::MockNavigationHandle mock_nav_handle(web_contents);
+
+  auto* interceptor =
+      DiceWebSigninInterceptorFactory::GetForProfile(browser()->profile());
+
+  interceptor->Reset();
+  interceptor->state_->interception_type_ =
+      WebSigninInterceptor::SigninInterceptionType::kEnterpriseForced;
+  interceptor->state_->web_contents_ = web_contents->GetWeakPtr();
+
+  auto managed_profile_required = std::make_unique<ManagedProfileRequiredPage>(
+      mock_nav_handle.GetWebContents(), mock_nav_handle.GetURL(), u"Manager",
+      base::UTF8ToUTF16(interceptor->intercepted_account_info().email),
+      std::make_unique<ManagedProfileRequiredControllerClient>(
+          mock_nav_handle.GetWebContents(), mock_nav_handle.GetURL()));
+  std::string error_page_content = managed_profile_required->GetHTMLContents();
+  content::NavigationThrottle::ThrottleCheckResult expected_result(
+      content::NavigationThrottle::ThrottleAction::CANCEL,
+      net::ERR_BLOCKED_BY_CLIENT, error_page_content);
+
+  auto throttle =
+      ManagedProfileRequiredNavigationThrottle::MaybeCreateThrottleFor(
+          &mock_nav_handle);
+  ASSERT_TRUE(throttle);
+  throttle->SetManagerForTesting(u"Manager");
+  EXPECT_TRUE(Equals(expected_result, throttle->WillStartRequest()));
+  EXPECT_TRUE(Equals(expected_result, throttle->WillRedirectRequest()));
+  EXPECT_TRUE(Equals(expected_result, throttle->WillProcessResponse()));
+  EXPECT_TRUE(Equals(expected_result, throttle->WillFailRequest()));
+}
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 17c41763..73847f4 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -5404,10 +5404,15 @@
   },
   {
     "name": "ios-keyboard-accessory-upgrade",
-    "owners": [ "noemies@chromium.org", "sugoi@chromium.org", "tmartino@chromium.org", "bling-integrations-team@google.com" ],
+    "owners": [ "noemies@google.com", "sugoi@chromium.org", "tmartino@chromium.org", "bling-integrations-team@google.com" ],
     "expiry_milestone": 135
   },
   {
+    "name": "ios-keyboard-accessory-upgrade-short-manual-fill-menu",
+    "owners": [ "noemies@google.com", "sugoi@chromium.org", "tmartino@chromium.org", "bling-integrations-team@google.com" ],
+    "expiry_milestone": 137
+  },
+  {
     "name": "ios-large-fakebox",
     "owners": ["scottyoder@google.com", "bling-get-set-up@google.com"],
     "expiry_milestone": 130
@@ -6806,11 +6811,6 @@
     "expiry_milestone": 136
   },
   {
-    "name": "overflow-menu-customization",
-    "owners": [ "rkgibson@google.com", "bling-flags@google.com" ],
-    "expiry_milestone": 127
-  },
-  {
     "name": "overlay-scrollbars",
     "owners": [ "chaopeng@chromium.org", "bokan@chromium.org", "input-dev@chromium.org" ],
     // This flag is used by users to improve the accessibility of scroll bars
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinator.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinator.java
index ed34cc8..675c94d4 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinator.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinator.java
@@ -35,6 +35,8 @@
     private final Runnable mChromeShutDownRunnable;
     private final PasswordAccessLossExportDialogCoordinator mExportDialogCoordinator;
 
+    private final @PasswordAccessLossWarningType int mWarningType;
+
     public PasswordAccessLossExportFlowCoordinator(
             FragmentActivity activity,
             Profile profile,
@@ -42,11 +44,11 @@
         mActivity = activity;
         mProfile = profile;
         mModalDialogManagerSupplier = modalDialogManagerSupplier;
+        mWarningType = getAccessLossWarningType();
         // In case the warning is prompted for the NEW_GMS_CORE_MIGRATION_FAILED case, the user will
         // be redirected to the import flow in GMS Core. Therefore, Chrome should be restarted
         // instead of shut down so that it doesn't interfere with GMS Core opening.
-        boolean shouldRestartChrome =
-                getAccessLossWarningType() == PasswordAccessLossWarningType.NO_GMS_CORE;
+        boolean shouldRestartChrome = mWarningType == PasswordAccessLossWarningType.NO_GMS_CORE;
         mChromeShutDownRunnable = () -> ApplicationLifetime.terminate(shouldRestartChrome);
         mExportDialogCoordinator =
                 new PasswordAccessLossExportDialogCoordinator(mActivity, mProfile, this);
@@ -62,6 +64,7 @@
         mActivity = activity;
         mProfile = profile;
         mModalDialogManagerSupplier = modalDialogManagerSupplier;
+        mWarningType = getAccessLossWarningType();
         mChromeShutDownRunnable = chromeShutDownRunnable;
         mExportDialogCoordinator = exportDialogCoordinator;
     }
@@ -89,8 +92,7 @@
 
     @Override
     public void onPasswordsDeletionFinished() {
-        if (getAccessLossWarningType()
-                != PasswordAccessLossWarningType.NEW_GMS_CORE_MIGRATION_FAILED) {
+        if (mWarningType != PasswordAccessLossWarningType.NEW_GMS_CORE_MIGRATION_FAILED) {
             mChromeShutDownRunnable.run();
             return;
         }
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinatorTest.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinatorTest.java
index b2d0c99..8ba87d0e 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinatorTest.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordAccessLossExportFlowCoordinatorTest.java
@@ -65,6 +65,16 @@
                 Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get();
         mModalDialogManager = new FakeModalDialogManager(ModalDialogManager.ModalDialogType.APP);
         mModalDialogManagerSupplier = () -> mModalDialogManager;
+    }
+
+    private void setUpAccessLossWarningType(@PasswordAccessLossWarningType int type) {
+        when(mPasswordManagerUtilBridgeJniMock.getPasswordAccessLossWarningType(any()))
+                .thenReturn(type);
+    }
+
+    private void initializeExportFlowCoordinator() {
+        // The coordinator needs to be created after the warning type is set for testing because it
+        // will store the warning type in a member variable.
         mCoordinator =
                 new PasswordAccessLossExportFlowCoordinator(
                         mActivity,
@@ -74,19 +84,19 @@
                         mChromeShutDownRunnable);
     }
 
-    private void setUpAccessLossWarningType(@PasswordAccessLossWarningType int type) {
-        when(mPasswordManagerUtilBridgeJniMock.getPasswordAccessLossWarningType(any()))
-                .thenReturn(type);
-    }
-
     private void setUpSyncService() {
         SyncService syncService = Mockito.mock(SyncService.class);
         SyncServiceFactory.setInstanceForTesting(syncService);
     }
 
     @Test
+    @EnableFeatures(
+            ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_LOCAL_PASSWORDS_ANDROID_ACCESS_LOSS_WARNING)
     public void testShowsExportDialog() {
+        setUpAccessLossWarningType(PasswordAccessLossWarningType.NEW_GMS_CORE_MIGRATION_FAILED);
+        initializeExportFlowCoordinator();
         mCoordinator.startExportFlow();
+
         verify(mExportDialogCoordinator).showExportDialog();
     }
 
@@ -95,6 +105,7 @@
             ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_LOCAL_PASSWORDS_ANDROID_ACCESS_LOSS_WARNING)
     public void testShowsImportDialogWhenDeletionFinished() {
         setUpAccessLossWarningType(PasswordAccessLossWarningType.NEW_GMS_CORE_MIGRATION_FAILED);
+        initializeExportFlowCoordinator();
         setUpSyncService();
         mCoordinator.onPasswordsDeletionFinished();
 
@@ -107,6 +118,7 @@
             ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_LOCAL_PASSWORDS_ANDROID_ACCESS_LOSS_WARNING)
     public void testDoesNotShowImportDialogForNoGmsCoreWarningTypeAndRestartsChrome() {
         setUpAccessLossWarningType(PasswordAccessLossWarningType.NO_GMS_CORE);
+        initializeExportFlowCoordinator();
         mCoordinator.onPasswordsDeletionFinished();
 
         // Chrome should be terminated.
diff --git a/chrome/browser/performance_manager/policies/urgent_page_discarding_policy_unittest.cc b/chrome/browser/performance_manager/policies/urgent_page_discarding_policy_unittest.cc
index eb08de0..43f16ff 100644
--- a/chrome/browser/performance_manager/policies/urgent_page_discarding_policy_unittest.cc
+++ b/chrome/browser/performance_manager/policies/urgent_page_discarding_policy_unittest.cc
@@ -39,12 +39,12 @@
   }
 
   void TearDown() override {
-    graph()->TakeFromGraph(policy_);
+    policy_ = nullptr;
     testing::GraphTestHarnessWithMockDiscarder::TearDown();
   }
 
  private:
-  raw_ptr<UrgentPageDiscardingPolicy, DanglingUntriaged> policy_;
+  raw_ptr<UrgentPageDiscardingPolicy> policy_ = nullptr;
 };
 
 TEST_F(UrgentPageDiscardingPolicyTest, DiscardOnCriticalPressure) {
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc
index bde2283..2e75400 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc
@@ -1718,8 +1718,14 @@
 
 // Tests that prefetched response can be served to prerender client
 // successfully.
+// TODO(crbug.com/370067813): enable the flaky test.
+#if BUILDFLAG(IS_ANDROID)
+#define MAYBE_FetchPrerenderActivated DISABLED_FetchPrerenderActivated
+#else
+#define MAYBE_FetchPrerenderActivated FetchPrerenderActivated
+#endif
 IN_PROC_BROWSER_TEST_F(SearchPreloadUnifiedBrowserTest,
-                       FetchPrerenderActivated) {
+                       MAYBE_FetchPrerenderActivated) {
   base::HistogramTester histogram_tester;
   const GURL kInitialUrl = embedded_test_server()->GetURL("/empty.html");
   const GURL kNavigatedUrl = embedded_test_server()->GetURL("/title1.html");
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h
index d55c454..7edfca1 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.h
@@ -343,8 +343,7 @@
 #endif  // !BUILDFLAG(IS_ANDROID)
 
  private:
-  raw_ptr<privacy_sandbox::PrivacySandboxSettings, DanglingUntriaged>
-      privacy_sandbox_settings_;
+  raw_ptr<privacy_sandbox::PrivacySandboxSettings> privacy_sandbox_settings_;
   raw_ptr<privacy_sandbox::TrackingProtectionSettings>
       tracking_protection_settings_;
   scoped_refptr<content_settings::CookieSettings> cookie_settings_;
@@ -355,13 +354,12 @@
   raw_ptr<content::BrowsingDataRemover> browsing_data_remover_;
   raw_ptr<HostContentSettingsMap> host_content_settings_map_;
 #if !BUILDFLAG(IS_ANDROID)
-  raw_ptr<TrustSafetySentimentService, DanglingUntriaged> sentiment_service_;
+  raw_ptr<TrustSafetySentimentService> sentiment_service_;
 #endif
   raw_ptr<browsing_topics::BrowsingTopicsService> browsing_topics_service_;
   raw_ptr<first_party_sets::FirstPartySetsPolicyService>
       first_party_sets_policy_service_;
-  raw_ptr<PrivacySandboxCountries, DanglingUntriaged>
-      privacy_sandbox_countries_;
+  raw_ptr<PrivacySandboxCountries> privacy_sandbox_countries_;
 
   PrefChangeRegistrar user_prefs_registrar_;
 
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
index 93784ce..cad0b703 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
@@ -368,6 +368,11 @@
   }
 
   void CreateService() {
+    // `CreateService` is sometimes called twice, or more in a tests.
+    // Previous instances must be destroyed in the opposite order of their
+    // construction.
+    privacy_sandbox_service_.reset();
+
     auto mock_delegate = CreateMockDelegate();
     mock_delegate_ = mock_delegate.get();
     mock_privacy_sandbox_countries_ =
@@ -486,9 +491,6 @@
   base::test::ScopedFeatureList inner_feature_list_;
   TestInterestGroupManager test_interest_group_manager_;
   browsing_topics::MockBrowsingTopicsService mock_browsing_topics_service_;
-  raw_ptr<privacy_sandbox_test_util::MockPrivacySandboxSettingsDelegate,
-          DanglingUntriaged>
-      mock_delegate_;
 
   first_party_sets::ScopedMockFirstPartySetsHandler
       mock_first_party_sets_handler_;
@@ -502,6 +504,8 @@
 #endif
   std::unique_ptr<privacy_sandbox::PrivacySandboxSettings>
       privacy_sandbox_settings_;
+  raw_ptr<privacy_sandbox_test_util::MockPrivacySandboxSettingsDelegate>
+      mock_delegate_;  // Owned by |privacy_sandbox_settings_|.
   privacy_sandbox::ScopedPrivacySandboxAttestations scoped_attestations_;
 
   std::unique_ptr<PrivacySandboxServiceImpl> privacy_sandbox_service_;
diff --git a/chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.cc b/chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.cc
index 344ff39..b775dc62 100644
--- a/chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.cc
+++ b/chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.h"
 
+#include "base/debug/crash_logging.h"
 #include "base/feature_list.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/browser_features.h"
@@ -13,6 +14,16 @@
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 
+namespace {
+
+std::string GetOriginName(ProfileKeepAliveOrigin origin) {
+  std::ostringstream oss;
+  oss << origin;
+  return oss.str();
+}
+
+}  // namespace
+
 ScopedProfileKeepAlive::ScopedProfileKeepAlive(const Profile* profile,
                                                ProfileKeepAliveOrigin origin)
     : profile_(profile->GetWeakPtr()), origin_(origin) {
@@ -45,20 +56,25 @@
 void ScopedProfileKeepAlive::RemoveKeepAliveOnUIThread(
     base::WeakPtr<const Profile> profile,
     ProfileKeepAliveOrigin origin) {
+  SCOPED_CRASH_KEY_STRING32("ProfileKeepAlive", "origin",
+                            GetOriginName(origin));
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   // |g_browser_process| could be nullptr if this is called during shutdown,
   // e.g. in tests.
-  if (!g_browser_process)
+  if (!g_browser_process) {
     return;
+  }
   // If the BrowserProcess is shutting down, then |profile| may be deleted
   // already. Doing anything here would be dangerous, and |profile| will be
   // deleted very soon in any case.
-  if (g_browser_process->IsShuttingDown())
+  if (g_browser_process->IsShuttingDown()) {
     return;
+  }
   // |profile_manager| can also be null in tests.
   auto* profile_manager = g_browser_process->profile_manager();
-  if (!profile_manager)
+  if (!profile_manager) {
     return;
+  }
   // TODO(crbug.com/41484323): |profile| was unexpectedly destroyed
   // early. Convert this to CHECK(profile) once the root cause is fixed.
   if (!profile) {
diff --git a/chrome/browser/resources/ash/settings/os_people_page/pin_settings.html b/chrome/browser/resources/ash/settings/os_people_page/pin_settings.html
index 3d042af5..7f60658 100644
--- a/chrome/browser/resources/ash/settings/os_people_page/pin_settings.html
+++ b/chrome/browser/resources/ash/settings/os_people_page/pin_settings.html
@@ -54,7 +54,8 @@
             aria-haspopup="menu"
             aria-label="$i18n{lockScreenPinMoreButtonAriaLabel}"
             on-click="onMoreButtonClicked_"
-            disabled$="[[quickUnlockDisabledByPolicy_]]">
+            disabled$="[[removeDisabled_(
+              hasPassword_, quickUnlockDisabledByPolicy_)]]">
         </cr-icon-button>
         <cr-action-menu id="moreMenu"
             role-description="$i18n{menu}"
@@ -62,7 +63,8 @@
           <button
               class="dropdown-item"
               on-click="onRemovePinButtonClicked_"
-              disabled$="[[quickUnlockDisabledByPolicy_]]">
+              disabled$="[[removeDisabled_(
+                hasPassword_, quickUnlockDisabledByPolicy_)]]">
             $i18n{lockScreenRemovePinButton}
           </button>
         </cr-action-menu>
diff --git a/chrome/browser/resources/ash/settings/os_people_page/pin_settings.ts b/chrome/browser/resources/ash/settings/os_people_page/pin_settings.ts
index 62aa4a3..9169f83 100644
--- a/chrome/browser/resources/ash/settings/os_people_page/pin_settings.ts
+++ b/chrome/browser/resources/ash/settings/os_people_page/pin_settings.ts
@@ -71,6 +71,7 @@
   private showSetPinDialog_: boolean;
   private showPinAutosubmitDialog_: boolean;
   private quickUnlockDisabledByPolicy_: boolean;
+  private hasPassword_: boolean;
 
   override ready(): void {
     super.ready();
@@ -98,6 +99,8 @@
   onFactorChanged(factor: AuthFactor): void {
     switch (factor) {
       case AuthFactor.kPin:
+      case AuthFactor.kGaiaPassword:
+      case AuthFactor.kLocalPassword:
         this.updatePinState_();
         break;
       default:
@@ -105,6 +108,13 @@
     }
   }
 
+  // Remove pin is disabled when pin is the only factor available, or
+  // in other words, when there is no password available.
+  // Remove can also be disabled by then the QuickUnlock policy disallows it.
+  private removeDisabled_(): boolean {
+    return !this.hasPassword_ || this.quickUnlockDisabledByPolicy_;
+  }
+
   private moreButton_(): CrIconButtonElement {
     const moreButton = this.shadowRoot!.querySelector('#moreButton');
     assert(moreButton instanceof CrIconButtonElement);
@@ -135,16 +145,34 @@
 
   /**
    * Fetches the state of the pin factor and updates the corresponding
-   * property.
+   * property. It also updates the fact that there is another knowledge factor
+   * present or not. This will help with logic of removal.
    */
   private async updatePinState_(): Promise<void> {
+    if (!this.authToken) {
+      return;
+    }
+
     if (typeof this.authToken !== 'string') {
       return;
     }
 
+    const authToken = this.authToken;
+
     const pfe = AuthFactorConfig.getRemote();
-    this.hasPin_ =
-        (await pfe.isConfigured(this.authToken, AuthFactor.kPin)).configured;
+    const [
+      { configured: hasGaiaPassword },
+      { configured: hasLocalPassword },
+      { configured: hasPin },
+    ] =
+        await Promise.all([
+          pfe.isConfigured(authToken, AuthFactor.kGaiaPassword),
+          pfe.isConfigured(authToken, AuthFactor.kLocalPassword),
+          pfe.isConfigured(authToken, AuthFactor.kPin),
+        ]);
+
+    this.hasPin_ = hasPin;
+    this.hasPassword_ = hasGaiaPassword || hasLocalPassword;
   }
 
   private onSetPinButtonClicked_(): void {
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc
index c58646f..9a722ea 100644
--- a/chrome/browser/signin/dice_web_signin_interceptor.cc
+++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -1537,6 +1537,17 @@
          signin::Tribool::kUnknown;
 }
 
+bool DiceWebSigninInterceptor::managed_profile_creation_required_by_policy()
+    const {
+  return state_->interception_type_ ==
+         WebSigninInterceptor::SigninInterceptionType::kEnterpriseForced;
+}
+
+AccountInfo DiceWebSigninInterceptor::intercepted_account_info() const {
+  return identity_manager_->FindExtendedAccountInfoByAccountId(
+      state_->account_id_);
+}
+
 // static
 base::TimeDelta
 DiceWebSigninInterceptor::GetTimeSinceLastChromeSigninDeclineForTesting(
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.h b/chrome/browser/signin/dice_web_signin_interceptor.h
index 5dce28c6..a6934e0 100644
--- a/chrome/browser/signin/dice_web_signin_interceptor.h
+++ b/chrome/browser/signin/dice_web_signin_interceptor.h
@@ -164,6 +164,19 @@
     return state_->is_interception_in_progress_;
   }
 
+  content::WebContents* web_contents() const {
+    return state_->web_contents_.get();
+  }
+
+  const std::optional<policy::ProfileSeparationPolicies>
+  intercepted_account_profile_separation_policies() const {
+    return state_->intercepted_account_profile_separation_policies_;
+  }
+
+  bool managed_profile_creation_required_by_policy() const;
+
+  AccountInfo intercepted_account_info() const;
+
   void SetInterceptedAccountProfileSeparationPoliciesForTesting(
       std::optional<policy::ProfileSeparationPolicies> value) {
     intercepted_account_profile_separation_policies_response_for_testing_ =
@@ -209,6 +222,8 @@
       DiceWebSigninInterceptorTest,
       ForcedEnterpriseInterceptionTestNoForcedInterception);
   FRIEND_TEST_ALL_PREFIXES(DiceWebSigninInterceptorTest, StateResetTest);
+  FRIEND_TEST_ALL_PREFIXES(ManagedProfileRequiredNavigationThrottleTest,
+                           CancelsWithInterstitialWhenForcedInterception);
 
   // Profile presets that will be passed from the previous profile to the newly
   // created one during sign in intercept.
diff --git a/chrome/browser/supervised_user/supervised_user_pending_state_navigation_browsertest.cc b/chrome/browser/supervised_user/supervised_user_pending_state_navigation_browsertest.cc
index 8172b1e..d49235f 100644
--- a/chrome/browser/supervised_user/supervised_user_pending_state_navigation_browsertest.cc
+++ b/chrome/browser/supervised_user/supervised_user_pending_state_navigation_browsertest.cc
@@ -87,6 +87,19 @@
         [&]() { return page_title == contents()->GetTitle(); }));
   }
 
+  void WaitForBlockedUrlInterstitial(
+      content::WebContents* interstitial_contents) {
+    // Search for string that only appears in the blocked url interstitial.
+    ASSERT_TRUE(base::test::RunUntil([interstitial_contents]() {
+      return ui_test_utils::FindInPage(
+                 interstitial_contents,
+                 l10n_util::GetStringUTF16(
+                     IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE_V2),
+                 /*forward=*/true, /*case_sensitive=*/true, /*ordinal=*/nullptr,
+                 /*selection_rect=*/nullptr) == 1;
+    }));
+  }
+
   void SignInSupervisedUserAndWaitForInterstitialReload(
       content::WebContents* content) {
     Profile* profile =
@@ -202,16 +215,8 @@
 
 // Tests that the sign-in tabs opened through the re-auth interstitial
 // are closed on re-authentication.
-// TODO(https://crbug.com/370115099): This test fails on Linux MSan.
-#if BUILDFLAG(IS_LINUX) && defined(MEMORY_SANITIZER)
-#define MAYBE_TestReauthInterstitialClosesSignInTabsAndReloads \
-  DISABLED_TestReauthInterstitialClosesSignInTabsAndReloads
-#else
-#define MAYBE_TestReauthInterstitialClosesSignInTabsAndReloads \
-  TestReauthInterstitialClosesSignInTabsAndReloads
-#endif
 IN_PROC_BROWSER_TEST_F(SupervisedUserPendingStateNavigationTest,
-                       MAYBE_TestReauthInterstitialClosesSignInTabsAndReloads) {
+                       TestReauthInterstitialClosesSignInTabsAndReloads) {
   base::HistogramTester histogram_tester;
 
   kids_management_api_mock().RestrictSubsequentClassifyUrl();
@@ -274,14 +279,7 @@
       1);
   EXPECT_EQ(2, browser()->tab_strip_model()->count());
 
-  // Check the blocked url interstitial is displayed.
-  EXPECT_EQ(
-      ui_test_utils::FindInPage(
-          interstitial_contents,
-          l10n_util::GetStringUTF16(IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE_V2),
-          /*forward=*/true, /*case_sensitive=*/true, /*ordinal=*/nullptr,
-          /*selection_rect=*/nullptr),
-      1);
+  WaitForBlockedUrlInterstitial(interstitial_contents);
 }
 
 IN_PROC_BROWSER_TEST_F(SupervisedUserPendingStateNavigationTest,
diff --git a/chrome/browser/sync/test/integration/single_client_saved_tab_groups_sync_test.cc b/chrome/browser/sync/test/integration/single_client_saved_tab_groups_sync_test.cc
index 34405f5..8cfc005 100644
--- a/chrome/browser/sync/test/integration/single_client_saved_tab_groups_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_saved_tab_groups_sync_test.cc
@@ -32,8 +32,10 @@
                                                             int position) {
   sync_pb::SavedTabGroupSpecifics pb_specific;
   pb_specific.set_guid(guid.AsLowercaseString());
-  pb_specific.set_creation_time_windows_epoch_micros(10);
-  pb_specific.set_update_time_windows_epoch_micros(10);
+  pb_specific.set_creation_time_windows_epoch_micros(
+      base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
+  pb_specific.set_update_time_windows_epoch_micros(
+      base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
   sync_pb::SavedTabGroup* pb_group = pb_specific.mutable_group();
   pb_group->set_color(sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_GREY);
   pb_group->set_title("Test");
diff --git a/chrome/browser/task_manager/providers/render_process_host_task_provider.cc b/chrome/browser/task_manager/providers/render_process_host_task_provider.cc
index 11b05cb..45a5b111 100644
--- a/chrome/browser/task_manager/providers/render_process_host_task_provider.cc
+++ b/chrome/browser/task_manager/providers/render_process_host_task_provider.cc
@@ -110,18 +110,14 @@
 void RenderProcessHostTaskProvider::RenderProcessExited(
     content::RenderProcessHost* host,
     const content::ChildProcessTerminationInfo& info) {
-  if (is_updating_) {
-    DeleteTask(host->GetID());
-    host_observation_.RemoveObservation(host);
-  }
+  DeleteTask(host->GetID());
+  host_observation_.RemoveObservation(host);
 }
 
 void RenderProcessHostTaskProvider::RenderProcessHostDestroyed(
     content::RenderProcessHost* host) {
-  if (is_updating_) {
-    DeleteTask(host->GetID());
-    host_observation_.RemoveObservation(host);
-  }
+  DeleteTask(host->GetID());
+  host_observation_.RemoveObservation(host);
 }
 
 }  // namespace task_manager
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index 9616dc7..b6d5755 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -204,6 +204,7 @@
 <translation id="1957557050935255529">PDF se učitava…</translation>
 <translation id="1959679933317802873">Čeka se sadržaj</translation>
 <translation id="1960290143419248813">Chrome ažuriranja više nisu podržana za ovu verziju Android-a</translation>
+<translation id="1963056249988316027">Provera identiteta je uključena i ne može da potvrdi da ste to vi</translation>
 <translation id="1963976881984600709">Standardna zaštita</translation>
 <translation id="1966710179511230534">Ažurirajte podatke za prijavljivanje.</translation>
 <translation id="1969037871259811890">Brisanjem podataka pregledanja ne odjavljujete se sa Google naloga. Da biste to uradili, <ph name="BEGIN_LINK1" />odjavite se iz Chrome-a<ph name="END_LINK1" />.</translation>
@@ -555,6 +556,7 @@
 <translation id="3622349720008044802">Upravljajte prozorima</translation>
 <translation id="3623240789707551553">{DOMAIN_COUNT,plural, =1{i još 1 sajt}one{i još # sajt}few{i još # sajta}other{i još # sajtova}}</translation>
 <translation id="3631987586758005671">Deli se sa: <ph name="DEVICE_NAME" /></translation>
+<translation id="363484704507524488">Proverom identiteta možete da upravljate u podešavanjima zaštite od krađe. <ph name="BEGIN_LINK" />Idi u podešavanja<ph name="END_LINK" /></translation>
 <translation id="3635073343384702370">Chrome može da proverava lozinke kada ih sačuvate</translation>
 <translation id="363596933471559332">Automatski se prijavljujte na veb-sajtove pomoću sačuvanih akreditiva. Kada je ova funkcija isključena, tražićemo vam da se verifikujete pre svakog prijavljivanja na veb-sajt.</translation>
 <translation id="3636940436873918441">Željeni jezici</translation>
@@ -1036,6 +1038,7 @@
 <translation id="5869522115854928033">Sačuvane lozinke</translation>
 <translation id="587735546353481577">Da biste pratili sajt, idite na njega, otvorite Chrome meni i dodirnite Prati.</translation>
 <translation id="5879072387416556377">Dobijajte bolje predloge</translation>
+<translation id="5883855034004058011">Biometrija nije uspela previše puta. Zaključajte i otključajte uređaj da biste probali ponovo.</translation>
 <translation id="5885378508678660271">Obaveštenja <ph name="SEPARATOR" /> Chrome je uklonio ove dozvole jer je ovaj sajt opasan</translation>
 <translation id="5895834791314695851">Lozinke će možda uskoro prestati da rade na ovom uređaju. Da biste nastavili da koristite lozinke, ažurirajte Google Play usluge. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="5899667542927581604">Nijedna tabela sa pristupnim ključevima nije zatvorena</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 1189c8d0..f63bf3f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -204,6 +204,7 @@
 <translation id="1957557050935255529">PDF се учитава…</translation>
 <translation id="1959679933317802873">Чека се садржај</translation>
 <translation id="1960290143419248813">Chrome ажурирања више нису подржана за ову верзију Android-а</translation>
+<translation id="1963056249988316027">Провера идентитета је укључена и не може да потврди да сте то ви</translation>
 <translation id="1963976881984600709">Стандардна заштита</translation>
 <translation id="1966710179511230534">Ажурирајте податке за пријављивање.</translation>
 <translation id="1969037871259811890">Брисањем података прегледања не одјављујете се са Google налога. Да бисте то урадили, <ph name="BEGIN_LINK1" />одјавите се из Chrome-а<ph name="END_LINK1" />.</translation>
@@ -555,6 +556,7 @@
 <translation id="3622349720008044802">Управљајте прозорима</translation>
 <translation id="3623240789707551553">{DOMAIN_COUNT,plural, =1{и још 1 сајт}one{и још # сајт}few{и још # сајта}other{и још # сајтова}}</translation>
 <translation id="3631987586758005671">Дели се са: <ph name="DEVICE_NAME" /></translation>
+<translation id="363484704507524488">Провером идентитета можете да управљате у подешавањима заштите од крађе. <ph name="BEGIN_LINK" />Иди у подешавања<ph name="END_LINK" /></translation>
 <translation id="3635073343384702370">Chrome може да проверава лозинке када их сачувате</translation>
 <translation id="363596933471559332">Аутоматски се пријављујте на веб-сајтове помоћу сачуваних акредитива. Када је ова функција искључена, тражићемо вам да се верификујете пре сваког пријављивања на веб-сајт.</translation>
 <translation id="3636940436873918441">Жељени језици</translation>
@@ -1036,6 +1038,7 @@
 <translation id="5869522115854928033">Сачуване лозинке</translation>
 <translation id="587735546353481577">Да бисте пратили сајт, идите на њега, отворите Chrome мени и додирните Прати.</translation>
 <translation id="5879072387416556377">Добијајте боље предлоге</translation>
+<translation id="5883855034004058011">Биометрија није успела превише пута. Закључајте и откључајте уређај да бисте пробали поново.</translation>
 <translation id="5885378508678660271">Обавештења <ph name="SEPARATOR" /> Chrome је уклонио ове дозволе јер је овај сајт опасан</translation>
 <translation id="5895834791314695851">Лозинке ће можда ускоро престати да раде на овом уређају. Да бисте наставили да користите лозинке, ажурирајте Google Play услуге. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="5899667542927581604">Ниједна табела са приступним кључевима није затворена</translation>
diff --git a/chrome/browser/ui/autofill/autofill_context_menu_manager.cc b/chrome/browser/ui/autofill/autofill_context_menu_manager.cc
index 7b553d8..f5c0d76 100644
--- a/chrome/browser/ui/autofill/autofill_context_menu_manager.cc
+++ b/chrome/browser/ui/autofill/autofill_context_menu_manager.cc
@@ -125,7 +125,6 @@
     case blink::mojom::FormControlType::kButtonSubmit:
     case blink::mojom::FormControlType::kButtonReset:
     case blink::mojom::FormControlType::kButtonPopover:
-    case blink::mojom::FormControlType::kButtonSelectList:
     case blink::mojom::FormControlType::kFieldset:
     case blink::mojom::FormControlType::kInputButton:
     case blink::mojom::FormControlType::kInputCheckbox:
@@ -144,7 +143,6 @@
     case blink::mojom::FormControlType::kOutput:
     case blink::mojom::FormControlType::kSelectOne:
     case blink::mojom::FormControlType::kSelectMultiple:
-    case blink::mojom::FormControlType::kSelectList:
       return false;
   }
   NOTREACHED();
diff --git a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
index fc96887..5f8d9e27 100644
--- a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
@@ -23,6 +23,7 @@
 #include "chrome/browser/ui/bookmarks/bookmark_utils_desktop.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
@@ -209,7 +210,7 @@
     AddCheckboxItem(IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT,
                     IDS_BOOKMARK_BAR_SHOW_APPS_SHORTCUT);
   }
-  if (chrome::IsSavedTabGroupsEnabled(profile_) &&
+  if (tab_groups::SavedTabGroupUtils::IsEnabledForProfile(profile_) &&
       tab_groups::IsTabGroupsSaveUIUpdateEnabled()) {
     AddCheckboxItem(IDC_BOOKMARK_BAR_TOGGLE_SHOW_TAB_GROUPS,
                     IDS_BOOKMARK_BAR_SHOW_TAB_GROUPS);
diff --git a/chrome/browser/ui/bookmarks/bookmark_utils.cc b/chrome/browser/ui/bookmarks/bookmark_utils.cc
index 87690187..af096ef 100644
--- a/chrome/browser/ui/bookmarks/bookmark_utils.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_utils.cc
@@ -160,10 +160,6 @@
 #endif
 }
 
-bool IsSavedTabGroupsEnabled(Profile* profile) {
-  return profile->IsRegularProfile();
-}
-
 bool ShouldShowAppsShortcutInBookmarkBar(Profile* profile) {
   return IsAppsShortcutEnabled(profile) &&
          profile->GetPrefs()->GetBoolean(
diff --git a/chrome/browser/ui/bookmarks/bookmark_utils.h b/chrome/browser/ui/bookmarks/bookmark_utils.h
index 6b7a296..f5b291cd 100644
--- a/chrome/browser/ui/bookmarks/bookmark_utils.h
+++ b/chrome/browser/ui/bookmarks/bookmark_utils.h
@@ -62,10 +62,6 @@
 // context menu.
 bool IsAppsShortcutEnabled(Profile* profile);
 
-// Returns true when the TabGroupsSave feature should be added to the
-// bookmarks bar.
-bool IsSavedTabGroupsEnabled(Profile* profile);
-
 // Returns true if the Apps shortcut should be displayed in the bookmark bar.
 bool ShouldShowAppsShortcutInBookmarkBar(Profile* profile);
 
diff --git a/chrome/browser/ui/browser_focus_uitest.cc b/chrome/browser/ui/browser_focus_uitest.cc
index 5c027969..e1dc23e 100644
--- a/chrome/browser/ui/browser_focus_uitest.cc
+++ b/chrome/browser/ui/browser_focus_uitest.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/sharing_hub/sharing_hub_features.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/browser_element_identifiers.h"
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
@@ -34,13 +35,16 @@
 #include "chrome/browser/ui/location_bar/location_bar.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/view_ids.h"
+#include "chrome/browser/ui/views/find_bar_view.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/frame/contents_web_view.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/chrome_test_utils.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/interactive_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "chrome/test/interaction/interactive_browser_test.h"
 #include "components/omnibox/browser/autocomplete_match_type.h"
 #include "components/omnibox/browser/omnibox_client.h"
 #include "components/omnibox/browser/omnibox_controller.h"
@@ -59,6 +63,7 @@
 #include "ui/base/test/ui_controls.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/views/focus/focus_manager.h"
+#include "ui/views/interaction/view_focus_observer.h"
 #include "ui/views/test/widget_activation_waiter.h"
 #include "ui/views/widget/widget.h"
 
@@ -136,12 +141,6 @@
 using content::RenderViewHost;
 using content::WebContents;
 
-#if BUILDFLAG(IS_POSIX)
-// The delay waited in some cases where we don't have a notifications for an
-// action we take.
-const int kActionDelayMs = 500;
-#endif
-
 const char kSimplePage[] = "/focus/page_with_focus.html";
 const char kStealFocusPage[] = "/focus/page_steals_focus.html";
 const char kTypicalPage[] = "/focus/typical_page.html";
@@ -212,11 +211,14 @@
   EXPECT_TRUE(ui_test_utils::IsViewFocused(browser2, VIEW_ID_OMNIBOX));
 }
 
-class BrowserFocusTest : public InProcessBrowserTest {
+DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kWebContentsId);
+
+class BrowserFocusTest : public InteractiveBrowserTest {
  public:
-  // InProcessBrowserTest overrides:
+  // InteractiveBrowserTest overrides:
   void SetUpOnMainThread() override {
     ASSERT_TRUE(embedded_test_server()->Start());
+    InteractiveBrowserTest::SetUpOnMainThread();
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -271,36 +273,31 @@
     return focus_manager;
   }
 
+  views::Widget* GetWidgetForBrowser(Browser* browser) {
+    BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
+    CHECK(browser_view);
+    views::Widget* widget = browser_view->GetWidget();
+    CHECK(widget);
+    return widget;
+  }
+
  private:
   constexpr static size_t kMaxIterations = 20;
 };
 
-// Flaky on Mac (http://crbug.com/67301).
-#if BUILDFLAG(IS_MAC)
-#define MAYBE_ClickingMovesFocus DISABLED_ClickingMovesFocus
-#else
-// If this flakes, disable and log details in http://crbug.com/523255.
-#define MAYBE_ClickingMovesFocus ClickingMovesFocus
-#endif
-IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_ClickingMovesFocus) {
-  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
-#if BUILDFLAG(IS_POSIX)
-  // It seems we have to wait a little bit for the widgets to spin up before
-  // we can start clicking on them.
-  base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
-  base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
-      FROM_HERE, loop.QuitWhenIdleClosure(),
-      base::Milliseconds(kActionDelayMs));
-  loop.Run();
-#endif  // BUILDFLAG(IS_POSIX)
-
-  ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX));
-
-  ClickOnView(VIEW_ID_TAB_CONTAINER);
-  ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER));
-
-  ClickOnView(VIEW_ID_OMNIBOX);
-  ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX));
+IN_PROC_BROWSER_TEST_F(BrowserFocusTest, ClickingMovesFocus) {
+  RunTestSequence(
+      InstrumentTab(kWebContentsId),
+      ObserveState(views::test::kCurrentFocusedViewId,
+                   GetWidgetForBrowser(browser())),
+      WaitForState(views::test::kCurrentFocusedViewId, kOmniboxElementId),
+      // Click on the tab container and check that it has focus.
+      MoveMouseTo(ContentsWebView::kContentsWebViewElementId), ClickMouse(),
+      WaitForState(views::test::kCurrentFocusedViewId,
+                   ContentsWebView::kContentsWebViewElementId),
+      // Click on the omnibox and check that it has focus.
+      MoveMouseTo(kOmniboxElementId), ClickMouse(),
+      WaitForState(views::test::kCurrentFocusedViewId, kOmniboxElementId));
 }
 
 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BrowsersRememberFocus) {
@@ -521,33 +518,18 @@
 }
 
 // Test that find-in-page UI can request focus, even when it is already open.
-#if BUILDFLAG(IS_MAC)
-#define MAYBE_FindFocusTest DISABLED_FindFocusTest
-#else
-// If this flakes, disable and log details in http://crbug.com/523255.
-#define MAYBE_FindFocusTest FindFocusTest
-#endif
-IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FindFocusTest) {
-  DisableFindBarAnimationsDuringTesting(true);
-  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
-  const GURL url = embedded_test_server()->GetURL(kTypicalPage);
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER));
-
-  chrome::Find(browser());
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
-
-  chrome::FocusLocationBar(browser());
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX));
-
-  chrome::Find(browser());
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
-
-  ClickOnView(VIEW_ID_TAB_CONTAINER);
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER));
-
-  chrome::Find(browser());
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
+IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FindFocusTest) {
+  RunTestSequence(
+      InstrumentTab(kWebContentsId),
+      ObserveState(views::test::kCurrentFocusedViewId,
+                   GetWidgetForBrowser(browser())),
+      Do([this]() { chrome::Find(browser()); }),
+      WaitForState(views::test::kCurrentFocusedViewId, FindBarView::kTextField),
+      MoveMouseTo(kOmniboxElementId), ClickMouse(),
+      WaitForState(views::test::kCurrentFocusedViewId, kOmniboxElementId),
+      Do([this]() { chrome::Find(browser()); }),
+      WaitForState(views::test::kCurrentFocusedViewId,
+                   FindBarView::kTextField));
 }
 
 // Makes sure the focus is in the right location when opening the different
@@ -735,43 +717,39 @@
   EXPECT_FALSE(IsViewFocused(VIEW_ID_OMNIBOX));
 }
 
-// Flaky on all platforms (http://crbug.com/665296).
-IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_FocusOnNavigate) {
-  // Needed on Mac.
-  // TODO(warx): check why it is needed on Mac.
-  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
-  // Load the NTP.
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(),
-                                           GURL(chrome::kChromeUINewTabURL)));
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX));
+IN_PROC_BROWSER_TEST_F(BrowserFocusTest, OmniboxFocusesOnNewTab) {
+  RunTestSequence(
+      InstrumentTab(kWebContentsId),
+      ObserveState(views::test::kCurrentFocusedViewId,
+                   GetWidgetForBrowser(browser())),
+      WaitForState(views::test::kCurrentFocusedViewId, kOmniboxElementId));
+}
 
-  // Navigate to another page.
-  const base::FilePath::CharType* kEmptyFile = FILE_PATH_LITERAL("empty.html");
-  GURL file_url(ui_test_utils::GetTestUrl(
-      base::FilePath(base::FilePath::kCurrentDirectory),
-      base::FilePath(kEmptyFile)));
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), file_url));
-
-  ClickOnView(VIEW_ID_TAB_CONTAINER);
-
-  // Navigate back.  Should focus the location bar.
-  {
-    chrome::GoBack(browser(), WindowOpenDisposition::CURRENT_TAB);
-    content::WaitForLoadStop(
-        browser()->tab_strip_model()->GetActiveWebContents());
-  }
-
-  EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX));
-
-  // Navigate forward.  Shouldn't focus the location bar.
-  ClickOnView(VIEW_ID_TAB_CONTAINER);
-  {
-    chrome::GoForward(browser(), WindowOpenDisposition::CURRENT_TAB);
-    content::WaitForLoadStop(
-        browser()->tab_strip_model()->GetActiveWebContents());
-  }
-
-  EXPECT_FALSE(IsViewFocused(VIEW_ID_OMNIBOX));
+// TODO(crbug.com/370117091): This currently tests the incorrect behavior that
+// causes the omnibox to *not* get focus when going back to a new tab page via
+// the history. Update this test when the bug is fixed.
+IN_PROC_BROWSER_TEST_F(BrowserFocusTest, OmniboxFocusStateAcrossHistory) {
+  RunTestSequence(
+      InstrumentTab(kWebContentsId),
+      ObserveState(views::test::kCurrentFocusedViewId,
+                   GetWidgetForBrowser(browser())),
+      NavigateWebContents(kWebContentsId, GURL(chrome::kChromeUINewTabURL)),
+      NavigateWebContents(kWebContentsId,
+                          embedded_test_server()->GetURL("/title1.html")),
+      MoveMouseTo(ContentsWebView::kContentsWebViewElementId), ClickMouse(),
+      // Navigate back. Check that the location bar is not focused. This should
+      // focus the location bar, but that is not the current behavior.
+      PressButton(kToolbarBackButtonElementId),
+      WaitForWebContentsNavigation(kWebContentsId,
+                                   GURL(chrome::kChromeUINewTabURL)),
+      WaitForState(views::test::kCurrentFocusedViewId,
+                   testing::Ne(kOmniboxElementId)),
+      // Navigate forward. Should focus the body.
+      PressButton(kToolbarForwardButtonElementId),
+      WaitForWebContentsNavigation(
+          kWebContentsId, embedded_test_server()->GetURL("/title1.html")),
+      WaitForState(views::test::kCurrentFocusedViewId,
+                   ContentsWebView::kContentsWebViewElementId));
 }
 
 // Ensure that crbug.com/567445 does not regress. This test checks that the
diff --git a/chrome/browser/ui/managed_ui.cc b/chrome/browser/ui/managed_ui.cc
index ba53640..6263f7d2 100644
--- a/chrome/browser/ui/managed_ui.cc
+++ b/chrome/browser/ui/managed_ui.cc
@@ -32,6 +32,7 @@
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "components/prefs/pref_service.h"
 #include "components/signin/public/identity_manager/account_info.h"
+#include "components/signin/public/identity_manager/account_managed_status_finder.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/supervised_user/core/browser/supervised_user_preferences.h"
 #include "components/supervised_user/core/common/supervised_user_constants.h"
@@ -72,25 +73,6 @@
 
 const char* g_device_manager_for_testing = nullptr;
 
-std::optional<std::string> GetEnterpriseAccountDomain(Profile* profile) {
-  if (g_browser_process->profile_manager()) {
-    ProfileAttributesEntry* entry =
-        g_browser_process->profile_manager()
-            ->GetProfileAttributesStorage()
-            .GetProfileAttributesWithPath(profile->GetPath());
-    if (entry && !entry->GetHostedDomain().empty() &&
-        entry->GetHostedDomain() != kNoHostedDomainFound)
-      return entry->GetHostedDomain();
-  }
-
-  const std::string domain =
-      enterprise_util::GetDomainFromEmail(profile->GetProfileUserName());
-  // Heuristic for most common consumer Google domains -- these are not managed.
-  if (domain.empty() || domain == "gmail.com" || domain == "googlemail.com")
-    return std::nullopt;
-  return domain;
-}
-
 bool ShouldDisplayManagedByParentUi(Profile* profile) {
 #if BUILDFLAG(IS_CHROMEOS)
   // Don't display the managed by parent UI on ChromeOS, because similar UI is
@@ -159,6 +141,27 @@
   g_device_manager_for_testing = previous_manager_;
 }
 
+std::optional<std::string> GetEnterpriseAccountDomain(const Profile& profile) {
+  if (g_browser_process->profile_manager()) {
+    ProfileAttributesEntry* entry =
+        g_browser_process->profile_manager()
+            ->GetProfileAttributesStorage()
+            .GetProfileAttributesWithPath(profile.GetPath());
+    if (entry && !entry->GetHostedDomain().empty() &&
+        entry->GetHostedDomain() != kNoHostedDomainFound) {
+      return entry->GetHostedDomain();
+    }
+  }
+
+  const std::string domain =
+      enterprise_util::GetDomainFromEmail(profile.GetProfileUserName());
+  if (!signin::AccountManagedStatusFinder::MayBeEnterpriseUserBasedOnEmail(
+          profile.GetProfileUserName())) {
+    return std::nullopt;
+  }
+  return domain;
+}
+
 bool ShouldDisplayManagedUi(Profile* profile) {
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   // Don't show the UI in demo mode.
@@ -486,7 +489,7 @@
     return "Local Test Policies";
   }
 
-  return GetEnterpriseAccountDomain(profile);
+  return GetEnterpriseAccountDomain(*profile);
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/managed_ui.h b/chrome/browser/ui/managed_ui.h
index b8abbf21..cd60a95f 100644
--- a/chrome/browser/ui/managed_ui.h
+++ b/chrome/browser/ui/managed_ui.h
@@ -29,6 +29,11 @@
   const char* previous_manager_ = nullptr;
 };
 
+// Returns the enterprise domain of `profile` if one was found.
+// This function will try to get the hosted domain and fallback on the domain
+// of the email of the signed in account.
+std::optional<std::string> GetEnterpriseAccountDomain(const Profile& profile);
+
 // Returns true if a 'Managed by <...>' message should appear in
 // Chrome's App Menu, and on the following chrome:// pages:
 // - chrome://bookmarks
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc
index 752db65..c2937ba 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc
@@ -188,13 +188,14 @@
   if (model()->is_loaded()) {
     CHECK(!model()->Contains(group.saved_guid()))
         << "This group is somehow saved already when it shouldn't be.";
-
-    const LocalTabGroupID local_id = group.local_group_id().value();
+    const std::optional<LocalTabGroupID> local_id = group.local_group_id();
     const base::Uuid sync_id = group.saved_guid();
     model_->Add(std::move(group));
-    ConnectLocalTabGroup(local_id, sync_id);
+    if (local_id.has_value()) {
+      ConnectLocalTabGroup(local_id.value(), sync_id);
+    }
   } else {
-    restored_groups_to_save_on_load_.emplace_back(group);
+    restored_groups_to_save_on_load_.emplace_back(std::move(group));
   }
 }
 
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h
index 3380a4e..54c431e7 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h
@@ -93,6 +93,8 @@
 
   // Saves a restored group. This can be called prior to the saved tab
   // group model is loaded. These groups are saved when the model is loaded.
+  // This method will also connect an opened tab group to the saved group if the
+  // local id is provided via `group`.
   void SaveRestoredGroup(SavedTabGroup group);
 
   void UpdateAttributions(
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.cc b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.cc
index 088fd0d..2d14095e 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.cc
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.cc
@@ -64,6 +64,14 @@
 DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(SavedTabGroupUtils, kTabsTitleItem);
 DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(SavedTabGroupUtils, kTab);
 
+bool SavedTabGroupUtils::IsEnabledForProfile(Profile* profile) {
+  if (!profile) {
+    return false;
+  }
+
+  return SavedTabGroupUtils::GetServiceForProfile(profile) != nullptr;
+}
+
 // static
 TabGroupSyncService* SavedTabGroupUtils::GetServiceForProfile(
     Profile* profile) {
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h
index 3174664..9955360 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h
@@ -44,6 +44,9 @@
   SavedTabGroupUtils(const SavedTabGroupUtils&) = delete;
   SavedTabGroupUtils& operator=(const SavedTabGroupUtils&) = delete;
 
+  // Helper method for checking whether the feature can be used.
+  static bool IsEnabledForProfile(Profile* profile);
+
   // TODO(crbug.com/350514491): Default to using the TabGroupSyncService when
   // crbug.com/350514491 is complete.
   // When IsTabGroupSyncServiceDesktopMigrationEnabled() is true use the
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc
index 91513d44..e46485d 100644
--- a/chrome/browser/ui/tabs/tab_strip_model.cc
+++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -1151,14 +1151,17 @@
                                          const tab_groups::TabGroupId& group) {
   ReentrancyCheck reentrancy_check(&reentrancy_guard_);
 
-  if (!group_model_)
+  DCHECK(group_model_);
+  if (!group_model_) {
     return;
+  }
 
   const bool group_exists = group_model_->ContainsTabGroup(group);
-  if (group_exists)
+  if (group_exists) {
     AddToExistingGroupImpl(indices, group);
-  else
+  } else {
     AddToNewGroupImpl(indices, group);
+  }
 }
 
 void TabStripModel::RemoveFromGroup(const std::vector<int>& indices) {
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views.cc b/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
index 853e853..4ff7fd1 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
+++ b/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
@@ -105,6 +105,8 @@
 // TODO(crbug.com/41382463): move handling the max width to the base class.
 constexpr int kAutofillPopupMaxWidth = 456;
 
+constexpr int kMaxPopupWithSearchBarHeight = 400;
+
 // Preferred position relative to the control sides of the sub-popup.
 constexpr std::array<views::BubbleArrowSide, 2> kDefaultSubPopupSides = {
     views::BubbleArrowSide::kLeft, views::BubbleArrowSide::kRight};
@@ -1167,6 +1169,13 @@
     size.set_width(kAutofillPopupMaxWidth);
   }
 
+  // This popup height limiting for popups with a search bar addresses a minor
+  // UX concern when a potentially long list makes the search bar appear far
+  // away from the field and thus less obvious what the search bar belongs to.
+  if (search_bar_) {
+    size.set_height(std::min(kMaxPopupWithSearchBarHeight, size.height()));
+  }
+
   return size;
 }
 
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc b/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc
index 16825ee..db24497 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc
+++ b/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc
@@ -480,6 +480,15 @@
 }
 
 IN_PROC_BROWSER_TEST_P(PopupViewViewsBrowsertest,
+                       PopupHeightIsLimitedWithSearchBarView) {
+  controller().set_suggestions({100, SuggestionType::kAddressEntry});
+  ShowAndVerifyUi(
+      /*popup_has_parent=*/false,
+      AutofillPopupView::SearchBarConfig{.placeholder = u"Search",
+                                         .no_results_message = u""});
+}
+
+IN_PROC_BROWSER_TEST_P(PopupViewViewsBrowsertest,
                        SearchBarViewNoSuggestionsFound) {
   // This set imitates empty search result, it contains footer suggestions only.
   controller().set_suggestions(
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index b8d8e45..8c47927 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -1488,7 +1488,8 @@
   // Also re-enabled when the model is loaded.
   managed_bookmarks_button_->SetEnabled(false);
 
-  if (chrome::IsSavedTabGroupsEnabled(browser_->profile())) {
+  if (tab_groups::SavedTabGroupUtils::IsEnabledForProfile(
+          browser_->profile())) {
     saved_tab_group_bar_ =
         AddChildView(std::make_unique<tab_groups::SavedTabGroupBar>(
             browser_, animations_enabled));
@@ -2080,7 +2081,8 @@
   // Incognito browsers also get triggered if the associated regular profile
   // browser is triggered. Early return because incognito has no
   // `saved_tab_group_bar_`.
-  if (!chrome::IsSavedTabGroupsEnabled(browser_->profile())) {
+  if (!tab_groups::SavedTabGroupUtils::IsEnabledForProfile(
+          browser_->profile())) {
     return;
   }
 
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
index 902c4824..086b417 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
@@ -134,6 +134,10 @@
     return all_bookmarks_button_;
   }
 
+  const tab_groups::SavedTabGroupBar* saved_tab_group_bar() const {
+    return saved_tab_group_bar_;
+  }
+
   // Returns the button used when not all the items on the bookmark bar fit.
   views::MenuButton* overflow_button() const { return overflow_button_; }
 
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc
index e1ab8513..2a8445ba 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc
@@ -197,11 +197,8 @@
     : tab_group_service_(tab_group_service),
       browser_(browser),
       animations_enabled_(animations_enabled),
-      v2_ui_enabled_(tab_groups::IsTabGroupsSaveUIUpdateEnabled()) {
-  // When the #tab-groups-saved feature flag is turned on and profile is
-  // regular, `SavedTabGroupBar` is instantiated. If the #tab-groups-saved
-  // feature flag is turned off, there is no SavedTabGroupModel.
-  DCHECK(browser_->profile()->IsRegularProfile());
+      ui_update_enabled_(IsTabGroupsSaveUIUpdateEnabled()) {
+  DCHECK(browser_);
   DCHECK(tab_group_service);
   GetViewAccessibility().SetRole(ax::mojom::Role::kToolbar);
   GetViewAccessibility().SetName(
@@ -270,7 +267,7 @@
 }
 
 void SavedTabGroupBar::ShowEverythingMenu() {
-  CHECK(IsTabGroupsSaveUIUpdateEnabled());
+  CHECK(ui_update_enabled_);
   base::RecordAction(base::UserMetricsAction(
       "TabGroups_SavedTabGroups_EverythingButtonPressed"));
   if (everything_menu_ && everything_menu_->IsShowing()) {
@@ -429,7 +426,7 @@
 
   // Since v2 do not support dragging tab group into overflow menu, we only need
   // to show the menu for v1;
-  if (!tab_groups::IsTabGroupsSaveUIUpdateEnabled()) {
+  if (!ui_update_enabled_) {
     const bool dragging_over_button =
         overflow_button_->GetVisible() &&
         mirrored_x >= overflow_button_->bounds().x();
@@ -478,7 +475,7 @@
 
 void SavedTabGroupBar::SavedTabGroupLocalIdChanged(
     const base::Uuid& saved_group_id) {
-  SavedTabGroupUpdated(saved_group_id);
+  UpsertSavedTabGroupButton(saved_group_id);
 
   MaybeShowClosePromo(saved_group_id);
 }
@@ -486,7 +483,7 @@
 void SavedTabGroupBar::SavedTabGroupUpdatedLocally(
     const base::Uuid& group_guid,
     const std::optional<base::Uuid>& tab_guid) {
-  SavedTabGroupUpdated(group_guid);
+  UpsertSavedTabGroupButton(group_guid);
 }
 
 void SavedTabGroupBar::SavedTabGroupReorderedLocally() {
@@ -500,11 +497,11 @@
 void SavedTabGroupBar::SavedTabGroupTabMovedLocally(
     const base::Uuid& group_guid,
     const base::Uuid& tab_guid) {
-  SavedTabGroupUpdated(group_guid);
+  UpsertSavedTabGroupButton(group_guid);
 }
 
 void SavedTabGroupBar::SavedTabGroupAddedFromSync(const base::Uuid& guid) {
-  SavedTabGroupAdded(guid);
+  UpsertSavedTabGroupButton(guid);
 }
 
 void SavedTabGroupBar::SavedTabGroupRemovedFromSync(
@@ -515,7 +512,7 @@
 void SavedTabGroupBar::SavedTabGroupUpdatedFromSync(
     const base::Uuid& group_guid,
     const std::optional<base::Uuid>& tab_guid) {
-  SavedTabGroupUpdated(group_guid);
+  UpsertSavedTabGroupButton(group_guid);
 }
 
 void SavedTabGroupBar::OnInitialized() {
@@ -527,18 +524,18 @@
 
 void SavedTabGroupBar::OnTabGroupAdded(const SavedTabGroup& group,
                                        TriggerSource source) {
-  SavedTabGroupAdded(group.saved_guid());
+  UpsertSavedTabGroupButton(group.saved_guid());
 }
 
 void SavedTabGroupBar::OnTabGroupUpdated(const SavedTabGroup& group,
                                          TriggerSource source) {
-  SavedTabGroupUpdated(group.saved_guid());
+  UpsertSavedTabGroupButton(group.saved_guid());
 }
 
 void SavedTabGroupBar::OnTabGroupLocalIdChanged(
     const base::Uuid& sync_id,
     const std::optional<LocalTabGroupID>& local_id) {
-  SavedTabGroupUpdated(sync_id);
+  UpsertSavedTabGroupButton(sync_id);
   MaybeShowClosePromo(sync_id);
 }
 
@@ -573,7 +570,7 @@
   const int overflow_button_width =
       overflow_button_->GetPreferredSize().width() + kBetweenElementSpacing;
 
-  if (IsTabGroupsSaveUIUpdateEnabled()) {
+  if (ui_update_enabled_) {
     if (stg_bar_width == 0) {
       return;
     } else {
@@ -590,7 +587,7 @@
 
 int SavedTabGroupBar::V2CalculatePreferredWidthRestrictedBy(
     int max_width) const {
-  DCHECK(IsTabGroupsSaveUIUpdateEnabled());
+  DCHECK(ui_update_enabled_);
 
   // For V2, the preferred width of Saved tab groups bar depends on the number
   // of pinned tab groups (pinned state is WIP) in bookmark bar (plus Everything
@@ -616,7 +613,7 @@
 }
 
 int SavedTabGroupBar::CalculatePreferredWidthRestrictedBy(int max_width) const {
-  if (IsTabGroupsSaveUIUpdateEnabled()) {
+  if (ui_update_enabled_) {
     return V2CalculatePreferredWidthRestrictedBy(max_width);
   }
 
@@ -657,30 +654,27 @@
 void SavedTabGroupBar::AddTabGroupButton(const SavedTabGroup& group,
                                          int index) {
   // Do not add unpinned tab group for v2.
-  if (v2_ui_enabled_ && !group.is_pinned()) {
+  if (ui_update_enabled_ && !group.is_pinned()) {
     return;
   }
 
   // Check that the index is valid for buttons
   DCHECK_LE(index, static_cast<int>(children().size()));
 
-  AddChildViewAt(
+  views::View* view = AddChildViewAt(
       std::make_unique<SavedTabGroupButton>(
           group,
           base::BindRepeating(&SavedTabGroupBar::OnTabGroupButtonPressed,
                               base::Unretained(this), group.saved_guid()),
           browser_, animations_enabled_),
       index);
+  if (group.saved_tabs().size() == 0) {
+    view->SetVisible(false);
+  }
 }
 
 void SavedTabGroupBar::SavedTabGroupAdded(const base::Uuid& guid) {
-  std::optional<int> index = GetIndexOfGroup(guid);
-  if (!index.has_value()) {
-    return;
-  }
-  AddTabGroupButton(tab_group_service_->GetGroup(guid).value(), index.value());
-
-  InvalidateLayout();
+  UpsertSavedTabGroupButton(guid);
 }
 
 void SavedTabGroupBar::SavedTabGroupRemoved(const base::Uuid& guid) {
@@ -689,32 +683,27 @@
   InvalidateLayout();
 }
 
-void SavedTabGroupBar::SavedTabGroupUpdated(const base::Uuid& guid) {
+void SavedTabGroupBar::UpsertSavedTabGroupButton(const base::Uuid& guid) {
   std::optional<int> index = GetIndexOfGroup(guid);
   if (!index.has_value()) {
     return;
   }
 
   const std::optional<SavedTabGroup> group = tab_group_service_->GetGroup(guid);
-  CHECK(group);
+  CHECK(group.has_value());
   SavedTabGroupButton* button =
       views::AsViewClass<SavedTabGroupButton>(GetButton(group->saved_guid()));
 
-  // In v2, update can trigger by pin/unpin. Add TabGroupButton for a pin tab
-  // group if not present. Remove TabGroupButton for an unpinned tab group if
-  // present.
-  if (v2_ui_enabled_) {
-    if (!button && !group->is_pinned()) {
-      return;
-    } else if (!button && group->is_pinned()) {
-      AddTabGroupButton(*group, 0);
-    } else if (button && !group->is_pinned()) {
-      RemoveChildViewT(button);
-    } else {
-      button->UpdateButtonData(*group);
-    }
-  } else if (button) {
-    button->UpdateButtonData(*group);
+  bool currently_has_a_button = button != nullptr;
+  bool should_have_a_button = (!ui_update_enabled_ || group->is_pinned()) &&
+                              !group->saved_tabs().empty();
+
+  if (currently_has_a_button && should_have_a_button) {
+    button->UpdateButtonData(group.value());
+  } else if (!currently_has_a_button && should_have_a_button) {
+    AddTabGroupButton(group.value(), ui_update_enabled_ ? 0 : index.value());
+  } else if (currently_has_a_button && !should_have_a_button) {
+    RemoveChildViewT(button);
   }
 
   InvalidateLayout();
@@ -782,8 +771,7 @@
 
 void SavedTabGroupBar::OnTabGroupButtonPressed(const base::Uuid& id,
                                                const ui::Event& event) {
-  DCHECK(tab_group_service_.get() &&
-         tab_group_service_->GetGroup(id).has_value());
+  DCHECK(tab_group_service_ && tab_group_service_->GetGroup(id).has_value());
   const std::optional<SavedTabGroup> group = tab_group_service_->GetGroup(id);
 
   if (group->saved_tabs().empty()) {
@@ -796,13 +784,7 @@
   bool left_mouse_button_pressed = event.flags() & ui::EF_LEFT_MOUSE_BUTTON;
 
   if (left_mouse_button_pressed || space_pressed) {
-    // Manually retrieve the service since this function is used as a
-    // callback which means this code could be run asynchronously.
-    tab_groups::TabGroupSyncService* tab_group_service =
-        tab_groups::SavedTabGroupUtils::GetServiceForProfile(
-            browser_->profile());
-
-    tab_group_service->OpenTabGroup(
+    tab_group_service_->OpenTabGroup(
         group->saved_guid(),
         std::make_unique<TabGroupActionContextDesktop>(
             browser_, OpeningSource::kOpenedFromRevisitUi));
@@ -811,11 +793,10 @@
 
 std::unique_ptr<SavedTabGroupOverflowButton>
 SavedTabGroupBar::CreateOverflowButton() {
-  return std::make_unique<SavedTabGroupOverflowButton>(
-      base::BindRepeating(IsTabGroupsSaveUIUpdateEnabled()
-                              ? &SavedTabGroupBar::ShowEverythingMenu
-                              : &SavedTabGroupBar::MaybeShowOverflowMenu,
-                          base::Unretained(this)));
+  return std::make_unique<SavedTabGroupOverflowButton>(base::BindRepeating(
+      ui_update_enabled_ ? &SavedTabGroupBar::ShowEverythingMenu
+                         : &SavedTabGroupBar::MaybeShowOverflowMenu,
+      base::Unretained(this)));
 }
 
 void SavedTabGroupBar::MaybeShowOverflowMenu() {
@@ -938,7 +919,7 @@
     int max_width) const {
   // kMaxVisibleButtons does not apply to v2.
   const int buttons_to_consider =
-      v2_ui_enabled_
+      ui_update_enabled_
           ? children().size() - 1
           : std::min(children().size() - 1, size_t(kMaxVisibleButtons));
   int current_width = 0;
@@ -1042,7 +1023,7 @@
   }
 
   // Do not show close promo while the browser is closing
-  if (browser_->IsBrowserClosing()) {
+  if (!browser_ || browser_->IsBrowserClosing()) {
     return;
   }
 
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h
index 5e47b79..bd3ca8e2 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h
@@ -124,6 +124,10 @@
 
   bool IsOverflowButtonVisible();
 
+  // Returns the number of currently visible groups. Does not include the
+  // overflow button or button housed in its view.
+  int GetNumberOfVisibleGroups() const;
+
  private:
   // Overrides the View methods needed to be a drop target for saved tab groups.
   class OverflowMenu;
@@ -136,9 +140,9 @@
   // `SavedTabGroupBar`.
   void SavedTabGroupRemoved(const base::Uuid& guid);
 
-  // Updates the button (color, name, tab list) denoted by `guid` in the
-  // `SavedTabGroupBar` if the `guid` exists in `saved_tab_group_model_`.
-  void SavedTabGroupUpdated(const base::Uuid& guid);
+  // Updates (adds/updates/removes) the button denoted by `guid` when calling
+  // add/update methods.
+  void UpsertSavedTabGroupButton(const base::Uuid& guid);
 
   // Reorders all groups in the bookmarks to match the state of
   // `saved_tab_group_model_`.
@@ -190,10 +194,6 @@
   void HideOverflowButton();
   void ShowOverflowButton();
 
-  // Returns the number of currently visible groups. Does not include the
-  // overflow button or button housed in its view.
-  int GetNumberOfVisibleGroups() const;
-
   // Updates the visibilites of all buttons up to `last_index_visible`. The
   // overflow button will be displayed based on `should_show_overflow`.
   void UpdateButtonVisibilities(bool should_show_overflow,
@@ -267,8 +267,8 @@
   // animate or not.
   const bool animations_enabled_ = true;
 
-  // Whether the kTabGroupsSaveUIUpdate flag is enabled.
-  const bool v2_ui_enabled_;
+  // Determines if we should use the updated SavedTabGroups UI.
+  const bool ui_update_enabled_;
 
   // Returns WeakPtrs used in GetPageNavigatorGetter(). Used to ensure
   // safety if BookmarkBarView is deleted after getting the callback.
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc
index babc1a62..186e195b 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc
@@ -8,6 +8,7 @@
 
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/uuid.h"
 #include "chrome/browser/favicon/favicon_utils.h"
 #include "chrome/browser/tab_group_sync/tab_group_sync_service_factory.h"
 #include "chrome/browser/ui/bookmarks/bookmark_utils_desktop.h"
@@ -15,8 +16,10 @@
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_service_factory.h"
+#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/tab_group_action_context_desktop.h"
 #include "chrome/browser/ui/tabs/tab_group_model.h"
+#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/saved_tab_groups/features.h"
@@ -24,7 +27,9 @@
 #include "components/saved_tab_groups/saved_tab_group_model.h"
 #include "components/saved_tab_groups/saved_tab_group_tab.h"
 #include "components/saved_tab_groups/tab_group_sync_service.h"
+#include "components/saved_tab_groups/tab_group_sync_service_impl.h"
 #include "components/saved_tab_groups/types.h"
+#include "components/tab_groups/tab_group_color.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -38,7 +43,7 @@
     if (GetParam()) {
       features_.InitWithFeatures(
           {tab_groups::kTabGroupSyncServiceDesktopMigration,
-           tab_groups::kTabGroupsSaveV2},
+           tab_groups::kTabGroupsSaveUIUpdate, tab_groups::kTabGroupsSaveV2},
           {});
     } else {
       features_.InitWithFeatures(
@@ -47,15 +52,36 @@
     }
   }
 
+  bool IsV2UIMigrationEnabled() const { return GetParam(); }
+
  private:
   base::test::ScopedFeatureList features_;
 };
 
+struct ScopedAddObservation : public TabGroupSyncService::Observer {
+  explicit ScopedAddObservation(TabGroupSyncService* service_)
+      : service(service_) {
+    service->AddObserver(this);
+  }
+
+  ~ScopedAddObservation() override { service->RemoveObserver(this); }
+
+  void OnTabGroupAdded(const SavedTabGroup& group,
+                       TriggerSource source) override {
+    last_group_tab_count = group.saved_tabs().size();
+    last_trigger_source = source;
+  }
+
+  std::optional<int> last_group_tab_count = std::nullopt;
+  std::optional<TriggerSource> last_trigger_source = std::nullopt;
+  raw_ptr<TabGroupSyncService> service;
+};
+
 // Verifies that a saved group can be only be opened in the tabstrip once. If
 // it is already open, we will find that group and focus it.
 IN_PROC_BROWSER_TEST_P(SavedTabGroupBarBrowserTest,
                        ValidGroupIsOpenedInTabstripOnce) {
-  if (GetParam()) {
+  if (IsV2UIMigrationEnabled()) {
     TabGroupSyncService* service =
         TabGroupSyncServiceFactory::GetForProfile(browser()->profile());
     TabStripModel* model = browser()->tab_strip_model();
@@ -120,7 +146,7 @@
 
 IN_PROC_BROWSER_TEST_P(SavedTabGroupBarBrowserTest,
                        DeletedSavedTabGroupDoesNotOpen) {
-  if (GetParam()) {
+  if (IsV2UIMigrationEnabled()) {
     TabGroupSyncService* service =
         TabGroupSyncServiceFactory::GetForProfile(browser()->profile());
     TabStripModel* model = browser()->tab_strip_model();
@@ -186,6 +212,147 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_P(SavedTabGroupBarBrowserTest,
+                       SavedTabGroupLoadStoredEntriesV1) {
+  if (IsV2UIMigrationEnabled()) {
+    GTEST_SKIP() << "N/A for V2";
+  }
+
+  ASSERT_TRUE(SavedTabGroupUtils::IsEnabledForProfile(browser()->profile()));
+  const SavedTabGroupBar* saved_tab_group_bar =
+      BrowserView::GetBrowserViewForBrowser(browser())
+          ->bookmark_bar()
+          ->saved_tab_group_bar();
+  EXPECT_EQ(0, saved_tab_group_bar->GetNumberOfVisibleGroups());
+
+  {  // Create 1 pinned group
+    base::Uuid group_guid = base::Uuid::GenerateRandomV4();
+    SavedTabGroup group{
+        u"group_title", TabGroupColorId::kGrey, {}, 0, group_guid};
+    SavedTabGroupTab tab{GURL("https://www.zombo.com"), u"tab_title",
+                         group_guid, 0};
+
+    SavedTabGroupKeyedService* old_service =
+        SavedTabGroupServiceFactory::GetForProfile(browser()->profile());
+    SavedTabGroupModel* model = old_service->model();
+    model->LoadStoredEntries({std::move(group)}, {std::move(tab)});
+  }
+
+  EXPECT_EQ(1, saved_tab_group_bar->GetNumberOfVisibleGroups());
+}
+
+IN_PROC_BROWSER_TEST_P(SavedTabGroupBarBrowserTest,
+                       SavedTabGroupLoadStoredEntriesV2) {
+  if (!IsV2UIMigrationEnabled()) {
+    GTEST_SKIP() << "N/A for V1";
+  }
+  ASSERT_TRUE(SavedTabGroupUtils::IsEnabledForProfile(browser()->profile()));
+  TabGroupSyncService* service =
+      SavedTabGroupUtils::GetServiceForProfile(browser()->profile());
+
+  {  // Create 1 pinned group
+    ScopedAddObservation observer(service);
+    base::Uuid group_guid = base::Uuid::GenerateRandomV4();
+    SavedTabGroup group{
+        u"group_title", TabGroupColorId::kGrey, {}, 0, group_guid};
+    SavedTabGroupTab tab{GURL("https://www.zombo.com"), u"tab_title",
+                         group_guid, 0};
+
+    TabGroupSyncServiceImpl* service_impl =
+        static_cast<TabGroupSyncServiceImpl*>(service);
+    SavedTabGroupModel* model = service_impl->GetModelForTesting();
+    model->LoadStoredEntries({std::move(group)}, {std::move(tab)});
+
+    // Expect that a remote group was created.
+    EXPECT_NE(0, observer.last_group_tab_count);
+    EXPECT_EQ(TriggerSource::REMOTE, observer.last_trigger_source);
+  }
+
+  {  // Create one unpinned group.
+    ScopedAddObservation observer(service);
+    base::Uuid group_guid = base::Uuid::GenerateRandomV4();
+    SavedTabGroup group{
+        u"group_title", TabGroupColorId::kGrey, {}, std::nullopt, group_guid};
+    SavedTabGroupTab tab{GURL("https://www.zombo.com"), u"tab_title",
+                         group_guid, 0};
+
+    TabGroupSyncServiceImpl* service_impl =
+        static_cast<TabGroupSyncServiceImpl*>(service);
+    SavedTabGroupModel* model = service_impl->GetModelForTesting();
+    model->AddedFromSync({std::move(group)});
+    model->AddTabToGroupFromSync(group_guid, {std::move(tab)});
+
+    // Expect that a remote group was created.
+    EXPECT_NE(0, observer.last_group_tab_count);
+    EXPECT_EQ(TriggerSource::REMOTE, observer.last_trigger_source);
+  }
+
+  const SavedTabGroupBar* saved_tab_group_bar =
+      BrowserView::GetBrowserViewForBrowser(browser())
+          ->bookmark_bar()
+          ->saved_tab_group_bar();
+  EXPECT_EQ(1, saved_tab_group_bar->GetNumberOfVisibleGroups());
+}
+
+IN_PROC_BROWSER_TEST_P(SavedTabGroupBarBrowserTest,
+                       EmptySavedTabGroupDoesntDisplayV1) {
+  if (IsV2UIMigrationEnabled()) {
+    GTEST_SKIP() << "N/A for V2";
+  }
+
+  ASSERT_TRUE(SavedTabGroupUtils::IsEnabledForProfile(browser()->profile()));
+  const SavedTabGroupBar* saved_tab_group_bar =
+      BrowserView::GetBrowserViewForBrowser(browser())
+          ->bookmark_bar()
+          ->saved_tab_group_bar();
+  EXPECT_EQ(0, saved_tab_group_bar->GetNumberOfVisibleGroups());
+
+  {  // Create an empty group.
+    base::Uuid group_guid = base::Uuid::GenerateRandomV4();
+    SavedTabGroup group{
+        u"group_title", TabGroupColorId::kGrey, {}, 0, group_guid};
+
+    SavedTabGroupKeyedService* old_service =
+        SavedTabGroupServiceFactory::GetForProfile(browser()->profile());
+    SavedTabGroupModel* model = old_service->model();
+    model->LoadStoredEntries({std::move(group)}, {});
+  }
+
+  EXPECT_EQ(0, saved_tab_group_bar->GetNumberOfVisibleGroups());
+}
+
+IN_PROC_BROWSER_TEST_P(SavedTabGroupBarBrowserTest,
+                       EmptySavedTabGroupDoesntDisplayV2) {
+  if (!IsV2UIMigrationEnabled()) {
+    GTEST_SKIP() << "N/A for V1";
+  }
+  ASSERT_TRUE(SavedTabGroupUtils::IsEnabledForProfile(browser()->profile()));
+  TabGroupSyncService* service =
+      SavedTabGroupUtils::GetServiceForProfile(browser()->profile());
+
+  {  // Create an empty group.
+    ScopedAddObservation observer(service);
+    base::Uuid group_guid = base::Uuid::GenerateRandomV4();
+    SavedTabGroup group{
+        u"group_title", TabGroupColorId::kGrey, {}, 0, group_guid};
+
+    TabGroupSyncServiceImpl* service_impl =
+        static_cast<TabGroupSyncServiceImpl*>(service);
+    SavedTabGroupModel* model = service_impl->GetModelForTesting();
+    model->LoadStoredEntries({std::move(group)}, {});
+
+    // Expect that a remote group was created.
+    EXPECT_EQ(std::nullopt, observer.last_group_tab_count);
+    EXPECT_EQ(std::nullopt, observer.last_trigger_source);
+  }
+
+  const SavedTabGroupBar* saved_tab_group_bar =
+      BrowserView::GetBrowserViewForBrowser(browser())
+          ->bookmark_bar()
+          ->saved_tab_group_bar();
+  EXPECT_EQ(0, saved_tab_group_bar->GetNumberOfVisibleGroups());
+}
+
 INSTANTIATE_TEST_SUITE_P(SavedTabGroupBar,
                          SavedTabGroupBarBrowserTest,
                          testing::Bool());
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_unittest.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_unittest.cc
index 598ed49f..c0feb84 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_unittest.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_unittest.cc
@@ -790,6 +790,24 @@
             data.GetString16Attribute(ax::mojom::StringAttribute::kName));
 }
 
+TEST_P(SavedTabGroupBarUnitTest, GroupWithNoTabsDoesntShow) {
+  if (!IsV2UIEnabled()) {
+    GTEST_SKIP() << "N/A for V1";
+  }
+
+  EXPECT_EQ(1u, saved_tab_group_bar()->children().size());
+
+  SavedTabGroup empty_pinned_group(u"Test Title",
+                                   tab_groups::TabGroupColorId::kBlue, {});
+  // position must be set or the update time will be overridden during model
+  // save.
+  empty_pinned_group.SetPosition(0);
+
+  service()->AddGroup(std::move(empty_pinned_group));
+
+  EXPECT_EQ(1u, saved_tab_group_bar()->children().size());
+}
+
 INSTANTIATE_TEST_SUITE_P(SavedTabGroupBar,
                          SavedTabGroupBarUnitTest,
                          testing::Bool());
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.cc
index a3974f931..ba996436 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.cc
@@ -68,14 +68,19 @@
 
 base::Uuid STGEverythingMenu::GetTabGroupIdFromCommandId(int command_id) {
   const int idx_in_sorted_tab_group = (command_id - kMinCommandId) / kGap;
-  return sorted_tab_groups_.at(idx_in_sorted_tab_group);
+  return sorted_non_empty_tab_groups_.at(idx_in_sorted_tab_group);
 }
 
-std::vector<base::Uuid> STGEverythingMenu::GetSortedTabGroupsByCreationTime(
+std::vector<base::Uuid>
+STGEverythingMenu::GetGroupsForDisplaySortedByCreationTime(
     TabGroupSyncService* tab_group_service) {
   CHECK(tab_group_service);
   std::vector<base::Uuid> sorted_tab_groups;
   for (const SavedTabGroup& group : tab_group_service->GetAllGroups()) {
+    if (group.saved_tabs().empty()) {
+      continue;
+    }
+
     sorted_tab_groups.push_back(group.saved_guid());
   }
   auto compare_by_creation_time = [=](const base::Uuid& a,
@@ -115,11 +120,13 @@
     menu_model->AddSeparator(ui::NORMAL_SEPARATOR);
   }
 
-  sorted_tab_groups_ = GetSortedTabGroupsByCreationTime(tab_group_service);
+  sorted_non_empty_tab_groups_ =
+      GetGroupsForDisplaySortedByCreationTime(tab_group_service);
+
   const auto* const color_provider = browser_->window()->GetColorProvider();
-  for (size_t i = 0; i < sorted_tab_groups_.size(); ++i) {
+  for (size_t i = 0; i < sorted_non_empty_tab_groups_.size(); ++i) {
     const std::optional<SavedTabGroup> tab_group =
-        tab_group_service->GetGroup(sorted_tab_groups_[i]);
+        tab_group_service->GetGroup(sorted_non_empty_tab_groups_[i]);
     // In case any tab group gets deleted while creating the model.
     if (!tab_group) {
       continue;
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.h b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.h
index 9615b39..a3e7f79 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.h
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_everything_menu.h
@@ -97,8 +97,8 @@
   std::unique_ptr<ui::SimpleMenuModel> CreateMenuModel();
 
   // Returns sorted saved tab groups with the most recently created as the
-  // first.
-  std::vector<base::Uuid> GetSortedTabGroupsByCreationTime(
+  // first, filtering out empty groups.
+  std::vector<base::Uuid> GetGroupsForDisplaySortedByCreationTime(
       TabGroupSyncService* wrapper_service);
 
   // Because all the menu items (i.e. tab group items in the Everything menu -
@@ -129,8 +129,9 @@
   // submenu. That's why you have 112 as the first action's id.
   int GetAndIncrementLatestCommandId();
 
-  // Saved tab groups with the most recently created as the first.
-  std::vector<base::Uuid> sorted_tab_groups_;
+  // Saved tab groups with the most recently created as the first, and filtered
+  // by their empty status.
+  std::vector<base::Uuid> sorted_non_empty_tab_groups_;
 
   // Owned by the Everything button.
   raw_ptr<views::MenuButtonController> menu_button_controller_;
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_interactive_uitest.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_interactive_uitest.cc
index e1d9506..4d9fd92 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_interactive_uitest.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_interactive_uitest.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 <optional>
+
 #include "base/test/bind.h"
 #include "base/test/gtest_util.h"
 #include "base/test/scoped_feature_list.h"
@@ -166,6 +168,23 @@
     });
   }
 
+  StepBuilder CreateEmptySavedGroup() {
+    return Do([=, this]() {
+      TabGroupSyncService* service =
+          SavedTabGroupUtils::GetServiceForProfile(browser()->profile());
+      service->AddGroup({u"Test Test",
+                         tab_groups::TabGroupColorId::kBlue,
+                         {},
+                         /*position=*/std::nullopt,
+                         base::Uuid::GenerateRandomV4(),
+                         /*local_group_id=*/std::nullopt,
+                         /*creator_cache_guid=*/std::nullopt,
+                         /*last_updater_cache_guid=*/std::nullopt,
+                         /*created_before_syncing_tab_groups=*/false,
+                         /*creation_time_windows_epoch_micros=*/std::nullopt});
+    });
+  }
+
   StepBuilder UnsaveGroupViaModel(const tab_groups::TabGroupId local_group) {
     return Do([=, this]() {
       service()->RemoveGroup(local_group);
@@ -1085,6 +1104,43 @@
       EnsureNotPresent(kSavedTabGroupOverflowMenuId));
 }
 
+IN_PROC_BROWSER_TEST_P(SavedTabGroupInteractiveTest,
+                       EverythingMenuDoesntDisplayEmptyGroups) {
+  // The everything menu is only enabled in V2.
+  if (!IsV2UIEnabled()) {
+    GTEST_SKIP() << "N/A for V1";
+  }
+
+  RunTestSequence(
+      // Create an empty group
+      FinishTabstripAnimations(), ShowBookmarksBar(), CreateEmptySavedGroup(),
+      // Open the everything menu and expect the group to not show up.
+      CheckEverythingButtonVisibility(IsV2UIEnabled()),
+      PressButton(kSavedTabGroupOverflowButtonElementId),
+      WaitForShow(STGEverythingMenu::kCreateNewTabGroup),
+      EnsureNotPresent(STGEverythingMenu::kTabGroup));
+}
+
+IN_PROC_BROWSER_TEST_P(SavedTabGroupInteractiveTest,
+                       AppMenuDoesntDisplayEmptyGroups) {
+  // The everything menu is only enabled in V2.
+  if (!IsV2UIEnabled()) {
+    GTEST_SKIP() << "N/A for V1";
+  }
+
+  RunTestSequence(
+      // Create an empty group
+      FinishTabstripAnimations(), ShowBookmarksBar(), CreateEmptySavedGroup(),
+      // Open the app menu tab group menu.
+      PressButton(kToolbarAppMenuButtonElementId),
+
+      WaitForShow(AppMenuModel::kTabGroupsMenuItem),
+      SelectMenuItem(AppMenuModel::kTabGroupsMenuItem),
+      WaitForShow(STGEverythingMenu::kCreateNewTabGroup),
+      // Expect the group to not be displayed.
+      EnsureNotPresent(STGEverythingMenu::kTabGroup));
+}
+
 INSTANTIATE_TEST_SUITE_P(SavedTabGroupBar,
                          SavedTabGroupInteractiveTest,
                          testing::Bool());
diff --git a/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc b/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
index 5881ffe..827d2ce 100644
--- a/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
+++ b/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
@@ -71,6 +71,10 @@
 
 DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kTabId);
 DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kTabBId);
+DEFINE_LOCAL_STATE_IDENTIFIER_VALUE(ui::test::PollingStateObserver<bool>,
+                                    kTextCopiedState);
+const ui::Accelerator ctrl_c_accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN);
+const ui::Accelerator ctrl_v_accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN);
 }  // namespace
 
 struct FindResultState {
@@ -685,60 +689,54 @@
 }
 #endif
 
-// Flaky on Win. http://crbug.com/92467
-// Flaky on ChromeOS. http://crbug.com/118216
-// Flaky on linux aura. http://crbug.com/163931
-IN_PROC_BROWSER_TEST_F(LegacyFindInPageTest, DISABLED_PasteWithoutTextChange) {
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  // Make sure Chrome is in the foreground, otherwise sending input
-  // won't do anything and the test will hang.
-  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
-
-  // First we navigate to any page.
-  GURL url = embedded_test_server()->GetURL(kSimplePage);
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-
-  // Show the Find bar.
-  browser()->GetFindBarController()->Show();
-
-  EXPECT_TRUE(IsViewFocused(browser(), VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
-
-  // Search for "a".
-  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
-      browser(), ui::VKEY_A, false, false, false, false));
-
-  // We should find "a" here.
-  EXPECT_EQ(u"a", GetFindBarText());
-
-  // Reload the page to clear the matching result.
-  chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB);
-
-  // Focus the Find bar again to make sure the text is selected.
-  browser()->GetFindBarController()->Show();
-
-  EXPECT_TRUE(IsViewFocused(browser(), VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
-
-  // "a" should be selected.
-  EXPECT_EQ(u"a", GetFindBarSelectedText());
-
-  // Press Ctrl-C to copy the content.
-  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
-      browser(), ui::VKEY_C, true, false, false, false));
-
-  std::u16string str;
-  ui::Clipboard::GetForCurrentThread()->ReadText(
-      ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr, &str);
-
-  // Make sure the text is copied successfully.
-  EXPECT_EQ(u"a", str);
-
-  // Press Ctrl-V to paste the content back, it should start finding even if the
-  // content is not changed.
-  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
-      browser(), ui::VKEY_V, true, false, false, false));
-  find_in_page::FindNotificationDetails details = WaitForFindResult();
-  EXPECT_TRUE(details.number_of_matches() > 0);
+IN_PROC_BROWSER_TEST_F(FindBarViewsUiTest, PasteWithoutTextChange) {
+  constexpr char16_t kSearchA[] = u"a";
+  const GURL page_a = embedded_test_server()->GetURL("/a.html");
+  RunTestSequence(
+      ObserveState(kFindResultState,
+                   [this]() {
+                     return find_in_page::FindTabHelper::FromWebContents(
+                         browser()->tab_strip_model()->GetActiveWebContents());
+                   }),
+      // Load page + open find bar.
+      Init(page_a), ShowFindBar(),
+      WaitForState(views::test::kCurrentFocusedViewId, FindBarView::kTextField),
+      // Search for "a".
+      EnterText(FindBarView::kTextField, kSearchA),
+      // We should find "a" here.
+      CheckViewProperty(FindBarView::kElementId, &FindBarView::GetFindText,
+                        kSearchA),
+      // Reload the page to clear the matching result.
+      PressButton(kReloadButtonElementId), WaitForWebContentsNavigation(kTabId),
+      WaitForState(views::test::kCurrentFocusedViewId,
+                   ContentsWebView::kContentsWebViewElementId),
+      // Focus the Find bar again to make sure the text is selected.
+      ShowFindBar(),
+      WaitForState(views::test::kCurrentFocusedViewId, FindBarView::kTextField),
+      // "a" should be selected.
+      CheckViewProperty(FindBarView::kElementId, &FindBarView::GetFindText,
+                        kSearchA),
+      // Press Ctrl-C to copy the content.
+      SendAccelerator(kTabId, ctrl_c_accelerator),
+      // Make sure the text is copied successfully.
+      PollState(
+          kTextCopiedState,
+          [&]() {
+            ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
+            std::u16string clipboard_text;
+            clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste,
+                                /* data_dst = */ nullptr, &clipboard_text);
+            return base::EqualsASCII(clipboard_text, "a");
+          }),
+      WaitForState(kTextCopiedState, true),
+      // Press Ctrl-V to paste the content back, it should start finding even if
+      // the content is not changed.
+      SendAccelerator(kTabId, ctrl_v_accelerator),
+      WaitForState(
+          kFindResultState,
+          testing::Field(
+              &FindResultState::active_match_ordinal,
+              testing::Ne(FindResultState::kInitialActiveMatchOrdinalCount))));
 }
 
 // Slow flakiness on Linux. crbug.com/803743
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
index 8af8749..f00309a 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -1148,8 +1148,10 @@
       public testing::WithParamInterface<bool> {
  public:
   PageInfoBubbleViewCookies3pcdButtonTest() {
-    feature_list_.InitAndEnableFeature(
-        content_settings::features::kTrackingProtection3pcd);
+    feature_list_.InitWithFeatures(
+        {content_settings::features::kTrackingProtection3pcd,
+         privacy_sandbox::kTrackingProtection3pcdUx},
+        {});
     web_contents_helper_ =
         std::make_unique<ScopedWebContentsTestHelper>(GetParam());
   }
@@ -1240,7 +1242,9 @@
  public:
   PageInfoBubbleViewTrackingProtectionSubpageTitleTest() {
     feature_list_.InitWithFeatures(
-        {content_settings::features::kTrackingProtection3pcd}, {});
+        {content_settings::features::kTrackingProtection3pcd,
+         privacy_sandbox::kTrackingProtection3pcdUx},
+        {});
     web_contents_helper_ = std::make_unique<ScopedWebContentsTestHelper>(
         testing::get<2>(GetParam()));
   }
diff --git a/chrome/browser/ui/webui/ash/settings/integration_tests/os_settings_pin_setup_browsertest.cc b/chrome/browser/ui/webui/ash/settings/integration_tests/os_settings_pin_setup_browsertest.cc
index 0751f5a..3f83f04 100644
--- a/chrome/browser/ui/webui/ash/settings/integration_tests/os_settings_pin_setup_browsertest.cc
+++ b/chrome/browser/ui/webui/ash/settings/integration_tests/os_settings_pin_setup_browsertest.cc
@@ -555,4 +555,32 @@
   }
 }
 
+// Tests PIN-only related settings in the ChromeOS settings page.
+class OSSettingsPinOnlySetupTest : public OSSettingsLockScreenBrowserTestBase {
+ public:
+  OSSettingsPinOnlySetupTest()
+      : OSSettingsLockScreenBrowserTestBase(
+            ash::AshAuthFactor::kCryptohomePin) {
+    cryptohome_->set_supports_low_entropy_credentials(true);
+  }
+
+  mojom::PinSettingsApiAsyncWaiter GoToPinSettings(
+      mojom::LockScreenSettingsAsyncWaiter& lock_screen_settings) {
+    pin_settings_remote_ = mojo::Remote(lock_screen_settings.GoToPinSettings());
+    return mojom::PinSettingsApiAsyncWaiter(pin_settings_remote_.get());
+  }
+
+ private:
+  mojo::Remote<mojom::PinSettingsApi> pin_settings_remote_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
+};
+
+// Tests that the PIN control is disabled when PIN is the only factor.
+IN_PROC_BROWSER_TEST_F(OSSettingsPinOnlySetupTest, PinOnlyRemobalDisabled) {
+  auto lock_screen_settings = OpenLockScreenSettingsAndAuthenticate();
+  auto pin_settings = GoToPinSettings(lock_screen_settings);
+
+  pin_settings.AssertMoreButtonDisabled(true);
+}
+
 }  // namespace ash::settings
diff --git a/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.cc b/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.cc
index 1918aada..da415a2 100644
--- a/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.cc
+++ b/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.cc
@@ -9,9 +9,11 @@
 
 #include "base/feature_list.h"
 #include "base/functional/callback_helpers.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/enterprise/profile_management/profile_management_features.h"
+#include "chrome/browser/enterprise/util/managed_browser_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.h"
@@ -241,6 +243,14 @@
                 profile_management::features::kOidcAuthProfileManagement));
 #endif
   }
+  if (account_info.IsManaged()) {
+    update_data.Set(
+        "profileDisclosureSubtitle",
+        l10n_util::GetStringFUTF16(
+            IDS_ENTERPRISE_WELCOME_PROFILE_DISCLOSURE_KNOWN_DOMAIN_SUBTITLE,
+            base::UTF8ToUTF16(
+                enterprise_util::GetDomainFromEmail(account_info.email))));
+  }
   content::WebUIDataSource::Update(
       Profile::FromWebUI(web_ui()),
       chrome::kChromeUIManagedUserProfileNoticeHost, std::move(update_data));
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt
index 11014c3..a56458b 100644
--- a/chrome/build/android-arm64.pgo.txt
+++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@
-chrome-android64-main-1727755068-2078d66cccc0ba858fd890685899f98419f1c7c3-fde921bad92e592f5700984e5afcf1f09e4b585c.profdata
+chrome-android64-main-1727783961-2f1b319e396b5bed8f4ac38a99667e7c16cc5f85-f7bc99221b34f0a43ca97da3ec7dcc2ae2e90c0c.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index bd6f9bd7..768145d 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1727776783-af4347df61b7a6f161d1245cbdc250b5a4648009-655157a228c8c8a9f4db1d28dcc9455a3bdb27fc.profdata
+chrome-mac-arm-main-1727791183-18ebb677bfded080d4fbccf41c258d8f5b869cce-5c8b1389ff74057dc8513e6687b93c9019d4a496.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 3709071..e6f8560 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1727762329-143f5640ee4be5ea2f61124840fa112442b1c705-5e8951d91f6e5f1a65d70b03092840f370101262.profdata
+chrome-mac-main-1727783961-3b5411637555d3044fc3de4cf1811d2c1f21b15d-f7bc99221b34f0a43ca97da3ec7dcc2ae2e90c0c.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 477d5a2c..10163fc 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1727751437-df1a59102947ce52479bb0a05cfa18ec3f581a8d-4858fa94e4e23625c8502173fe63884bc0e7d10f.profdata
+chrome-win32-main-1727773147-197eb862403676b83bf55c5aa212fa2559ac518a-a163f2d7227da4a5b9792888bd14304ff72ce6f2.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index f7146d7..c7b36b7 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1727751437-e3cf6e992bb45005df380046a601f237b496c156-4858fa94e4e23625c8502173fe63884bc0e7d10f.profdata
+chrome-win64-main-1727773147-71e35f3eeb906599fea4b886352dcd4a11b1a762-a163f2d7227da4a5b9792888bd14304ff72ce6f2.profdata
diff --git a/chrome/renderer/autofill/form_autocomplete_browsertest.cc b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
index 7a20c01..9e66228 100644
--- a/chrome/renderer/autofill/form_autocomplete_browsertest.cc
+++ b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
@@ -121,8 +121,7 @@
 
   void DidEndTextFieldEditing() override {}
 
-  void SelectOrSelectListFieldOptionsDidChange(
-      const autofill::FormData& form) override {}
+  void SelectFieldOptionsDidChange(const autofill::FormData& form) override {}
 
   // Records the form data received via FormSubmitted() call.
   std::unique_ptr<FormData> form_submitted_;
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc
index 7fba459..864f7dc 100644
--- a/chrome/renderer/autofill/form_autofill_browsertest.cc
+++ b/chrome/renderer/autofill/form_autofill_browsertest.cc
@@ -53,7 +53,6 @@
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/public/web/web_script_source.h"
 #include "third_party/blink/public/web/web_select_element.h"
-#include "third_party/blink/public/web/web_select_list_element.h"
 
 #if BUILDFLAG(IS_WIN)
 #include "third_party/blink/public/web/win/web_font_rendering.h"
@@ -2016,12 +2015,12 @@
 }
 
 // Test that we use the aria-label as the content if the <option> has no text.
-TEST_F(FormAutofillTest, WebFormControlElementToFormFieldSelectListAriaLabel) {
+TEST_F(FormAutofillTest, WebFormControlElementToFormFieldSelectAriaLabel) {
   LoadHTML(
-      R"(<selectlist id=element>
+      R"(<select id=element>
          <option aria-label='usa'><img></option>
          <option aria-label='uk'><img></option>
-         </selectlist>)");
+         </select>)");
 
   WebLocalFrame* frame = GetMainFrame();
   ASSERT_NE(nullptr, frame);
@@ -2037,12 +2036,11 @@
 
 // Test that the content for the <option> can be computed when the <option>s
 // have nested HTML nodes.
-TEST_F(FormAutofillTest,
-       WebFormControlElementToFormFieldSelectListNestedNodes) {
+TEST_F(FormAutofillTest, WebFormControlElementToFormFieldSelectNestedNodes) {
   LoadHTML(
-      R"(<selectlist id=element>
+      R"(<select id=element>
            <option><div><img><b>+1</b> (Canada)</div></option>
-         </selectlist>)");
+         </select>)");
 
   WebLocalFrame* frame = GetMainFrame();
   ASSERT_NE(nullptr, frame);
@@ -4388,14 +4386,6 @@
           <option value=undo_select_option_2>Foo</option>
           <option value=autofill_select_option_2>Bar</option>
         </select>
-        <selectlist id=selectlist_id_1>
-          <option value=undo_selectlist_option_1>Foo</option>
-          <option value=autofill_selectlist_option_1>Bar</option>
-        </selectlist>
-        <selectlist id=selectlist_id_2>
-          <option value=undo_selectlist_option_2>Foo</option>
-          <option value=autofill_selectlist_option_2>Bar</option>
-        </selectlist>
       </form>
   )");
   WebFormControlElement text_element_1 = GetFormControlElementById("text_id_1");
@@ -4414,15 +4404,6 @@
   select_element_2.SetAutofillValue("autofill_select_option_2",
                                     WebAutofillState::kAutofilled);
 
-  WebFormControlElement selectlist_element_1 =
-      GetFormControlElementById("selectlist_id_1");
-  WebFormControlElement selectlist_element_2 =
-      GetFormControlElementById("selectlist_id_2");
-  selectlist_element_1.SetAutofillValue("autofill_selectlist_option_1",
-                                        WebAutofillState::kAutofilled);
-  selectlist_element_2.SetAutofillValue("autofill_selectlist_option_2",
-                                        WebAutofillState::kAutofilled);
-
   auto HasAutofillValue = [](const WebString& value,
                              WebAutofillState autofill_state) {
     return ::testing::AllOf(
@@ -4440,12 +4421,6 @@
   ASSERT_THAT(select_element_2,
               HasAutofillValue("autofill_select_option_2",
                                WebAutofillState::kAutofilled));
-  ASSERT_THAT(selectlist_element_1,
-              HasAutofillValue("autofill_selectlist_option_1",
-                               WebAutofillState::kAutofilled));
-  ASSERT_THAT(selectlist_element_2,
-              HasAutofillValue("autofill_selectlist_option_2",
-                               WebAutofillState::kAutofilled));
 
   WebVector<WebFormElement> forms =
       GetMainFrame()->GetDocument().GetTopLevelForms();
@@ -4453,12 +4428,10 @@
 
   FormData form = *ExtractFormData(forms[0]);
 
-  EXPECT_EQ(form.fields().size(), 6u);
+  EXPECT_EQ(form.fields().size(), 4u);
   std::vector<FormFieldData> undo_fields;
-  for (size_t i = 0; i < 6; i += 2) {
-    std::u16string type = i == 0   ? u"text"
-                          : i == 2 ? u"select_option"
-                                   : u"selectlist_option";
+  for (size_t i = 0; i < 4; i += 2) {
+    std::u16string type = i == 0 ? u"text" : u"select_option";
     test_api(form).field(i).set_value(u"undo_" + type + u"_1");
     test_api(form).field(i).set_is_autofilled(false);
     undo_fields.push_back(form.fields()[i]);
@@ -4478,12 +4451,6 @@
   EXPECT_THAT(select_element_2,
               HasAutofillValue("autofill_select_option_2",
                                WebAutofillState::kAutofilled));
-  EXPECT_THAT(selectlist_element_1,
-              HasAutofillValue("undo_selectlist_option_1",
-                               WebAutofillState::kNotFilled));
-  EXPECT_THAT(selectlist_element_2,
-              HasAutofillValue("autofill_selectlist_option_2",
-                               WebAutofillState::kAutofilled));
 }
 
 TEST_F(FormAutofillTest, ClearPreviewedElements) {
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index bd81ae0..2ab6f2a9 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -131,8 +131,7 @@
 
   void DidEndTextFieldEditing() override {}
 
-  void SelectOrSelectListFieldOptionsDidChange(
-      const autofill::FormData& form) override {}
+  void SelectFieldOptionsDidChange(const autofill::FormData& form) override {}
 
   std::unique_ptr<base::RunLoop> forms_seen_run_loop_ =
       std::make_unique<base::RunLoop>();
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 73da0dc..d7e7f17 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4602,6 +4602,7 @@
       }
       if (is_win || is_mac || is_linux) {
         sources += [
+          "../browser/enterprise/signin/managed_profile_required_navigation_throttle_browsertest.cc",
           "../browser/ui/views/web_apps/deprecated_apps_dialog_view_browsertest.cc",
           "../browser/ui/views/web_apps/force_installed_deprecated_apps_dialog_view_browsertest.cc",
         ]
diff --git a/chrome/test/data/autofill/dynamic_form_select_or_selectlist_options_change.html b/chrome/test/data/autofill/dynamic_form_select_options_change.html
similarity index 73%
rename from chrome/test/data/autofill/dynamic_form_select_or_selectlist_options_change.html
rename to chrome/test/data/autofill/dynamic_form_select_options_change.html
index 9a77f64..b850490d 100644
--- a/chrome/test/data/autofill/dynamic_form_select_or_selectlist_options_change.html
+++ b/chrome/test/data/autofill/dynamic_form_select_options_change.html
@@ -1,4 +1,4 @@
-<!-- A page that is used to test that a dynamic form fill feature works properly when select or selectlist options are added/removed. -->
+<!-- A page that is used to test that a dynamic form fill feature works properly when select options are added/removed. -->
 <body>
   <form action="https://example.com/" method="post">
     Name: <input type="text" id="firstname" autocomplete="given-name"><br>
@@ -23,16 +23,14 @@
 
 <script>
 function Init() {
-  const is_selectlist = GetBoolQueryParameter("is_selectlist");
-
   let state_div = document.getElementById("state_div");
-  let state_input = document.createElement(is_selectlist ? "selectlist" : "select");
-  state_input.id = "state";
+  let state_select = document.createElement("select");
+  state_select.id = "state";
   while (state_div.children.length > 0) {
-    state_input.appendChild(state_div.children[0]);
+    state_select.appendChild(state_div.children[0]);
   }
 
-  state_div.parentNode.replaceChild(state_input, state_div);
+  state_div.parentNode.replaceChild(state_select, state_div);
 }
 
 function GetBoolQueryParameter(parameter) {
@@ -58,13 +56,13 @@
   console.log('An event happened that should trigger a refill.');
 
   // Replace the provinces with states. The state should get selected by refill.
-  let state_input = document.getElementById("state");
-  while (state_input.length > 0) {
-     state_input.remove(0);
+  let state_select = document.getElementById("state");
+  while (state_select.length > 0) {
+     state_select.remove(0);
   }
-  state_input.appendChild(new Option('WA', 'WA'));
-  state_input.appendChild(new Option('MA', 'MA'));
-  state_input.appendChild(new Option('TX', 'TX'));
+  state_select.appendChild(new Option('WA', 'WA'));
+  state_select.appendChild(new Option('MA', 'MA'));
+  state_select.appendChild(new Option('TX', 'TX'));
 }
 
 Init();
diff --git a/chrome/test/data/autofill/form_selectlist_preview_no_onchange.html b/chrome/test/data/autofill/form_selectlist_preview_no_onchange.html
index 5aef695..a0520aa 100644
--- a/chrome/test/data/autofill/form_selectlist_preview_no_onchange.html
+++ b/chrome/test/data/autofill/form_selectlist_preview_no_onchange.html
@@ -19,13 +19,13 @@
   <label for="city">City:</label>
   <input type="text" id="city"><br>
   <label for="state">State:</label>
-  <selectlist id="state" onchange="state_changed=true">
+  <select id="state" onchange="state_changed=true">
     <option value="" selected="yes">--</option>
     <option value="CA">California</option>
     <option value="TX">Texas</option>
-  </selectlist>
+  </select>
   </form>
-  <selectlist id="other" onchange="other_changed=true">
+  <select id="other" onchange="other_changed=true">
     <option>First</option>
     <option>Second</option>
-  </selectlist>
+  </select>
diff --git a/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.test-mojom b/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.test-mojom
index a6333ce..5dfab94 100644
--- a/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.test-mojom
+++ b/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.test-mojom
@@ -66,4 +66,7 @@
 
   // Try to enable pin autosubmit, but fail because the provided PIN is too long.
   EnablePinAutosubmitTooLong(string long_pin) => ();
+
+  // Checks whether the more button is disabled.
+  AssertMoreButtonDisabled(bool disabled) => ();
 };
diff --git a/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.ts b/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.ts
index e8e58ad..97775781 100644
--- a/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.ts
+++ b/chrome/test/data/webui/chromeos/settings/os_people_page/pin_settings_api.ts
@@ -292,6 +292,14 @@
     return toggle !== null && toggle.checked;
   }
 
+  private isMoreButtonDisabled(): boolean {
+    const button = this.moreButton();
+    if (button === null) {
+      return true;
+    }
+    return (button as HTMLButtonElement).disabled;
+  }
+
   async assertPinAutosubmitEnabled(isEnabled: boolean): Promise<void> {
     const check = () => this.isPinAutosubmitEnabled() === isEnabled;
     await assertAsync(check);
@@ -369,4 +377,10 @@
     (await retryUntilSome(() => this.autosubmitToggle())).click();
     await assertAsync(() => this.isPinAutosubmitEnabled() === false);
   }
+
+  async assertMoreButtonDisabled(disabled: boolean): Promise<void> {
+    const check = () => this.isMoreButtonDisabled() === disabled;
+    await assertAsync(check);
+    await assertForDuration(check);
+  }
 }
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn
index 2180440b..811c860 100644
--- a/chrome/test/data/webui/settings/BUILD.gn
+++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -47,6 +47,7 @@
     "offer_writing_help_page_test.ts",
     "on_startup_page_test.ts",
     "autofill_fake_data.ts",
+    "autofill_section_focus_test.ts",
     "payments_section_card_rows_test.ts",
     "payments_section_card_dialogs_test.ts",
     "payments_section_focus_test.ts",
diff --git a/chrome/test/data/webui/settings/autofill_section_focus_test.ts b/chrome/test/data/webui/settings/autofill_section_focus_test.ts
new file mode 100644
index 0000000..df9bc5d
--- /dev/null
+++ b/chrome/test/data/webui/settings/autofill_section_focus_test.ts
@@ -0,0 +1,51 @@
+// 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.
+
+// clang-format off
+import 'chrome://settings/settings.js';
+
+import {AutofillManagerImpl} from 'chrome://settings/lazy_load.js';
+import {assertTrue} from 'chrome://webui-test/chai_assert.js';
+
+import type {TestAutofillManager} from './autofill_fake_data.js';
+import {createAddressEntry} from './autofill_fake_data.js';
+import {createAutofillSection, deleteAddress} from './autofill_section_test_utils.js';
+// clang-format on
+
+suite('AutofillSectionFocusTest', function() {
+  test('verifyFocusLocationAfterRemoving', async () => {
+    const section = await createAutofillSection(
+        [
+          createAddressEntry(),
+          createAddressEntry(),
+          createAddressEntry(),
+        ],
+        {profile_enabled: {value: true}});
+    const manager = AutofillManagerImpl.getInstance() as TestAutofillManager;
+
+    await deleteAddress(section, manager, 1);
+    const addressesAfterRemovingInTheMiddle =
+        section.$.addressList.querySelectorAll('.list-item');
+    assertTrue(
+        addressesAfterRemovingInTheMiddle[1]!.matches(':focus-within'),
+        'The focus should remain on the same index on the list (but next ' +
+            'to the removed address).');
+
+    await deleteAddress(section, manager, 1);
+    const addressesAfterRemovingLastInTheList =
+        section.$.addressList.querySelectorAll('.list-item');
+    assertTrue(
+        addressesAfterRemovingLastInTheList[0]!.matches(':focus-within'),
+        'After removing the last address on the list the focus should go ' +
+            'to the preivous address.');
+
+    await deleteAddress(section, manager, 0);
+    assertTrue(
+        section.$.addAddress.matches(':focus-within'),
+        'If there are no addresses remaining after removal the focus should ' +
+            'go to the Add button.');
+
+    document.body.removeChild(section);
+  });
+});
diff --git a/chrome/test/data/webui/settings/autofill_section_test.ts b/chrome/test/data/webui/settings/autofill_section_test.ts
index 0fcf6403..6b176b1 100644
--- a/chrome/test/data/webui/settings/autofill_section_test.ts
+++ b/chrome/test/data/webui/settings/autofill_section_test.ts
@@ -19,7 +19,7 @@
 import {TestOpenWindowProxy} from 'chrome://webui-test/test_open_window_proxy.js';
 
 import {AutofillManagerExpectations, createAddressEntry, createEmptyAddressEntry, STUB_USER_ACCOUNT_INFO, TestAutofillManager} from './autofill_fake_data.js';
-import {createAutofillSection, initiateRemoving, initiateEditing, CountryDetailManagerTestImpl, createAddressDialog, createRemoveAddressDialog, expectEvent, openAddressDialog, deleteAddress, getAddressFieldValue} from './autofill_section_test_utils.js';
+import {createAutofillSection, initiateRemoving, initiateEditing, CountryDetailManagerTestImpl, createAddressDialog, createRemoveAddressDialog, expectEvent, openAddressDialog, getAddressFieldValue} from './autofill_section_test_utils.js';
 // clang-format on
 
 const FieldType = chrome.autofillPrivate.FieldType;
@@ -197,44 +197,6 @@
   });
 });
 
-suite('AutofillSectionFocusTest', function() {
-  // TODO(crbug.com/40279141): Fix the flakiness.
-  test.skip('verifyFocusLocationAfterRemoving', async () => {
-    const section = await createAutofillSection(
-        [
-          createAddressEntry(),
-          createAddressEntry(),
-          createAddressEntry(),
-        ],
-        {profile_enabled: {value: true}});
-    const manager = AutofillManagerImpl.getInstance() as TestAutofillManager;
-
-    await deleteAddress(section, manager, 1);
-    const addressesAfterRemovingInTheMiddle =
-        section.$.addressList.querySelectorAll('.list-item');
-    assertTrue(
-        addressesAfterRemovingInTheMiddle[1]!.matches(':focus-within'),
-        'The focus should remain on the same index on the list (but next ' +
-            'to the removed address).');
-
-    await deleteAddress(section, manager, 1);
-    const addressesAfterRemovingLastInTheList =
-        section.$.addressList.querySelectorAll('.list-item');
-    assertTrue(
-        addressesAfterRemovingLastInTheList[0]!.matches(':focus-within'),
-        'After removing the last address on the list the focus should go ' +
-            'to the preivous address.');
-
-    await deleteAddress(section, manager, 0);
-    assertTrue(
-        section.$.addAddress.matches(':focus-within'),
-        'If there are no addresses remaining after removal the focus should ' +
-            'go to the Add button.');
-
-    document.body.removeChild(section);
-  });
-});
-
 suite('AutofillSectionAddressTests', function() {
   let metricsTracker: MetricsTracker;
 
@@ -541,8 +503,7 @@
         emailAddress, getAddressFieldValue(address, FieldType.EMAIL_ADDRESS));
   });
 
-  // TODO(crbug.com/40279141): Fix the flakiness.
-  test.skip('verifyPhoneAndEmailAreRemoved', function() {
+  test('verifyPhoneAndEmailAreRemoved', function() {
     const address = createEmptyAddressEntry();
 
     const phoneNumber = '(555) 555-5555';
@@ -558,7 +519,7 @@
     });
     address.fields.push({type: FieldType.EMAIL_ADDRESS, value: emailAddress});
 
-    return createAddressDialog(address).then(function(dialog) {
+    return createAddressDialog(address).then(async function(dialog) {
       const rows = dialog.$.dialog.querySelectorAll('.address-row');
       assertGT(rows.length, 0, 'dialog should contain address rows');
 
@@ -571,18 +532,26 @@
       assertTrue(!!phoneInput, 'phone element should be the first cr-input');
       assertTrue(!!emailInput, 'email element should be the second cr-input');
 
-      assertEquals(phoneNumber, phoneInput.value);
-      assertEquals(emailAddress, emailInput.value);
+      assertEquals(
+          phoneNumber, phoneInput.value,
+          'The input should have the corresponding address field value.');
+      assertEquals(
+          emailAddress, emailInput.value,
+          'The input should have the corresponding address field value.');
 
       phoneInput.value = '';
       emailInput.value = '';
+      await flushTasks();
 
       return expectEvent(dialog, 'save-address', function() {
                dialog.$.saveButton.click();
              }).then(function() {
         assertFalse(
-            !!getAddressFieldValue(address, FieldType.PHONE_HOME_WHOLE_NUMBER));
-        assertFalse(!!getAddressFieldValue(address, FieldType.EMAIL_ADDRESS));
+            !!getAddressFieldValue(address, FieldType.PHONE_HOME_WHOLE_NUMBER),
+            'The phone field should be empty.');
+        assertFalse(
+            !!getAddressFieldValue(address, FieldType.EMAIL_ADDRESS),
+            'The email field should be empty.');
       });
     });
   });
@@ -712,8 +681,7 @@
     });
   });
 
-  // TODO(crbug.com/40279141): Fix the flakiness.
-  test.skip('verifySyncRecordTypeNoticeForNewAddress', async () => {
+  test('verifySyncRecordTypeNoticeForNewAddress', async () => {
     const section = await createAutofillSection([], {}, {
       ...STUB_USER_ACCOUNT_INFO,
       email: 'stub-user@example.com',
diff --git a/chrome/test/data/webui/settings/settings_focus_test.cc b/chrome/test/data/webui/settings/settings_focus_test.cc
index 5e04d1f..729d3ec 100644
--- a/chrome/test/data/webui/settings/settings_focus_test.cc
+++ b/chrome/test/data/webui/settings/settings_focus_test.cc
@@ -17,6 +17,10 @@
   RunTest("settings/settings_animated_pages_test.js", "mocha.run()");
 }
 
+IN_PROC_BROWSER_TEST_F(SettingsFocusTest, AutofillSectionFocus) {
+  RunTest("settings/autofill_section_focus_test.js", "mocha.run()");
+}
+
 IN_PROC_BROWSER_TEST_F(SettingsFocusTest, PaymentsSectionInteractive) {
   RunTest("settings/payments_section_interactive_test.js", "mocha.run()");
 }
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index 051fbb8..604a862 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -182,6 +182,12 @@
  protected:
   void SetUp() override {
     VLOG(2) << __func__ << " entered.";
+#if BUILDFLAG(IS_WIN) && defined(ADDRESS_SANITIZER)
+    if (IsSystemInstall(GetUpdaterScopeForTesting())) {
+      // TODO(crbug.com/366973330): updater_tests_system fail under Win/ASan.
+      GTEST_SKIP() << "Skipping on Windows/ASan";
+    }
+#endif
 
     ASSERT_NO_FATAL_FAILURE(CleanProcesses());
     ASSERT_TRUE(WaitForUpdaterExit());
@@ -217,6 +223,9 @@
 
   void TearDown() override {
     VLOG(2) << __func__ << " entered.";
+    if (IsSkipped()) {
+      return;
+    }
 
     ExitTestMode();
     if (!HasFailure()) {
@@ -1848,6 +1857,9 @@
  protected:
   void SetUp() override {
     IntegrationTest::SetUp();
+    if (IsSkipped()) {
+      return;
+    }
     test_server_ = std::make_unique<ScopedServer>(test_commands_);
     if (!IsSystemInstall(GetUpdaterScopeForTesting())) {
       GTEST_SKIP();
@@ -1868,6 +1880,9 @@
   }
 
   void TearDown() override {
+    if (IsSkipped()) {
+      return;
+    }
     if (IsSystemInstall(GetUpdaterScopeForTesting())) {
       UninstallEnterpriseCompanionApp();
     }
@@ -2730,6 +2745,9 @@
     }
 
     IntegrationTest::SetUp();
+    if (IsSkipped()) {
+      return;
+    }
     test_server_ = std::make_unique<ScopedServer>();
     test_server_->ConfigureTestMode(user_test_commands_.get());
     test_server_->ConfigureTestMode(test_commands_.get());
@@ -4136,12 +4154,18 @@
     }
 
     IntegrationTest::SetUp();
+    if (IsSkipped()) {
+      return;
+    }
 
     test_server_ = std::make_unique<ScopedServer>(test_commands_);
     ASSERT_NO_FATAL_FAILURE(Install());
   }
 
   void TearDown() override {
+    if (IsSkipped()) {
+      return;
+    }
     ASSERT_NO_FATAL_FAILURE(ExpectUninstallPing(test_server_.get()));
     ASSERT_NO_FATAL_FAILURE(Uninstall());
 
@@ -4201,6 +4225,9 @@
  protected:
   void SetUp() override {
     IntegrationTest::SetUp();
+    if (IsSkipped()) {
+      return;
+    }
 
     test_server_ = std::make_unique<ScopedServer>(test_commands_);
     ASSERT_NO_FATAL_FAILURE(Install());
@@ -4208,6 +4235,9 @@
   }
 
   void TearDown() override {
+    if (IsSkipped()) {
+      return;
+    }
     ASSERT_NO_FATAL_FAILURE(ExpectUninstallPing(test_server_.get()));
     ASSERT_NO_FATAL_FAILURE(Uninstall());
 
@@ -4299,13 +4329,16 @@
       GTEST_SKIP();
     }
     IntegrationTest::SetUp();
+    if (IsSkipped()) {
+      return;
+    }
     test_server_ = std::make_unique<ScopedServer>(test_commands_);
     ASSERT_NO_FATAL_FAILURE(RemoveMsiProductData(kMsiProductIdInitialVersion));
     ASSERT_NO_FATAL_FAILURE(RemoveMsiProductData(kMsiProductIdUpdatedVersion));
   }
 
   void TearDown() override {
-    if (!IsSystemInstall(GetUpdaterScopeForTesting())) {
+    if (IsSkipped()) {
       return;
     }
     ASSERT_NO_FATAL_FAILURE(RemoveMsiProductData(kMsiProductIdInitialVersion));
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb
index 05c9d1c8..4b233389e 100644
--- a/chromeos/strings/chromeos_strings_it.xtb
+++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -821,6 +821,7 @@
 <translation id="5108781503443873320">Sinonimi:</translation>
 <translation id="5130848777448318809">pony</translation>
 <translation id="5137451382116112100">Schermo intero</translation>
+<translation id="5140788690559353412">Se perdi l'accesso al tuo account della scuola, non potrai più accedere all'email associata e ai file di Google Drive, come quelli salvati in Gmail, Documenti, Presentazioni e altri ancora.</translation>
 <translation id="5142961317498132443">Autenticazione</translation>
 <translation id="5144311987923128508">Il pulsante Conferma è ora disattivato</translation>
 <translation id="5144887194300568405">Copia traduzione</translation>
@@ -1008,6 +1009,7 @@
 <translation id="6075872808778243331">(Android) Latenza HTTP</translation>
 <translation id="6078323886959318429">Aggiungi scorciatoia</translation>
 <translation id="6091080061796993741">giallo</translation>
+<translation id="6093853427925392522">Assicurati di utilizzare l'app Trasferimento contenuti di Google per spostare i dati dell'account della scuola nel tuo account personale prima di perdere l'accesso.</translation>
 <translation id="6104112872696127344">La scansione è stata annullata</translation>
 <translation id="6106186594183574873">Per terminare, inserisci la vecchia password</translation>
 <translation id="6108689792487843350">gateway non raggiungibile</translation>
@@ -1245,6 +1247,7 @@
 <translation id="7130438335435247835">Nome punto di accesso (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Server dei nomi}other{Server dei nomi}}</translation>
 <translation id="7135814714616751706">Cerca scorciatoie</translation>
+<translation id="7141470099673912333">Trasferimento contenuti</translation>
 <translation id="7143207342074048698">Connessione</translation>
 <translation id="7144878232160441200">Riprova</translation>
 <translation id="7144954474087165241">pagoda</translation>
@@ -1537,6 +1540,7 @@
 <translation id="8626489604350149811">Altre azioni per <ph name="APN_NAME" /></translation>
 <translation id="86356131183441916">Viola chiaro</translation>
 <translation id="8647595191512746911">Trascrizione audio</translation>
+<translation id="8650852232143958317">Porta con te i file di Gmail e Google Drive</translation>
 <translation id="8651481478098336970">azzera volume</translation>
 <translation id="8655295600908251630">Canale</translation>
 <translation id="8655828773034788261">Condividi URL:</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index a460407a..526826d 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -821,6 +821,7 @@
 <translation id="5108781503443873320">Окшош:</translation>
 <translation id="5130848777448318809">понилер</translation>
 <translation id="5137451382116112100">Толук</translation>
+<translation id="5140788690559353412">Мектеп аккаунтуңузга кирүү мүмкүнчүлүгүнөн айрылганда, Gmail, Документтер, Слайддар жана башкалар сыяктуу электрондук почтага жана Google Drive файлдарына кире албай каласыз.</translation>
 <translation id="5142961317498132443">Аныктыгын текшерүү</translation>
 <translation id="5144311987923128508">Ырастоо баскычы эми өчүрүлдү</translation>
 <translation id="5144887194300568405">Котормону көчүрүү</translation>
@@ -1008,6 +1009,7 @@
 <translation id="6075872808778243331">(Android) HTTP күтүү убакыты</translation>
 <translation id="6078323886959318429">Кыска жол кошуу</translation>
 <translation id="6091080061796993741">сары</translation>
+<translation id="6093853427925392522">Мектеп аккаунтуңузга кирүү мүмкүнчүлүгүнөн айрылып калганга чейин андагы маалыматты жеке аккаунтуңузга жылдыруу үчүн Google'дун Content Transfer колдонмосун пайдаланыңыз.</translation>
 <translation id="6104112872696127344">Скандоо токтотулду</translation>
 <translation id="6106186594183574873">Бүтүрүү үчүн эски сырсөзүңүздү киргизиңиз</translation>
 <translation id="6108689792487843350">Шлюз жеткиликсиз</translation>
@@ -1245,6 +1247,7 @@
 <translation id="7130438335435247835">Байланыш түйүнүнүн аталышы (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Ысым сервери}other{Ысым серверлери}}</translation>
 <translation id="7135814714616751706">Ыкчам баскычтарды издөө</translation>
+<translation id="7141470099673912333">Content Transfer</translation>
 <translation id="7143207342074048698">Туташууда</translation>
 <translation id="7144878232160441200">Дагы аракет кылып көрүү</translation>
 <translation id="7144954474087165241">пагода</translation>
@@ -1537,6 +1540,7 @@
 <translation id="8626489604350149811"><ph name="APN_NAME" /> боюнча башка аракеттер</translation>
 <translation id="86356131183441916">Ачык кызгылт көгүш</translation>
 <translation id="8647595191512746911">Аудионун транскрипциясы</translation>
+<translation id="8650852232143958317">Gmail жана Google Drive файлдарын жаныңызга алыңыз</translation>
 <translation id="8651481478098336970">үнүн басуу</translation>
 <translation id="8655295600908251630">Канал</translation>
 <translation id="8655828773034788261">URL дарегин бөлүшүү:</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index e06a4bc..c8a4eb7 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -821,6 +821,7 @@
 <translation id="5108781503443873320">Panašūs:</translation>
 <translation id="5130848777448318809">poniai</translation>
 <translation id="5137451382116112100">Viso ekrano režimas</translation>
+<translation id="5140788690559353412">Praradę prieigą prie mokyklos paskyros nebegalėsite pasiekti susietų el. pašto ir „Google“ disko failų, pvz., „Gmail“, Dokumentų, Skaidrių ir kt.</translation>
 <translation id="5142961317498132443">Autentifikavimas</translation>
 <translation id="5144311987923128508">Mygtukas „Patvirtinti“ dabar išjungtas</translation>
 <translation id="5144887194300568405">Kopijuoti vertimą</translation>
@@ -1008,6 +1009,7 @@
 <translation id="6075872808778243331">(„Android“) HTTP delsa</translation>
 <translation id="6078323886959318429">Pridėti spartųjį klavišą</translation>
 <translation id="6091080061796993741">geltonos spalvos</translation>
+<translation id="6093853427925392522">Įsitikinkite, kad naudojate „Google“ turinio perkėlimo programą, kad perkeltumėte mokyklos paskyros duomenis į asmeninę paskyrą, kol nepraradote prieigos.</translation>
 <translation id="6104112872696127344">Nuskaitymas atšauktas</translation>
 <translation id="6106186594183574873">Norėdami užbaigti įveskite seną slaptažodį</translation>
 <translation id="6108689792487843350">Tinklų sietuvas nepasiekiamas</translation>
@@ -1245,6 +1247,7 @@
 <translation id="7130438335435247835">Prieigos taško pavadinimas (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Pavadinimų serveris}one{Pavadinimų serveriai}few{Pavadinimų serveriai}many{Pavadinimų serveriai}other{Pavadinimų serveriai}}</translation>
 <translation id="7135814714616751706">Ieškoti sparčiųjų klavišų</translation>
+<translation id="7141470099673912333">Turinio perkėlimas</translation>
 <translation id="7143207342074048698">Jungiama</translation>
 <translation id="7144878232160441200">Kartoti</translation>
 <translation id="7144954474087165241">pagoda</translation>
@@ -1537,6 +1540,7 @@
 <translation id="8626489604350149811">Daugiau veiksmų („<ph name="APN_NAME" />“)</translation>
 <translation id="86356131183441916">Šviesiai violetinė</translation>
 <translation id="8647595191512746911">Garso įrašo transkribavimas</translation>
+<translation id="8650852232143958317">Turėkite „Gmail“ ir „Google“ disko failus su savimi</translation>
 <translation id="8651481478098336970">garsumo nutildymas</translation>
 <translation id="8655295600908251630">Kanalas</translation>
 <translation id="8655828773034788261">Bendrinti URL:</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index d0015af..b880d7bf 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -821,6 +821,7 @@
 <translation id="5108781503443873320">Tương tự:</translation>
 <translation id="5130848777448318809">ngựa pony</translation>
 <translation id="5137451382116112100">Toàn màn hình</translation>
+<translation id="5140788690559353412">Khi mất quyền truy cập vào tài khoản trường học, bạn cũng sẽ không còn quyền truy cập vào các tệp trên Google Drive và email được liên kết, chẳng hạn như Gmail, Tài liệu, Trang trình bày, v.v.</translation>
 <translation id="5142961317498132443">Xác thực</translation>
 <translation id="5144311987923128508">Nút Xác nhận hiện đã tắt</translation>
 <translation id="5144887194300568405">Sao chép bản dịch</translation>
@@ -1008,6 +1009,7 @@
 <translation id="6075872808778243331">(Android) Độ trễ của yêu cầu HTTP</translation>
 <translation id="6078323886959318429">Thêm lối tắt</translation>
 <translation id="6091080061796993741">vàng</translation>
+<translation id="6093853427925392522">Hãy nhớ dùng ứng dụng Chuyển nội dung của Google để chuyển dữ liệu trong tài khoản trường học sang tài khoản cá nhân trước khi bạn mất quyền truy cập.</translation>
 <translation id="6104112872696127344">Đã hủy quá trình quét</translation>
 <translation id="6106186594183574873">Để hoàn tất, hãy nhập mật khẩu cũ của bạn</translation>
 <translation id="6108689792487843350">Không thể kết nối với cổng</translation>
@@ -1245,6 +1247,7 @@
 <translation id="7130438335435247835">Tên điểm truy cập (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Máy chủ định danh}other{Các máy chủ định danh}}</translation>
 <translation id="7135814714616751706">Lối tắt tìm kiếm</translation>
+<translation id="7141470099673912333">Chuyển nội dung</translation>
 <translation id="7143207342074048698">Đang kết nối</translation>
 <translation id="7144878232160441200">Thử lại</translation>
 <translation id="7144954474087165241">ngôi chùa</translation>
@@ -1537,6 +1540,7 @@
 <translation id="8626489604350149811">Thao tác khác cho <ph name="APN_NAME" /></translation>
 <translation id="86356131183441916">Tím nhạt</translation>
 <translation id="8647595191512746911">Bản chép lời</translation>
+<translation id="8650852232143958317">Bạn ở đâu, tệp trên Gmail và Google Drive sẽ ở đó</translation>
 <translation id="8651481478098336970">tắt tiếng</translation>
 <translation id="8655295600908251630">Kênh</translation>
 <translation id="8655828773034788261">Chia sẻ URL:</translation>
diff --git a/clank b/clank
index e2d266e..59c00202 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit e2d266ec5429616c72bd9f2c5fb80c3667560bb5
+Subproject commit 59c00202c7c9270d760bf9a57ffd242ef6b0f271
diff --git a/components/android_autofill/browser/android_autofill_manager.h b/components/android_autofill/browser/android_autofill_manager.h
index 0add2d42..a0eff48 100644
--- a/components/android_autofill/browser/android_autofill_manager.h
+++ b/components/android_autofill/browser/android_autofill_manager.h
@@ -48,8 +48,7 @@
 
   void OnDidEndTextFieldEditingImpl() override {}
   void OnHidePopupImpl() override;
-  void OnSelectOrSelectListFieldOptionsDidChangeImpl(
-      const FormData& form) override {}
+  void OnSelectFieldOptionsDidChangeImpl(const FormData& form) override {}
 
   void ReportAutofillWebOTPMetrics(bool used_web_otp) override {}
 
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
index b475ee5..cbc31a40 100644
--- a/components/autofill/content/browser/content_autofill_driver.cc
+++ b/components/autofill/content/browser/content_autofill_driver.cc
@@ -581,12 +581,10 @@
                  &AutofillManager::OnDidEndTextFieldEditing);
 }
 
-void ContentAutofillDriver::SelectOrSelectListFieldOptionsDidChange(
-    const FormData& form) {
+void ContentAutofillDriver::SelectFieldOptionsDidChange(const FormData& form) {
   RouteToManager(*this, router(),
-                 &AutofillDriverRouter::SelectOrSelectListFieldOptionsDidChange,
-                 &AutofillManager::OnSelectOrSelectListFieldOptionsDidChange,
-                 form);
+                 &AutofillDriverRouter::SelectFieldOptionsDidChange,
+                 &AutofillManager::OnSelectFieldOptionsDidChange, form);
 }
 
 void ContentAutofillDriver::JavaScriptChangedAutofilledValue(
diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h
index 95d73ce..0d6d1a3 100644
--- a/components/autofill/content/browser/content_autofill_driver.h
+++ b/components/autofill/content/browser/content_autofill_driver.h
@@ -273,7 +273,7 @@
                                         bool formatting_only) override;
   void SelectControlDidChange(const FormData& form,
                               FieldRendererId field_id) override;
-  void SelectOrSelectListFieldOptionsDidChange(const FormData& form) override;
+  void SelectFieldOptionsDidChange(const FormData& form) override;
   void CaretMovedInFormField(const FormData& form,
                              FieldRendererId field_id,
                              const gfx::Rect& caret_bounds) override;
diff --git a/components/autofill/content/common/mojom/autofill_driver.mojom b/components/autofill/content/common/mojom/autofill_driver.mojom
index d9f8f70..a8d7eac 100644
--- a/components/autofill/content/common/mojom/autofill_driver.mojom
+++ b/components/autofill/content/common/mojom/autofill_driver.mojom
@@ -77,8 +77,8 @@
   SelectControlDidChange(FormData form,
                          FieldRendererId field_id);
 
-  // Notification that a select or selectlist element's options were modified.
-  SelectOrSelectListFieldOptionsDidChange(FormData form);
+  // Notification that a select element's options were modified.
+  SelectFieldOptionsDidChange(FormData form);
 
   // `FocusOnFormField()` xor `FocusOnNonFormField()` is fired when the focused
   // element changes (https://html.spec.whatwg.org/#focused):
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc
index 92d9646f..3fe6e25 100644
--- a/components/autofill/content/renderer/autofill_agent.cc
+++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -407,9 +407,8 @@
                               FieldRendererId field_id) override {
     DeferMsg(&mojom::AutofillDriver::SelectControlDidChange, form, field_id);
   }
-  void SelectOrSelectListFieldOptionsDidChange(const FormData& form) override {
-    DeferMsg(&mojom::AutofillDriver::SelectOrSelectListFieldOptionsDidChange,
-             form);
+  void SelectFieldOptionsDidChange(const FormData& form) override {
+    DeferMsg(&mojom::AutofillDriver::SelectFieldOptionsDidChange, form);
   }
   void AskForValuesToFill(
       const FormData& form,
@@ -504,7 +503,7 @@
   last_queried_element_ = {};
   form_cache_.Reset();
   is_dom_content_loaded_ = false;
-  select_or_selectlist_option_change_batch_timer_.Stop();
+  select_option_change_batch_timer_.Stop();
   datalist_option_change_batch_timer_.Stop();
   process_forms_after_dynamic_change_timer_.Stop();
   process_forms_form_extraction_timer_.Stop();
@@ -1607,14 +1606,14 @@
   form_tracker_->SelectControlDidChange(element);
 }
 
-// Notifies the AutofillDriver about changes in the <select> or <selectlist>
+// Notifies the AutofillDriver about changes in the <select>
 // options in batches.
 //
 // A batch ends if no event occurred for `kWaitTimeForOptionsChanges`. For a
 // given batch, the AutofillDriver is informed only about the last FormData.
 // That is, if within one batch the options of different forms changed, all but
 // one of these events will be lost.
-void AutofillAgent::SelectOrSelectListFieldOptionsChanged(
+void AutofillAgent::SelectFieldOptionsChanged(
     const WebFormControlElement& element) {
   DCHECK(form_util::MaybeWasOwnedByFrame(element, unsafe_render_frame()));
 
@@ -1622,19 +1621,18 @@
     return;
   }
 
-  if (select_or_selectlist_option_change_batch_timer_.IsRunning()) {
-    select_or_selectlist_option_change_batch_timer_.AbandonAndStop();
+  if (select_option_change_batch_timer_.IsRunning()) {
+    select_option_change_batch_timer_.AbandonAndStop();
   }
 
-  select_or_selectlist_option_change_batch_timer_.Start(
+  select_option_change_batch_timer_.Start(
       FROM_HERE, kWaitTimeForOptionsChanges,
-      base::BindRepeating(&AutofillAgent::BatchSelectOrSelectListOptionChange,
+      base::BindRepeating(&AutofillAgent::BatchSelectOptionChange,
                           base::Unretained(this),
                           form_util::GetFieldRendererId(element)));
 }
 
-void AutofillAgent::BatchSelectOrSelectListOptionChange(
-    FieldRendererId element_id) {
+void AutofillAgent::BatchSelectOptionChange(FieldRendererId element_id) {
   WebFormControlElement element =
       form_util::GetFormControlByRendererId(element_id);
   if (!element) {
@@ -1646,12 +1644,12 @@
   if (std::optional<FormAndField> form_and_field =
           form_util::FindFormAndFieldForFormControlElement(
               element, field_data_manager(),
-              GetCallTimerState(kBatchSelectOrSelectListOptionChange),
+              GetCallTimerState(kBatchSelectOptionChange),
               /*extract_options=*/{})) {
     auto& [form, field] = *form_and_field;
     if (auto* autofill_driver = unsafe_autofill_driver();
         autofill_driver && !field->options().empty()) {
-      autofill_driver->SelectOrSelectListFieldOptionsDidChange(form);
+      autofill_driver->SelectFieldOptionsDidChange(form);
     }
   }
 }
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h
index 2373c16..e98e1b0b7 100644
--- a/components/autofill/content/renderer/autofill_agent.h
+++ b/components/autofill/content/renderer/autofill_agent.h
@@ -308,7 +308,7 @@
   void DidCompleteFocusChangeInFrame() override;
   void DidReceiveLeftMouseDownOrGestureTapInNode(
       const blink::WebNode& node) override;
-  void SelectOrSelectListFieldOptionsChanged(
+  void SelectFieldOptionsChanged(
       const blink::WebFormControlElement& element) override;
   void SelectControlDidChange(
       const blink::WebFormControlElement& element) override;
@@ -407,10 +407,10 @@
   DenseSet<form_util::ExtractOption> MaybeExtractDatalist(
       DenseSet<form_util::ExtractOption> extract_options);
 
-  // Helpers for SelectOrSelectListFieldOptionsChanged() and
+  // Helpers for SelectFieldOptionsChanged() and
   // DataListOptionsChanged(), which get called after a timer that is restarted
   // when another event of the same type started.
-  void BatchSelectOrSelectListOptionChange(FieldRendererId element_id);
+  void BatchSelectOptionChange(FieldRendererId element_id);
   void BatchDataListOptionChange(FieldRendererId element_id);
 
   FormRef last_interacted_form() const {
@@ -491,7 +491,7 @@
   bool was_last_action_fill_ = false;
 
   // Timers for throttling handling of frequent events.
-  base::OneShotTimer select_or_selectlist_option_change_batch_timer_;
+  base::OneShotTimer select_option_change_batch_timer_;
   base::OneShotTimer datalist_option_change_batch_timer_;
   // TODO(crbug.com/40267764): Merge some or all of these timers?
   base::OneShotTimer process_forms_after_dynamic_change_timer_;
diff --git a/components/autofill/content/renderer/autofill_renderer_test.h b/components/autofill/content/renderer/autofill_renderer_test.h
index 3159613..a2522bc 100644
--- a/components/autofill/content/renderer/autofill_renderer_test.h
+++ b/components/autofill/content/renderer/autofill_renderer_test.h
@@ -68,7 +68,7 @@
               (const FormData& form, FieldRendererId field_id),
               (override));
   MOCK_METHOD(void,
-              SelectOrSelectListFieldOptionsDidChange,
+              SelectFieldOptionsDidChange,
               (const FormData& form),
               (override));
   MOCK_METHOD(void,
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index faf9ee2..b8fae88 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -65,7 +65,6 @@
 #include "third_party/blink/public/web/web_option_element.h"
 #include "third_party/blink/public/web/web_remote_frame.h"
 #include "third_party/blink/public/web/web_select_element.h"
-#include "third_party/blink/public/web/web_select_list_element.h"
 #include "third_party/re2/src/re2/re2.h"
 
 using blink::WebAutofillState;
@@ -81,7 +80,6 @@
 using blink::WebNode;
 using blink::WebOptionElement;
 using blink::WebSelectElement;
-using blink::WebSelectListElement;
 using blink::WebString;
 using blink::WebVector;
 
@@ -258,15 +256,6 @@
                         blink::mojom::FormControlType::kSelectOne;
 }
 
-bool IsSelectListElement(const WebFormControlElement& element) {
-  return element && element.FormControlTypeForAutofill() ==
-                        blink::mojom::FormControlType::kSelectList;
-}
-
-bool IsSelectOrSelectListElement(const WebFormControlElement& element) {
-  return IsSelectElement(element) || IsSelectListElement(element);
-}
-
 bool IsTextInput(const WebFormControlElement& element) {
   return IsTextInput(element.DynamicTo<WebInputElement>());
 }
@@ -1261,7 +1250,7 @@
     return true;
   }
   // Check if we should autofill/preview/clear a select element or leave it.
-  if (IsSelectOrSelectListElement(element) && element.UserHasEditedTheField() &&
+  if (IsSelectElement(element) && element.UserHasEditedTheField() &&
       !SanitizedFieldIsEmpty(current_element_value)) {
     base::UmaHistogramEnumeration(kSkipReasonHistogram,
                                   SkipReason::kUserEditedSelect);
@@ -1280,7 +1269,7 @@
   // Fill fields for text input, textarea and select fields.
   // Filling not supported for checkboxes and radio buttons.
   if (!IsTextInput(field) && !IsMonthInput(field) &&
-      !IsTextAreaElement(field) && !IsSelectOrSelectListElement(field)) {
+      !IsTextAreaElement(field) && !IsSelectElement(field)) {
     return;
   }
   WebAutofillState new_autofill_state = data.is_autofilled
@@ -1300,7 +1289,7 @@
     return;
   }
 
-  if (!is_initiating_node || IsSelectOrSelectListElement(field)) {
+  if (!is_initiating_node || IsSelectElement(field)) {
     return;
   }
   auto length = base::checked_cast<unsigned>(field.Value().length());
@@ -1321,7 +1310,7 @@
   // Preview text input, textarea and select fields.
   // Preview not supported for checkboxes and radio buttons.
   if (!IsTextInput(field) && !IsMonthInput(field) &&
-      !IsTextAreaElement(field) && !IsSelectOrSelectListElement(field)) {
+      !IsTextAreaElement(field) && !IsSelectElement(field)) {
     return;
   }
 
@@ -1729,23 +1718,13 @@
 // returns {{.value = "Foo", .text = "Bar"}, {.value = "Foo", .text = "Foo"}}.
 // For more details, see the documentation of `SelectOption`.
 std::vector<SelectOption> GetSelectOptions(
-    const WebFormControlElement& select_or_select_list_element) {
-  DCHECK(IsSelectOrSelectListElement(select_or_select_list_element));
-
-  WebVector<WebElement> maybe_option_elements;
-  if (auto select_element =
-          select_or_select_list_element.DynamicTo<WebSelectElement>()) {
-    maybe_option_elements = select_element.GetListItems();
-  } else if (auto select_list_element =
-                 select_or_select_list_element
-                     .DynamicTo<WebSelectListElement>()) {
-    maybe_option_elements = select_list_element.GetListItems();
-  }
+    const WebSelectElement& select_element) {
+  WebVector<WebElement> option_elements = select_element.GetListItems();
 
   // Constrain the maximum list length to prevent a malicious site from DOS'ing
   // the browser, without entirely breaking autocomplete for some extreme
   // legitimate sites: http://crbug.com/49332 and http://crbug.com/363094
-  if (maybe_option_elements.size() > kMaxListSize) {
+  if (option_elements.size() > kMaxListSize) {
     return {};
   }
 
@@ -1753,8 +1732,8 @@
     return s.Utf16().substr(0, kMaxStringLength);
   };
   std::vector<SelectOption> options;
-  options.reserve(maybe_option_elements.size());
-  for (const auto& maybe_option_element : maybe_option_elements) {
+  options.reserve(option_elements.size());
+  for (const auto& maybe_option_element : option_elements) {
     if (auto option_element =
             maybe_option_element.DynamicTo<WebOptionElement>()) {
       std::u16string text = to_string(option_element.GetText());
@@ -1967,8 +1946,8 @@
     // Nothing more to do in this case.
   } else {
     // Set option strings on the field if available.
-    DCHECK(IsSelectOrSelectListElement(element));
-    field->set_options(GetSelectOptions(element));
+    DCHECK(IsSelectElement(element));
+    field->set_options(GetSelectOptions(element.To<WebSelectElement>()));
   }
   if (extract_options.contains(ExtractOption::kBounds)) {
     if (auto* local_frame = element.GetDocument().GetFrame()) {
@@ -2222,8 +2201,8 @@
 bool IsAutofillableElement(const WebFormControlElement& element) {
   const WebInputElement input_element = element.DynamicTo<WebInputElement>();
   return IsTextInput(input_element) || IsMonthInput(input_element) ||
-         IsCheckableElement(input_element) ||
-         IsSelectOrSelectListElement(element) || IsTextAreaElement(element);
+         IsCheckableElement(input_element) || IsSelectElement(element) ||
+         IsTextAreaElement(element);
 }
 
 FormControlType ToAutofillFormControlType(blink::mojom::FormControlType type) {
@@ -2252,8 +2231,6 @@
       return FormControlType::kSelectOne;
     case blink::mojom::FormControlType::kSelectMultiple:
       return FormControlType::kSelectMultiple;
-    case blink::mojom::FormControlType::kSelectList:
-      return FormControlType::kSelectList;
     case blink::mojom::FormControlType::kTextArea:
       return FormControlType::kTextArea;
     default:
@@ -2277,7 +2254,6 @@
     case FormControlType::kInputUrl:
     case FormControlType::kSelectOne:
     case FormControlType::kSelectMultiple:
-    case FormControlType::kSelectList:
     case FormControlType::kTextArea:
       return false;
   }
@@ -2295,10 +2271,7 @@
 }
 
 bool IsWebElementFocusableForAutofill(const WebElement& element) {
-  return element.IsFocusable() ||
-         // The <selectlist> shadow root is not focusable.
-         (IsSelectListElement(element.DynamicTo<WebFormControlElement>()) &&
-          element.To<WebSelectListElement>().HasFocusableChild());
+  return element.IsFocusable();
 }
 
 FormRendererId GetFormRendererId(const WebElement& e) {
diff --git a/components/autofill/content/renderer/form_autofill_util.h b/components/autofill/content/renderer/form_autofill_util.h
index 389390c..3fcd188 100644
--- a/components/autofill/content/renderer/form_autofill_util.h
+++ b/components/autofill/content/renderer/form_autofill_util.h
@@ -113,8 +113,7 @@
 // Returns true if |element| can be edited (enabled and not read only).
 bool IsElementEditable(const blink::WebInputElement& element);
 
-// True if this element can take focus. If this element is a selectlist, checks
-// whether a child of the selectlist can take focus.
+// True if this element can take focus.
 bool IsWebElementFocusableForAutofill(const blink::WebElement& element);
 
 // Returns the FormRendererId of a given WebFormElement or contenteditable. If
diff --git a/components/autofill/content/renderer/form_autofill_util_browsertest.cc b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
index 5f6e578..1e97859 100644
--- a/components/autofill/content/renderer/form_autofill_util_browsertest.cc
+++ b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
@@ -1386,10 +1386,6 @@
       <option value='first'>first</option>
       <option value='second' selected>second</option>
     </select>
-    <select id='unowned_selectlist'>
-      <option value='first'>first</option>
-      <option value='second' selected>second</option>
-    </select>
     <object id='unowned_object'></object>
 
     <form id='form'>
@@ -1404,10 +1400,6 @@
         <option value='june'>june</option>
         <option value='july' selected>july</option>
       </select>
-      <selectlist name='form_selectlist' id='form_selectlist'>
-        <option value='june'>june</option>
-        <option value='july' selected>july</option>
-      </selectlist>
       <object id='form_object'></object>
     </form>
   )");
@@ -1416,15 +1408,13 @@
   std::vector<WebFormControlElement> unowned_form_fields =
       form_util::GetOwnedFormControlsForTesting(doc, WebFormElement());
 
-  EXPECT_THAT(
-      unowned_form_fields,
-      ElementsAre(GetFormControlElementById(doc, "unowned_button"),
-                  GetFormControlElementById(doc, "unowned_fieldset"),
-                  GetFormControlElementById(doc, "unowned_input"),
-                  GetFormControlElementById(doc, "unowned_textarea"),
-                  GetFormControlElementById(doc, "unowned_output"),
-                  GetFormControlElementById(doc, "unowned_select"),
-                  GetFormControlElementById(doc, "unowned_selectlist")));
+  EXPECT_THAT(unowned_form_fields,
+              ElementsAre(GetFormControlElementById(doc, "unowned_button"),
+                          GetFormControlElementById(doc, "unowned_fieldset"),
+                          GetFormControlElementById(doc, "unowned_input"),
+                          GetFormControlElementById(doc, "unowned_textarea"),
+                          GetFormControlElementById(doc, "unowned_output"),
+                          GetFormControlElementById(doc, "unowned_select")));
 }
 
 // Tests that FormData::fields and FormData::child_frames are extracted fully
@@ -1578,10 +1568,10 @@
   LoadHTML(R"(
     <form id='form'>
       <input id='input'>
-      <selectlist name='form_selectlist' id='selectlist'>
+      <select name='form_select' id='select'>
         <option value='june'>june</option>
         <option value='july' selected>july</option>
-      </selectlist>
+      </select>
     </form>
   )");
 
@@ -1599,7 +1589,7 @@
                                       form_data.fields()[0]));
   }
 
-  WebElement element = GetElementById(doc, "selectlist");
+  WebElement element = GetElementById(doc, "select");
   ASSERT_TRUE(element);
   ASSERT_TRUE(element.IsFormControlElement());
   EXPECT_TRUE(HaveSameFormControlId(element.To<WebFormControlElement>(),
diff --git a/components/autofill/content/renderer/timing.cc b/components/autofill/content/renderer/timing.cc
index 36675c4..9348168 100644
--- a/components/autofill/content/renderer/timing.cc
+++ b/components/autofill/content/renderer/timing.cc
@@ -17,8 +17,8 @@
   switch (call_site) {
     case kApplyFieldsAction:
       return "ApplyFieldsAction";
-    case kBatchSelectOrSelectListOptionChange:
-      return "BatchSelectOrSelectListOptionChange";
+    case kBatchSelectOptionChange:
+      return "BatchSelectOptionChange";
     case kDidChangeScrollOffsetImpl:
       return "DidChangeScrollOffsetImpl";
     case kExtractForm:
diff --git a/components/autofill/content/renderer/timing.h b/components/autofill/content/renderer/timing.h
index 9eb74ec..ea4fbcf 100644
--- a/components/autofill/content/renderer/timing.h
+++ b/components/autofill/content/renderer/timing.h
@@ -17,7 +17,7 @@
 struct CallTimerState {
   enum class CallSite {
     kApplyFieldsAction,
-    kBatchSelectOrSelectListOptionChange,
+    kBatchSelectOptionChange,
     kDidChangeScrollOffsetImpl,
     kExtractForm,
     kFocusedElementChanged,
diff --git a/components/autofill/core/browser/autofill_driver_router.cc b/components/autofill/core/browser/autofill_driver_router.cc
index 9803730..7ff54a9 100644
--- a/components/autofill/core/browser/autofill_driver_router.cc
+++ b/components/autofill/core/browser/autofill_driver_router.cc
@@ -381,7 +381,7 @@
   ForEachFrame(form_forest_, callback);
 }
 
-void AutofillDriverRouter::SelectOrSelectListFieldOptionsDidChange(
+void AutofillDriverRouter::SelectFieldOptionsDidChange(
     RoutedCallback<const FormData&> callback,
     AutofillDriver& source,
     FormData form) {
diff --git a/components/autofill/core/browser/autofill_driver_router.h b/components/autofill/core/browser/autofill_driver_router.h
index 3825b728..01895ac 100644
--- a/components/autofill/core/browser/autofill_driver_router.h
+++ b/components/autofill/core/browser/autofill_driver_router.h
@@ -225,10 +225,9 @@
                                         const FieldGlobalId& field_id,
                                         const std::u16string& old_value,
                                         bool formatting_only);
-  void SelectOrSelectListFieldOptionsDidChange(
-      RoutedCallback<const FormData&> callback,
-      AutofillDriver& source,
-      FormData form);
+  void SelectFieldOptionsDidChange(RoutedCallback<const FormData&> callback,
+                                   AutofillDriver& source,
+                                   FormData form);
 
   // Events called by the browser, passed to the renderer:
   // Keep in alphabetic order.
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc
index e6dad9a..4bd836a2 100644
--- a/components/autofill/core/browser/autofill_field.cc
+++ b/components/autofill/core/browser/autofill_field.cc
@@ -429,7 +429,7 @@
 
 const std::u16string& AutofillField::value_for_import() const {
   bool should_consider_value_for_import =
-      IsSelectOrSelectListElement() ||
+      IsSelectElement() ||
       value(ValueSemantics::kInitial) != value(ValueSemantics::kCurrent);
   if (!base::FeatureList::IsEnabled(
           features::kAutofillFixCurrentValueInImport)) {
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 76cc1c4..373a38e 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -504,13 +504,11 @@
   NotifyObservers(&Observer::OnSuggestionsHidden);
 }
 
-void AutofillManager::OnSelectOrSelectListFieldOptionsDidChange(
-    const FormData& form) {
+void AutofillManager::OnSelectFieldOptionsDidChange(const FormData& form) {
   if (!IsValidFormData(form))
     return;
   ParseFormAsync(
-      form, ParsingCallback(
-                &AutofillManager::OnSelectOrSelectListFieldOptionsDidChangeImpl)
+      form, ParsingCallback(&AutofillManager::OnSelectFieldOptionsDidChangeImpl)
                 .Then(NotifyNoObserversCallback()));
 }
 
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h
index d8b0addb..c9d1620 100644
--- a/components/autofill/core/browser/autofill_manager.h
+++ b/components/autofill/core/browser/autofill_manager.h
@@ -242,7 +242,7 @@
                                     const FieldGlobalId& field_id);
   virtual void OnSelectControlDidChange(const FormData& form,
                                         const FieldGlobalId& field_id);
-  void OnSelectOrSelectListFieldOptionsDidChange(const FormData& form);
+  void OnSelectFieldOptionsDidChange(const FormData& form);
   virtual void OnFocusOnFormField(const FormData& form,
                                   const FieldGlobalId& field_id);
   void OnFocusOnNonFormField();
@@ -358,8 +358,7 @@
                                         const FieldGlobalId& field_id) = 0;
   virtual void OnSelectControlDidChangeImpl(const FormData& form,
                                             const FieldGlobalId& field_id) = 0;
-  virtual void OnSelectOrSelectListFieldOptionsDidChangeImpl(
-      const FormData& form) = 0;
+  virtual void OnSelectFieldOptionsDidChangeImpl(const FormData& form) = 0;
   virtual void OnFocusOnFormFieldImpl(const FormData& form,
                                       const FieldGlobalId& field_id) = 0;
   virtual void OnFocusOnNonFormFieldImpl() = 0;
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index 903c2e65..8d94b44 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -294,8 +294,7 @@
   EXPECT_CALL(manager(), OnFocusOnNonFormFieldImpl).Times(AtLeast(0));
   EXPECT_CALL(manager(), OnDidFillAutofillFormDataImpl).Times(AtLeast(0));
   EXPECT_CALL(manager(), OnDidEndTextFieldEditingImpl).Times(AtLeast(0));
-  EXPECT_CALL(manager(), OnSelectOrSelectListFieldOptionsDidChangeImpl)
-      .Times(AtLeast(0));
+  EXPECT_CALL(manager(), OnSelectFieldOptionsDidChangeImpl).Times(AtLeast(0));
   EXPECT_CALL(manager(), OnJavaScriptChangedAutofilledValueImpl)
       .Times(AtLeast(0));
   EXPECT_CALL(manager(), OnFormSubmittedImpl).Times(AtLeast(0));
diff --git a/components/autofill/core/browser/autofill_plus_address_delegate.h b/components/autofill/core/browser/autofill_plus_address_delegate.h
index 410b370..3848e114 100644
--- a/components/autofill/core/browser/autofill_plus_address_delegate.h
+++ b/components/autofill/core/browser/autofill_plus_address_delegate.h
@@ -71,6 +71,9 @@
   // - `origin` is not a blocked origin.
   virtual bool IsPlusAddressFillingEnabled(const url::Origin& origin) const = 0;
 
+  // Returns whether plus address full form filling is supported.
+  virtual bool IsPlusAddressFullFormFillingEnabled() const = 0;
+
   // Returns a list of plus addresses for the `origin` and all affiliated
   // domains.
   virtual void GetAffiliatedPlusAddresses(
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index 8416b38..8d870ab 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -2299,7 +2299,7 @@
   return GetCreditCardAccessManager().ShouldClearPreviewedForm();
 }
 
-void BrowserAutofillManager::OnSelectOrSelectListFieldOptionsDidChangeImpl(
+void BrowserAutofillManager::OnSelectFieldOptionsDidChangeImpl(
     const FormData& form) {
   FormStructure* form_structure = FindCachedFormById(form.global_id());
   if (!form_structure) {
diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h
index aeafce0..f012ef8 100644
--- a/components/autofill/core/browser/browser_autofill_manager.h
+++ b/components/autofill/core/browser/browser_autofill_manager.h
@@ -277,8 +277,7 @@
                                      const base::TimeTicks timestamp) override;
   void OnDidEndTextFieldEditingImpl() override;
   void OnHidePopupImpl() override;
-  void OnSelectOrSelectListFieldOptionsDidChangeImpl(
-      const FormData& form) override;
+  void OnSelectFieldOptionsDidChangeImpl(const FormData& form) override;
   void OnJavaScriptChangedAutofilledValueImpl(const FormData& form,
                                               const FieldGlobalId& field_id,
                                               const std::u16string& old_value,
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
index 0751ed8..2604be31 100644
--- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -136,7 +136,6 @@
 using test::CreateTestIbanFormData;
 using test::CreateTestPersonalInformationFormData;
 using test::CreateTestSelectField;
-using test::CreateTestSelectOrSelectListField;
 using ::testing::_;
 using ::testing::AllOf;
 using ::testing::AnyNumber;
@@ -5244,13 +5243,6 @@
   DoTestFormSubmittedControlWithDefaultValue(this, FormControlType::kSelectOne);
 }
 
-// Test that we save form data when a <selectlist> in the form contains the
-// default value.
-TEST_F(BrowserAutofillManagerTest, FormSubmittedSelectListWithDefaultValue) {
-  DoTestFormSubmittedControlWithDefaultValue(this,
-                                             FormControlType::kSelectList);
-}
-
 void DoTestFormSubmittedNonAddressControlWithDefaultValue(
     BrowserAutofillManagerTest* test,
     FormControlType form_control_type) {
@@ -5302,14 +5294,6 @@
       this, FormControlType::kSelectOne);
 }
 
-// Test that we save form data when a non-country, non-state <selectlist> in the
-// form contains the default value.
-TEST_F(BrowserAutofillManagerTest,
-       FormSubmittedNonAddressSelectListWithDefaultValue) {
-  DoTestFormSubmittedNonAddressControlWithDefaultValue(
-      this, FormControlType::kSelectList);
-}
-
 // Tests that DeterminePossibleFieldTypesForUpload is called when a form is
 // submitted.
 TEST_F(BrowserAutofillManagerTest,
diff --git a/components/autofill/core/browser/crowdsourcing/determine_possible_field_types_unittest.cc b/components/autofill/core/browser/crowdsourcing/determine_possible_field_types_unittest.cc
index 3697e8ba..8a8f68d 100644
--- a/components/autofill/core/browser/crowdsourcing/determine_possible_field_types_unittest.cc
+++ b/components/autofill/core/browser/crowdsourcing/determine_possible_field_types_unittest.cc
@@ -21,7 +21,7 @@
 namespace {
 
 using ::autofill::test::CreateTestFormField;
-using ::autofill::test::CreateTestSelectOrSelectListField;
+using ::autofill::test::CreateTestSelectField;
 using ::testing::Contains;
 using ::testing::ElementsAre;
 using ::testing::Not;
diff --git a/components/autofill/core/browser/data_model/credit_card.cc b/components/autofill/core/browser/data_model/credit_card.cc
index 61cf908..52bf2b6 100644
--- a/components/autofill/core/browser/data_model/credit_card.cc
+++ b/components/autofill/core/browser/data_model/credit_card.cc
@@ -20,6 +20,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/uuid.h"
 #include "build/build_config.h"
@@ -771,9 +772,9 @@
   }
   // If `this` or `other` is only a partial card, i.e. some fields are
   // missing, assume those fields match.
-  bool name_on_card_differs = !name_on_card_.empty() &&
-                              !other.name_on_card_.empty() &&
-                              name_on_card_ != other.name_on_card_;
+  bool name_on_card_differs =
+      !name_on_card_.empty() && !other.name_on_card_.empty() &&
+      !base::EqualsCaseInsensitiveASCII(name_on_card_, other.name_on_card_);
   bool expiration_month_differs = expiration_month_ != 0 &&
                                   other.expiration_month_ != 0 &&
                                   expiration_month_ != other.expiration_month_;
diff --git a/components/autofill/core/browser/field_filling_address_util.cc b/components/autofill/core/browser/field_filling_address_util.cc
index 7f9d7953..e1fdaa4 100644
--- a/components/autofill/core/browser/field_filling_address_util.cc
+++ b/components/autofill/core/browser/field_filling_address_util.cc
@@ -489,7 +489,7 @@
   std::u16string value = GetValueForProfileForInput(
       profile, app_locale, filling_type, field_data, failure_to_fill);
 
-  if (field_data.IsSelectOrSelectListElement() && !value.empty()) {
+  if (field_data.IsSelectElement() && !value.empty()) {
     value = GetValueForProfileSelectControl(
         profile, value, app_locale, field_data.options(),
         filling_type.GetStorableType(), address_normalizer, failure_to_fill);
diff --git a/components/autofill/core/browser/field_filling_address_util_unittest.cc b/components/autofill/core/browser/field_filling_address_util_unittest.cc
index 142de4f..56caebb 100644
--- a/components/autofill/core/browser/field_filling_address_util_unittest.cc
+++ b/components/autofill/core/browser/field_filling_address_util_unittest.cc
@@ -509,7 +509,7 @@
       features::kAutofillEnableFillingPhoneCountryCodesByAddressCountryCodes,
       enable_filling_phone_country_codes_by_address_country_codes);
 
-  AutofillField field(test::CreateTestSelectOrSelectListField(
+  AutofillField field(test::CreateTestSelectField(
       /*label=*/"", /*name=*/"", /*value=*/"", /*autocomplete=*/"",
       /*values=*/{}, /*contents=*/{}, field_type));
   field.set_options(test_case.phone_country_code_selection_options);
@@ -536,13 +536,6 @@
                                            FormControlType::kSelectOne);
 }
 
-TEST_P(AutofillFillAugmentedPhoneCountryCodeTest,
-       FillAugmentedPhoneCountryCodeSelectListField) {
-  DoTestFillAugmentedPhoneCountryCodeField(std::get<0>(GetParam()),
-                                           std::get<1>(GetParam()),
-                                           FormControlType::kSelectList);
-}
-
 INSTANTIATE_TEST_SUITE_P(
     FieldFillingAddressUtilTest,
     AutofillFillAugmentedPhoneCountryCodeTest,
diff --git a/components/autofill/core/browser/field_filling_payments_util.cc b/components/autofill/core/browser/field_filling_payments_util.cc
index 32cfb40c..a263cf62 100644
--- a/components/autofill/core/browser/field_filling_payments_util.cc
+++ b/components/autofill/core/browser/field_filling_payments_util.cc
@@ -30,9 +30,9 @@
 
 namespace {
 
-// Gets the expiration month `value` inside the <select> or <selectlist>
-// `field`. Since `value` is well defined but the website's `field` option
-// values may not be, some heuristics are run to cover all observed cases.
+// Gets the expiration month `value` inside the <select> `field`. Since `value`
+// is well defined but the website's `field` option values may not be, some
+// heuristics are run to cover all observed cases.
 std::u16string GetExpirationMonthSelectControlValue(
     const std::u16string& value,
     const std::string& app_locale,
@@ -485,7 +485,7 @@
                                                  action_persistence, field,
                                                  failure_to_fill);
 
-  return field.IsSelectOrSelectListElement() && !value.empty()
+  return field.IsSelectElement() && !value.empty()
              ? GetFillingValueForCreditCardSelectControl(value, app_locale,
                                                          field, failure_to_fill)
              : value;
diff --git a/components/autofill/core/browser/form_data_importer.cc b/components/autofill/core/browser/form_data_importer.cc
index f90749d..66bce20 100644
--- a/components/autofill/core/browser/form_data_importer.cc
+++ b/components/autofill/core/browser/form_data_importer.cc
@@ -991,7 +991,7 @@
       result.card.SetInfoForMonthInputType(value);
     } else {
       bool saved = result.card.SetInfo(field.Type(), value, app_locale);
-      if (!saved && field.IsSelectOrSelectListElement()) {
+      if (!saved && field.IsSelectElement()) {
         // Saving with the option text (here `value`) may fail for the
         // expiration month. Attempt to save with the option value. First find
         // the index of the option text in the select options and try the
diff --git a/components/autofill/core/browser/form_filler.cc b/components/autofill/core/browser/form_filler.cc
index a9f5352..289c0aa 100644
--- a/components/autofill/core/browser/form_filler.cc
+++ b/components/autofill/core/browser/form_filler.cc
@@ -121,7 +121,7 @@
     return false;
   }
   // Select (list) elements are currently not supported.
-  if (field.IsSelectOrSelectListElement()) {
+  if (field.IsSelectElement()) {
     return false;
   }
   // By default, empty initial values are not considered to be meaningful.
diff --git a/components/autofill/core/browser/form_filler_unittest.cc b/components/autofill/core/browser/form_filler_unittest.cc
index 0690ce2..f53e44eb 100644
--- a/components/autofill/core/browser/form_filler_unittest.cc
+++ b/components/autofill/core/browser/form_filler_unittest.cc
@@ -944,8 +944,7 @@
   EXPECT_EQ(filled_fields[4].value(), expected_cvc);
 }
 
-// Test that unfocusable fields aren't filled, except for <select> fields (but
-// not <selectlist> fields).
+// Test that unfocusable fields aren't filled, except for <select> fields.
 TEST_F(FormFillerTest, DoNotFillUnfocusableFieldsExceptForSelect) {
   // Create a form with both focusable and non-focusable fields.
   FormData form = test::GetFormData(
@@ -953,11 +952,7 @@
                   {.role = ADDRESS_HOME_COUNTRY,
                    .autocomplete_attribute = "country"}}});
   test_api(form).field(-1).set_is_focusable(false);
-  test_api(form).Append(test::CreateTestSelectOrSelectListField(
-      "Country", "country", "", "country", {"CA", "US"},
-      {"Canada", "United States"}, FormControlType::kSelectList));
-  test_api(form).field(-1).set_is_focusable(false);
-  test_api(form).Append(test::CreateTestSelectOrSelectListField(
+  test_api(form).Append(test::CreateTestSelectField(
       "Country", "country", "", "country", {"CA", "US"},
       {"Canada", "United States"}, FormControlType::kSelectOne));
   test_api(form).field(-1).set_is_focusable(false);
@@ -967,14 +962,12 @@
   std::vector<FormFieldData> filled_fields =
       FillAutofillFormData(form, form.fields()[0], &profile).fields();
 
-  ASSERT_EQ(4u, filled_fields.size());
+  ASSERT_EQ(3u, filled_fields.size());
   EXPECT_THAT(filled_fields[0],
               AutofilledWith(profile.GetInfo(NAME_FULL, kAppLocale)));
   EXPECT_FALSE(filled_fields[1].is_autofilled());
   EXPECT_TRUE(filled_fields[1].value().empty());
-  EXPECT_FALSE(filled_fields[2].is_autofilled());
-  EXPECT_TRUE(filled_fields[2].value().empty());
-  EXPECT_THAT(filled_fields[3], AutofilledWith(u"US"));
+  EXPECT_THAT(filled_fields[2], AutofilledWith(u"US"));
 }
 
 // Test that we correctly fill a form that has author-specified sections, which
diff --git a/components/autofill/core/browser/form_parsing/credit_card_field_parser.cc b/components/autofill/core/browser/form_parsing/credit_card_field_parser.cc
index 536d283..eab0fe7 100644
--- a/components/autofill/core/browser/form_parsing/credit_card_field_parser.cc
+++ b/components/autofill/core/browser/form_parsing/credit_card_field_parser.cc
@@ -276,8 +276,7 @@
   AutofillField* field = scanner->Cursor();
   if (!MatchesFormControlType(
           field->form_control_type(),
-          {FormControlType::kSelectOne, FormControlType::kSelectList,
-           FormControlType::kInputSearch})) {
+          {FormControlType::kSelectOne, FormControlType::kInputSearch})) {
     return false;
   }
 
@@ -311,8 +310,7 @@
   AutofillField* field = scanner->Cursor();
   if (!MatchesFormControlType(
           field->form_control_type(),
-          {FormControlType::kSelectOne, FormControlType::kSelectList,
-           FormControlType::kInputSearch})) {
+          {FormControlType::kSelectOne, FormControlType::kInputSearch})) {
     return false;
   }
 
@@ -391,8 +389,7 @@
 
   if (!MatchesFormControlType(
           field->form_control_type(),
-          {FormControlType::kSelectOne, FormControlType::kSelectList,
-           FormControlType::kInputSearch})) {
+          {FormControlType::kSelectOne, FormControlType::kInputSearch})) {
     return false;
   }
 
@@ -689,7 +686,7 @@
     return std::ranges::any_of(field.options(), is_substring,
                                option_projection);
   };
-  if (field.IsSelectOrSelectListElement()) {
+  if (field.IsSelectElement()) {
     base::Time::Exploded time_exploded;
     AutofillClock::Now().UTCExplode(&time_exploded);
     std::u16string year_4_digits = base::NumberToString16(time_exploded.year);
diff --git a/components/autofill/core/browser/form_parsing/form_field_parser.cc b/components/autofill/core/browser/form_parsing/form_field_parser.cc
index 38e9087..7f4264e 100644
--- a/components/autofill/core/browser/form_parsing/form_field_parser.cc
+++ b/components/autofill/core/browser/form_parsing/form_field_parser.cc
@@ -509,8 +509,7 @@
           {FormControlType::kInputEmail, FormControlType::kInputNumber,
            FormControlType::kInputPassword, FormControlType::kInputSearch,
            FormControlType::kInputTelephone, FormControlType::kInputText,
-           FormControlType::kSelectOne, FormControlType::kSelectList,
-           FormControlType::kTextArea})) {
+           FormControlType::kSelectOne, FormControlType::kTextArea})) {
     return false;
   }
   if (Match(context, field, kEmptyLabelRegex, {MatchAttribute::kLabel},
diff --git a/components/autofill/core/browser/form_parsing/internal_resources b/components/autofill/core/browser/form_parsing/internal_resources
index 63fcf0a84..003e8a7 160000
--- a/components/autofill/core/browser/form_parsing/internal_resources
+++ b/components/autofill/core/browser/form_parsing/internal_resources
@@ -1 +1 @@
-Subproject commit 63fcf0a84bea083e8d0957ce94af91c1373da328
+Subproject commit 003e8a7f35140e7515f911bd5f5472f2c1483c83
diff --git a/components/autofill/core/browser/form_parsing/phone_field_parser.cc b/components/autofill/core/browser/form_parsing/phone_field_parser.cc
index 810a1fe..3b3d9520 100644
--- a/components/autofill/core/browser/form_parsing/phone_field_parser.cc
+++ b/components/autofill/core/browser/form_parsing/phone_field_parser.cc
@@ -160,9 +160,8 @@
   AutofillField* field = scanner->Cursor();
 
   // Return false if the field is not a selection box.
-  if (!MatchesFormControlType(
-          field->form_control_type(),
-          {FormControlType::kSelectOne, FormControlType::kSelectList})) {
+  if (!MatchesFormControlType(field->form_control_type(),
+                              {FormControlType::kSelectOne})) {
     return false;
   }
 
@@ -390,7 +389,7 @@
                         return MatchParams(p.attributes,
                 kDefaultMatchParamsWith<
         FormControlType::kInputTelephone, FormControlType::kInputNumber,
-        FormControlType::kSelectOne, FormControlType::kSelectList>.field_types);
+        FormControlType::kSelectOne>.field_types);
                       });
   }
 
diff --git a/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json b/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
index 3b894b05..484d8eb 100644
--- a/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
+++ b/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
@@ -148,7 +148,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH",
           "TEXT_AREA"
         ]
@@ -166,7 +165,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH",
           "TEXT_AREA"
         ]
@@ -184,7 +182,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH",
           "TEXT_AREA"
         ]
@@ -202,7 +199,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH",
           "TEXT_AREA"
         ]
@@ -220,7 +216,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH",
           "TEXT_AREA"
         ]
@@ -1027,7 +1022,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1044,7 +1038,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1061,7 +1054,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1078,7 +1070,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1095,7 +1086,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1115,8 +1105,7 @@
           "INPUT_TEXT",
           "TEXT_AREA",
           "INPUT_SEARCH",
-          "SELECT_ONE",
-          "SELECT_LIST"
+          "SELECT_ONE"
         ]
       }
     ],
@@ -1133,8 +1122,7 @@
           "INPUT_TEXT",
           "TEXT_AREA",
           "INPUT_SEARCH",
-          "SELECT_ONE",
-          "SELECT_LIST"
+          "SELECT_ONE"
         ]
       }
     ]
@@ -1290,7 +1278,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1307,7 +1294,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1324,7 +1310,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1341,7 +1326,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1358,7 +1342,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1375,7 +1358,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1392,7 +1374,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1409,7 +1390,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1426,7 +1406,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1443,7 +1422,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1460,7 +1438,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1477,7 +1454,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1494,7 +1470,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1511,7 +1486,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1528,7 +1502,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1545,7 +1518,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1720,7 +1692,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1737,7 +1708,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1754,7 +1724,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1771,7 +1740,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1788,7 +1756,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1805,7 +1772,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1822,7 +1788,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1839,7 +1804,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1856,7 +1820,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1874,7 +1837,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1891,7 +1853,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1908,7 +1869,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1926,7 +1886,6 @@
         ],
         "form_control_types": [
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -1946,7 +1905,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -1965,7 +1923,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -1984,7 +1941,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2003,7 +1959,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2022,7 +1977,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2041,7 +1995,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2060,7 +2013,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2079,7 +2031,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2100,7 +2051,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2121,7 +2071,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2142,7 +2091,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2161,7 +2109,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2180,7 +2127,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2199,7 +2145,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2218,7 +2163,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2237,7 +2181,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2256,7 +2199,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2275,7 +2217,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2294,7 +2235,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2313,7 +2253,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2334,7 +2273,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2355,7 +2293,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2374,7 +2311,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2393,7 +2329,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2412,7 +2347,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2431,7 +2365,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2450,7 +2383,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2469,7 +2401,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2488,7 +2419,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2507,7 +2437,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2528,7 +2457,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2549,7 +2477,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
         ]
@@ -2844,8 +2771,7 @@
         ],
         "form_control_types": [
           "INPUT_TEXT",
-          "SELECT_ONE",
-          "SELECT_LIST"
+          "SELECT_ONE"
         ]
       }
     ]
@@ -4041,7 +3967,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -4058,7 +3983,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -4075,7 +3999,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -4253,7 +4176,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "TEXT_AREA",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
@@ -4696,7 +4618,6 @@
           "INPUT_TEXT",
           "INPUT_TELEPHONE",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_NUMBER"
         ]
       }
@@ -4853,7 +4774,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "TEXT_AREA",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
@@ -4872,7 +4792,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "TEXT_AREA",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
@@ -4891,7 +4810,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "TEXT_AREA",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
@@ -4910,7 +4828,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "TEXT_AREA",
           "INPUT_NUMBER",
           "INPUT_SEARCH"
@@ -5105,7 +5022,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5122,7 +5038,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5139,7 +5054,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5156,7 +5070,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5173,7 +5086,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5190,7 +5102,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5207,7 +5118,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5224,7 +5134,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5241,7 +5150,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5258,7 +5166,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
@@ -5275,7 +5182,6 @@
         "form_control_types": [
           "INPUT_TEXT",
           "SELECT_ONE",
-          "SELECT_LIST",
           "INPUT_SEARCH"
         ]
       }
diff --git a/components/autofill/core/browser/form_processing/optimization_guide_proto_util.cc b/components/autofill/core/browser/form_processing/optimization_guide_proto_util.cc
index b303bf8..b280117 100644
--- a/components/autofill/core/browser/form_processing/optimization_guide_proto_util.cc
+++ b/components/autofill/core/browser/form_processing/optimization_guide_proto_util.cc
@@ -42,8 +42,6 @@
       return optimization_guide::proto::FORM_CONTROL_TYPE_SELECT_ONE;
     case FormControlType::kSelectMultiple:
       return optimization_guide::proto::FORM_CONTROL_TYPE_SELECT_MULTIPLE;
-    case FormControlType::kSelectList:
-      return optimization_guide::proto::FORM_CONTROL_TYPE_SELECT_LIST;
     case FormControlType::kTextArea:
       return optimization_guide::proto::FORM_CONTROL_TYPE_TEXT_AREA;
   }
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index 2261d8c1b..2a1566d 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -411,9 +411,8 @@
     return false;
   }
 
-  bool has_text_field = std::ranges::any_of(*this, [](const auto& field) {
-    return !field->IsSelectOrSelectListElement();
-  });
+  bool has_text_field = std::ranges::any_of(
+      *this, [](const auto& field) { return !field->IsSelectElement(); });
   if (!has_text_field) {
     LOG_AF(log_manager) << LoggingScope::kAbortParsing
                         << LogMessage::kAbortParsingFormHasNoTextfield << *this;
@@ -490,7 +489,7 @@
 
     // TODO: crbug.com/40227496 - Simplify the `switch` statement once
     // kAutofillFixValueSemantics is launched.
-    // TODO: crbug.com/40227496 - Remove the IsSelectOrSelectListElement()
+    // TODO: crbug.com/40227496 - Remove the IsSelectElement()
     // checks once kAutofillFixValueSemantics is launched.
     // TODO: crbug.com/40227496 - Update the comments when the experiments are
     // launched.
@@ -499,7 +498,7 @@
         // If kAutofillFixValueSemantics is disabled: During form parsing (as in
         // "assigning field types to fields") the `value` represents the initial
         // value found at page load and needs to be preserved.
-        if (!field->IsSelectOrSelectListElement() ||
+        if (!field->IsSelectElement() ||
             base::FeatureList::IsEnabled(
                 features::kAutofillFixInitialValueOfSelect)) {
           field->set_initial_value(
@@ -507,9 +506,8 @@
         }
         break;
       case RetrieveFromCacheReason::kFormImport:
-        // TODO: crbug.com/40227496 - Group IsSelectOrSelectListElement()
-        // checks.
-        if ((!field->IsSelectOrSelectListElement() ||
+        // TODO: crbug.com/40227496 - Group IsSelectElement() checks.
+        if ((!field->IsSelectElement() ||
              base::FeatureList::IsEnabled(
                  features::kAutofillFixInitialValueOfSelect)) &&
             base::FeatureList::IsEnabled(
@@ -530,7 +528,7 @@
             cached_field->Type().GetStorableType() > FieldType::UNKNOWN_TYPE ||
             !cached_field->possible_types().empty();
         if (!cached_field->value(ValueSemantics::kInitial).empty() &&
-            (!field->IsSelectOrSelectListElement() ||
+            (!field->IsSelectElement() ||
              base::FeatureList::IsEnabled(
                  features::kAutofillFixInitialValueOfSelect)) &&
             had_type) {
@@ -544,7 +542,7 @@
         const bool field_is_neither_state_nor_country =
             field->server_type() != ADDRESS_HOME_COUNTRY &&
             field->server_type() != ADDRESS_HOME_STATE;
-        if ((!field->IsSelectOrSelectListElement() &&
+        if ((!field->IsSelectElement() &&
              !base::FeatureList::IsEnabled(
                  features::kAutofillFixCurrentValueInImport)) &&
             same_value_as_on_page_load && field_is_neither_state_nor_country) {
diff --git a/components/autofill/core/browser/form_structure_rationalizer.cc b/components/autofill/core/browser/form_structure_rationalizer.cc
index 3b29b46..01f1384 100644
--- a/components/autofill/core/browser/form_structure_rationalizer.cc
+++ b/components/autofill/core/browser/form_structure_rationalizer.cc
@@ -151,7 +151,7 @@
       case HtmlFieldType::kCreditCardExpYear:
       case HtmlFieldType::kCreditCardExp2DigitYear:
       case HtmlFieldType::kCreditCardExp4DigitYear:
-        if (!is_text_field & !field->IsSelectOrSelectListElement()) {
+        if (!is_text_field & !field->IsSelectElement()) {
           continue;
         }
         if (base::FeatureList::IsEnabled(
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index fb2e722a..b0b344f 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -351,22 +351,6 @@
       test_api(form_structure()).ShouldBeParsed({.min_required_fields = 2}));
 }
 
-TEST_F(FormStructureTestImpl_ShouldBeParsed_Test, FalseIfOnlySelectListField) {
-  {
-    FormFieldData field;
-    field.set_form_control_type(FormControlType::kSelectList);
-    AddField(field);
-  }
-  EXPECT_FALSE(test_api(form_structure()).ShouldBeParsed());
-  EXPECT_FALSE(
-      test_api(form_structure()).ShouldBeParsed({.min_required_fields = 1}));
-
-  AddTextField();
-  EXPECT_TRUE(test_api(form_structure()).ShouldBeParsed());
-  EXPECT_TRUE(
-      test_api(form_structure()).ShouldBeParsed({.min_required_fields = 2}));
-}
-
 // Form whose action is a search URL should not be parsed.
 TEST_F(FormStructureTestImpl_ShouldBeParsed_Test, FalseIfSearchURL) {
   AddTextField();
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
index 460f3e4..d23281a2 100644
--- a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
@@ -7458,44 +7458,6 @@
   histogram_tester.ExpectBucketCount("Autofill.LogEvent.All", 4, 1);
 }
 
-// Tests that the forms with <selectlist> field are recorded in UkmFieldInfo
-// metrics.
-TEST_F(AutofillMetricsFromLogEventsTest,
-       AutofillFieldInfoMetricsRecordOnSelectListField) {
-  FormData form = test::GetFormData(
-      {.fields = {
-           // Start with two input text fields.
-           {.label = u"First Name", .name = u"firstname"},
-           {.label = u"Last Name", .name = u"lastname"},
-           // A Selectlist.
-           {.label = u"Country",
-            .name = u"country",
-            .form_control_type = FormControlType::kSelectList},
-       }});
-
-  std::vector<FieldType> field_types = {NAME_FIRST, NAME_LAST,
-                                        ADDRESS_HOME_COUNTRY};
-  autofill_manager().AddSeenForm(form, field_types);
-  SeeForm(form);
-  task_environment_.FastForwardBy(base::Milliseconds(9));
-  base::HistogramTester histogram_tester;
-  SubmitForm(form);
-  test_api(autofill_manager()).Reset();
-
-  auto entries =
-      test_ukm_recorder().GetEntriesByName(UkmFieldInfoType::kEntryName);
-  ASSERT_EQ(3u, entries.size());
-  test_ukm_recorder().ExpectEntryMetric(
-      entries[0], UkmFieldInfoType::kFormControlType2Name,
-      base::to_underlying(FormControlType::kInputText));
-  test_ukm_recorder().ExpectEntryMetric(
-      entries[1], UkmFieldInfoType::kFormControlType2Name,
-      base::to_underlying(FormControlType::kInputText));
-  test_ukm_recorder().ExpectEntryMetric(
-      entries[2], UkmFieldInfoType::kFormControlType2Name,
-      base::to_underlying(FormControlType::kSelectList));
-}
-
 // Tests that the field which is in a different frame than its form is recorded
 // as AutofillStatus::kIsInSubFrame.
 TEST_F(AutofillMetricsFromLogEventsTest,
diff --git a/components/autofill/core/browser/mock_autofill_manager.h b/components/autofill/core/browser/mock_autofill_manager.h
index 2c3a301..6de642c 100644
--- a/components/autofill/core/browser/mock_autofill_manager.h
+++ b/components/autofill/core/browser/mock_autofill_manager.h
@@ -38,7 +38,7 @@
   MOCK_METHOD(void, OnDidEndTextFieldEditingImpl, (), (override));
   MOCK_METHOD(void, OnHidePopupImpl, (), (override));
   MOCK_METHOD(void,
-              OnSelectOrSelectListFieldOptionsDidChangeImpl,
+              OnSelectFieldOptionsDidChangeImpl,
               (const FormData& form),
               (override));
   MOCK_METHOD(void,
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 ab87b623..5d1e5e4e8 100644
--- a/components/autofill/core/browser/mock_autofill_plus_address_delegate.h
+++ b/components/autofill/core/browser/mock_autofill_plus_address_delegate.h
@@ -23,6 +23,7 @@
               IsPlusAddressFillingEnabled,
               (const url::Origin& origin),
               (const override));
+  MOCK_METHOD(bool, IsPlusAddressFullFormFillingEnabled, (), (const override));
   MOCK_METHOD(void,
               GetAffiliatedPlusAddresses,
               (const url::Origin& origin,
diff --git a/components/autofill/core/browser/payments_data_manager_unittest.cc b/components/autofill/core/browser/payments_data_manager_unittest.cc
index 669308e3..27132f0b 100644
--- a/components/autofill/core/browser/payments_data_manager_unittest.cc
+++ b/components/autofill/core/browser/payments_data_manager_unittest.cc
@@ -1280,6 +1280,32 @@
   EXPECT_EQ(2U, credit_cards.size());
 }
 
+// Tests case-insensitive deduping of the name field, i.e. the server card is
+// kept for duplicate cards except different name casing.
+TEST_F(PaymentsDataManagerTest, DedupeCreditCardToSuggest_CaseInsensitiveName) {
+  std::list<CreditCard*> credit_cards;
+
+  CreditCard local_card("1141084B-72D7-4B73-90CF-3D6AC154673B",
+                        test::kEmptyOrigin);
+  test::SetCreditCardInfo(&local_card, "homer simpson",
+                          "4234567890123456" /* Visa */, "01", "2999", "1");
+  credit_cards.push_back(&local_card);
+
+  // Create a masked server card that is a duplicate of a local card except name
+  // casing.
+  CreditCard masked_card(CreditCard::RecordType::kMaskedServerCard, "a123");
+  test::SetCreditCardInfo(&masked_card, "Homer Simpson", "3456" /* Visa */,
+                          "01", "2999", "1");
+  masked_card.SetNetworkForMaskedCard(kVisaCard);
+  credit_cards.push_back(&masked_card);
+
+  PaymentsDataManager::DedupeCreditCardToSuggest(&credit_cards);
+  ASSERT_EQ(1U, credit_cards.size());
+
+  // Verify `masked_card` is returned after deduping `credit_cards` list.
+  EXPECT_EQ(*credit_cards.front(), masked_card);
+}
+
 TEST_F(PaymentsDataManagerTest, DeleteLocalCreditCards) {
   CreditCard credit_card1(base::Uuid::GenerateRandomV4().AsLowercaseString(),
                           test::kEmptyOrigin);
diff --git a/components/autofill/core/common/autofill_test_utils.cc b/components/autofill/core/common/autofill_test_utils.cc
index 596226f3..143a1d8 100644
--- a/components/autofill/core/common/autofill_test_utils.cc
+++ b/components/autofill/core/common/autofill_test_utils.cc
@@ -207,9 +207,9 @@
                                     std::string_view autocomplete,
                                     const std::vector<const char*>& values,
                                     const std::vector<const char*>& contents) {
-  return CreateTestSelectOrSelectListField(
-      label, name, value, autocomplete, values, contents,
-      /*type=*/FormControlType::kSelectOne);
+  return CreateTestSelectField(label, name, value, autocomplete, values,
+                               contents,
+                               /*type=*/FormControlType::kSelectOne);
 }
 
 FormFieldData CreateTestSelectField(const std::vector<const char*>& values) {
@@ -218,16 +218,14 @@
                                /*contents=*/values);
 }
 
-FormFieldData CreateTestSelectOrSelectListField(
-    std::string_view label,
-    std::string_view name,
-    std::string_view value,
-    std::string_view autocomplete,
-    const std::vector<const char*>& values,
-    const std::vector<const char*>& contents,
-    FormControlType type) {
-  CHECK(type == FormControlType::kSelectOne ||
-        type == FormControlType::kSelectList);
+FormFieldData CreateTestSelectField(std::string_view label,
+                                    std::string_view name,
+                                    std::string_view value,
+                                    std::string_view autocomplete,
+                                    const std::vector<const char*>& values,
+                                    const std::vector<const char*>& contents,
+                                    FormControlType type) {
+  CHECK(type == FormControlType::kSelectOne);
   FormFieldData field = CreateTestFormField(label, name, value, type);
   field.set_autocomplete_attribute(std::string(autocomplete));
   field.set_parsed_autocomplete(ParseAutocompleteAttribute(autocomplete));
diff --git a/components/autofill/core/common/autofill_test_utils.h b/components/autofill/core/common/autofill_test_utils.h
index 153759b..cb7284d 100644
--- a/components/autofill/core/common/autofill_test_utils.h
+++ b/components/autofill/core/common/autofill_test_utils.h
@@ -180,7 +180,7 @@
 [[nodiscard]] FormFieldData CreateTestSelectField(
     const std::vector<const char*>& values);
 
-[[nodiscard]] FormFieldData CreateTestSelectOrSelectListField(
+[[nodiscard]] FormFieldData CreateTestSelectField(
     std::string_view label,
     std::string_view name,
     std::string_view value,
diff --git a/components/autofill/core/common/form_field_data.cc b/components/autofill/core/common/form_field_data.cc
index 0a522a3..5ab009b041 100644
--- a/components/autofill/core/common/form_field_data.cc
+++ b/components/autofill/core/common/form_field_data.cc
@@ -395,14 +395,6 @@
   return form_control_type() == FormControlType::kSelectOne;
 }
 
-bool FormFieldData::IsSelectListElement() const {
-  return form_control_type() == FormControlType::kSelectList;
-}
-
-bool FormFieldData::IsSelectOrSelectListElement() const {
-  return IsSelectElement() || IsSelectListElement();
-}
-
 bool FormFieldData::DidUserType() const {
   return properties_mask() & kUserTyped;
 }
@@ -465,8 +457,6 @@
       return "select-one";
     case FormControlType::kSelectMultiple:
       return "select-multiple";
-    case FormControlType::kSelectList:
-      return "selectlist";
     case FormControlType::kTextArea:
       return "textarea";
   }
@@ -479,7 +469,8 @@
   for (auto i = base::to_underlying(FormControlType::kMinValue);
        i <= base::to_underlying(FormControlType::kMaxValue); ++i) {
     FormControlType type = static_cast<FormControlType>(i);
-    if (type_string == autofill::FormControlTypeToString(type)) {
+    if (mojom::IsKnownEnumValue(type) &&
+        type_string == autofill::FormControlTypeToString(type)) {
       return type;
     }
   }
diff --git a/components/autofill/core/common/form_field_data.h b/components/autofill/core/common/form_field_data.h
index 8e405c26..a1e730d8 100644
--- a/components/autofill/core/common/form_field_data.h
+++ b/components/autofill/core/common/form_field_data.h
@@ -250,7 +250,6 @@
 
   bool IsPasswordInputElement() const;
 
-  // <select> and <selectlist> are treated the same in Autofill except that
   // <select> gets special handling when it comes to unfocusable fields. The
   // motivation for this exception is that synthetic select fields often come
   // with an unfocusable <select> element.
@@ -262,8 +261,6 @@
   // support synthetic select fields, Autofill intentionally fills unfocusable
   // <select> elements.
   bool IsSelectElement() const;
-  bool IsSelectListElement() const;
-  bool IsSelectOrSelectListElement() const;
 
   // Returns true if the field is focusable to the user.
   // This is an approximation of visibility with false positives.
diff --git a/components/autofill/core/common/mojom/autofill_types.mojom b/components/autofill/core/common/mojom/autofill_types.mojom
index e33c69e3..7e8ac51 100644
--- a/components/autofill/core/common/mojom/autofill_types.mojom
+++ b/components/autofill/core/common/mojom/autofill_types.mojom
@@ -28,7 +28,7 @@
   kInputUrl = 10,
   kSelectOne = 11,
   kSelectMultiple = 12,
-  kSelectList = 13,
+  // deprecated: kSelectList = 13
   kTextArea = 14,
 };
 
diff --git a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_filling_engine_impl.cc b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_filling_engine_impl.cc
index 5cd624e..a1ba10c 100644
--- a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_filling_engine_impl.cc
+++ b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_filling_engine_impl.cc
@@ -135,7 +135,7 @@
           filled_form_field_proto.predicted_values()[0].value());
       std::optional<std::u16string> select_option_text = std::nullopt;
 
-      if (field.IsSelectOrSelectListElement()) {
+      if (field.IsSelectElement()) {
         // Reject the prediction if it equals the currently selected option.
         if (field.selected_option().has_value() &&
             field.selected_option()->value == predicted_value) {
diff --git a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.cc b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.cc
index fb9631d7..e923a85 100644
--- a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.cc
+++ b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.cc
@@ -350,6 +350,14 @@
     AutofillPredictionImprovementsFillingEngine::PredictionsOrError
         predictions_or_error,
     std::optional<std::string> feedback_id) {
+  // If the timeout suggestion is still running, it means we retrieved the
+  // predictions before timeout threshold. Otherwise it means we're too late and
+  // should discard the received predictions.
+  if (!suggestion_timeout_timer_.IsRunning()) {
+    return;
+  }
+  suggestion_timeout_timer_.Stop();
+
   if (predictions_or_error.has_value()) {
     cache_ = predictions_or_error.value();
     feedback_id_ = feedback_id;
@@ -429,6 +437,15 @@
   update_suggestions_callback_ = std::move(update_suggestions_callback);
   UpdateSuggestions({CreateLoadingSuggestion()});
   ExtractPredictionImprovementsForFormFields(form, trigger_field);
+
+  // In order to not show the loading suggestion for too long, which would be a
+  // poor UX, we set a limit before timeout and show an error suggestion if
+  // fetching the suggestion takes more time than this limit.
+  suggestion_timeout_timer_.Start(
+      FROM_HERE, kMaxLoadingTimeBeforeTimeout,
+      base::BindRepeating(
+          &AutofillPredictionImprovementsManager::UpdateSuggestions,
+          weak_ptr_factory_.GetWeakPtr(), CreateErrorSuggestions()));
 }
 
 void AutofillPredictionImprovementsManager::Reset() {
@@ -436,6 +453,7 @@
   update_suggestions_callback_ = base::NullCallback();
   feedback_id_ = std::nullopt;
   loading_suggestion_timer_.Stop();
+  suggestion_timeout_timer_.Stop();
 }
 
 void AutofillPredictionImprovementsManager::UpdateSuggestions(
diff --git a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.h b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.h
index 43f9c2c..5c946fd5 100644
--- a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.h
+++ b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager.h
@@ -34,6 +34,11 @@
 inline constexpr base::TimeDelta kMinTimeToShowLoading =
     base::Milliseconds(300);
 
+// Maximum time for showing the loading suggestion to the user before timeout.
+// TODO(crbug.com/365512352): Evaluate what constant is best for this purpose.
+inline constexpr base::TimeDelta kMaxLoadingTimeBeforeTimeout =
+    base::Seconds(10);
+
 // The class for embedder-independent, tab-specific
 // autofill_prediction_improvements logic. This class is an interface.
 class AutofillPredictionImprovementsManager
@@ -156,6 +161,10 @@
   // quickly.
   base::OneShotTimer loading_suggestion_timer_;
 
+  // Timer to decide when to timeout-terminate fetching suggestions so that we
+  // don't give the user long periods of loading.
+  base::OneShotTimer suggestion_timeout_timer_;
+
   // The `decider_` is used to check if the
   // `AUTOFILL_PREDICTION_IMPROVEMENTS_ALLOWLIST` optimization guide can be
   // applied to the main frame's last committed URL. `decider_` is null if the
diff --git a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager_unittest.cc b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager_unittest.cc
index 6471a9f..4d18f16 100644
--- a/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager_unittest.cc
+++ b/components/autofill_prediction_improvements/core/browser/autofill_prediction_improvements_manager_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/test/gmock_move_support.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
+#include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_form_test_utils.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/form_structure_test_api.h"
@@ -237,6 +238,49 @@
   EXPECT_FALSE(manager_->IsFormBlockedForImport(form2));
 }
 
+// Tests that suggestion generation times out after
+// `kMaxLoadingTimeBeforeTimeout` passes while displaying the loading suggestion
+// and not getting a PredictionReceived callback.
+TEST_F(AutofillPredictionImprovementsManagerTest, RetrievePredictionsTimeOut) {
+  base::test::SingleThreadTaskEnvironment task_environment{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+
+  autofill::test::FormDescription form_description = {
+      .fields = {{.role = autofill::NAME_FIRST,
+                  .heuristic_type = autofill::NAME_FIRST}}};
+  autofill::FormData form = autofill::test::GetFormData(form_description);
+
+  base::MockCallback<autofill::AutofillPredictionImprovementsDelegate::
+                         UpdateSuggestionsCallback>
+      update_suggestions_callback;
+  std::vector<Suggestion> loading_suggestion;
+  std::vector<Suggestion> error_suggestions;
+  {
+    InSequence s;
+    EXPECT_CALL(update_suggestions_callback, Run)
+        .WillOnce(SaveArg<0>(&loading_suggestion));
+    EXPECT_CALL(update_suggestions_callback, Run)
+        .WillOnce(SaveArg<0>(&error_suggestions));
+  }
+
+  // Since `manager_` has a reference to a mocked `client_`, and no special
+  // treatment was done to that client, no predictions will be retrieved.
+  manager_->OnClickedTriggerSuggestion(form, form.fields().front(),
+                                       update_suggestions_callback.Get());
+  task_environment.FastForwardBy(kMaxLoadingTimeBeforeTimeout +
+                                 base::Seconds(1));
+
+  EXPECT_THAT(loading_suggestion,
+              ElementsAre(HasType(
+                  SuggestionType::kPredictionImprovementsLoadingState)));
+  EXPECT_THAT(
+      error_suggestions,
+      ElementsAre(HasType(SuggestionType::kPredictionImprovementsError),
+                  HasType(SuggestionType::kSeparator),
+                  HasType(SuggestionType::kPredictionImprovementsDetails),
+                  HasType(SuggestionType::kPredictionImprovementsFeedback)));
+}
+
 // Tests that the `update_suggestions_callback` is called eventually with the
 // `kFillPredictionImprovements` suggestion.
 TEST_F(AutofillPredictionImprovementsManagerTest, EndToEnd) {
@@ -670,6 +714,7 @@
 
 TEST_F(ShouldProvideAutofillPredictionImprovementsTest,
        DoesNotExtractImprovedPredictionsIfFlagDisabled) {
+  base::test::SingleThreadTaskEnvironment task_environment;
   feature_.InitAndDisableFeature(kAutofillPredictionImprovements);
   AutofillPredictionImprovementsManager manager{&client_, &decider_,
                                                 &strike_database_};
@@ -703,6 +748,7 @@
 
 TEST_F(ShouldProvideAutofillPredictionImprovementsTest,
        DoesNotExtractImprovedPredictionsIfDeciderIsNull) {
+  base::test::SingleThreadTaskEnvironment task_environment;
   feature_.InitAndEnableFeatureWithParameters(kAutofillPredictionImprovements,
                                               {{"skip_allowlist", "true"}});
   AutofillPredictionImprovementsManager manager{&client_, nullptr,
@@ -737,6 +783,7 @@
 
 TEST_F(ShouldProvideAutofillPredictionImprovementsTest,
        ExtractsImprovedPredictionsIfSkipAllowlistIsTrue) {
+  base::test::SingleThreadTaskEnvironment task_environment;
   feature_.InitAndEnableFeatureWithParameters(kAutofillPredictionImprovements,
                                               {{"skip_allowlist", "true"}});
   AutofillPredictionImprovementsManager manager{&client_, &decider_,
@@ -759,6 +806,7 @@
 
 TEST_F(ShouldProvideAutofillPredictionImprovementsTest,
        DoesNotExtractImprovedPredictionsIfPrefIsDisabled) {
+  base::test::SingleThreadTaskEnvironment task_environment;
   feature_.InitAndEnableFeatureWithParameters(kAutofillPredictionImprovements,
                                               {{"skip_allowlist", "true"}});
   AutofillPredictionImprovementsManager manager{&client_, &decider_,
@@ -795,6 +843,7 @@
 
 TEST_F(ShouldProvideAutofillPredictionImprovementsTest,
        DoesNotExtractImprovedPredictionsIfOptimizationGuideCannotBeApplied) {
+  base::test::SingleThreadTaskEnvironment task_environment;
   feature_.InitAndEnableFeatureWithParameters(kAutofillPredictionImprovements,
                                               {{"skip_allowlist", "false"}});
   AutofillPredictionImprovementsManager manager{&client_, &decider_,
@@ -832,6 +881,7 @@
 
 TEST_F(ShouldProvideAutofillPredictionImprovementsTest,
        ExtractsImprovedPredictionsIfOptimizationGuideCanBeApplied) {
+  base::test::SingleThreadTaskEnvironment task_environment;
   feature_.InitAndEnableFeatureWithParameters(kAutofillPredictionImprovements,
                                               {{"skip_allowlist", "false"}});
   AutofillPredictionImprovementsManager manager{&client_, &decider_,
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 ebfb46ed2..ddf9a22 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
@@ -49,6 +49,7 @@
 <translation id="1979673356880165407">Ingrandisci o riduci testo e immagini per tutti i siti visitati</translation>
 <translation id="1984937141057606926">Consentiti, tranne i cookie di terze parti</translation>
 <translation id="1985247341569771101">Quando l'opzione è attiva, i siti possono usare i sensori di movimento del dispositivo. Quando l'opzione non è attiva, i siti non possono utilizzare i sensori di movimento.</translation>
+<translation id="1985716030964443178">Questa operazione ripristinerà lo zoom predefinito per tutti i siti nell'elenco</translation>
 <translation id="1989112275319619282">Esplora</translation>
 <translation id="1994173015038366702">URL sito</translation>
 <translation id="2004697686368036666">Le funzionalità su alcuni siti potrebbero non essere disponibili</translation>
@@ -103,6 +104,7 @@
 <translation id="2653659639078652383">Invia</translation>
 <translation id="2677748264148917807">Esci</translation>
 <translation id="2678468611080193228">Prova a consentire temporaneamente i cookie di terze parti, il che significa meno protezione, ma è più probabile che le funzionalità del sito funzionino.</translation>
+<translation id="2682367912565197520">Elimina il livello di zoom salvato</translation>
 <translation id="2683434792633810741">Vuoi eliminare e reimpostare?</translation>
 <translation id="2713106313042589954">Disattiva fotocamera</translation>
 <translation id="2717722538473713889">Indirizzi email</translation>
@@ -209,6 +211,7 @@
 <translation id="4338831206024587507">Tutti i siti in <ph name="DOMAIN" /></translation>
 <translation id="4402755511846832236">Impedisci ai siti di sapere quando usi attivamente questo dispositivo</translation>
 <translation id="4412992751769744546">Consenti cookie di terze parti</translation>
+<translation id="4419929467120297501">Chrome impedisce ai siti di utilizzare i cookie di terze parti per monitorare la tua navigazione. Vai alle impostazioni per <ph name="BEGIN_LINK" />gestire l'accesso ai cookie di terze parti<ph name="END_LINK" />.</translation>
 <translation id="4434045419905280838">Popup e reindirizzamenti</translation>
 <translation id="443552056913301231">Questa azione eliminerà tutti i dati locali, compresi i cookie, e reimposterà tutte le autorizzazioni per <ph name="ORIGIN" /></translation>
 <translation id="4468959413250150279">Disattiva l'audio per un sito specifico.</translation>
@@ -230,6 +233,7 @@
 <translation id="4779083564647765204">Zoom</translation>
 <translation id="4807122856660838973">Attiva Navigazione sicura</translation>
 <translation id="4811450222531576619">Scopri la fonte e l'argomento</translation>
+<translation id="4816495437032298535">Zoom salvato per i siti</translation>
 <translation id="4836046166855586901">Chiedi conferma quando un sito vuole sapere quando usi attivamente questo dispositivo</translation>
 <translation id="483914009762354899">Includi tutti i siti di questo dominio</translation>
 <translation id="4883854917563148705">Le impostazioni gestite non possono essere reimpostate</translation>
@@ -266,6 +270,7 @@
 <translation id="5246825184569358663">Questa azione eliminerà tutti i dati locali, compresi i cookie, e reimposterà tutte le autorizzazioni per <ph name="DOMAIN" /> e per tutti i siti secondari</translation>
 <translation id="5264323282659631142">Rimuovi "<ph name="CHIP_LABEL" />"</translation>
 <translation id="528192093759286357">Trascina dall'alto e tocca il pulsante Indietro per uscire dalla modalità a schermo intero.</translation>
+<translation id="5292915569214461965">Hai impedito ai siti di utilizzare i cookie di terze parti per monitorare la tua navigazione. Vai alle impostazioni per <ph name="BEGIN_LINK" />gestire l'accesso ai cookie di terze parti<ph name="END_LINK" />.</translation>
 <translation id="5295729974480418933">Quando l'opzione è attiva, i siti possono chiedere di utilizzare le informazioni su di te che hanno salvato. Quando l'opzione è disattivata, i siti non possono chiederti di usare le informazioni su di te che hanno salvato.</translation>
 <translation id="5300589172476337783">Mostra</translation>
 <translation id="5301954838959518834">OK</translation>
@@ -377,6 +382,7 @@
 <translation id="6787751205395685251">Seleziona un'opzione per <ph name="SITE_NAME" /></translation>
 <translation id="6790428901817661496">Riproduci</translation>
 <translation id="6818926723028410516">Seleziona elementi</translation>
+<translation id="6837658163275294267">Chrome limita l'utilizzo dei cookie di terze parti per il monitoraggio della tua navigazione per la maggior parte dei siti. Vai alle impostazioni per <ph name="BEGIN_LINK" />gestire l'accesso ai cookie di terze parti<ph name="END_LINK" /></translation>
 <translation id="6838525730752203626">Usa Chrome per impostazione predefinita</translation>
 <translation id="6840760312327750441">Per raggruppare le schede, tocca e tienine premuta una. Poi trascinala su un'altra scheda.</translation>
 <translation id="6864395892908308021">Questo dispositivo non può leggere la tecnologia NFC</translation>
@@ -441,6 +447,7 @@
 <translation id="7835852323729233924">Riproduzione media</translation>
 <translation id="783819812427904514">Riattiva audio video</translation>
 <translation id="7846076177841592234">Annulla selezione</translation>
+<translation id="7881140103901777395">Chrome limita l'utilizzo dei cookie di terze parti per la maggior parte dei siti. Tuttavia, i cookie di terze parti sono consentiti su questo sito perché si basa su di questi cookie per fornire servizi di base.\n\nVai alle impostazioni per <ph name="BEGIN_LINK" />gestire l'accesso ai cookie di terze parti<ph name="END_LINK" />.</translation>
 <translation id="7882806643839505685">Consenti l'audio per un sito specifico.</translation>
 <translation id="789180354981963912">Blocca cookie di terze parti nella modalità di navigazione in incognito:</translation>
 <translation id="7940722705963108451">Ricordami</translation>
@@ -503,6 +510,7 @@
 <translation id="8721719390026067591">Quando l'opzione è attiva, i siti potrebbero chiedere di cercare dispositivi Bluetooth. Quando l'opzione è disattivata, i siti non possono cercare dispositivi Bluetooth.</translation>
 <translation id="8725066075913043281">Riprova</translation>
 <translation id="8730621377337864115">Fine</translation>
+<translation id="8737426583868847403">I siti per i quali salvi un livello di zoom personalizzato verranno visualizzati qui</translation>
 <translation id="8751914237388039244">Seleziona un'immagine</translation>
 <translation id="8800034312320686233">Il sito non funziona?</translation>
 <translation id="8801436777607969138">Blocca JavaScript per un sito specifico.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
index b06bf15..4cafd7a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
@@ -49,6 +49,7 @@
 <translation id="1979673356880165407">Сиз баш баккан бардык сайттарда текстти жана сүрөттөрдү чоңойтуп же кичирейтиңиз</translation>
 <translation id="1984937141057606926">Уруксат берилген, үчүнчү жактан башкаларга</translation>
 <translation id="1985247341569771101">Бул параметр күйүп турганда, сайттар түзмөктүн кыймыл сенсорлорун колдоно алышат. Бул параметр өчүп турганда, сайттар кыймыл сенсорлорун колдоно алышпайт.</translation>
+<translation id="1985716030964443178">Бул тизмеңиздеги бардык сайттарды демейки чоңойтуп/кичирейтүүгө кайтарат</translation>
 <translation id="1989112275319619282">Серептөө</translation>
 <translation id="1994173015038366702">Сайт URL'и</translation>
 <translation id="2004697686368036666">Функциялар айрым сайттарда иштебеши мүмкүн</translation>
@@ -103,6 +104,7 @@
 <translation id="2653659639078652383">Тапшыруу</translation>
 <translation id="2677748264148917807">Чыгуу</translation>
 <translation id="2678468611080193228">Үчүнчү тараптын cookie файлдарына убактылуу уруксат берип көрүңүз. Мында коопсуздугуңуз азыраак корголот, бирок сайттын функциялары иштеши мүмкүн</translation>
+<translation id="2682367912565197520">Сакталган чоңойтуп/кичирейтүү деңгээлин өчүрүү</translation>
 <translation id="2683434792633810741">Өчүрүлүп, баштапкы абалга келтирилсинби?</translation>
 <translation id="2713106313042589954">Камераны өчүрүү</translation>
 <translation id="2717722538473713889">Электрондук почта даректери</translation>
@@ -209,6 +211,7 @@
 <translation id="4338831206024587507"><ph name="DOMAIN" /> домениндеги бардык сайттар</translation>
 <translation id="4402755511846832236">Түзмөгүңүз активдүү колдонулуп жаткан учур сайттардан жашырылсын</translation>
 <translation id="4412992751769744546">Үчнчү жактн кукилрне урукст брүү</translation>
+<translation id="4419929467120297501">Chrome сайттардын Интернеттеги аракеттериңизге көз салуу мүмкүнчүлүгүн берген үчүнчү тараптын cookie файлдарын колдонуу мүмкүнчүлүгүн бөгөттөйт. <ph name="BEGIN_LINK" />Үчүнчү тараптын cookie файлдарына кирүү мүмкүнчүлүгүн тескөө<ph name="END_LINK" /> үчүн параметрлерге өтүңүз.</translation>
 <translation id="4434045419905280838">Калкыма терезелер жана багыттоолор</translation>
 <translation id="443552056913301231">Бул аракет түзмөктөгү бардык маалыматты, анын ичинде cookie файлдарын өчүрүп, <ph name="ORIGIN" /> сайтынын бардык уруксаттарын баштапкы абалга келтирет</translation>
 <translation id="4468959413250150279">Белгилүү бир сайттын үнүн өчүрүү.</translation>
@@ -230,6 +233,7 @@
 <translation id="4779083564647765204">Ченөлчөм</translation>
 <translation id="4807122856660838973">Коопсуз серептөөнү күйгүзүү</translation>
 <translation id="4811450222531576619">Булагы жана темасы тууралуу кеңири маалымат</translation>
+<translation id="4816495437032298535">Сайттар үчүн сакталган чоңойтуп/кичирейтүү</translation>
 <translation id="4836046166855586901">Сайт түзмөктү активдүү колдонуп жаткан учур тууралуу билгиси келгенде уруксат суралсын</translation>
 <translation id="483914009762354899">Бул домендеги бардык сайттарды камтуу</translation>
 <translation id="4883854917563148705">Башкарылган параметрлерди баштапкы абалга келтирүүгө болбойт</translation>
@@ -266,6 +270,7 @@
 <translation id="5246825184569358663">Бул аракет түзмөктөгү бардык маалыматты, анын ичинде cookie файлдарын өчүрүп, <ph name="DOMAIN" /> сайтынын жана ага байланыштуу сайттардын бардык уруксаттарын баштапкы абалга келтирет</translation>
 <translation id="5264323282659631142">"<ph name="CHIP_LABEL" />" өчүрүү</translation>
 <translation id="528192093759286357">Толук экрандан чыгуу үчүн жогорудан ылдый сүйрөп келип, "Артка" деген баскычка тийип коюңуз.</translation>
+<translation id="5292915569214461965">Сайттарга Интернеттеги аракеттериңизге көз салуу максатында үчүнчү тараптын cookie файлдарын колдонууга тыюу салдыңыз. <ph name="BEGIN_LINK" />Үчүнчү тараптын cookie файлдарына кирүү мүмкүнчүлүгүн тескөө<ph name="END_LINK" /> үчүн параметрлерге өтүңүз.</translation>
 <translation id="5295729974480418933">Бул параметр күйүп турганда, сайттар сиз жөнүндө сакталган маалыматты колдонууга уруксат сурашы мүмкүн. Бул параметр өчүп турганда, сайттар сиз жөнүндө сакталган маалыматты колдонууга уруксат сурай албайт.</translation>
 <translation id="5300589172476337783">Көрсөтүү</translation>
 <translation id="5301954838959518834">Жарайт, түшүндүм</translation>
@@ -377,6 +382,7 @@
 <translation id="6787751205395685251"><ph name="SITE_NAME" /> үчүн параметр тандаңыз</translation>
 <translation id="6790428901817661496">Ойнотуу</translation>
 <translation id="6818926723028410516">Элементтерди тандоо</translation>
+<translation id="6837658163275294267">Chrome көптөгөн сайттардын Интернеттеги аракеттериңизге көз салуу максатында үчүнчү тараптын cookie файлдарын колдонуу мүмкүнчүлүгүн чектейт. <ph name="BEGIN_LINK" />Үчүнчү тараптын cookie файлдарына кирүү мүмкүнчүлүгүн тескөө<ph name="END_LINK" /> үчүн параметрлерге өтүңүз</translation>
 <translation id="6838525730752203626">Chrome’ду демейки катары колдонуу</translation>
 <translation id="6840760312327750441">Өтмөктөрдү топко кошуу үчүн алардын бирин басып кармап туруңуз. Андан кийин аны башка өтмөккө сүйрөңүз.</translation>
 <translation id="6864395892908308021">Бул түзмөк NFC'ни окуй албайт</translation>
@@ -441,6 +447,7 @@
 <translation id="7835852323729233924">Медиа ойнотулууда</translation>
 <translation id="783819812427904514">Видеонун үнүн чыгаруу</translation>
 <translation id="7846076177841592234">Тандоону жокко чыгаруу</translation>
+<translation id="7881140103901777395">Chrome көпчүлүк сайттардын үчүнчү тараптын cookie файлдарын колдонуу мүмкүнчүлүгүн чектейт. Бирок бул сайтта үчүнчү тараптын cookie файлдарын колдонууга уруксат берилген, анткени бул негизги кызматтарды көрсөтүү үчүн керек.\n\n<ph name="BEGIN_LINK" />Үчүнчү тараптын cookie файлдарына кирүү мүмкүнчүлүгүн тескөө<ph name="END_LINK" /> үчүн параметрлерге өтүңүз.</translation>
 <translation id="7882806643839505685">Белгилүү бир сайтка добуш чыгарууга уруксат берүү.</translation>
 <translation id="789180354981963912">Жашыруун режимде үчүнчү тараптын cookie файлдарын бөгөттөө:</translation>
 <translation id="7940722705963108451">Эскертилсин</translation>
@@ -503,6 +510,7 @@
 <translation id="8721719390026067591">Бул параметр күйүп турганда, сайттар Bluetooth түзмөктөрүн издөөгө уруксат сурашы мүмкүн. Бул параметр өчүп турганда, сайттар Bluetooth түзмөктөрүн издей алышпайт.</translation>
 <translation id="8725066075913043281">Кайра аракет кылып көрүү</translation>
 <translation id="8730621377337864115">Бүттү</translation>
+<translation id="8737426583868847403">Ыңгайлаштырылган масштабдоо деңгээли сакталган сайттар бул жерде пайда болот</translation>
 <translation id="8751914237388039244">Сүрөт тандоо</translation>
 <translation id="8800034312320686233">Сайт иштебей жатабы?</translation>
 <translation id="8801436777607969138">Белгилүү бир сайтта JavaScript'ти бөгөттөө.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
index 5956d90..044cf7a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
@@ -49,6 +49,7 @@
 <translation id="1979673356880165407">Padidinkite arba sumažinkite tekstą ir vaizdus visose svetainėse, kuriose lankotės</translation>
 <translation id="1984937141057606926">Leidžiama (išskyrus trečiąsias šalis)</translation>
 <translation id="1985247341569771101">Įjungus svetainėse gali būti naudojami įrenginio judesio jutikliai. Išjungus svetainėse negalima naudoti judesio jutiklių.</translation>
+<translation id="1985716030964443178">Bus iš naujo nustatytas numatytasis visų sąraše esančių svetainių mastelis</translation>
 <translation id="1989112275319619282">Naršyti</translation>
 <translation id="1994173015038366702">Svetainės URL</translation>
 <translation id="2004697686368036666">Funkcijos gali neveikti kai kuriose svetainėse</translation>
@@ -103,6 +104,7 @@
 <translation id="2653659639078652383">Pateikti</translation>
 <translation id="2677748264148917807">Išeiti</translation>
 <translation id="2678468611080193228">Pabandykite laikinai leisti trečiųjų šalių slapukus, o tai reiškia, kad turėsite mažiau apsaugos, bet labiau tikėtina, kad svetainės funkcijos veiks</translation>
+<translation id="2682367912565197520">Ištrinti išsaugotą mastelio lygį</translation>
 <translation id="2683434792633810741">Ištrinti ir nustatyti iš naujo?</translation>
 <translation id="2713106313042589954">Išjungti fotoaparatą</translation>
 <translation id="2717722538473713889">El. pašto adresai</translation>
@@ -209,6 +211,7 @@
 <translation id="4338831206024587507">Visos svetainės su domenu <ph name="DOMAIN" /></translation>
 <translation id="4402755511846832236">Neleisti svetainėms žinoti, kada aktyviai naudojate šį įrenginį</translation>
 <translation id="4412992751769744546">Leisti trečiųjų šalių slapukus</translation>
+<translation id="4419929467120297501">„Chrome“ neleidžia svetainėms naudoti trečiųjų šalių slapukų, siekiant jus stebėti, kai naršote. Apsilankykite nustatymuose, kad galėtumėte <ph name="BEGIN_LINK" />tvarkyti prieigą prie trečiųjų šalių slapukų<ph name="END_LINK" />.</translation>
 <translation id="4434045419905280838">Iššok. langai ir peradresavimai</translation>
 <translation id="443552056913301231">Atlikus šį veiksmą bus ištrinti visi vietiniai duomenys, įskaitant slapukus, iš naujo nustatyti visi<ph name="ORIGIN" /> leidimai</translation>
 <translation id="4468959413250150279">Konkrečios svetainės garso išjungimas.</translation>
@@ -230,6 +233,7 @@
 <translation id="4779083564647765204">Keisti mastelį</translation>
 <translation id="4807122856660838973">Įjunkite Saugų naršymą</translation>
 <translation id="4811450222531576619">Sužinokite apie jo šaltinį ir temą</translation>
+<translation id="4816495437032298535">Išsaugotas svetainių mastelis</translation>
 <translation id="4836046166855586901">Klausti, kai svetainė nori žinoti, kada aktyviai naudojate šį įrenginį</translation>
 <translation id="483914009762354899">Įtraukti visas šio domeno svetaines</translation>
 <translation id="4883854917563148705">Tvarkomų nustatymų negalima nustatyti iš naujo</translation>
@@ -266,6 +270,7 @@
 <translation id="5246825184569358663">Atlikus šį veiksmą bus ištrinti visi vietiniai duomenys, įskaitant slapukus, taip pat bus iš naujo nustatyti visi <ph name="DOMAIN" /> ir jame esančių svetainių leidimai</translation>
 <translation id="5264323282659631142">Pašalinti „<ph name="CHIP_LABEL" />“</translation>
 <translation id="528192093759286357">Vilkite žymeklį nuo viršaus ir palieskite mygtuką „Atgal“, kad išeitumėte iš viso ekrano režimo.</translation>
+<translation id="5292915569214461965">Užblokavote svetaines, kad nebūtų naudojami trečiųjų šalių slapukai, siekiant jus stebėti, kai naršote. Apsilankykite nustatymuose, kad galėtumėte <ph name="BEGIN_LINK" />tvarkyti prieigą prie trečiųjų šalių slapukų<ph name="END_LINK" />.</translation>
 <translation id="5295729974480418933">Įjungus svetainėse gali būti prašoma naudoti apie jus išsaugotą informaciją. Išjungus svetainėse negali būti prašoma naudoti apie jus išsaugotos informacijos.</translation>
 <translation id="5300589172476337783">Rodyti</translation>
 <translation id="5301954838959518834">Gerai, supratau</translation>
@@ -377,6 +382,7 @@
 <translation id="6787751205395685251">Pasirinkite <ph name="SITE_NAME" /> parinktį</translation>
 <translation id="6790428901817661496">Žaisti</translation>
 <translation id="6818926723028410516">Pasirinkite elementus</translation>
+<translation id="6837658163275294267">„Chrome“ daugelyje svetainių riboja trečiųjų šalių slapukų naudojimą, siekiant stebėti jus, kai naršote. Apsilankykite nustatymuose, kad galėtumėte <ph name="BEGIN_LINK" />tvarkyti prieigą prie trečiųjų šalių slapukų<ph name="END_LINK" /></translation>
 <translation id="6838525730752203626">„Chrome“ naudojimas pagal numatytuosius nustatymus</translation>
 <translation id="6840760312327750441">Norėdami grupuoti skirtukus, palieskite ir palaikykite skirtuką. Tada nuvilkite jį į kitą skirtuką.</translation>
 <translation id="6864395892908308021">Šis įrenginys negali nuskaityti ALR</translation>
@@ -441,6 +447,7 @@
 <translation id="7835852323729233924">Leidžiama medija</translation>
 <translation id="783819812427904514">Įjungti vaizdo įrašo garsą</translation>
 <translation id="7846076177841592234">Atšaukti pasirinkimą</translation>
+<translation id="7881140103901777395">„Chrome“ daugelyje svetainių riboja trečiųjų šalių slapukų naudojimą. Tačiau trečiųjų šalių slapukai leidžiami šioje svetainėje, nes jie priklauso nuo jų teikiamų pagrindinių paslaugų.\n\nApsilankykite nustatymuose, kad galėtumėte <ph name="BEGIN_LINK" />tvarkyti prieigą prie trečiųjų šalių slapukų<ph name="END_LINK" />.</translation>
 <translation id="7882806643839505685">Konkrečios svetainės garso leidimas.</translation>
 <translation id="789180354981963912">Blokuoti trečiųjų šalių slapukus inkognito režimu:</translation>
 <translation id="7940722705963108451">Priminti</translation>
@@ -503,6 +510,7 @@
 <translation id="8721719390026067591">Įjungus svetainėse gali būti prašoma ieškoti „Bluetooth“ įrenginių. Išjungus svetainėse negalima ieškoti „Bluetooth“ įrenginių.</translation>
 <translation id="8725066075913043281">Bandyti dar kartą</translation>
 <translation id="8730621377337864115">Atlikta</translation>
+<translation id="8737426583868847403">Čia bus rodomos svetainės, kurioms išsaugote tinkintą mastelio lygį</translation>
 <translation id="8751914237388039244">Pasirinkti vaizdą</translation>
 <translation id="8800034312320686233">Neveikia svetainė?</translation>
 <translation id="8801436777607969138">Blokuoti „JavaScript“ konkrečioje svetainėje.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
index fd6ffcb6..02a9399 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
@@ -49,6 +49,7 @@
 <translation id="1979673356880165407">Tăng hoặc giảm kích thước văn bản và hình ảnh cho tất cả trang web bạn truy cập</translation>
 <translation id="1984937141057606926">Được cho phép, ngoại trừ cookie của bên thứ ba</translation>
 <translation id="1985247341569771101">Khi bạn bật tuỳ chọn này, các trang web có thể sử dụng cảm biến chuyển động trên thiết bị của bạn. Khi bạn tắt tuỳ chọn này, các trang web không thể sử dụng cảm biến chuyển động.</translation>
+<translation id="1985716030964443178">Thao tác này sẽ đặt lại tất cả các trang web trong danh sách của bạn về mức thu phóng mặc định</translation>
 <translation id="1989112275319619282">Duyệt qua</translation>
 <translation id="1994173015038366702">URL của trang web</translation>
 <translation id="2004697686368036666">Các tính năng trên một số trang web có thể không hoạt động</translation>
@@ -103,6 +104,7 @@
 <translation id="2653659639078652383">Gửi</translation>
 <translation id="2677748264148917807">Rời khỏi</translation>
 <translation id="2678468611080193228">Hãy thử tạm thời cho phép cookie của bên thứ ba. Chế độ cài đặt này làm giảm khả năng bảo vệ nhưng các tính năng của trang web sẽ có khả năng hoạt động cao hơn</translation>
+<translation id="2682367912565197520">Xoá mức thu phóng đã lưu</translation>
 <translation id="2683434792633810741">Xoá và đặt lại?</translation>
 <translation id="2713106313042589954">Tắt máy ảnh</translation>
 <translation id="2717722538473713889">Địa chỉ email</translation>
@@ -209,6 +211,7 @@
 <translation id="4338831206024587507">Tất cả trang web thuộc <ph name="DOMAIN" /></translation>
 <translation id="4402755511846832236">Không cho các trang web biết khi bạn đang dùng thiết bị này</translation>
 <translation id="4412992751769744546">Cho phép cookie của bên thứ ba</translation>
+<translation id="4419929467120297501">Chrome cấm các trang web sử dụng cookie của bên thứ ba để theo dõi hoạt động duyệt web của bạn. Hãy vào phần cài đặt để <ph name="BEGIN_LINK" />quản lý quyền truy cập vào cookie của bên thứ ba<ph name="END_LINK" />.</translation>
 <translation id="4434045419905280838">Cửa sổ bật lên và liên kết chuyển hướng</translation>
 <translation id="443552056913301231">Thao tác này sẽ xoá toàn bộ dữ liệu cục bộ, kể cả cookie, và đặt lại mọi quyền cho <ph name="ORIGIN" /></translation>
 <translation id="4468959413250150279">Tắt âm thanh trên một trang web cụ thể.</translation>
@@ -230,6 +233,7 @@
 <translation id="4779083564647765204">Thu phóng</translation>
 <translation id="4807122856660838973">Bật tính năng Duyệt web an toàn</translation>
 <translation id="4811450222531576619">Tìm hiểu về nguồn và chủ đề của trang</translation>
+<translation id="4816495437032298535">Mức thu phóng đã lưu cho các trang web</translation>
 <translation id="4836046166855586901">Hỏi khi một trang web muốn biết khi bạn đang dùng thiết bị này</translation>
 <translation id="483914009762354899">Bao gồm tất cả trang web thuộc miền này</translation>
 <translation id="4883854917563148705">Bạn không thể đặt lại các tùy chọn cài đặt được quản lý</translation>
@@ -266,6 +270,7 @@
 <translation id="5246825184569358663">Thao tác này sẽ xoá toàn bộ dữ liệu cục bộ, kể cả cookie, và đặt lại mọi quyền cho <ph name="DOMAIN" /> cũng như mọi trang web thuộc miền này</translation>
 <translation id="5264323282659631142">Xóa "<ph name="CHIP_LABEL" />"</translation>
 <translation id="528192093759286357">Kéo từ trên xuống và chạm vào nút quay lại để thoát khỏi chế độ toàn màn hình.</translation>
+<translation id="5292915569214461965">Bạn đã cấm các trang web sử dụng cookie của bên thứ ba để theo dõi hoạt động duyệt web của bạn. Hãy vào phần cài đặt để <ph name="BEGIN_LINK" />quản lý quyền truy cập vào cookie của bên thứ ba<ph name="END_LINK" />.</translation>
 <translation id="5295729974480418933">Khi bạn bật tuỳ chọn này, các trang web có thể yêu cầu sử dụng thông tin mà trang web đã lưu về bạn. Khi bạn tắt tuỳ chọn này, các trang web không thể yêu cầu sử dụng thông tin mà trang web đã lưu về bạn.</translation>
 <translation id="5300589172476337783">Hiển thị</translation>
 <translation id="5301954838959518834">Ok</translation>
@@ -377,6 +382,7 @@
 <translation id="6787751205395685251">Chọn một lựa chọn cho <ph name="SITE_NAME" /></translation>
 <translation id="6790428901817661496">Phát</translation>
 <translation id="6818926723028410516">Chọn mục</translation>
+<translation id="6837658163275294267">Chrome hạn chế hầu hết các trang web sử dụng cookie của bên thứ ba để theo dõi hoạt động duyệt web của bạn. Hãy vào phần cài đặt để <ph name="BEGIN_LINK" />quản lý quyền truy cập vào cookie của bên thứ ba<ph name="END_LINK" /></translation>
 <translation id="6838525730752203626">Sử dụng Chrome theo mặc định</translation>
 <translation id="6840760312327750441">Để nhóm các thẻ, hãy chạm và giữ một thẻ. Sau đó, kéo thẻ đó lên một thẻ khác.</translation>
 <translation id="6864395892908308021">Thiết bị này không hỗ trợ công nghệ Giao tiếp phạm vi gần (NFC)</translation>
@@ -441,6 +447,7 @@
 <translation id="7835852323729233924">Đang phát nội dung nghe nhìn</translation>
 <translation id="783819812427904514">Bật tiếng video</translation>
 <translation id="7846076177841592234">Hủy chọn</translation>
+<translation id="7881140103901777395">Chrome hạn chế hầu hết các trang web sử dụng cookie của bên thứ ba. Tuy nhiên, trang web này được phép sử dụng cookie của bên thứ ba để cung cấp các dịch vụ cơ bản dựa trên loại cookie này.\n\nHãy vào phần cài đặt để <ph name="BEGIN_LINK" />quản lý quyền truy cập vào cookie của bên thứ ba<ph name="END_LINK" />.</translation>
 <translation id="7882806643839505685">Cho phép phát âm thanh trên một trang web cụ thể.</translation>
 <translation id="789180354981963912">Chặn cookie của bên thứ ba ở Chế độ ẩn danh:</translation>
 <translation id="7940722705963108451">Nhắc tôi</translation>
@@ -503,6 +510,7 @@
 <translation id="8721719390026067591">Khi bạn bật tuỳ chọn này, các trang web có thể yêu cầu tìm thiết bị Bluetooth. Khi bạn tắt tuỳ chọn này, các trang web không thể tìm thiết bị Bluetooth.</translation>
 <translation id="8725066075913043281">Thử lại</translation>
 <translation id="8730621377337864115">Xong</translation>
+<translation id="8737426583868847403">Các trang web mà bạn lưu mức thu phóng tuỳ chỉnh sẽ xuất hiện tại đây</translation>
 <translation id="8751914237388039244">Chọn hình ảnh</translation>
 <translation id="8800034312320686233">Trang web không hoạt động?</translation>
 <translation id="8801436777607969138">Chặn JavaScript cho một trang web cụ thể.</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 4782e41..ec70cb6c 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "46.6",
-  "log_list_timestamp": "2024-09-30T12:55:37Z",
+  "version": "47.1",
+  "log_list_timestamp": "2024-10-01T12:55:40Z",
   "operators": [
     {
       "name": "Google",
@@ -63,8 +63,8 @@
           "url": "https://ct.googleapis.com/logs/us1/argon2026h1/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2024-07-22T16:44:26Z"
+            "usable": {
+              "timestamp": "2024-09-30T22:19:27Z"
             }
           },
           "temporal_interval": {
@@ -79,8 +79,8 @@
           "url": "https://ct.googleapis.com/logs/us1/argon2026h2/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2024-07-22T16:44:26Z"
+            "usable": {
+              "timestamp": "2024-09-30T22:19:27Z"
             }
           },
           "temporal_interval": {
@@ -143,8 +143,8 @@
           "url": "https://ct.googleapis.com/logs/eu1/xenon2026h1/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2024-07-22T16:44:26Z"
+            "usable": {
+              "timestamp": "2024-09-30T22:19:27Z"
             }
           },
           "temporal_interval": {
@@ -159,8 +159,8 @@
           "url": "https://ct.googleapis.com/logs/eu1/xenon2026h2/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2024-07-22T16:44:26Z"
+            "usable": {
+              "timestamp": "2024-09-30T22:19:27Z"
             }
           },
           "temporal_interval": {
diff --git a/components/input/input_router_impl.cc b/components/input/input_router_impl.cc
index a17ba8b..40fd190 100644
--- a/components/input/input_router_impl.cc
+++ b/components/input/input_router_impl.cc
@@ -576,14 +576,6 @@
     blink::mojom::WidgetInputHandler::DispatchEventCallback callback) {
   TRACE_EVENT1("input", "InputRouterImpl::FilterAndSendWebInputEvent", "type",
                WebInputEvent::GetName(input_event.GetType()));
-  TRACE_EVENT("input,benchmark,devtools.timeline,latencyInfo",
-              "LatencyInfo.Flow", [&](perfetto::EventContext ctx) {
-                ui::LatencyInfo::EmitIntermediateLatencyInfoStep(
-                    ctx, latency_info.trace_id(),
-                    perfetto::protos::pbzero::ChromeLatencyInfo2::Step::
-                        STEP_SEND_INPUT_EVENT_UI,
-                    InputEventTypeToProto(input_event.GetType()));
-              });
 
   output_stream_validator_.Validate(input_event);
   blink::mojom::InputEventResultState filtered_state =
diff --git a/components/ip_protection/common/ip_protection_proxy_delegate.cc b/components/ip_protection/common/ip_protection_proxy_delegate.cc
index 70c93e84..3b01701 100644
--- a/components/ip_protection/common/ip_protection_proxy_delegate.cc
+++ b/components/ip_protection/common/ip_protection_proxy_delegate.cc
@@ -42,16 +42,14 @@
 
 IpProtectionProxyDelegate::~IpProtectionProxyDelegate() = default;
 
-void IpProtectionProxyDelegate::OnResolveProxy(
+ProxyResolutionResult IpProtectionProxyDelegate::ClassifyRequest(
     const GURL& url,
     const net::NetworkAnonymizationKey& network_anonymization_key,
-    const std::string& method,
-    const net::ProxyRetryInfoMap& proxy_retry_info,
     net::ProxyInfo* result) {
   auto vlog = [&](std::string message) {
     std::optional<net::SchemefulSite> top_frame_site =
         network_anonymization_key.GetTopFrameSite();
-    VLOG(3) << "IPPD::OnResolveProxy(" << url << ", "
+    VLOG(3) << "IPPD::ClassifyRequest(" << url << ", "
             << (top_frame_site.has_value() ? top_frame_site.value()
                                            : net::SchemefulSite())
             << ") - " << message;
@@ -59,42 +57,78 @@
 
   const std::string& always_proxy = net::features::kIpPrivacyAlwaysProxy.Get();
   if (!always_proxy.empty()) {
-    if (url.host() != always_proxy) {
-      return;
+    if (url.host() == always_proxy) {
+      return ip_protection::ProxyResolutionResult::kAttemptProxy;
     }
+    return ip_protection::ProxyResolutionResult::kNoMdlMatch;
+  }
+
+  // Check eligibility of this request.
+  if (!masked_domain_list_manager_->IsPopulated()) {
+    vlog("proxy allow list not populated");
+    return ip_protection::ProxyResolutionResult::kMdlNotPopulated;
+  } else if (!masked_domain_list_manager_->Matches(url,
+                                                   network_anonymization_key)) {
+    vlog("proxy allow list did not match");
+    return ip_protection::ProxyResolutionResult::kNoMdlMatch;
   } else {
-    // Note: We do not proxy requests if:
-    // - The allow list has not been populated.
-    // - The request doesn't match the allow list.
-    // - The token cache is not available.
-    // - The token cache does not have tokens.
-    // - No proxy list is available.
-    // - `kEnableIpProtection` is `false`.
-    // - `is_ip_protection_enabled_` is `false` (in other words, the user has
-    //   disabled IP Protection via user settings).
-    // - `kIpPrivacyDirectOnly` is `true`.
-    if (!CheckEligibility(url, network_anonymization_key)) {
-      return;
-    }
-    result->set_is_mdl_match(true);
+    vlog("proxy allow list matched");
+  }
 
-    // TODO(https://crbug.com/40947771): Once the WebView traffic experiment is
-    // done and IpProtectionProxyDelegate is only created in cases where IP
-    // Protection should be used, remove this check.
-    if (!base::FeatureList::IsEnabled(
-            net::features::kEnableIpProtectionProxy)) {
-      vlog("ip protection proxy cannot be enabled");
-      return;
-    }
+  result->set_is_mdl_match(true);
 
-    if (!ipp_core_->IsIpProtectionEnabled()) {
-      vlog("ip protection proxy is not currently enabled");
-      return;
-    }
-    const bool available = CheckAvailability(url, network_anonymization_key);
-    if (!available) {
-      return;
-    }
+  // Check availability. We do not proxy requests if:
+  // - The allow list has not been populated.
+  // - The request doesn't match the allow list.
+  // - The token cache is not available.
+  // - The token cache does not have tokens.
+  // - No proxy list is available.
+  // - `kEnableIpProtection` is `false`.
+  // - `is_ip_protection_enabled_` is `false` (in other words, the user has
+  //   disabled IP Protection via user settings).
+  // - `kIpPrivacyDirectOnly` is `true`.
+
+  // TODO(https://crbug.com/40947771): Once the WebView traffic experiment is
+  // done and IpProtectionProxyDelegate is only created in cases where IP
+  // Protection should be used, remove this check.
+  if (!base::FeatureList::IsEnabled(net::features::kEnableIpProtectionProxy)) {
+    vlog("ip protection proxy cannot be enabled");
+    return ip_protection::ProxyResolutionResult::kFeatureDisabled;
+  }
+
+  if (!ipp_core_->IsIpProtectionEnabled()) {
+    vlog("ip protection proxy is not currently enabled");
+    return ip_protection::ProxyResolutionResult::kSettingDisabled;
+  }
+  const bool auth_tokens_are_available = ipp_core_->AreAuthTokensAvailable();
+  const bool proxy_list_is_available = ipp_core_->IsProxyListAvailable();
+  if (!auth_tokens_are_available && !proxy_list_is_available) {
+    vlog("neither proxy list nor auth token available");
+    return ip_protection::ProxyResolutionResult::
+        kTokensAndProxyListNotAvailable;
+  } else if (!auth_tokens_are_available) {
+    vlog("no auth token available from cache");
+    return ip_protection::ProxyResolutionResult::kTokensNotAvailable;
+  } else if (!proxy_list_is_available) {
+    vlog("no proxy list available from cache");
+    return ip_protection::ProxyResolutionResult::kProxyListNotAvailable;
+  }
+
+  return ip_protection::ProxyResolutionResult::kAttemptProxy;
+}
+
+void IpProtectionProxyDelegate::OnResolveProxy(
+    const GURL& url,
+    const net::NetworkAnonymizationKey& network_anonymization_key,
+    const std::string& method,
+    const net::ProxyRetryInfoMap& proxy_retry_info,
+    net::ProxyInfo* result) {
+  ip_protection::ProxyResolutionResult resolution_result =
+      ClassifyRequest(url, network_anonymization_key, result);
+  ip_protection::Telemetry().ProxyResolution(resolution_result);
+  if (resolution_result !=
+      ip_protection::ProxyResolutionResult::kAttemptProxy) {
+    return;
   }
 
   net::ProxyList proxy_list;
@@ -119,90 +153,24 @@
 
   if (net::features::kIpPrivacyFallbackToDirect.Get()) {
     // Final fallback is to DIRECT.
-    auto direct_proxy_chain = net::ProxyChain::Direct();
-    if (net::features::kIpPrivacyDirectOnly.Get()) {
-      // To enable measuring how much traffic would be proxied (for
-      // experimentation and planning purposes), mark the direct
-      // proxy chain as being for IP Protection when `kIpPrivacyDirectOnly` is
-      // true. When it is false, we only care about traffic that actually went
-      // through the IP Protection proxies, so don't set this flag.
-      direct_proxy_chain = net::ProxyChain::ForIpProtection({});
-    }
+    auto direct_proxy_chain = net::ProxyChain::ForIpProtection({});
     proxy_list.AddProxyChain(std::move(direct_proxy_chain));
   }
 
   if (VLOG_IS_ON(3)) {
-    vlog(base::StrCat({"setting proxy list (before deprioritization) to ",
-                       proxy_list.ToDebugString()}));
+    std::optional<net::SchemefulSite> top_frame_site =
+        network_anonymization_key.GetTopFrameSite();
+    VLOG(3) << "IPPD::OnResolveProxy(" << url << ", "
+            << (top_frame_site.has_value() ? top_frame_site.value()
+                                           : net::SchemefulSite())
+            << ") - setting proxy list (before deprioritization) to "
+            << proxy_list.ToDebugString();
   }
   result->OverrideProxyList(MergeProxyRules(result->proxy_list(), proxy_list));
   result->DeprioritizeBadProxyChains(proxy_retry_info);
   return;
 }
 
-bool IpProtectionProxyDelegate::CheckEligibility(
-    const GURL& url,
-    const net::NetworkAnonymizationKey& network_anonymization_key) const {
-  ip_protection::ProtectionEligibility eligibility;
-  bool eligible;
-
-  auto vlog = [&](std::string message) {
-    std::optional<net::SchemefulSite> top_frame_site =
-        network_anonymization_key.GetTopFrameSite();
-    VLOG(3) << "IPPD::CheckEligibility(" << url << ", "
-            << (top_frame_site.has_value() ? top_frame_site.value()
-                                           : net::SchemefulSite())
-            << ") - " << message;
-  };
-  if (!masked_domain_list_manager_->IsPopulated()) {
-    vlog("proxy allow list not populated");
-    eligibility = ip_protection::ProtectionEligibility::kUnknown;
-    eligible = false;
-  } else if (!masked_domain_list_manager_->Matches(url,
-                                                   network_anonymization_key)) {
-    vlog("proxy allow list did not match");
-    eligibility = ip_protection::ProtectionEligibility::kIneligible;
-    eligible = false;
-  } else {
-    vlog("proxy allow list matched");
-    eligibility = ip_protection::ProtectionEligibility::kEligible;
-    eligible = true;
-  }
-
-  ip_protection::Telemetry().RequestIsEligibleForProtection(eligibility);
-  return eligible;
-}
-
-bool IpProtectionProxyDelegate::CheckAvailability(
-    const GURL& url,
-    const net::NetworkAnonymizationKey& network_anonymization_key) const {
-  auto vlog = [&](std::string message) {
-    std::optional<net::SchemefulSite> top_frame_site =
-        network_anonymization_key.GetTopFrameSite();
-    VLOG(3) << "IPPD::CheckAvailability(" << url << ", "
-            << (top_frame_site.has_value() ? top_frame_site.value()
-                                           : net::SchemefulSite())
-            << ") - " << message;
-  };
-  const bool auth_tokens_are_available = ipp_core_->AreAuthTokensAvailable();
-  const bool proxy_list_is_available = ipp_core_->IsProxyListAvailable();
-  ip_protection::Telemetry().ProtectionIsAvailableForRequest(
-      auth_tokens_are_available, proxy_list_is_available);
-  if (!auth_tokens_are_available) {
-    vlog("no auth token available from cache");
-    return false;
-  }
-  if (!proxy_list_is_available) {
-    // NOTE: When this `vlog()` and histogram are removed, there's no need to
-    // distinguish the case where a proxy list has not been downloaded, and the
-    // case where a proxy list is empty. The `IsProxyListAvailable()` method can
-    // be removed at that time.
-    vlog("no proxy list available from cache");
-    return false;
-  }
-  return true;
-}
-
 void IpProtectionProxyDelegate::OnSuccessfulRequestAfterFailures(
     const net::ProxyRetryInfoMap& proxy_retry_info) {
   if (!ipp_core_) {
@@ -210,8 +178,8 @@
   }
 
   // A request was successful, but one or more proxies failed. If _only_ QUIC
-  // proxies failed, then we assume this is because QUIC is not working on this
-  // network, and stop injecting QUIC proxies into the proxy list.
+  // proxies failed, then we assume this is because QUIC is not working on
+  // this network, and stop injecting QUIC proxies into the proxy list.
   bool seen_quic = false;
   for (const auto& chain_and_info : proxy_retry_info) {
     const net::ProxyChain& proxy_chain = chain_and_info.first;
@@ -256,15 +224,15 @@
         ipp_core_->GetAuthToken(chain_index);
     if (token) {
       vlog("adding auth token");
-      // The token value we have here is the full Authorization header value, so
-      // we can add it verbatim.
+      // The token value we have here is the full Authorization header value,
+      // so we can add it verbatim.
       extra_headers->SetHeader(net::HttpRequestHeaders::kAuthorization,
                                std::move(token->token));
     } else {
       vlog("no token available");
-      // This is an unexpected circumstance, but does happen in the wild. Rather
-      // than send the request to the proxy, which will reply with an error,
-      // mark the connection as failed immediately.
+      // This is an unexpected circumstance, but does happen in the wild.
+      // Rather than send the request to the proxy, which will reply with an
+      // error, mark the connection as failed immediately.
       return net::ERR_TUNNEL_CONNECTION_FAILED;
     }
   } else {
diff --git a/components/ip_protection/common/ip_protection_proxy_delegate.h b/components/ip_protection/common/ip_protection_proxy_delegate.h
index a0720fc..02b865bc3 100644
--- a/components/ip_protection/common/ip_protection_proxy_delegate.h
+++ b/components/ip_protection/common/ip_protection_proxy_delegate.h
@@ -64,12 +64,10 @@
   friend class IpProtectionProxyDelegateTest;
   FRIEND_TEST_ALL_PREFIXES(IpProtectionProxyDelegateTest, MergeProxyRules);
 
-  bool CheckEligibility(
+  ProxyResolutionResult ClassifyRequest(
       const GURL& url,
-      const net::NetworkAnonymizationKey& network_anonymization_key) const;
-  bool CheckAvailability(
-      const GURL& url,
-      const net::NetworkAnonymizationKey& network_anonymization_key) const;
+      const net::NetworkAnonymizationKey& network_anonymization_key,
+      net::ProxyInfo* result);
 
   // Returns the equivalent of replacing all DIRECT proxies in
   // `existing_proxy_list` with the proxies in `custom_proxy_list`.
diff --git a/components/ip_protection/common/ip_protection_proxy_delegate_unittest.cc b/components/ip_protection/common/ip_protection_proxy_delegate_unittest.cc
index 1a7ea976..454bb03c 100644
--- a/components/ip_protection/common/ip_protection_proxy_delegate_unittest.cc
+++ b/components/ip_protection/common/ip_protection_proxy_delegate_unittest.cc
@@ -45,11 +45,14 @@
 
 using ::ip_protection::MaskedDomainListManager;
 using ::ip_protection::ProtectionEligibility;
+using ::ip_protection::ProxyResolutionResult;
 
 constexpr char kHttpsUrl[] = "https://example.com";
 constexpr char kHttpUrl[] = "http://example.com";
 constexpr char kLocalhost[] = "http://localhost";
 
+constexpr char kProxyResolutionHistogram[] =
+    "NetworkService.IpProtection.ProxyResolution";
 constexpr char kEligibilityHistogram[] =
     "NetworkService.IpProtection.RequestIsEligibleForProtection";
 constexpr char kAreAuthTokensAvailableHistogram[] =
@@ -328,11 +331,13 @@
                                                "backup-proxya", std::nullopt),
        net::ProxyServer::FromSchemeHostAndPort(
            net::ProxyServer::SCHEME_HTTPS, "backup-proxyb", std::nullopt)}));
-  expected_proxy_list.AddProxyChain(net::ProxyChain::Direct());
+  expected_proxy_list.AddProxyChain(net::ProxyChain::ForIpProtection({}));
 
   EXPECT_TRUE(result.proxy_list().Equals(expected_proxy_list))
       << "Got: " << result.proxy_list().ToDebugString();
   EXPECT_TRUE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kAttemptProxy, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, true,
@@ -369,7 +374,9 @@
                            "GET", std::move(retry_map), &result);
 
   EXPECT_TRUE(result.is_direct());
-  EXPECT_FALSE(result.is_for_ip_protection());
+  EXPECT_TRUE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kAttemptProxy, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, true,
@@ -415,7 +422,7 @@
 
   expected_proxy_list.AddProxyChain(std::move(kIpProtectionChain1));
   expected_proxy_list.AddProxyChain(std::move(kIpProtectionChain2));
-  expected_proxy_list.AddProxyChain(net::ProxyChain::Direct());
+  expected_proxy_list.AddProxyChain(net::ProxyChain::ForIpProtection({}));
   expected_proxy_list.AddProxyServer(
       net::PacResultElementToProxyServer("PROXY weird"));
 
@@ -428,6 +435,8 @@
                               net::NetLogWithSource()));
   EXPECT_TRUE(result.is_for_ip_protection());
 
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kAttemptProxy, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, true,
@@ -466,6 +475,8 @@
   EXPECT_TRUE(result.proxy_list().Equals(expected_proxy_list))
       << "Got: " << result.proxy_list().ToDebugString();
   EXPECT_TRUE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kAttemptProxy, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, true,
@@ -495,6 +506,8 @@
 
   EXPECT_TRUE(result.is_direct());
   EXPECT_FALSE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kNoMdlMatch, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kIneligible, 1);
   histogram_tester_.ExpectTotalCount(kAreAuthTokensAvailableHistogram, 0);
@@ -522,6 +535,8 @@
 
   EXPECT_TRUE(result.is_direct());
   EXPECT_FALSE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(
+      kProxyResolutionHistogram, ProxyResolutionResult::kTokensNotAvailable, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, false,
@@ -550,6 +565,9 @@
 
   EXPECT_TRUE(result.is_direct());
   EXPECT_FALSE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(
+      kProxyResolutionHistogram, ProxyResolutionResult::kProxyListNotAvailable,
+      1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, true,
@@ -580,6 +598,8 @@
 
   EXPECT_TRUE(result.is_direct());
   EXPECT_FALSE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(
+      kProxyResolutionHistogram, ProxyResolutionResult::kSettingDisabled, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectTotalCount(kAreAuthTokensAvailableHistogram, 0);
@@ -608,6 +628,8 @@
                            "GET", net::ProxyRetryInfoMap(), &result);
   EXPECT_TRUE(result.is_direct());
   EXPECT_FALSE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kNoMdlMatch, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kIneligible, 1);
   histogram_tester_.ExpectTotalCount(kAreAuthTokensAvailableHistogram, 0);
@@ -637,6 +659,8 @@
                            "GET", net::ProxyRetryInfoMap(), &result);
   EXPECT_TRUE(result.is_direct());
   EXPECT_FALSE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(
+      kProxyResolutionHistogram, ProxyResolutionResult::kMdlNotPopulated, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kUnknown, 1);
   histogram_tester_.ExpectTotalCount(kAreAuthTokensAvailableHistogram, 0);
@@ -695,6 +719,8 @@
                            "GET", net::ProxyRetryInfoMap(), &result);
   EXPECT_FALSE(result.is_direct());
   EXPECT_TRUE(result.is_for_ip_protection());
+  histogram_tester_.ExpectUniqueSample(kProxyResolutionHistogram,
+                                       ProxyResolutionResult::kAttemptProxy, 1);
   histogram_tester_.ExpectUniqueSample(kEligibilityHistogram,
                                        ProtectionEligibility::kEligible, 1);
   histogram_tester_.ExpectUniqueSample(kAreAuthTokensAvailableHistogram, true,
diff --git a/components/ip_protection/common/ip_protection_telemetry.h b/components/ip_protection/common/ip_protection_telemetry.h
index 2f76453e..501faa7 100644
--- a/components/ip_protection/common/ip_protection_telemetry.h
+++ b/components/ip_protection/common/ip_protection_telemetry.h
@@ -23,6 +23,32 @@
   kMaxValue = kEligible,
 };
 
+// An enumeration of the disposition of a request. These values are persisted to
+// logs. The values are in the order that the checks occur, so for example if
+// the request does not match the MDL and the feature is not enabled,
+// `kNotMatchingMdl` will be recorded.
+//
+// Entries should not be renumbered and numeric values should never be reused.
+enum class ProxyResolutionResult {
+  // The MDL is not populated, so an eligility decision could not be made.
+  kMdlNotPopulated = 0,
+  // The request did not match the MDL.
+  kNoMdlMatch = 1,
+  // The EnableIpProtectionProxy feature is not enabled.
+  kFeatureDisabled = 2,
+  // The IP Protection setting is disabled.
+  kSettingDisabled = 3,
+  // Tokens for the current geo are not available.
+  kTokensNotAvailable = 4,
+  // The proxy list is not available.
+  kProxyListNotAvailable = 5,
+  // Neither tokens for the current geo, nor the proxy list, are available.
+  kTokensAndProxyListNotAvailable = 6,
+  // The request was resolved to use the IP Protection proxies.
+  kAttemptProxy = 7,
+  kMaxValue = kAttemptProxy,
+};
+
 // An enumeration of the result of an attempt to fetch a proxy list. These
 // values are persisted to logs. Entries should not be renumbered and numeric
 // values should never be reused.
@@ -53,6 +79,9 @@
 //
 // More detail on the metrics produced here can be found in
 // `tools/metrics/histograms/metadata/network/histograms.xml`.
+//
+// Note that additional IP-Protection-related metrics are logged directly in
+// `net::UrlRequestHttpJob`, which cannot depend on this component.
 class IpProtectionTelemetry {
  public:
   virtual ~IpProtectionTelemetry() = default;
@@ -84,17 +113,8 @@
   // OnResolveProxy.
   virtual void EmptyTokenCache(ProxyLayer) = 0;
 
-  // An eligibility determination has been made for a request, in a call to
-  // `OnResolveProxy`.
-  virtual void RequestIsEligibleForProtection(ProtectionEligibility) = 0;
-
-  // An availability determination has been made for a request, in a call to
-  // `OnResolveProxy`. This only occurs when the request is eligible and IP
-  // Protection is enabled. Protection is considered available if both tokens
-  // and a proxy list are available.
-  virtual void ProtectionIsAvailableForRequest(
-      bool are_auth_tokens_available,
-      bool is_proxy_list_available) = 0;
+  // An `OnResolveProxy` call has completed with the given result.
+  virtual void ProxyResolution(ProxyResolutionResult) = 0;
 
   // Results of a call to GetAuthToken. `is_token_available` is true if a token
   // was returned; `enable_token_caching_by_geo` represents the feature status;
diff --git a/components/ip_protection/common/ip_protection_telemetry_uma.cc b/components/ip_protection/common/ip_protection_telemetry_uma.cc
index 7fac2121..36b86d7c 100644
--- a/components/ip_protection/common/ip_protection_telemetry_uma.cc
+++ b/components/ip_protection/common/ip_protection_telemetry_uma.cc
@@ -7,6 +7,7 @@
 #include <optional>
 
 #include "base/metrics/histogram_functions.h"
+#include "base/notreached.h"
 #include "base/strings/strcat.h"
 #include "base/time/time.h"
 #include "components/ip_protection/common/ip_protection_data_types.h"
@@ -95,23 +96,69 @@
                                 value);
 }
 
-void IpProtectionTelemetryUma::RequestIsEligibleForProtection(
-    ProtectionEligibility value) {
-  base::UmaHistogramEnumeration(
-      "NetworkService.IpProtection.RequestIsEligibleForProtection", value);
-}
+void IpProtectionTelemetryUma::ProxyResolution(ProxyResolutionResult result) {
+  base::UmaHistogramEnumeration("NetworkService.IpProtection.ProxyResolution",
+                                result);
 
-void IpProtectionTelemetryUma::ProtectionIsAvailableForRequest(
-    bool are_auth_tokens_available,
-    bool is_proxy_list_available) {
-  base::UmaHistogramBoolean(
-      "NetworkService.IpProtection.AreAuthTokensAvailable",
-      are_auth_tokens_available);
-  base::UmaHistogramBoolean("NetworkService.IpProtection.IsProxyListAvailable",
-                            is_proxy_list_available);
-  base::UmaHistogramBoolean(
-      "NetworkService.IpProtection.ProtectionIsAvailableForRequest",
-      are_auth_tokens_available && is_proxy_list_available);
+  // Translate the result into eligibility and availability values.
+  ProtectionEligibility eligibility;
+  auto record_availability = [](bool are_auth_tokens_available,
+                                bool is_proxy_list_available) {
+    base::UmaHistogramBoolean(
+        "NetworkService.IpProtection.AreAuthTokensAvailable",
+        are_auth_tokens_available);
+    base::UmaHistogramBoolean(
+        "NetworkService.IpProtection.IsProxyListAvailable",
+        is_proxy_list_available);
+    base::UmaHistogramBoolean(
+        "NetworkService.IpProtection.ProtectionIsAvailableForRequest",
+        are_auth_tokens_available && is_proxy_list_available);
+  };
+
+  switch (result) {
+    case ProxyResolutionResult::kMdlNotPopulated:
+      eligibility = ProtectionEligibility::kUnknown;
+      break;
+    case ProxyResolutionResult::kNoMdlMatch:
+      eligibility = ProtectionEligibility::kIneligible;
+      break;
+    case ProxyResolutionResult::kFeatureDisabled:
+      eligibility = ProtectionEligibility::kEligible;
+      break;
+    case ProxyResolutionResult::kSettingDisabled:
+      eligibility = ProtectionEligibility::kEligible;
+      break;
+    case ProxyResolutionResult::kTokensNotAvailable:
+      eligibility = ProtectionEligibility::kEligible;
+      record_availability(
+          /*are_auth_tokens_available=*/false,
+          /*is_proxy_list_available=*/true);
+      break;
+    case ProxyResolutionResult::kProxyListNotAvailable:
+      eligibility = ProtectionEligibility::kEligible;
+      record_availability(
+          /*are_auth_tokens_available=*/true,
+          /*is_proxy_list_available=*/false);
+      break;
+    case ProxyResolutionResult::kTokensAndProxyListNotAvailable:
+      eligibility = ProtectionEligibility::kEligible;
+      record_availability(
+          /*are_auth_tokens_available=*/false,
+          /*is_proxy_list_available=*/false);
+      break;
+    case ProxyResolutionResult::kAttemptProxy:
+      eligibility = ProtectionEligibility::kEligible;
+      record_availability(
+          /*are_auth_tokens_available=*/true,
+          /*is_proxy_list_available=*/true);
+      break;
+    default:
+      NOTREACHED();
+  }
+
+  base::UmaHistogramEnumeration(
+      "NetworkService.IpProtection.RequestIsEligibleForProtection",
+      eligibility);
 }
 
 void IpProtectionTelemetryUma::GetAuthTokenResultForGeo(
diff --git a/components/ip_protection/common/ip_protection_telemetry_uma.h b/components/ip_protection/common/ip_protection_telemetry_uma.h
index 5ba30d9d..8b6eacb 100644
--- a/components/ip_protection/common/ip_protection_telemetry_uma.h
+++ b/components/ip_protection/common/ip_protection_telemetry_uma.h
@@ -25,9 +25,7 @@
 
   void ProxyChainFallback(int) override;
   void EmptyTokenCache(ProxyLayer) override;
-  void RequestIsEligibleForProtection(ProtectionEligibility) override;
-  void ProtectionIsAvailableForRequest(bool are_auth_tokens_available,
-                                       bool is_proxy_list_available) override;
+  void ProxyResolution(ProxyResolutionResult) override;
   void GetAuthTokenResultForGeo(bool is_token_available,
                                 bool enable_token_caching_by_geo,
                                 bool is_cache_empty,
diff --git a/components/optimization_guide/proto/features/common_quality_data.proto b/components/optimization_guide/proto/features/common_quality_data.proto
index ad0db5a2..4a4d7e8 100644
--- a/components/optimization_guide/proto/features/common_quality_data.proto
+++ b/components/optimization_guide/proto/features/common_quality_data.proto
@@ -1081,7 +1081,8 @@
   AX_SLA_ARIANOTIFICATIONIDS = 3;
 }
 
-// Matches FormControlType in mojo by one off for an unknown value.
+// Matches FormControlType in mojo, but off by one, because this list contains
+// an "UNSPECIFIED" value at 0.
 // https://source.chromium.org/chromium/chromium/src/+/main:components/autofill/core/common/mojom/autofill_types.mojom;l=17;drc=105770df485ace262780d95126bb60b1a16ec340;bpv=1;bpt=1
 enum FormControlType {
   FORM_CONTROL_TYPE_UNSPECIFIED = 0;
@@ -1112,7 +1113,7 @@
 
   FORM_CONTROL_TYPE_SELECT_MULTIPLE = 13;
 
-  FORM_CONTROL_TYPE_SELECT_LIST = 14;
+  // deprecated: FORM_CONTROL_TYPE_SELECT_LIST = 14;
 
   FORM_CONTROL_TYPE_TEXT_AREA = 15;
 }
diff --git a/components/plus_addresses/plus_address_service.cc b/components/plus_addresses/plus_address_service.cc
index 438a058..d80bd62 100644
--- a/components/plus_addresses/plus_address_service.cc
+++ b/components/plus_addresses/plus_address_service.cc
@@ -290,6 +290,10 @@
   return IsEnabled() && IsSupportedOrigin(origin);
 }
 
+bool PlusAddressService::IsPlusAddressFullFormFillingEnabled() const {
+  return base::FeatureList::IsEnabled(features::kPlusAddressFullFormFill);
+}
+
 void PlusAddressService::GetAffiliatedPlusAddresses(
     const url::Origin& origin,
     base::OnceCallback<void(std::vector<std::string>)> callback) {
diff --git a/components/plus_addresses/plus_address_service.h b/components/plus_addresses/plus_address_service.h
index 3c34a6d2..68aca4a 100644
--- a/components/plus_addresses/plus_address_service.h
+++ b/components/plus_addresses/plus_address_service.h
@@ -101,6 +101,7 @@
   // Checks whether the passed-in string is a known plus address.
   bool IsPlusAddress(const std::string& potential_plus_address) const override;
   bool IsPlusAddressFillingEnabled(const url::Origin& origin) const override;
+  bool IsPlusAddressFullFormFillingEnabled() const override;
   void GetAffiliatedPlusAddresses(
       const url::Origin& origin,
       base::OnceCallback<void(std::vector<std::string>)> callback) override;
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 23d9932..b96fa1a 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -5162,6 +5162,54 @@
       Si se le asigna el valor false, se forzará que no aparezca la información del sistema.
       Si no se establece la política, tendrá efecto el comportamiento predeterminado (solo se mostrará en Canary y en el canal
       para desarrolladores). Los usuarios pueden cambiar la visibilidad con operaciones específicas (por ejemplo, pulsando Alt + V).</translation>
+<translation id="4946124666877421935">Si se establece esta política, se especifica una lista de aplicaciones web que se instalarán de forma silenciosa y sin intervención del usuario, y qué usuarios no podrán desinstalarlas ni desactivarlas.
+
+      Cada elemento de la lista de esta política es un objeto con un miembro obligatorio:
+      <ph name="URL_LABEL" /> (la URL de la aplicación web que se va a instalar)
+
+      y 6 miembros opcionales:
+      - <ph name="DEFAULT_LAUNCH_CONTAINER_LABEL" />
+      (define cómo se abre la aplicación web; la opción predeterminada es que lo haga en una pestaña nueva)
+
+      - <ph name="CREATE_DESKTOP_SHORTCUT_LABEL" />
+      (selecciona True si quieres crear accesos directos del escritorio
+      de <ph name="LINUX_OS_NAME" /> y <ph name="MS_WIN_NAME" />).
+
+      - <ph name="FALLBACK_APP_NAME_LABEL" />
+      A partir de la versión 90 de <ph name="PRODUCT_NAME" />,
+      te permite anular el nombre de la aplicación si no es una
+      aplicación web progresiva (PWA), o el nombre de la aplicación instalada
+      temporalmente si es una PWA, pero se requiere autenticación para que la
+      instalación pueda completarse. Si se proporcionan tanto
+      <ph name="CUSTOM_NAME_LABEL" /> como
+      <ph name="FALLBACK_APP_NAME_LABEL" />,
+      esta última se ignorará.
+
+      - <ph name="OVERRIDE_APP_NAME_LABEL" />
+      A partir de la versión 99
+      de <ph name="PRODUCT_OS_NAME" /> y de la versión 112 en el resto de los sistemas operativos para ordenadores, te permite anular
+      de forma permanente el nombre de todas las aplicaciones web y PWAs.
+
+      - <ph name="CUSTOM_ICON_LABEL" />
+      A partir de la versión 99
+      de <ph name="PRODUCT_OS_NAME" /> y de la versión 112 en el resto de los sistemas operativos para ordenadores,
+      te permite anular el icono de las aplicaciones instaladas. Los iconos deben ser cuadrados,
+       con un tamaño máximo de 1 MB, y deben tener uno de los siguientes formatos: jpeg, png, gif, webp o ico.
+      El valor de hash debe ser el hash SHA256 del archivo de icono. Se debe poder acceder a <ph name="URL_LABEL" />
+      sin autenticación para que el icono se pueda usar
+      al instalar la aplicación.
+
+      - <ph name="INSTALL_AS_SHORTCUT_LABEL" />
+      A partir de la versión 107
+      de <ph name="PRODUCT_NAME" />. Si se habilita esta política, la <ph name="URL_LABEL" /> especificada
+      se instalará como un acceso directo, igual que si se hiciera mediante la opción "Crear acceso directo..."
+      de la GUI del navegador para ordenadores.
+      Ten en cuenta que, si se instala como acceso directo, no se actualizará si
+      cambia el archivo de manifiesto de <ph name="URL_LABEL" />.
+      Si esta política se inhabilita o no se establece, la aplicación web de la
+      <ph name="URL_LABEL" /> especificada se instalará de forma normal.
+
+      Consulta <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> para fijar aplicaciones en la estantería de <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="494613465159630803">Cast Receiver</translation>
 <translation id="494924690085329212">Reiniciar al cerrar sesión si se ha iniciado Android.</translation>
 <translation id="4950447493143157880">No usar nunca el cliente DNS integrado</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 24ae9842..9fba3849 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -5368,6 +5368,54 @@
       Jika kebijakan disetel ke salah (false), informasi sistem akan disembunyikan secara otomatis.
       Jika kebijakan tidak disetel, perilaku default (yang ditampilkan untuk saluran Canary/Dev)
       akan berlaku. Pengguna dapat mengubah visibilitas menggunakan operasi tertentu (misalnya, Alt-V).</translation>
+<translation id="4946124666877421935">Menyetel kebijakan akan menentukan daftar aplikasi web yang diinstal otomatis, tanpa interaksi pengguna, dan yang tidak dapat di-uninstal atau dinonaktifkan pengguna.
+
+      Setiap item daftar kebijakan adalah objek yang berisi satu elemen wajib:
+      <ph name="URL_LABEL" /> (URL aplikasi web yang akan diinstal)
+
+      dan 6 elemen opsional:
+      - <ph name="DEFAULT_LAUNCH_CONTAINER_LABEL" />
+      (untuk cara aplikasi web terbuka—tab baru adalah default)
+
+      - <ph name="CREATE_DESKTOP_SHORTCUT_LABEL" />
+      (Berlaku jika Anda ingin membuat pintasan desktop <ph name="LINUX_OS_NAME" /> dan
+      <ph name="MS_WIN_NAME" />).
+
+      - <ph name="FALLBACK_APP_NAME_LABEL" />
+      (Mulai versi 90 <ph name="PRODUCT_NAME" />,
+      memungkinkan Anda mengganti nama aplikasi jika aplikasi bukan
+      Progressive Web App (PWA), atau mengganti nama aplikasi yang diinstal
+      sementara jika aplikasi adalah PWA, tetapi memerlukan autentikasi sebelum
+      penginstalan dapat diselesaikan. Jika
+      <ph name="CUSTOM_NAME_LABEL" /> dan
+      <ph name="FALLBACK_APP_NAME_LABEL" /> tersedia,
+      yang kedua akan diabaikan).
+
+      - <ph name="OVERRIDE_APP_NAME_LABEL" />
+      (Mulai versi 99 <ph name="PRODUCT_OS_NAME" />,
+      dan versi 112 di semua sistem operasi desktop lain, memungkinkan Anda
+      secara permanen mengganti nama aplikasi untuk semua aplikasi web dan PWA).
+
+      - <ph name="CUSTOM_ICON_LABEL" />
+      (Mulai versi 99 <ph name="PRODUCT_OS_NAME" />,
+      dan versi 112 di semua sistem operasi desktop lain, memungkinkan Anda
+      mengganti ikon aplikasi yang diinstal. Ikon harus berbentuk persegi,
+      berukuran maksimal 1 MB, dan dalam salah satu format berikut: jpeg, png, gif, webp, ico.
+      Nilai hash file ikon harus hash SHA256. <ph name="URL_LABEL" />
+      harus dapat diakses tanpa autentikasi untuk memastikan ikon dapat digunakan
+      saat aplikasi diinstal.)
+
+      - <ph name="INSTALL_AS_SHORTCUT_LABEL" />
+      (Mulai versi 107 <ph name="PRODUCT_NAME" />
+      ). Jika diaktifkan, <ph name="URL_LABEL" />
+      yang disediakan akan diinstal sebagai pintasan, seolah-olah dilakukan melalui opsi "Buat Pintasan..."
+      di GUI browser desktop.
+      Perlu diperhatikan bahwa jika diinstal sebagai pintasan, URL tersebut tidak akan diupdate jika
+      manifes pada <ph name="URL_LABEL" /> berubah.
+      Jika dinonaktifkan atau tidak disetel, aplikasi web di
+      <ph name="URL_LABEL" /> yang disediakan akan diinstal secara normal.
+
+      Lihat <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> untuk menyematkan aplikasi ke panel aplikasi <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="494613465159630803">Penerima Cast</translation>
 <translation id="494924690085329212">Reboot saat pengguna logout jika Android telah dimulai.</translation>
 <translation id="4950447493143157880">Jangan pernah gunakan klien DNS standar</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 3c6194e..91971c6d 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -4960,6 +4960,16 @@
 
           注: <ph name="DEVICE_LOGIN_SCREEN_SPOKEN_FEEDBACK_ENABLED_POLICY_NAME" /> が指定されている場合はこのポリシーより優先されます。</translation>
 <translation id="4945419595339133946">システム情報(Chrome OS のバージョン、デバイスのシリアル番号など)をログイン画面に常に表示するかどうかを指定します。このポリシーを true に設定した場合、システム情報は強制的に表示されます。このポリシーを false に設定した場合、システム情報は強制的に非表示になります。このポリシーを設定しない場合、デフォルトの動作(Canary、Dev チャンネルでは表示)が適用されます。ユーザーは、特定の操作(Alt+V など)で表示と非表示を切り替えることができます。</translation>
+<translation id="4946124666877421935">このポリシーでは、ユーザーに操作を求めずにサイレント インストールするウェブアプリのリストを指定します。ユーザーはこれらのウェブアプリをアンインストールすることもオフにすることもできません。
+
+      このポリシーで指定するリストの個々の項目は、必須の <ph name="URL_LABEL" />(インストールするウェブアプリの URL)と、6 つの省略可能な <ph name="DEFAULT_LAUNCH_CONTAINER_LABEL" />(ウェブアプリを開く方法、デフォルトは新しいタブ)、<ph name="CREATE_DESKTOP_SHORTCUT_LABEL" />(<ph name="LINUX_OS_NAME" /> と <ph name="MS_WIN_NAME" /> のデスクトップ ショートカットを作成する場合は True)、<ph name="FALLBACK_APP_NAME_LABEL" />(<ph name="PRODUCT_NAME" /> バージョン 90 以降では、プログレッシブ ウェブアプリ(PWA)以外のアプリ名をオーバーライドできます。また、PWA であってもインストールの完了に認証が必要な場合は、一時的にインストールされたアプリ名をオーバーライドできます。<ph name="CUSTOM_NAME_LABEL" /> と <ph name="FALLBACK_APP_NAME_LABEL" /> の両方が設定されている場合、後者は無視されます)、<ph name="OVERRIDE_APP_NAME_LABEL" />(<ph name="PRODUCT_OS_NAME" /> バージョン 99 以降および他のすべてのデスクトップ オペレーティング システムのバージョン 112 以降では、すべてのウェブアプリと PWA のアプリ名を完全にオーバーライドできます)、<ph name="CUSTOM_ICON_LABEL" />(<ph name="PRODUCT_OS_NAME" /> バージョン 99 以降および他のすべてのデスクトップ オペレーティング システムのバージョン 112 以降では、インストールされたアプリのアプリアイコンをオーバーライドできます。アイコンは正方形でサイズを 1 MB 以内とし、jpeg、png、gif、webp、ico のいずれかの形式にする必要があります。
+     ハッシュ値は SHA256 ハッシュのアイコン ファイルとします。アプリのインストール時にアイコンを使用できるように、<ph name="URL_LABEL" /> には認証なしでアクセスできるようにする必要があります。
+
+     <ph name="INSTALL_AS_SHORTCUT_LABEL" />(<ph name="PRODUCT_NAME" /> バージョン 107 以降)です。有効にすると、デスクトップ ブラウザの GUI で [ショートカットを作成...] オプションを使用した場合と同様に、指定した <ph name="URL_LABEL" /> がショートカットとしてインストールされます。
+      なお、ショートカットとしてインストールした場合、<ph name="URL_LABEL" /> のマニフェストが変更されても、ショートカットは更新されません。
+      無効にするか未設定のままにした場合、指定した <ph name="URL_LABEL" /> のウェブアプリは通常どおりインストールされます。
+
+      <ph name="PRODUCT_OS_NAME" /> シェルフへのアプリの固定については、<ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> ポリシーをご覧ください。</translation>
 <translation id="494613465159630803">Cast Receiver</translation>
 <translation id="494924690085329212">Android が起動している場合、ユーザーのログアウト時に再起動します。</translation>
 <translation id="4950447493143157880">組み込みの DNS クライアントを使用しない</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index e9eec582..8c2af80 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -5186,6 +5186,54 @@
       Якщо для цього правила вибрано значення True, системна інформація примусово відображається.
       Якщо для цього правила вибрано значення False, системна інформація примусово приховується.
       Якщо це правило не налаштовано, діє поведінка за умовчанням (інформація відображається у версії для розробників або Canary). Користувачі можуть вмикати чи вимикати її певними комбінаціями клавіш (наприклад, Alt-V).</translation>
+<translation id="4946124666877421935">Налаштування цього правила визначають список вебдодатків, які встановлюються фоново, без дій із боку користувача. Користувач не може видалити або вимкнути їх.
+
+      Кожний елемент списку правила – це об’єкт з однією обов’язковою частиною і шістьма додатковими. Обов’язкова частина:
+      <ph name="URL_LABEL" /> (URL-адреса вебдодатка для встановлення.)
+
+      Додаткові частини:
+      - <ph name="DEFAULT_LAUNCH_CONTAINER_LABEL" />
+      (Визначає, як відкривається вебдодаток – за умовчанням вибрано нову вкладку.)
+
+      - <ph name="CREATE_DESKTOP_SHORTCUT_LABEL" />
+      (Значення "правда", якщо створюються ярлики на робочому столі в ОС <ph name="LINUX_OS_NAME" /> і
+      <ph name="MS_WIN_NAME" />.)
+
+      - <ph name="FALLBACK_APP_NAME_LABEL" />
+      (Починаючи з версії <ph name="PRODUCT_NAME" /> 90,
+      ви маєте змогу перевизначити назву додатка (якщо він не
+      є прогресивним вебдодатком) або назви тимчасових
+      прогресивних вебдодатків, де потрібна автентифікація
+      перед завершенням встановлення. Якщо вказано обидві назви
+      <ph name="CUSTOM_NAME_LABEL" /> і
+      <ph name="FALLBACK_APP_NAME_LABEL" />,
+      остання ігноруватиметься.)
+
+      - <ph name="OVERRIDE_APP_NAME_LABEL" />
+      (Починаючи з версії <ph name="PRODUCT_OS_NAME" />
+      99 і версії 112 у всіх інших операційних системах для комп’ютерів, ви маєте змогу назавжди перевизначати назви всіх
+      прогресивних і звичайних вебдодатків.)
+
+      - <ph name="CUSTOM_ICON_LABEL" />
+      (Починаючи з версії <ph name="PRODUCT_OS_NAME" />
+      99 і версії 112 у всіх інших операційних системах для комп’ютерів,
+      ви маєте змогу перевизначати значки встановлених додатків. Значки
+      мають займати не більше ніж 1 МБ, бути квадратними й в одному з таких форматів: jpeg, png, gif, webp, ico.
+      Хеш SHA256 файлу значка має використовуватися як значення хеш-функції. Адреса <ph name="URL_LABEL" />
+      має бути доступною без автентифікації, щоб значок можна було використовувати
+      після встановлення додатка.)
+
+      - <ph name="INSTALL_AS_SHORTCUT_LABEL" />
+      (Починаючи з версії <ph name="PRODUCT_NAME" />
+      107.) Якщо це правило ввімкнено, <ph name="URL_LABEL" />
+      збережеться як ярлик (так, ніби було використано опцію "Створити ярлик…"
+      у графічному інтерфейсі вебпереглядача для комп’ютера).
+      Зверніть увагу: якщо ви створите ярлик і <ph name="URL_LABEL" /> (її маніфест) зазнає змін,
+      ярлик не оновиться.
+      Якщо це правило вимкнути або не налаштувати, вебдодаток, на який спрямовує
+      <ph name="URL_LABEL" />, установлюватиметься, як зазвичай.
+
+      Щоб закріпити додатки на панелі запуску <ph name="PRODUCT_OS_NAME" />, скористайтеся правилом <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" />.</translation>
 <translation id="494613465159630803">Приймач Cast</translation>
 <translation id="494924690085329212">Перезапускати після виходу користувача з облікового запису, якщо запущено Android.</translation>
 <translation id="4950447493143157880">Ніколи не використовувати вбудований клієнт DNS</translation>
diff --git a/components/policy/test_support/request_handler_for_api_authorization.cc b/components/policy/test_support/request_handler_for_api_authorization.cc
index 95e2e04..3500ab0 100644
--- a/components/policy/test_support/request_handler_for_api_authorization.cc
+++ b/components/policy/test_support/request_handler_for_api_authorization.cc
@@ -35,8 +35,7 @@
   em::DeviceManagementResponse device_management_response;
   device_management_response.mutable_service_api_access_response()
       ->set_auth_code(policy_storage()->robot_api_auth_code());
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_auto_enrollment.cc b/components/policy/test_support/request_handler_for_auto_enrollment.cc
index 89c4ab3..6b71c2e5 100644
--- a/components/policy/test_support/request_handler_for_auto_enrollment.cc
+++ b/components/policy/test_support/request_handler_for_auto_enrollment.cc
@@ -25,8 +25,9 @@
 
 void AddHashes(const std::vector<std::string>& hashes,
                em::DeviceAutoEnrollmentResponse* response) {
-  for (const std::string& hash : hashes)
+  for (const std::string& hash : hashes) {
     *response->add_hashes() = hash;
+  }
 }
 
 }  // namespace
@@ -74,8 +75,7 @@
       break;
   }
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_check_android_management.cc b/components/policy/test_support/request_handler_for_check_android_management.cc
index 7f3cb7a..73f5f5e 100644
--- a/components/policy/test_support/request_handler_for_check_android_management.cc
+++ b/components/policy/test_support/request_handler_for_check_android_management.cc
@@ -44,10 +44,12 @@
 
   em::DeviceManagementResponse response;
   response.mutable_check_android_management_response();
-  if (oauth_token == kManagedAuthToken)
-    return CreateHttpResponse(net::HTTP_CONFLICT, response.SerializeAsString());
-  if (oauth_token == kUnmanagedAuthToken)
-    return CreateHttpResponse(net::HTTP_OK, response.SerializeAsString());
+  if (oauth_token == kManagedAuthToken) {
+    return CreateHttpResponse(net::HTTP_CONFLICT, response);
+  }
+  if (oauth_token == kUnmanagedAuthToken) {
+    return CreateHttpResponse(net::HTTP_OK, response);
+  }
   return CreateHttpResponse(net::HTTP_FORBIDDEN, "Invalid OAuth token");
 }
 
diff --git a/components/policy/test_support/request_handler_for_check_user_account.cc b/components/policy/test_support/request_handler_for_check_user_account.cc
index 36e4163..ea3bc9b 100644
--- a/components/policy/test_support/request_handler_for_check_user_account.cc
+++ b/components/policy/test_support/request_handler_for_check_user_account.cc
@@ -45,8 +45,7 @@
   check_user_account_response.set_enrollment_nudge_type(
       GetEnrollmentNudgePolicy(check_user_account_request));
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 em::CheckUserAccountResponse::UserAccountType
diff --git a/components/policy/test_support/request_handler_for_chrome_desktop_report.cc b/components/policy/test_support/request_handler_for_chrome_desktop_report.cc
index 2d02d6e..40113f4 100644
--- a/components/policy/test_support/request_handler_for_chrome_desktop_report.cc
+++ b/components/policy/test_support/request_handler_for_chrome_desktop_report.cc
@@ -38,8 +38,7 @@
   em::DeviceManagementResponse device_management_response;
   device_management_response.mutable_chrome_desktop_report_response();
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_client_cert_provisioning.cc b/components/policy/test_support/request_handler_for_client_cert_provisioning.cc
index 4ad3965..bbc5e29 100644
--- a/components/policy/test_support/request_handler_for_client_cert_provisioning.cc
+++ b/components/policy/test_support/request_handler_for_client_cert_provisioning.cc
@@ -5,6 +5,7 @@
 #include "components/policy/test_support/request_handler_for_client_cert_provisioning.h"
 
 #include <stdint.h>
+
 #include <memory>
 #include <string>
 #include <vector>
@@ -139,8 +140,7 @@
                               "Invalid request parameter");
   }
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_device_attribute_update.cc b/components/policy/test_support/request_handler_for_device_attribute_update.cc
index f3ecbae..b51e3c34d 100644
--- a/components/policy/test_support/request_handler_for_device_attribute_update.cc
+++ b/components/policy/test_support/request_handler_for_device_attribute_update.cc
@@ -37,7 +37,7 @@
   em::DeviceManagementResponse response;
   response.mutable_device_attribute_update_response()->set_result(
       em::DeviceAttributeUpdateResponse::ATTRIBUTE_UPDATE_SUCCESS);
-  return CreateHttpResponse(net::HTTP_OK, response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_device_attribute_update_permission.cc b/components/policy/test_support/request_handler_for_device_attribute_update_permission.cc
index f880fff..1939534 100644
--- a/components/policy/test_support/request_handler_for_device_attribute_update_permission.cc
+++ b/components/policy/test_support/request_handler_for_device_attribute_update_permission.cc
@@ -46,8 +46,7 @@
   device_management_response
       .mutable_device_attribute_update_permission_response()
       ->set_result(result);
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_device_initial_enrollment_state.cc b/components/policy/test_support/request_handler_for_device_initial_enrollment_state.cc
index 926711fa..5e69288 100644
--- a/components/policy/test_support/request_handler_for_device_initial_enrollment_state.cc
+++ b/components/policy/test_support/request_handler_for_device_initial_enrollment_state.cc
@@ -50,8 +50,7 @@
           .mutable_device_initial_enrollment_state_response();
   state_response->set_initial_enrollment_mode(state->initial_enrollment_mode);
   state_response->set_management_domain(state->management_domain);
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_device_state_retrieval.cc b/components/policy/test_support/request_handler_for_device_state_retrieval.cc
index 9dda3d4..bf0989f 100644
--- a/components/policy/test_support/request_handler_for_device_state_retrieval.cc
+++ b/components/policy/test_support/request_handler_for_device_state_retrieval.cc
@@ -53,8 +53,7 @@
     device_state_retrieval_response->set_restore_mode(
         device_state.restore_mode);
   }
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_policy.cc b/components/policy/test_support/request_handler_for_policy.cc
index 1efef21..0533757 100644
--- a/components/policy/test_support/request_handler_for_policy.cc
+++ b/components/policy/test_support/request_handler_for_policy.cc
@@ -73,8 +73,7 @@
   if (!client_info || client_info->device_token != request_device_token) {
     device_management_response.add_error_detail(
         policy_storage()->error_detail());
-    return CreateHttpResponse(net::HTTP_GONE,
-                              device_management_response.SerializeAsString());
+    return CreateHttpResponse(net::HTTP_GONE, device_management_response);
   }
 
   em::DeviceManagementRequest device_management_request;
@@ -138,8 +137,7 @@
     }
   }
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 bool RequestHandlerForPolicy::ProcessCloudPolicy(
diff --git a/components/policy/test_support/request_handler_for_psm_auto_enrollment.cc b/components/policy/test_support/request_handler_for_psm_auto_enrollment.cc
index 5f2ec477..9f15732 100644
--- a/components/policy/test_support/request_handler_for_psm_auto_enrollment.cc
+++ b/components/policy/test_support/request_handler_for_psm_auto_enrollment.cc
@@ -134,8 +134,7 @@
         "PSM RLWE oprf_request, or query_request fields must be filled");
   }
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_register_browser.cc b/components/policy/test_support/request_handler_for_register_browser.cc
index aafcbb7a..976d647 100644
--- a/components/policy/test_support/request_handler_for_register_browser.cc
+++ b/components/policy/test_support/request_handler_for_register_browser.cc
@@ -69,8 +69,7 @@
                                    client_info.allowed_policy_types.end()));
   client_storage()->RegisterClient(std::move(client_info));
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 RequestHandlerForRegisterBrowserOrPolicyAgent::
diff --git a/components/policy/test_support/request_handler_for_register_device_and_user.cc b/components/policy/test_support/request_handler_for_register_device_and_user.cc
index 0eb7a6b..bc4141c 100644
--- a/components/policy/test_support/request_handler_for_register_device_and_user.cc
+++ b/components/policy/test_support/request_handler_for_register_device_and_user.cc
@@ -67,8 +67,9 @@
     const PolicyStorage* policy_storage) {
   const PolicyStorage::PsmEntry* psm_entry = policy_storage->GetPsmEntry(
       register_request.brand_code() + "_" + register_request.machine_id());
-  if (!psm_entry)
+  if (!psm_entry) {
     return nullptr;
+  }
 
   if (!register_request.has_psm_execution_result() ||
       !register_request.has_psm_determination_timestamp_ms()) {
@@ -127,8 +128,9 @@
   // be obtained from the policy storage.
   // TODO(http://crbug.com/1227123): Add support for authentication.
   std::string google_login;
-  if (!GetGoogleLoginFromRequest(request, &google_login))
+  if (!GetGoogleLoginFromRequest(request, &google_login)) {
     return CreateHttpResponse(net::HTTP_UNAUTHORIZED, "User not authorized.");
+  }
 
   const base::flat_set<std::string>& managed_users =
       policy_storage()->managed_users();
@@ -150,12 +152,14 @@
 
   std::unique_ptr<HttpResponse> error_response =
       ValidatePsmFields(register_request, policy_storage());
-  if (error_response)
+  if (error_response) {
     return error_response;
+  }
 
   error_response = ValidateLicenses(register_request, policy_storage());
-  if (error_response)
+  if (error_response) {
     return error_response;
+  }
 
   return RegisterDeviceAndSendResponse(request, register_request, policy_user);
 }
@@ -175,8 +179,9 @@
   client_info.device_id = device_id;
   client_info.device_token = device_token;
   client_info.machine_name = machine_name;
-  if (!policy_user.empty())
+  if (!policy_user.empty()) {
     client_info.username = policy_user;
+  }
   AddAllowedPolicyTypes(register_request.type(),
                         &client_info.allowed_policy_types);
   client_storage()->RegisterClient(std::move(client_info));
@@ -189,8 +194,7 @@
   register_response->set_enrollment_type(
       em::DeviceRegisterResponse::ENTERPRISE);
 
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_remote_commands.cc b/components/policy/test_support/request_handler_for_remote_commands.cc
index 2c81628..bcd74b9 100644
--- a/components/policy/test_support/request_handler_for_remote_commands.cc
+++ b/components/policy/test_support/request_handler_for_remote_commands.cc
@@ -38,7 +38,7 @@
       client_storage()->GetClientOrNull(
           KeyValueFromUrl(request.GetURL(), dm_protocol::kParamDeviceID));
   if (!client_info) {
-    return CreateHttpResponse(net::HTTP_GONE, response.SerializeAsString());
+    return CreateHttpResponse(net::HTTP_GONE, response);
   }
 
   RemoteCommandsState* state = remote_commands_state();
@@ -66,7 +66,7 @@
                               response.mutable_remote_command_response());
   LOG(INFO) << "serialized string: " << response.SerializeAsString();
 
-  return CreateHttpResponse(net::HTTP_OK, response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, response);
 }
 
 void RequestHandlerForRemoteCommands::ProcessSecureRemoteCommands(
diff --git a/components/policy/test_support/request_handler_for_status_upload.cc b/components/policy/test_support/request_handler_for_status_upload.cc
index dd93caf..54bf54f 100644
--- a/components/policy/test_support/request_handler_for_status_upload.cc
+++ b/components/policy/test_support/request_handler_for_status_upload.cc
@@ -35,7 +35,7 @@
   em::DeviceManagementResponse response;
   response.mutable_device_status_report_response();
   response.mutable_session_status_report_response();
-  return CreateHttpResponse(net::HTTP_OK, response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_unregister.cc b/components/policy/test_support/request_handler_for_unregister.cc
index e044b9b3..8062220 100644
--- a/components/policy/test_support/request_handler_for_unregister.cc
+++ b/components/policy/test_support/request_handler_for_unregister.cc
@@ -39,8 +39,7 @@
 
   em::DeviceManagementResponse device_management_response;
   device_management_response.mutable_unregister_response();
-  return CreateHttpResponse(net::HTTP_OK,
-                            device_management_response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, device_management_response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/request_handler_for_upload_euicc_info.cc b/components/policy/test_support/request_handler_for_upload_euicc_info.cc
index edd33b0..99b0c8f7 100644
--- a/components/policy/test_support/request_handler_for_upload_euicc_info.cc
+++ b/components/policy/test_support/request_handler_for_upload_euicc_info.cc
@@ -33,7 +33,7 @@
   em::DeviceManagementResponse response;
   response.mutable_device_status_report_response();
   response.mutable_session_status_report_response();
-  return CreateHttpResponse(net::HTTP_OK, response.SerializeAsString());
+  return CreateHttpResponse(net::HTTP_OK, response);
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/test_server_helpers.cc b/components/policy/test_support/test_server_helpers.cc
index 8693a2b8..00b4b77 100644
--- a/components/policy/test_support/test_server_helpers.cc
+++ b/components/policy/test_support/test_server_helpers.cc
@@ -9,6 +9,7 @@
 
 #include "base/ranges/algorithm.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
+#include "components/policy/proto/device_management_backend.pb.h"
 #include "net/base/url_util.h"
 #include "net/http/http_status_code.h"
 #include "net/test/embedded_test_server/http_request.h"
@@ -21,6 +22,8 @@
 using ::net::test_server::HttpRequest;
 using ::net::test_server::HttpResponse;
 
+namespace em = enterprise_management;
+
 namespace {
 
 // C++ does not offer a mechanism to check if a given status code is present in
@@ -32,6 +35,17 @@
 #undef HTTP_STATUS_ENUM_VALUE
 };
 
+std::unique_ptr<HttpResponse> CreateHttpResponse(
+    net::HttpStatusCode code,
+    const std::string& content,
+    const std::string& content_type) {
+  auto response = std::make_unique<CustomHttpResponse>();
+  response->set_content_type(content_type);
+  response->set_code(code);
+  response->set_content(content);
+  return response;
+}
+
 }  // namespace
 
 void CustomHttpResponse::SendResponse(
@@ -94,13 +108,17 @@
                                    dm_protocol::kOAuthTokenHeaderPrefix, out);
 }
 
-std::unique_ptr<HttpResponse> CreateHttpResponse(net::HttpStatusCode code,
-                                                 const std::string& content) {
-  auto response = std::make_unique<CustomHttpResponse>();
-  response->set_content_type("text/plain");
-  response->set_code(code);
-  response->set_content(content);
-  return response;
+std::unique_ptr<HttpResponse> CreateHttpResponse(
+    net::HttpStatusCode code,
+    const em::DeviceManagementResponse& proto_content) {
+  return CreateHttpResponse(code, proto_content.SerializeAsString(),
+                            "application/x-protobuffer");
+}
+
+std::unique_ptr<HttpResponse> CreateHttpResponse(
+    net::HttpStatusCode code,
+    const std::string& text_content) {
+  return CreateHttpResponse(code, text_content, "text/plain");
 }
 
 }  // namespace policy
diff --git a/components/policy/test_support/test_server_helpers.h b/components/policy/test_support/test_server_helpers.h
index e9a5ada7..de1e7cfa0 100644
--- a/components/policy/test_support/test_server_helpers.h
+++ b/components/policy/test_support/test_server_helpers.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "components/policy/proto/device_management_backend.pb.h"
 #include "net/http/http_status_code.h"
 #include "net/test/embedded_test_server/http_response.h"
 #include "url/gurl.h"
@@ -64,6 +65,11 @@
     net::HttpStatusCode code,
     const std::string& content);
 
+// Returns an application/x-protobuffer HttpResponse.
+std::unique_ptr<net::test_server::HttpResponse> CreateHttpResponse(
+    net::HttpStatusCode code,
+    const enterprise_management::DeviceManagementResponse& content);
+
 }  // namespace policy
 
 #endif  // COMPONENTS_POLICY_TEST_SUPPORT_TEST_SERVER_HELPERS_H_
diff --git a/components/saved_tab_groups/saved_tab_group.h b/components/saved_tab_groups/saved_tab_group.h
index 6cff348..44c23731 100644
--- a/components/saved_tab_groups/saved_tab_group.h
+++ b/components/saved_tab_groups/saved_tab_group.h
@@ -30,7 +30,7 @@
       const std::u16string& title,
       const tab_groups::TabGroupColorId& color,
       const std::vector<SavedTabGroupTab>& urls,
-      std::optional<size_t> position,
+      std::optional<size_t> position = std::nullopt,
       std::optional<base::Uuid> saved_guid = std::nullopt,
       std::optional<LocalTabGroupID> local_group_id = std::nullopt,
       std::optional<std::string> creator_cache_guid = std::nullopt,
diff --git a/components/saved_tab_groups/saved_tab_group_model.cc b/components/saved_tab_groups/saved_tab_group_model.cc
index c571219e..74002060 100644
--- a/components/saved_tab_groups/saved_tab_group_model.cc
+++ b/components/saved_tab_groups/saved_tab_group_model.cc
@@ -544,11 +544,11 @@
   const base::Uuid& tab_guid = remote_tab.saved_tab_guid();
   SavedTabGroup* const group = MutableGroupContainingTab(tab_guid);
   CHECK(group);
-  // TODO(crbug.com/319521964): check whether group has the same group GUID.
+  // TODO(crbug.com/370714643): check whether group has the same group GUID.
 
   const std::optional<int> index = group->GetIndexOfTab(tab_guid);
 
-  // TODO(crbug.com/319521964): check that remote tab always contains position.
+  // TODO(crbug.com/370714643): check that remote tab always contains position.
   const int preferred_index = remote_tab.position().value_or(0);
 
   group->GetTab(tab_guid)->MergeRemoteTab(remote_tab);
diff --git a/components/saved_tab_groups/saved_tab_group_sync_bridge.cc b/components/saved_tab_groups/saved_tab_group_sync_bridge.cc
index 7c59419..5d7f754 100644
--- a/components/saved_tab_groups/saved_tab_group_sync_bridge.cc
+++ b/components/saved_tab_groups/saved_tab_group_sync_bridge.cc
@@ -49,8 +49,9 @@
 namespace tab_groups {
 namespace {
 
-// Discard orphaned tabs after 30 days if the associated group cannot be found.
-constexpr base::TimeDelta kDiscardOrphanedTabsThreshold = base::Days(30);
+// Time period for orphaned tabs/groups to live till. once this threshold is
+// passed, on the next merge, they will be deleted.
+constexpr base::TimeDelta kOrphanedObjectDiscardThreshold = base::Days(30);
 
 bool IsValidSpecifics(const sync_pb::SavedTabGroupSpecifics& specifics) {
   // A valid specifics should have at least a guid and be either a group or a
@@ -170,6 +171,7 @@
   }
 
   ResolveTabsMissingGroups(write_batch.get());
+  ResolveGroupsMissingTabs(write_batch.get());
 
   // Update sync with any locally stored data not currently stored in sync.
   for (const SavedTabGroup* group : model_wrapper_->GetTabGroups()) {
@@ -232,6 +234,7 @@
   }
 
   ResolveTabsMissingGroups(write_batch.get());
+  ResolveGroupsMissingTabs(write_batch.get());
 
   write_batch->TakeMetadataChangesFrom(std::move(metadata_change_list));
   store_->CommitWriteBatch(
@@ -730,7 +733,7 @@
 
       // Discard the tabs that do not have an associated group and have not been
       // updated within the discard threshold.
-      if (now - last_update_time >= kDiscardOrphanedTabsThreshold) {
+      if (now - last_update_time >= kOrphanedObjectDiscardThreshold) {
         RemoveEntitySpecific(base::Uuid::ParseLowercase(specifics.guid()),
                              write_batch);
         tab_iterator = tabs_missing_groups_.erase(tab_iterator);
@@ -747,6 +750,28 @@
   }
 }
 
+void SavedTabGroupSyncBridge::ResolveGroupsMissingTabs(
+    syncer::DataTypeStore::WriteBatch* write_batch) {
+  std::vector<base::Uuid> orphaned_groups_to_destroy;
+  for (const SavedTabGroup* group : model_wrapper_->GetTabGroups()) {
+    if (!group->saved_tabs().empty()) {
+      continue;
+    }
+
+    if ((base::Time::Now() - group->update_time_windows_epoch_micros()) <
+        kOrphanedObjectDiscardThreshold) {
+      continue;
+    }
+
+    orphaned_groups_to_destroy.push_back(group->saved_guid());
+  }
+
+  for (const base::Uuid& group_id : orphaned_groups_to_destroy) {
+    model_wrapper_->RemoveGroup(group_id);
+    write_batch->DeleteData(group_id.AsLowercaseString());
+  }
+}
+
 void SavedTabGroupSyncBridge::AddEntryToBatch(syncer::MutableDataBatch* batch,
                                               proto::SavedTabGroupData data) {
   std::unique_ptr<syncer::EntityData> entity_data =
diff --git a/components/saved_tab_groups/saved_tab_group_sync_bridge.h b/components/saved_tab_groups/saved_tab_group_sync_bridge.h
index d441473..8a11ddc 100644
--- a/components/saved_tab_groups/saved_tab_group_sync_bridge.h
+++ b/components/saved_tab_groups/saved_tab_group_sync_bridge.h
@@ -152,6 +152,12 @@
   // Attempts to add the tabs found in `tabs_missing_groups_` to local storage.
   void ResolveTabsMissingGroups(syncer::DataTypeStore::WriteBatch* write_batch);
 
+  // Iterates through groups saved in the model, and decides whether the group
+  // is orphaned and needs to be destroyed. If it does, destroys the group.
+  // An orphaned group is described as a group that has no tabs, and the last
+  // update time has been long enough ago that its likely to never get a tab.
+  void ResolveGroupsMissingTabs(syncer::DataTypeStore::WriteBatch* write_batch);
+
   // Adds the entry into `batch`.
   void AddEntryToBatch(syncer::MutableDataBatch* batch,
                        proto::SavedTabGroupData specifics);
diff --git a/components/saved_tab_groups/saved_tab_group_sync_bridge_unittest.cc b/components/saved_tab_groups/saved_tab_group_sync_bridge_unittest.cc
index d6e3b0c8..edfc071 100644
--- a/components/saved_tab_groups/saved_tab_group_sync_bridge_unittest.cc
+++ b/components/saved_tab_groups/saved_tab_group_sync_bridge_unittest.cc
@@ -1491,4 +1491,37 @@
       pref_service_.GetBoolean(prefs::kSavedTabGroupSpecificsToDataMigration));
 }
 
+TEST_F(SavedTabGroupSyncBridgeTest, NewlyOrphanedGroupsDontGetDestroyed) {
+  SavedTabGroup group(u"Test Title", tab_groups::TabGroupColorId::kBlue, {});
+  // position must be set or the update time will be overridden during model
+  // save.
+  group.SetPosition(0);
+  group.SetUpdateTimeWindowsEpochMicros(base::Time::Now());
+
+  saved_tab_group_model_.Add(std::move(group));
+  EXPECT_EQ(1u, saved_tab_group_model_.saved_tab_groups().size());
+
+  bridge_->MergeFullSyncData(bridge_->CreateMetadataChangeList(), {});
+
+  EXPECT_EQ(1u, saved_tab_group_model_.saved_tab_groups().size());
+}
+
+TEST_F(SavedTabGroupSyncBridgeTest, OldOrphanedGroupsGetDestroyed) {
+  auto id = base::Uuid::GenerateRandomV4();
+  SavedTabGroup group(u"Test Title", tab_groups::TabGroupColorId::kBlue, {});
+  // position must be set or the update time will be overridden during model
+  // save.
+  group.SetPosition(0);
+
+  group.SetUpdateTimeWindowsEpochMicros(
+      (base::Time::Now() - kDiscardOrphanedTabsThreshold) - base::Days(1));
+
+  saved_tab_group_model_.Add(std::move(group));
+  EXPECT_EQ(1u, saved_tab_group_model_.saved_tab_groups().size());
+
+  bridge_->MergeFullSyncData(bridge_->CreateMetadataChangeList(), {});
+
+  EXPECT_EQ(0u, saved_tab_group_model_.saved_tab_groups().size());
+}
+
 }  // namespace tab_groups
diff --git a/components/saved_tab_groups/saved_tab_group_tab.cc b/components/saved_tab_groups/saved_tab_group_tab.cc
index b3f1838..2a4f192 100644
--- a/components/saved_tab_groups/saved_tab_group_tab.cc
+++ b/components/saved_tab_groups/saved_tab_group_tab.cc
@@ -67,7 +67,7 @@
 
   SetURL(remote_tab.url());
   SetTitle(remote_tab.title());
-  // TODO(crbug.com/319521964): check that remote tab always contains position.
+  // TODO(crbug.com/370714643): check that remote tab always contains position.
   SetPosition(remote_tab.position().value_or(0));
   SetCreatorCacheGuid(remote_tab.creator_cache_guid());
   SetLastUpdaterCacheGuid(remote_tab.last_updater_cache_guid());
diff --git a/components/saved_tab_groups/shared_tab_group_data_sync_bridge.cc b/components/saved_tab_groups/shared_tab_group_data_sync_bridge.cc
index ae73753..34e378f8 100644
--- a/components/saved_tab_groups/shared_tab_group_data_sync_bridge.cc
+++ b/components/saved_tab_groups/shared_tab_group_data_sync_bridge.cc
@@ -488,7 +488,7 @@
         change->data().specifics.shared_tab_group_data().guid()));
   }
 
-  // TODO(crbug.com/319521964): resolve and handle tabs missing groups later.
+  // TODO(crbug.com/370719750): resolve and handle tabs missing groups later.
   // ResolveTabsMissingGroups(write_batch.get());
 
   write_batch->TakeMetadataChangesFrom(std::move(metadata_change_list));
@@ -773,7 +773,7 @@
   // groups.
   RemoveEntitySpecifics(removed_group.saved_guid(), write_batch.get());
 
-  // TODO(crbug.com/319521964): handle tabs missing groups.
+  // TODO(crbug.com/370719750): handle tabs missing groups.
   store_->CommitWriteBatch(
       std::move(write_batch),
       base::BindOnce(&SharedTabGroupDataSyncBridge::OnDatabaseSave,
@@ -838,7 +838,7 @@
     stored_entries.emplace_back(std::move(proto));
   }
 
-  // TODO(crbug.com/319521964): Handle tabs missing groups.
+  // TODO(crbug.com/370719750): Handle tabs missing groups.
   LoadStoredEntries(std::move(stored_entries), model_wrapper_,
                     metadata_batch->GetAllMetadata());
   change_processor()->ModelReadyToSync(std::move(metadata_batch));
@@ -876,7 +876,6 @@
   }
 
   // Update the existing group with remote data.
-  // TODO(crbug.com/319521964): handle group position properly.
   const SavedTabGroup* existing_group =
       model_wrapper_->MergeRemoteGroupMetadata(
           group_guid, base::UTF8ToUTF16(specifics.tab_group().title()),
@@ -957,7 +956,7 @@
     // The tab does not have a corresponding group. This can happen when sync
     // sends the tab data before the group data. In this case, the tab is stored
     // in case the group comes in later.
-    // TODO(crbug.com/319521964): keep tabs with no groups.
+    // TODO(crbug.com/370719750): keep tabs with no groups.
   }
 }
 
diff --git a/components/saved_tab_groups/tab_group_sync_bridge_mediator.cc b/components/saved_tab_groups/tab_group_sync_bridge_mediator.cc
index b714a5bd..ff0945a 100644
--- a/components/saved_tab_groups/tab_group_sync_bridge_mediator.cc
+++ b/components/saved_tab_groups/tab_group_sync_bridge_mediator.cc
@@ -268,7 +268,7 @@
 
   if (group->is_shared_tab_group()) {
     CHECK(shared_bridge_);
-    // TODO(crbug.com/351357559): support handling last user interaction time
+    // TODO(crbug.com/370710496): support handling last user interaction time
     // for shared tab groups.
   } else {
     CHECK(saved_bridge_);
diff --git a/components/saved_tab_groups/tab_group_sync_service_impl.cc b/components/saved_tab_groups/tab_group_sync_service_impl.cc
index f03edb3a..9b78157 100644
--- a/components/saved_tab_groups/tab_group_sync_service_impl.cc
+++ b/components/saved_tab_groups/tab_group_sync_service_impl.cc
@@ -562,10 +562,7 @@
 
 void TabGroupSyncServiceImpl::SavedTabGroupAddedFromSync(
     const base::Uuid& guid) {
-  base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
-      FROM_HERE, base::BindOnce(&TabGroupSyncServiceImpl::HandleTabGroupAdded,
-                                weak_ptr_factory_.GetWeakPtr(), guid,
-                                TriggerSource::REMOTE));
+  HandleTabGroupAdded(guid, TriggerSource::REMOTE);
 }
 
 void TabGroupSyncServiceImpl::SavedTabGroupAddedLocally(
@@ -576,10 +573,7 @@
 void TabGroupSyncServiceImpl::SavedTabGroupUpdatedFromSync(
     const base::Uuid& group_guid,
     const std::optional<base::Uuid>& tab_guid) {
-  base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
-      FROM_HERE, base::BindOnce(&TabGroupSyncServiceImpl::HandleTabGroupUpdated,
-                                weak_ptr_factory_.GetWeakPtr(), group_guid,
-                                tab_guid, TriggerSource::REMOTE));
+  HandleTabGroupUpdated(group_guid, tab_guid, TriggerSource::REMOTE);
 }
 
 void TabGroupSyncServiceImpl::SavedTabGroupUpdatedLocally(
diff --git a/components/saved_tab_groups/tab_group_sync_service_impl.h b/components/saved_tab_groups/tab_group_sync_service_impl.h
index 2ab1c123..17fd894e 100644
--- a/components/saved_tab_groups/tab_group_sync_service_impl.h
+++ b/components/saved_tab_groups/tab_group_sync_service_impl.h
@@ -135,6 +135,7 @@
 
   // For testing only.
   void SetIsInitializedForTesting(bool initialized) override;
+  SavedTabGroupModel* GetModelForTesting() { return model_.get(); }
 
  private:
   // KeyedService:
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index fef3e954..ff27c5b 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Virksomhedsdrift</translation>
 <translation id="7244061187185055290">Beskriv med få ord, hvad du leder efter</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /> om kortfordele</translation>
 <translation id="7251437084390964440">Netværkskonfigurationen overholder ikke ONC-standarden. Dele af konfiguration kan muligvis ikke importeres.
 Yderligere oplysninger:
 <ph name="DEBUG_INFO" /></translation>
@@ -3478,6 +3479,7 @@
 <translation id="7390545607259442187">Bekræft kort</translation>
 <translation id="7392089738299859607">Opdater adresse</translation>
 <translation id="7393161616326137353">Adventurespil</translation>
+<translation id="7393475648162498734">Se, hvilke bonusser og fordele der er tilgængelige for dine kort, når du betaler</translation>
 <translation id="739728382607845710">Ikon for betalingshandler</translation>
 <translation id="7399616692258236448">Lokationsanmodninger blokeres automatisk for alle websites undtagen dem, hvor du har givet tilladelse</translation>
 <translation id="7399802613464275309">Sikkerhedstjek</translation>
@@ -4494,6 +4496,7 @@
 <translation id="939736085109172342">Ny mappe</translation>
 <translation id="940524522703752213">Din filupload til <ph name="CLOUD_PROVIDER" /> starter om <ph name="MINUTES" /> minutter</translation>
 <translation id="944540589955480312">Brug de adgangskoder og adgangsnøgler, der er gemt på din Google-konto</translation>
+<translation id="944578681290094302">Se, hvilke bonusser og fordele der er tilgængelige for dine kort, når du betaler. <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Få flere oplysninger om kortfordele<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Chrome blokerer websites, så de ikke kan bruge tredjepartscookies til at spore dig, mens du browser.</translation>
 <translation id="945855313015696284">Se oplysningerne nedenfor, og slet eventuelle ugyldige kort</translation>
 <translation id="94613679163347541">Vil du sammenligne <ph name="CATEGORY" />?</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index fdecb33..52e0e83f 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Operaciones comerciales</translation>
 <translation id="7244061187185055290">Describe brevemente lo que estás buscando</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /> sobre las ventajas de las tarjetas</translation>
 <translation id="7251437084390964440">La configuración de red no cumple el estándar ONC. Es posible que no se importen algunas partes de la configuración.
 Más información:
 <ph name="DEBUG_INFO" /></translation>
@@ -3478,6 +3479,7 @@
 <translation id="7390545607259442187">Confirmar tarjeta</translation>
 <translation id="7392089738299859607">Actualizar dirección</translation>
 <translation id="7393161616326137353">Juegos de aventura</translation>
+<translation id="7393475648162498734">Muestra las recompensas y ventajas disponibles para tus tarjetas al tramitar una compra</translation>
 <translation id="739728382607845710">Icono del controlador de pagos</translation>
 <translation id="7399616692258236448">Las solicitudes de ubicación se bloquean automáticamente en todos los sitios, excepto los que permitas</translation>
 <translation id="7399802613464275309">Comprobación de seguridad</translation>
@@ -4493,6 +4495,7 @@
 <translation id="939736085109172342">Nueva carpeta</translation>
 <translation id="940524522703752213">La subida de archivos a <ph name="CLOUD_PROVIDER" /> empezará dentro de <ph name="MINUTES" /> minutos</translation>
 <translation id="944540589955480312">Usar contraseñas y llaves de acceso guardadas en tu cuenta de Google</translation>
+<translation id="944578681290094302">Muestra las recompensas y ventajas disponibles para tus tarjetas al tramitar una compra. <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Más información sobre las ventajas de las tarjetas<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Chrome impide que los sitios usen cookies de terceros para hacer un seguimiento de tu actividad mientras navegas.</translation>
 <translation id="945855313015696284">Comprueba la información que aparece a continuación y elimina las tarjetas no válidas</translation>
 <translation id="94613679163347541">¿Comparar <ph name="CATEGORY" />?</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 75509ce..cb073b1 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Business Operations</translation>
 <translation id="7244061187185055290">Sa ilang salita, ilarawan kung ano ang hinahanap mo</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /> tungkol sa mga benepisyo ng card</translation>
 <translation id="7251437084390964440">Hindi sumusunod ang configuration ng network sa pamantayan ng ONC. Hindi maaaring i-import ang mga bahagi ng configuration.
 Mga karagdagang detalye:
 <ph name="DEBUG_INFO" /></translation>
@@ -3478,6 +3479,7 @@
 <translation id="7390545607259442187">Kumpirmahin ang Card</translation>
 <translation id="7392089738299859607">I-update ang Address</translation>
 <translation id="7393161616326137353">Mga Adventure Game</translation>
+<translation id="7393475648162498734">Ipakita kung aling mga reward at benepisyo ang available para sa iyong card kapag nag-checkout</translation>
 <translation id="739728382607845710">Icon ng tagapangasiwa ng pagbabayad</translation>
 <translation id="7399616692258236448">Awtomatikong naka-block ang mga request sa lokasyon para sa lahat ng site maliban sa mga pinapayagan mo</translation>
 <translation id="7399802613464275309">Pagsusuri sa Kaligtasan</translation>
@@ -4493,6 +4495,7 @@
 <translation id="939736085109172342">Bagong folder</translation>
 <translation id="940524522703752213">Magsisimula ang pag-upload ng iyong file sa <ph name="CLOUD_PROVIDER" /> sa loob ng <ph name="MINUTES" /> (na) minuto</translation>
 <translation id="944540589955480312">Gumamit ng mga password at passkey na naka-save sa iyong Google Account</translation>
+<translation id="944578681290094302">Ipakita kung aling mga reward at benepisyo ang available para sa iyong mga card kapag nag-checkout <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Matuto tungkol sa mga benepisyo ng card<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Bina-block ng Chrome ang mga site para hindi makagamit ng third-party na cookies para ma-track ka habang nagba-browse ka.</translation>
 <translation id="945855313015696284">Tingnan ang impormasyon sa ibaba at mag-delete ng anumang invalid na card</translation>
 <translation id="94613679163347541">Paghambingin ang <ph name="CATEGORY" />?</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 0af12220..6219c46 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Operasi Bisnis</translation>
 <translation id="7244061187185055290">Jelaskan dengan singkat apa yang Anda telusuri</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /> manfaat kartu</translation>
 <translation id="7251437084390964440">Konfigurasi jaringan tidak mematuhi standar ONC. Sebagian konfigurasi mungkin tidak diimpor. Detail tambahan: <ph name="DEBUG_INFO" /></translation>
 <translation id="7251635775446614726">Administrator Anda menyatakan: "<ph name="CUSTOM_MESSAGE" />"</translation>
 <translation id="7255540419660272073">Tombol tidak suka, tekan Enter untuk membuka formulir guna mengirim masukan mendetail tentang alasan Anda tidak menyukai, <ph name="THUMBS_DOWN_SUGGESTION_BUTTON_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation>
@@ -3476,6 +3477,7 @@
 <translation id="7390545607259442187">Konfirmasi Kartu</translation>
 <translation id="7392089738299859607">Perbarui Alamat</translation>
 <translation id="7393161616326137353">Game Petualangan</translation>
+<translation id="7393475648162498734">Tampilkan reward dan manfaat yang tersedia untuk kartu Anda saat checkout</translation>
 <translation id="739728382607845710">Ikon pengendali pembayaran</translation>
 <translation id="7399616692258236448">Permintaan lokasi otomatis diblokir untuk semua situs kecuali situs yang Anda izinkan</translation>
 <translation id="7399802613464275309">Pemeriksaan Keamanan</translation>
@@ -4489,6 +4491,7 @@
 <translation id="939736085109172342">Folder baru</translation>
 <translation id="940524522703752213">Proses upload file Anda ke <ph name="CLOUD_PROVIDER" /> akan dimulai dalam <ph name="MINUTES" /> menit</translation>
 <translation id="944540589955480312">Gunakan sandi dan kunci sandi yang disimpan di Akun Google Anda</translation>
+<translation id="944578681290094302">Tampilkan reward dan manfaat yang tersedia untuk kartu Anda saat checkout. <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Pelajari manfaat kartu<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Chrome memblokir situs agar tidak menggunakan cookie pihak ketiga untuk melacak Anda saat menjelajah.</translation>
 <translation id="945855313015696284">Periksa info di bawah dan hapus kartu apa pun yang tidak valid</translation>
 <translation id="94613679163347541">Bandingkan <ph name="CATEGORY" />?</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 445292d..2471fc3 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -311,6 +311,7 @@
 <translation id="1553152622374372421">Sport invernali</translation>
 <translation id="1553358976309200471">Aggiorna Chrome</translation>
 <translation id="1555130319947370107">Blu</translation>
+<translation id="1555191101192706055">Gli utenti malintenzionati sul sito che hai cercato di visitare potrebbero indurti con l'inganno a installare un software dannoso che influisce sulla tua navigazione, ad esempio cambiando la tua home page o mostrando annunci aggiuntivi sui siti che visiti.</translation>
 <translation id="1559231233244409191">Cartone (a tripla parete)</translation>
 <translation id="1559447966090556585">Ricevere notifiche?</translation>
 <translation id="1559486004335285648">Compilazione automatica dei dati di pagamento</translation>
@@ -512,6 +513,7 @@
 <translation id="1901443836186977402">{1,plural, =1{Questo server non è riuscito a dimostrare che si tratta di <ph name="DOMAIN" />; il relativo certificato di sicurezza è scaduto nel corso delle ultime 24 ore. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione. L'orologio del computer è attualmente impostato su <ph name="CURRENT_DATE" />. È corretto? Se è sbagliato, devi regolare l'orologio di sistema e aggiornare la pagina.}other{Questo server non è riuscito a verificare che si tratti di <ph name="DOMAIN" />; il relativo certificato di sicurezza è scaduto # giorni fa. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione. L'orologio del computer è attualmente impostato su <ph name="CURRENT_DATE" />. È corretto? Se è sbagliato, devi regolare l'orologio di sistema e aggiornare la pagina.}}</translation>
 <translation id="1902576642799138955">Periodo di validità</translation>
 <translation id="1908217026282415406">Uso e movimento della videocamera</translation>
+<translation id="1908690643053136980">L'amministratore non consente <ph name="PERMISSION" /> per questo sito</translation>
 <translation id="1913037223029790376">Usa il CVC della carta virtuale</translation>
 <translation id="191374271204266022">Copia come JSON</translation>
 <translation id="1914326953223720820">Servizio di decompressione</translation>
@@ -1028,6 +1030,7 @@
 <translation id="2903493209154104877">Indirizzi</translation>
 <translation id="290376772003165898">La pagina non è in <ph name="LANGUAGE" />?</translation>
 <translation id="2905107382358353958">Avviso relativo a nuova impostazione di pagamento</translation>
+<translation id="2909120679423833511">La tua organizzazione, <ph name="MANAGER" />, richiede l'accesso con un profilo specifico</translation>
 <translation id="2909946352844186028">È stato rilevato un cambio di rete.</translation>
 <translation id="2911255567212929079">Machine learning e intelligenza artificiale</translation>
 <translation id="2911973620368911614">ID utente Job Accounting</translation>
@@ -1137,6 +1140,7 @@
 <translation id="3108943290502734357">Vassoio centrale</translation>
 <translation id="3109061346635850169">Cura del viso e del corpo</translation>
 <translation id="3109728660330352905">Non sei autorizzato a visualizzare questa pagina.</translation>
+<translation id="3109788962812161063">Gestione del profilo</translation>
 <translation id="3111155154146792758">Caminetti e stufe</translation>
 <translation id="3112892588078695695">Numero di telefono: <ph name="PHONE" />.</translation>
 <translation id="3113284927548439113">Terzo turno</translation>
@@ -1529,6 +1533,7 @@
 <translation id="3760561303380396507">Usare Windows Hello anziché CVC?</translation>
 <translation id="3761171036307311438">Nome sulla carta di credito:</translation>
 <translation id="3761718714832595332">Nascondi stato</translation>
+<translation id="3763752038825281594">In precedenza non hai consentito l'autorizzazione <ph name="PERMISSION" /> per questo sito</translation>
 <translation id="3765588406864124894">Mailbox 9</translation>
 <translation id="3767485424735936570">Il criterio dell'amministratore sconsiglia di copiare e incollare questi contenuti su <ph name="VM_NAME" /></translation>
 <translation id="3772211998634047851">Carta (per scrivere)</translation>
@@ -1887,6 +1892,7 @@
 <translation id="4397978002248035985">Apre un popup di verifica sul sito web della tua banca</translation>
 <translation id="4406883609789734330">Sottotitoli in tempo reale</translation>
 <translation id="4406896451731180161">risultati di ricerca</translation>
+<translation id="4407758156081352648">Per motivi di sicurezza, la tua organizzazione non consente di riutilizzare le password in Chrome. Le password in Chrome sono criptate per proteggere la privacy degli utenti.</translation>
 <translation id="4408413947728134509">Cookie: <ph name="NUM_COOKIES" /></translation>
 <translation id="4412074349188076601">Questa configurazione è contrassegnata come installabile, ma non è stata fornita alcuna immagine per questa architettura, quindi non può essere installata.</translation>
 <translation id="4414452699610169758">Utilizza Gestore delle password di Google e la Compilazione automatica di Chrome per salvare e compilare password, metodi di pagamento e indirizzi</translation>
@@ -2305,6 +2311,7 @@
 <translation id="521659676233207110">Vassoio 13</translation>
 <translation id="5216942107514965959">Ultima visita: oggi</translation>
 <translation id="5217759126664161410">Formato del protocollo non valido.</translation>
+<translation id="5221377878828867877">Il riutilizzo delle password è monitorato dalla tua organizzazione</translation>
 <translation id="5222812217790122047">Email obbligatoria</translation>
 <translation id="5228269245420405804">Didattica a distanza</translation>
 <translation id="5230733896359313003">Indirizzo di spedizione</translation>
@@ -2802,6 +2809,7 @@
 <translation id="6146055958333702838">Controlla eventuali cavi e riavvia eventuali router, modem o altri dispositivi di rete in uso.</translation>
 <translation id="614940544461990577">Prova a:</translation>
 <translation id="6150036310511284407">Tripla perforatura a sinistra</translation>
+<translation id="6150754742333439143">Il riutilizzo delle password è monitorato da <ph name="ORG_NAME" /></translation>
 <translation id="6151417162996330722">Il certificato del server ha un periodo di validità troppo lungo.</translation>
 <translation id="6153243098246946146"><ph name="WIDTH" /> × <ph name="HEIGHT" /> in (<ph name="ORIENTATION" />)</translation>
 <translation id="615506061184576470">Corsa e camminata</translation>
@@ -3012,6 +3020,7 @@
 <translation id="6507117483253822672">Scrivi in tutta sicurezza ovunque sul web</translation>
 <translation id="6508722015517270189">Riavvia Chrome</translation>
 <translation id="6513005815064132016">Può chiedere di monitorare la posizione della videocamera</translation>
+<translation id="6514932395202175590">Per continuare, accedi all'account <ph name="EMAIL" /> e configura un nuovo profilo</translation>
 <translation id="6517596291481585650">Avviso: questo criterio non è stato unito come elenco come specificato dal criterio perché non è un elenco.</translation>
 <translation id="6518133107902771759">Verifica</translation>
 <translation id="6519885440226079262">Può chiedere di monitorare le tue mani</translation>
@@ -3037,6 +3046,7 @@
 <translation id="6556866813142980365">Ripeti</translation>
 <translation id="6557715786897013164">14 x 17 in</translation>
 <translation id="6560786330438719938">App installate o disinstallate e frequenza di utilizzo</translation>
+<translation id="6567832540451970450">L'amministratore consente <ph name="PERMISSION" /> per questo sito</translation>
 <translation id="6568793038316600992">Pulsante Gestisci metodi di pagamento, attiva per gestire i tuoi pagamenti e i dati delle carte di credito nelle impostazioni di Chrome</translation>
 <translation id="6569060085658103619">È visualizzata la pagina di un'estensione</translation>
 <translation id="6573200754375280815">Perforatura doppia a destra</translation>
@@ -3457,6 +3467,7 @@
 <translation id="736592699917579616">Cibo</translation>
 <translation id="7366117520888504990">198 x 275 mm</translation>
 <translation id="7366362069757178916">Gestori dei pagamenti</translation>
+<translation id="7366594738862061263">Scopri di più su come Chrome protegge le tue password</translation>
 <translation id="7367985555340314048">Gli argomenti di interesse si basano sulla tua recente cronologia di navigazione e sono utilizzati dai siti per mostrarti annunci personalizzati</translation>
 <translation id="7372526636730851647">Foto (patinata)</translation>
 <translation id="7372973238305370288">risultato della ricerca</translation>
@@ -3911,6 +3922,7 @@
 <translation id="8151185429379586178">Strumenti per sviluppatori</translation>
 <translation id="8153865548451212769">{0,plural, =1{Il criterio dell'amministratore sconsiglia di scaricare questo file su <ph name="DESTINATION_NAME" />}other{Il criterio dell'amministratore sconsiglia di scaricare questi file su <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="81563721597823545">Attrezzature e articoli per hockey</translation>
+<translation id="815805690561372740">Chrome è dotato di funzionalità di sicurezza integrate che ti proteggono durante la navigazione, come Google Navigazione sicura, che <ph name="BEGIN_LINK" />di recente ha rilevato malware<ph name="END_LINK" /> sul sito che hai cercato di visitare.</translation>
 <translation id="8161095570253161196">Riprendi la navigazione</translation>
 <translation id="8163866351304776260">Perforatura quadrupla a sinistra</translation>
 <translation id="8164078261547504572">Vuoi ricevere email in caso di calo dei prezzo?</translation>
@@ -3928,6 +3940,7 @@
 <translation id="8194412401381329820">Non puoi usare questa pagina da un account gestito su questo dispositivo non gestito. Se usi questa pagina verranno bloccati tutti gli account gestiti, ad eccezione degli account gestiti dalla stessa entità di questo dispositivo (account affiliati).</translation>
 <translation id="8194797478851900357">&amp;Annulla spostamento</translation>
 <translation id="8194956568907463262">Giochi sparatutto</translation>
+<translation id="819931074683918462">La tua organizzazione richiede l'accesso con un profilo specifico.</translation>
 <translation id="8199437620497683918">Disco ottico (lucido)</translation>
 <translation id="8199730148066603000">L'anteprima dell'URL non HTTPS non è consentita.</translation>
 <translation id="8200772114523450471">Riprendi</translation>
@@ -4052,6 +4065,7 @@
 <translation id="8398790343843005537">Trova il tuo telefono</translation>
 <translation id="8399276468426899527">Blocco e uso della tastiera</translation>
 <translation id="8400929824946688748">Lavoro e istruzione</translation>
+<translation id="8402442052798347631">Gli utenti malintenzionati sul sito che hai cercato di visitare potrebbero indurti con l'inganno a installare un software dannoso che influisce sulla tua navigazione, ad esempio cambiando la tua home page o mostrando annunci aggiuntivi sui siti che visiti. Chrome consiglia vivamente di tornare indietro per evitare problemi. <ph name="BEGIN_LEARN_MORE_LINK" />Scopri di più sull'avviso<ph name="END_LEARN_MORE_LINK" />.</translation>
 <translation id="8403506619177967839">Fanfiction</translation>
 <translation id="8405579342203358118">Gestisci le informazioni da sincronizzare nelle impostazioni di Chrome</translation>
 <translation id="8406071103346257942">non usare più il blocco schermo per inserire le password</translation>
@@ -4173,6 +4187,7 @@
 <translation id="8623885649813806493">Nessuna password corrispondente. Mostra tutte le password salvate.</translation>
 <translation id="8624354461147303341">Ricevi sconti</translation>
 <translation id="8634957317623797170">54 x 86 mm</translation>
+<translation id="8637362707224133343">Chrome è dotato di funzionalità di sicurezza integrate che ti proteggono durante la navigazione, come Google Navigazione sicura, che <ph name="BEGIN_LINK" />di recente ha rilevato phishing<ph name="END_LINK" /> sul sito che hai cercato di visitare. I siti di phishing si spacciano per altri siti per ingannarti.<ph name="NEW_LINE" />Anche i siti che in genere sono sicuri possono essere compromessi da utenti malintenzionati. <ph name="BEGIN_ERROR_LINK" />Contattaci<ph name="END_ERROR_LINK" /> se ritieni che sia stato commesso un errore e che questo sito non rappresenti un pericolo.</translation>
 <translation id="8641131559425911240">Busta (da lettera)</translation>
 <translation id="8643409044755049933">Busta Kaku 3</translation>
 <translation id="8647287295490773273">210 x 330 mm</translation>
@@ -4199,6 +4214,7 @@
 <translation id="8688672835843460752">Disponibile</translation>
 <translation id="868922510921656628">Pagine per insieme</translation>
 <translation id="8695996513186494922">Confrontare le schede?</translation>
+<translation id="8698428283892912525">Chrome è dotato di funzionalità di sicurezza integrate che ti proteggono durante la navigazione, come Google Navigazione sicura, che di recente <ph name="BEGIN_LINK" />ha rilevato un software dannoso<ph name="END_LINK" /> sul sito che hai cercato di visitare.</translation>
 <translation id="869891660844655955">Data di scadenza</translation>
 <translation id="8699041776323235191">Dispositivo HID</translation>
 <translation id="8699985386408839112">Busta Kaku 1</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 3796abae..877fcb01 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">事業運営</translation>
 <translation id="7244061187185055290">検索する内容を表す単語をいくつか入力</translation>
+<translation id="7250174481516136841">カードのメリットの<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="7251437084390964440">ネットワーク設定が ONC 標準に準拠していません。設定の一部がインポートされない可能性があります。
 詳細:
 <ph name="DEBUG_INFO" /></translation>
@@ -3478,6 +3479,7 @@
 <translation id="7390545607259442187">カードの確認</translation>
 <translation id="7392089738299859607">住所を更新</translation>
 <translation id="7393161616326137353">アドベンチャー ゲーム</translation>
+<translation id="7393475648162498734">購入手続きの際にカードでご利用いただける特典とメリットを表示します</translation>
 <translation id="739728382607845710">支払いハンドラのアイコン</translation>
 <translation id="7399616692258236448">許可したサイト以外の位置情報リクエストが自動的にブロックされます</translation>
 <translation id="7399802613464275309">安全チェック</translation>
@@ -4494,6 +4496,7 @@
 <translation id="939736085109172342">新しいフォルダ</translation>
 <translation id="940524522703752213"><ph name="CLOUD_PROVIDER" /> へのファイルのアップロードは <ph name="MINUTES" /> 分後に開始されます</translation>
 <translation id="944540589955480312">Google アカウントに保存したパスワードとパスキーを使用</translation>
+<translation id="944578681290094302">購入手続きの際にカードでご利用いただける特典とメリットを表示します。<ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />カードのメリットの詳細<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Chrome では、サードパーティ Cookie の使用を制限し、ブラウジング中のユーザーをトラッキングできないようにしています。</translation>
 <translation id="945855313015696284">下記の情報を確認し、無効なカードがあれば削除してください</translation>
 <translation id="94613679163347541">「<ph name="CATEGORY" />」を比較しますか?</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index d4fae301..7474a81 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -311,6 +311,7 @@
 <translation id="1553152622374372421">Кышкы спорт оюндары</translation>
 <translation id="1553358976309200471">Chrome'ду жаңыртуу</translation>
 <translation id="1555130319947370107">Көк</translation>
+<translation id="1555191101192706055">Сиз кирүүгө аракет кылган сайттагы чабуулчулар башкы бетти өзгөртүп же кирген сайттарыңызда кошумча жарнамаларды көрсөтүп, серептөөңүзгө кедергисин тийгизе турган зыяндуу программаны орнотушу мүмкүн.</translation>
 <translation id="1559231233244409191">Картон (үч катмарлуу)</translation>
 <translation id="1559447966090556585">Билдирмелер алынсынбы?</translation>
 <translation id="1559486004335285648">Төлөм ыкмасын автотолтуруу</translation>
@@ -512,6 +513,7 @@
 <translation id="1901443836186977402">{1,plural, =1{Бул сервер <ph name="DOMAIN" /> экендигин далилдей алган жок; анын коопсуздук тастыктамасынын мөөнөтү бүтүп калды. Мындай көйгөй сервердин туура эмес конфигурацияланышы менен шартталышы мүмкүн же кимдир-бирөө ортодон дайын-даректериңизди кармап калганга аракет кылып жатат. Учурда компьютериңиздин сааты <ph name="CURRENT_DATE" /> болуп коюлган. Туура элеби? Эгер туура эмес болсо, системаңыздын саатын тууралап, бул баракты жаңылаңыз.}other{Бул сервер <ph name="DOMAIN" /> экендигин далилдей алган жок; анын коопсуздук тастыктамасынын мөөнөтү # күн мурун аяктаган. Мындай көйгөй туура эмес конфигурация менен шартталышы мүмкүн же туташууңузга чабуулчу кийлигишип жатат. Учурда компьютериңиздеги саат <ph name="CURRENT_DATE" /> болду. Туурабы? Эгер туура эмес болсо, системаңыздын саатын тууралап, андан соң бул бетти жаңылаңыз.}}</translation>
 <translation id="1902576642799138955">Жарактуулук мезгили</translation>
 <translation id="1908217026282415406">Камераны колдонуу жана жылдыруу</translation>
+<translation id="1908690643053136980">Администраторуңуз бул сайт үчүн <ph name="PERMISSION" /> колдонууга уруксат бербейт</translation>
 <translation id="1913037223029790376">Ушул виртуалдык картанын CVC кодун колдонуңуз</translation>
 <translation id="191374271204266022">JSON форматында көчүрүү</translation>
 <translation id="1914326953223720820">Файлдарды архивден чыгаруу кызматы</translation>
@@ -1028,6 +1030,7 @@
 <translation id="2903493209154104877">Даректер</translation>
 <translation id="290376772003165898">Барак <ph name="LANGUAGE" /> тилинде эмес бекен?</translation>
 <translation id="2905107382358353958">Жаңы төлөм параметри жөнүндө эскертүү</translation>
+<translation id="2909120679423833511">Уюмуңуз, <ph name="MANAGER" />, белгилүү бир профиль аркылуу кирүүңүздү талап кылат</translation>
 <translation id="2909946352844186028">Тармак өзгөрүлгөн окшойт.</translation>
 <translation id="2911255567212929079">Машина менен үйрөтүү жана Жасалма интеллект</translation>
 <translation id="2911973620368911614">Тапшырманы аткаруучунун идентификатору</translation>
@@ -1137,6 +1140,7 @@
 <translation id="3108943290502734357">Ортонку түпкүч</translation>
 <translation id="3109061346635850169">Жүзгө жана денеге кам көрүү</translation>
 <translation id="3109728660330352905">Бул баракты көрүүгө уруксатыңыз жок.</translation>
+<translation id="3109788962812161063">Профилди тескөө</translation>
 <translation id="3111155154146792758">Каминдер жана мештер</translation>
 <translation id="3112892588078695695">Телефон номери: <ph name="PHONE" />.</translation>
 <translation id="3113284927548439113">Үчүнчү смена</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3760561303380396507">CVC'нин ордуна Windows Hello колдонулсунбу?</translation>
 <translation id="3761171036307311438">Картадагы ысым:</translation>
 <translation id="3761718714832595332">Абалын жашыруу</translation>
+<translation id="3763752038825281594">Буга чейин бул сайтка <ph name="PERMISSION" /> колдонууга уруксат берген эмессиз</translation>
 <translation id="3765588406864124894">9-электрондук каттар кутусу</translation>
 <translation id="3767485424735936570">Администраторуңуз бул мазмунду <ph name="VM_NAME" /> көчүрүп, чаптоону сунуштабайт</translation>
 <translation id="3772211998634047851">Кагаз (жогорку сапаттуу)</translation>
@@ -1889,6 +1894,7 @@
 <translation id="4397978002248035985">Банктын вебсайтында ырастоо үчүн калкыма терезени ачат</translation>
 <translation id="4406883609789734330">Ыкчам коштомо жазуулар</translation>
 <translation id="4406896451731180161">издөө натыйжалары</translation>
+<translation id="4407758156081352648">Коопсуздукту сактоо үчүн уюмуңуз сырсөздөрдү Chrome'до кайра колдонууга уруксат бербейт. Chrome'догу сырсөздөр колдонуучунун купуялыгын коргоо үчүн шифрленет.</translation>
 <translation id="4408413947728134509"><ph name="NUM_COOKIES" /> куки</translation>
 <translation id="4412074349188076601">Бул конфигурацияны орнотууга болот деп белгиленгени менен, анын сүрөтү көрсөтүлгөн эмес. Андыктан аны орнотууга болбойт.</translation>
 <translation id="4414452699610169758">Сырсөздөрдү, төлөм ыкмаларын жана даректерди сактоо жана толтуруу үчүн сырсөздөрдү башкаргычты жана Chrome автотолтурууну колдонуңуз</translation>
@@ -2307,6 +2313,7 @@
 <translation id="521659676233207110">13-түпкүч</translation>
 <translation id="5216942107514965959">Бүгүн акыркы жолу кирген</translation>
 <translation id="5217759126664161410">Протоколдун форматы жараксыз.</translation>
+<translation id="5221377878828867877">Сырсөздү кайра колдонуу уюмуңуз тарабынан көзөмөлдөнөт</translation>
 <translation id="5222812217790122047">Электрондук почта дареги талап кылынат</translation>
 <translation id="5228269245420405804">Аралыктан окутуу</translation>
 <translation id="5230733896359313003">Жөнөтүү дареги</translation>
@@ -2805,6 +2812,7 @@
     тармак түзмөктөрүн өчүрүп-күйгүзүңүз.</translation>
 <translation id="614940544461990577">Төмөнкүлөрдү кылып көрүңүз:</translation>
 <translation id="6150036310511284407">Сол жагын үч жолу тешүү</translation>
+<translation id="6150754742333439143">Сырсөздү кайра колдонуу <ph name="ORG_NAME" /> аркылуу көзөмөлдөнөт</translation>
 <translation id="6151417162996330722">Сервер уруксаттамасынын жарактуу мөөнөтү өтө узун.</translation>
 <translation id="6153243098246946146"><ph name="WIDTH" /> × <ph name="HEIGHT" /> дюйм (<ph name="ORIENTATION" />)</translation>
 <translation id="615506061184576470">Чуркоо жана жөө басуу</translation>
@@ -3015,6 +3023,7 @@
 <translation id="6507117483253822672">Каалаган сайттарда туура жазыңыз</translation>
 <translation id="6508722015517270189">Chrome’ду өчүрүп-күйгүзүңүз</translation>
 <translation id="6513005815064132016">Камеранын абалына көз салууга уруксат сурай алат</translation>
+<translation id="6514932395202175590">Улантуу үчүн <ph name="EMAIL" /> аккаунтуна кирип, жаңы профилди тууралаңыз</translation>
 <translation id="6517596291481585650">Эскертүү: Бул эреже белгиленгендей тизме катары бириктирилген жок, себеби ал тизме эмес.</translation>
 <translation id="6518133107902771759">Текшерүү</translation>
 <translation id="6519885440226079262">Колдоруңузга көз салууга уруксат сурай алат</translation>
@@ -3040,6 +3049,7 @@
 <translation id="6556866813142980365">Кайталоо</translation>
 <translation id="6557715786897013164">14 x 17 дюйм</translation>
 <translation id="6560786330438719938">Орнотулган же чыгарылган колдонмолор жана алар канчалык көп колдонулат</translation>
+<translation id="6567832540451970450">Администраторуңуз бул сайт үчүн <ph name="PERMISSION" /> колдонууга уруксат берет</translation>
 <translation id="6568793038316600992">"Төлөм ыкмаларын башкаруу" баскычы. Chrome'дун жөндөөлөрүнө өтүп, төлөмдөрүңүздү жана насыя карточкасынын маалыматын башкаруу үчүн иштетиңиз</translation>
 <translation id="6569060085658103619">Кеңейтүү баракчасын карап жатасыз</translation>
 <translation id="6573200754375280815">Оң жагын эки жолу тешүү</translation>
@@ -3458,6 +3468,7 @@
 <translation id="736592699917579616">Тамак</translation>
 <translation id="7366117520888504990">198 x 275 мм.</translation>
 <translation id="7366362069757178916">Төлөмдү иштеткичтер</translation>
+<translation id="7366594738862061263">Chrome сырсөздөрүңүздү кантип коргой турганы тууралуу кеңири маалымат</translation>
 <translation id="7367985555340314048">Кызыккан темаларыңыз соңку көрүлгөн вебсайттарга негизделет жана сайттар аларды жекелештирилген жарнамаларды көрсөтүү үчүн колдонот</translation>
 <translation id="7372526636730851647">Фотокагаз (жылтырак)</translation>
 <translation id="7372973238305370288">издөө натыйжасы</translation>
@@ -3911,6 +3922,7 @@
 <translation id="8151185429379586178">Иштеп чыгуучунун куралдары</translation>
 <translation id="8153865548451212769">{0,plural, =1{Администратордун саясаты бул файлды төмөнкүгө жүктөп алууну сунуштабайт: <ph name="DESTINATION_NAME" />}other{Администратордун саясаты бул файлдарды төмөнкүгө жүктөп алууну сунуштабайт: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="81563721597823545">Хоккей жабдуулары</translation>
+<translation id="815805690561372740">Chrome'дун Google Коопсуз серептөө сыяктуу алдын ала орнотулган коопсуздук функциялары серептөө учурунда сизди коргойт. Жакында ал аркылуу сиз кирүүгө аракет кылган сайттан <ph name="BEGIN_LINK" />кесепеттүү программа табылды<ph name="END_LINK" />.</translation>
 <translation id="8161095570253161196">Карай берүү</translation>
 <translation id="8163866351304776260">Сол жагын төрт жолу тешүү</translation>
 <translation id="8164078261547504572">Баалар төмөндөгөндө электрондук каттарды алгыңыз келеби?</translation>
@@ -3928,6 +3940,7 @@
 <translation id="8194412401381329820">Башкарылбаган бул түзмөктө бул баракты башкарылган аккаунттан колдоно албайсыз. Эгер бул баракты колдонсоңуз, байланышкан аккаунттардан (бул түзмөк таандык болгон уюм башкарган аккаунттар) башка бардык башкарылган аккаунттар кулпуланат.</translation>
 <translation id="8194797478851900357">Жылдырууну &amp;жасабоо</translation>
 <translation id="8194956568907463262">Атышмай оюндар</translation>
+<translation id="819931074683918462">Уюмуңуз белгилүү бир профиль аркылуу кирүүңүздү талап кылат.</translation>
 <translation id="8199437620497683918">Оптикалык диск (жылтырак)</translation>
 <translation id="8199730148066603000">HTTPS эмес URL дарегин алдын ала көрүүгө болбойт.</translation>
 <translation id="8200772114523450471">Улантуу</translation>
@@ -4052,6 +4065,7 @@
 <translation id="8398790343843005537">Телефонуңузду табыңыз</translation>
 <translation id="8399276468426899527">баскычтопту кулпулап, колдонуу</translation>
 <translation id="8400929824946688748">Жумуш жана билим берүү</translation>
+<translation id="8402442052798347631">Сиз кирүүгө аракет кылган сайттагы чабуулчулар башкы бетти өзгөртүп же кирген сайттарыңызда кошумча жарнамаларды көрсөтүп, серептөөңүзгө кедергисин тийгизе турган зыяндуу программаны орнотушу мүмкүн. Chrome зыяндын алдын алуу үчүн артка кайтууну сунуштайт. <ph name="BEGIN_LEARN_MORE_LINK" />Бул эскертүү жөнүндө кеңири маалымат алыңыз<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="8403506619177967839">Фанаттардын чыгармалары</translation>
 <translation id="8405579342203358118">Chrome параметрлеринен шайкештирилген маалыматты башкаруу</translation>
 <translation id="8406071103346257942">сырсөздөрдү толтуруу үчүн экрандын кулпусун колдонууну токтоткону жатат</translation>
@@ -4172,6 +4186,7 @@
 <translation id="8623885649813806493">Дал келген сырсөздөр жок. Бардык сакталган сырсөздөрдү көрсөтүү.</translation>
 <translation id="8624354461147303341">Арзандатууларга ээ болуу</translation>
 <translation id="8634957317623797170">54 x 86 мм.</translation>
+<translation id="8637362707224133343">Chrome'дун Google Коопсуз серептөө сыяктуу алдын ала орнотулган коопсуздук функциялары серептөө учурунда сизди коргойт. Жакында ал аркылуу сиз кирүүгө аракет кылган сайттан <ph name="BEGIN_LINK" />фишинг табылды<ph name="END_LINK" />. Фишинг сайттары сизди алдоо үчүн өздөрүн башка сайттар катары көрсөтүшөт.<ph name="NEW_LINE" />Ал тургай, адатта коопсуз болгон сайттар да кээде чабуулга дуушар болушат. Эгер муну жаңылыштык деп ойлосоңуз жана бул сайт коркунуч туудурбаса, <ph name="BEGIN_ERROR_LINK" />бизге кабарлап коюңуз<ph name="END_ERROR_LINK" />.</translation>
 <translation id="8641131559425911240">Конверт (жогорку сапаттуу)</translation>
 <translation id="8643409044755049933">Конверт Каку 3</translation>
 <translation id="8647287295490773273">210 x 330 мм.</translation>
@@ -4198,6 +4213,7 @@
 <translation id="8688672835843460752">Бош</translation>
 <translation id="868922510921656628">Бир топтомдогу барактар</translation>
 <translation id="8695996513186494922">Өтмөктөр салыштырылсынбы?</translation>
+<translation id="8698428283892912525">Chrome'дун Google Коопсуз серептөө сыяктуу алдын ала орнотулган коопсуздук функциялары серептөө учурунда сизди коргойт. Жакында ал аркылуу сиз кирүүгө аракет кылган сайттан <ph name="BEGIN_LINK" />зыяндуу программа табылды<ph name="END_LINK" />.</translation>
 <translation id="869891660844655955">Мөөнөтү аяктай турган күн</translation>
 <translation id="8699041776323235191">HID түзмөгү</translation>
 <translation id="8699985386408839112">Конверт Каку 1</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 6afcb8b5..8ec7c5b 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -311,6 +311,7 @@
 <translation id="1553152622374372421">Žiemos sporto šakos</translation>
 <translation id="1553358976309200471">Atnaujinti „Chrome“</translation>
 <translation id="1555130319947370107">Mėlyna</translation>
+<translation id="1555191101192706055">Svetainės, kurioje bandėte apsilankyti, atakos vykdytojai gali apgaule priversti jus įdiegti žalingą programinę įrangą, paveikiančią naršymo būdą, pvz., pakeitus pagrindinį puslapį ar rodant papildomus skelbimus svetainėse, kuriose lankotės.</translation>
 <translation id="1559231233244409191">Kartonas (trigubos sienos)</translation>
 <translation id="1559447966090556585">Gauti pranešimus?</translation>
 <translation id="1559486004335285648">Automatinio pildymo mokėjimo informacija</translation>
@@ -512,6 +513,7 @@
 <translation id="1901443836186977402">{1,plural, =1{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi pastarąją dieną. Taip gali būti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuolėjo. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar šis laikas tinkamas? Jeigu ne, pakoreguokite sistemos laikrodį ir atnaujinkite šį puslapį.}one{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dieną. Taip gali būti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuolėjo. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar šis laikas tinkamas? Jeigu ne, pakoreguokite sistemos laikrodį ir atnaujinkite šį puslapį.}few{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienas. Taip gali būti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuolėjo. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar šis laikas tinkamas? Jeigu ne, pakoreguokite sistemos laikrodį ir atnaujinkite šį puslapį.}many{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienos. Taip gali būti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuolėjo. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar šis laikas tinkamas? Jeigu ne, pakoreguokite sistemos laikrodį ir atnaujinkite šį puslapį.}other{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienų. Taip gali būti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuolėjo. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar šis laikas tinkamas? Jeigu ne, pakoreguokite sistemos laikrodį ir atnaujinkite šį puslapį.}}</translation>
 <translation id="1902576642799138955">Galiojimo laikas</translation>
 <translation id="1908217026282415406">Kameros naudojimas ir judinimas</translation>
+<translation id="1908690643053136980">Administratorius neleidžia šioje svetainėje: <ph name="PERMISSION" /></translation>
 <translation id="1913037223029790376">Naudokite šios virtualios kortelės saugos kodą (CVC)</translation>
 <translation id="191374271204266022">Kopijuoti kaip JSON</translation>
 <translation id="1914326953223720820">Išpakavimo paslauga</translation>
@@ -1028,6 +1030,7 @@
 <translation id="2903493209154104877">Adresai</translation>
 <translation id="290376772003165898">Puslapis parašytas ne <ph name="LANGUAGE" />?</translation>
 <translation id="2905107382358353958">Įspėjimas apie naują mokėjimo nustatymą</translation>
+<translation id="2909120679423833511">Jūsų organizacija (<ph name="MANAGER" />) reikalauja prisijungti naudojant konkretų profilį</translation>
 <translation id="2909946352844186028">Aptiktas tinklo pasikeitimas.</translation>
 <translation id="2911255567212929079">Mašininis mokymasis ir dirbtinis intelektas</translation>
 <translation id="2911973620368911614">Užduoties paskyros naudotojo ID</translation>
@@ -1137,6 +1140,7 @@
 <translation id="3108943290502734357">Vidurinis dėklas</translation>
 <translation id="3109061346635850169">Veido ir kūno priežiūra</translation>
 <translation id="3109728660330352905">Neturite prieigos teisės žiūrėti šį puslapį.</translation>
+<translation id="3109788962812161063">Profilio tvarkymas</translation>
 <translation id="3111155154146792758">Židiniai ir krosnys</translation>
 <translation id="3112892588078695695">Telefono numeris: <ph name="PHONE" />.</translation>
 <translation id="3113284927548439113">Trečia pamaina</translation>
@@ -1533,6 +1537,7 @@
 <translation id="3760561303380396507">Naudoti „Windows Hello“ vietoj CVC?</translation>
 <translation id="3761171036307311438">Kortelėje nurodytas vardas ir pavardė:</translation>
 <translation id="3761718714832595332">Slėpti būseną</translation>
+<translation id="3763752038825281594">Anksčiau neleidote <ph name="PERMISSION" /> šioje svetainėje</translation>
 <translation id="3765588406864124894">9 pašto dėžutė</translation>
 <translation id="3767485424735936570">Vadovaujantis administratoriaus politika nerekomenduojama kopijuoti ir įklijuoti šio turinio sistemoje „<ph name="VM_NAME" />“</translation>
 <translation id="3772211998634047851">Popierius (standusis)</translation>
@@ -1891,6 +1896,7 @@
 <translation id="4397978002248035985">Banko svetainėje atidaromas iššokantysis langas, kuriame reikia patvirtinti</translation>
 <translation id="4406883609789734330">Subtitrai realiuoju laiku</translation>
 <translation id="4406896451731180161">paieškos rezultatai</translation>
+<translation id="4407758156081352648">Siekdama užtikrinti saugą, jūsų organizacija neleidžia pakartotinai naudoti slaptažodžių naršyklėje „Chrome“. „Chrome“ slaptažodžiai yra užšifruoti, siekiant apsaugoti naudotojų privatumą.</translation>
 <translation id="4408413947728134509">Slapukai <ph name="NUM_COOKIES" /></translation>
 <translation id="4412074349188076601">Ši konfigūracija pažymėta kaip įdiegiama, bet nepateiktas joks šios konstrukcijos vaizdas, todėl jos negalima įdiegti.</translation>
 <translation id="4414452699610169758">Naudokite „Google“ slaptažodžių tvarkyklę ir „Chrome“ automatinio pildymo funkciją, kad išsaugotumėte ir užpildytumėte slaptažodžius, mokėjimo metodus ir adresus</translation>
@@ -2309,6 +2315,7 @@
 <translation id="521659676233207110">Tryliktas dėklas</translation>
 <translation id="5216942107514965959">Paskutinį kartą lankytasi šiandien</translation>
 <translation id="5217759126664161410">Netinkamas protokolo formatas.</translation>
+<translation id="5221377878828867877">Slaptažodžio pakartotinį naudojimą stebi jūsų organizacija</translation>
 <translation id="5222812217790122047">Būtina nurodyti el. paštą</translation>
 <translation id="5228269245420405804">Nuotolinis mokymasis</translation>
 <translation id="5230733896359313003">Pristatymo adresas</translation>
@@ -2807,6 +2814,7 @@
         naudojamus tinklo įrenginius.</translation>
 <translation id="614940544461990577">Pabandykite atlikti toliau nurodytus veiksmus.</translation>
 <translation id="6150036310511284407">Trys skylės kairėje</translation>
+<translation id="6150754742333439143">Slaptažodžio pakartotinį naudojimą stebi „<ph name="ORG_NAME" />“</translation>
 <translation id="6151417162996330722">Serverio sertifikato galiojimo laikotarpis per ilgas.</translation>
 <translation id="6153243098246946146"><ph name="WIDTH" /> × <ph name="HEIGHT" /> col. (<ph name="ORIENTATION" />)</translation>
 <translation id="615506061184576470">Bėgimas ir ėjimas</translation>
@@ -3017,6 +3025,7 @@
 <translation id="6507117483253822672">Užtikrintai rašykite bet kur žiniatinklyje</translation>
 <translation id="6508722015517270189">Iš naujo paleiskite „Chrome“</translation>
 <translation id="6513005815064132016">Gali būti prašoma stebėti fotoaparato poziciją</translation>
+<translation id="6514932395202175590">Jei norite tęsti, prisijunkite prie <ph name="EMAIL" /> ir nustatykite naują profilį</translation>
 <translation id="6517596291481585650">Įspėjimas: ši politika nebuvo sujungta kaip sąrašas, kaip nurodyta politikoje, nes ji nėra sąrašas.</translation>
 <translation id="6518133107902771759">Patvirtinti</translation>
 <translation id="6519885440226079262">Gali paprašyti stebėti jūsų rankas</translation>
@@ -3042,6 +3051,7 @@
 <translation id="6556866813142980365">Grąžinti</translation>
 <translation id="6557715786897013164">14 x 17 col.</translation>
 <translation id="6560786330438719938">Įdiegtos arba pašalintos programos ir kaip dažnai jos naudojamos</translation>
+<translation id="6567832540451970450">Administratorius leidžia šioje svetainėje: <ph name="PERMISSION" /></translation>
 <translation id="6568793038316600992">Mygtukas „Tvarkyti mokėjimo metodus“; suaktyvinkite, kad būtų galima tvarkyti mokėjimų ir kredito kortelės informaciją „Chrome“ nustatymuose</translation>
 <translation id="6569060085658103619">Peržiūrite plėtinio puslapį</translation>
 <translation id="6573200754375280815">Dvi skylės dešinėje</translation>
@@ -3410,6 +3420,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Verslo operacijos</translation>
 <translation id="7244061187185055290">Keliais žodžiais apibūdinkite, ko ieškote</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /> apie kortelių privilegijas</translation>
 <translation id="7251437084390964440">Tinklo konfigūracija neatitinka ONC standarto. Kai kurių konfigūracijos dalių negalima importuoti.
 Papildoma išsami informacija:
 <ph name="DEBUG_INFO" /></translation>
@@ -3461,6 +3472,7 @@
 <translation id="736592699917579616">Maistas</translation>
 <translation id="7366117520888504990">198 x 275 mm</translation>
 <translation id="7366362069757178916">Mokėjimų doroklės</translation>
+<translation id="7366594738862061263">Sužinokite daugiau, kaip „Chrome“ apsaugo jūsų slaptažodžius</translation>
 <translation id="7367985555340314048">Dominančios temos nustatomos pagal jūsų naujausią naršymo istoriją ir svetainėse naudojamos suasmenintiems skelbimams rodyti</translation>
 <translation id="7372526636730851647">Fotopopierius (blizgus)</translation>
 <translation id="7372973238305370288">paieškos rezultatas</translation>
@@ -3479,6 +3491,7 @@
 <translation id="7390545607259442187">Kortelės patvirtinimas</translation>
 <translation id="7392089738299859607">Adreso atnaujinimas</translation>
 <translation id="7393161616326137353">Nuotykių žaidimai</translation>
+<translation id="7393475648162498734">Atsiskaitant parodyti, kokios premijos ir privilegijos pasiekiamos kortelėms</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="7399802613464275309">Saugos patikra</translation>
@@ -3914,6 +3927,7 @@
 <translation id="8151185429379586178">Kūrėjo įrankiai</translation>
 <translation id="8153865548451212769">{0,plural, =1{Pagal administratoriaus politikos nuostatas nerekomenduojama atsisiųsti šio failo į „<ph name="DESTINATION_NAME" />“}one{Pagal administratoriaus politikos nuostatas nerekomenduojama atsisiųsti šių failų į „<ph name="DESTINATION_NAME" />“}few{Pagal administratoriaus politikos nuostatas nerekomenduojama atsisiųsti šių failų į „<ph name="DESTINATION_NAME" />“}many{Pagal administratoriaus politikos nuostatas nerekomenduojama atsisiųsti šių failų į „<ph name="DESTINATION_NAME" />“}other{Pagal administratoriaus politikos nuostatas nerekomenduojama atsisiųsti šių failų į „<ph name="DESTINATION_NAME" />“}}</translation>
 <translation id="81563721597823545">Ledo ritulio įranga</translation>
+<translation id="815805690561372740">„Chrome“ integruotos saugos funkcijos, skirtos apsaugoti jus, kai naršote, pvz., „Google“ saugaus naršymo funkcija, kurią naudojant <ph name="BEGIN_LINK" />neseniai buvo rasta kenkėjiška programa<ph name="END_LINK" /> svetainėje, kurioje bandėte apsilankyti.</translation>
 <translation id="8161095570253161196">Tęsti naršymą</translation>
 <translation id="8163866351304776260">Keturios skylės kairėje</translation>
 <translation id="8164078261547504572">Norite gauti el. laiškus, kai kainos sumažės?</translation>
@@ -3931,6 +3945,7 @@
 <translation id="8194412401381329820">Negalite naudoti šio puslapio iš valdomos paskyros šiame nevaldomame įrenginyje. Visos valdomos paskyros bus užrakintos, jei naudosite šį puslapį, išskyrus paskyras, kurias valdo tas pats subjektas kaip šiame įrenginyje (filialų paskyros).</translation>
 <translation id="8194797478851900357">&amp;Anuliuoti perkėlimą</translation>
 <translation id="8194956568907463262">Šaudyklės žaidimai</translation>
+<translation id="819931074683918462">Jūsų organizacija reikalauja prisijungti naudojant konkretų profilį</translation>
 <translation id="8199437620497683918">Optinis diskas (blizgus)</translation>
 <translation id="8199730148066603000">Neleidžiama peržiūrėti ne HTTPS URL.</translation>
 <translation id="8200772114523450471">Atnaujinti</translation>
@@ -4055,6 +4070,7 @@
 <translation id="8398790343843005537">Suraskite savo telefoną</translation>
 <translation id="8399276468426899527">klaviatūros užrakinimas ir naudojimas</translation>
 <translation id="8400929824946688748">Darbai ir švietimas</translation>
+<translation id="8402442052798347631">Svetainės, kurioje bandėte apsilankyti, atakos vykdytojai gali apgaule priversti jus įdiegti žalingą programinę įrangą, paveikiančią naršymo būdą, pvz., pakeitus pagrindinį puslapį ar rodant papildomus skelbimus svetainėse, kuriose lankotės. „Chrome“ primygtinai rekomenduoja vėl naudoti saugos režimą, kad išvengtumėte žalos. <ph name="BEGIN_LEARN_MORE_LINK" />Sužinokite daugiau apie šį perspėjimą<ph name="END_LEARN_MORE_LINK" />.</translation>
 <translation id="8403506619177967839">Mėgėjų literatūros veikalai</translation>
 <translation id="8405579342203358118">Tvarkykite sinchronizuojamą informaciją „Chrome“ nustatymuose</translation>
 <translation id="8406071103346257942">nebenaudoti ekrano užrakto slaptažodžiams užpildyti</translation>
@@ -4176,6 +4192,7 @@
 <translation id="8623885649813806493">Nėra jokių atitinkančių slaptažodžių. Rodyti visus išsaugotus slaptažodžius.</translation>
 <translation id="8624354461147303341">Gauti nuolaidų</translation>
 <translation id="8634957317623797170">54 x 86 mm</translation>
+<translation id="8637362707224133343">„Chrome“ integruotos saugos funkcijos, skirtos apsaugoti jus, kai naršote, pvz., „Google“ saugaus naršymo funkcija, kurią naudojant <ph name="BEGIN_LINK" />neseniai buvo rastas sukčiavimas<ph name="END_LINK" /> svetainėje, kurioje bandėte apsilankyti. Sukčiavimo svetainės apsimeta kitomis svetainėmis, kad jus apgautų.<ph name="NEW_LINE" />Net svetaines, kurios paprastai yra saugios, kartais pažeidžia atakų vykdytojai. <ph name="BEGIN_ERROR_LINK" />Praneškite mums<ph name="END_ERROR_LINK" />, jei manote, kad įvyko klaida ir ši svetainė nekelia pavojaus.</translation>
 <translation id="8641131559425911240">Vokas (standusis)</translation>
 <translation id="8643409044755049933">„Kaku 3“ vokas</translation>
 <translation id="8647287295490773273">210 x 330 mm</translation>
@@ -4202,6 +4219,7 @@
 <translation id="8688672835843460752">Galima</translation>
 <translation id="868922510921656628">Puslapių skaičius rinkinyje</translation>
 <translation id="8695996513186494922">Palyginti skirtukus?</translation>
+<translation id="8698428283892912525">„Chrome“ integruotos saugos funkcijos, skirtos apsaugoti jus, kai naršote, pvz., „Google“ saugaus naršymo funkcija, kurią naudojant neseniai <ph name="BEGIN_LINK" />buvo rasta žalinga programinė įranga<ph name="END_LINK" /> svetainėje, kurioje bandėte apsilankyti.</translation>
 <translation id="869891660844655955">Galiojimo data</translation>
 <translation id="8699041776323235191">HID įrenginys</translation>
 <translation id="8699985386408839112">„Kaku 1“ vokas</translation>
@@ -4495,6 +4513,7 @@
 <translation id="939736085109172342">Naujas aplankas</translation>
 <translation id="940524522703752213">Failų įkėlimas į „<ph name="CLOUD_PROVIDER" />“ bus pradėtas po <ph name="MINUTES" /> min.</translation>
 <translation id="944540589955480312">Naudoti „Google“ paskyroje išsaugotus slaptažodžius ir prieigos raktus</translation>
+<translation id="944578681290094302">Atsiskaitant parodyti, kokios premijos ir privilegijos pasiekiamos kortelėms. <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Sužinokite apie kortelių privilegijas<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">„Chrome“ neleidžia svetainėms naudoti trečiųjų šalių slapukų, siekiant jus stebėti, kai naršote.</translation>
 <translation id="945855313015696284">Patikrinkite toliau pateiktą informaciją ir ištrinkite visas netinkamas korteles</translation>
 <translation id="94613679163347541">Palyginti „<ph name="CATEGORY" />“?</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index b4529cda..332ebd9 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Shughuli za Biashara</translation>
 <translation id="7244061187185055290">Kwa maneno machache, elezea unachotafuta</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /> kuhusu manufaa ya kadi</translation>
 <translation id="7251437084390964440">Mipangilio ya mtandao haitii kiwango cha ONC. Huenda baadhi ya mipangilio haitapakiwa. Maelezo ya ziada: <ph name="DEBUG_INFO" /></translation>
 <translation id="7251635775446614726">Msimamizi wako anasema: "<ph name="CUSTOM_MESSAGE" />"</translation>
 <translation id="7255540419660272073">Kitufe cha halinipendezi, bonyeza Enter ili ufungue fomu ya kutuma maoni ya kina kuhusu kwa nini hupendi, <ph name="THUMBS_DOWN_SUGGESTION_BUTTON_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation>
@@ -3476,6 +3477,7 @@
 <translation id="7390545607259442187">Thibitisha Kadi</translation>
 <translation id="7392089738299859607">Sasisha Anwani</translation>
 <translation id="7393161616326137353">Michezo ya Matukio ya Kusisimua</translation>
+<translation id="7393475648162498734">Onyesha zawadi na manufaa yanayopatikana kwenye kadi zako unapolipa</translation>
 <translation id="739728382607845710">Aikoni ya kidhibiti cha malipo</translation>
 <translation id="7399616692258236448">Maombi ya kufikia data ya mahali ulipo yanazuiwa kiotomatiki kwenye tovuti zote isipokuwa zile unazoruhusu</translation>
 <translation id="7399802613464275309">Angalizo la Usalama</translation>
@@ -4490,6 +4492,7 @@
 <translation id="939736085109172342">Folda mpya</translation>
 <translation id="940524522703752213">Mchakato wa kupakia faili yako kwenye <ph name="CLOUD_PROVIDER" /> utaanza baada ya dakika <ph name="MINUTES" /></translation>
 <translation id="944540589955480312">Tumia manenosiri na funguo za siri zilizohifadhiwa kwenye Akaunti yako ya Google</translation>
+<translation id="944578681290094302">Onyesha zawadi na manufaa yanayopatikana kwenye kadi zako unapolipa. <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Pata maelezo kuhusu manufaa ya kadi<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Chrome huzuia tovuti ili zisitumie vidakuzi vya wahusika wengine kukufuatilia unapovinjari.</translation>
 <translation id="945855313015696284">Angalia maelezo yaliyo hapa chini na ufute kadi zozote ambazo si sahihi</translation>
 <translation id="94613679163347541">Ungependa kulinganisha <ph name="CATEGORY" />?</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index a6ae602..c95ba34 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -3409,6 +3409,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">Комерційна діяльність</translation>
 <translation id="7244061187185055290">Опишіть кількома словами, що ви шукаєте</translation>
+<translation id="7250174481516136841"><ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /> про переваги карток</translation>
 <translation id="7251437084390964440">Конфігурація мережі не відповідає стандарту ONC. Вона може імпортуватися частково.
 Додаткові відомості:
 <ph name="DEBUG_INFO" /></translation>
@@ -3478,6 +3479,7 @@
 <translation id="7390545607259442187">Підтвердити дані картки</translation>
 <translation id="7392089738299859607">Оновіть адресу</translation>
 <translation id="7393161616326137353">Пригодницькі ігри</translation>
+<translation id="7393475648162498734">Показувати, які бонуси й переваги доступні для ваших карток під час оплати</translation>
 <translation id="739728382607845710">Значок "Обробник платежів"</translation>
 <translation id="7399616692258236448">Запити на доступ до геоданих автоматично заблоковано для всіх сайтів, крім тих, які ви дозволили</translation>
 <translation id="7399802613464275309">Перевірка безпеки</translation>
@@ -4494,6 +4496,7 @@
 <translation id="939736085109172342">Нова папка</translation>
 <translation id="940524522703752213">Завантаження файлів у сервіс <ph name="CLOUD_PROVIDER" /> почнеться через <ph name="MINUTES" /> хв</translation>
 <translation id="944540589955480312">Використовувати паролі й ключі доступу, збережені в обліковому записі Google</translation>
+<translation id="944578681290094302">Показувати, які бонуси й переваги доступні для ваших карток під час оплати. <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />Докладніше про переваги карток.<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">Chrome забороняє сайтам використовувати сторонні файли cookie, щоб відстежувати ваші дії в Інтернеті.</translation>
 <translation id="945855313015696284">Перевірте дані нижче й видаліть недійсні картки.</translation>
 <translation id="94613679163347541">Порівняти товари в категорії "<ph name="CATEGORY" />"?</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index 2988429..0e37be1 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -3410,6 +3410,7 @@
 <translation id="7243771829620208687">RA0</translation>
 <translation id="7243898806468402921">کاروباری آپریشنز</translation>
 <translation id="7244061187185055290">چند الفاظ میں اس چیز کی وضاحت کریں جسے آپ تلاش کر رہے ہیں</translation>
+<translation id="7250174481516136841">کارڈ کے فوائد کے بارے میں <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation>
 <translation id="7251437084390964440">‏نیٹ ورک کنفیگریشن ONC معیار کی تعمیل نہیں کرتی ہے۔ کنفیگریشن کے حصوں کو درآمد نہیں کیا جا سکتا ہے۔
 اضافی معلومات:
 <ph name="DEBUG_INFO" /></translation>
@@ -3479,6 +3480,7 @@
 <translation id="7390545607259442187">کارڈ کی توثیق کریں</translation>
 <translation id="7392089738299859607">پتہ اپ ڈیٹ کریں</translation>
 <translation id="7393161616326137353">ایڈونچر گیمز</translation>
+<translation id="7393475648162498734">چیک آؤٹ کے وقت دکھائیں کہ آپ کے کارڈز کے لیے کون سے انعامات اور فوائد دستیاب ہیں</translation>
 <translation id="739728382607845710">ادائیگی ہینڈلر کا آئیکن</translation>
 <translation id="7399616692258236448">مقام کی درخواستیں تمام سائٹس کے لیے خودکار طور پر مسدود ہو جاتی ہیں سوائے ان کے جن کی آپ نے اجازت دی ہے</translation>
 <translation id="7399802613464275309">سیفٹی چیک</translation>
@@ -4494,6 +4496,7 @@
 <translation id="939736085109172342">نیا فولڈر</translation>
 <translation id="940524522703752213"><ph name="MINUTES" /> منٹ میں آپ کی فائل <ph name="CLOUD_PROVIDER" /> میں اپ لوڈ ہونا شروع ہو جائے گی</translation>
 <translation id="944540589955480312">‏اپنے Google اکاؤنٹ میں محفوظ کردہ پاس ورڈز اور پاس کیز استعمال کریں</translation>
+<translation id="944578681290094302">چیک آؤٹ کے وقت دکھائیں کہ آپ کے کارڈز کے لیے کون سے انعامات اور فوائد دستیاب ہیں <ph name="CARD_BENEFIT_HELP_LINK_BEGIN" />کارڈ کے فوائد کے بارے میں جانیں<ph name="CARD_BENEFIT_HELP_LINK_END" /></translation>
 <translation id="945646848072568856">‏Chrome سائٹس کو فریق ثالث کوکیز کا استعمال کرنے سے مسدود کرتا ہے تاکہ آپ کے براؤز کرتے وقت وہ آپ کو ٹریک نہ کر سکیں۔</translation>
 <translation id="945855313015696284">مندرجہ ذیل معلومات چیک کریں اور کسی بھی غلط کارڈ کو حذف کریں</translation>
 <translation id="94613679163347541"><ph name="CATEGORY" /> کا موازنہ کریں؟</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 213d4ec8..51d8fccd 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -311,6 +311,7 @@
 <translation id="1553152622374372421">Thể thao mùa đông</translation>
 <translation id="1553358976309200471">Cập nhật Chrome</translation>
 <translation id="1555130319947370107">Xanh lam</translation>
+<translation id="1555191101192706055">Những kẻ tấn công trên trang web bạn đã cố truy cập có thể lừa bạn cài đặt phần mềm độc hại gây ảnh hưởng đến cách bạn duyệt web – chẳng hạn như bằng cách thay đổi trang chủ hoặc hiển thị thêm quảng cáo trên các trang web bạn truy cập.</translation>
 <translation id="1559231233244409191">Bìa cứng (Ba lớp)</translation>
 <translation id="1559447966090556585">Nhận thông báo?</translation>
 <translation id="1559486004335285648">Tự động điền thông tin thanh toán</translation>
@@ -512,6 +513,7 @@
 <translation id="1901443836186977402">{1,plural, =1{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn ngày hôm qua. Nguyên nhân có thể là do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Ngày tháng trong đồng hồ trên máy tính của bạn hiện là <ph name="CURRENT_DATE" />. Thông tin này có chính xác không? Nếu không, bạn cần sửa lại đồng hồ của hệ thống rồi làm mới trang này.}other{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn # ngày trước. Nguyên nhân có thể là do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Ngày tháng trong đồng hồ trên máy tính của bạn hiện là <ph name="CURRENT_DATE" />. Thông tin này có chính xác không? Nếu không, bạn cần sửa lại đồng hồ của hệ thống rồi làm mới trang này.}}</translation>
 <translation id="1902576642799138955">Thời gian Có hiệu lực</translation>
 <translation id="1908217026282415406">Sử dụng và di chuyển máy ảnh</translation>
+<translation id="1908690643053136980">Quản trị viên của bạn không cho phép trang web này sử dụng <ph name="PERMISSION" /></translation>
 <translation id="1913037223029790376">Sử dụng mã CVC cho thẻ ảo này</translation>
 <translation id="191374271204266022">Sao chép ở định dạng JSON</translation>
 <translation id="1914326953223720820">Dịch vụ giải nén</translation>
@@ -1028,6 +1030,7 @@
 <translation id="2903493209154104877">Địa chỉ</translation>
 <translation id="290376772003165898">Trang này không được viết bằng <ph name="LANGUAGE" />?</translation>
 <translation id="2905107382358353958">Thông báo về chế độ cài đặt thông tin thanh toán mới</translation>
+<translation id="2909120679423833511">Tổ chức <ph name="MANAGER" /> của bạn yêu cầu bạn đăng nhập bằng một hồ sơ cụ thể</translation>
 <translation id="2909946352844186028">Đã phát hiện thấy thay đổi mạng.</translation>
 <translation id="2911255567212929079">Học máy và trí tuệ nhân tạo</translation>
 <translation id="2911973620368911614">Mã người dùng tài khoản công việc</translation>
@@ -1137,6 +1140,7 @@
 <translation id="3108943290502734357">Khay giữa</translation>
 <translation id="3109061346635850169">Chăm sóc mặt và cơ thể</translation>
 <translation id="3109728660330352905">Bạn không có quyền xem trang này.</translation>
+<translation id="3109788962812161063">Quản lý hồ sơ</translation>
 <translation id="3111155154146792758">Lò sưởi và lò</translation>
 <translation id="3112892588078695695">Số điện thoại: <ph name="PHONE" />.</translation>
 <translation id="3113284927548439113">Ca thứ 3</translation>
@@ -1532,6 +1536,7 @@
 <translation id="3760561303380396507">Sử dụng Windows Hello thay cho CVC?</translation>
 <translation id="3761171036307311438">Tên trên thẻ:</translation>
 <translation id="3761718714832595332">Ẩn trạng thái</translation>
+<translation id="3763752038825281594">Trước đây, bạn đã không cho phép trang web này sử dụng <ph name="PERMISSION" /></translation>
 <translation id="3765588406864124894">Hộp thư 9</translation>
 <translation id="3767485424735936570">Theo chính sách của quản trị viên, bạn không nên sao chép và dán nội dung này vào <ph name="VM_NAME" /></translation>
 <translation id="3772211998634047851">Giấy (Giấy bông)</translation>
@@ -1890,6 +1895,7 @@
 <translation id="4397978002248035985">Mở cửa sổ bật lên để xác minh trên trang web của ngân hàng</translation>
 <translation id="4406883609789734330">Phụ đề trực tiếp</translation>
 <translation id="4406896451731180161">kết quả tìm kiếm</translation>
+<translation id="4407758156081352648">Nhằm duy trì tính bảo mật, tổ chức của bạn không cho phép sử dụng lại mật khẩu trong Chrome. Mật khẩu trong Chrome được mã hoá để bảo vệ quyền riêng tư của người dùng.</translation>
 <translation id="4408413947728134509">Cookie <ph name="NUM_COOKIES" /></translation>
 <translation id="4412074349188076601">Cấu hình này được đánh dấu là dễ dàng cài đặt, nhưng vì không có hình ảnh nào được cung cấp cho cấu trúc này nên bạn không thể cài đặt cấu hình này.</translation>
 <translation id="4414452699610169758">Sử dụng Trình quản lý mật khẩu của Google và tính năng Tự động điền của Chrome để lưu và điền mật khẩu, phương thức thanh toán và địa chỉ</translation>
@@ -2308,6 +2314,7 @@
 <translation id="521659676233207110">Khay 13</translation>
 <translation id="5216942107514965959">Lần truy cập gần đây nhất: hôm nay</translation>
 <translation id="5217759126664161410">Định dạng giao thức không hợp lệ.</translation>
+<translation id="5221377878828867877">Tổ chức của bạn giám sát việc sử dụng lại mật khẩu</translation>
 <translation id="5222812217790122047">Cần có email</translation>
 <translation id="5228269245420405804">Đào tạo từ xa</translation>
 <translation id="5230733896359313003">Địa chỉ giao hàng</translation>
@@ -2806,6 +2813,7 @@
     mạng khác mà bạn có thể đang sử dụng.</translation>
 <translation id="614940544461990577">Hãy thử:</translation>
 <translation id="6150036310511284407">Đục 3 lỗ bên trái</translation>
+<translation id="6150754742333439143"><ph name="ORG_NAME" /> giám sát việc sử dụng lại mật khẩu</translation>
 <translation id="6151417162996330722">Chứng chỉ máy chủ có thời gian hiệu lực quá dài.</translation>
 <translation id="6153243098246946146"><ph name="WIDTH" /> × <ph name="HEIGHT" /> inch (<ph name="ORIENTATION" />)</translation>
 <translation id="615506061184576470">Chạy bộ và đi bộ</translation>
@@ -3016,6 +3024,7 @@
 <translation id="6507117483253822672">Viết lách tự tin hơn ở bất cứ đâu trên web</translation>
 <translation id="6508722015517270189">Khởi động lại Chrome</translation>
 <translation id="6513005815064132016">Trang web có thể yêu cầu theo dõi vị trí của máy ảnh</translation>
+<translation id="6514932395202175590">Để tiếp tục, hãy đăng nhập vào <ph name="EMAIL" /> rồi thiết lập một hồ sơ mới</translation>
 <translation id="6517596291481585650">Cảnh báo: Chính sách này không phải là danh sách nên không được hợp nhất dưới dạng danh sách như chỉ định trong chính sách.</translation>
 <translation id="6518133107902771759">Xác minh</translation>
 <translation id="6519885440226079262">Có thể yêu cầu theo dõi cử chỉ tay của bạn</translation>
@@ -3041,6 +3050,7 @@
 <translation id="6556866813142980365">Làm lại</translation>
 <translation id="6557715786897013164">14 x 17 inch</translation>
 <translation id="6560786330438719938">Số ứng dụng đã cài đặt hoặc đã bị gỡ cài đặt và tần suất sử dụng</translation>
+<translation id="6567832540451970450">Quản trị viên của bạn cho phép trang web này sử dụng <ph name="PERMISSION" /></translation>
 <translation id="6568793038316600992">Nút Quản lý phương thức thanh toán, hãy nhấn nút này để quản lý thông tin thanh toán và thẻ tín dụng của bạn trong phần cài đặt của Chrome</translation>
 <translation id="6569060085658103619">Bạn đang xem trang tiện ích</translation>
 <translation id="6573200754375280815">Đục 2 lỗ bên phải</translation>
@@ -3460,6 +3470,7 @@
 <translation id="736592699917579616">Đồ ăn</translation>
 <translation id="7366117520888504990">198 x 275 mm</translation>
 <translation id="7366362069757178916">Trình xử lý thanh toán</translation>
+<translation id="7366594738862061263">Tìm hiểu về cách Chrome bảo vệ mật khẩu của bạn</translation>
 <translation id="7367985555340314048">Chủ đề quan tâm được tổng hợp dựa trên nhật ký duyệt web gần đây của bạn và được các trang web dùng để hiện quảng cáo được cá nhân hoá cho bạn</translation>
 <translation id="7372526636730851647">Ảnh (Bóng)</translation>
 <translation id="7372973238305370288">kết quả tìm kiếm</translation>
@@ -3913,6 +3924,7 @@
 <translation id="8151185429379586178">Công cụ dành cho nhà phát triển</translation>
 <translation id="8153865548451212769">{0,plural, =1{Theo chính sách của quản trị viên, bạn không nên tải tệp này xuống <ph name="DESTINATION_NAME" />}other{Theo chính sách của quản trị viên, bạn không nên tải các tệp này xuống <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="81563721597823545">Thiết bị dành cho môn khúc côn cầu</translation>
+<translation id="815805690561372740">Chrome tích hợp sẵn các tính năng an toàn nhằm bảo vệ bạn khi bạn duyệt web, chẳng hạn như Duyệt web An toàn của Google – tính năng <ph name="BEGIN_LINK" />vừa phát hiện thấy phần mềm độc hại<ph name="END_LINK" /> trên trang web bạn đã cố truy cập.</translation>
 <translation id="8161095570253161196">Tiếp tục duyệt xem</translation>
 <translation id="8163866351304776260">Đục 4 lỗ bên trái</translation>
 <translation id="8164078261547504572">Bạn muốn nhận email thông báo khi giá giảm?</translation>
@@ -3930,6 +3942,7 @@
 <translation id="8194412401381329820">Bạn không thể sử dụng trang này từ tài khoản được quản lý trên thiết bị không được quản lý này. Tất cả các tài khoản được quản lý sẽ bị khoá nếu bạn sử dụng trang này, ngoại trừ các tài khoản do cùng một thực thể (như thiết bị này) quản lý (tài khoản được liên kết).</translation>
 <translation id="8194797478851900357">&amp;Hoàn tác di chuyển</translation>
 <translation id="8194956568907463262">Trò chơi bắn súng</translation>
+<translation id="819931074683918462">Tổ chức của bạn yêu cầu bạn đăng nhập bằng một hồ sơ cụ thể.</translation>
 <translation id="8199437620497683918">Đĩa quang (Bóng)</translation>
 <translation id="8199730148066603000">Không cho phép xem trước URL không thuộc loại HTTPS.</translation>
 <translation id="8200772114523450471">Tiếp tục</translation>
@@ -4054,6 +4067,7 @@
 <translation id="8398790343843005537">Tìm điện thoại của bạn</translation>
 <translation id="8399276468426899527">khoá và sử dụng bàn phím</translation>
 <translation id="8400929824946688748">Việc làm và giáo dục</translation>
+<translation id="8402442052798347631">Những kẻ tấn công trên trang web bạn đã cố truy cập có thể lừa bạn cài đặt phần mềm độc hại gây ảnh hưởng đến cách bạn duyệt web – chẳng hạn như bằng cách thay đổi trang chủ hoặc hiển thị thêm quảng cáo trên các trang web bạn truy cập. Bạn nên quay lại trang an toàn để tránh bị tổn hại. <ph name="BEGIN_LEARN_MORE_LINK" />Tìm hiểu thêm về cảnh báo này<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="8403506619177967839">Hư cấu</translation>
 <translation id="8405579342203358118">Quản lý loại thông tin bạn đồng bộ hóa trong phần Cài đặt của Chrome</translation>
 <translation id="8406071103346257942">ngừng sử dụng phương thức khoá màn hình để điền mật khẩu</translation>
@@ -4175,6 +4189,7 @@
 <translation id="8623885649813806493">Không có mật khẩu nào khớp. Hiển thị tất cả các mật khẩu đã lưu.</translation>
 <translation id="8624354461147303341">Nhận chiết khấu</translation>
 <translation id="8634957317623797170">54 x 86 mm</translation>
+<translation id="8637362707224133343">Chrome tích hợp sẵn các tính năng an toàn nhằm bảo vệ bạn khi bạn duyệt web, chẳng hạn như Duyệt web An toàn của Google – tính năng <ph name="BEGIN_LINK" />vừa phát hiện thấy hành vi lừa đảo<ph name="END_LINK" /> trên trang web bạn đã cố truy cập. Trang web lừa đảo sẽ giả mạo các trang web khác để đánh lừa bạn.<ph name="NEW_LINE" />Ngay cả những trang web thường được coi là an toàn đôi khi vẫn bị kẻ tấn công xâm phạm. <ph name="BEGIN_ERROR_LINK" />Hãy cho chúng tôi biết<ph name="END_ERROR_LINK" /> nếu bạn cho rằng đã có sự nhầm lẫn và trang web này không gây nguy hiểm.</translation>
 <translation id="8641131559425911240">Phong bì (Giấy bông)</translation>
 <translation id="8643409044755049933">Phong bì Kaku 3</translation>
 <translation id="8647287295490773273">210 x 330 mm</translation>
@@ -4201,6 +4216,7 @@
 <translation id="8688672835843460752">Có sẵn</translation>
 <translation id="868922510921656628">Số trang mỗi tập</translation>
 <translation id="8695996513186494922">So sánh các thẻ?</translation>
+<translation id="8698428283892912525">Chrome tích hợp sẵn các tính năng an toàn nhằm bảo vệ bạn khi bạn duyệt web, chẳng hạn như Duyệt web An toàn của Google – tính năng vừa <ph name="BEGIN_LINK" />phát hiện thấy phần mềm độc hại<ph name="END_LINK" /> trên trang web bạn đã cố truy cập.</translation>
 <translation id="869891660844655955">Ngày hết hạn</translation>
 <translation id="8699041776323235191">Thiết bị HID</translation>
 <translation id="8699985386408839112">Phong bì Kaku 1</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 726b458..ddca5e5 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -860,7 +860,7 @@
 <translation id="2529899080962247600">這個欄位最多只能包含 <ph name="MAX_ITEMS_LIMIT" /> 個項目,超過的項目會遭到忽略。</translation>
 <translation id="2530042584066815841">滑鼠鎖定和使用</translation>
 <translation id="2533649878691950253">系統已禁止這個網站取得你的精確位置資訊,因為你通常不允許這麼做</translation>
-<translation id="253493526287553278">查看促銷代碼詳情</translation>
+<translation id="253493526287553278">查看優惠碼詳情</translation>
 <translation id="2535585790302968248">開啟新的無痕分頁以進行私密瀏覽</translation>
 <translation id="2535659140340599600">{COUNT,plural, =1{和另外 1 個網域}other{和另外 # 個網域}}</translation>
 <translation id="2536110899380797252">新增地址</translation>
@@ -1355,7 +1355,7 @@
 <translation id="3478033058537426179">依群組分類</translation>
 <translation id="3479552764303398839">現在不要</translation>
 <translation id="3484560055331845446">為避免失去 Google 帳戶存取權,Chrome 建議你立即變更密碼。系統會要求你登入帳戶。</translation>
-<translation id="3484861421501147767">提醒:可使用已儲存的促銷代碼</translation>
+<translation id="3484861421501147767">提醒:可使用已儲存的優惠碼</translation>
 <translation id="3486406746948052912">止汗劑、香體露與身體噴霧</translation>
 <translation id="3487845404393360112">紙匣 4</translation>
 <translation id="3493660662684070951">卡車、貨車與運動型多用途車</translation>
@@ -4138,7 +4138,7 @@
 <translation id="8554010658308662631">載入更多</translation>
 <translation id="8554181323880688938">貴重物品</translation>
 <translation id="8554912124839363479">{NUM_PERMISSIONS,plural, =1{重設權限}other{重設權限}}</translation>
-<translation id="8555010941760982128">結帳時請使用這個促銷代碼</translation>
+<translation id="8555010941760982128">結帳時請使用這個優惠碼</translation>
 <translation id="8556297087315686325">網路監控與管理</translation>
 <translation id="8557066899867184262">信用卡驗證碼位於信用卡背面。</translation>
 <translation id="8558347880669160417">這次允許使用相機和麥克風</translation>
diff --git a/components/user_annotations/user_annotations_database.cc b/components/user_annotations/user_annotations_database.cc
index e470a475..a0c192a 100644
--- a/components/user_annotations/user_annotations_database.cc
+++ b/components/user_annotations/user_annotations_database.cc
@@ -114,13 +114,6 @@
   if (!transaction.Begin()) {
     return UserAnnotationsExecutionResult::kSqlError;
   }
-  if (ShouldReplaceAnnotationsAfterEachSubmission()) {
-    sql::Statement statement(
-        db_.GetCachedStatement(SQL_FROM_HERE, "DELETE FROM entries"));
-    if (!statement.Run()) {
-      return UserAnnotationsExecutionResult::kSqlError;
-    }
-  }
   auto now_time = base::Time::Now();
   for (const auto& entry : upserted_entries) {
     auto encrypted_value = encryptor_.EncryptString(entry.value());
diff --git a/components/user_annotations/user_annotations_features.cc b/components/user_annotations/user_annotations_features.cc
index 6a75ea4..34849a8 100644
--- a/components/user_annotations/user_annotations_features.cc
+++ b/components/user_annotations/user_annotations_features.cc
@@ -33,12 +33,6 @@
                            base::SplitResult::SPLIT_WANT_NONEMPTY);
 }
 
-bool ShouldReplaceAnnotationsAfterEachSubmission() {
-  return base::GetFieldTrialParamByFeatureAsBool(
-      kUserAnnotations, "should_replace_annotations_for_form_submissions",
-      false);
-}
-
 bool ShouldPersistUserAnnotations() {
   return base::GetFieldTrialParamByFeatureAsBool(kUserAnnotations,
                                                  "persist_annotations", false);
diff --git a/components/user_annotations/user_annotations_features.h b/components/user_annotations/user_annotations_features.h
index 44b2ebed..65b96d9 100644
--- a/components/user_annotations/user_annotations_features.h
+++ b/components/user_annotations/user_annotations_features.h
@@ -27,9 +27,6 @@
 // Returns the set of hosts that are allowed for forms annotations.
 std::vector<std::string> GetAllowedHostsForFormsAnnotations();
 
-// Whether the user annotations should be replaced after each form submission.
-bool ShouldReplaceAnnotationsAfterEachSubmission();
-
 // Whether the user annotations should be persisted in database.
 bool ShouldPersistUserAnnotations();
 
diff --git a/components/user_annotations/user_annotations_service.cc b/components/user_annotations/user_annotations_service.cc
index 26a4506..31d4ef5 100644
--- a/components/user_annotations/user_annotations_service.cc
+++ b/components/user_annotations/user_annotations_service.cc
@@ -186,7 +186,8 @@
   if (!result.has_value()) {
     SendFormSubmissionResult(
         std::move(callback), std::move(form),
-        base::unexpected(UserAnnotationsExecutionResult::kResponseError));
+        base::unexpected(UserAnnotationsExecutionResult::kResponseError),
+        std::move(log_entry));
     return;
   }
 
@@ -196,27 +197,34 @@
   if (!maybe_response) {
     SendFormSubmissionResult(
         std::move(callback), std::move(form),
-        base::unexpected(UserAnnotationsExecutionResult::kResponseMalformed));
+        base::unexpected(UserAnnotationsExecutionResult::kResponseMalformed),
+        std::move(log_entry));
     return;
   }
 
   if (ShouldPersistUserAnnotations() && !user_annotations_database_) {
     SendFormSubmissionResult(
         std::move(callback), std::move(form),
-        base::unexpected(UserAnnotationsExecutionResult::kCryptNotInitialized));
+        base::unexpected(UserAnnotationsExecutionResult::kCryptNotInitialized),
+        std::move(log_entry));
     return;
   }
 
   SendFormSubmissionResult(std::move(callback), std::move(form),
-                           base::ok(maybe_response.value()));
+                           base::ok(maybe_response.value()),
+                           std::move(log_entry));
 }
 
 void UserAnnotationsService::OnImportFormConfirmation(
     FormSubmissionResult result,
+    std::unique_ptr<optimization_guide::ModelQualityLogEntry> log_entry,
     bool prompt_was_accepted) {
+  // TODO: b/370039073 - Drop if no explicit action on prompt.
+
   if (!prompt_was_accepted) {
     return;
   }
+
   if (ShouldPersistUserAnnotations()) {
     DCHECK(user_annotations_database_);
 
@@ -235,10 +243,6 @@
     return;
   }
 
-  if (ShouldReplaceAnnotationsAfterEachSubmission()) {
-    entries_.clear();
-  }
-
   for (const auto& entry : result->upserted_entries()) {
     EntryID entry_id = ++entry_id_counter_;
     optimization_guide::proto::UserAnnotationsEntry entry_proto;
@@ -255,25 +259,36 @@
 void UserAnnotationsService::SendFormSubmissionResult(
     UserAnnotationsService::ImportFormCallback callback,
     std::unique_ptr<autofill::FormStructure> form,
-    FormSubmissionResult result) {
+    FormSubmissionResult result,
+    std::unique_ptr<optimization_guide::ModelQualityLogEntry> log_entry) {
   base::UmaHistogramEnumeration(
       "UserAnnotations.AddFormSubmissionResult",
       result.error_or(UserAnnotationsExecutionResult::kSuccess));
   if (!result.has_value()) {
     CHECK_NE(result.error(), UserAnnotationsExecutionResult::kSuccess);
+
+    optimization_guide::ModelQualityLogEntry::Drop(std::move(log_entry));
     std::move(callback).Run(std::move(form),
                             /*to_be_upserted_entries=*/{},
                             /*prompt_acceptance_callback=*/base::DoNothing());
     return;
   }
-  // TODO: b/366278416 - No need to import the form entries when there is no
-  // change.
+
+  if (result->upserted_entries().empty()) {
+    optimization_guide::ModelQualityLogEntry::Drop(std::move(log_entry));
+    std::move(callback).Run(std::move(form),
+                            /*to_be_upserted_entries=*/{},
+                            /*prompt_acceptance_callback=*/base::DoNothing());
+    return;
+  }
+
   UserAnnotationsEntries upserted_entries = UserAnnotationsEntries(
       result->upserted_entries().begin(), result->upserted_entries().end());
   std::move(callback).Run(
       std::move(form), upserted_entries,
       base::BindOnce(&UserAnnotationsService::OnImportFormConfirmation,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(result)));
+                     weak_ptr_factory_.GetWeakPtr(), std::move(result),
+                     std::move(log_entry)));
 }
 
 void UserAnnotationsService::RemoveEntry(EntryID entry_id,
diff --git a/components/user_annotations/user_annotations_service.h b/components/user_annotations/user_annotations_service.h
index 70687ce7..2bb40aa 100644
--- a/components/user_annotations/user_annotations_service.h
+++ b/components/user_annotations/user_annotations_service.h
@@ -146,13 +146,16 @@
   void SendFormSubmissionResult(
       UserAnnotationsService::ImportFormCallback callback,
       std::unique_ptr<autofill::FormStructure> form,
-      FormSubmissionResult result);
+      FormSubmissionResult result,
+      std::unique_ptr<optimization_guide::ModelQualityLogEntry> log_entry);
 
   // Called when decision has been made whether to import form entries.
   // `prompt_was_accepted` is the user decision, and `entries` will be persisted
   // to database when true.
-  void OnImportFormConfirmation(FormSubmissionResult result,
-                                bool prompt_was_accepted);
+  void OnImportFormConfirmation(
+      FormSubmissionResult result,
+      std::unique_ptr<optimization_guide::ModelQualityLogEntry> log_entry,
+      bool prompt_was_accepted);
 
   // An in-memory representation of the "database" of user annotation entries.
   // Used only when `ShouldPersistUserAnnotations()` is false.
diff --git a/components/user_annotations/user_annotations_service_unittest.cc b/components/user_annotations/user_annotations_service_unittest.cc
index fffc5fea..268b598 100644
--- a/components/user_annotations/user_annotations_service_unittest.cc
+++ b/components/user_annotations/user_annotations_service_unittest.cc
@@ -18,6 +18,7 @@
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/optimization_guide/core/mock_optimization_guide_model_executor.h"
+#include "components/optimization_guide/core/model_quality/test_model_quality_logs_uploader_service.h"
 #include "components/optimization_guide/core/test_optimization_guide_decider.h"
 #include "components/optimization_guide/proto/features/common_quality_data.pb.h"
 #include "components/os_crypt/async/browser/os_crypt_async.h"
@@ -61,6 +62,9 @@
         /*is_sync_for_unittests=*/true);
     optimization_guide_decider_ =
         std::make_unique<TestOptimizationGuideDecider>();
+    logs_service_ = std::make_unique<
+        optimization_guide::TestModelQualityLogsUploaderService>(
+        /*pref_service=*/nullptr);
     service_ = std::make_unique<UserAnnotationsService>(
         &model_executor_, temp_dir_.GetPath(), os_crypt_.get(),
         optimization_guide_decider_.get());
@@ -113,10 +117,22 @@
     return optimization_guide_decider_.get();
   }
 
+  optimization_guide::TestModelQualityLogsUploaderService* logs_service() {
+    return logs_service_.get();
+  }
+
+  std::unique_ptr<optimization_guide::ModelQualityLogEntry> CreateLogEntry() {
+    return std::make_unique<optimization_guide::ModelQualityLogEntry>(
+        std::make_unique<optimization_guide::proto::LogAiDataRequest>(),
+        logs_service_->GetWeakPtr());
+  }
+
  protected:
   base::test::ScopedFeatureList scoped_feature_list_;
   base::test::TaskEnvironment task_environment_;
   base::ScopedTempDir temp_dir_;
+  std::unique_ptr<optimization_guide::TestModelQualityLogsUploaderService>
+      logs_service_;
   testing::NiceMock<optimization_guide::MockOptimizationGuideModelExecutor>
       model_executor_;
   std::unique_ptr<os_crypt_async::OSCryptAsync> os_crypt_;
@@ -215,7 +231,7 @@
             An<optimization_guide::
                    OptimizationGuideModelExecutionResultCallback>()))
         .WillOnce(base::test::RunOnceCallback<2>(
-            test_request.forms_annotations_response, /*log_entry=*/nullptr));
+            test_request.forms_annotations_response, CreateLogEntry()));
 
     EXPECT_FALSE(
         AddAndImportFormSubmission(test_request.ax_tree, test_request.form_data)
@@ -247,7 +263,7 @@
             optimization_guide::ModelBasedCapabilityKey::kFormsAnnotations, _,
             An<optimization_guide::
                    OptimizationGuideModelExecutionResultCallback>()))
-        .WillOnce(base::test::RunOnceCallback<2>(any, /*log_entry=*/nullptr));
+        .WillOnce(base::test::RunOnceCallback<2>(any, CreateLogEntry()));
 
     autofill::FormData empty_form_data;
     optimization_guide::proto::AXTreeUpdate ax_tree;
@@ -284,7 +300,7 @@
                   FromModelExecutionError(
                       optimization_guide::OptimizationGuideModelExecutionError::
                           ModelExecutionError::kGenericFailure)),
-          /*log_entry=*/nullptr));
+          CreateLogEntry()));
 
   autofill::FormFieldData form_field_data;
   form_field_data.set_label(u"label");
@@ -301,6 +317,8 @@
   histogram_tester.ExpectUniqueSample(
       "UserAnnotations.AddFormSubmissionResult",
       UserAnnotationsExecutionResult::kResponseError, 1);
+
+  EXPECT_TRUE(logs_service()->uploaded_logs().empty());
 }
 
 TEST_P(UserAnnotationsServiceTest, UnexpectedResponseType) {
@@ -313,7 +331,7 @@
           optimization_guide::ModelBasedCapabilityKey::kFormsAnnotations, _,
           An<optimization_guide::
                  OptimizationGuideModelExecutionResultCallback>()))
-      .WillOnce(base::test::RunOnceCallback<2>(any, /*log_entry=*/nullptr));
+      .WillOnce(base::test::RunOnceCallback<2>(any, CreateLogEntry()));
 
   autofill::FormFieldData form_field_data;
   form_field_data.set_label(u"label");
@@ -329,6 +347,8 @@
   histogram_tester.ExpectUniqueSample(
       "UserAnnotations.AddFormSubmissionResult",
       UserAnnotationsExecutionResult::kResponseMalformed, 1);
+
+  EXPECT_TRUE(logs_service()->uploaded_logs().empty());
 }
 
 TEST_P(UserAnnotationsServiceTest, RemoveEntry) {
@@ -341,7 +361,7 @@
           An<optimization_guide::
                  OptimizationGuideModelExecutionResultCallback>()))
       .WillOnce(base::test::RunOnceCallback<2>(
-          test_request.forms_annotations_response, /*log_entry=*/nullptr));
+          test_request.forms_annotations_response, CreateLogEntry()));
 
   EXPECT_FALSE(
       AddAndImportFormSubmission(test_request.ax_tree, test_request.form_data)
@@ -379,7 +399,7 @@
           An<optimization_guide::
                  OptimizationGuideModelExecutionResultCallback>()))
       .WillOnce(base::test::RunOnceCallback<2>(
-          test_request.forms_annotations_response, /*log_entry=*/nullptr));
+          test_request.forms_annotations_response, CreateLogEntry()));
 
   EXPECT_FALSE(
       AddAndImportFormSubmission(test_request.ax_tree, test_request.form_data)
@@ -406,7 +426,7 @@
           An<optimization_guide::
                  OptimizationGuideModelExecutionResultCallback>()))
       .WillOnce(base::test::RunOnceCallback<2>(
-          test_request.forms_annotations_response, /*log_entry=*/nullptr));
+          test_request.forms_annotations_response, CreateLogEntry()));
 
   service()->AddFormSubmission(
       test_request.ax_tree,
@@ -423,76 +443,5 @@
 
 INSTANTIATE_TEST_SUITE_P(All, UserAnnotationsServiceTest, ::testing::Bool());
 
-class UserAnnotationsServiceReplaceAnnotationsTest
-    : public UserAnnotationsServiceTest {
- public:
-  UserAnnotationsServiceReplaceAnnotationsTest() {
-    base::FieldTrialParams feature_parameters;
-    feature_parameters["should_replace_annotations_for_form_submissions"] =
-        "true";
-    if (ShouldPersistAnnotations()) {
-      feature_parameters["persist_annotations"] = "true";
-    }
-    scoped_feature_list_.InitAndEnableFeatureWithParameters(kUserAnnotations,
-                                                            feature_parameters);
-  }
-
- private:
-  void InitializeFeatureList() override {}
-};
-
-TEST_P(UserAnnotationsServiceReplaceAnnotationsTest,
-       RetrieveAllEntriesWithInsertShouldReplace) {
-  {
-    auto test_request = CreateSampleFormsAnnotationsTestRequest();
-    EXPECT_CALL(
-        *model_executor(),
-        ExecuteModel(
-            optimization_guide::ModelBasedCapabilityKey::kFormsAnnotations, _,
-            An<optimization_guide::
-                   OptimizationGuideModelExecutionResultCallback>()))
-        .WillOnce(base::test::RunOnceCallback<2>(
-            test_request.forms_annotations_response, /*log_entry=*/nullptr));
-
-    EXPECT_FALSE(
-        AddAndImportFormSubmission(test_request.ax_tree, test_request.form_data)
-            .empty());
-
-    auto entries = GetAllUserAnnotationsEntries();
-    EXPECT_EQ(2u, entries.size());
-
-    EXPECT_EQ(entries[0].key(), "label");
-    EXPECT_EQ(entries[0].value(), "whatever");
-    EXPECT_EQ(entries[1].key(), "nolabel");
-    EXPECT_EQ(entries[1].value(), "value");
-  }
-
-  {
-    optimization_guide::proto::FormsAnnotationsResponse response;
-    optimization_guide::proto::Any any;
-    any.set_type_url(response.GetTypeName());
-    response.SerializeToString(any.mutable_value());
-    EXPECT_CALL(
-        *model_executor(),
-        ExecuteModel(
-            optimization_guide::ModelBasedCapabilityKey::kFormsAnnotations, _,
-            An<optimization_guide::
-                   OptimizationGuideModelExecutionResultCallback>()))
-        .WillOnce(base::test::RunOnceCallback<2>(any, /*log_entry=*/nullptr));
-    autofill::FormData empty_form_data;
-    optimization_guide::proto::AXTreeUpdate ax_tree;
-
-    EXPECT_TRUE(AddAndImportFormSubmission(ax_tree, empty_form_data).empty());
-
-    // Entries should be cleared since there were no fields to replace with.
-    auto entries = GetAllUserAnnotationsEntries();
-    EXPECT_EQ(0u, entries.size());
-  }
-}
-
-INSTANTIATE_TEST_SUITE_P(All,
-                         UserAnnotationsServiceReplaceAnnotationsTest,
-                         ::testing::Bool());
-
 }  // namespace
 }  // namespace user_annotations
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
index 79420ea..1048796 100644
--- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
+++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -1317,60 +1317,6 @@
 }
 #endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_MAC)
 
-// Android uses kComboboxSelect instead of kListbox for <select size > 1>.
-#if !BUILDFLAG(IS_ANDROID)
-IN_PROC_BROWSER_TEST_F(CrossPlatformAccessibilityBrowserTest,
-                       SelectListWithOptgroupActiveDescendant) {
-  LoadInitialAccessibilityTreeFromHtml(R"HTML(
-      <!DOCTYPE html>
-      <html>
-      <body>
-        <select autofocus size="8" aria-label="Select">
-          <optgroup label="A">
-            <option>Option 1</option>
-          </optgroup>
-          <optgroup label="B">
-            <option selected>Option 2</option>
-            <option>Option 3</option>
-          </optgroup>
-        </select>
-      </body>
-      </html>)HTML");
-
-  WaitForAccessibilityTreeToContainNodeWithName(shell()->web_contents(),
-                                                "Select");
-
-  const ui::BrowserAccessibility* root =
-      GetManager()->GetBrowserAccessibilityRoot();
-  ASSERT_NE(root, nullptr);
-  const ui::BrowserAccessibility* body = root->PlatformGetChild(0);
-  ASSERT_NE(body, nullptr);
-  ui::BrowserAccessibility* select = body->PlatformGetChild(0);
-  ASSERT_NE(select, nullptr);
-  EXPECT_EQ(ax::mojom::Role::kListBox, select->GetRole());
-
-  // Get Optgroup "B"
-  const ui::BrowserAccessibility* opt_group_2 = select->PlatformGetChild(1);
-  ASSERT_NE(opt_group_2, nullptr);
-  EXPECT_EQ(ax::mojom::Role::kGroup, opt_group_2->GetRole());
-  EXPECT_EQ("B",
-            opt_group_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
-
-  // Get "Option 2".
-  const ui::BrowserAccessibility* option_2 = opt_group_2->PlatformGetChild(0);
-  ASSERT_NE(option_2, nullptr);
-  EXPECT_EQ(ax::mojom::Role::kListBoxOption, option_2->GetRole());
-  EXPECT_EQ("Option 2",
-            option_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
-
-  // Ensure active descendant is "Option 2"
-  int active_descendant_id = -1;
-  EXPECT_TRUE(select->GetIntAttribute(
-      ax::mojom::IntAttribute::kActivedescendantId, &active_descendant_id));
-  EXPECT_EQ(active_descendant_id, option_2->GetId());
-}
-#endif  // !BUILDFLAG(IS_ANDROID)
-
 IN_PROC_BROWSER_TEST_F(CrossPlatformAccessibilityBrowserTest,
                        PlatformIterator) {
   LoadInitialAccessibilityTreeFromHtml(R"HTML(
diff --git a/content/browser/accessibility/dump_accessibility_events_browsertest.cc b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
index 5a0dd6b..322c63c 100644
--- a/content/browser/accessibility/dump_accessibility_events_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
@@ -972,14 +972,6 @@
   RunEventTest(FILE_PATH_LITERAL("style-changed.html"));
 }
 
-// crbug.com/1511111 leaving disabled after re-enabling test suite.
-IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTestExceptUIA,
-                       AccessibilityEventsSelectList) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kEnableBlinkFeatures, "HTMLSelectListElement");
-  RunEventTest(FILE_PATH_LITERAL("selectlist.html"));
-}
-
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
                        AccessibilityEventsSubtreeReparentedIgnoredChanged) {
   RunEventTest(FILE_PATH_LITERAL("subtree-reparented-ignored-changed.html"));
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index dde463a..1a56779 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -94,10 +94,6 @@
   // Enable accessibility object model, used in other tests.
   command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
                                   "AccessibilityObjectModel");
-  // Enable HTMLSelectListElement, used by AccessibilitySelectList and
-  // AccessibilitySelectListOpen.
-  command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
-                                  "HTMLSelectListElement");
   // Enable aria-colindextext and aria-rowindextext.
   command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
                                   "AriaRowColIndexText");
@@ -3363,33 +3359,6 @@
   RunHtmlTest(FILE_PATH_LITERAL("select-follows-focus-multiselect.html"));
 }
 
-// Flaky on Android and Fuchsia - crbug.com/1286650, crbug.com/1491059
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)
-#define MAYBE_AccessibilitySelectList DISABLED_AccessibilitySelectList
-#else
-#define MAYBE_AccessibilitySelectList AccessibilitySelectList
-#endif
-IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
-                       MAYBE_AccessibilitySelectList) {
-  RunHtmlTest(FILE_PATH_LITERAL("selectlist.html"));
-}
-
-IN_PROC_BROWSER_TEST_P(YieldingParserDumpAccessibilityTreeTest,
-                       MAYBE_AccessibilitySelectList) {
-  RunHtmlTest(FILE_PATH_LITERAL("selectlist.html"));
-}
-
-// Flaky on Android - crbug.com/1286663
-#if BUILDFLAG(IS_ANDROID)
-#define MAYBE_AccessibilitySelectListOpen DISABLED_AccessibilitySelectListOpen
-#else
-#define MAYBE_AccessibilitySelectListOpen AccessibilitySelectListOpen
-#endif
-IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
-                       MAYBE_AccessibilitySelectListOpen) {
-  RunHtmlTest(FILE_PATH_LITERAL("selectlist-open.html"));
-}
-
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilitySpan) {
   RunHtmlTest(FILE_PATH_LITERAL("span.html"));
 }
diff --git a/content/browser/navigation_transitions/back_forward_transition_animation_manager_android.cc b/content/browser/navigation_transitions/back_forward_transition_animation_manager_android.cc
index bd2d1a08..ed6bccf 100644
--- a/content/browser/navigation_transitions/back_forward_transition_animation_manager_android.cc
+++ b/content/browser/navigation_transitions/back_forward_transition_animation_manager_android.cc
@@ -39,7 +39,12 @@
           std::make_unique<BackForwardTransitionAnimator::Factory>()) {}
 
 BackForwardTransitionAnimationManagerAndroid::
-    ~BackForwardTransitionAnimationManagerAndroid() = default;
+    ~BackForwardTransitionAnimationManagerAndroid() {
+  if (animator_) {
+    animator_->AbortAnimation(AnimationAbortReason::kAnimationManagerDestroyed);
+    DestroyAnimator();
+  }
+}
 
 void BackForwardTransitionAnimationManagerAndroid::OnGestureStarted(
     const ui::BackGestureEvent& gesture,
diff --git a/content/browser/navigation_transitions/back_forward_transition_animator.cc b/content/browser/navigation_transitions/back_forward_transition_animator.cc
index 9fb641d4..1e926ab 100644
--- a/content/browser/navigation_transitions/back_forward_transition_animator.cc
+++ b/content/browser/navigation_transitions/back_forward_transition_animator.cc
@@ -136,6 +136,8 @@
       return "kRootWindowVisibilityChanged";
     case AnimationAbortReason::kCompositorDetached:
       return "kCompositorDetached";
+    case AnimationAbortReason::kAnimationManagerDestroyed:
+      return "kAnimationManagerDestroyed";
   }
   NOTREACHED();
 }
diff --git a/content/browser/navigation_transitions/back_forward_transition_animator.h b/content/browser/navigation_transitions/back_forward_transition_animator.h
index a324a8a9..d79880e 100644
--- a/content/browser/navigation_transitions/back_forward_transition_animator.h
+++ b/content/browser/navigation_transitions/back_forward_transition_animator.h
@@ -133,7 +133,7 @@
   // Indicates the animation abort reason for UMA metrics.
   // These values are persisted to logs. Entries should not be renumbered and
   // numeric values should never be reused. Upon adding a new value, add it
-  // to `enums.xml` as well.
+  // to `tools/metrics/histograms/metadata/navigation/enums.xml` as well.
   enum class AnimationAbortReason {
     // The subscribed `RenderWidgetHost` was destroyed.
     kRenderWidgetHostDestroyed = 0,
@@ -168,7 +168,12 @@
 
     kCompositorDetached = 16,
 
-    kMaxValue = kCompositorDetached
+    // The animation manager is destroyed. This can happen when a visible
+    // `WebContents` is destroyed when its NativeView, layer and compositor are
+    // still intact, thus bypassing other observer hooks.
+    kAnimationManagerDestroyed = 17,
+
+    kMaxValue = kAnimationManagerDestroyed
   };
 
   // Indicates what animation state caused input event suppression.
diff --git a/content/browser/preloading/prefetch/prefetch_container.cc b/content/browser/preloading/prefetch/prefetch_container.cc
index 0f05769f..1a855a2 100644
--- a/content/browser/preloading/prefetch/prefetch_container.cc
+++ b/content/browser/preloading/prefetch/prefetch_container.cc
@@ -1877,6 +1877,13 @@
          no_vary_search_data->AreEquivalent(url, GetURL());
 }
 
+bool PrefetchContainer::ShouldWaitForNoVarySearchHeader(const GURL& url) const {
+  const std::optional<net::HttpNoVarySearchData>& no_vary_search_hint =
+      GetNoVarySearchHint();
+  return !GetNonRedirectHead() && no_vary_search_hint &&
+         no_vary_search_hint->AreEquivalent(url, GetURL());
+}
+
 void PrefetchContainer::OnUnregisterCandidate(
     const GURL& navigated_url,
     bool is_served,
diff --git a/content/browser/preloading/prefetch/prefetch_container.h b/content/browser/preloading/prefetch/prefetch_container.h
index 766ece1..e0493e9 100644
--- a/content/browser/preloading/prefetch/prefetch_container.h
+++ b/content/browser/preloading/prefetch/prefetch_container.h
@@ -657,6 +657,12 @@
 
   bool IsExactMatch(const GURL& url) const;
   bool IsNoVarySearchHeaderMatch(const GURL& url) const;
+  // Checks that the URL matches to the NoVarySearch hint with a precondition.
+  //
+  // The precondition is that a non redirect header is not received, as
+  // NoVarySearch hint is a mechanism to wait prefetches that is expected to
+  // receive NoVarySearch header.
+  bool ShouldWaitForNoVarySearchHeader(const GURL& url) const;
 
   // Records metrics when serving result is determined.
   //
diff --git a/content/browser/preloading/prefetch/prefetch_match_resolver.h b/content/browser/preloading/prefetch/prefetch_match_resolver.h
index 98cbb91d..8d5d24c 100644
--- a/content/browser/preloading/prefetch/prefetch_match_resolver.h
+++ b/content/browser/preloading/prefetch/prefetch_match_resolver.h
@@ -251,6 +251,7 @@
       t.GetServableState(cacheable_duration);
       t.GetNoVarySearchHint();
       t.IsNoVarySearchHeaderMatch(url);
+      t.ShouldWaitForNoVarySearchHeader(url);
       t.HasPrefetchStatus();
       t.GetPrefetchStatus();
       t.HasPrefetchBeenConsideredToServe();
@@ -288,21 +289,9 @@
                 matches->push_back(prefetch_container.get());
                 break;
               case no_vary_search::MatchType::kOther:
-                if (const auto& nvs_expected =
-                        prefetch_container->GetNoVarySearchHint()) {
-                  // We cannot match based on the NVS hint once we have the
-                  // response headers. If we have matching NVS header,
-                  // the entry would have matched with kNoVarySearch above.
-                  // We only match based on the hint if we have not yet
-                  // received the headers.
-                  if (prefetch_container->GetServableState(
-                          PrefetchCacheableDuration()) ==
-                          PrefetchContainer::ServableState::
-                              kShouldBlockUntilHeadReceived &&
-                      nvs_expected->AreEquivalent(
-                          navigated_key.url(), prefetch_container->GetURL())) {
-                    hint_matches->push_back(prefetch_container.get());
-                  }
+                if (prefetch_container->ShouldWaitForNoVarySearchHeader(
+                        navigated_key.url())) {
+                  hint_matches->push_back(prefetch_container.get());
                 }
                 break;
             }
diff --git a/content/browser/preloading/prefetch/prefetch_match_resolver_unittest.cc b/content/browser/preloading/prefetch/prefetch_match_resolver_unittest.cc
index 06acc2c..19caff23 100644
--- a/content/browser/preloading/prefetch/prefetch_match_resolver_unittest.cc
+++ b/content/browser/preloading/prefetch/prefetch_match_resolver_unittest.cc
@@ -53,6 +53,17 @@
            no_vary_search_data->AreEquivalent(url, GetURL());
   }
 
+  bool ShouldWaitForNoVarySearchHeader(const GURL& url) const {
+    const std::optional<net::HttpNoVarySearchData>& no_vary_search_hint =
+        GetNoVarySearchHint();
+    // It's not trivial to implement `PrefetchContainer::GetNonRedirectHead()`.
+    // Use `servable_state_` instead.
+    bool simulate_get_non_redirect_head_is_null =
+        (servable_state_ != PrefetchContainer::ServableState::kServable);
+    return simulate_get_non_redirect_head_is_null && no_vary_search_hint &&
+           no_vary_search_hint->AreEquivalent(url, GetURL());
+  }
+
   // We don't test on this property.
   bool HasPrefetchBeenConsideredToServe() const { return false; }
 
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java
index dc5114d..2f8275f 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java
@@ -1012,12 +1012,6 @@
 
     @Test
     @SmallTest
-    public void test_selectMenu() {
-        performTest("selectlist.html", "selectlist-expected-android.txt");
-    }
-
-    @Test
-    @SmallTest
     public void test_styleChanged() {
         performTest("style-changed.html", EMPTY_EXPECTATIONS_FILE);
     }
diff --git a/content/test/content_test_bundle_data.filelist b/content/test/content_test_bundle_data.filelist
index 2e4904d..c88047a24 100644
--- a/content/test/content_test_bundle_data.filelist
+++ b/content/test/content_test_bundle_data.filelist
@@ -2691,12 +2691,6 @@
 data/accessibility/event/select-selected-add-remove-expected-uia-win.txt
 data/accessibility/event/select-selected-add-remove-expected-win.txt
 data/accessibility/event/select-selected-add-remove.html
-data/accessibility/event/selectlist-expected-android.txt
-data/accessibility/event/selectlist-expected-auralinux.txt
-data/accessibility/event/selectlist-expected-mac.txt
-data/accessibility/event/selectlist-expected-uia-win.txt
-data/accessibility/event/selectlist-expected-win.txt
-data/accessibility/event/selectlist.html
 data/accessibility/event/style-changed-expected-auralinux.txt
 data/accessibility/event/style-changed-expected-uia-win.txt
 data/accessibility/event/style-changed-expected-win.txt
@@ -4868,24 +4862,6 @@
 data/accessibility/html/selection-container-expected-fuchsia.txt
 data/accessibility/html/selection-container-expected-uia-win.txt
 data/accessibility/html/selection-container.html
-data/accessibility/html/selectlist-expected-android-assist-data.txt
-data/accessibility/html/selectlist-expected-android-external.txt
-data/accessibility/html/selectlist-expected-android.txt
-data/accessibility/html/selectlist-expected-auralinux.txt
-data/accessibility/html/selectlist-expected-blink.txt
-data/accessibility/html/selectlist-expected-fuchsia.txt
-data/accessibility/html/selectlist-expected-mac.txt
-data/accessibility/html/selectlist-expected-uia-win.txt
-data/accessibility/html/selectlist-expected-win.txt
-data/accessibility/html/selectlist-open-expected-android.txt
-data/accessibility/html/selectlist-open-expected-auralinux.txt
-data/accessibility/html/selectlist-open-expected-blink.txt
-data/accessibility/html/selectlist-open-expected-fuchsia.txt
-data/accessibility/html/selectlist-open-expected-mac.txt
-data/accessibility/html/selectlist-open-expected-uia-win.txt
-data/accessibility/html/selectlist-open-expected-win.txt
-data/accessibility/html/selectlist-open.html
-data/accessibility/html/selectlist.html
 data/accessibility/html/sfx.mp3
 data/accessibility/html/shadow-dom-first-child-expected-blink.txt
 data/accessibility/html/shadow-dom-first-child.html
diff --git a/content/test/data/accessibility/event/selectlist-expected-android.txt b/content/test/data/accessibility/event/selectlist-expected-android.txt
deleted file mode 100644
index 970488a1..0000000
--- a/content/test/data/accessibility/event/selectlist-expected-android.txt
+++ /dev/null
@@ -1 +0,0 @@
-TYPE_VIEW_CLICKED
diff --git a/content/test/data/accessibility/event/selectlist-expected-auralinux.txt b/content/test/data/accessibility/event/selectlist-expected-auralinux.txt
deleted file mode 100644
index 800d2f9d..0000000
--- a/content/test/data/accessibility/event/selectlist-expected-auralinux.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-STATE-CHANGE:EXPANDED:TRUE role=ROLE_COMBO_BOX name='Combobox A' ENABLED,EXPANDABLE,EXPANDED,FOCUSABLE,SENSITIVE,SHOWING,VISIBLE,HAS-POPUP
-STATE-CHANGE:FOCUSED:FALSE role=ROLE_DOCUMENT_WEB name='(null)' ENABLED,FOCUSABLE,SENSITIVE,SHOWING,VISIBLE
-STATE-CHANGE:FOCUSED:TRUE role=ROLE_LIST_ITEM name='Option 1' ENABLED,FOCUSABLE,FOCUSED,SELECTABLE,SELECTED,SENSITIVE,SHOWING,VISIBLE
-=== Start Continuation ===
-STATE-CHANGE:EXPANDED:FALSE role=ROLE_COMBO_BOX name='Combobox A' ENABLED,EXPANDABLE,FOCUSABLE,SENSITIVE,SHOWING,VISIBLE,HAS-POPUP
-STATE-CHANGE:EXPANDED:TRUE role=ROLE_COMBO_BOX name='Combobox B' ENABLED,EXPANDABLE,EXPANDED,FOCUSABLE,SENSITIVE,SHOWING,VISIBLE,HAS-POPUP
-STATE-CHANGE:FOCUSED:TRUE role=ROLE_LIST_ITEM name='Option 4' ENABLED,FOCUSABLE,FOCUSED,SELECTABLE,SELECTED,SENSITIVE,SHOWING,VISIBLE
diff --git a/content/test/data/accessibility/event/selectlist-expected-mac.txt b/content/test/data/accessibility/event/selectlist-expected-mac.txt
deleted file mode 100644
index a530de0..0000000
--- a/content/test/data/accessibility/event/selectlist-expected-mac.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-AXExpandedChanged on AXComboBox AXDescription='Combobox A' AXValue='Option 1'
-AXFocusedUIElementChanged on AXStaticText AXValue='Option 1'
-AXSelectedChildrenChanged on AXList
-=== Start Continuation ===
-AXExpandedChanged on AXComboBox AXDescription='Combobox A' AXValue='Option 1'
-AXExpandedChanged on AXComboBox AXDescription='Combobox B' AXValue='Option 4'
-AXFocusedUIElementChanged on AXStaticText AXValue='Option 4'
-AXSelectedChildrenChanged on AXList
diff --git a/content/test/data/accessibility/event/selectlist-expected-uia-win.txt b/content/test/data/accessibility/event/selectlist-expected-uia-win.txt
deleted file mode 100644
index 055c591..0000000
--- a/content/test/data/accessibility/event/selectlist-expected-uia-win.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-AutomationFocusChanged on role=option, name=Option 1
-ExpandCollapseExpandCollapseState changed on role=combobox, name=Combobox A
-=== Start Continuation ===
-AutomationFocusChanged on role=option, name=Option 4
-ExpandCollapseExpandCollapseState changed on role=combobox, name=Combobox B
diff --git a/content/test/data/accessibility/event/selectlist-expected-win.txt b/content/test/data/accessibility/event/selectlist-expected-win.txt
deleted file mode 100644
index 1d703d0..0000000
--- a/content/test/data/accessibility/event/selectlist-expected-win.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-EVENT_OBJECT_FOCUS on <option> role=ROLE_SYSTEM_LISTITEM name="Option 1" SELECTED,FOCUSED,FOCUSABLE,SELECTABLE PosInSet=1 SetSize=3
-EVENT_OBJECT_SHOW on <listbox> role=ROLE_SYSTEM_LIST IA2_STATE_VERTICAL SetSize=3
-EVENT_OBJECT_STATECHANGE on <button#ButtonA> role=ROLE_SYSTEM_COMBOBOX name="Combobox A" value="Option 1" EXPANDED,FOCUSABLE,HASPOPUP
-EVENT_OBJECT_STATECHANGE on <option> role=ROLE_SYSTEM_LISTITEM name="Option 1" SELECTED,FOCUSED,FOCUSABLE,SELECTABLE PosInSet=1 SetSize=3
-=== Start Continuation ===
-EVENT_OBJECT_FOCUS on <option> role=ROLE_SYSTEM_LISTITEM name="Option 4" SELECTED,FOCUSED,FOCUSABLE,SELECTABLE PosInSet=1 SetSize=3
-EVENT_OBJECT_HIDE on role=ROLE_SYSTEM_LIST INVISIBLE
-EVENT_OBJECT_SHOW on <listbox> role=ROLE_SYSTEM_LIST IA2_STATE_VERTICAL SetSize=3
-EVENT_OBJECT_STATECHANGE on <button#ButtonA> role=ROLE_SYSTEM_COMBOBOX name="Combobox A" value="Option 1" COLLAPSED,FOCUSABLE,HASPOPUP
-EVENT_OBJECT_STATECHANGE on <button#ButtonB> role=ROLE_SYSTEM_COMBOBOX name="Combobox B" value="Option 4" EXPANDED,FOCUSABLE,HASPOPUP
-EVENT_OBJECT_STATECHANGE on <option> role=ROLE_SYSTEM_LISTITEM name="Option 4" SELECTED,FOCUSED,FOCUSABLE,SELECTABLE PosInSet=1 SetSize=3
diff --git a/content/test/data/accessibility/event/selectlist.html b/content/test/data/accessibility/event/selectlist.html
deleted file mode 100644
index 97423f6..0000000
--- a/content/test/data/accessibility/event/selectlist.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-@AURALINUX-DENY:*
-@AURALINUX-ALLOW:STATE-CHANGE:EXPANDED*
-@AURALINUX-ALLOW:STATE-CHANGE:FOCUSED*
-@UIA-WIN-DENY:*
-@UIA-WIN-ALLOW:AutomationFocusChanged*
-@UIA-WIN-ALLOW:ExpandCollapseExpandCollapseState*
-@WIN-DENY:*
-@WIN-ALLOW:EVENT_OBJECT_FOCUS*
-@WIN-ALLOW:EVENT_OBJECT_HIDE*
-@WIN-ALLOW:EVENT_OBJECT_SHOW*
-@WIN-ALLOW:EVENT_OBJECT_STATECHANGE*
--->
-<html>
-<body>
-  <selectlist id="A" name="Select A">
-    <button type=selectlist id="ButtonA" aria-label="Combobox A">Button A</button>
-    <listbox>
-      <option value="1">Option 1</option>
-      <option value="2">Option 2</option>
-      <option value="3">Option 3</option>
-    </listbox>
-  </selectlist>
-  <selectlist id="B" name="Select B">
-    <button type=selectlist id="ButtonB" aria-label="Combobox B">Button B</button>
-    <listbox>
-      <option value="4">Option 4</option>
-      <option value="5">Option 5</option>
-      <option value="6">Option 6</option>
-    </listbox>
-  </selectlist>
-<script>
-  var go_passes = [
-    // Expand the first list.
-    () => document.getElementById("ButtonA").click(),
-    // Expand the second list which will close the first list.
-    () => document.getElementById("ButtonB").click(),
-  ];
-
-  var current_pass = 0;
-  function go() {
-    go_passes[current_pass++].call();
-    return current_pass < go_passes.length;
-  }
-</script>
-</body>
-</html>
diff --git a/content/test/data/accessibility/html/selectlist-expected-android-assist-data.txt b/content/test/data/accessibility/html/selectlist-expected-android-assist-data.txt
deleted file mode 100644
index e69de29..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-android-assist-data.txt
+++ /dev/null
diff --git a/content/test/data/accessibility/html/selectlist-expected-android-external.txt b/content/test/data/accessibility/html/selectlist-expected-android-external.txt
deleted file mode 100644
index 114abd33..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-android-external.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
-++View viewIdResName:"A" actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"]
-++++View text:"Option 1, in list, item 1 of 0" clickable focusable CollectionItemInfo:[rowIndex=0, rowSpan=0, colIndex=0, colSpan=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="listBoxOption", clickableScore="200"]
-++++View text:"Option 2, in list, item 1 of 0" clickable focusable CollectionItemInfo:[rowIndex=0, rowSpan=0, colIndex=0, colSpan=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="listBoxOption", clickableScore="200"]
-++++View text:"Option 3, in list, item 1 of 0" clickable focusable CollectionItemInfo:[rowIndex=0, rowSpan=0, colIndex=0, colSpan=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="listBoxOption", clickableScore="200"]
-++View viewIdResName:"B" actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"]
-++++TextView text:"Custom selectlist button" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"]
-++++View text:"Option 1, in list, item 1 of 0" clickable focusable CollectionItemInfo:[rowIndex=0, rowSpan=0, colIndex=0, colSpan=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="listBoxOption", clickableScore="200"]
-++++View text:"Option 2, in list, item 1 of 0" clickable focusable CollectionItemInfo:[rowIndex=0, rowSpan=0, colIndex=0, colSpan=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="listBoxOption", clickableScore="200"]
-++++View text:"Option 3, in list, item 1 of 0" clickable focusable CollectionItemInfo:[rowIndex=0, rowSpan=0, colIndex=0, colSpan=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="listBoxOption", clickableScore="200"]
diff --git a/content/test/data/accessibility/html/selectlist-expected-android.txt b/content/test/data/accessibility/html/selectlist-expected-android.txt
deleted file mode 100644
index d2adb5c5..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-android.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-android.webkit.WebView focusable focused
-++android.view.View
-++++android.view.View
-++++++android.widget.Spinner clickable collapsed focusable name='Option 1'
-++++android.view.View
-++++++android.widget.Spinner clickable collapsed focusable name='Option 1'
diff --git a/content/test/data/accessibility/html/selectlist-expected-auralinux.txt b/content/test/data/accessibility/html/selectlist-expected-auralinux.txt
deleted file mode 100644
index fa1f06f..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-auralinux.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-[document web]
-++[section]
-++++[section]
-++++++[combo box] expandable haspopup:listbox
-++++++++[section]
-++++++++++[static] name='Option 1'
-++++[section]
-++++++[combo box] expandable haspopup:listbox
-++++++++[static] name='Custom selectlist button'
diff --git a/content/test/data/accessibility/html/selectlist-expected-blink.txt b/content/test/data/accessibility/html/selectlist-expected-blink.txt
deleted file mode 100644
index 21160989..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-blink.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-rootWebArea focusable
-++genericContainer ignored
-++++genericContainer
-++++++genericContainer
-++++++++genericContainer ignored
-++++++++++comboBoxMenuButton collapsed focusable value='Option 1' haspopup=listbox
-++++++++++++genericContainer
-++++++++++++++staticText name='Option 1'
-++++++++++++++++inlineTextBox name='Option 1'
-++++++++++++genericContainer ignored
-++++++++genericContainer ignored
-++++++++++listBoxOption focusable ignored invisible selected=true
-++++++++++listBoxOption focusable ignored invisible selected=false
-++++++++++listBoxOption focusable ignored invisible selected=false
-++++++++genericContainer ignored invisible
-++++++genericContainer
-++++++++genericContainer ignored
-++++++++++comboBoxMenuButton collapsed focusable value='Option 1' haspopup=listbox
-++++++++++++staticText name='Custom selectlist button'
-++++++++++++++inlineTextBox name='Custom selectlist button'
-++++++++genericContainer ignored
-++++++++++listBox ignored invisible
-++++++++genericContainer ignored invisible
diff --git a/content/test/data/accessibility/html/selectlist-expected-fuchsia.txt b/content/test/data/accessibility/html/selectlist-expected-fuchsia.txt
deleted file mode 100644
index 5538d4c..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-fuchsia.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-UNKNOWN focusable has_input_focus
-++UNKNOWN hidden
-++++UNKNOWN
-++++++UNKNOWN
-++++++++UNKNOWN hidden
-++++++++++UNKNOWN focusable actions='{DEFAULT}' value='Option 1'
-++++++++++++UNKNOWN
-++++++++++++++STATIC_TEXT label='Option 1'
-++++++++++++++++UNKNOWN label='Option 1'
-++++++++++++UNKNOWN hidden
-++++++++UNKNOWN hidden
-++++++++++UNKNOWN hidden focusable selected actions='{DEFAULT}'
-++++++++++UNKNOWN hidden focusable actions='{DEFAULT}'
-++++++++++UNKNOWN hidden focusable actions='{DEFAULT}'
-++++++++UNKNOWN hidden
-++++++UNKNOWN
-++++++++UNKNOWN hidden
-++++++++++UNKNOWN focusable actions='{DEFAULT}' value='Option 1'
-++++++++++++STATIC_TEXT label='Custom selectlist button'
-++++++++++++++UNKNOWN label='Custom selectlist button'
-++++++++UNKNOWN hidden
-++++++++++UNKNOWN hidden
-++++++++UNKNOWN hidden
diff --git a/content/test/data/accessibility/html/selectlist-expected-mac.txt b/content/test/data/accessibility/html/selectlist-expected-mac.txt
deleted file mode 100644
index 47b2a82..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-mac.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-AXWebArea AXRoleDescription='HTML content'
-++AXGroup AXRoleDescription='group'
-++++AXGroup AXRoleDescription='group'
-++++++AXComboBox AXRoleDescription='combo box' AXValue='Option 1'
-++++++++AXGroup AXRoleDescription='group'
-++++++++++AXStaticText AXRoleDescription='text' AXValue='Option 1'
-++++AXGroup AXRoleDescription='group'
-++++++AXComboBox AXRoleDescription='combo box' AXValue='Option 1'
-++++++++AXStaticText AXRoleDescription='text' AXValue='Custom selectlist button'
diff --git a/content/test/data/accessibility/html/selectlist-expected-uia-win.txt b/content/test/data/accessibility/html/selectlist-expected-uia-win.txt
deleted file mode 100644
index 84a0494..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-uia-win.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Document
-++Group IsControlElement=false
-++++Group IsControlElement=false
-++++++ComboBox ExpandCollapse.ExpandCollapseState='Collapsed' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false Value.Value='Option 1'
-++++++++Group IsControlElement=false
-++++++++++Text Name='Option 1'
-++++Group IsControlElement=false
-++++++ComboBox ExpandCollapse.ExpandCollapseState='Collapsed' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false Value.Value='Option 1'
-++++++++Text Name='Custom selectlist button'
diff --git a/content/test/data/accessibility/html/selectlist-expected-win.txt b/content/test/data/accessibility/html/selectlist-expected-win.txt
deleted file mode 100644
index 55dec04..0000000
--- a/content/test/data/accessibility/html/selectlist-expected-win.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
-++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1>'
-++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
-++++++ROLE_SYSTEM_COMBOBOX value='Option 1' COLLAPSED FOCUSABLE HASPOPUP haspopup:listbox ia2_hypertext='<obj0>'
-++++++++IA2_ROLE_SECTION ia2_hypertext='Option 1'
-++++++++++ROLE_SYSTEM_STATICTEXT name='Option 1' ia2_hypertext='Option 1'
-++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
-++++++ROLE_SYSTEM_COMBOBOX value='Option 1' COLLAPSED FOCUSABLE HASPOPUP haspopup:listbox ia2_hypertext='Custom selectlist button'
-++++++++ROLE_SYSTEM_STATICTEXT name='Custom selectlist button' ia2_hypertext='Custom selectlist button'
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-android.txt b/content/test/data/accessibility/html/selectlist-open-expected-android.txt
deleted file mode 100644
index 0cff7ba31..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-android.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-android.webkit.WebView focusable
-++android.view.View
-++++android.view.View
-++++++android.widget.Spinner clickable expanded focusable name='Option 1'
-++++++android.widget.ListView role_description='list box' clickable collection item_count=3 row_count=3 column_count=1
-++++++++android.view.View clickable collection_item focusable focused selected name='Option 1' row_span=1 column_span=1
-++++++++android.view.View clickable collection_item focusable name='Option 2' item_index=1 row_index=1 row_span=1 column_span=1
-++++++++android.view.View clickable collection_item focusable name='Option 3' item_index=2 row_index=2 row_span=1 column_span=1
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-auralinux.txt b/content/test/data/accessibility/html/selectlist-open-expected-auralinux.txt
deleted file mode 100644
index 625570e24..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-auralinux.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-[document web]
-++[section]
-++++[section] details=[list box]
-++++++[combo box] expandable expanded haspopup:listbox
-++++++++[static] name='Custom selectlist button'
-++++++[list box] details-for=[section] setsize:3
-++++++++[list item] name='Option 1' selectable selected posinset:1 setsize:3
-++++++++[list item] name='Option 2' selectable posinset:2 setsize:3
-++++++++[list item] name='Option 3' selectable posinset:3 setsize:3
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-blink.txt b/content/test/data/accessibility/html/selectlist-open-expected-blink.txt
deleted file mode 100644
index 78aa3b1..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-blink.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-rootWebArea focusable
-++genericContainer ignored
-++++genericContainer
-++++++genericContainer detailsIds=listBox
-++++++++genericContainer ignored
-++++++++++comboBoxMenuButton focusable value='Option 1' haspopup=listbox
-++++++++++++staticText name='Custom selectlist button'
-++++++++++++++inlineTextBox name='Custom selectlist button'
-++++++++genericContainer ignored
-++++++++++listBox setSize=3 ispopup=auto
-++++++++++++listBoxOption focusable name='Option 1' setSize=3 posInSet=1 selected=true
-++++++++++++listBoxOption focusable name='Option 2' setSize=3 posInSet=2 selected=false
-++++++++++++listBoxOption focusable name='Option 3' setSize=3 posInSet=3 selected=false
-++++++++genericContainer ignored invisible
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-fuchsia.txt b/content/test/data/accessibility/html/selectlist-open-expected-fuchsia.txt
deleted file mode 100644
index de438e5..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-fuchsia.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-UNKNOWN focusable
-++UNKNOWN hidden
-++++UNKNOWN
-++++++UNKNOWN
-++++++++UNKNOWN hidden
-++++++++++UNKNOWN focusable actions='{DEFAULT}' value='Option 1'
-++++++++++++STATIC_TEXT label='Custom selectlist button'
-++++++++++++++UNKNOWN label='Custom selectlist button'
-++++++++UNKNOWN hidden
-++++++++++UNKNOWN actions='{DEFAULT}'
-++++++++++++UNKNOWN focusable has_input_focus selected label='Option 1' actions='{DEFAULT}'
-++++++++++++UNKNOWN focusable label='Option 2' actions='{DEFAULT}'
-++++++++++++UNKNOWN focusable label='Option 3' actions='{DEFAULT}'
-++++++++UNKNOWN hidden
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-mac.txt b/content/test/data/accessibility/html/selectlist-open-expected-mac.txt
deleted file mode 100644
index 64a5467..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-mac.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-AXWebArea AXRoleDescription='HTML content'
-++AXGroup AXRoleDescription='group'
-++++AXGroup AXRoleDescription='group'
-++++++AXComboBox AXRoleDescription='combo box' AXValue='Option 1'
-++++++++AXStaticText AXRoleDescription='text' AXValue='Custom selectlist button'
-++++++AXList AXRoleDescription='list box'
-++++++++AXStaticText AXRoleDescription='text' AXValue='Option 1'
-++++++++AXStaticText AXRoleDescription='text' AXValue='Option 2'
-++++++++AXStaticText AXRoleDescription='text' AXValue='Option 3'
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-uia-win.txt b/content/test/data/accessibility/html/selectlist-open-expected-uia-win.txt
deleted file mode 100644
index 35095c7..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-uia-win.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Document
-++Group IsControlElement=false
-++++Group IsControlElement=false
-++++++ComboBox ExpandCollapse.ExpandCollapseState='Expanded' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false Value.Value='Option 1'
-++++++++Text Name='Custom selectlist button'
-++++++List Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
-++++++++ListItem Name='Option 1' SelectionItem.IsSelected=true
-++++++++ListItem Name='Option 2' SelectionItem.IsSelected=false
-++++++++ListItem Name='Option 3' SelectionItem.IsSelected=false
diff --git a/content/test/data/accessibility/html/selectlist-open-expected-win.txt b/content/test/data/accessibility/html/selectlist-open-expected-win.txt
deleted file mode 100644
index b996fb0..0000000
--- a/content/test/data/accessibility/html/selectlist-open-expected-win.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
-++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
-++++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1>'
-++++++ROLE_SYSTEM_COMBOBOX value='Option 1' EXPANDED FOCUSABLE HASPOPUP haspopup:listbox ia2_hypertext='Custom selectlist button'
-++++++++ROLE_SYSTEM_STATICTEXT name='Custom selectlist button' ia2_hypertext='Custom selectlist button'
-++++++ROLE_SYSTEM_LIST ispopup:auto ia2_hypertext='<obj0><obj1><obj2>'
-++++++++ROLE_SYSTEM_LISTITEM name='Option 1' SELECTED FOCUSABLE SELECTABLE ia2_hypertext='Option 1'
-++++++++ROLE_SYSTEM_LISTITEM name='Option 2' FOCUSABLE SELECTABLE ia2_hypertext='Option 2'
-++++++++ROLE_SYSTEM_LISTITEM name='Option 3' FOCUSABLE SELECTABLE ia2_hypertext='Option 3'
diff --git a/content/test/data/accessibility/html/selectlist-open.html b/content/test/data/accessibility/html/selectlist-open.html
deleted file mode 100644
index 1b99670..0000000
--- a/content/test/data/accessibility/html/selectlist-open.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-@MAC-ALLOW:AXRoleDescription=*
-@WIN-ALLOW:HASPOPUP
-@WIN-ALLOW:haspopup*
-@WIN-ALLOW:ia2_hypertext=*
-@WIN-ALLOW:MULTISELECTABLE
-@WIN-ALLOW:EXTSELECTABLE
-@WIN-ALLOW:SELECT*
-@BLINK-ALLOW:focus*
-@BLINK-ALLOW:setSize*
-@BLINK-ALLOW:posInSet*
-@BLINK-ALLOW:haspopup*
-@AURALINUX-ALLOW:haspopup*
-@AURALINUX-ALLOW:posinset*
-@AURALINUX-ALLOW:setsize*
-@AURALINUX-ALLOW:expand*
-@AURALINUX-ALLOW:required
--->
-<html>
-<body>
-  <selectlist id="B" name="Select B">
-    <button type="selectlist">Custom selectlist button</button>
-    <listbox>
-      <option value="1">Option 1</option>
-      <option value="2">Option 2</option>
-      <option value="3">Option 3</option>
-    </listbox>
-  </selectlist>
-<script>
-  let selectlistButton = document.querySelector("button");
-  selectlistButton.click();
-</script>
-</body>
-</html>
diff --git a/content/test/data/accessibility/html/selectlist.html b/content/test/data/accessibility/html/selectlist.html
deleted file mode 100644
index 04ebb344..0000000
--- a/content/test/data/accessibility/html/selectlist.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
-@MAC-ALLOW:AXRoleDescription=*
-@WIN-ALLOW:HASPOPUP
-@WIN-ALLOW:haspopup*
-@WIN-ALLOW:ia2_hypertext=*
-@WIN-ALLOW:MULTISELECTABLE
-@WIN-ALLOW:EXTSELECTABLE
-@WIN-ALLOW:SELECT*
-@BLINK-ALLOW:focus*
-@BLINK-ALLOW:setSize*
-@BLINK-ALLOW:posInSet*
-@BLINK-ALLOW:haspopup*
-@AURALINUX-ALLOW:haspopup*
-@AURALINUX-ALLOW:posinset*
-@AURALINUX-ALLOW:setsize*
-@AURALINUX-ALLOW:expand*
-@AURALINUX-ALLOW:required
--->
-<html>
-<body>
-  <selectlist id="A" name="Select A">
-    <option value="1">Option 1</option>
-    <option value="2">Option 2</option>
-    <option value="3">Option 3</option>
-  </selectlist>
-  <selectlist id="B" name="Select B">
-    <button type="selectlist">Custom selectlist button</button>
-    <listbox>
-      <option value="1">Option 1</option>
-      <option value="2">Option 2</option>
-      <option value="3">Option 3</option>
-    </listbox>
-  </selectlist>
-</body>
-</html>
diff --git a/docs/security/shepherd.md b/docs/security/shepherd.md
index 30db0ad..93d4c7a 100644
--- a/docs/security/shepherd.md
+++ b/docs/security/shepherd.md
@@ -556,7 +556,7 @@
 
 For cases in which we are just delaying public disclosure (such as when a
 security issue impacts other products or vendors), please add the
-`SecurityEmbargo` hotlist (hotlistID: 1053360) and set a date in the `Next
+`SecurityEmbargo` hotlist (hotlistID: 5432549) and set a date in the `Next
 Action` field so that disclosure can be re-evaluated at that time.
 
 ### Protecting researcher identities
diff --git a/docs/website b/docs/website
index 37e2540..c1dd8289 160000
--- a/docs/website
+++ b/docs/website
@@ -1 +1 @@
-Subproject commit 37e25408c3a45296dfb4fe2a6683a6c98c670a26
+Subproject commit c1dd82899ac158ed48629c0b140f33847619bdfc
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index 141d1742..06708c6c 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -49,6 +49,7 @@
 #include "ui/ozone/public/ozone_switches.h"
 
 #if BUILDFLAG(IS_WIN)
+#include "base/win/dark_mode_support.h"
 #include "base/win/resource_exhaustion.h"
 #endif  // BUILDFLAG(IS_WIN)
 
@@ -591,6 +592,12 @@
     AddSwitchesForVirtualTime();
   }
 
+#if BUILDFLAG(IS_WIN)
+  // Make sure that 'uxtheme.dll' is pinned before blocking on the main thread
+  // is disallowed; see https://crbug.com/368388543#comment11.
+  base::win::IsDarkModeAvailable();
+#endif  // BUILDFLAG(IS_WIN)
+
   return std::nullopt;
 }
 
diff --git a/infra/config/generated/testing/mixins.pyl b/infra/config/generated/testing/mixins.pyl
index 0bc8277..e9d10ea 100644
--- a/infra/config/generated/testing/mixins.pyl
+++ b/infra/config/generated/testing/mixins.pyl
@@ -873,6 +873,19 @@
     'swarming': {
       'dimensions': {
         'cpu': 'x86-64',
+        'gpu': '1002:67ef|1002:7340',
+        'hidpi': '1',
+        'os': 'Mac-14.4.1',
+        'pool': 'chromium.tests.gpu',
+        'display_attached': '1',
+      },
+    },
+  },
+  'mac_retina_amd_radeon_pro_555x_gpu_stable': {
+    'fail_if_unused': False,
+    'swarming': {
+      'dimensions': {
+        'cpu': 'x86-64',
         'gpu': '1002:67ef',
         'hidpi': '1',
         'os': 'Mac-14.4.1',
diff --git a/infra/config/generated/testing/variants.pyl b/infra/config/generated/testing/variants.pyl
index 54536693..5100830 100644
--- a/infra/config/generated/testing/variants.pyl
+++ b/infra/config/generated/testing/variants.pyl
@@ -116,7 +116,7 @@
     ],
   },
   'MAC_RETINA_AMD_GPU_STABLE': {
-    'identifier': '1002:67ef',
+    'identifier': '1002:67ef OR 1002:7340',
     'mixins': [
       'mac_retina_amd_gpu_stable',
     ],
diff --git a/infra/config/targets/mixins.star b/infra/config/targets/mixins.star
index 50796c1..5eead85 100644
--- a/infra/config/targets/mixins.star
+++ b/infra/config/targets/mixins.star
@@ -1432,6 +1432,21 @@
     swarming = targets.swarming(
         dimensions = {
             "cpu": "x86-64",
+            "gpu": "1002:67ef|1002:7340",
+            "hidpi": "1",
+            "os": "Mac-14.4.1",
+            "pool": "chromium.tests.gpu",
+            "display_attached": "1",
+        },
+    ),
+)
+
+targets.mixin(
+    name = "mac_retina_amd_radeon_pro_555x_gpu_stable",
+    generate_pyl_entry = targets.IGNORE_UNUSED,
+    swarming = targets.swarming(
+        dimensions = {
+            "cpu": "x86-64",
             "gpu": "1002:67ef",
             "hidpi": "1",
             "os": "Mac-14.4.1",
diff --git a/infra/config/targets/variants.star b/infra/config/targets/variants.star
index b3beb17f..7e54ae2f 100644
--- a/infra/config/targets/variants.star
+++ b/infra/config/targets/variants.star
@@ -123,7 +123,7 @@
 
 targets.variant(
     name = "MAC_RETINA_AMD_GPU_STABLE",
-    identifier = "1002:67ef",
+    identifier = "1002:67ef OR 1002:7340",
     mixins = [
         "mac_retina_amd_gpu_stable",
     ],
diff --git a/internal b/internal
index a7c34a9..ee6b0d65 160000
--- a/internal
+++ b/internal
@@ -1 +1 @@
-Subproject commit a7c34a939f03868b62478dd1b8fe6eae2aa2df5c
+Subproject commit ee6b0d656f2c6feb3d3e4b3a7371439443e87957
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index 824ca26..7d204de4 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -755,7 +755,15 @@
     bundle_deps += [ ios_application_icons_target ]
     bundle_deps += ios_providers_resources_targets
   } else {
-    variants = ios_chrome_app_variants
+    _variants = []
+    foreach(_variant, ios_chrome_app_variants) {
+      _variants += [
+        {
+          forward_variables_from(_variant, "*", [ "cpe_bundle_deps" ])
+        },
+      ]
+    }
+    variants = _variants
   }
 
   xcode_extra_attributes = {
diff --git a/ios/chrome/app/background_refresh/BUILD.gn b/ios/chrome/app/background_refresh/BUILD.gn
index 324f410..d0a0f6089 100644
--- a/ios/chrome/app/background_refresh/BUILD.gn
+++ b/ios/chrome/app/background_refresh/BUILD.gn
@@ -24,6 +24,7 @@
     "//ios/chrome/app/application_delegate:observing_app_state_agent",
     "//ios/chrome/browser/shared/public/features",
     "//ios/chrome/common",
+    "//ios/web/public/thread",
   ]
   frameworks = [
     "Foundation.framework",
diff --git a/ios/chrome/app/background_refresh/app_refresh_provider.h b/ios/chrome/app/background_refresh/app_refresh_provider.h
index 7b70c17..9b174ad46a 100644
--- a/ios/chrome/app/background_refresh/app_refresh_provider.h
+++ b/ios/chrome/app/background_refresh/app_refresh_provider.h
@@ -8,12 +8,26 @@
 #import <Foundation/Foundation.h>
 
 #import "base/ios/block_types.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/time/time.h"
 
+// Protocol for objects which handle provider tasks. This is separate from the
+// refresh provider so the task object can have a separate sequence checker.
+@protocol AppRefreshProviderTask <NSObject>
+
+// Do the work for the refresh task. This method must block and only return when
+// the task is completed.
+- (void)execute;
+
+@end
+
 // Superclass for classes that implement background refresh tasks. Each feature
 // that uses background refresh to update data should implement its own
 // AppRefreshProvider subclass, and add those to the background refresh app
 // agent by calling `[BackgroundRefreshAppAgent addAppRefreshProvider:]`.
+// Instances of this class are expected to do all work on the main thread
+// except for the `-task` method, which will be called on the thread configured
+// in the `taskThread` property.
 @interface AppRefreshProvider : NSObject
 
 // An identifier for the provider. This is used to index values in user
@@ -25,21 +39,30 @@
 @property(nonatomic, readonly) base::TimeDelta refreshInterval;
 
 // Last *completed* run time for the provider's operations. Backed by a user
-// default value.
+// default value. This is not updated if the provider's task is canceled.
 @property(nonatomic) base::Time lastRun;
 
 // YES if the provider is due (hasn't run since the last interval).
 @property(nonatomic, readonly, getter=isDue) BOOL due;
 
-// Handle the refresh task and call `completion` back on the initial thread.
-// Template method -- subclasses must implement this, and should never call the
-// superclass implementation.
+// Thread to run `-task` on. Defaults to the IO thread.
+@property(nonatomic, readonly) scoped_refptr<base::SingleThreadTaskRunner>
+    taskThread;
+
+// Handle the refresh task and call `completion` back on the main thread,
+// updating the `lastRun` value.
 - (void)handleRefreshWithCompletion:(ProceduralBlock)completion;
 
-// TODO(crbug.com/354918188): Implement cancellation.
-// Terminate the running task immediately.
+// Terminate the running task immediately. The completion block passed in via
+// `-handleRefreshWithCompletion:` is not called, and the `lastRun` value is
+// not updated.
 - (void)cancelRefresh;
 
+// Return an object that will actually handle the task. The returned object's
+// `execute` method will be called on `taskThread`, and the whole implementation
+// of that object should be sequence-affine for that thread.
+- (id<AppRefreshProviderTask>)task;
+
 @end
 
 #endif  // IOS_CHROME_APP_BACKGROUND_REFRESH_APP_REFRESH_PROVIDER_H_
diff --git a/ios/chrome/app/background_refresh/app_refresh_provider.mm b/ios/chrome/app/background_refresh/app_refresh_provider.mm
index becd878b6..d575b04 100644
--- a/ios/chrome/app/background_refresh/app_refresh_provider.mm
+++ b/ios/chrome/app/background_refresh/app_refresh_provider.mm
@@ -4,7 +4,12 @@
 
 #import "ios/chrome/app/background_refresh/app_refresh_provider.h"
 
+#import "base/cancelable_callback.h"
+#import "base/functional/bind.h"
 #import "base/notreached.h"
+#import "base/task/thread_pool.h"
+#import "ios/web/public/thread/web_task_traits.h"
+#import "ios/web/public/thread/web_thread.h"
 
 @interface AppRefreshProvider ()
 
@@ -13,7 +18,10 @@
 
 @end
 
-@implementation AppRefreshProvider
+@implementation AppRefreshProvider {
+  base::CancelableOnceCallback<void()> _task;
+  SEQUENCE_CHECKER(_sequenceChecker);
+}
 
 - (instancetype)init {
   if ((self = [super init])) {
@@ -24,7 +32,11 @@
   return self;
 }
 
+#pragma mark - Public properties
+
 - (base::Time)lastRun {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+
   NSDate* lastRunDate =
       [[NSUserDefaults standardUserDefaults] objectForKey:self.defaultsKey];
   // If the provider was never run before, return a time in the distant past.
@@ -35,15 +47,25 @@
 }
 
 - (void)setLastRun:(base::Time)lastRun {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+
   // Store the last run time.
   NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
   [defaults setObject:lastRun.ToNSDate() forKey:self.defaultsKey];
 }
 
 - (BOOL)isDue {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+
   return base::Time::Now() - self.lastRun > self.refreshInterval;
 }
 
+- (scoped_refptr<base::SingleThreadTaskRunner>)taskThread {
+  return web::GetIOThreadTaskRunner({});
+}
+
+#pragma mark - Private properties
+
 - (NSString*)defaultsKey {
   CHECK(self.identifier.length > 0)
       << "Subclasses of AppRefreshProvider must provide an identifier.";
@@ -51,14 +73,46 @@
       [@"AppRefreshProvider_lastRun_" stringByAppendingString:self.identifier];
 }
 
+#pragma mark - Public methods
+
+// Called on the main thread, runs tasks on (by default) the IO thread.
 - (void)handleRefreshWithCompletion:(ProceduralBlock)completion {
-  NOTREACHED() << "Subclasses of AppRefreshProvider must implement "
-                  "handleRefreshWithCompletion:";
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+  id<AppRefreshProviderTask> task = [self task];
+  _task.Reset(base::BindOnce(^{
+    [task execute];
+  }));
+
+  __weak __typeof(self) weakSelf = self;
+  base::OnceCallback callback = base::BindOnce(^{
+    [weakSelf refreshTaskFinishedWithCompletion:completion];
+  });
+
+  // `_task` has a cancelable wrapper, so `_task.callback()` is the underlying
+  // OnceCallback to execute.
+  self.taskThread->PostTaskAndReply(FROM_HERE, _task.callback(),
+                                    std::move(callback));
 }
 
 // Terminate the running task immediately.
 - (void)cancelRefresh {
-  // TODO(crbug.com/354918188): Implement cancellation.
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+
+  _task.Cancel();
+}
+
+- (id<AppRefreshProviderTask>)task {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+  NOTREACHED() << "Subclasses of AppRefreshProvider must implement -task";
+}
+
+#pragma mark - Private methods
+
+- (void)refreshTaskFinishedWithCompletion:(ProceduralBlock)completion {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+  self.lastRun = base::Time::Now();
+
+  completion();
 }
 
 @end
diff --git a/ios/chrome/app/background_refresh/background_refresh_app_agent.mm b/ios/chrome/app/background_refresh/background_refresh_app_agent.mm
index 665ea53..de0af6d 100644
--- a/ios/chrome/app/background_refresh/background_refresh_app_agent.mm
+++ b/ios/chrome/app/background_refresh/background_refresh_app_agent.mm
@@ -42,8 +42,8 @@
 
 // Debug NSUserDefaults key used to collect debug data.
 // Number of times systemTriggeredRefreshForTask was run with no due tasks.
-NSString* appStateDueCountDuringBackgroundRefreshKey =
-    @"debug_app_state_no_due_count_during_background_refresh";
+NSString* noTasksDueCountDuringBackgroundRefreshKey =
+    @"debug_no_tasks_due_count_during_background_refresh";
 
 }  // namespace
 
@@ -52,14 +52,35 @@
 @end
 
 @interface BackgroundRefreshAppAgent ()
+// The providers registered.
 @property(nonatomic) NSMutableSet<AppRefreshProvider*>* providers;
+// The subset of `providers` that are currently running refresh tasks.
+@property(nonatomic) NSMutableSet<AppRefreshProvider*>* activeProviders;
 @end
 
-@implementation BackgroundRefreshAppAgent
+// General note on threading: the IOS task scheduler invokes the configured
+// blocks on a non-main thread. This class's primary job is to route background
+// refresh work to the specific classes (instances of AppRefreshProvider) which
+// actually perform the refresh tasks. In order for this to happen on Chromium
+// threads, all of the task dispatch and management work is done on the main
+// thread. The methods that handle that work are thus main-sequence affine, and
+// are guarded by a sequence checker. The configured methods that handle task
+// execution and cancellation, which are called directly by the iOS scheduler on
+// a non-main thread, must therefore only consist of dispacthing to a
+// corresponding main-thread method.
+//
+// For clarity, the methods expected to be only called from the task scheduler
+// on a non-main thread have names beginning with `systemTriggered`. The
+// corresponding main-thread methods have names beginning with `handle`.
+
+@implementation BackgroundRefreshAppAgent {
+  SEQUENCE_CHECKER(_sequenceChecker);
+}
 
 - (instancetype)init {
   if ((self = [super init])) {
     _providers = [NSMutableSet set];
+    _activeProviders = [NSMutableSet set];
     [self registerBackgroundRefreshTask];
   }
   return self;
@@ -67,6 +88,7 @@
 
 - (void)addAppRefreshProvider:(AppRefreshProvider*)provider {
   CHECK(provider);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
   [self.providers addObject:provider];
 }
 
@@ -79,8 +101,10 @@
 #pragma mark - Private
 
 - (void)registerBackgroundRefreshTask {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+
   auto handler = ^(BGTask* task) {
-    [self systemTriggeredRefreshForTask:task];
+    [self systemTriggeredExecutionForTask:task];
   };
 
   // TODO(crbug.com/354919106):  Consider moving this task to a queue known to
@@ -117,19 +141,20 @@
 
 // Handle background refresh. This is called by the (OS) background task
 // scheduler and is **not called on the main thread**.
-- (void)systemTriggeredRefreshForTask:(BGTask*)task {
-  // TODO(crbug.com/354919106): This is the simplest possible implementation,
-  // and it provides no thread safety or signalling to the app state about
-  // status. Some of the many things that must be implemented for this to work
-  // correctly:
+- (void)systemTriggeredExecutionForTask:(BGTask*)task {
+  // TODO(crbug.com/354919106): This is still an incomplete implementation. Some
+  // of the things that must be implemented for this to work correctly:
   //  - No processing if this is a safe mode launch.
-  //  - Configure an expiration handler on `task`, which cancels all refresh
-  //    tasks.
   //  - Update the app state for both starting and ending refresh work; this
   //    must hapopen on the main thread, and further processing should wait on
-  //    it.
-  //  - Handle tracking completion of each task, and only signal success if
-  //    all tasks succeeded overall.
+  //    it. There are hooks (-refreshStarted and -refreshComplete) for this but
+  //    they are no-ops.
+
+  __weak __typeof(self) weakSelf = self;
+  __weak __typeof(task) weakTask = task;
+  task.expirationHandler = ^{
+    [weakSelf systemTriggeredExpirationForTask:weakTask];
+  };
 
   // TODO(crbug.com/354918794): Remove this code once not needed anymore.
   NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
@@ -138,53 +163,125 @@
   [defaults setInteger:triggeredRefreshCount + 1
                 forKey:triggeredBackgroundRefreshesKey];
 
-  // TODO(crbug.com/354918794): Remove this code once not needed anymore.
-  // ApplicationState must be called from the main thread.
+  // Hop on to the main thread for task execution.
   dispatch_async(dispatch_get_main_queue(), ^{
-    NSString* appState;
-    switch ([[UIApplication sharedApplication] applicationState]) {
-      case UIApplicationStateActive:
-        appState = appStateActiveCountDuringBackgroundRefreshKey;
-        break;
-      case UIApplicationStateInactive:
-        appState = appStateInactiveCountDuringBackgroundRefreshKey;
-        break;
-      case UIApplicationStateBackground:
-        appState = appStateBackgroundCountDuringBackgroundRefreshKey;
-        break;
-    }
-    [defaults setInteger:[defaults integerForKey:appState] + 1 forKey:appState];
+    [weakSelf handleExecutionForTask:task];
   });
+}
 
-  ProceduralBlock completion = ^{
-    [task setTaskCompletedWithSuccess:YES];
-  };
+// Handle task expiration. This is called by the (OS) background task scheduler
+// shortly before the task expires; it is **not called on the main thread**.
+- (void)systemTriggeredExpirationForTask:(BGTask*)task {
+  // Hop to main thread to cancel tasks.
+  __weak __typeof(self) weakSelf = self;
+  dispatch_async(dispatch_get_main_queue(), ^{
+    [weakSelf handleExpiratonForTask:task];
+  });
+}
 
-  // YES if there is at least one due task.
-  BOOL hasDueTasks = NO;
+// Handles `task` execution on the main thread.
+- (void)handleExecutionForTask:(BGTask*)task {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+
+  // TODO(crbug.com/354918794): Remove this code once not needed anymore.
+  NSString* appState;
+  switch ([[UIApplication sharedApplication] applicationState]) {
+    case UIApplicationStateActive:
+      appState = appStateActiveCountDuringBackgroundRefreshKey;
+      break;
+    case UIApplicationStateInactive:
+      appState = appStateInactiveCountDuringBackgroundRefreshKey;
+      break;
+    case UIApplicationStateBackground:
+      appState = appStateBackgroundCountDuringBackgroundRefreshKey;
+      break;
+  }
+  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
+  [defaults setInteger:[defaults integerForKey:appState] + 1 forKey:appState];
+
+  [self refreshStarted];
   for (AppRefreshProvider* provider in self.providers) {
     // Only execute due tasks.
     if ([provider isDue]) {
-      hasDueTasks = YES;
+      // Track running providers. The completion handler will remove tasks as
+      // they complete.
+      [self.activeProviders addObject:provider];
+
+      __weak __typeof(self) weakSelf = self;
+      ProceduralBlock completion = ^{
+        [weakSelf handleCompletedProvider:provider forTask:task];
+      };
       [provider handleRefreshWithCompletion:completion];
     }
   }
-
   // TODO(crbug.com/354918794): Remove this code once not needed anymore.
-  if (!hasDueTasks) {
+  if (self.activeProviders.count == 0) {
     [defaults
-        setInteger:[defaults integerForKey:
-                                 appStateDueCountDuringBackgroundRefreshKey] +
-                   1
-            forKey:appStateDueCountDuringBackgroundRefreshKey];
+        setInteger:
+            [defaults integerForKey:noTasksDueCountDuringBackgroundRefreshKey] +
+            1
+            forKey:noTasksDueCountDuringBackgroundRefreshKey];
   }
 }
 
+// Handle `task` running out of execution time.
+- (void)handleExpiratonForTask:(BGTask*)task {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+  // TODO(crbug.com/354919106): While this should correctly handle task
+  // expiration, there's no mechanism for looging or informing the app as a
+  // whole that this has happened.
+
+  // Cancel all provider tasks. The completion callback will not be called.
+  for (AppRefreshProvider* provider in self.activeProviders) {
+    [provider cancelRefresh];
+  }
+  // Stop tracking all remaining providers.
+  [self.activeProviders removeAllObjects];
+  // Signal that the refresh is complete.
+  [self refreshComplete];
+}
+
+// Handle `provider` completing its work for `task`. If all active providers are
+// complete, mark `task` as complete.
+- (void)handleCompletedProvider:(AppRefreshProvider*)provider
+                        forTask:(BGTask*)task {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
+  [self.activeProviders removeObject:provider];
+  if (self.activeProviders.count == 0) {
+    [task setTaskCompletedWithSuccess:YES];
+    [self refreshComplete];
+  }
+}
+
+- (void)refreshStarted {
+  // TODO(crbug.com/354919106): At a minimum, this should signal to the app
+  // state that refresh has started.
+  // Better would be tell the app state to call back when the right init stage
+  // has been reached, which might be immediate. There's currently no control
+  // flow to do this.
+  //
+  // The design intent for this class is that it is agnostic to whether the app
+  // is actually foregrounded or not.
+}
+
+- (void)refreshComplete {
+  // TODO(crbug.com/354919106): Signal to the app state that background refresh
+  // is done. This should, if the app is not yet in the foreground, cause the
+  // app to enter a state where background termination is not considered a
+  // crash.
+  //
+  // The design intent for this class is that it is agnostic to whether the app
+  // is actually foregrounded or not. The app state will care about how to
+  // handle -refreshComplete in the foreground vs the background, but this class
+  // will not.
+}
+
 // Request that app refresh runs no sooner than `delay` seconds from now.
 // Multiple requests for refresh will be coalesced.
 // TODO(crbug.com/354918222): Derive `delay` from the refresh intervals of the
 // providers.
 - (void)requestAppRefreshWithDelay:(NSTimeInterval)delay {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
   // Schedule requests only if flag is enabled.
   if (!IsAppBackgroundRefreshEnabled()) {
     return;
diff --git a/ios/chrome/app/background_refresh/test_refresher.mm b/ios/chrome/app/background_refresh/test_refresher.mm
index fd0e86a2..534c19f 100644
--- a/ios/chrome/app/background_refresh/test_refresher.mm
+++ b/ios/chrome/app/background_refresh/test_refresher.mm
@@ -10,9 +10,17 @@
 #import "base/time/time.h"
 #import "ios/chrome/app/application_delegate/app_state.h"
 #import "ios/chrome/app/background_refresh/background_refresh_metrics.h"
+#import "ios/web/public/thread/web_task_traits.h"
+#import "ios/web/public/thread/web_thread.h"
+
+@interface TestRefresherTask : NSObject <AppRefreshProviderTask>
+
+- (instancetype)initWithAppState:(AppState*)appState;
+
+@end
 
 @implementation TestRefresher {
-  __weak AppState* _appState;
+  TestRefresherTask* _task;
 }
 
 @synthesize identifier = _identifier;
@@ -20,17 +28,38 @@
 - (instancetype)initWithAppState:(AppState*)appState {
   if ((self = [super init])) {
     _identifier = @"TestRefresher";
-    _appState = appState;
+    _task = [[TestRefresherTask alloc] initWithAppState:(AppState*)appState];
   }
   return self;
 }
 
 #pragma mark AppRefreshProvider
 
-- (void)handleRefreshWithCompletion:(ProceduralBlock)completion {
-  // TODO(crbug.com/354918403): If this provider is used outside of canary, it
-  // *must* post the logging task (which reads from AppState) to the main
-  // thread!
+// This provider runs on the main thread.
+- (scoped_refptr<base::SingleThreadTaskRunner>)taskThread {
+  return web::GetUIThreadTaskRunner({});
+}
+
+- (id<AppRefreshProviderTask>)task {
+  return _task;
+}
+
+@end
+
+@implementation TestRefresherTask {
+  SEQUENCE_CHECKER(_sequenceChecker);
+  __weak AppState* _appState;
+}
+
+- (instancetype)initWithAppState:(AppState*)appState {
+  if ((self = [super init])) {
+    _appState = appState;
+  }
+  return self;
+}
+
+- (void)execute {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
   InitStageDuringBackgroundRefreshActions stage =
       InitStageDuringBackgroundRefreshActions::kUnknown;
   switch (_appState.initStage) {
@@ -75,8 +104,6 @@
 
   base::UmaHistogramEnumeration(kInitStageDuringBackgroundRefreshHistogram,
                                 stage);
-
-  completion();
 }
 
 @end
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 d1537ed..f887243 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -83,6 +83,7 @@
 <translation id="1364367057792633742">Nova kartica</translation>
 <translation id="1365106417372288489">Sadržaj iPhone-a je nedavno vraćen, zbog čega je podrazumevani pregledač možda promenjen.</translation>
 <translation id="1366297852155605523">Deljeno sa mnom</translation>
+<translation id="1369286077209859800">Prikažite sve kartice u grupi kartica</translation>
 <translation id="136942498637440594">Možete da pretražujete slike i ono što vidite.</translation>
 <translation id="1377508275003315939">Lozinke</translation>
 <translation id="1381022135873211423">{count,plural, =1{{position}. od {count} adrese}one{{position}. od {count} adrese}few{{position}. od {count} adrese}other{{position}. od {count} adresa}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 041bcb0..11ce2a5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -83,6 +83,7 @@
 <translation id="1364367057792633742">Нова картица</translation>
 <translation id="1365106417372288489">Садржај iPhone-а је недавно враћен, због чега је подразумевани прегледач можда промењен.</translation>
 <translation id="1366297852155605523">Дељено са мном</translation>
+<translation id="1369286077209859800">Прикажите све картице у групи картица</translation>
 <translation id="136942498637440594">Можете да претражујете слике и оно што видите.</translation>
 <translation id="1377508275003315939">Лозинке</translation>
 <translation id="1381022135873211423">{count,plural, =1{{position}. од {count} адресе}one{{position}. од {count} адресе}few{{position}. од {count} адресе}other{{position}. од {count} адреса}}</translation>
diff --git a/ios/chrome/browser/enterprise/connectors/BUILD.gn b/ios/chrome/browser/enterprise/connectors/BUILD.gn
new file mode 100644
index 0000000..7bfadc4b
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/BUILD.gn
@@ -0,0 +1,39 @@
+# 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("connectors") {
+  sources = [
+    "connectors_service.h",
+    "connectors_service.mm",
+    "connectors_service_factory.h",
+    "connectors_service_factory.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//components/enterprise/connectors/core",
+    "//components/keyed_service/core",
+    "//components/keyed_service/ios",
+    "//ios/chrome/browser/shared/model/profile",
+    "//ios/chrome/browser/shared/model/profile:profile_keyed_service_factory",
+    "//ios/web/public",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+
+  sources = [ "connectors_service_unittest.mm" ]
+
+  public_deps = [ ":connectors" ]
+
+  deps = [
+    "//base",
+    "//components/prefs:test_support",
+    "//ios/chrome/browser/shared/model/profile/test",
+    "//ios/web/public/test",
+    "//ios/web/public/test/fakes",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/enterprise/connectors/OWNERS b/ios/chrome/browser/enterprise/connectors/OWNERS
new file mode 100644
index 0000000..5f60dbe3
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/OWNERS
@@ -0,0 +1,2 @@
+domfc@chromium.org
+nancylanxiao@google.com
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service.h b/ios/chrome/browser/enterprise/connectors/connectors_service.h
new file mode 100644
index 0000000..62bc6b2
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service.h
@@ -0,0 +1,42 @@
+// 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_ENTERPRISE_CONNECTORS_CONNECTORS_SERVICE_H_
+#define IOS_CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_SERVICE_H_
+
+#import "base/gtest_prod_util.h"
+#import "components/enterprise/connectors/core/connectors_service_base.h"
+#import "components/keyed_service/core/keyed_service.h"
+
+namespace enterprise_connectors {
+
+// iOS-specific implementation of `ConnectorsServiceBase`, to be used to access
+// values for the following policies:
+// - EnterpriseRealTimeUrlCheckMode
+// - OnSecurityEventEnterpriseConnectors
+class ConnectorsService : public ConnectorsServiceBase, public KeyedService {
+ public:
+  explicit ConnectorsService(PrefService* pref_service);
+
+  // ConnectorsServiceBase:
+  bool IsConnectorEnabled(AnalysisConnector connector) const override;
+
+ protected:
+  // ConnectorsServiceBase:
+  std::optional<DmToken> GetDmToken(const char* scope_pref) const override;
+  bool ConnectorsEnabled() const override;
+  PrefService* GetPrefs() override;
+  const PrefService* GetPrefs() const override;
+  ConnectorsManagerBase* GetConnectorsManagerBase() override;
+  const ConnectorsManagerBase* GetConnectorsManagerBase() const override;
+
+ private:
+  FRIEND_TEST_ALL_PREFIXES(ConnectorsServiceTest, GetPrefs);
+
+  raw_ptr<PrefService> prefs_;
+};
+
+}  // namespace enterprise_connectors
+
+#endif  // IOS_CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_SERVICE_H_
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service.mm b/ios/chrome/browser/enterprise/connectors/connectors_service.mm
new file mode 100644
index 0000000..c07ee5ce
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service.mm
@@ -0,0 +1,49 @@
+// 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/enterprise/connectors/connectors_service.h"
+
+namespace enterprise_connectors {
+
+ConnectorsService::ConnectorsService(PrefService* pref_service)
+    : prefs_(pref_service) {
+  DCHECK(prefs_);
+}
+
+bool ConnectorsService::IsConnectorEnabled(AnalysisConnector connector) const {
+  // None of the analysis connector policies are supported on iOS.
+  return false;
+}
+
+std::optional<ConnectorsServiceBase::DmToken> ConnectorsService::GetDmToken(
+    const char* scope_pref) const {
+  // TODO(crbug.com/370466578): Implement this method.
+  return std::nullopt;
+}
+
+bool ConnectorsService::ConnectorsEnabled() const {
+  // TODO(crbug.com/370466578): Implement this method.
+  return false;
+}
+
+PrefService* ConnectorsService::GetPrefs() {
+  return prefs_;
+}
+
+const PrefService* ConnectorsService::GetPrefs() const {
+  return prefs_;
+}
+
+ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() {
+  // TODO(crbug.com/370466578): Implement this method.
+  return nullptr;
+}
+
+const ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase()
+    const {
+  // TODO(crbug.com/370466578): Implement this method.
+  return nullptr;
+}
+
+}  // namespace enterprise_connectors
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service_factory.h b/ios/chrome/browser/enterprise/connectors/connectors_service_factory.h
new file mode 100644
index 0000000..0c79a1b2
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service_factory.h
@@ -0,0 +1,32 @@
+// 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_ENTERPRISE_CONNECTORS_CONNECTORS_SERVICE_FACTORY_H_
+#define IOS_CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_SERVICE_FACTORY_H_
+
+#import "base/no_destructor.h"
+#import "ios/chrome/browser/enterprise/connectors/connectors_service.h"
+#import "ios/chrome/browser/shared/model/profile/profile_keyed_service_factory_ios.h"
+
+namespace enterprise_connectors {
+
+class ConnectorsServiceFactory : public ProfileKeyedServiceFactoryIOS {
+ public:
+  static ConnectorsServiceFactory* GetInstance();
+  static ConnectorsService* GetForProfile(ProfileIOS* profile);
+
+ private:
+  friend class base::NoDestructor<ConnectorsServiceFactory>;
+
+  ConnectorsServiceFactory();
+  ~ConnectorsServiceFactory() override;
+
+  // ProfileKeyedServiceFactoryIOS:
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
+      web::BrowserState* browser_state) const override;
+};
+
+}  // namespace enterprise_connectors
+
+#endif  // IOS_CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_SERVICE_FACTORY_H_
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service_factory.mm b/ios/chrome/browser/enterprise/connectors/connectors_service_factory.mm
new file mode 100644
index 0000000..8ab183db
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service_factory.mm
@@ -0,0 +1,38 @@
+// 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/enterprise/connectors/connectors_service_factory.h"
+
+#import "ios/chrome/browser/shared/model/profile/profile_ios.h"
+#import "ios/chrome/browser/shared/model/profile/profile_keyed_service_factory_ios.h"
+
+namespace enterprise_connectors {
+
+// static
+ConnectorsServiceFactory* ConnectorsServiceFactory::GetInstance() {
+  static base::NoDestructor<ConnectorsServiceFactory> instance;
+  return instance.get();
+}
+
+// static
+ConnectorsService* ConnectorsServiceFactory::GetForProfile(
+    ProfileIOS* profile) {
+  return GetInstance()->GetServiceForProfileAs<ConnectorsService>(
+      profile, /*create=*/true);
+}
+
+ConnectorsServiceFactory::ConnectorsServiceFactory()
+    : ProfileKeyedServiceFactoryIOS("ConnectorsService",
+                                    ProfileSelection::kOwnInstanceInIncognito) {
+}
+
+ConnectorsServiceFactory::~ConnectorsServiceFactory() = default;
+
+std::unique_ptr<KeyedService> ConnectorsServiceFactory::BuildServiceInstanceFor(
+    web::BrowserState* browser_state) const {
+  return std::make_unique<ConnectorsService>(
+      ProfileIOS::FromBrowserState(browser_state)->GetPrefs());
+}
+
+}  // namespace enterprise_connectors
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service_unittest.mm b/ios/chrome/browser/enterprise/connectors/connectors_service_unittest.mm
new file mode 100644
index 0000000..e27245d
--- /dev/null
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service_unittest.mm
@@ -0,0 +1,39 @@
+// 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/enterprise/connectors/connectors_service.h"
+
+#import "components/prefs/testing_pref_service.h"
+#import "ios/chrome/browser/enterprise/connectors/connectors_service_factory.h"
+#import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h"
+#import "testing/gtest/include/gtest/gtest.h"
+#import "testing/platform_test.h"
+
+namespace enterprise_connectors {
+
+namespace {
+
+class ConnectorsServiceTest : public PlatformTest {
+ public:
+  PrefService* prefs() { return &pref_service_; }
+
+ private:
+  TestingPrefServiceSimple pref_service_;
+};
+
+}  // namespace
+
+TEST_F(ConnectorsServiceTest, GetPrefs) {
+  ConnectorsService connectors_service{prefs()};
+  const ConnectorsService const_connectors_service{prefs()};
+
+  PrefService* prefs = connectors_service.GetPrefs();
+  const PrefService* const_prefs = const_connectors_service.GetPrefs();
+
+  ASSERT_TRUE(prefs);
+  ASSERT_TRUE(const_prefs);
+  ASSERT_EQ(prefs, const_prefs);
+}
+
+}  // namespace enterprise_connectors
diff --git a/ios/chrome/browser/find_bar/ui_bundled/find_bar_coordinator.mm b/ios/chrome/browser/find_bar/ui_bundled/find_bar_coordinator.mm
index be463f7..20f1c9c7 100644
--- a/ios/chrome/browser/find_bar/ui_bundled/find_bar_coordinator.mm
+++ b/ios/chrome/browser/find_bar/ui_bundled/find_bar_coordinator.mm
@@ -31,7 +31,7 @@
 - (void)start {
   if (!self.findBarController) {
     self.findBarController = [[FindBarControllerIOS alloc]
-        initWithIncognito:self.browser->GetBrowserState()->IsOffTheRecord()];
+        initWithIncognito:self.browser->GetProfile()->IsOffTheRecord()];
 
     self.findBarController.commandHandler = self.findInPageCommandHandler;
   }
@@ -91,7 +91,7 @@
   }
   auto* helper = GetConcreteFindTabHelperFromWebState(self.currentWebState);
   DCHECK(helper && helper->IsFindUIActive());
-  if (!self.browser->GetBrowserState()->IsOffTheRecord()) {
+  if (!self.browser->GetProfile()->IsOffTheRecord()) {
     helper->RestoreSearchTerm();
   }
   [self.presentationDelegate setHeadersForFindBarCoordinator:self];
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 0506ee909..fe204e14 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -1079,10 +1079,6 @@
      FEATURE_WITH_PARAMS_VALUE_TYPE(kContentPushNotifications,
                                     kContentPushNotificationsVariations,
                                     "ContentPushNotifications")},
-    {"overflow-menu-customization",
-     flag_descriptions::kOverflowMenuCustomizationName,
-     flag_descriptions::kOverflowMenuCustomizationDescription, flags_ui::kOsIos,
-     FEATURE_VALUE_TYPE(kOverflowMenuCustomization)},
     {"enable-lens-in-omnibox-copied-image",
      flag_descriptions::kEnableLensInOmniboxCopiedImageName,
      flag_descriptions::kEnableLensInOmniboxCopiedImageDescription,
@@ -1226,6 +1222,12 @@
      flag_descriptions::kIOSKeyboardAccessoryUpgradeName,
      flag_descriptions::kIOSKeyboardAccessoryUpgradeDescription,
      flags_ui::kOsIos, FEATURE_VALUE_TYPE(kIOSKeyboardAccessoryUpgrade)},
+    {"ios-keyboard-accessory-upgrade-short-manual-fill-menu",
+     flag_descriptions::kIOSKeyboardAccessoryUpgradeShortManualFillMenuName,
+     flag_descriptions::
+         kIOSKeyboardAccessoryUpgradeShortManualFillMenuDescription,
+     flags_ui::kOsIos,
+     FEATURE_VALUE_TYPE(kIOSKeyboardAccessoryUpgradeShortManualFillMenu)},
     {"ios-large-fakebox", flag_descriptions::kIOSLargeFakeboxName,
      flag_descriptions::kIOSLargeFakeboxDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(kIOSLargeFakebox)},
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 445e5d1..3961929 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -551,6 +551,13 @@
 const char kIOSKeyboardAccessoryUpgradeDescription[] =
     "When enabled, the upgraded keyboard accessory UI will be presented.";
 
+const char kIOSKeyboardAccessoryUpgradeShortManualFillMenuName[] =
+    "Enable the keyboard accessory upgrade on iOS with a shorter manual fill "
+    "menu";
+const char kIOSKeyboardAccessoryUpgradeShortManualFillMenuDescription[] =
+    "When enabled, the upgraded keyboard accessory UI will be presented with a "
+    "shorter manual fill menu.";
+
 const char kIOSChooseFromDriveName[] = "IOS Choose from Drive";
 const char kIOSChooseFromDriveDescription[] =
     "Enables the Choose from Drive feature on iOS.";
@@ -679,10 +686,6 @@
 const char kNewSyncOptInIllustrationDescription[] =
     "Uses the new illustration in the sync opt-in promotion view.";
 
-const char kOverflowMenuCustomizationName[] = "Overflow Menu Customization";
-const char kOverflowMenuCustomizationDescription[] =
-    "Allow users to customize the order of the overflow menu";
-
 const char kNTPViewHierarchyRepairName[] = "NTP View Hierarchy Repair";
 const char kNTPViewHierarchyRepairDescription[] =
     "Checks if NTP view hierarchy is broken and fixes it if necessary.";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 392188d..71f6601 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -470,6 +470,11 @@
 extern const char kIOSKeyboardAccessoryUpgradeName[];
 extern const char kIOSKeyboardAccessoryUpgradeDescription[];
 
+// Title and description for the flag to enable the keyboard accessory upgrade
+// with a shorter manual fill menu.
+extern const char kIOSKeyboardAccessoryUpgradeShortManualFillMenuName[];
+extern const char kIOSKeyboardAccessoryUpgradeShortManualFillMenuDescription[];
+
 // Title and description for the flag to enable password bottom sheet triggering
 // on autofocus on IOS.
 extern const char kIOSPasswordBottomSheetAutofocusName[];
@@ -597,10 +602,6 @@
 extern const char kNewSyncOptInIllustrationName[];
 extern const char kNewSyncOptInIllustrationDescription[];
 
-// Title and description for the flag to enable overflow menu customization
-extern const char kOverflowMenuCustomizationName[];
-extern const char kOverflowMenuCustomizationDescription[];
-
 // Title and description for temporary bug fix to broken NTP view hierarhy.
 // TODO(crbug.com/40799579): Remove this when fixed.
 extern const char kNTPViewHierarchyRepairName[];
diff --git a/ios/chrome/browser/follow/model/follow_browser_agent.mm b/ios/chrome/browser/follow/model/follow_browser_agent.mm
index c60a9220..dde466c 100644
--- a/ios/chrome/browser/follow/model/follow_browser_agent.mm
+++ b/ios/chrome/browser/follow/model/follow_browser_agent.mm
@@ -239,7 +239,7 @@
 
   // Enable the feed prefs to show the feed and to expand it if they
   // are disabled.
-  PrefService* const pref_service = browser_->GetBrowserState()->GetPrefs();
+  PrefService* const pref_service = browser_->GetProfile()->GetPrefs();
   if (!pref_service->GetBoolean(prefs::kArticlesForYouEnabled))
     pref_service->SetBoolean(prefs::kArticlesForYouEnabled, true);
 
@@ -395,8 +395,8 @@
 
 raw_ptr<FollowService> FollowBrowserAgent::GetFollowService() {
   if (!service_) {
-    ChromeBrowserState* browser_state = browser_->GetBrowserState();
-    service_ = FollowServiceFactory::GetForBrowserState(browser_state);
+    ProfileIOS* profile = browser_->GetProfile();
+    service_ = FollowServiceFactory::GetForProfile(profile);
     DCHECK(service_);
   }
   return service_;
diff --git a/ios/chrome/browser/follow/model/follow_java_script_feature_unittest.mm b/ios/chrome/browser/follow/model/follow_java_script_feature_unittest.mm
index a4c1330..38063279 100644
--- a/ios/chrome/browser/follow/model/follow_java_script_feature_unittest.mm
+++ b/ios/chrome/browser/follow/model/follow_java_script_feature_unittest.mm
@@ -23,9 +23,9 @@
  public:
   FollowJavaScriptFeatureTest()
       : web_client_(std::make_unique<ChromeWebClient>()) {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
     web_state_->GetView();
     web_state_->SetKeepRenderProcessAlive(true);
@@ -37,7 +37,7 @@
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<web::WebState> web_state_;
 };
 
diff --git a/ios/chrome/browser/follow/model/follow_service_factory.h b/ios/chrome/browser/follow/model/follow_service_factory.h
index 823a6b3..a31f9bc3 100644
--- a/ios/chrome/browser/follow/model/follow_service_factory.h
+++ b/ios/chrome/browser/follow/model/follow_service_factory.h
@@ -15,9 +15,6 @@
 // ProfileIOS.
 class FollowServiceFactory : public BrowserStateKeyedServiceFactory {
  public:
-  // TODO(crbug.com/358301380): remove this method.
-  static FollowService* GetForBrowserState(ChromeBrowserState* browser_state);
-
   static FollowService* GetForProfile(ProfileIOS* profile);
   static FollowServiceFactory* GetInstance();
 
diff --git a/ios/chrome/browser/follow/model/follow_service_factory.mm b/ios/chrome/browser/follow/model/follow_service_factory.mm
index 7339b1d8..f61ebe1 100644
--- a/ios/chrome/browser/follow/model/follow_service_factory.mm
+++ b/ios/chrome/browser/follow/model/follow_service_factory.mm
@@ -15,11 +15,6 @@
 #import "ios/public/provider/chrome/browser/follow/follow_api.h"
 
 // static
-FollowService* FollowServiceFactory::GetForBrowserState(ProfileIOS* profile) {
-  return GetForProfile(profile);
-}
-
-// static
 FollowService* FollowServiceFactory::GetForProfile(ProfileIOS* profile) {
   return static_cast<FollowService*>(
       GetInstance()->GetServiceForBrowserState(profile, true));
diff --git a/ios/chrome/browser/follow/model/follow_tab_helper.mm b/ios/chrome/browser/follow/model/follow_tab_helper.mm
index a544496..39b4792a 100644
--- a/ios/chrome/browser/follow/model/follow_tab_helper.mm
+++ b/ios/chrome/browser/follow/model/follow_tab_helper.mm
@@ -113,10 +113,10 @@
     web::WebState* web_state,
     web::PageLoadCompletionStatus load_completion_status) {
   // Do not show follow IPH if the user is not signed in.
-  ChromeBrowserState* browserState =
-      ChromeBrowserState::FromBrowserState(web_state->GetBrowserState());
+  ProfileIOS* profile =
+      ProfileIOS::FromBrowserState(web_state->GetBrowserState());
   AuthenticationService* authenticationService =
-      AuthenticationServiceFactory::GetForBrowserState(browserState);
+      AuthenticationServiceFactory::GetForProfile(profile);
   if (!authenticationService || !authenticationService->GetPrimaryIdentity(
                                     signin::ConsentLevel::kSignin)) {
     return;
@@ -186,8 +186,8 @@
   }
 
   feature_engagement::Tracker* feature_engagement_tracker =
-      feature_engagement::TrackerFactory::GetForBrowserState(
-          ChromeBrowserState::FromBrowserState(web_state_->GetBrowserState()));
+      feature_engagement::TrackerFactory::GetForProfile(
+          ProfileIOS::FromBrowserState(web_state_->GetBrowserState()));
   // Do not show follow IPH if the feature engagement conditions are
   // not fulfilled. Ex. Do not show more than 5 Follow IPHs per week.
   if (!feature_engagement_tracker->WouldTriggerHelpUI(
@@ -196,8 +196,8 @@
   }
 
   NSURL* recommended_url =
-      FollowServiceFactory::GetForBrowserState(
-          ChromeBrowserState::FromBrowserState(web_state_->GetBrowserState()))
+      FollowServiceFactory::GetForProfile(
+          ProfileIOS::FromBrowserState(web_state_->GetBrowserState()))
           ->GetRecommendedSiteURL(web_page_urls);
 
   // Do not show follow IPH if:
@@ -212,8 +212,8 @@
 
   // Check if the site has enough visit count.
   history::HistoryService* history_service =
-      ios::HistoryServiceFactory::GetForBrowserState(
-          ChromeBrowserState::FromBrowserState(web_state_->GetBrowserState()),
+      ios::HistoryServiceFactory::GetForProfile(
+          ProfileIOS::FromBrowserState(web_state_->GetBrowserState()),
           ServiceAccessType::EXPLICIT_ACCESS);
 
   // Ignore any visits within the last hour so that we do not count
@@ -264,8 +264,8 @@
   // webFrame can be retrieved. Otherwise, leave the option disabled.
   if (web_page_urls && web_frame) {
     const bool followed =
-        FollowServiceFactory::GetForBrowserState(
-            ChromeBrowserState::FromBrowserState(web_state_->GetBrowserState()))
+        FollowServiceFactory::GetForProfile(
+            ProfileIOS::FromBrowserState(web_state_->GetBrowserState()))
             ->IsWebSiteFollowed(web_page_urls);
 
     std::string domain_name = web_frame->GetSecurityOrigin().host();
diff --git a/ios/chrome/browser/follow/model/follow_util.mm b/ios/chrome/browser/follow/model/follow_util.mm
index 0fca4622..f9ff03c9 100644
--- a/ios/chrome/browser/follow/model/follow_util.mm
+++ b/ios/chrome/browser/follow/model/follow_util.mm
@@ -38,29 +38,28 @@
     return FollowActionStateHidden;
   }
 
-  ChromeBrowserState* browserState =
-      ChromeBrowserState::FromBrowserState(webState->GetBrowserState());
+  ProfileIOS* profile =
+      ProfileIOS::FromBrowserState(webState->GetBrowserState());
 
   // Don't show follow option when feed is hidden due to DSE choice.
   if (ShouldHideFeedWithSearchChoice(
-          ios::TemplateURLServiceFactory::GetForBrowserState(browserState))) {
+          ios::TemplateURLServiceFactory::GetForProfile(profile))) {
     return FollowActionStateHidden;
   }
 
   // Don't show follow option when following feed is disabled by enterprise
   // policy.
-  if (!browserState->GetPrefs()->GetBoolean(
-          prefs::kNTPContentSuggestionsEnabled)) {
+  if (!profile->GetPrefs()->GetBoolean(prefs::kNTPContentSuggestionsEnabled)) {
     return FollowActionStateHidden;
   }
 
   // Don't show follow option if the user is not signed in.
   AuthenticationService* authenticationService =
-      AuthenticationServiceFactory::GetForBrowserState(browserState);
+      AuthenticationServiceFactory::GetForProfile(profile);
 
   // Hide the follow action when users are in incognito mode or when users have
   // not signed in.
-  if (browserState->IsOffTheRecord() || !authenticationService ||
+  if (profile->IsOffTheRecord() || !authenticationService ||
       !authenticationService->GetPrimaryIdentity(
           signin::ConsentLevel::kSignin)) {
     return FollowActionStateHidden;
@@ -71,7 +70,7 @@
   // 1. The page url is valid;
   // 2. Users are not on NTP or Chrome internal pages;
   if (URL.is_valid() && !web::GetWebClient()->IsAppSpecificURL(URL)) {
-    DCHECK(!browserState->IsOffTheRecord());
+    DCHECK(!profile->IsOffTheRecord());
     return FollowActionStateEnabled;
   }
   return FollowActionStateHidden;
diff --git a/ios/chrome/browser/follow/ui_bundled/first_follow_coordinator.mm b/ios/chrome/browser/follow/ui_bundled/first_follow_coordinator.mm
index 7ab2b5e9..13a1b37 100644
--- a/ios/chrome/browser/follow/ui_bundled/first_follow_coordinator.mm
+++ b/ios/chrome/browser/follow/ui_bundled/first_follow_coordinator.mm
@@ -82,8 +82,8 @@
 
   firstFollowViewController.actionHandler = self;
 
-  self.faviconLoader = IOSChromeFaviconLoaderFactory::GetForBrowserState(
-      self.browser->GetBrowserState());
+  self.faviconLoader =
+      IOSChromeFaviconLoaderFactory::GetForProfile(self.browser->GetProfile());
 
   firstFollowViewController.modalPresentationStyle =
       UIModalPresentationPageSheet;
diff --git a/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.cc b/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.cc
index 74252ae..7b86958 100644
--- a/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.cc
+++ b/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.cc
@@ -49,10 +49,8 @@
     web::BrowserState* context) const {
   DCHECK(!context->IsOffTheRecord());
 
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   return std::make_unique<instance_id::InstanceIDProfileService>(
-      IOSChromeGCMProfileServiceFactory::GetForBrowserState(browser_state)
-          ->driver(),
-      browser_state->IsOffTheRecord());
+      IOSChromeGCMProfileServiceFactory::GetForProfile(profile)->driver(),
+      profile->IsOffTheRecord());
 }
diff --git a/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.h b/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.h
index 3e80da1..f79cb47 100644
--- a/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.h
+++ b/ios/chrome/browser/gcm/model/instance_id/ios_chrome_instance_id_profile_service_factory.h
@@ -16,7 +16,7 @@
 }
 
 // Singleton that owns all InstanceIDProfileService and associates them with
-// ChromeBrowserState.
+// ProfileIOS.
 class IOSChromeInstanceIDProfileServiceFactory
     : public BrowserStateKeyedServiceFactory {
  public:
diff --git a/ios/chrome/browser/gcm/model/ios_chrome_gcm_profile_service_factory.mm b/ios/chrome/browser/gcm/model/ios_chrome_gcm_profile_service_factory.mm
index 64471c7..62fcd934 100644
--- a/ios/chrome/browser/gcm/model/ios_chrome_gcm_profile_service_factory.mm
+++ b/ios/chrome/browser/gcm/model/ios_chrome_gcm_profile_service_factory.mm
@@ -102,15 +102,14 @@
       base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   return std::make_unique<gcm::GCMProfileService>(
-      browser_state->GetPrefs(), browser_state->GetStatePath(),
+      profile->GetPrefs(), profile->GetStatePath(),
       base::BindRepeating(&RequestProxyResolvingSocketFactory, context),
-      browser_state->GetSharedURLLoaderFactory(),
+      profile->GetSharedURLLoaderFactory(),
       GetApplicationContext()->GetNetworkConnectionTracker(), ::GetChannel(),
       GetProductCategoryForSubtypes(),
-      IdentityManagerFactory::GetForProfile(browser_state),
+      IdentityManagerFactory::GetForProfile(profile),
       base::WrapUnique(new gcm::GCMClientFactory),
       web::GetUIThreadTaskRunner({}), web::GetIOThreadTaskRunner({}),
       blocking_task_runner);
diff --git a/ios/chrome/browser/google/model/google_logo_service.h b/ios/chrome/browser/google/model/google_logo_service.h
index a723de5..a1b7857 100644
--- a/ios/chrome/browser/google/model/google_logo_service.h
+++ b/ios/chrome/browser/google/model/google_logo_service.h
@@ -9,13 +9,13 @@
 #include "components/search_provider_logos/logo_service_impl.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
-// Provides the logo if a BrowserState's default search provider is Google.
+// Provides the logo if a Profile's default search provider is Google.
 // In addition to the GetLogo() method provided by the base implementation,
 // includes extra methods {Get,Set}CachedLogo() as an extra, nearer cache.
 //
 // Example usage:
 //   GoogleLogoService* logo_service =
-//       GoogleLogoServiceFactory::GetForBrowserState(browser_state);
+//       GoogleLogoServiceFactory::GetForProfile(profile);
 //   logo_service->GetLogo(...);
 //
 class GoogleLogoService : public search_provider_logos::LogoServiceImpl {
@@ -36,7 +36,7 @@
   // the logo immediately on page load. This caches the SkBitmap so we can
   // immediately load. This prevents showing the google logo on every new tab
   // page and immediately animating to the logo. Only one SkBitmap is cached per
-  // BrowserState.
+  // Profile.
   void SetCachedLogo(const search_provider_logos::Logo* logo);
   search_provider_logos::Logo GetCachedLogo();
 
diff --git a/ios/chrome/browser/google/model/google_logo_service_factory.mm b/ios/chrome/browser/google/model/google_logo_service_factory.mm
index 253c260..07bb5f8d 100644
--- a/ios/chrome/browser/google/model/google_logo_service_factory.mm
+++ b/ios/chrome/browser/google/model/google_logo_service_factory.mm
@@ -44,12 +44,11 @@
 
 std::unique_ptr<KeyedService> GoogleLogoServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   return std::make_unique<GoogleLogoService>(
-      ios::TemplateURLServiceFactory::GetForBrowserState(browser_state),
-      IdentityManagerFactory::GetForProfile(browser_state),
-      browser_state->GetSharedURLLoaderFactory());
+      ios::TemplateURLServiceFactory::GetForProfile(profile),
+      IdentityManagerFactory::GetForProfile(profile),
+      profile->GetSharedURLLoaderFactory());
 }
 
 web::BrowserState* GoogleLogoServiceFactory::GetBrowserStateToUse(
diff --git a/ios/chrome/browser/location_bar/ui_bundled/location_bar_steady_view.mm b/ios/chrome/browser/location_bar/ui_bundled/location_bar_steady_view.mm
index 493ed43a..0dc298f 100644
--- a/ios/chrome/browser/location_bar/ui_bundled/location_bar_steady_view.mm
+++ b/ios/chrome/browser/location_bar/ui_bundled/location_bar_steady_view.mm
@@ -484,7 +484,8 @@
 }
 
 - (void)setFullScreenCollapsedMode:(BOOL)isFullScreenCollapsed {
-  if (!self.badgesContainerView.badgeView) {
+  if (!self.badgesContainerView.badgeView ||
+      self.badgesContainerView.badgeView.hidden) {
     return;
   }
 
diff --git a/ios/chrome/browser/page_image/model/page_image_service_factory.mm b/ios/chrome/browser/page_image/model/page_image_service_factory.mm
index e373845..d0b3d45 100644
--- a/ios/chrome/browser/page_image/model/page_image_service_factory.mm
+++ b/ios/chrome/browser/page_image/model/page_image_service_factory.mm
@@ -19,9 +19,15 @@
 
 // static
 page_image_service::ImageService* PageImageServiceFactory::GetForBrowserState(
-    ChromeBrowserState* state) {
+    ProfileIOS* profile) {
+  return GetForProfile(profile);
+}
+
+// static
+page_image_service::ImageService* PageImageServiceFactory::GetForProfile(
+    ProfileIOS* profile) {
   return static_cast<page_image_service::ImageService*>(
-      GetInstance()->GetServiceForBrowserState(state, true));
+      GetInstance()->GetServiceForBrowserState(profile, true));
 }
 
 PageImageServiceFactory::PageImageServiceFactory()
@@ -44,17 +50,16 @@
 
 std::unique_ptr<KeyedService> PageImageServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
 
   TemplateURLService* template_url_service =
-      ios::TemplateURLServiceFactory::GetForBrowserState(browser_state);
+      ios::TemplateURLServiceFactory::GetForProfile(profile);
   RemoteSuggestionsService* remote_suggestions_service =
-      RemoteSuggestionsServiceFactory::GetForProfile(browser_state, true);
+      RemoteSuggestionsServiceFactory::GetForProfile(profile, true);
   OptimizationGuideService* optimization_guide_service =
-      OptimizationGuideServiceFactory::GetForProfile(browser_state);
+      OptimizationGuideServiceFactory::GetForProfile(profile);
   syncer::SyncService* sync_service =
-      SyncServiceFactory::GetForBrowserState(browser_state);
+      SyncServiceFactory::GetForProfile(profile);
   std::unique_ptr<AutocompleteSchemeClassifier> autocomplete_scheme_classifier =
       std::make_unique<AutocompleteSchemeClassifierImpl>();
 
diff --git a/ios/chrome/browser/page_info/about_this_site_service_factory.mm b/ios/chrome/browser/page_info/about_this_site_service_factory.mm
index 8c7940c..7179249c 100644
--- a/ios/chrome/browser/page_info/about_this_site_service_factory.mm
+++ b/ios/chrome/browser/page_info/about_this_site_service_factory.mm
@@ -58,7 +58,7 @@
   }
 
   auto* template_service =
-      ios::TemplateURLServiceFactory::GetForBrowserState(profile);
+      ios::TemplateURLServiceFactory::GetForProfile(profile);
   // TemplateURLService may be null during testing.
   if (!template_service) {
     return nullptr;
diff --git a/ios/chrome/browser/page_info/about_this_site_tab_helper_unittest.mm b/ios/chrome/browser/page_info/about_this_site_tab_helper_unittest.mm
index d03b2e8..8b2eb06 100644
--- a/ios/chrome/browser/page_info/about_this_site_tab_helper_unittest.mm
+++ b/ios/chrome/browser/page_info/about_this_site_tab_helper_unittest.mm
@@ -85,14 +85,14 @@
   // Initializes the OptimizationGuide service as well as the
   // `AboutThisSiteTabHelper` to be tested and the test browser and web state.
   void InitService() {
-    TestChromeBrowserState::Builder builder;
+    TestProfileIOS::Builder builder;
     builder.AddTestingFactory(
         OptimizationGuideServiceFactory::GetInstance(),
         OptimizationGuideServiceFactory::GetDefaultFactory());
-    browser_state_ = std::move(builder).Build();
+    profile_ = std::move(builder).Build();
     optimization_guide_service_ =
-        OptimizationGuideServiceFactory::GetForProfile(browser_state_.get());
-    web_state_.SetBrowserState(browser_state_.get());
+        OptimizationGuideServiceFactory::GetForProfile(profile_.get());
+    web_state_.SetBrowserState(profile_.get());
 
     AboutThisSiteTabHelper::CreateForWebState(&web_state_,
                                               optimization_guide_service_);
@@ -101,16 +101,16 @@
   // Initializes the OptimizationGuide service as well as the
   // `AboutThisSiteTabHelper`, the test browser and web state for an off the
   // record session. Should only be called after `InitService()` so the
-  // `browser_state_` has been initialized.
+  // `profile_` has been initialized.
   void InitOTRService() {
-    ChromeBrowserState* otr_browser_state =
-        browser_state_->CreateOffTheRecordBrowserStateWithTestingFactories(
-            {TestChromeBrowserState::TestingFactory{
+    ProfileIOS* otr_profile =
+        profile_->CreateOffTheRecordProfileWithTestingFactories(
+            {TestProfileIOS::TestingFactory{
                 OptimizationGuideServiceFactory::GetInstance(),
                 OptimizationGuideServiceFactory::GetDefaultFactory()}});
     optimization_guide_service_otr_ =
-        OptimizationGuideServiceFactory::GetForProfile(otr_browser_state);
-    web_state_otr_.SetBrowserState(otr_browser_state);
+        OptimizationGuideServiceFactory::GetForProfile(otr_profile);
+    web_state_otr_.SetBrowserState(otr_profile);
 
     AboutThisSiteTabHelper::CreateForWebState(&web_state_otr_,
                                               optimization_guide_service_otr_);
@@ -156,7 +156,7 @@
   web::WebTaskEnvironment task_environment_;
   base::test::ScopedFeatureList scoped_feature_list_;
   base::HistogramTester histogram_tester_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   web::FakeWebState web_state_;
   web::FakeWebState web_state_otr_;
   web::FakeNavigationContext context_;
diff --git a/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm b/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm
index 3632303..48506fb 100644
--- a/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm
+++ b/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm
@@ -25,7 +25,7 @@
       parcel_list_(parcel_list),
       application_commands_handler_(application_commands_handler),
       parcel_tracking_commands_handler_(parcel_tracking_commands_handler) {
-  shopping_service_ = commerce::ShoppingServiceFactory::GetForBrowserState(
+  shopping_service_ = commerce::ShoppingServiceFactory::GetForProfile(
       ProfileIOS::FromBrowserState(web_state->GetBrowserState()));
 }
 
diff --git a/ios/chrome/browser/parcel_tracking/parcel_tracking_util_unittest.mm b/ios/chrome/browser/parcel_tracking/parcel_tracking_util_unittest.mm
index a6bd9c5..4f9d335 100644
--- a/ios/chrome/browser/parcel_tracking/parcel_tracking_util_unittest.mm
+++ b/ios/chrome/browser/parcel_tracking/parcel_tracking_util_unittest.mm
@@ -27,20 +27,19 @@
 class ParcelTrackingUtilTest : public PlatformTest {
  protected:
   void SetUp() override {
-    browser_state_ = BuildChromeBrowserState();
-    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
-        browser_state_.get(),
-        std::make_unique<FakeAuthenticationServiceDelegate>());
+    profile_ = BuildProfile();
+    AuthenticationServiceFactory::CreateAndInitializeForProfile(
+        profile_.get(), std::make_unique<FakeAuthenticationServiceDelegate>());
     auth_service_ = static_cast<AuthenticationService*>(
-        AuthenticationServiceFactory::GetInstance()->GetForBrowserState(
-            browser_state_.get()));
+        AuthenticationServiceFactory::GetInstance()->GetForProfile(
+            profile_.get()));
     shopping_service_ = std::make_unique<commerce::MockShoppingService>();
     shopping_service_->SetIsParcelTrackingEligible(true);
     fake_identity_ = [FakeSystemIdentity fakeIdentity1];
   }
 
-  std::unique_ptr<TestChromeBrowserState> BuildChromeBrowserState() {
-    TestChromeBrowserState::Builder builder;
+  std::unique_ptr<TestProfileIOS> BuildProfile() {
+    TestProfileIOS::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
         AuthenticationServiceFactory::GetDefaultFactory());
@@ -62,7 +61,7 @@
   }
 
   void SetPromptDisplayedStatus(bool displayed) {
-    browser_state_->GetPrefs()->SetBoolean(
+    profile_->GetPrefs()->SetBoolean(
         prefs::kIosParcelTrackingOptInPromptDisplayLimitMet, displayed);
   }
 
@@ -70,7 +69,7 @@
   web::WebTaskEnvironment task_environment_;
   std::unique_ptr<commerce::MockShoppingService> shopping_service_;
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   raw_ptr<AuthenticationService> auth_service_ = nullptr;
   FakeSystemIdentity* fake_identity_ = nullptr;
 };
@@ -82,8 +81,8 @@
   SetPromptDisplayedStatus(false);
   IOSChromeScopedTestingVariationsService scoped_variations_service;
   scoped_variations_service.Get()->OverrideStoredPermanentCountry("us");
-  EXPECT_TRUE(IsUserEligibleParcelTrackingOptInPrompt(
-      browser_state_->GetPrefs(), shopping_service_.get()));
+  EXPECT_TRUE(IsUserEligibleParcelTrackingOptInPrompt(profile_->GetPrefs(),
+                                                      shopping_service_.get()));
 }
 
 // Tests that IsUserEligibleParcelTrackingOptInPrompt returns false when the
@@ -95,7 +94,7 @@
   IOSChromeScopedTestingVariationsService scoped_variations_service;
   scoped_variations_service.Get()->OverrideStoredPermanentCountry("us");
   EXPECT_FALSE(IsUserEligibleParcelTrackingOptInPrompt(
-      browser_state_->GetPrefs(), shopping_service_.get()));
+      profile_->GetPrefs(), shopping_service_.get()));
 }
 
 // Tests that IsUserEligibleParcelTrackingOptInPrompt returns false when the
@@ -106,7 +105,7 @@
   IOSChromeScopedTestingVariationsService scoped_variations_service;
   scoped_variations_service.Get()->OverrideStoredPermanentCountry("us");
   EXPECT_FALSE(IsUserEligibleParcelTrackingOptInPrompt(
-      browser_state_->GetPrefs(), shopping_service_.get()));
+      profile_->GetPrefs(), shopping_service_.get()));
 }
 
 // Tests that IsUserEligibleParcelTrackingOptInPrompt returns false when the
@@ -115,5 +114,5 @@
   SignIn();
   SetPromptDisplayedStatus(true);
   EXPECT_FALSE(IsUserEligibleParcelTrackingOptInPrompt(
-      browser_state_->GetPrefs(), shopping_service_.get()));
+      profile_->GetPrefs(), shopping_service_.get()));
 }
diff --git a/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator.mm b/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator.mm
index 4c42fc9..e25de0ce 100644
--- a/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator.mm
+++ b/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator.mm
@@ -37,8 +37,8 @@
                                                parcels {
   self = [super initWithBaseViewController:viewController browser:browser];
   if (self) {
-    _shoppingService = commerce::ShoppingServiceFactory::GetForBrowserState(
-        browser->GetBrowserState());
+    _shoppingService =
+        commerce::ShoppingServiceFactory::GetForProfile(browser->GetProfile());
     _parcels = parcels;
   }
   return self;
@@ -73,7 +73,7 @@
 
 - (void)alwaysTrackTapped {
   [self dismissPrompt];
-  PrefService* prefs = self.browser->GetBrowserState()->GetPrefs();
+  PrefService* prefs = self.browser->GetProfile()->GetPrefs();
   prefs->SetBoolean(prefs::kIosParcelTrackingOptInPromptDisplayLimitMet, true);
   prefs->SetInteger(
       prefs::kIosParcelTrackingOptInStatus,
@@ -86,7 +86,7 @@
 
 - (void)askToTrackTapped {
   [self dismissPrompt];
-  PrefService* prefs = self.browser->GetBrowserState()->GetPrefs();
+  PrefService* prefs = self.browser->GetProfile()->GetPrefs();
   prefs->SetBoolean(prefs::kIosParcelTrackingOptInPromptDisplayLimitMet, true);
   prefs->SetInteger(
       prefs::kIosParcelTrackingOptInStatus,
@@ -99,7 +99,7 @@
 
 - (void)noThanksTapped {
   [self dismissPrompt];
-  PrefService* prefs = self.browser->GetBrowserState()->GetPrefs();
+  PrefService* prefs = self.browser->GetProfile()->GetPrefs();
   prefs->SetBoolean(prefs::kIosParcelTrackingOptInPromptDisplayLimitMet, true);
   prefs->SetInteger(
       prefs::kIosParcelTrackingOptInStatus,
@@ -111,7 +111,7 @@
 
 - (void)parcelTrackingSettingsPageLinkTapped {
   [self dismissPrompt];
-  self.browser->GetBrowserState()->GetPrefs()->SetBoolean(
+  self.browser->GetProfile()->GetPrefs()->SetBoolean(
       prefs::kIosParcelTrackingOptInPromptDisplayLimitMet, true);
   id<SettingsCommands> settingsCommandHandler = HandlerForProtocol(
       self.browser->GetCommandDispatcher(), SettingsCommands);
@@ -126,7 +126,7 @@
   // If user has swiped down on the prompt before as well, set
   // kIosParcelTrackingOptInPromptDisplayLimitMet to true to avoid showing the
   // prompt again.
-  PrefService* prefs = self.browser->GetBrowserState()->GetPrefs();
+  PrefService* prefs = self.browser->GetProfile()->GetPrefs();
   if (prefs->GetBoolean(prefs::kIosParcelTrackingOptInPromptSwipedDown)) {
     prefs->SetBoolean(prefs::kIosParcelTrackingOptInPromptDisplayLimitMet,
                       true);
diff --git a/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator_unittest.mm b/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator_unittest.mm
index 2f73189f..1810cba 100644
--- a/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator_unittest.mm
+++ b/ios/chrome/browser/parcel_tracking/ui_bundled/parcel_tracking_opt_in_coordinator_unittest.mm
@@ -20,8 +20,8 @@
 class ParcelTrackingOptInCoordinatorTest : public PlatformTest {
  protected:
   void SetUp() override {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+    profile_ = TestProfileIOS::Builder().Build();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
     NSArray<CustomTextCheckingResult*>* array = [[NSArray alloc] init];
     coordinator_ = [[ParcelTrackingOptInCoordinator alloc]
         initWithBaseViewController:[[UIViewController alloc] init]
@@ -31,7 +31,7 @@
 
  protected:
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<TestBrowser> browser_;
   ParcelTrackingOptInCoordinator* coordinator_;
 };
@@ -41,9 +41,9 @@
 TEST_F(ParcelTrackingOptInCoordinatorTest, AlwaysTrack) {
   base::HistogramTester histogram_tester;
   [coordinator_ alwaysTrackTapped];
-  EXPECT_EQ(static_cast<int>(IOSParcelTrackingOptInStatus::kAlwaysTrack),
-            browser_state_->GetPrefs()->GetInteger(
-                prefs::kIosParcelTrackingOptInStatus));
+  EXPECT_EQ(
+      static_cast<int>(IOSParcelTrackingOptInStatus::kAlwaysTrack),
+      profile_->GetPrefs()->GetInteger(prefs::kIosParcelTrackingOptInStatus));
   histogram_tester.ExpectUniqueSample(
       parcel_tracking::kOptInPromptActionHistogramName,
       parcel_tracking::OptInPromptActionType::kAlwaysTrack, 1);
@@ -54,9 +54,9 @@
 TEST_F(ParcelTrackingOptInCoordinatorTest, NeverTrack) {
   base::HistogramTester histogram_tester;
   [coordinator_ noThanksTapped];
-  EXPECT_EQ(static_cast<int>(IOSParcelTrackingOptInStatus::kNeverTrack),
-            browser_state_->GetPrefs()->GetInteger(
-                prefs::kIosParcelTrackingOptInStatus));
+  EXPECT_EQ(
+      static_cast<int>(IOSParcelTrackingOptInStatus::kNeverTrack),
+      profile_->GetPrefs()->GetInteger(prefs::kIosParcelTrackingOptInStatus));
   histogram_tester.ExpectUniqueSample(
       parcel_tracking::kOptInPromptActionHistogramName,
       parcel_tracking::OptInPromptActionType::kNoThanks, 1);
@@ -67,9 +67,9 @@
 TEST_F(ParcelTrackingOptInCoordinatorTest, AskToTrack) {
   base::HistogramTester histogram_tester;
   [coordinator_ askToTrackTapped];
-  EXPECT_EQ(static_cast<int>(IOSParcelTrackingOptInStatus::kAskToTrack),
-            browser_state_->GetPrefs()->GetInteger(
-                prefs::kIosParcelTrackingOptInStatus));
+  EXPECT_EQ(
+      static_cast<int>(IOSParcelTrackingOptInStatus::kAskToTrack),
+      profile_->GetPrefs()->GetInteger(prefs::kIosParcelTrackingOptInStatus));
   histogram_tester.ExpectUniqueSample(
       parcel_tracking::kOptInPromptActionHistogramName,
       parcel_tracking::OptInPromptActionType::kAskEveryTime, 1);
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_account_password_store_factory.mm b/ios/chrome/browser/passwords/model/ios_chrome_account_password_store_factory.mm
index 59b23999..0683657 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_account_password_store_factory.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_account_password_store_factory.mm
@@ -42,7 +42,7 @@
     ServiceAccessType access_type) {
   // `profile` gets always redirected to a non-Incognito one below, so
   // Incognito & IMPLICIT_ACCESS means that incognito browsing session would
-  // result in traces in the normal BrowserState without the user knowing it.
+  // result in traces in the normal Profile without the user knowing it.
   if (access_type == ServiceAccessType::IMPLICIT_ACCESS &&
       profile->IsOffTheRecord()) {
     return nullptr;
@@ -73,12 +73,11 @@
 scoped_refptr<RefcountedKeyedService>
 IOSChromeAccountPasswordStoreFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
 
   std::unique_ptr<password_manager::LoginDatabase> login_db(
       password_manager::CreateLoginDatabaseForAccountStorage(
-          browser_state->GetStatePath(), browser_state->GetPrefs()));
+          profile->GetStatePath(), profile->GetPrefs()));
 
   os_crypt_async::OSCryptAsync* os_crypt_async =
       base::FeatureList::IsEnabled(
@@ -90,20 +89,19 @@
       std::make_unique<password_manager::PasswordStoreBuiltInBackend>(
           std::move(login_db),
           syncer::WipeModelUponSyncDisabledBehavior::kAlways,
-          browser_state->GetPrefs(), os_crypt_async));
+          profile->GetPrefs(), os_crypt_async));
 
   AffiliationService* affiliation_service =
-      IOSChromeAffiliationServiceFactory::GetForBrowserState(browser_state);
+      IOSChromeAffiliationServiceFactory::GetForProfile(profile);
   std::unique_ptr<AffiliatedMatchHelper> affiliated_match_helper =
       std::make_unique<AffiliatedMatchHelper>(affiliation_service);
 
-  password_store->Init(browser_state->GetPrefs(),
-                       std::move(affiliated_match_helper));
+  password_store->Init(profile->GetPrefs(), std::move(affiliated_match_helper));
 
   password_manager::SanitizeAndMigrateCredentials(
-      CredentialsCleanerRunnerFactory::GetForBrowserState(browser_state),
-      password_store, password_manager::kAccountStore,
-      browser_state->GetPrefs(), base::Minutes(1), base::NullCallback());
+      CredentialsCleanerRunnerFactory::GetForProfile(profile), password_store,
+      password_manager::kAccountStore, profile->GetPrefs(), base::Minutes(1),
+      base::NullCallback());
 
   std::unique_ptr<password_manager::PasswordAffiliationSourceAdapter>
       password_affiliation_adapter = std::make_unique<
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_bulk_leak_check_service_factory.cc b/ios/chrome/browser/passwords/model/ios_chrome_bulk_leak_check_service_factory.cc
index 99983a2e..106b406 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_bulk_leak_check_service_factory.cc
+++ b/ios/chrome/browser/passwords/model/ios_chrome_bulk_leak_check_service_factory.cc
@@ -52,8 +52,7 @@
 std::unique_ptr<KeyedService>
 IOSChromeBulkLeakCheckServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   std::unique_ptr<password_manager::BulkLeakCheckServiceInterface>
       test_bulk_leak_check_service =
           tests_hook::GetOverriddenBulkLeakCheckService();
@@ -61,6 +60,6 @@
     return test_bulk_leak_check_service;
   }
   return std::make_unique<password_manager::BulkLeakCheckService>(
-      IdentityManagerFactory::GetForProfile(browser_state),
+      IdentityManagerFactory::GetForProfile(profile),
       context->GetSharedURLLoaderFactory());
 }
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_factory.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_factory.mm
index 81e5bd0..75a3eb9 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_factory.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_factory.mm
@@ -55,16 +55,15 @@
 scoped_refptr<RefcountedKeyedService>
 IOSChromePasswordCheckManagerFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   return base::MakeRefCounted<IOSChromePasswordCheckManager>(
-      browser_state->GetPrefs(),
-      IOSChromeBulkLeakCheckServiceFactory::GetForBrowserState(browser_state),
+      profile->GetPrefs(),
+      IOSChromeBulkLeakCheckServiceFactory::GetForProfile(profile),
       std::make_unique<password_manager::SavedPasswordsPresenter>(
-          IOSChromeAffiliationServiceFactory::GetForBrowserState(browser_state),
-          IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-              browser_state, ServiceAccessType::EXPLICIT_ACCESS),
-          IOSChromeAccountPasswordStoreFactory::GetForBrowserState(
-              browser_state, ServiceAccessType::EXPLICIT_ACCESS),
-          IOSPasskeyModelFactory::GetForBrowserState(browser_state)));
+          IOSChromeAffiliationServiceFactory::GetForProfile(profile),
+          IOSChromeProfilePasswordStoreFactory::GetForProfile(
+              profile, ServiceAccessType::EXPLICIT_ACCESS),
+          IOSChromeAccountPasswordStoreFactory::GetForProfile(
+              profile, ServiceAccessType::EXPLICIT_ACCESS),
+          IOSPasskeyModelFactory::GetForProfile(profile)));
 }
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_unittest.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_unittest.mm
index c0805d4..4ae176c 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_unittest.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_unittest.mm
@@ -118,7 +118,7 @@
 class IOSChromePasswordCheckManagerTest : public PlatformTest {
  public:
   IOSChromePasswordCheckManagerTest() {
-    TestChromeBrowserState::Builder builder;
+    TestProfileIOS::Builder builder;
     builder.AddTestingFactory(
         IOSChromeBulkLeakCheckServiceFactory::GetInstance(),
         base::BindRepeating(&MakeMockPasswordCheckManagerObserver));
@@ -134,24 +134,23 @@
               std::make_unique<affiliations::FakeAffiliationService>());
         })));
 
-    browser_state_ = std::move(builder).Build();
+    profile_ = std::move(builder).Build();
     bulk_leak_check_service_ = static_cast<MockBulkLeakCheckService*>(
-        IOSChromeBulkLeakCheckServiceFactory::GetForBrowserState(
-            browser_state_.get()));
+        IOSChromeBulkLeakCheckServiceFactory::GetForProfile(profile_.get()));
     store_ =
         base::WrapRefCounted(static_cast<password_manager::TestPasswordStore*>(
-            IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-                browser_state_.get(), ServiceAccessType::EXPLICIT_ACCESS)
+            IOSChromeProfilePasswordStoreFactory::GetForProfile(
+                profile_.get(), ServiceAccessType::EXPLICIT_ACCESS)
                 .get()));
-    manager_ = IOSChromePasswordCheckManagerFactory::GetForBrowserState(
-        browser_state_.get());
+    manager_ =
+        IOSChromePasswordCheckManagerFactory::GetForProfile(profile_.get());
   }
 
   void RunUntilIdle() { task_env_.RunUntilIdle(); }
 
   void FastForwardBy(base::TimeDelta time) { task_env_.FastForwardBy(time); }
 
-  ChromeBrowserState* browser_state() { return browser_state_.get(); }
+  ProfileIOS* profile() { return profile_.get(); }
   TestPasswordStore& store() { return *store_; }
   MockBulkLeakCheckService* service() { return bulk_leak_check_service_; }
   IOSChromePasswordCheckManager& manager() { return *manager_; }
@@ -159,7 +158,7 @@
  private:
   web::WebTaskEnvironment task_env_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
-  std::unique_ptr<ChromeBrowserState> browser_state_;
+  std::unique_ptr<ProfileIOS> profile_;
   raw_ptr<MockBulkLeakCheckService> bulk_leak_check_service_;
   scoped_refptr<TestPasswordStore> store_;
   scoped_refptr<IOSChromePasswordCheckManager> manager_;
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
index eccc627c..9a70a35 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
@@ -45,7 +45,7 @@
 
 @protocol IOSChromePasswordManagerClientBridge <PasswordManagerClientBridge>
 
-@property(readonly, nonatomic) ChromeBrowserState* browserState;
+@property(readonly, nonatomic) ProfileIOS* profile;
 
 // Shows UI to notify the user about auto sign in.
 - (void)showAutosigninNotification:
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
index 91a6a98..4ef127eb 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
@@ -60,14 +60,13 @@
       password_feature_manager_(
           GetPrefs(),
           GetLocalStatePrefs(),
-          SyncServiceFactory::GetForProfileIfExists(bridge_.browserState)),
+          SyncServiceFactory::GetForProfileIfExists(bridge_.profile)),
       credentials_filter_(this),
       helper_(this) {
   saving_passwords_enabled_.Init(
       password_manager::prefs::kCredentialsEnableService, GetPrefs());
   log_manager_ = autofill::LogManager::Create(
-      ios::PasswordManagerLogRouterFactory::GetForBrowserState(
-          bridge_.browserState),
+      ios::PasswordManagerLogRouterFactory::GetForProfile(bridge_.profile),
       base::RepeatingClosure());
 }
 
@@ -138,7 +137,7 @@
 }
 
 bool IOSChromePasswordManagerClient::IsOffTheRecord() const {
-  return (bridge_.browserState)->IsOffTheRecord();
+  return (bridge_.profile)->IsOffTheRecord();
 }
 
 const password_manager::PasswordManager*
@@ -152,7 +151,7 @@
 }
 
 PrefService* IOSChromePasswordManagerClient::GetPrefs() const {
-  return (bridge_.browserState)->GetPrefs();
+  return (bridge_.profile)->GetPrefs();
 }
 
 PrefService* IOSChromePasswordManagerClient::GetLocalStatePrefs() const {
@@ -161,7 +160,7 @@
 
 const syncer::SyncService* IOSChromePasswordManagerClient::GetSyncService()
     const {
-  return SyncServiceFactory::GetForProfileIfExists(bridge_.browserState);
+  return SyncServiceFactory::GetForProfileIfExists(bridge_.profile);
 }
 
 affiliations::AffiliationService*
@@ -172,22 +171,21 @@
 
 PasswordStoreInterface*
 IOSChromePasswordManagerClient::GetProfilePasswordStore() const {
-  return IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-             bridge_.browserState, ServiceAccessType::EXPLICIT_ACCESS)
+  return IOSChromeProfilePasswordStoreFactory::GetForProfile(
+             bridge_.profile, ServiceAccessType::EXPLICIT_ACCESS)
       .get();
 }
 
 PasswordStoreInterface*
 IOSChromePasswordManagerClient::GetAccountPasswordStore() const {
-  return IOSChromeAccountPasswordStoreFactory::GetForBrowserState(
-             bridge_.browserState, ServiceAccessType::EXPLICIT_ACCESS)
+  return IOSChromeAccountPasswordStoreFactory::GetForProfile(
+             bridge_.profile, ServiceAccessType::EXPLICIT_ACCESS)
       .get();
 }
 
 password_manager::PasswordReuseManager*
 IOSChromePasswordManagerClient::GetPasswordReuseManager() const {
-  return IOSChromePasswordReuseManagerFactory::GetForBrowserState(
-      bridge_.browserState);
+  return IOSChromePasswordReuseManagerFactory::GetForProfile(bridge_.profile);
 }
 
 void IOSChromePasswordManagerClient::NotifyUserAutoSignin(
@@ -284,18 +282,18 @@
 }
 
 signin::IdentityManager* IOSChromePasswordManagerClient::GetIdentityManager() {
-  return IdentityManagerFactory::GetForProfile(bridge_.browserState);
+  return IdentityManagerFactory::GetForProfile(bridge_.profile);
 }
 
 scoped_refptr<network::SharedURLLoaderFactory>
 IOSChromePasswordManagerClient::GetURLLoaderFactory() {
-  return (bridge_.browserState)->GetSharedURLLoaderFactory();
+  return (bridge_.profile)->GetSharedURLLoaderFactory();
 }
 
 password_manager::PasswordRequirementsService*
 IOSChromePasswordManagerClient::GetPasswordRequirementsService() {
-  return IOSPasswordRequirementsServiceFactory::GetForBrowserState(
-      bridge_.browserState, ServiceAccessType::EXPLICIT_ACCESS);
+  return IOSPasswordRequirementsServiceFactory::GetForProfile(
+      bridge_.profile, ServiceAccessType::EXPLICIT_ACCESS);
 }
 
 void IOSChromePasswordManagerClient::UpdateFormManagers() {
@@ -313,6 +311,5 @@
 
 safe_browsing::PasswordProtectionService*
 IOSChromePasswordManagerClient::GetPasswordProtectionService() const {
-  return ChromePasswordProtectionServiceFactory::GetForBrowserState(
-      bridge_.browserState);
+  return ChromePasswordProtectionServiceFactory::GetForProfile(bridge_.profile);
 }
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client_unittest.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client_unittest.mm
index 873f7ab..86dc695 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client_unittest.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client_unittest.mm
@@ -46,10 +46,10 @@
       : web_client_(std::make_unique<ChromeWebClient>()),
         store_(new testing::NiceMock<
                password_manager::MockPasswordStoreInterface>()) {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+    profile_ = TestProfileIOS::Builder().Build();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
     web_state_->GetView();
     web_state_->SetKeepRenderProcessAlive(true);
@@ -77,7 +77,7 @@
 
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<Browser> browser_;
   std::unique_ptr<web::WebState> web_state_;
 
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_receiver_service_factory.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_receiver_service_factory.mm
index dd381fb..6c83bd2 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_receiver_service_factory.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_receiver_service_factory.mm
@@ -60,8 +60,7 @@
 std::unique_ptr<KeyedService>
 IOSChromePasswordReceiverServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   // Since Password Manager doesn't work for non-standard profiles, the
   // PasswordReceiverService also shouldn't be created for such profiles.
   CHECK(!context->IsOffTheRecord());
@@ -73,15 +72,14 @@
   auto sync_bridge = std::make_unique<
       password_manager::IncomingPasswordSharingInvitationSyncBridge>(
       std::move(change_processor),
-      DataTypeStoreServiceFactory::GetForProfile(browser_state)
-          ->GetStoreFactory());
+      DataTypeStoreServiceFactory::GetForProfile(profile)->GetStoreFactory());
 
   return std::make_unique<password_manager::PasswordReceiverServiceImpl>(
-      browser_state->GetPrefs(), std::move(sync_bridge),
-      IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-          browser_state, ServiceAccessType::EXPLICIT_ACCESS)
+      profile->GetPrefs(), std::move(sync_bridge),
+      IOSChromeProfilePasswordStoreFactory::GetForProfile(
+          profile, ServiceAccessType::EXPLICIT_ACCESS)
           .get(),
-      IOSChromeAccountPasswordStoreFactory::GetForBrowserState(
-          browser_state, ServiceAccessType::EXPLICIT_ACCESS)
+      IOSChromeAccountPasswordStoreFactory::GetForProfile(
+          profile, ServiceAccessType::EXPLICIT_ACCESS)
           .get());
 }
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.h b/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.h
index 939bdc78..ed46c9f 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.h
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.h
@@ -32,7 +32,7 @@
 @protocol IOSChromePasswordReuseDetectionManagerClientBridge <
     PasswordReuseDetectionManagerClientBridge>
 
-@property(readonly, nonatomic) ChromeBrowserState* browserState;
+@property(readonly, nonatomic) ProfileIOS* profile;
 
 @end
 
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.mm
index ba5115a..811a49c8 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_detection_manager_client.mm
@@ -34,8 +34,7 @@
         id<IOSChromePasswordReuseDetectionManagerClientBridge> bridge)
     : bridge_(bridge), password_reuse_detection_manager_(this) {
   log_manager_ = autofill::LogManager::Create(
-      ios::PasswordManagerLogRouterFactory::GetForBrowserState(
-          bridge_.browserState),
+      ios::PasswordManagerLogRouterFactory::GetForProfile(bridge_.profile),
       base::RepeatingClosure());
 
   if (IsPasswordReuseDetectionEnabled()) {
@@ -50,8 +49,7 @@
 
 password_manager::PasswordReuseManager*
 IOSChromePasswordReuseDetectionManagerClient::GetPasswordReuseManager() const {
-  return IOSChromePasswordReuseManagerFactory::GetForBrowserState(
-      bridge_.browserState);
+  return IOSChromePasswordReuseManagerFactory::GetForProfile(bridge_.profile);
 }
 
 const GURL& IOSChromePasswordReuseDetectionManagerClient::GetLastCommittedURL()
@@ -67,21 +65,20 @@
 safe_browsing::PasswordProtectionService*
 IOSChromePasswordReuseDetectionManagerClient::GetPasswordProtectionService()
     const {
-  return ChromePasswordProtectionServiceFactory::GetForBrowserState(
-      bridge_.browserState);
+  return ChromePasswordProtectionServiceFactory::GetForProfile(bridge_.profile);
 }
 
 bool IOSChromePasswordReuseDetectionManagerClient::IsHistorySyncAccountEmail(
     const std::string& username) {
   // Password reuse detection is tied to history sync.
   syncer::SyncService* sync_service =
-      SyncServiceFactory::GetForBrowserState(bridge_.browserState);
+      SyncServiceFactory::GetForProfile(bridge_.profile);
   if (!sync_service || !sync_service->GetPreferredDataTypes().Has(
                            syncer::HISTORY_DELETE_DIRECTIVES)) {
     return false;
   }
   return password_manager::sync_util::IsSyncAccountEmail(
-      username, IdentityManagerFactory::GetForProfile(bridge_.browserState),
+      username, IdentityManagerFactory::GetForProfile(bridge_.profile),
       signin::ConsentLevel::kSignin);
 }
 
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_manager_factory.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_manager_factory.mm
index 1375aee..f27ec25 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_manager_factory.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_reuse_manager_factory.mm
@@ -54,18 +54,17 @@
     web::BrowserState* context) const {
   DCHECK(base::FeatureList::IsEnabled(
       password_manager::features::kPasswordReuseDetectionEnabled));
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(context);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(context);
   std::unique_ptr<password_manager::PasswordReuseManager> reuse_manager =
       std::make_unique<password_manager::PasswordReuseManagerImpl>();
 
   reuse_manager->Init(
-      browser_state->GetPrefs(), GetApplicationContext()->GetLocalState(),
-      IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-          browser_state, ServiceAccessType::EXPLICIT_ACCESS)
+      profile->GetPrefs(), GetApplicationContext()->GetLocalState(),
+      IOSChromeProfilePasswordStoreFactory::GetForProfile(
+          profile, ServiceAccessType::EXPLICIT_ACCESS)
           .get(),
-      IOSChromeAccountPasswordStoreFactory::GetForBrowserState(
-          browser_state, ServiceAccessType::EXPLICIT_ACCESS)
+      IOSChromeAccountPasswordStoreFactory::GetForProfile(
+          profile, ServiceAccessType::EXPLICIT_ACCESS)
           .get(),
       std::make_unique<password_manager::PasswordReuseDetectorImpl>());
   return reuse_manager;
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm b/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm
index f832095..9e5e1c8 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm
@@ -115,7 +115,7 @@
               profile->GetPrefs(), os_crypt_async));
 
   AffiliationService* affiliation_service =
-      IOSChromeAffiliationServiceFactory::GetForBrowserState(profile);
+      IOSChromeAffiliationServiceFactory::GetForProfile(profile);
   std::unique_ptr<AffiliatedMatchHelper> affiliated_match_helper =
       std::make_unique<AffiliatedMatchHelper>(affiliation_service);
   std::unique_ptr<password_manager::PasswordAffiliationSourceAdapter>
@@ -125,7 +125,7 @@
   store->Init(profile->GetPrefs(), std::move(affiliated_match_helper));
 
   password_manager::SanitizeAndMigrateCredentials(
-      CredentialsCleanerRunnerFactory::GetForBrowserState(profile), store,
+      CredentialsCleanerRunnerFactory::GetForProfile(profile), store,
       password_manager::kProfileStore, profile->GetPrefs(), base::Seconds(60),
       base::NullCallback());
   if (!profile->IsOffTheRecord()) {
diff --git a/ios/chrome/browser/passwords/model/ios_password_manager_settings_service_factory.mm b/ios/chrome/browser/passwords/model/ios_password_manager_settings_service_factory.mm
index 96937db3..6c8a0daf 100644
--- a/ios/chrome/browser/passwords/model/ios_password_manager_settings_service_factory.mm
+++ b/ios/chrome/browser/passwords/model/ios_password_manager_settings_service_factory.mm
@@ -43,8 +43,7 @@
 std::unique_ptr<KeyedService>
 IOSPasswordManagerSettingsServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* browser_state) const {
-  ChromeBrowserState* chrome_browser_state =
-      ChromeBrowserState::FromBrowserState(browser_state);
+  ProfileIOS* profile = ProfileIOS::FromBrowserState(browser_state);
   return std::make_unique<password_manager::PasswordManagerSettingsServiceImpl>(
-      chrome_browser_state->GetPrefs());
+      profile->GetPrefs());
 }
diff --git a/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.cc b/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.cc
index 7c406691..72458ed 100644
--- a/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.cc
+++ b/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.cc
@@ -14,10 +14,18 @@
 // static
 password_manager::PasswordRequirementsService*
 IOSPasswordRequirementsServiceFactory::GetForBrowserState(
-    ChromeBrowserState* browser_state,
+    ProfileIOS* profile,
+    ServiceAccessType access_type) {
+  return GetForProfile(profile, access_type);
+}
+
+// static
+password_manager::PasswordRequirementsService*
+IOSPasswordRequirementsServiceFactory::GetForProfile(
+    ProfileIOS* profile,
     ServiceAccessType access_type) {
   return static_cast<password_manager::PasswordRequirementsService*>(
-      GetInstance()->GetServiceForBrowserState(browser_state, true));
+      GetInstance()->GetServiceForBrowserState(profile, true));
 }
 
 // static
diff --git a/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.h b/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.h
index e3ac623..8608eed 100644
--- a/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.h
+++ b/ios/chrome/browser/passwords/model/ios_password_requirements_service_factory.h
@@ -17,12 +17,16 @@
 }
 
 // Singleton that owns all PasswordRequirementsService and associates them with
-// ChromeBrowserState.
+// ProfileIOS.
 class IOSPasswordRequirementsServiceFactory
     : public BrowserStateKeyedServiceFactory {
  public:
   static password_manager::PasswordRequirementsService* GetForBrowserState(
-      ChromeBrowserState* browser_state,
+      ProfileIOS* profile,
+      ServiceAccessType access_type);
+
+  static password_manager::PasswordRequirementsService* GetForProfile(
+      ProfileIOS* profile,
       ServiceAccessType access_type);
 
   static IOSPasswordRequirementsServiceFactory* GetInstance();
diff --git a/ios/chrome/browser/passwords/model/ios_password_store_utils.h b/ios/chrome/browser/passwords/model/ios_password_store_utils.h
index eab45ea8..4473f11 100644
--- a/ios/chrome/browser/passwords/model/ios_password_store_utils.h
+++ b/ios/chrome/browser/passwords/model/ios_password_store_utils.h
@@ -10,6 +10,6 @@
 // Query the password stores and reports multiple metrics. The actual reporting
 // is delayed by 30 seconds, to ensure it doesn't happen during the "hot phase"
 // of Chrome startup.
-void DelayReportingPasswordStoreMetrics(ChromeBrowserState* browser_state);
+void DelayReportingPasswordStoreMetrics(ProfileIOS* profile);
 
 #endif  // IOS_CHROME_BROWSER_PASSWORDS_MODEL_IOS_PASSWORD_STORE_UTILS_H_
diff --git a/ios/chrome/browser/passwords/model/ios_password_store_utils.mm b/ios/chrome/browser/passwords/model/ios_password_store_utils.mm
index c22e41f..e34da46 100644
--- a/ios/chrome/browser/passwords/model/ios_password_store_utils.mm
+++ b/ios/chrome/browser/passwords/model/ios_password_store_utils.mm
@@ -34,8 +34,7 @@
 
 class StoreMetricReporterHelper : public base::SupportsUserData::Data {
  public:
-  explicit StoreMetricReporterHelper(ChromeBrowserState* browser_state)
-      : browser_state_(browser_state) {
+  explicit StoreMetricReporterHelper(ProfileIOS* profile) : profile_(profile) {
     base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask(
         FROM_HERE,
         base::BindOnce(&StoreMetricReporterHelper::StartMetricsReporting,
@@ -47,31 +46,29 @@
  private:
   void StartMetricsReporting() {
     password_manager::PasswordStoreInterface* profile_store =
-        IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-            browser_state_, ServiceAccessType::EXPLICIT_ACCESS)
+        IOSChromeProfilePasswordStoreFactory::GetForProfile(
+            profile_, ServiceAccessType::EXPLICIT_ACCESS)
             .get();
     password_manager::PasswordStoreInterface* account_store =
-        IOSChromeAccountPasswordStoreFactory::GetForBrowserState(
-            browser_state_, ServiceAccessType::EXPLICIT_ACCESS)
+        IOSChromeAccountPasswordStoreFactory::GetForProfile(
+            profile_, ServiceAccessType::EXPLICIT_ACCESS)
             .get();
     syncer::SyncService* sync_service =
-        SyncServiceFactory::GetForProfileIfExists(browser_state_);
+        SyncServiceFactory::GetForProfileIfExists(profile_);
     password_manager::PasswordReuseManager* password_reuse_manager =
-        IOSChromePasswordReuseManagerFactory::GetForBrowserState(
-            browser_state_);
+        IOSChromePasswordReuseManagerFactory::GetForProfile(profile_);
     password_manager::PasswordManagerSettingsService* settings =
-        IOSPasswordManagerSettingsServiceFactory::GetForBrowserState(
-            browser_state_);
+        IOSPasswordManagerSettingsServiceFactory::GetForProfile(profile_);
 
-    PrefService* pref_service = browser_state_->GetPrefs();
+    PrefService* pref_service = profile_->GetPrefs();
 
-    metrics_reporter_ = std::make_unique<
-        password_manager::StoreMetricsReporter>(
-        profile_store, account_store, sync_service, pref_service,
-        password_reuse_manager, settings,
-        base::BindOnce(
-            &StoreMetricReporterHelper::RemoveInstanceFromBrowserStateUserData,
-            weak_ptr_factory_.GetWeakPtr()));
+    metrics_reporter_ =
+        std::make_unique<password_manager::StoreMetricsReporter>(
+            profile_store, account_store, sync_service, pref_service,
+            password_reuse_manager, settings,
+            base::BindOnce(
+                &StoreMetricReporterHelper::RemoveInstanceFromProfileUserData,
+                weak_ptr_factory_.GetWeakPtr()));
 
     [ASCredentialIdentityStore.sharedStore
         getCredentialIdentityStoreStateWithCompletion:^(
@@ -87,8 +84,8 @@
         }];
   }
 
-  void RemoveInstanceFromBrowserStateUserData() {
-    browser_state_->RemoveUserData(kPasswordStoreMetricsReporterKey);
+  void RemoveInstanceFromProfileUserData() {
+    profile_->RemoveUserData(kPasswordStoreMetricsReporterKey);
   }
 
   // Logs if the user had enabled the credential provider in their iOS settings
@@ -112,7 +109,7 @@
     }
   }
 
-  const raw_ptr<ChromeBrowserState> browser_state_;
+  const raw_ptr<ProfileIOS> profile_;
   // StoreMetricReporterHelper is owned by the profile `metrics_reporter_` life
   // time is now bound to the profile.
   std::unique_ptr<password_manager::StoreMetricsReporter> metrics_reporter_;
@@ -121,8 +118,7 @@
 
 }  // namespace
 
-void DelayReportingPasswordStoreMetrics(ChromeBrowserState* browser_state) {
-  browser_state->SetUserData(
-      kPasswordStoreMetricsReporterKey,
-      std::make_unique<StoreMetricReporterHelper>(browser_state));
+void DelayReportingPasswordStoreMetrics(ProfileIOS* profile) {
+  profile->SetUserData(kPasswordStoreMetricsReporterKey,
+                       std::make_unique<StoreMetricReporterHelper>(profile));
 }
diff --git a/ios/chrome/browser/passwords/model/password_checkup_utils_unittest.mm b/ios/chrome/browser/passwords/model/password_checkup_utils_unittest.mm
index 854d6fe..45efb2b4 100644
--- a/ios/chrome/browser/passwords/model/password_checkup_utils_unittest.mm
+++ b/ios/chrome/browser/passwords/model/password_checkup_utils_unittest.mm
@@ -93,7 +93,7 @@
 class PasswordCheckupUtilsTest : public PlatformTest {
  protected:
   PasswordCheckupUtilsTest() {
-    TestChromeBrowserState::Builder builder;
+    TestProfileIOS::Builder builder;
     builder.AddTestingFactory(
         IOSChromeProfilePasswordStoreFactory::GetInstance(),
         base::BindRepeating(
@@ -105,26 +105,26 @@
           return std::unique_ptr<KeyedService>(
               std::make_unique<affiliations::FakeAffiliationService>());
         })));
-    browser_state_ = std::move(builder).Build();
+    profile_ = std::move(builder).Build();
     store_ =
         base::WrapRefCounted(static_cast<password_manager::TestPasswordStore*>(
-            IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-                browser_state_.get(), ServiceAccessType::EXPLICIT_ACCESS)
+            IOSChromeProfilePasswordStoreFactory::GetForProfile(
+                profile_.get(), ServiceAccessType::EXPLICIT_ACCESS)
                 .get()));
-    manager_ = IOSChromePasswordCheckManagerFactory::GetForBrowserState(
-        browser_state_.get());
+    manager_ =
+        IOSChromePasswordCheckManagerFactory::GetForProfile(profile_.get());
   }
 
   void RunUntilIdle() { task_env_.RunUntilIdle(); }
 
-  ChromeBrowserState* browser_state() { return browser_state_.get(); }
+  ProfileIOS* profile() { return profile_.get(); }
   TestPasswordStore& store() { return *store_; }
   IOSChromePasswordCheckManager& manager() { return *manager_; }
 
  private:
   base::test::ScopedFeatureList feature_list_;
   web::WebTaskEnvironment task_env_;
-  std::unique_ptr<ChromeBrowserState> browser_state_;
+  std::unique_ptr<ProfileIOS> profile_;
   scoped_refptr<TestPasswordStore> store_;
   scoped_refptr<IOSChromePasswordCheckManager> manager_;
 };
@@ -257,7 +257,7 @@
                                       manager().GetLastPasswordCheckTime()));
 
   base::Time expected1 = base::Time::Now() - base::Seconds(10);
-  browser_state()->GetPrefs()->SetDouble(
+  profile()->GetPrefs()->SetDouble(
       password_manager::prefs::kLastTimePasswordCheckCompleted,
       expected1.InSecondsFSinceUnixEpoch());
 
@@ -265,7 +265,7 @@
                                        manager().GetLastPasswordCheckTime()));
 
   base::Time expected2 = base::Time::Now() - base::Minutes(5);
-  browser_state()->GetPrefs()->SetDouble(
+  profile()->GetPrefs()->SetDouble(
       password_manager::prefs::kLastTimePasswordCheckCompleted,
       expected2.InSecondsFSinceUnixEpoch());
 
diff --git a/ios/chrome/browser/passwords/model/password_controller.mm b/ios/chrome/browser/passwords/model/password_controller.mm
index 3dc6817..447c399 100644
--- a/ios/chrome/browser/passwords/model/password_controller.mm
+++ b/ios/chrome/browser/passwords/model/password_controller.mm
@@ -278,9 +278,8 @@
   return _webState;
 }
 
-- (ChromeBrowserState*)browserState {
-  return _webState ? ChromeBrowserState::FromBrowserState(
-                         _webState->GetBrowserState())
+- (ProfileIOS*)profile {
+  return _webState ? ProfileIOS::FromBrowserState(_webState->GetBrowserState())
                    : nullptr;
 }
 
@@ -438,10 +437,10 @@
     return;
   }
 
-  CHECK(self.browserState);
-  PrefService* prefs = self.browserState->GetPrefs();
+  CHECK(self.profile);
+  PrefService* prefs = self.profile->GetPrefs();
   syncer::SyncService* syncService =
-      SyncServiceFactory::GetForBrowserState(self.browserState);
+      SyncServiceFactory::GetForProfile(self.profile);
   const std::optional<std::string> accountToStorePassword =
       password_manager::sync_util::GetAccountForSaving(prefs, syncService);
   const password_manager::features_util::PasswordAccountStorageUserState
diff --git a/ios/chrome/browser/passwords/model/password_controller_js_unittest.mm b/ios/chrome/browser/passwords/model/password_controller_js_unittest.mm
index cb8850a..cb7bef3 100644
--- a/ios/chrome/browser/passwords/model/password_controller_js_unittest.mm
+++ b/ios/chrome/browser/passwords/model/password_controller_js_unittest.mm
@@ -115,9 +115,9 @@
  public:
   PasswordControllerJsTest()
       : web_client_(std::make_unique<ChromeWebClient>()) {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
     web_state_->GetView();
     web_state_->SetKeepRenderProcessAlive(true);
@@ -225,7 +225,7 @@
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<web::WebState> web_state_;
 };
 
diff --git a/ios/chrome/browser/passwords/model/password_controller_unittest.mm b/ios/chrome/browser/passwords/model/password_controller_unittest.mm
index 55ea54e..fa419f6 100644
--- a/ios/chrome/browser/passwords/model/password_controller_unittest.mm
+++ b/ios/chrome/browser/passwords/model/password_controller_unittest.mm
@@ -236,10 +236,10 @@
 class PasswordControllerTest : public PlatformTest {
  public:
   PasswordControllerTest() : web_client_(std::make_unique<ChromeWebClient>()) {
-    browser_state_ = profile_manager_.AddProfileWithBuilder(
-        TestChromeBrowserState::Builder());
+    profile_ =
+        profile_manager_.AddProfileWithBuilder(TestProfileIOS::Builder());
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
   }
 
@@ -262,7 +262,7 @@
         web_state(), &autofill_client_, /*bridge=*/nil, /*locale=*/"en");
 
     passwordController_ = CreatePasswordController(
-        browser_state_->GetPrefs(), web_state(), store_.get(), &weak_client_);
+        profile_->GetPrefs(), web_state(), store_.get(), &weak_client_);
     passwordController_.passwordManager->set_leak_factory(
         std::make_unique<
             NiceMock<password_manager::MockLeakDetectionCheckFactory>>());
@@ -488,7 +488,7 @@
   web::WebTaskEnvironment task_environment_;
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
   TestProfileManagerIOS profile_manager_;
-  raw_ptr<ChromeBrowserState> browser_state_;
+  raw_ptr<ProfileIOS> profile_;
   // `autofill_client_` mocks KeyedServices, which need to outlive the
   // `BrowserAutofillManager` owned by frame (`web_state`).
   autofill::TestAutofillClient autofill_client_;
diff --git a/ios/chrome/browser/passwords/model/password_manager_app_interface.mm b/ios/chrome/browser/passwords/model/password_manager_app_interface.mm
index 8eac1d5a..b584471 100644
--- a/ios/chrome/browser/passwords/model/password_manager_app_interface.mm
+++ b/ios/chrome/browser/passwords/model/password_manager_app_interface.mm
@@ -33,9 +33,9 @@
 
 // Returns the password store corresponding to the main browser state.
 scoped_refptr<password_manager::PasswordStoreInterface> PasswordStore() {
-  return IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-             chrome_test_util::GetOriginalBrowserState(),
-             ServiceAccessType::IMPLICIT_ACCESS);
+  return IOSChromeProfilePasswordStoreFactory::GetForProfile(
+      chrome_test_util::GetOriginalProfile(),
+      ServiceAccessType::IMPLICIT_ACCESS);
 }
 
 }  // namespace
@@ -81,7 +81,7 @@
       PasswordStore();
   if (passwordStore == nullptr) {
     return testing::NSErrorWithLocalizedDescription(
-        @"PasswordStore is unexpectedly null for BrowserState");
+        @"PasswordStore is unexpectedly null for Profile");
   }
 
   // Store a PasswordForm representing a PasswordCredential.
@@ -139,8 +139,8 @@
 + (int)storedCredentialsCount {
   // Obtain a PasswordStore.
   scoped_refptr<PasswordStoreInterface> passwordStore =
-      IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-          chrome_test_util::GetOriginalBrowserState(),
+      IOSChromeProfilePasswordStoreFactory::GetForProfile(
+          chrome_test_util::GetOriginalProfile(),
           ServiceAccessType::IMPLICIT_ACCESS)
           .get();
 
diff --git a/ios/chrome/browser/passwords/model/password_tab_helper_unittest.mm b/ios/chrome/browser/passwords/model/password_tab_helper_unittest.mm
index 3a154753..93e69cf 100644
--- a/ios/chrome/browser/passwords/model/password_tab_helper_unittest.mm
+++ b/ios/chrome/browser/passwords/model/password_tab_helper_unittest.mm
@@ -38,9 +38,9 @@
  public:
   PasswordTabHelperTest()
       : web_client_(std::make_unique<web::FakeWebClient>()) {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
 
     PasswordTabHelper::CreateForWebState(web_state_.get());
@@ -66,7 +66,7 @@
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_{
       web::WebTaskEnvironment::MainThreadType::IO};
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<web::WebState> web_state_;
   raw_ptr<PasswordTabHelper> helper_ = nullptr;
   id dispatcher_;
diff --git a/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper.mm b/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper.mm
index 15b9f25..624e479 100644
--- a/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper.mm
+++ b/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper.mm
@@ -24,7 +24,7 @@
 WellKnownChangePasswordTabHelper::WellKnownChangePasswordTabHelper(
     web::WebState* web_state)
     : web::WebStatePolicyDecider(web_state), web_state_(web_state) {
-  affiliation_service_ = IOSChromeAffiliationServiceFactory::GetForBrowserState(
+  affiliation_service_ = IOSChromeAffiliationServiceFactory::GetForProfile(
       ProfileIOS::FromBrowserState(web_state->GetBrowserState()));
   web_state->AddObserver(this);
 }
diff --git a/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper_unittest.mm b/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper_unittest.mm
index 2d32c6f..841c4cd 100644
--- a/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper_unittest.mm
+++ b/ios/chrome/browser/passwords/model/well_known_change_password_tab_helper_unittest.mm
@@ -85,12 +85,12 @@
         &WellKnownChangePasswordTabHelperTest::HandleRequest,
         base::Unretained(this)));
 
-    TestChromeBrowserState::Builder builder;
+    TestProfileIOS::Builder builder;
     builder.AddTestingFactory(IOSChromeAffiliationServiceFactory::GetInstance(),
                               base::BindRepeating(&MakeMockAffiliationService));
-    browser_state_ = std::move(builder).Build();
+    profile_ = std::move(builder).Build();
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
     web_state_->GetView();
     web_state_->SetKeepRenderProcessAlive(true);
@@ -102,13 +102,12 @@
     test_server_->StartAcceptingConnections();
 
     affiliation_service_ = static_cast<affiliations::MockAffiliationService*>(
-        IOSChromeAffiliationServiceFactory::GetForBrowserState(
-            browser_state_.get()));
+        IOSChromeAffiliationServiceFactory::GetForProfile(profile_.get()));
 
     web_state()->SetDelegate(&delegate_);
     password_manager::WellKnownChangePasswordTabHelper::CreateForWebState(
         web_state());
-    browser_state_->SetSharedURLLoaderFactory(
+    profile_->SetSharedURLLoaderFactory(
         base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
             &test_url_loader_factory_));
     test_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
@@ -152,7 +151,7 @@
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_{
       web::WebTaskEnvironment::MainThreadType::IO};
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<web::WebState> web_state_;
 
  private:
diff --git a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_app_interface.mm b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_app_interface.mm
index c922b606..43f3e629 100644
--- a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_app_interface.mm
+++ b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_app_interface.mm
@@ -41,12 +41,12 @@
 }
 
 + (void)setDismissCount:(int)dismissCount {
-  chrome_test_util::GetOriginalBrowserState()->GetPrefs()->SetInteger(
+  chrome_test_util::GetOriginalProfile()->GetPrefs()->SetInteger(
       prefs::kIosPasswordBottomSheetDismissCount, dismissCount);
 }
 
 + (void)disableBottomSheet {
-  chrome_test_util::GetOriginalBrowserState()->GetPrefs()->SetInteger(
+  chrome_test_util::GetOriginalProfile()->GetPrefs()->SetInteger(
       prefs::kIosPasswordBottomSheetDismissCount,
       AutofillBottomSheetTabHelper::kPasswordBottomSheetMaxDismissCount);
 }
diff --git a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_coordinator.mm b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_coordinator.mm
index 828275c..8fe2ea6 100644
--- a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_coordinator.mm
+++ b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_coordinator.mm
@@ -69,15 +69,14 @@
         initWithHandler:self
                     URL:URL];
 
-    ChromeBrowserState* browserState =
-        browser->GetBrowserState()->GetOriginalChromeBrowserState();
+    ProfileIOS* profile = browser->GetProfile()->GetOriginalProfile();
 
     auto profilePasswordStore =
-        IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-            browserState, ServiceAccessType::EXPLICIT_ACCESS);
+        IOSChromeProfilePasswordStoreFactory::GetForProfile(
+            profile, ServiceAccessType::EXPLICIT_ACCESS);
     auto accountPasswordStore =
-        IOSChromeAccountPasswordStoreFactory::GetForBrowserState(
-            browserState, ServiceAccessType::EXPLICIT_ACCESS);
+        IOSChromeAccountPasswordStoreFactory::GetForProfile(
+            profile, ServiceAccessType::EXPLICIT_ACCESS);
 
     self.reauthModule =
         ScopedPasswordSuggestionBottomSheetReauthModuleOverride::Get();
@@ -86,18 +85,17 @@
     }
     self.mediator = [[PasswordSuggestionBottomSheetMediator alloc]
           initWithWebStateList:webStateList
-                 faviconLoader:IOSChromeFaviconLoaderFactory::
-                                   GetForBrowserState(browserState)
-                   prefService:browserState->GetPrefs()
+                 faviconLoader:IOSChromeFaviconLoaderFactory::GetForProfile(
+                                   profile)
+                   prefService:profile->GetPrefs()
                         params:params
                   reauthModule:_reauthModule
                            URL:URL
           profilePasswordStore:profilePasswordStore
           accountPasswordStore:accountPasswordStore
-        sharedURLLoaderFactory:browserState->GetSharedURLLoaderFactory()
+        sharedURLLoaderFactory:profile->GetSharedURLLoaderFactory()
              engagementTracker:feature_engagement::TrackerFactory::
-                                   GetForBrowserState(
-                                       self.browser->GetBrowserState())];
+                                   GetForProfile(self.browser->GetProfile())];
     self.viewController.delegate = self.mediator;
     self.mediator.consumer = self.viewController;
   }
diff --git a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_mediator_unittest.mm b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_mediator_unittest.mm
index e2e14a06..bae324f 100644
--- a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_mediator_unittest.mm
+++ b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_mediator_unittest.mm
@@ -195,14 +195,14 @@
  protected:
   PasswordSuggestionBottomSheetMediatorTest()
       : test_web_state_(std::make_unique<web::FakeWebState>()),
-        chrome_browser_state_(TestChromeBrowserState::Builder().Build()) {
+        profile_(TestProfileIOS::Builder().Build()) {
     web_state_list_ = std::make_unique<WebStateList>(&web_state_list_delegate_);
   }
 
   void SetUp() override {
     test_web_state_->SetCurrentURL(URL());
 
-    TestChromeBrowserState::Builder builder;
+    TestProfileIOS::Builder builder;
     builder.AddTestingFactory(ios::FaviconServiceFactory::GetInstance(),
                               ios::FaviconServiceFactory::GetDefaultFactory());
     builder.AddTestingFactory(
@@ -218,7 +218,7 @@
         base::BindRepeating(
             &password_manager::BuildPasswordStore<
                 web::BrowserState, password_manager::TestPasswordStore>));
-    chrome_browser_state_ = std::move(builder).Build();
+    profile_ = std::move(builder).Build();
 
     consumer_ =
         OCMProtocolMock(@protocol(PasswordSuggestionBottomSheetConsumer));
@@ -249,14 +249,13 @@
 
     store_ =
         base::WrapRefCounted(static_cast<password_manager::TestPasswordStore*>(
-            IOSChromeProfilePasswordStoreFactory::GetForBrowserState(
-                chrome_browser_state_.get(), ServiceAccessType::EXPLICIT_ACCESS)
+            IOSChromeProfilePasswordStoreFactory::GetForProfile(
+                profile_.get(), ServiceAccessType::EXPLICIT_ACCESS)
                 .get()));
     mediator_ = [[PasswordSuggestionBottomSheetMediator alloc]
           initWithWebStateList:web_state_list_.get()
-                 faviconLoader:IOSChromeFaviconLoaderFactory::
-                                   GetForBrowserState(
-                                       chrome_browser_state_.get())
+                 faviconLoader:IOSChromeFaviconLoaderFactory::GetForProfile(
+                                   profile_.get())
                    prefService:prefs_.get()
                         params:params_
                   reauthModule:nil
@@ -287,7 +286,7 @@
   std::unique_ptr<web::FakeWebState> test_web_state_;
   FakeWebStateListDelegate web_state_list_delegate_;
   std::unique_ptr<WebStateList> web_state_list_;
-  std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   scoped_refptr<password_manager::TestPasswordStore> store_;
   id consumer_;
   NSArray<id<FormSuggestionProvider>>* suggestion_providers_;
diff --git a/ios/chrome/browser/passwords/ui_bundled/password_suggestion_coordinator.mm b/ios/chrome/browser/passwords/ui_bundled/password_suggestion_coordinator.mm
index 5006398..dc5a243 100644
--- a/ios/chrome/browser/passwords/ui_bundled/password_suggestion_coordinator.mm
+++ b/ios/chrome/browser/passwords/ui_bundled/password_suggestion_coordinator.mm
@@ -167,9 +167,9 @@
 
 // Returns the user email.
 - (NSString*)userEmail {
-  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  ProfileIOS* profile = self.browser->GetProfile();
   AuthenticationService* authService =
-      AuthenticationServiceFactory::GetForBrowserState(browserState);
+      AuthenticationServiceFactory::GetForProfile(profile);
   id<SystemIdentity> authenticatedIdentity =
       authService->GetPrimaryIdentity(signin::ConsentLevel::kSignin);
 
@@ -241,11 +241,11 @@
               kIOSProactivePasswordGenerationBottomSheet)) {
     return;
   }
-  ChromeBrowserState* browserState = self.browser->GetBrowserState();
-  if (!browserState) {
+  ProfileIOS* profile = self.browser->GetProfile();
+  if (!profile) {
     return;
   }
-  PrefService* prefService = browserState->GetPrefs();
+  PrefService* prefService = profile->GetPrefs();
   if (prefService) {
     const int newDismissCount =
         prefService->GetInteger(
@@ -297,12 +297,12 @@
   if (!webState) {
     return;
   }
-  ChromeBrowserState* browserState =
-      ChromeBrowserState::FromBrowserState(webState->GetBrowserState());
-  if (!browserState) {
+  ProfileIOS* profile =
+      ProfileIOS::FromBrowserState(webState->GetBrowserState());
+  if (!profile) {
     return;
   }
-  PrefService* prefService = browserState->GetPrefs();
+  PrefService* prefService = profile->GetPrefs();
   if (prefService) {
     const int currentDismissCount = prefService->GetInteger(
         prefs::kIosPasswordGenerationBottomSheetDismissCount);
diff --git a/ios/chrome/browser/profile/model/BUILD.gn b/ios/chrome/browser/profile/model/BUILD.gn
index 0f8cb53..c68fd70 100644
--- a/ios/chrome/browser/profile/model/BUILD.gn
+++ b/ios/chrome/browser/profile/model/BUILD.gn
@@ -153,6 +153,7 @@
     "//ios/chrome/browser/download/model",
     "//ios/chrome/browser/download/model/background_service",
     "//ios/chrome/browser/drive/model:drive_service_factory",
+    "//ios/chrome/browser/enterprise/connectors",
     "//ios/chrome/browser/enterprise/model/idle",
     "//ios/chrome/browser/external_files/model",
     "//ios/chrome/browser/favicon/model",
diff --git a/ios/chrome/browser/profile/model/DEPS b/ios/chrome/browser/profile/model/DEPS
index 11b9dc0..6c9eb9e 100644
--- a/ios/chrome/browser/profile/model/DEPS
+++ b/ios/chrome/browser/profile/model/DEPS
@@ -32,6 +32,7 @@
     "+ios/chrome/browser/dom_distiller/model",
     "+ios/chrome/browser/download/model",
     "+ios/chrome/browser/drive/model",
+    "+ios/chrome/browser/enterprise/connectors",
     "+ios/chrome/browser/enterprise/model",
     "+ios/chrome/browser/external_files/model",
     "+ios/chrome/browser/favicon/model",
diff --git a/ios/chrome/browser/profile/model/keyed_service_factories.mm b/ios/chrome/browser/profile/model/keyed_service_factories.mm
index f73c6d9..9e91b37 100644
--- a/ios/chrome/browser/profile/model/keyed_service_factories.mm
+++ b/ios/chrome/browser/profile/model/keyed_service_factories.mm
@@ -43,6 +43,7 @@
 #import "ios/chrome/browser/download/model/background_service/background_download_service_factory.h"
 #import "ios/chrome/browser/download/model/browser_download_service_factory.h"
 #import "ios/chrome/browser/drive/model/drive_service_factory.h"
+#import "ios/chrome/browser/enterprise/connectors/connectors_service_factory.h"
 #import "ios/chrome/browser/enterprise/model/idle/idle_service_factory.h"
 #import "ios/chrome/browser/external_files/model/external_file_remover_factory.h"
 #import "ios/chrome/browser/favicon/model/favicon_service_factory.h"
@@ -180,6 +181,7 @@
   data_sharing::DataSharingServiceFactory::GetInstance();
   dom_distiller::DomDistillerServiceFactory::GetInstance();
   drive::DriveServiceFactory::GetInstance();
+  enterprise_connectors::ConnectorsServiceFactory::GetInstance();
   enterprise_idle::IdleServiceFactory::GetInstance();
   feature_engagement::TrackerFactory::GetInstance();
   ios::AboutSigninInternalsFactory::GetInstance();
diff --git a/ios/chrome/browser/shared/public/features/features.h b/ios/chrome/browser/shared/public/features/features.h
index 408df0e..f7fb76ef 100644
--- a/ios/chrome/browser/shared/public/features/features.h
+++ b/ios/chrome/browser/shared/public/features/features.h
@@ -26,6 +26,10 @@
 // Feature flag to enable the Keyboard Accessory Upgrade.
 BASE_DECLARE_FEATURE(kIOSKeyboardAccessoryUpgrade);
 
+// Feature flag to enable the Keyboard Accessory Upgrade with a shorter manual
+// fill menu.
+BASE_DECLARE_FEATURE(kIOSKeyboardAccessoryUpgradeShortManualFillMenu);
+
 // Test-only: Feature flag used to verify that EG2 can trigger flags. Must be
 // always disabled by default, because it is used to verify that enabling
 // features in tests works.
@@ -588,6 +592,10 @@
 // Whether or not the kIOSKeyboardAccessoryUpgrade feature is enabled.
 bool IsKeyboardAccessoryUpgradeEnabled();
 
+// Whether or not the kIOSKeyboardAccessoryUpgradeShortManualFillMenu feature is
+// enabled.
+bool IsKeyboardAccessoryUpgradeWithShortManualFillMenuEnabled();
+
 // Feature for the Magic Stack.
 BASE_DECLARE_FEATURE(kMagicStack);
 
diff --git a/ios/chrome/browser/shared/public/features/features.mm b/ios/chrome/browser/shared/public/features/features.mm
index 505c1218..8a27df7 100644
--- a/ios/chrome/browser/shared/public/features/features.mm
+++ b/ios/chrome/browser/shared/public/features/features.mm
@@ -35,6 +35,10 @@
              "IOSKeyboardAccessoryUpgrade",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kIOSKeyboardAccessoryUpgradeShortManualFillMenu,
+             "IOSKeyboardAccessoryUpgradeShortManualFillMenu",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kTestFeature, "TestFeature", base::FEATURE_DISABLED_BY_DEFAULT);
 
 BASE_FEATURE(kSafetyCheckMagicStack,
@@ -713,6 +717,12 @@
          ui::GetDeviceFormFactor() != ui::DEVICE_FORM_FACTOR_TABLET;
 }
 
+bool IsKeyboardAccessoryUpgradeWithShortManualFillMenuEnabled() {
+  return IsKeyboardAccessoryUpgradeEnabled() &&
+         base::FeatureList::IsEnabled(
+             kIOSKeyboardAccessoryUpgradeShortManualFillMenu);
+}
+
 // Feature disabled by default.
 BASE_FEATURE(kMagicStack, "MagicStack", base::FEATURE_ENABLED_BY_DEFAULT);
 
diff --git a/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.h b/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.h
index b14184d..2e5d294 100644
--- a/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.h
+++ b/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.h
@@ -11,13 +11,14 @@
 //  account.
 @interface IdentitySnackbarMessage : MDCSnackbarMessage
 
-// The avatar to display in the snackbar.
+// The avatar to display in the snackbar. Must not be nil.
 @property(nonatomic, readonly) UIImage* avatar;
 
-// The name to display in the snackbar.
+// The name to display in the snackbar. May be nil, in which case the snackbar
+// will not display a name.
 @property(nonatomic, readonly) NSString* name;
 
-// The email to display in the snackbar.
+// The email to display in the snackbar. Must not be nil.
 @property(nonatomic, readonly) NSString* email;
 
 // True if the profile is managed by an enterprise admin.
diff --git a/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.mm b/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.mm
index 3748b7dc..ee265134 100644
--- a/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.mm
+++ b/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.h"
 
 #import "base/check.h"
+#import "base/metrics/histogram_functions.h"
 #import "base/time/time.h"
 #import "ios/chrome/app/tests_hook.h"
 #import "ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message_view.h"
@@ -17,6 +18,13 @@
 @property(nonatomic, readwrite) BOOL managed;
 @end
 
+namespace {
+// Name of the histogram recording whether the identity snackbar had a name to
+// display.
+const char kIdentitySnackbarHadUserName[] =
+    "Signin.IdentitySnackbarHadUserName";
+}  // namespace
+
 @implementation IdentitySnackbarMessage
 
 - (instancetype)initWithName:(NSString*)name
@@ -26,7 +34,6 @@
   self = [super init];
   if (self) {
     CHECK(avatar);
-    CHECK(name);
     CHECK(email);
     _avatar = avatar;
     _name = name;
@@ -40,6 +47,9 @@
     if (overridden_duration.InSeconds() != 0) {
       self.duration = overridden_duration.InSeconds();
     }
+    base::UmaHistogramBoolean(
+        /*name=*/kIdentitySnackbarHadUserName,
+        /*sample=*/(_name != nil));
   }
   return self;
 }
diff --git a/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message_view.mm b/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message_view.mm
index 79a535cc..980f4b5 100644
--- a/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message_view.mm
+++ b/ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message_view.mm
@@ -9,6 +9,7 @@
 #import "ios/chrome/browser/shared/ui/util/identity_snackbar/identity_snackbar_message.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
+#import "ios/chrome/grit/ios_branded_strings.h"
 #import "ios/chrome/grit/ios_strings.h"
 #import "ui/base/l10n/l10n_util.h"
 
@@ -141,10 +142,15 @@
     [self addSubview:_avatarView];
 
     // Text views.
+    NSString* name = snackbarMessage.name;
+    NSString* signedInText =
+        (name)
+            ? l10n_util::GetNSStringF(
+                  IDS_IOS_ACCOUNT_MENU_SWITCH_CONFIRMATION_TITLE,
+                  base::SysNSStringToUTF16(name))
+            : l10n_util::GetNSString(IDS_IOS_SIGNIN_ACCOUNT_NOTIFICATION_TITLE);
     _signedInAsView = CreateSingleLineLabel(
-        l10n_util::GetNSStringF(IDS_IOS_ACCOUNT_MENU_SWITCH_CONFIRMATION_TITLE,
-                                base::SysNSStringToUTF16(snackbarMessage.name)),
-        UIFontTextStyleSubheadline, kInvertedTextPrimaryColor);
+        signedInText, UIFontTextStyleSubheadline, kInvertedTextPrimaryColor);
 
     _emailView = CreateSingleLineLabel(
         GetEmailLabelText(snackbarMessage.email, snackbarMessage.managed),
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm b/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm
index 23865f7..e6e27eeb 100644
--- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm
@@ -304,38 +304,20 @@
 #pragma mark - SyncErrorSettingsCommandHandler
 
 - (void)openPassphraseDialogWithModalPresentation:(BOOL)presentModally {
-  if (presentModally) {
-    _syncEncryptionPassphraseTableViewController =
-        [[SyncEncryptionPassphraseTableViewController alloc]
-            initWithBrowser:self.browser];
-    _syncEncryptionPassphraseTableViewController.presentModally = YES;
-    UINavigationController* navigationController =
-        [[UINavigationController alloc]
-            initWithRootViewController:
-                _syncEncryptionPassphraseTableViewController];
-    navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
-    [self configureHandlersForRootViewController:
-              _syncEncryptionPassphraseTableViewController];
-    [_navigationController presentViewController:navigationController
-                                        animated:YES
-                                      completion:nil];
-    return;
-  }
-  // If there was a sync error, prompt the user to enter the passphrase.
-  // Otherwise, show the full encryption options.
-  UIViewController<SettingsRootViewControlling>* controllerToPush;
-  if (_syncService->GetUserSettings()->IsPassphraseRequired()) {
-    controllerToPush = _syncEncryptionPassphraseTableViewController =
-        [[SyncEncryptionPassphraseTableViewController alloc]
-            initWithBrowser:self.browser];
-  } else {
-    controllerToPush = _syncEncryptionTableViewController =
-        [[SyncEncryptionTableViewController alloc]
-            initWithBrowser:self.browser];
-  }
-
-  [self configureHandlersForRootViewController:controllerToPush];
-  [_navigationController pushViewController:controllerToPush animated:YES];
+  CHECK(presentModally);
+  _syncEncryptionPassphraseTableViewController =
+      [[SyncEncryptionPassphraseTableViewController alloc]
+          initWithBrowser:self.browser];
+  _syncEncryptionPassphraseTableViewController.presentModally = YES;
+  UINavigationController* navigationController = [[UINavigationController alloc]
+      initWithRootViewController:_syncEncryptionPassphraseTableViewController];
+  navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
+  [self configureHandlersForRootViewController:
+            _syncEncryptionPassphraseTableViewController];
+  [_navigationController presentViewController:navigationController
+                                      animated:YES
+                                    completion:nil];
+  return;
 }
 
 - (void)openTrustedVaultReauthForFetchKeys {
diff --git a/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm b/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm
index bf349e8ea..2c1e5a21 100644
--- a/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm
+++ b/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm
@@ -74,8 +74,8 @@
   DCHECK(!_viewController);
   Browser* browser = self.browser;
   WebStateList* webStateList = browser->GetWebStateList();
-  ChromeBrowserState* browserState = browser->GetBrowserState();
-  BOOL incognito = browserState->IsOffTheRecord();
+  ProfileIOS* profile = browser->GetProfile();
+  BOOL incognito = profile->IsOffTheRecord();
   self.viewController = [[BrowserContainerViewController alloc] init];
   self.webContentAreaOverlayContainerCoordinator =
       [[OverlayContainerCoordinator alloc]
@@ -94,8 +94,7 @@
   self.browserEditMenuHandler.linkToTextDelegate = self.linkToTextMediator;
   self.viewController.linkToTextDelegate = self.linkToTextMediator;
 
-  PrefService* prefService =
-      browserState->GetOriginalChromeBrowserState()->GetPrefs();
+  PrefService* prefService = profile->GetOriginalProfile()->GetPrefs();
   FullscreenController* fullscreenController =
       FullscreenController::FromBrowser(self.browser);
 
@@ -114,7 +113,7 @@
       self.partialTranslateMediator;
 
   TemplateURLService* templateURLService =
-      ios::TemplateURLServiceFactory::GetForBrowserState(browserState);
+      ios::TemplateURLServiceFactory::GetForProfile(profile);
   self.searchWithMediator =
       [[SearchWithMediator alloc] initWithWebStateList:webStateList
                                     templateURLService:templateURLService
diff --git a/ios/chrome/browser/ui/browser_container/browser_container_coordinator_unittest.mm b/ios/chrome/browser/ui/browser_container/browser_container_coordinator_unittest.mm
index 60e6fd4e..b8365cc 100644
--- a/ios/chrome/browser/ui/browser_container/browser_container_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/browser_container/browser_container_coordinator_unittest.mm
@@ -30,8 +30,8 @@
 class BrowserContainerCoordinatorTest : public PlatformTest {
  public:
   BrowserContainerCoordinatorTest() {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+    profile_ = TestProfileIOS::Builder().Build();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
     mocked_activity_service_handler_ =
         OCMStrictProtocolMock(@protocol(ActivityServiceCommands));
     [browser_->GetCommandDispatcher()
@@ -66,7 +66,7 @@
 
  protected:
   base::test::TaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<TestBrowser> browser_;
   id mocked_activity_service_handler_;
   id mocked_browser_coordinator_handler_;
diff --git a/ios/chrome/browser/ui/browser_container/browser_container_mediator_unittest.mm b/ios/chrome/browser/ui/browser_container/browser_container_mediator_unittest.mm
index 9083770..818be48 100644
--- a/ios/chrome/browser/ui/browser_container/browser_container_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/browser_container/browser_container_mediator_unittest.mm
@@ -40,8 +40,8 @@
 class BrowserContainerMediatorTest : public PlatformTest {
  public:
   BrowserContainerMediatorTest() {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+    profile_ = TestProfileIOS::Builder().Build();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
     overlay_presenter_ = OverlayPresenter::FromBrowser(
         browser_.get(), OverlayModality::kWebContentArea);
     mediator_ = [[BrowserContainerMediator alloc]
@@ -57,7 +57,7 @@
 
  protected:
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<TestBrowser> browser_;
   FakeOverlayPresentationContext presentation_context_;
   raw_ptr<OverlayPresenter> overlay_presenter_ = nullptr;
diff --git a/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler_unittest.mm b/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler_unittest.mm
index d8d85a8c..05dd218 100644
--- a/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler_unittest.mm
+++ b/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler_unittest.mm
@@ -315,9 +315,9 @@
   BrowserEditMenuHandlerTest()
       : web_client_(std::make_unique<ChromeWebClient>()),
         web_state_list_(&web_state_list_delegate_) {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
   }
 
@@ -364,7 +364,7 @@
   web::WebTaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
   web::ScopedTestingWebClient web_client_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   FakeWebStateListDelegate web_state_list_delegate_;
   WebStateList web_state_list_;
   std::unique_ptr<web::WebState> web_state_;
@@ -393,7 +393,7 @@
       [[PartialTranslateMediator alloc]
             initWithWebStateList:&web_state_list_
           withBaseViewController:base_view_controller_
-                     prefService:browser_state_->GetPrefs()
+                     prefService:profile_->GetPrefs()
             fullscreenController:nullptr
                        incognito:NO];
 
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/shortcuts_mediator_unittest.mm b/ios/chrome/browser/ui/content_suggestions/cells/shortcuts_mediator_unittest.mm
index 1831717c0..9445b21 100644
--- a/ios/chrome/browser/ui/content_suggestions/cells/shortcuts_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/cells/shortcuts_mediator_unittest.mm
@@ -90,7 +90,8 @@
 
 // Tests that the command is sent to the dispatcher when opening the Reading
 // List.
-TEST_F(ShortcutsMediatorTest, TestOpenReadingList) {
+// TODO(crbug.com/370727489): Re-enable
+TEST_F(ShortcutsMediatorTest, DISABLED_TestOpenReadingList) {
   OCMExpect([dispatcher_ showReadingList]);
 
   OCMExpect([mediator_.NTPActionsDelegate shortcutTileOpened]);
@@ -113,7 +114,8 @@
 }
 
 // Tests that the command is sent to the dispatcher when opening the What's new.
-TEST_F(ShortcutsMediatorTest, TestOpenWhatsNew) {
+// TODO(crbug.com/370727489): Re-enable
+TEST_F(ShortcutsMediatorTest, DISABLED_TestOpenWhatsNew) {
   OCMExpect([dispatcher_ showWhatsNew]);
 
   OCMExpect([mediator_.NTPActionsDelegate shortcutTileOpened]);
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h b/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h
index ef96c209..b36e672 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h
@@ -10,13 +10,7 @@
 // Feature to enable the new overflow menu.
 BASE_DECLARE_FEATURE(kNewOverflowMenu);
 
-// Feature to enable overflow menu customization.
-BASE_DECLARE_FEATURE(kOverflowMenuCustomization);
-
 // Whether the NewOverflowMenu feature is enabled.
 bool IsNewOverflowMenuEnabled();
 
-// Whether or not overflow menu customization is enabled.
-bool IsOverflowMenuCustomizationEnabled();
-
 #endif  // IOS_CHROME_BROWSER_UI_POPUP_MENU_OVERFLOW_MENU_FEATURE_FLAGS_H_
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.mm
index 4612540..8a02ecb 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.mm
@@ -10,15 +10,6 @@
              "NewOverflowMenu",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-BASE_FEATURE(kOverflowMenuCustomization,
-             "OverflowMenuCustomization",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 bool IsNewOverflowMenuEnabled() {
   return base::FeatureList::IsEnabled(kNewOverflowMenu);
 }
-
-bool IsOverflowMenuCustomizationEnabled() {
-  return IsNewOverflowMenuEnabled() &&
-         base::FeatureList::IsEnabled(kOverflowMenuCustomization);
-}
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm
index b6d8b16..a94c534 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm
@@ -255,7 +255,6 @@
   AppLaunchConfiguration config;
   config.iph_feature_enabled =
       feature_engagement::kIPHiOSOverflowMenuCustomizationFeature.name;
-  config.features_enabled.push_back(kOverflowMenuCustomization);
   [[AppLaunchManager sharedManager] ensureAppLaunchedWithConfiguration:config];
 
   // Open tools menu and see IPH appears.
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
index 4790e43..d490a98 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
@@ -712,15 +712,10 @@
                 actions:@[ self.editActionsAction ]
                  footer:nil];
 
-  NSMutableArray* actionGroups = [[NSMutableArray alloc] init];
-  [actionGroups
-      addObjectsFromArray:@[ self.appActionsGroup, self.pageActionsGroup ]];
-  if (IsOverflowMenuCustomizationEnabled()) {
-    [actionGroups addObject:self.editActionsGroup];
-  }
-  [actionGroups addObject:self.helpActionsGroup];
-
-  self.model.actionGroups = actionGroups;
+  self.model.actionGroups = @[
+    self.appActionsGroup, self.pageActionsGroup, self.editActionsGroup,
+    self.helpActionsGroup
+  ];
 }
 
 - (OverflowMenuAction*)newFollowAction {
@@ -1090,35 +1085,33 @@
 
   result.destination = static_cast<NSInteger>(destination);
 
-  if (IsOverflowMenuCustomizationEnabled()) {
-    NSMutableArray<OverflowMenuLongPressItem*>* longPressItems =
-        [[NSMutableArray alloc] init];
+  NSMutableArray<OverflowMenuLongPressItem*>* longPressItems =
+      [[NSMutableArray alloc] init];
 
-    NSString* hideItemText = [self hideItemTextForDestination:destination];
-    if (hideItemText) {
-      [longPressItems addObject:[[OverflowMenuLongPressItem alloc]
-                                    initWithTitle:hideItemText
-                                       symbolName:@"eye.slash"
-                                          handler:^{
-                                            [weakSelf
-                                                hideDestination:destination];
-                                          }]];
-    }
-    [longPressItems
-        addObject:[[OverflowMenuLongPressItem alloc]
-                      initWithTitle:l10n_util::GetNSString(
-                                        IDS_IOS_OVERFLOW_MENU_EDIT_ACTIONS)
-                         symbolName:@"pencil"
-                            handler:^{
-                              [weakSelf beginCustomization];
-                            }]];
-    result.longPressItems = longPressItems;
-
-    __weak __typeof(result) weakResult = result;
-    result.onShownToggleCallback = ^{
-      [weakSelf onShownToggledForDestination:weakResult];
-    };
+  NSString* hideItemText = [self hideItemTextForDestination:destination];
+  if (hideItemText) {
+    [longPressItems addObject:[[OverflowMenuLongPressItem alloc]
+                                  initWithTitle:hideItemText
+                                     symbolName:@"eye.slash"
+                                        handler:^{
+                                          [weakSelf
+                                              hideDestination:destination];
+                                        }]];
   }
+  [longPressItems
+      addObject:[[OverflowMenuLongPressItem alloc]
+                    initWithTitle:l10n_util::GetNSString(
+                                      IDS_IOS_OVERFLOW_MENU_EDIT_ACTIONS)
+                       symbolName:@"pencil"
+                          handler:^{
+                            [weakSelf beginCustomization];
+                          }]];
+  result.longPressItems = longPressItems;
+
+  __weak __typeof(result) weakResult = result;
+  result.onShownToggleCallback = ^{
+    [weakSelf onShownToggledForDestination:weakResult];
+  };
 
   return result;
 }
@@ -1153,7 +1146,7 @@
   bool actionIsReorderable =
       std::find(reorderableActions.begin(), reorderableActions.end(),
                 actionType) != reorderableActions.end();
-  if (IsOverflowMenuCustomizationEnabled() && actionIsReorderable) {
+  if (actionIsReorderable) {
     action.longPressItems =
         [self actionLongPressItemsForActionType:actionType
                                    hideItemText:hideItemText];
@@ -1704,14 +1697,12 @@
                                              [weakSelf
                                                  unfollowWebPage:webPageURLs];
                                            }];
-    if (IsOverflowMenuCustomizationEnabled()) {
-      NSString* hideItemText =
-          l10n_util::GetNSStringF(IDS_IOS_OVERFLOW_MENU_HIDE_ACTION_UNFOLLOW,
-                                  base::SysNSStringToUTF16(domainName));
-      self.followAction.longPressItems = [self
-          actionLongPressItemsForActionType:overflow_menu::ActionType::Follow
-                               hideItemText:hideItemText];
-    }
+    NSString* hideItemText =
+        l10n_util::GetNSStringF(IDS_IOS_OVERFLOW_MENU_HIDE_ACTION_UNFOLLOW,
+                                base::SysNSStringToUTF16(domainName));
+    self.followAction.longPressItems = [self
+        actionLongPressItemsForActionType:overflow_menu::ActionType::Follow
+                             hideItemText:hideItemText];
   } else {
     __weak __typeof(self) weakSelf = self;
     self.followAction.name = l10n_util::GetNSStringF(
@@ -1724,14 +1715,12 @@
                                              [weakSelf
                                                  followWebPage:webPageURLs];
                                            }];
-    if (IsOverflowMenuCustomizationEnabled()) {
-      NSString* hideItemText =
-          l10n_util::GetNSStringF(IDS_IOS_OVERFLOW_MENU_HIDE_ACTION_FOLLOW,
-                                  base::SysNSStringToUTF16(domainName));
-      self.followAction.longPressItems = [self
-          actionLongPressItemsForActionType:overflow_menu::ActionType::Follow
-                               hideItemText:hideItemText];
-    }
+    NSString* hideItemText =
+        l10n_util::GetNSStringF(IDS_IOS_OVERFLOW_MENU_HIDE_ACTION_FOLLOW,
+                                base::SysNSStringToUTF16(domainName));
+    self.followAction.longPressItems = [self
+        actionLongPressItemsForActionType:overflow_menu::ActionType::Follow
+                             hideItemText:hideItemText];
   }
 }
 
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
index 46354d3f4..04b6eb31 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
@@ -685,7 +685,7 @@
 // Tests that the "Managed by..." item is shown for machine level policies
 // (e.g. from MDM or CBCM).
 TEST_F(OverflowMenuMediatorTest,
-       TestEnterpriseInfoShownForMachineLevelPolicies) {
+       DISABLED_TestEnterpriseInfoShownForMachineLevelPolicies) {
   // Set a policy.
   base::ScopedTempDir state_directory;
   ASSERT_TRUE(state_directory.CreateUniqueTempDir());
@@ -715,7 +715,7 @@
 }
 
 // Tests that the Family Link item is hidden for non-supervised users.
-TEST_F(OverflowMenuMediatorTest, TestFamilyLinkInfoHidden) {
+TEST_F(OverflowMenuMediatorTest, DISABLED_TestFamilyLinkInfoHidden) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(
       supervised_user::kReplaceSupervisionPrefsWithAccountCapabilitiesOnIOS);
@@ -736,7 +736,8 @@
 
 // Tests that the Family Link item is hidden for non-supervised users with
 // pref-based supervision status.
-TEST_F(OverflowMenuMediatorTest, TestFamilyLinkInfoHiddenWithSupervisionPrefs) {
+TEST_F(OverflowMenuMediatorTest,
+       DISABLED_TestFamilyLinkInfoHiddenWithSupervisionPrefs) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndDisableFeature(
       supervised_user::kReplaceSupervisionPrefsWithAccountCapabilitiesOnIOS);
@@ -755,7 +756,7 @@
 }
 
 // Tests that the Family Link item is shown for supervised users.
-TEST_F(OverflowMenuMediatorTest, TestFamilyLinkInfoShown) {
+TEST_F(OverflowMenuMediatorTest, DISABLED_TestFamilyLinkInfoShown) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(
       supervised_user::kReplaceSupervisionPrefsWithAccountCapabilitiesOnIOS);
@@ -1089,7 +1090,6 @@
 
 // Tests that the actions have the correct longpress items set.
 TEST_F(OverflowMenuMediatorTest, ActionLongpressItems) {
-  base::test::ScopedFeatureList scoped_feature_list(kOverflowMenuCustomization);
   CreateMediator(/*is_incognito=*/NO);
 
   mediator_.model = model_;
@@ -1112,7 +1112,6 @@
 
 // Tests that the destinations have the correct longpress items set.
 TEST_F(OverflowMenuMediatorTest, DestinationLongpressItems) {
-  base::test::ScopedFeatureList scoped_feature_list(kOverflowMenuCustomization);
   CreateMediator(/*is_incognito=*/NO);
 
   mediator_.model = model_;
@@ -1135,7 +1134,6 @@
 // Tests that when a destination becomes hidden during customization, the
 // corresponding action gains a subtitle and a highlight.
 TEST_F(OverflowMenuMediatorTest, DestinationHideShowsActionSubtitle) {
-  base::test::ScopedFeatureList scoped_feature_list(kOverflowMenuCustomization);
   CreateMediator(/*is_incognito=*/NO);
 
   mediator_.model = model_;
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer.mm
index 0fdac6d..db748e4 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer.mm
@@ -312,13 +312,11 @@
   DestinationRanking availableDestinations =
       [self.destinationProvider baseDestinations];
 
-  if (IsOverflowMenuCustomizationEnabled()) {
-    DestinationRanking badgedRanking =
-        [self customizationRankingAfterBadgingWithAvailableDestinations:
-                  availableDestinations];
-    _destinationOrderData.shownDestinations = badgedRanking;
-    [self flushDestinationsToPrefs];
-  }
+  DestinationRanking badgedRanking =
+      [self customizationRankingAfterBadgingWithAvailableDestinations:
+                availableDestinations];
+  _destinationOrderData.shownDestinations = badgedRanking;
+  [self flushDestinationsToPrefs];
 
   // If customization is enabled, then skip destination usage history if there
   // are current badges, as those have more important positions.
@@ -330,7 +328,6 @@
     }
   }
   BOOL skipDestinationUsageHistory =
-      IsOverflowMenuCustomizationEnabled() &&
       (hasBadgeWithImpressions || !_destinationUsageHistoryEnabled.value);
 
   if (!skipDestinationUsageHistory && self.destinationUsageHistory) {
@@ -342,14 +339,6 @@
     [self flushDestinationsToPrefs];
   }
 
-  if (!IsOverflowMenuCustomizationEnabled()) {
-    DestinationRanking badgedRanking = [self
-        rankingAfterBadgingWithAvailableDestinations:availableDestinations];
-
-    _destinationOrderData.shownDestinations = badgedRanking;
-    [self flushDestinationsToPrefs];
-  }
-
   self.model.destinations = [self destinationsFromCurrentRanking];
 }
 
@@ -363,35 +352,32 @@
 }
 
 - (void)updateForMenuDisappearance {
-  // With Overflow Menu Customization, badge impressions need to be tracked.
-  if (IsOverflowMenuCustomizationEnabled()) {
-    // If spotlight debugging is enabled, an extra destination is auto-inserted
-    // at the beginning.
-    NSUInteger badgeImpressionLastIndex =
-        (experimental_flags::IsSpotlightDebuggingEnabled())
-            ? kNewDestinationsInsertionIndex + 1
-            : kNewDestinationsInsertionIndex;
+  // If spotlight debugging is enabled, an extra destination is auto-inserted
+  // at the beginning.
+  NSUInteger badgeImpressionLastIndex =
+      (experimental_flags::IsSpotlightDebuggingEnabled())
+          ? kNewDestinationsInsertionIndex + 1
+          : kNewDestinationsInsertionIndex;
 
-    NSRange impressedRange = NSMakeRange(
-        0, MIN(badgeImpressionLastIndex + 1, self.model.destinations.count));
-    for (OverflowMenuDestination* menuDestination :
-         [self.model.destinations subarrayWithRange:impressedRange]) {
-      overflow_menu::Destination destination =
-          static_cast<overflow_menu::Destination>(menuDestination.destination);
-      auto it = _destinationBadgeData.find(destination);
-      if (it == _destinationBadgeData.end()) {
-        continue;
-      }
-      // If the badge is feature-driven, just decrease its impression count
-      // until it hits 0. Otherwise, remove it when it hits 0.
-      if (it->second.isFeatureDrivenBadge) {
-        it->second.impressionsRemaining =
-            std::max(0, it->second.impressionsRemaining - 1);
-      } else {
-        it->second.impressionsRemaining = it->second.impressionsRemaining - 1;
-        if (it->second.impressionsRemaining <= 0) {
-          _destinationBadgeData.erase(destination);
-        }
+  NSRange impressedRange = NSMakeRange(
+      0, MIN(badgeImpressionLastIndex + 1, self.model.destinations.count));
+  for (OverflowMenuDestination* menuDestination :
+       [self.model.destinations subarrayWithRange:impressedRange]) {
+    overflow_menu::Destination destination =
+        static_cast<overflow_menu::Destination>(menuDestination.destination);
+    auto it = _destinationBadgeData.find(destination);
+    if (it == _destinationBadgeData.end()) {
+      continue;
+    }
+    // If the badge is feature-driven, just decrease its impression count
+    // until it hits 0. Otherwise, remove it when it hits 0.
+    if (it->second.isFeatureDrivenBadge) {
+      it->second.impressionsRemaining =
+          std::max(0, it->second.impressionsRemaining - 1);
+    } else {
+      it->second.impressionsRemaining = it->second.impressionsRemaining - 1;
+      if (it->second.impressionsRemaining <= 0) {
+        _destinationBadgeData.erase(destination);
       }
     }
   }
@@ -520,52 +506,30 @@
       _localStatePrefs->GetList(prefs::kOverflowMenuNewDestinations),
       _untappedDestinations);
 
-  if (IsOverflowMenuCustomizationEnabled()) {
-    const base::Value::List& storedHiddenDestinations =
-        _localStatePrefs->GetList(prefs::kOverflowMenuHiddenDestinations);
-    AppendDestinationsToVector(storedHiddenDestinations,
-                               _destinationOrderData.hiddenDestinations);
+  const base::Value::List& storedHiddenDestinations =
+      _localStatePrefs->GetList(prefs::kOverflowMenuHiddenDestinations);
+  AppendDestinationsToVector(storedHiddenDestinations,
+                             _destinationOrderData.hiddenDestinations);
 
-    const base::Value::Dict& storedBadgeData =
-        _localStatePrefs->GetDict(prefs::kOverflowMenuDestinationBadgeData);
+  const base::Value::Dict& storedBadgeData =
+      _localStatePrefs->GetDict(prefs::kOverflowMenuDestinationBadgeData);
 
-    for (const auto&& [key, value] : storedBadgeData) {
-      if (!value.is_dict()) {
-        continue;
-      }
-
-      std::optional<BadgeData> badgeData = BadgeDataFromDict(value.GetDict());
-      if (!badgeData) {
-        continue;
-      }
-
-      overflow_menu::Destination destination =
-          overflow_menu::DestinationForStringName(key);
-      _destinationBadgeData[destination] = badgeData.value();
+  for (const auto&& [key, value] : storedBadgeData) {
+    if (!value.is_dict()) {
+      continue;
     }
+
+    std::optional<BadgeData> badgeData = BadgeDataFromDict(value.GetDict());
+    if (!badgeData) {
+      continue;
+    }
+
+    overflow_menu::Destination destination =
+        overflow_menu::DestinationForStringName(key);
+    _destinationBadgeData[destination] = badgeData.value();
   }
 
   [self loadShownDestinationsPref];
-
-  // If the customization flag was enabled in the past and users hid
-  // destinations make sure to add those back to the shown list, if the flag
-  // becomes disabled.
-  if (!IsOverflowMenuCustomizationEnabled()) {
-    const base::Value::List& storedHiddenDestinations =
-        _localStatePrefs->GetList(prefs::kOverflowMenuHiddenDestinations);
-    AppendDestinationsToVector(storedHiddenDestinations,
-                               _destinationOrderData.shownDestinations);
-    _localStatePrefs->ClearPref(prefs::kOverflowMenuHiddenDestinations);
-
-    // If Destination Usage History needs to be reenabled, then clear any stored
-    // data.
-    if (!_destinationUsageHistoryEnabled.value) {
-      _destinationUsageHistoryEnabled.value = YES;
-      [self.destinationUsageHistory clearStoredClickData];
-    }
-
-    [self flushDestinationsToPrefs];
-  }
 }
 
 // Loads and migrates the shown destinations pref from disk.
@@ -647,30 +611,28 @@
                             std::move(ranking));
 
   // Flush list of hidden destinations to Prefs.
-  if (IsOverflowMenuCustomizationEnabled()) {
-    base::Value::List hiddenDestinations;
+  base::Value::List hiddenDestinations;
 
-    for (overflow_menu::Destination destination :
-         _destinationOrderData.hiddenDestinations) {
-      hiddenDestinations.Append(
-          overflow_menu::StringNameForDestination(destination));
-    }
-
-    _localStatePrefs->SetList(prefs::kOverflowMenuHiddenDestinations,
-                              std::move(hiddenDestinations));
-
-    // Flush dict of badge data to Prefs.
-    base::Value::Dict badgeDataPref;
-    for (const auto& [destination, badgeData] : _destinationBadgeData) {
-      std::string destinationKey =
-          overflow_menu::StringNameForDestination(destination);
-      badgeDataPref.Set(destinationKey, DictFromBadgeData(badgeData));
-    }
-
-    _localStatePrefs->SetDict(prefs::kOverflowMenuDestinationBadgeData,
-                              std::move(badgeDataPref));
+  for (overflow_menu::Destination destination :
+       _destinationOrderData.hiddenDestinations) {
+    hiddenDestinations.Append(
+        overflow_menu::StringNameForDestination(destination));
   }
 
+  _localStatePrefs->SetList(prefs::kOverflowMenuHiddenDestinations,
+                            std::move(hiddenDestinations));
+
+  // Flush dict of badge data to Prefs.
+  base::Value::Dict badgeDataPref;
+  for (const auto& [destination, badgeData] : _destinationBadgeData) {
+    std::string destinationKey =
+        overflow_menu::StringNameForDestination(destination);
+    badgeDataPref.Set(destinationKey, DictFromBadgeData(badgeData));
+  }
+
+  _localStatePrefs->SetDict(prefs::kOverflowMenuDestinationBadgeData,
+                            std::move(badgeDataPref));
+
   // Flush the new untapped destinations to Prefs.
   ScopedListPrefUpdate untappedDestinationsUpdate(
       _localStatePrefs, prefs::kOverflowMenuNewDestinations);
@@ -737,22 +699,6 @@
 
 // Returns the current pageActions in order.
 - (NSArray<OverflowMenuAction*>*)pageActions {
-  if (!IsOverflowMenuCustomizationEnabled()) {
-    ActionRanking availableActions = [self.actionProvider basePageActions];
-    // Convert back to Objective-C array for returning. This step also filters
-    // out any actions that are not supported on the current page.
-    NSMutableArray<OverflowMenuAction*>* sortedActions =
-        [[NSMutableArray alloc] init];
-    for (overflow_menu::ActionType action : availableActions) {
-      if (OverflowMenuAction* overflowMenuAction =
-              [self.actionProvider actionForActionType:action]) {
-        [sortedActions addObject:overflowMenuAction];
-      }
-    }
-
-    return sortedActions;
-  }
-
   [self updateActionOrderData];
 
   // Convert back to Objective-C array for returning. This step also filters out
@@ -791,17 +737,15 @@
     OverflowMenuDestination* overflowMenuDestination =
         [self.destinationProvider destinationForDestinationType:destination];
     if (overflowMenuDestination) {
-      if (IsOverflowMenuCustomizationEnabled()) {
-        // If the orderer has stored badge data about this destination, the
-        // badge type may need to be upgraded. However, don't replace badges
-        // with less important ones. Specifically, error badges are most
-        // important.
-        auto it = _destinationBadgeData.find(destination);
-        if (it != _destinationBadgeData.end()) {
-          if (it->second.badgeType == BadgeTypeError ||
-              overflowMenuDestination.badge == BadgeTypeNone) {
-            overflowMenuDestination.badge = it->second.badgeType;
-          }
+      // If the orderer has stored badge data about this destination, the
+      // badge type may need to be upgraded. However, don't replace badges
+      // with less important ones. Specifically, error badges are most
+      // important.
+      auto it = _destinationBadgeData.find(destination);
+      if (it != _destinationBadgeData.end()) {
+        if (it->second.badgeType == BadgeTypeError ||
+            overflowMenuDestination.badge == BadgeTypeNone) {
+          overflowMenuDestination.badge = it->second.badgeType;
         }
       }
       [sortedDestinations addObject:overflowMenuDestination];
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer_unittest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer_unittest.mm
index cb464da..07a509c 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer_unittest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_orderer_unittest.mm
@@ -765,8 +765,6 @@
 
 // Tests that the action ranking pref gets populated after sorting once.
 TEST_F(OverflowMenuOrdererTest, StoresInitialActionRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   InitializeOverflowMenuOrderer(NO);
   ActionRanking sample_actions = SampleActions();
   action_provider_.basePageActions = sample_actions;
@@ -780,62 +778,9 @@
   EXPECT_EQ(stored_ranking.FindList("shown")->size(), sample_actions.size());
 }
 
-// Tests that no destinations are lost if the overflow menu flag is enabled
-// and then disabled
-TEST_F(OverflowMenuOrdererTest,
-       SavesHiddenDestinationsWhenOverflowCustomizationFlagDisabled) {
-  base::test::ScopedFeatureList features;
-  features.InitAndDisableFeature(kOverflowMenuCustomization);
-
-  CreatePrefs();
-
-  // Set the pref state to what it would be with flag enabled and some
-  // destinations hidden.
-  base::Value::List shown_destinations =
-      base::Value::List()
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::ReadingList))
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::Downloads));
-  base::Value::List hidden_destinations =
-      base::Value::List()
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::Bookmarks))
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::History));
-
-  base::Value::List all_destinations =
-      base::Value::List()
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::ReadingList))
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::Downloads))
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::Bookmarks))
-          .Append(overflow_menu::StringNameForDestination(
-              overflow_menu::Destination::History));
-
-  prefs_->SetList(prefs::kOverflowMenuDestinationsOrder,
-                  std::move(shown_destinations));
-  prefs_->SetList(prefs::kOverflowMenuHiddenDestinations,
-                  std::move(hidden_destinations));
-
-  overflow_menu_orderer_ = [[OverflowMenuOrderer alloc] initWithIsIncognito:NO];
-
-  // Set prefs here to force orderer to load and migrate.
-  overflow_menu_orderer_.localStatePrefs = prefs_.get();
-
-  const base::Value::List& new_order =
-      prefs_->GetList(prefs::kOverflowMenuDestinationsOrder);
-
-  EXPECT_EQ(new_order, all_destinations);
-}
-
 // Tests that reenabling destnation usage history clears the destination usage
 // history and moves all destinations back to shown.
 TEST_F(OverflowMenuOrdererTest, EnablingDestinationUsageHistory) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   CreatePrefs();
 
   // Set the pref state to what it would be with destination usage history
@@ -906,8 +851,6 @@
 
 // Tests that new actions in code are added to the ranking
 TEST_F(OverflowMenuOrdererTest, AddsNewActionsToRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   CreatePrefs();
 
   // Set the pref state what it would be with a few actions shown and hidden.
@@ -959,8 +902,6 @@
 // Tests that when there is a badged item, the overflow menu orderer doesn't
 // change the order via the destination usage history.
 TEST_F(OverflowMenuOrdererTest, NoDestinationUsageHistoryWithBadge) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
 
   // Destination 6 will be badged and destination 5 will be tapped many times,
@@ -1024,8 +965,6 @@
 
 // Tests that a newly added menu item only has a new badge for a short time.
 TEST_F(OverflowMenuOrdererTest, NewItemOnlyHasBadgeForShortTime) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking initial_ranking = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1076,8 +1015,6 @@
 // Tests that if two items are badged, with one being below the threshold, its
 // impression counter doesn't count down until the first item's counter hits 0.
 TEST_F(OverflowMenuOrdererTest, TwoBadgesOnlyOneCountsImpressions) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
 
   // Destinations 6 and 7 will be badged and destination 5 will be tapped many
@@ -1186,8 +1123,6 @@
 // Tests that if two items are badged at the front of the list, their impression
 // counters count down simultaneously.
 TEST_F(OverflowMenuOrdererTest, TwoBadgesAtBeginningCountTogether) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
 
   // Destinations 0 and 1 will be badged and destination 7 will be tapped many
@@ -1259,8 +1194,6 @@
 // Tests that if an item has a new badge and the destinations are customized,
 // those badges are cleared
 TEST_F(OverflowMenuOrdererTest, CustomizingDestinationsClearsBadgeImpressions) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
 
   // Destination 0 will be badged and destination 6 will be tapped many times,
@@ -1327,7 +1260,6 @@
 // enabled.
 TEST_F(OverflowMenuOrdererTest,
        Customization_InsertsNewDestinationInMiddleOfRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1368,7 +1300,6 @@
 // enabled.
 TEST_F(OverflowMenuOrdererTest,
        Customization_InsertsNewDestinationsInMiddleOfRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1415,7 +1346,6 @@
 // flag enabled.
 TEST_F(OverflowMenuOrdererTest,
        Customization_InsertsAndRemovesNewDestinationsInRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1463,7 +1393,6 @@
 // Tests that the destinations that have a badge are moved in the middle of the
 // ranking to get the user's attention; before the untapped destinations.
 TEST_F(OverflowMenuOrdererTest, Customization_MoveBadgedDestinationsInRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1512,7 +1441,6 @@
 // over the other badges when they are moved.
 TEST_F(OverflowMenuOrdererTest,
        Customization_PriorityToErrorBadgeOverOtherBadges) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1557,7 +1485,6 @@
 // demoted.
 TEST_F(OverflowMenuOrdererTest,
        Customization_DontMoveBadgedDestinationWithGoodRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1590,7 +1517,6 @@
 // usage history ranking.
 TEST_F(OverflowMenuOrdererTest,
        Customization_TestNewDestinationsWhenNoHistoryUsageRanking) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1631,7 +1557,6 @@
 // flag enabled.
 TEST_F(OverflowMenuOrdererTest,
        Customization_MovesBadgedDestinationsWithNoUsageHistory) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1675,7 +1600,6 @@
 // Tests that calling the simple `-updateDestinations` method doesn't reorder
 // the menu.
 TEST_F(OverflowMenuOrdererTest, UpdateDoesntReorderMenu) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1703,7 +1627,6 @@
 // Tests that if a hidden destination gets an error badge, that badge appears on
 // settings instead.
 TEST_F(OverflowMenuOrdererTest, HiddenDestinationPropagatesErrorBadge) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
 
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
@@ -1745,8 +1668,6 @@
 
 // Tests that the overflow menu order loads badge data from prefs.
 TEST_F(OverflowMenuOrdererTest, LoadBadgeDataFromPrefs) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   CreatePrefs();
 
   base::Value::Dict badge_data =
@@ -1817,8 +1738,6 @@
 
 // Tests that the overflow menu order saves badge data to prefs.
 TEST_F(OverflowMenuOrdererTest, SaveBadgeDataToPrefs) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1868,8 +1787,6 @@
 // Tests that correct metrics are fired when the menu is reordered due to a new
 // badge.
 TEST_F(OverflowMenuOrdererTest, Customization_NewBadgeReorderingMetrics) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1905,8 +1822,6 @@
 // Tests that correct metrics are fired when the menu is reordered due to an
 // error badge.
 TEST_F(OverflowMenuOrdererTest, Customization_ErrorBadgeReorderingMetrics) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1936,8 +1851,6 @@
 // new and error badge.
 TEST_F(OverflowMenuOrdererTest,
        Customization_NewAndErrorBadgeReorderingMetrics) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -1979,8 +1892,6 @@
 // Tests that no metrics are fired when there are badges, but they do not cause
 // the menu to be re-ordered.
 TEST_F(OverflowMenuOrdererTest, Customization_BadgeReorderingMetricsNotFired) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -2013,8 +1924,6 @@
 // Tests that the proper metrics are recorded when destination customization
 // completes.
 TEST_F(OverflowMenuOrdererTest, DestinationCustomizationRecordsMetrics) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -2110,8 +2019,6 @@
 
 // Tests that no metrics are recorded if there were no actual changes.
 TEST_F(OverflowMenuOrdererTest, DestinationCustomizationNoMetricsIfNoChange) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   DestinationRanking all_destinations = SampleDestinations();
   DestinationRanking current_destinations = {
       all_destinations[0], all_destinations[1], all_destinations[2],
@@ -2149,8 +2056,6 @@
 // Tests that the proper metrics are recorded when action customization
 // completes.
 TEST_F(OverflowMenuOrdererTest, ActionCustomizationRecordsMetrics) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   ActionRanking all_actions = SampleActions();
   ActionRanking current_actions = {
       all_actions[0], all_actions[1], all_actions[2],
@@ -2224,8 +2129,6 @@
 
 // Tests that no metrics are recorded if there were no actual changes.
 TEST_F(OverflowMenuOrdererTest, ActionCustomizationNoMetricsIfNoChange) {
-  base::test::ScopedFeatureList features(kOverflowMenuCustomization);
-
   ActionRanking all_actions = SampleActions();
   ActionRanking current_actions = {
       all_actions[0], all_actions[1], all_actions[2],
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
index fd99307..c273d12 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
@@ -525,7 +525,7 @@
 
     RecordOverflowMenuVisitedEvent(_event);
 
-    if (IsOverflowMenuCustomizationEnabled() &&
+    if (IsNewOverflowMenuEnabled() &&
         self.overflowMenuUserScrolledToEndOfActions) {
       base::UmaHistogramBoolean(
           "IOS.OverflowMenu.UserScrolledToEndAndStartedCustomization",
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_help_coordinator.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_help_coordinator.mm
index 4e5f887..060dea4 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_help_coordinator.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_help_coordinator.mm
@@ -195,7 +195,7 @@
 // Possibly shows the IPH for the Overflow Menu Customization feature. Returns
 // whether or not the IPH was shown.
 - (BOOL)showCustomizationIPHInMenu:(UIViewController*)menu {
-  if (!IsOverflowMenuCustomizationEnabled()) {
+  if (!IsNewOverflowMenuEnabled()) {
     return NO;
   }
 
diff --git a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm
index 039eed7..69bafd3 100644
--- a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm
+++ b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm
@@ -67,12 +67,12 @@
                            forProtocol:@protocol(AccountPickerCommands)];
   [dispatcher startDispatchingToTarget:self
                            forProtocol:@protocol(ManageStorageAlertCommands)];
-  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  ProfileIOS* profile = self.browser->GetProfile();
   drive::DriveService* driveService =
-      drive::DriveServiceFactory::GetForBrowserState(browserState);
+      drive::DriveServiceFactory::GetForProfile(profile);
   ChromeAccountManagerService* accountManagerService =
-      ChromeAccountManagerServiceFactory::GetForBrowserState(browserState);
-  PrefService* prefService = browserState->GetPrefs();
+      ChromeAccountManagerServiceFactory::GetForProfile(profile);
+  PrefService* prefService = profile->GetPrefs();
   id<SaveToDriveCommands> saveToDriveHandler =
       HandlerForProtocol(dispatcher, SaveToDriveCommands);
   id<ApplicationCommands> applicationHandler =
diff --git a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator_unittest.mm b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator_unittest.mm
index ce313c5d..c0bfbec 100644
--- a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator_unittest.mm
@@ -51,15 +51,13 @@
  protected:
   void SetUp() final {
     PlatformTest::SetUp();
-    TestChromeBrowserState::Builder builder;
-    browser_state_ = std::move(builder).Build();
-    drive_service_ =
-        drive::DriveServiceFactory::GetForBrowserState(browser_state_.get());
+    TestProfileIOS::Builder builder;
+    profile_ = std::move(builder).Build();
+    drive_service_ = drive::DriveServiceFactory::GetForProfile(profile_.get());
     account_manager_service_ =
-        ChromeAccountManagerServiceFactory::GetForBrowserState(
-            browser_state_.get());
-    pref_service_ = browser_state_->GetPrefs();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+        ChromeAccountManagerServiceFactory::GetForProfile(profile_.get());
+    pref_service_ = profile_->GetPrefs();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
     std::unique_ptr<web::FakeWebState> web_state =
         std::make_unique<web::FakeWebState>();
     browser_->GetWebStateList()->InsertWebState(
@@ -127,7 +125,7 @@
   }
 
   base::test::TaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<TestBrowser> browser_;
   UIViewController* base_view_controller_;
   std::unique_ptr<web::FakeDownloadTask> download_task_;
diff --git a/ios/chrome/browser/ui/save_to_drive/save_to_drive_mediator_unittest.mm b/ios/chrome/browser/ui/save_to_drive/save_to_drive_mediator_unittest.mm
index a2c76f1..83b5ca3 100644
--- a/ios/chrome/browser/ui/save_to_drive/save_to_drive_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/save_to_drive/save_to_drive_mediator_unittest.mm
@@ -65,9 +65,9 @@
   void SetUp() final {
     PlatformTest::SetUp();
     scoped_feature_list_.InitAndEnableFeature(kIOSSaveToDrive);
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
     web_state_ = std::make_unique<web::FakeWebState>();
-    web_state_->SetBrowserState(browser_state_.get());
+    web_state_->SetBrowserState(profile_.get());
     DriveTabHelper::GetOrCreateForWebState(web_state_.get());
     FakeDownloadManagerTabHelper::CreateForWebState(web_state_.get());
     download_task_ =
@@ -87,11 +87,11 @@
         manageStorageAlertHandler:manage_storage_alert_commands_handler_
                applicationHandler:application_commands_handler_
              accountPickerHandler:account_picker_commands_handler_
-                      prefService:browser_state_->GetPrefs()
+                      prefService:profile_->GetPrefs()
             accountManagerService:ChromeAccountManagerServiceFactory::
-                                      GetForBrowserState(browser_state_.get())
-                     driveService:drive::DriveServiceFactory::
-                                      GetForBrowserState(browser_state_.get())];
+                                      GetForProfile(profile_.get())
+                     driveService:drive::DriveServiceFactory::GetForProfile(
+                                      profile_.get())];
   }
 
   void TearDown() final {
@@ -106,7 +106,7 @@
 
   drive::TestDriveService* GetTestDriveService() {
     return static_cast<drive::TestDriveService*>(
-        drive::DriveServiceFactory::GetForBrowserState(browser_state_.get()));
+        drive::DriveServiceFactory::GetForProfile(profile_.get()));
   }
 
   FakeDownloadManagerTabHelper* GetDownloadManagerTabHelper() const {
@@ -116,7 +116,7 @@
 
   base::test::TaskEnvironment task_environment_;
   base::test::ScopedFeatureList scoped_feature_list_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<web::FakeWebState> web_state_;
   std::unique_ptr<web::FakeDownloadTask> download_task_;
   id save_to_drive_commands_handler_;
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
index a773199..a5054b47 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
@@ -80,11 +80,10 @@
 
 - (void)start {
   [super start];
-  // Make sure we use the original browser state (non-incognito).
-  ChromeBrowserState* originalBrowserState =
-      self.browser->GetBrowserState()->GetOriginalChromeBrowserState();
+  // Make sure we use the original profile (non-incognito).
+  ProfileIOS* profile = self.browser->GetProfile()->GetOriginalProfile();
   if (!ShouldDisplaySearchEngineChoiceScreen(
-          *originalBrowserState, _firstRun,
+          *profile, _firstRun,
           /*app_started_via_external_intent=*/false)) {
     // If the search engine enterprise pocliy has been loaded, just before to
     // open the Search Engine Choice dialog, it should be skipped.
@@ -95,10 +94,9 @@
       [[SearchEngineChoiceViewController alloc] initWithFirstRunMode:_firstRun];
   _viewController.actionDelegate = self;
   TemplateURLService* templateURLService =
-      ios::TemplateURLServiceFactory::GetForProfile(originalBrowserState);
+      ios::TemplateURLServiceFactory::GetForProfile(profile);
   search_engines::SearchEngineChoiceService* searchEngineChoiceService =
-      ios::SearchEngineChoiceServiceFactory::GetForProfile(
-          originalBrowserState);
+      ios::SearchEngineChoiceServiceFactory::GetForProfile(profile);
   _mediator = [[SearchEngineChoiceMediator alloc]
       initWithTemplateURLService:templateURLService
        searchEngineChoiceService:searchEngineChoiceService];
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/quick_delete_egtest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/quick_delete_egtest.mm
index 2ba95b0..22b45bf 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data/quick_delete_egtest.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data/quick_delete_egtest.mm
@@ -340,6 +340,10 @@
   // Wait for Quick Delete to disappear marking that the deletion has finished.
   [ChromeEarlGrey
       waitForUIElementToDisappearWithMatcher:ClearBrowsingDataView()];
+
+  // Wait for the tabs closure animation to finish if it's trigger by the
+  // deletion.
+  [ChromeEarlGreyUI waitForAppToIdle];
 }
 
 - (void)signIn {
@@ -585,7 +589,7 @@
       @"Incorrect local pref value.");
 
   // Tap the browsing data button.
-  [ChromeEarlGreyUI tapClearBrowsingDataMenuButton:ClearBrowsingDataButton()];
+  [self triggerDeletionFromQuickDelete];
 
   // Confirm that only after the user has gone through with the deletion, the
   // pref has been saved with the new value of last 15 minutes.
@@ -1005,10 +1009,7 @@
 
 // Tests that the selected value for the time range updates across all open
 // Quick Delete menus.
-//
-// TODO(crbug.com/370135677): This test has been flaking since around
-// 2024-09-25 on `ios-simulator-noncq`.
-- (void)DISABLED_testTimeRangeSelectionUpdatesInMultiwindow {
+- (void)testTimeRangeSelectionUpdatesInMultiwindow {
   if (![ChromeEarlGrey areMultipleWindowsSupported]) {
     EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened.");
   }
@@ -1084,7 +1085,7 @@
       assertWithMatcher:grey_sufficientlyVisible()];
 
   // Tap the browsing data button so the time range pref is saved.
-  [ChromeEarlGreyUI tapClearBrowsingDataMenuButton:ClearBrowsingDataButton()];
+  [self triggerDeletionFromQuickDelete];
 
   // Focus on the second window.
   [EarlGrey setRootMatcherForSubsequentInteractions:chrome_test_util::
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
index 2f00acc..562b3571 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
@@ -409,9 +409,9 @@
       l10n_util::GetNSString(IDS_IOS_SHOW_PASSKEY_CREATION_DATE);
   item.textFieldValue =
       passwordDetails.creationTime.has_value()
-          ? l10n_util::GetNSStringF(IDS_IOS_PASSKEY_CREATION_DATE,
-                                    base::TimeFormatShortDateNumeric(
-                                        *(passwordDetails.creationTime)))
+          ? l10n_util::GetNSStringF(
+                IDS_IOS_PASSKEY_CREATION_DATE,
+                base::TimeFormatShortDate(*(passwordDetails.creationTime)))
           : @"";
   item.textFieldEnabled = NO;
   item.autoCapitalizationType = UITextAutocapitalizationTypeNone;
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm
index 9d70aea..9c6edf583 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm
@@ -452,7 +452,7 @@
   CheckEditCellText(Username(), 0, 2);
   CheckEditCellText(
       l10n_util::GetNSStringF(IDS_IOS_PASSKEY_CREATION_DATE,
-                              base::TimeFormatShortDateNumeric(creation_time)),
+                              base::TimeFormatShortDate(creation_time)),
       0, 3);
 }
 
diff --git a/ios/chrome/browser/ui/sharing/activity_services/activities/request_desktop_or_mobile_site_activity_unittest.mm b/ios/chrome/browser/ui/sharing/activity_services/activities/request_desktop_or_mobile_site_activity_unittest.mm
index ec94248..fc04d80 100644
--- a/ios/chrome/browser/ui/sharing/activity_services/activities/request_desktop_or_mobile_site_activity_unittest.mm
+++ b/ios/chrome/browser/ui/sharing/activity_services/activities/request_desktop_or_mobile_site_activity_unittest.mm
@@ -26,8 +26,8 @@
 class RequestDesktopOrMobileSiteActivityTest : public PlatformTest {
  protected:
   RequestDesktopOrMobileSiteActivityTest() {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+    profile_ = TestProfileIOS::Builder().Build();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
     LensBrowserAgent::CreateForBrowser(browser_.get());
     WebNavigationBrowserAgent::CreateForBrowser(browser_.get());
     agent_ = WebNavigationBrowserAgent::FromBrowser(browser_.get());
@@ -57,7 +57,7 @@
 
   id mocked_handler_;
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<TestBrowser> browser_;
   raw_ptr<WebNavigationBrowserAgent> agent_;
   // Navigation manager for the web state at index 0 in `browser_`'s web state
diff --git a/ios/chrome/browser/ui/sharing/activity_services/activity_service_coordinator.mm b/ios/chrome/browser/ui/sharing/activity_services/activity_service_coordinator.mm
index c8dbe2dd..f500a7b3 100644
--- a/ios/chrome/browser/ui/sharing/activity_services/activity_service_coordinator.mm
+++ b/ios/chrome/browser/ui/sharing/activity_services/activity_service_coordinator.mm
@@ -91,10 +91,10 @@
       static_cast<id<BrowserCoordinatorCommands, FindInPageCommands>>(
           self.browser->GetCommandDispatcher());
 
-  ChromeBrowserState* browserState = self.browser->GetBrowserState();
-  self.incognito = browserState->IsOffTheRecord();
+  ProfileIOS* profile = self.browser->GetProfile();
+  self.incognito = profile->IsOffTheRecord();
   bookmarks::BookmarkModel* bookmarkModel =
-      ios::BookmarkModelFactory::GetForBrowserState(browserState);
+      ios::BookmarkModelFactory::GetForProfile(profile);
   id<BookmarksCommands> bookmarksHandler = HandlerForProtocol(
       self.browser->GetCommandDispatcher(), BookmarksCommands);
   id<HelpCommands> helpHandler =
@@ -108,7 +108,7 @@
                                       bookmarksHandler:bookmarksHandler
                                            helpHandler:helpHandler
                                    qrGenerationHandler:self.scopedHandler
-                                           prefService:browserState->GetPrefs()
+                                           prefService:profile->GetPrefs()
                                          bookmarkModel:bookmarkModel
                                     baseViewController:self.baseViewController
                                        navigationAgent:agent
diff --git a/ios/chrome/browser/ui/sharing/activity_services/canonical_url_retriever_unittest.mm b/ios/chrome/browser/ui/sharing/activity_services/canonical_url_retriever_unittest.mm
index 5427578b..78eab15 100644
--- a/ios/chrome/browser/ui/sharing/activity_services/canonical_url_retriever_unittest.mm
+++ b/ios/chrome/browser/ui/sharing/activity_services/canonical_url_retriever_unittest.mm
@@ -24,9 +24,9 @@
  public:
   CanonicalURLRetrieverTest()
       : web_client_(std::make_unique<web::FakeWebClient>()) {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
 
-    web::WebState::CreateParams params(browser_state_.get());
+    web::WebState::CreateParams params(profile_.get());
     web_state_ = web::WebState::Create(params);
     web_state_->GetView();
     web_state_->SetKeepRenderProcessAlive(true);
@@ -61,7 +61,7 @@
 
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<web::WebState> web_state_;
 
   // Used to verify histogram logging.
diff --git a/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder.mm b/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder.mm
index 244880c..8d75cc7f 100644
--- a/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder.mm
+++ b/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder.mm
@@ -66,12 +66,12 @@
        !helper->IsFindUIActive());
   NSString* tab_title = tab_util::GetTabTitle(web_state);
 
-  ChromeBrowserState* browser_state =
-      ChromeBrowserState::FromBrowserState(web_state->GetBrowserState());
+  ProfileIOS* profile =
+      ProfileIOS::FromBrowserState(web_state->GetBrowserState());
   ChromeAccountManagerService* account_manager_service =
-      ChromeAccountManagerServiceFactory::GetForBrowserState(browser_state);
+      ChromeAccountManagerServiceFactory::GetForProfile(profile);
   send_tab_to_self::SendTabToSelfSyncService* send_tab_to_self_service =
-      SendTabToSelfSyncServiceFactory::GetForProfile(browser_state);
+      SendTabToSelfSyncServiceFactory::GetForProfile(profile);
   BOOL can_send_tab_to_self =
       account_manager_service &&
       send_tab_to_self_service &&
diff --git a/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder_unittest.mm b/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder_unittest.mm
index 6d93bc1d..2fe3dd0 100644
--- a/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder_unittest.mm
+++ b/ios/chrome/browser/ui/sharing/activity_services/data/share_to_data_builder_unittest.mm
@@ -35,7 +35,7 @@
 class ShareToDataBuilderTest : public PlatformTest {
  public:
   ShareToDataBuilderTest() {
-    chrome_browser_state_ = TestChromeBrowserState::Builder().Build();
+    profile_ = TestProfileIOS::Builder().Build();
 
     auto navigation_manager = std::make_unique<web::FakeNavigationManager>();
     navigation_manager->AddItem(GURL(kExpectedUrl), ui::PAGE_TRANSITION_TYPED);
@@ -45,7 +45,7 @@
 
     web_state_ = std::make_unique<web::FakeWebState>();
     web_state_->SetNavigationManager(std::move(navigation_manager));
-    web_state_->SetBrowserState(chrome_browser_state_.get());
+    web_state_->SetBrowserState(profile_.get());
     web_state_->SetVisibleURL(GURL(kExpectedUrl));
 
     // Attach SnapshotTabHelper to allow snapshot generation.
@@ -71,7 +71,7 @@
  private:
   FakeSnapshotGeneratorDelegate* delegate_ = nil;
   web::WebTaskEnvironment task_environment_;
-  std::unique_ptr<ChromeBrowserState> chrome_browser_state_;
+  std::unique_ptr<ProfileIOS> profile_;
   std::unique_ptr<web::FakeWebState> web_state_;
 };
 
diff --git a/ios/chrome/browser/ui/sharing/qr_generator/qr_generator_coordinator_unittest.mm b/ios/chrome/browser/ui/sharing/qr_generator/qr_generator_coordinator_unittest.mm
index b6686a2..c56fac09 100644
--- a/ios/chrome/browser/ui/sharing/qr_generator/qr_generator_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/sharing/qr_generator/qr_generator_coordinator_unittest.mm
@@ -24,8 +24,8 @@
 class QRGeneratorCoordinatorTest : public PlatformTest {
  protected:
   QRGeneratorCoordinatorTest() {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
-    browser_ = std::make_unique<TestBrowser>(browser_state_.get());
+    profile_ = TestProfileIOS::Builder().Build();
+    browser_ = std::make_unique<TestBrowser>(profile_.get());
     base_view_controller_ = [[UIViewController alloc] init];
     [scoped_key_window_.Get() setRootViewController:base_view_controller_];
   }
@@ -52,7 +52,7 @@
   }
 
   base::test::TaskEnvironment task_environment_;
-  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<TestProfileIOS> profile_;
   std::unique_ptr<TestBrowser> browser_;
   id mock_qr_generation_commands_handler_;
   ScopedKeyWindow scoped_key_window_;
diff --git a/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm b/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm
index 407911789..ced3ca9 100644
--- a/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm
@@ -97,7 +97,7 @@
   test_web_state->SetNavigationManager(
       std::make_unique<web::FakeNavigationManager>());
   test_web_state->SetCurrentURL(test_url);
-  test_web_state->SetBrowserState(browser_->GetBrowserState());
+  test_web_state->SetBrowserState(browser_->GetProfile());
 
   auto frames_manager = std::make_unique<web::FakeWebFramesManager>();
   web::FakeWebFramesManager* frames_manager_ptr = frames_manager.get();
diff --git a/ios/chrome/common/credential_provider/archivable_credential.mm b/ios/chrome/common/credential_provider/archivable_credential.mm
index 6768b64..716e02a6 100644
--- a/ios/chrome/common/credential_provider/archivable_credential.mm
+++ b/ios/chrome/common/credential_provider/archivable_credential.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/common/credential_provider/archivable_credential.h"
 
 #import "base/check.h"
+#import "base/time/time.h"
 
 namespace {
 
@@ -164,10 +165,17 @@
   return self;
 }
 
+#pragma mark - Credential
+
 - (BOOL)isPasskey {
   return self.credentialId.length > 0;
 }
 
+- (NSDate*)creationDate {
+  base::TimeDelta timeInterval = base::Milliseconds(self.creationTime);
+  return [NSDate dateWithTimeIntervalSince1970:timeInterval.InSeconds()];
+}
+
 // TODO(crbug.com/330355124): Convenience getter to have a valid URL for
 // passkeys. Remove once all passkey related uses have been removed.
 - (NSString*)serviceName {
@@ -180,6 +188,8 @@
   return self.isPasskey ? _rpId : _serviceIdentifier;
 }
 
+#pragma mark - NSObject
+
 - (BOOL)isEqual:(id)other {
   if (other == self) {
     return YES;
diff --git a/ios/chrome/common/credential_provider/credential.h b/ios/chrome/common/credential_provider/credential.h
index 125583e..9b14b82 100644
--- a/ios/chrome/common/credential_provider/credential.h
+++ b/ios/chrome/common/credential_provider/credential.h
@@ -61,15 +61,18 @@
 // Passkey encrypted. Used by passkeys only.
 @property(nonatomic, readonly) NSData* encrypted;
 
-// Passkey creation time. Used by passkeys only.
+// Passkey creation time in milliseconds. Used by passkeys only.
 @property(nonatomic, readonly) int64_t creationTime;
 
-// Passkey last used time. Used by passkeys only.
+// Passkey last used time in microseconds. Used by passkeys only.
 @property(nonatomic, assign) int64_t lastUsedTime;
 
 // Whether the credential is a passkey.
 - (BOOL)isPasskey;
 
+// Converts and returns the creation time as an NSDate.
+- (NSDate*)creationDate;
+
 @end
 
 #endif  // IOS_CHROME_COMMON_CREDENTIAL_PROVIDER_CREDENTIAL_H_
diff --git a/ios/chrome/credential_provider_extension/ui/BUILD.gn b/ios/chrome/credential_provider_extension/ui/BUILD.gn
index 84e3ce9..2e398c201 100644
--- a/ios/chrome/credential_provider_extension/ui/BUILD.gn
+++ b/ios/chrome/credential_provider_extension/ui/BUILD.gn
@@ -9,6 +9,7 @@
     "consent_view_controller.h",
     "consent_view_controller.mm",
     "credential_details_consumer.h",
+    "credential_details_view_controller+Testing.h",
     "credential_details_view_controller.h",
     "credential_details_view_controller.mm",
     "credential_list_coordinator.h",
@@ -162,6 +163,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "credential_details_view_controller_unittest.mm",
     "credential_list_coordinator_unittest.mm",
     "credential_list_mediator+Testing.h",
     "credential_list_mediator_unittest.mm",
diff --git a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller+Testing.h b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller+Testing.h
new file mode 100644
index 0000000..34eacc6
--- /dev/null
+++ b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller+Testing.h
@@ -0,0 +1,17 @@
+// 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_CREDENTIAL_PROVIDER_EXTENSION_UI_CREDENTIAL_DETAILS_VIEW_CONTROLLER_TESTING_H_
+#define IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_UI_CREDENTIAL_DETAILS_VIEW_CONTROLLER_TESTING_H_
+
+// Testing category exposing a private method of CredentialDetailsViewController
+// for tests.
+@interface CredentialDetailsViewController (Testing)
+
+// Formats and returns the passkey creation date to be displayed in the UI.
+- (NSString*)formattedDateForPasskeyCreationDate:(NSDate*)creationDate;
+
+@end
+
+#endif  // IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_UI_CREDENTIAL_DETAILS_VIEW_CONTROLLER_TESTING_H_
diff --git a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
index 2816118..066a339b 100644
--- a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
+++ b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
@@ -324,14 +324,24 @@
   return enterButton;
 }
 
+// Returns the string to display as passkey creation date.
 - (NSString*)creationDate {
+  NSString* formattedDate =
+      [self formattedDateForPasskeyCreationDate:self.credential.creationDate];
   NSString* baseLocalizedString = NSLocalizedString(
       @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_CREATION_DATE", @"00/00/00");
-  // TODO(crbug.com/330355124): Format the date properly.
-  NSString* date =
-      [NSString stringWithFormat:@"%lld", self.credential.creationTime];
-  return [baseLocalizedString stringByReplacingOccurrencesOfString:@"$1"
-                                                        withString:date];
+
+  return
+      [baseLocalizedString stringByReplacingOccurrencesOfString:@"$1"
+                                                     withString:formattedDate];
+  ;
+}
+
+// Formats and returns the passkey creation date to be displayed in the UI.
+- (NSString*)formattedDateForPasskeyCreationDate:(NSDate*)creationDate {
+  return [NSDateFormatter localizedStringFromDate:creationDate
+                                        dateStyle:NSDateFormatterMediumStyle
+                                        timeStyle:NSDateFormatterNoStyle];
 }
 
 // Returns the string to display as password.
diff --git a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller_unittest.mm b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller_unittest.mm
new file mode 100644
index 0000000..e90f33a
--- /dev/null
+++ b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller_unittest.mm
@@ -0,0 +1,124 @@
+// 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/credential_provider_extension/ui/credential_details_view_controller.h"
+
+#import "ios/chrome/common/credential_provider/archivable_credential.h"
+#import "ios/chrome/credential_provider_extension/ui/credential_details_view_controller+Testing.h"
+#import "testing/gtest_mac.h"
+#import "testing/platform_test.h"
+
+namespace {
+
+// Time in seconds that represent January 1st 2024.
+constexpr int64_t kJan1st2024 = 1704085200;
+
+// Converts the given `seconds` to milliseconds.
+int64_t SecondsToMilliseconds(int64_t seconds) {
+  return seconds * 1000;
+}
+
+// Converts the given `seconds` to microseconds.
+int64_t SecondsToMicroseconds(int64_t seconds) {
+  return seconds * 1000000;
+}
+
+// Creates a data object from the given `str`.
+NSData* StringToData(std::string str) {
+  return [NSData dataWithBytes:str.data() length:str.length()];
+}
+
+// Creates a test passkey.
+ArchivableCredential* TestPasskeyCredential() {
+  return [[ArchivableCredential alloc]
+       initWithFavicon:@"favicon"
+                  gaia:nil
+      recordIdentifier:@"recordIdentifier"
+                syncId:StringToData("syncId")
+              username:@"username"
+       userDisplayName:@"userDisplayName"
+                userId:StringToData("userId")
+          credentialId:StringToData("credentialId")
+                  rpId:@"rpId"
+            privateKey:StringToData("privateKey")
+             encrypted:StringToData("encrypted")
+          creationTime:SecondsToMilliseconds(kJan1st2024)
+          lastUsedTime:SecondsToMicroseconds(kJan1st2024)];
+}
+
+// Checks that de text and detail text of the given `cell` are as expected.
+void CheckCell(UITableViewCell* cell,
+               NSString* expected_text,
+               NSString* expected_detail_text) {
+  EXPECT_NSEQ(cell.textLabel.text, expected_text);
+  EXPECT_NSEQ(cell.detailTextLabel.text, expected_detail_text);
+}
+
+}  // namespace
+
+class CredentialDetailsViewControllerTest : public PlatformTest {
+ public:
+  void SetUp() override {}
+
+  // Sets `controller_` if needed and returns it.
+  CredentialDetailsViewController* controller() {
+    if (controller_) {
+      return controller_;
+    }
+
+    controller_ = [[CredentialDetailsViewController alloc] init];
+    return controller_;
+  }
+
+  // Returns the table view cell found at the given `section` and `row`.
+  UITableViewCell* GetTableViewCell(int section, int row) {
+    NSIndexPath* index_path = [NSIndexPath indexPathForRow:row
+                                                 inSection:section];
+    UITableViewCell* cell =
+        [controller().tableView.dataSource tableView:controller().tableView
+                               cellForRowAtIndexPath:index_path];
+    return cell;
+  }
+
+ private:
+  CredentialDetailsViewController* controller_;
+};
+
+// Tests that a passkey is displayed properly.
+TEST_F(CredentialDetailsViewControllerTest, TestPasskeyPresentation) {
+  id<Credential> credential = TestPasskeyCredential();
+  [controller() presentCredential:credential];
+
+  // Check that the table view has the exepected number of sections and rows.
+  UITableView* table_view = controller().tableView;
+  EXPECT_EQ([table_view numberOfSections], 1);
+  EXPECT_EQ([table_view numberOfRowsInSection:0], 4);
+
+  // Check that the content of every table view cell is as expected.
+  CheckCell(GetTableViewCell(0, 0), @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_URL",
+            credential.serviceIdentifier);
+  CheckCell(GetTableViewCell(0, 1),
+            @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_USERNAME",
+            credential.username);
+  CheckCell(GetTableViewCell(0, 2),
+            @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_USER_DISPLAY_NAME",
+            credential.userDisplayName);
+  CheckCell(GetTableViewCell(0, 3),
+            @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_SHOW_CREATION_DATE",
+            @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_CREATION_DATE");
+}
+
+// Tests that converting the passkey creation time to a formatted date gives the
+// expected result.
+TEST_F(CredentialDetailsViewControllerTest,
+       TestFormattedDateForPasskeyCreationTime) {
+  id<Credential> credential = TestPasskeyCredential();
+  NSString* expected_formatted_date = [NSDateFormatter
+      localizedStringFromDate:[NSDate dateWithTimeIntervalSince1970:kJan1st2024]
+                    dateStyle:NSDateFormatterMediumStyle
+                    timeStyle:NSDateFormatterNoStyle];
+  EXPECT_NSEQ([controller()
+                  formattedDateForPasskeyCreationDate:credential.creationDate],
+              expected_formatted_date);
+}
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn
index dadadd3c..100cf85d 100644
--- a/ios/chrome/test/BUILD.gn
+++ b/ios/chrome/test/BUILD.gn
@@ -254,6 +254,7 @@
     "//ios/chrome/browser/download/ui_bundled:unit_tests",
     "//ios/chrome/browser/drive/model:unit_tests",
     "//ios/chrome/browser/drive_file_picker/coordinator:unit_tests",
+    "//ios/chrome/browser/enterprise/connectors:unit_tests",
     "//ios/chrome/browser/enterprise/model/idle:unit_tests",
     "//ios/chrome/browser/favicon/model:unit_tests",
     "//ios/chrome/browser/feature_engagement/model:unit_tests",
diff --git a/ios/public/provider/chrome/browser/build_config.gni b/ios/public/provider/chrome/browser/build_config.gni
index 7d3f08f..07dca44 100644
--- a/ios/public/provider/chrome/browser/build_config.gni
+++ b/ios/public/provider/chrome/browser/build_config.gni
@@ -26,6 +26,9 @@
   # copied to the application bundle.
   ios_providers_resources_targets = []
 
+  # This defines targets that provides ressources for the cpe provider.
+  ios_providers_cpe_resources_targets = []
+
   # This defines targets to include resources needed by the providers which are
   # copied to the test application bundle.
   ios_providers_test_resources_targets = []
diff --git a/ios_internal b/ios_internal
index f17fd6e..c7ca556 160000
--- a/ios_internal
+++ b/ios_internal
@@ -1 +1 @@
-Subproject commit f17fd6e8cd1a625d259c96d0dfcfdd41b0687ef1
+Subproject commit c7ca556bc732c861810971db63ceffa352c2442e
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
index e59c712..7613c9c2 100644
--- a/media/base/video_frame.cc
+++ b/media/base/video_frame.cc
@@ -456,7 +456,7 @@
 #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
 scoped_refptr<VideoFrame> VideoFrame::WrapOOPVDMailbox(
     VideoPixelFormat format,
-    const gpu::MailboxHolder& mailbox_holder,
+    const gpu::Mailbox& mailbox,
     ReleaseMailboxCB mailbox_holder_release_cb,
     const gfx::Size& coded_size,
     const gfx::Rect& visible_rect,
@@ -468,7 +468,12 @@
     return nullptr;
   }
 
-  frame->mailbox_holder_ = mailbox_holder;
+  // `mailbox` is not backed by a GPU texture, so using a texture target of 0
+  // is fine.
+  constexpr uint32_t kTextureTarget = 0;
+
+  frame->mailbox_holder_ =
+      gpu::MailboxHolder(mailbox, gpu::SyncToken(), kTextureTarget);
   frame->mailbox_holder_and_gmb_release_cb_ =
       WrapReleaseMailboxCB(std::move(mailbox_holder_release_cb));
 
diff --git a/media/base/video_frame.h b/media/base/video_frame.h
index 0610c6bb..79a84ff 100644
--- a/media/base/video_frame.h
+++ b/media/base/video_frame.h
@@ -247,7 +247,7 @@
   // argument when the VideoFrame is to be destroyed.
   static scoped_refptr<VideoFrame> WrapOOPVDMailbox(
       VideoPixelFormat format,
-      const gpu::MailboxHolder& mailbox_holder,
+      const gpu::Mailbox& mailbox,
       ReleaseMailboxCB mailbox_holder_release_cb,
       const gfx::Size& coded_size,
       const gfx::Rect& visible_rect,
diff --git a/media/gpu/chromeos/registered_mailbox_frame_converter.cc b/media/gpu/chromeos/registered_mailbox_frame_converter.cc
index a41940f..5227fed 100644
--- a/media/gpu/chromeos/registered_mailbox_frame_converter.cc
+++ b/media/gpu/chromeos/registered_mailbox_frame_converter.cc
@@ -38,14 +38,9 @@
   // safely dropped at the end of this function.
   const gpu::Mailbox mailbox = registry_->RegisterFrame(frame);
 
-  // |mailbox| is not backed by a GPU texture, so using a texture target of 0
-  // is fine.
-  constexpr uint32_t kTextureTarget = 0;
-  gpu::MailboxHolder mailbox_holder(mailbox, gpu::SyncToken(), kTextureTarget);
-
   // Creates a mailbox-backed VideoFrame with |mailbox| and |frame|'s metadata.
   scoped_refptr<VideoFrame> mailbox_frame = VideoFrame::WrapOOPVDMailbox(
-      frame->format(), mailbox_holder, VideoFrame::ReleaseMailboxCB(),
+      frame->format(), mailbox, VideoFrame::ReleaseMailboxCB(),
       frame->coded_size(), frame->visible_rect(), frame->natural_size(),
       frame->timestamp());
   if (!mailbox_frame) {
diff --git a/media/mojo/mojom/media_types.mojom b/media/mojo/mojom/media_types.mojom
index 4149df3..4b31509 100644
--- a/media/mojo/mojom/media_types.mojom
+++ b/media/mojo/mojom/media_types.mojom
@@ -5,7 +5,7 @@
 module media.mojom;
 
 import "gpu/ipc/common/exported_shared_image.mojom";
-import "gpu/ipc/common/mailbox_holder.mojom";
+import "gpu/ipc/common/mailbox.mojom";
 import "gpu/ipc/common/sync_token.mojom";
 import "gpu/ipc/common/vulkan_ycbcr_info.mojom";
 import "media/mojo/mojom/audio_data.mojom";
@@ -493,8 +493,7 @@
 [EnableIf=is_linux_or_chromeos]
 // This defines video frame data stored in texture mailbox.
 struct MailboxVideoFrameData {
-  gpu.mojom.MailboxHolder mailbox_holder;
-  gpu.mojom.VulkanYCbCrInfo? ycbcr_data;
+  gpu.mojom.Mailbox mailbox;
 };
 
 // This defines video frame data stored in texture shared images.
diff --git a/media/mojo/mojom/video_frame_mojom_traits.cc b/media/mojo/mojom/video_frame_mojom_traits.cc
index de2be8c..e2ad6ecc 100644
--- a/media/mojo/mojom/video_frame_mojom_traits.cc
+++ b/media/mojo/mojom/video_frame_mojom_traits.cc
@@ -161,7 +161,7 @@
     } else {
       return media::mojom::VideoFrameData::NewMailboxData(
           media::mojom::MailboxVideoFrameData::New(
-              std::move(mailbox_holder), std::move(input->ycbcr_info())));
+              std::move(mailbox_holder.mailbox)));
 #endif  // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
     }
   }
@@ -365,18 +365,14 @@
     media::mojom::MailboxVideoFrameDataDataView mailbox_data;
     data.GetMailboxDataDataView(&mailbox_data);
 
-    gpu::MailboxHolder mailbox_holder;
-    if (!mailbox_data.ReadMailboxHolder(&mailbox_holder))
+    gpu::Mailbox mailbox;
+    if (!mailbox_data.ReadMailbox(&mailbox)) {
       return false;
-
-    std::optional<gpu::VulkanYCbCrInfo> ycbcr_info;
-    if (!mailbox_data.ReadYcbcrData(&ycbcr_info))
-      return false;
+    }
 
     frame = media::VideoFrame::WrapOOPVDMailbox(
-        format, mailbox_holder, media::VideoFrame::ReleaseMailboxCB(),
-        coded_size, visible_rect, natural_size, timestamp);
-    frame->set_ycbcr_info(ycbcr_info);
+        format, mailbox, media::VideoFrame::ReleaseMailboxCB(), coded_size,
+        visible_rect, natural_size, timestamp);
 #endif  // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
   } else if (data.is_shared_image_data()) {
     media::mojom::SharedImageVideoFrameDataDataView shared_image_data;
diff --git a/media/mojo/mojom/video_frame_mojom_traits_unittest.cc b/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
index af80964..3a06b80 100644
--- a/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
+++ b/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
@@ -220,9 +220,8 @@
 #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
 TEST_F(VideoFrameStructTraitsTest, OOPVDMailboxVideoFrame) {
   gpu::Mailbox mailbox = gpu::Mailbox::Generate();
-  gpu::MailboxHolder mailbox_holder(mailbox, gpu::SyncToken(), 0);
   scoped_refptr<VideoFrame> frame = VideoFrame::WrapOOPVDMailbox(
-      PIXEL_FORMAT_ARGB, mailbox_holder, VideoFrame::ReleaseMailboxCB(),
+      PIXEL_FORMAT_ARGB, mailbox, VideoFrame::ReleaseMailboxCB(),
       gfx::Size(100, 100), gfx::Rect(10, 10, 80, 80), gfx::Size(200, 100),
       base::Seconds(100));
 
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 64154f3..c7f3620 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -1994,12 +1994,23 @@
             "Net.HttpJob.IpProtection.AllowListMatch.PrefilterBytesRead.Net",
             prefilter_bytes_read(), 1, 50000000, 50);
       }
-      if (response_info_->proxy_chain.is_for_ip_protection()) {
+
+      auto& proxy_chain = response_info_->proxy_chain;
+      bool direct_only = net::features::kIpPrivacyDirectOnly.Get();
+      // To enable measuring how much traffic would be proxied (for
+      // experimentation and planning purposes), treat use of the direct
+      // proxy chain as success only when `kIpPrivacyDirectOnly` is
+      // true. When it is false, we only care about traffic that actually went
+      // through the IP Protection proxies, so a direct chain must be a
+      // fallback.
+      bool protection_success = proxy_chain.is_for_ip_protection() &&
+                                (!proxy_chain.is_direct() || direct_only);
+      if (protection_success) {
         base::UmaHistogramTimes("Net.HttpJob.IpProtection.TotalTimeNotCached",
                                 total_time);
         // Log specific times for non-zero chains. The zero chain is the
         // default and is still counted in the base `TotalTimeNotCached`.
-        int chain_id = response_info_->proxy_chain.ip_protection_chain_id();
+        int chain_id = proxy_chain.ip_protection_chain_id();
         if (chain_id != ProxyChain::kNotIpProtectionChainId) {
           UmaHistogramTimes(
               base::StrCat({"Net.HttpJob.IpProtection.TotalTimeNotCached.Chain",
@@ -2026,6 +2037,20 @@
         base::UmaHistogramMediumTimes(
             "Net.HttpJob.TotalTimeNotCached.Secure.Quic", total_time);
       }
+
+      // Log the result of an IP-Protected request.
+      IpProtectionJobResult ipp_result;
+      if (proxy_chain.is_for_ip_protection()) {
+        if (protection_success) {
+          ipp_result = IpProtectionJobResult::kProtectionSuccess;
+        } else {
+          ipp_result = IpProtectionJobResult::kDirectFallback;
+        }
+      } else {
+        ipp_result = IpProtectionJobResult::kProtectionNotAttempted;
+      }
+      base::UmaHistogramEnumeration("Net.HttpJob.IpProtection.JobResult",
+                                    ipp_result);
     }
   }
 
diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h
index dc3e7ca..0faac95 100644
--- a/net/url_request/url_request_http_job.h
+++ b/net/url_request/url_request_http_job.h
@@ -62,6 +62,20 @@
   void SetIsSharedDictionaryReadAllowedCallback(
       base::RepeatingCallback<bool()> callback) override;
 
+  // An enumeration of the results of a request with respect to IP Protection.
+  // These values are persisted to logs. Entries should not be renumbered and
+  // numeric values should never be reused.
+  enum class IpProtectionJobResult {
+    // Request was not IP Protected.
+    kProtectionNotAttempted = 0,
+    // Request was IP Protected and carried via IP Protection proxies or, if
+    // the direct-only parameter is true, made directly.
+    kProtectionSuccess = 1,
+    // Request was IP Protected, but fell back to direct.
+    kDirectFallback = 2,
+    kMaxValue = kDirectFallback,
+  };
+
  protected:
   URLRequestHttpJob(URLRequest* request,
                     const HttpUserAgentSettings* http_user_agent_settings);
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
index aa067a91..f70f3ac8 100644
--- a/net/url_request/url_request_http_job_unittest.cc
+++ b/net/url_request/url_request_http_job_unittest.cc
@@ -348,9 +348,14 @@
   EXPECT_EQ(CountReadBytes(reads), request->GetTotalReceivedBytes());
 }
 
-// Test that for direct requests that are marked as being for IP Protection, the
-// IP Protection-specific metrics get recorded as expected.
-TEST_F(URLRequestHttpJobWithProxyTest, IpProtectionDirectProxyMetricsRecorded) {
+// Test that the IP Protection-specific metrics get recorded as expected when
+// the direct-only param is enabled.
+TEST_F(URLRequestHttpJobWithProxyTest,
+       IpProtectionDirectOnlyProxyMetricsRecorded) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      net::features::kEnableIpProtectionProxy,
+      {{net::features::kIpPrivacyDirectOnly.name, "true"}});
   const auto kIpProtectionDirectChain =
       ProxyChain::ForIpProtection(std::vector<ProxyServer>());
 
@@ -397,6 +402,62 @@
   histogram_tester.ExpectUniqueSample(
       "Net.HttpJob.IpProtection.PrefilterBytesRead.Net",
       /*sample=*/12, /*expected_bucket_count=*/1);
+
+  histogram_tester.ExpectUniqueSample(
+      "Net.HttpJob.IpProtection.JobResult",
+      /*sample=*/URLRequestHttpJob::IpProtectionJobResult::kProtectionSuccess,
+      /*expected_bucket_count=*/1);
+}
+
+// Test that IP Protection-specific metrics are NOT recorded for direct requests
+// when the direct-only param is disabled.
+TEST_F(URLRequestHttpJobWithProxyTest, IpProtectionDirectProxyMetricsRecorded) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      net::features::kEnableIpProtectionProxy,
+      {{net::features::kIpPrivacyDirectOnly.name, "false"}});
+  const auto kIpProtectionDirectChain =
+      ProxyChain::ForIpProtection(std::vector<ProxyServer>());
+
+  std::unique_ptr<ProxyResolutionService> proxy_resolution_service =
+      ConfiguredProxyResolutionService::CreateFixedForTest(
+          "https://not-used:70", TRAFFIC_ANNOTATION_FOR_TESTS);
+  auto proxy_delegate = std::make_unique<TestProxyDelegate>();
+  proxy_delegate->set_proxy_chain(kIpProtectionDirectChain);
+  proxy_resolution_service->SetProxyDelegate(proxy_delegate.get());
+
+  MockWrite writes[] = {MockWrite(kSimpleGetMockWrite)};
+
+  MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n"
+                               "Content-Length: 12\r\n\r\n"),
+                      MockRead("Test Content")};
+
+  StaticSocketDataProvider socket_data(reads, writes);
+
+  URLRequestHttpJobWithProxy http_job_with_proxy(
+      std::move(proxy_resolution_service));
+  http_job_with_proxy.socket_factory_.AddSocketDataProvider(&socket_data);
+
+  TestDelegate delegate;
+  base::HistogramTester histogram_tester;
+  std::unique_ptr<URLRequest> request =
+      http_job_with_proxy.context_->CreateRequest(
+          GURL("http://www.example.com"), DEFAULT_PRIORITY, &delegate,
+          TRAFFIC_ANNOTATION_FOR_TESTS);
+
+  request->Start();
+  ASSERT_TRUE(request->is_pending());
+  delegate.RunUntilComplete();
+
+  EXPECT_THAT(delegate.request_status(), IsOk());
+  EXPECT_EQ(kIpProtectionDirectChain, request->proxy_chain());
+  EXPECT_EQ(12, request->received_response_content_length());
+  EXPECT_EQ(CountWriteBytes(writes), request->GetTotalSentBytes());
+  EXPECT_EQ(CountReadBytes(reads), request->GetTotalReceivedBytes());
+
+  histogram_tester.ExpectTotalCount("Net.HttpJob.IpProtection.BytesSent", 0);
+  histogram_tester.ExpectTotalCount(
+      "Net.HttpJob.IpProtection.PrefilterBytesRead.Net", 0);
 }
 
 class URLRequestHttpJobTest : public TestWithTaskEnvironment {
diff --git a/services/network/attribution/attribution_request_helper.cc b/services/network/attribution/attribution_request_helper.cc
index 5149614e..07b993f 100644
--- a/services/network/attribution/attribution_request_helper.cc
+++ b/services/network/attribution/attribution_request_helper.cc
@@ -65,11 +65,12 @@
 }
 
 // https://wicg.github.io/attribution-reporting-api/#mark-a-request-for-attribution-reporting-eligibility
-void SetAttributionReportingHeaders(net::URLRequest& url_request,
-                                    const ResourceRequest& request) {
+net::HttpRequestHeaders ComputeAttributionReportingHeaders(
+    const ResourceRequest& request) {
+  net::HttpRequestHeaders headers;
   if (request.attribution_reporting_eligibility ==
       AttributionReportingEligibility::kUnset) {
-    return;
+    return headers;
   }
 
   const bool is_attribution_reporting_support_set =
@@ -89,9 +90,8 @@
       AttributionReportingHeaderGreaseOptions::FromBits(grease_bits & 0xff));
   grease_bits >>= 8;
 
-  url_request.SetExtraRequestHeaderByName("Attribution-Reporting-Eligible",
-                                          std::move(eligible_header),
-                                          /*overwrite=*/true);
+  headers.SetHeader("Attribution-Reporting-Eligible",
+                    std::move(eligible_header));
 
   if (base::FeatureList::IsEnabled(
           features::kAttributionReportingCrossAppWeb)) {
@@ -99,16 +99,16 @@
                                   request.attribution_reporting_support);
 
     if (is_attribution_reporting_support_set) {
-      url_request.SetExtraRequestHeaderByName(
-          "Attribution-Reporting-Support",
-          GetAttributionSupportHeader(
-              request.attribution_reporting_support,
-              AttributionReportingHeaderGreaseOptions::FromBits(grease_bits &
-                                                                0xff)),
-          /*overwrite=*/true);
+      headers.SetHeader("Attribution-Reporting-Support",
+                        GetAttributionSupportHeader(
+                            request.attribution_reporting_support,
+                            AttributionReportingHeaderGreaseOptions::FromBits(
+                                grease_bits & 0xff)));
       grease_bits >>= 8;
     }
   }
+
+  return headers;
 }
 
 }  // namespace network
diff --git a/services/network/attribution/attribution_request_helper.h b/services/network/attribution/attribution_request_helper.h
index df28676b..55a6d29 100644
--- a/services/network/attribution/attribution_request_helper.h
+++ b/services/network/attribution/attribution_request_helper.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/functional/callback_forward.h"
+#include "net/http/http_request_headers.h"
 #include "services/network/public/mojom/attribution.mojom-forward.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
 
@@ -59,9 +60,10 @@
   explicit AttributionRequestHelper();
 };
 
-// Sets the Attribution Reporting request headers on attribution eligible
+// Computes the Attribution Reporting request headers on attribution eligible
 // requests. See https://github.com/WICG/attribution-reporting-api.
-void SetAttributionReportingHeaders(net::URLRequest&, const ResourceRequest&);
+net::HttpRequestHeaders ComputeAttributionReportingHeaders(
+    const ResourceRequest&);
 
 }  // namespace network
 
diff --git a/services/network/attribution/attribution_request_helper_unittest.cc b/services/network/attribution/attribution_request_helper_unittest.cc
index 3f5c7e10..c26a75f 100644
--- a/services/network/attribution/attribution_request_helper_unittest.cc
+++ b/services/network/attribution/attribution_request_helper_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
+#include "net/http/http_request_headers.h"
 #include "net/http/structured_headers.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/redirect_info.h"
@@ -163,15 +164,13 @@
 
 TEST_F(AttributionRequestHelperTest, SetAttributionReportingHeaders) {
   {
-    std::unique_ptr<net::URLRequest> request =
-        CreateTestUrlRequest(/*to_url=*/example_valid_request_url_);
-
     ResourceRequest resource_request;
     resource_request.attribution_reporting_eligibility =
         AttributionReportingEligibility::kUnset;
-    SetAttributionReportingHeaders(*request, resource_request);
-    EXPECT_FALSE(request->extra_request_headers().HasHeader(
-        kAttributionReportingEligible));
+    net::HttpRequestHeaders headers =
+        ComputeAttributionReportingHeaders(resource_request);
+
+    EXPECT_FALSE(headers.HasHeader(kAttributionReportingEligible));
   }
 
   const struct {
@@ -199,15 +198,12 @@
   for (const auto& test_case : kTestCases) {
     SCOPED_TRACE(test_case.eligibility);
 
-    std::unique_ptr<net::URLRequest> request =
-        CreateTestUrlRequest(/*to_url=*/example_valid_request_url_);
-
     ResourceRequest resource_request;
     resource_request.attribution_reporting_eligibility = test_case.eligibility;
-    SetAttributionReportingHeaders(*request, resource_request);
+    net::HttpRequestHeaders headers =
+        ComputeAttributionReportingHeaders(resource_request);
 
-    std::string actual = request->extra_request_headers()
-                             .GetHeader(kAttributionReportingEligible)
+    std::string actual = headers.GetHeader(kAttributionReportingEligible)
                              .value_or(std::string());
 
     auto dict = net::structured_headers::ParseDictionary(actual);
@@ -248,17 +244,14 @@
   };
 
   for (const auto& test_case : kTestCases) {
-    std::unique_ptr<net::URLRequest> request =
-        CreateTestUrlRequest(/*to_url=*/example_valid_request_url_);
-
     ResourceRequest resource_request;
     resource_request.attribution_reporting_eligibility =
         AttributionReportingEligibility::kEventSource;
     resource_request.attribution_reporting_support = test_case.support;
-    SetAttributionReportingHeaders(*request, resource_request);
+    net::HttpRequestHeaders headers =
+        ComputeAttributionReportingHeaders(resource_request);
 
-    std::string actual = request->extra_request_headers()
-                             .GetHeader(kAttributionReportingEligible)
+    std::string actual = headers.GetHeader(kAttributionReportingEligible)
                              .value_or(std::string());
 
     auto dict = net::structured_headers::ParseDictionary(actual);
diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h
index a5baa9c0..871ac2db4 100644
--- a/services/network/cookie_settings.h
+++ b/services/network/cookie_settings.h
@@ -59,10 +59,6 @@
     block_third_party_cookies_ = block_third_party_cookies;
   }
 
-  bool are_third_party_cookies_blocked() const {
-    return block_third_party_cookies_;
-  }
-
   void set_secure_origin_cookies_allowed_schemes(
       const std::vector<std::string>& secure_origin_cookies_allowed_schemes) {
     secure_origin_cookies_allowed_schemes_.clear();
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
index 2b6a585..6434cd7 100644
--- a/services/network/url_loader.cc
+++ b/services/network/url_loader.cc
@@ -707,6 +707,7 @@
   // They are non-empty when the values are given by the UA code, therefore
   // they should be ignored by CORS checks.
   net::HttpRequestHeaders merged_headers = request.headers;
+  merged_headers.MergeFrom(ComputeAttributionReportingHeaders(request));
   merged_headers.MergeFrom(request.cors_exempt_headers);
 
   // This should be ensured by the CorsURLLoaderFactory(), which is called
@@ -743,8 +744,6 @@
                           has_user_activation_, request_destination_, nullptr,
                           *factory_params_, *origin_access_list_);
 
-  SetAttributionReportingHeaders(*url_request_, request);
-
   if (request.update_first_party_url_on_redirect) {
     url_request_->set_first_party_url_policy(
         net::RedirectInfo::FirstPartyURLPolicy::UPDATE_URL_ON_REDIRECT);
diff --git a/testing/buildbot/chromium.angle.json b/testing/buildbot/chromium.angle.json
index 11bc096..602ceca2 100644
--- a/testing/buildbot/chromium.angle.json
+++ b/testing/buildbot/chromium.angle.json
@@ -686,7 +686,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -716,7 +716,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -742,6 +742,8 @@
           "1002",
           "--expected-device-id",
           "67ef",
+          "--expected-device-id",
+          "7340",
           "--jobs=4"
         ],
         "merge": {
@@ -757,7 +759,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -795,7 +797,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -835,7 +837,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -873,7 +875,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -912,7 +914,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -950,7 +952,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -987,7 +989,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index 010097cb..17a86aec 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -17522,7 +17522,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17550,7 +17550,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17582,7 +17582,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17604,7 +17604,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17630,7 +17630,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17658,7 +17658,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17697,7 +17697,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17744,7 +17744,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17791,7 +17791,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17830,7 +17830,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17868,7 +17868,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17908,7 +17908,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17948,7 +17948,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -17988,7 +17988,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18015,7 +18015,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18043,7 +18043,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18075,7 +18075,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18097,7 +18097,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18123,7 +18123,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18162,7 +18162,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18209,7 +18209,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18247,7 +18247,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18285,7 +18285,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18312,6 +18312,8 @@
           "1002",
           "--expected-device-id",
           "67ef",
+          "--expected-device-id",
+          "7340",
           "--jobs=4"
         ],
         "merge": {
@@ -18327,7 +18329,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18374,7 +18376,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18413,7 +18415,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18451,7 +18453,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18490,7 +18492,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18518,7 +18520,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18546,7 +18548,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18578,7 +18580,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18600,7 +18602,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18626,7 +18628,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18654,7 +18656,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18693,7 +18695,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18731,7 +18733,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18778,7 +18780,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18825,7 +18827,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18863,7 +18865,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18901,7 +18903,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18948,7 +18950,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -18995,7 +18997,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19034,7 +19036,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19073,7 +19075,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19111,7 +19113,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19149,7 +19151,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19187,7 +19189,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19227,7 +19229,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19269,7 +19271,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19309,7 +19311,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19350,7 +19352,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -19389,7 +19391,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json
index 4760f8c..e1b8223 100644
--- a/testing/buildbot/chromium.gpu.json
+++ b/testing/buildbot/chromium.gpu.json
@@ -1734,7 +1734,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1763,7 +1763,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1796,7 +1796,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1836,7 +1836,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1884,7 +1884,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1923,7 +1923,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1962,7 +1962,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -1990,6 +1990,8 @@
           "1002",
           "--expected-device-id",
           "67ef",
+          "--expected-device-id",
+          "7340",
           "--jobs=4"
         ],
         "merge": {
@@ -2005,7 +2007,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2053,7 +2055,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2093,7 +2095,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2132,7 +2134,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2173,7 +2175,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2201,7 +2203,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2230,7 +2232,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2263,7 +2265,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2292,7 +2294,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2332,7 +2334,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2380,7 +2382,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2419,7 +2421,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2458,7 +2460,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2486,6 +2488,8 @@
           "1002",
           "--expected-device-id",
           "67ef",
+          "--expected-device-id",
+          "7340",
           "--jobs=4"
         ],
         "merge": {
@@ -2501,7 +2505,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2549,7 +2553,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2589,7 +2593,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2628,7 +2632,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
@@ -2669,7 +2673,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu",
diff --git a/testing/buildbot/filters/ios.content_browsertests.filter b/testing/buildbot/filters/ios.content_browsertests.filter
index a32421cc..1bf3ca9 100644
--- a/testing/buildbot/filters/ios.content_browsertests.filter
+++ b/testing/buildbot/filters/ios.content_browsertests.filter
@@ -155,9 +155,6 @@
 # TODO(crbug.com/40276950): This test is flaky.
 -BackForwardCacheBrowserTest.NavigateToTwoPagesOnSameSiteWithSubframes
 
-# TODO(crbug.com/40280396): This test is flaky.
--All/DumpAccessibilityTreeTest.AccessibilitySelectList/blink
-
 # TODO(crbug.com/40281785): These consistently fail.
 -All/DumpAccessibilityTreeTest.AccessibilityInputSubmit/blink
 
@@ -314,7 +311,6 @@
 
 # These tests are flaky.
 -All/CoopRestrictPropertiesReportingBrowserTest.NavigationVirtualBrowsingContextGroup/RDCrashedFrame_BFCacheDisabled
--All/DumpAccessibilityTreeTest.AccessibilitySelectListOpen/blink
 -All/SitePerProcessBrowserTest.ChildFrameCrashMetrics_NeverShown/0
 -All/SitePerProcessBrowserTest.ChildFrameCrashMetrics_NeverShown/1
 -All/SitePerProcessBrowserTest.DetachedIframeUnloadHandlerABCB/0
@@ -668,7 +664,7 @@
 # TODO(crbug.com/341991542): The below tests related to the accessibility
 # have been failing since https://crrev.com/c/5513503.
 -All/DumpAccessibilityTreeTest.SelectExpandManyOptionsCrash/blink
--CrossPlatformAccessibilityBrowserTest.SelectListWithOptgroupActiveDescendant
+-CrossPlatformAccessibilityBrowserTest.SelectWithOptgroupActiveDescendant
 -CrossPlatformAccessibilityBrowserTest.SelectSizeChangeWithOpenedPopupDoesNotCrash
 -CrossPlatformAccessibilityBrowserTest.SelectWithOptgroupActiveDescendant
 
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index 0bc8277..e9d10ea 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -873,6 +873,19 @@
     'swarming': {
       'dimensions': {
         'cpu': 'x86-64',
+        'gpu': '1002:67ef|1002:7340',
+        'hidpi': '1',
+        'os': 'Mac-14.4.1',
+        'pool': 'chromium.tests.gpu',
+        'display_attached': '1',
+      },
+    },
+  },
+  'mac_retina_amd_radeon_pro_555x_gpu_stable': {
+    'fail_if_unused': False,
+    'swarming': {
+      'dimensions': {
+        'cpu': 'x86-64',
         'gpu': '1002:67ef',
         'hidpi': '1',
         'os': 'Mac-14.4.1',
diff --git a/testing/buildbot/tryserver.chromium.mac.json b/testing/buildbot/tryserver.chromium.mac.json
index 098fa38..45f848ee 100644
--- a/testing/buildbot/tryserver.chromium.mac.json
+++ b/testing/buildbot/tryserver.chromium.mac.json
@@ -7,12 +7,12 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "gpu_unittests 1002:67ef",
+        "name": "gpu_unittests 1002:67ef OR 1002:7340",
         "swarming": {
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -21,7 +21,7 @@
         },
         "test": "gpu_unittests",
         "test_id_prefix": "ninja://gpu:gpu_unittests/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "merge": {
@@ -69,12 +69,12 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "services_unittests 1002:67ef",
+        "name": "services_unittests 1002:67ef OR 1002:7340",
         "swarming": {
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -83,7 +83,7 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -148,7 +148,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "context_lost_gl_passthrough_ganesh_tests 1002:67ef",
+        "name": "context_lost_gl_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -157,7 +157,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -167,7 +167,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -218,7 +218,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "context_lost_metal_passthrough_ganesh_tests 1002:67ef",
+        "name": "context_lost_metal_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -227,7 +227,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -237,7 +237,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -292,7 +292,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "expected_color_pixel_gl_passthrough_ganesh_test 1002:67ef",
+        "name": "expected_color_pixel_gl_passthrough_ganesh_test 1002:67ef OR 1002:7340",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
           "--gerrit-patchset=${patch_set}",
@@ -306,7 +306,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -316,7 +316,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -380,7 +380,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "expected_color_pixel_metal_passthrough_ganesh_test 1002:67ef",
+        "name": "expected_color_pixel_metal_passthrough_ganesh_test 1002:67ef OR 1002:7340",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
           "--gerrit-patchset=${patch_set}",
@@ -394,7 +394,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -404,7 +404,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -464,7 +464,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "gpu_process_launch_tests 1002:67ef",
+        "name": "gpu_process_launch_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -473,7 +473,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -483,7 +483,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -534,7 +534,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "hardware_accelerated_feature_tests 1002:67ef",
+        "name": "hardware_accelerated_feature_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -543,7 +543,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -553,7 +553,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -603,12 +603,14 @@
           "1002",
           "--expected-device-id",
           "67ef",
+          "--expected-device-id",
+          "7340",
           "--jobs=4"
         ],
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "info_collection_tests 1002:67ef",
+        "name": "info_collection_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -617,7 +619,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -627,7 +629,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -726,7 +728,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "pixel_skia_gold_gl_passthrough_ganesh_test 1002:67ef",
+        "name": "pixel_skia_gold_gl_passthrough_ganesh_test 1002:67ef OR 1002:7340",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
           "--gerrit-patchset=${patch_set}",
@@ -740,7 +742,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -750,7 +752,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -814,7 +816,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "pixel_skia_gold_metal_passthrough_ganesh_test 1002:67ef",
+        "name": "pixel_skia_gold_metal_passthrough_ganesh_test 1002:67ef OR 1002:7340",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
           "--gerrit-patchset=${patch_set}",
@@ -828,7 +830,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -838,7 +840,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -899,7 +901,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "screenshot_sync_gl_passthrough_ganesh_tests 1002:67ef",
+        "name": "screenshot_sync_gl_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -908,7 +910,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -918,7 +920,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -971,7 +973,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "screenshot_sync_metal_passthrough_ganesh_tests 1002:67ef",
+        "name": "screenshot_sync_metal_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -980,7 +982,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -990,7 +992,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1042,7 +1044,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "trace_test 1002:67ef",
+        "name": "trace_test 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1051,7 +1053,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1061,7 +1063,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1148,7 +1150,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webcodecs_gl_passthrough_ganesh_tests 1002:67ef",
+        "name": "webcodecs_gl_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1157,7 +1159,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1167,7 +1169,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1254,7 +1256,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webcodecs_metal_passthrough_ganesh_tests 1002:67ef",
+        "name": "webcodecs_metal_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1263,7 +1265,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1273,7 +1275,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1324,7 +1326,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webcodecs_metal_passthrough_graphite_tests 1002:67ef",
+        "name": "webcodecs_metal_passthrough_graphite_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1333,7 +1335,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1343,7 +1345,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1397,7 +1399,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl2_conformance_metal_passthrough_graphite_tests 1002:67ef",
+        "name": "webgl2_conformance_metal_passthrough_graphite_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1406,7 +1408,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1417,7 +1419,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1465,7 +1467,7 @@
           "--passthrough",
           "-v",
           "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu --disable-features=SkiaGraphite --disable-background-media-suspend --disable-renderer-backgrounding --disable-background-timer-throttling",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu --disable-features=SkiaGraphite",
           "--enforce-browser-version",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl1_conformance_mac_runtimes.json",
           "--jobs=4"
@@ -1473,7 +1475,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_gl_passthrough_ganesh_tests 1002:67ef",
+        "name": "webgl_conformance_gl_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1482,7 +1484,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1493,7 +1495,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1548,7 +1550,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_metal_passthrough_ganesh_tests 1002:67ef",
+        "name": "webgl_conformance_metal_passthrough_ganesh_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1557,7 +1559,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1567,7 +1569,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
@@ -1621,7 +1623,7 @@
         "merge": {
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_swangle_passthrough_tests 1002:67ef",
+        "name": "webgl_conformance_swangle_passthrough_tests 1002:67ef OR 1002:7340",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1630,7 +1632,7 @@
           "dimensions": {
             "cpu": "x86-64",
             "display_attached": "1",
-            "gpu": "1002:67ef",
+            "gpu": "1002:67ef|1002:7340",
             "hidpi": "1",
             "os": "Mac-14.4.1",
             "pool": "chromium.tests.gpu"
@@ -1640,7 +1642,7 @@
         },
         "test": "telemetry_gpu_integration_test",
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:67ef"
+        "variant_id": "1002:67ef OR 1002:7340"
       },
       {
         "args": [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 312935019..b46d6710 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1812,7 +1812,7 @@
         'os_type': 'mac',
         'browser_config': 'release',
         'mixins': [
-          'mac_retina_amd_gpu_stable',
+          'mac_retina_amd_radeon_pro_555x_gpu_stable',
         ],
         'test_suites': {
           'gpu_telemetry_tests': 'gpu_dawn_telemetry_tests',
@@ -1868,7 +1868,7 @@
         'os_type': 'mac',
         'browser_config': 'release',
         'mixins': [
-          'mac_retina_amd_gpu_stable',
+          'mac_retina_amd_radeon_pro_555x_gpu_stable',
         ],
         'test_suites': {
           'gpu_telemetry_tests': 'gpu_dawn_telemetry_tests',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index bfdc610..aed3d69 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -3109,67 +3109,6 @@
             ]
         }
     ],
-    "BackForwardTransitions": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "NoIPH",
-                    "enable_features": [
-                        "BackForwardTransitions",
-                        "MirrorBackForwardGesturesInRTL"
-                    ],
-                    "disable_features": [
-                        "IPH_RtlGestureNavigation"
-                    ]
-                },
-                {
-                    "name": "RTLOnly",
-                    "enable_features": [
-                        "MirrorBackForwardGesturesInRTL"
-                    ],
-                    "disable_features": [
-                        "BackForwardTransitions",
-                        "IPH_RtlGestureNavigation"
-                    ]
-                },
-                {
-                    "name": "IPHOnUnsuccessfulBackNav",
-                    "params": {
-                        "availability": "any",
-                        "event_trigger": "name:rtl_gesture_iph_trigger;comparator:==0;window:365;storage:365",
-                        "event_used": "name:rtl_gesture_iph_show;comparator:==0;window:365;storage:365",
-                        "session_rate": "<1",
-                        "x_trigger": "",
-                        "x_unhandled_gesture_threshold": "2"
-                    },
-                    "enable_features": [
-                        "BackForwardTransitions",
-                        "IPH_RtlGestureNavigation",
-                        "MirrorBackForwardGesturesInRTL"
-                    ]
-                },
-                {
-                    "name": "IPHOnFirstSuccessfulBackNav",
-                    "params": {
-                        "availability": "any",
-                        "event_trigger": "name:rtl_gesture_iph_trigger;comparator:==0;window:365;storage:365",
-                        "event_used": "name:rtl_gesture_iph_show;comparator:==0;window:365;storage:365",
-                        "session_rate": "<1",
-                        "x_trigger": "non-empty-stack",
-                        "x_unhandled_gesture_threshold": "2"
-                    },
-                    "enable_features": [
-                        "BackForwardTransitions",
-                        "IPH_RtlGestureNavigation",
-                        "MirrorBackForwardGesturesInRTL"
-                    ]
-                }
-            ]
-        }
-    ],
     "BackNavigationMenuIPH": [
         {
             "platforms": [
@@ -21240,6 +21179,28 @@
             ]
         }
     ],
+    "ScreenlockReauthChromeOS": [
+        {
+            "platforms": [
+                "chromeos"
+            ],
+            "experiments": [
+                {
+                    "name": "Reauth_Enabled",
+                    "enable_features": [
+                        "BiometricsAuthForPwdFill"
+                    ]
+                },
+                {
+                    "name": "Reauth_With_Promo_Enabled",
+                    "enable_features": [
+                        "BiometricsAuthForPwdFill",
+                        "ScreenlockReauthPromoCard"
+                    ]
+                }
+            ]
+        }
+    ],
     "ScreenlockReauthPromoCard": [
         {
             "platforms": [
diff --git a/third_party/angle b/third_party/angle
index 81c1196..0040cda 160000
--- a/third_party/angle
+++ b/third_party/angle
@@ -1 +1 @@
-Subproject commit 81c119619542772179921f3680d20812fecd1355
+Subproject commit 0040cda1170f9d481135a95d2fbff616120f404b
diff --git a/third_party/bidimapper/README.chromium b/third_party/bidimapper/README.chromium
index 76c63c4..9587caa5 100644
--- a/third_party/bidimapper/README.chromium
+++ b/third_party/bidimapper/README.chromium
@@ -1,10 +1,10 @@
 Name: Implementation of WebDriver BiDi standard
 Short Name: chromium-bidi
-URL: https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.7.1.tgz
-Version: 0.7.1
-Date: 2024-09-16
-Revision: e4fb8d2e023b5a1f360a8b07bad6ea1b1edcf376
-SHA-512: 0da1ed9138792298fe8bfc7a49504e56c3f66146695fc34a5b369b0864d7a6713285303f311b965ef6297067ef387e0af63246060759c6362885ad22adb44c0c
+URL: https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz
+Version: 0.8.0
+Date: 2024-10-01
+Revision: cd5ac557cb581ef4082403d3ff236aab68a9e615
+SHA-512: 3ea46b02812d436922b7a80b87110ec3f9b075abb3e7545ea5cef2a5ce98006a2f5cc2695f73d4c98a70a0a20a44a45888e07574b8675dda94e9bf6cfb56f213
 License: Apache 2.0
 License File: LICENSE
 Shipped: yes
@@ -32,7 +32,7 @@
 The upstream is maintained by the Chromium developers.
 All the changes must be done there.
 
-The source code of the current revision can be found at the following url: https://github.com/GoogleChromeLabs/chromium-bidi/archive/e4fb8d2e023b5a1f360a8b07bad6ea1b1edcf376.zip
+The source code of the current revision can be found at the following url: https://github.com/GoogleChromeLabs/chromium-bidi/archive/cd5ac557cb581ef4082403d3ff236aab68a9e615.zip
 
 -------------------- DEPENDENCY DIVIDER --------------------
 
diff --git a/third_party/bidimapper/mapper.js b/third_party/bidimapper/mapper.js
index 423d4df..8e7e929c 100644
--- a/third_party/bidimapper/mapper.js
+++ b/third_party/bidimapper/mapper.js
@@ -777,6 +777,9 @@
             if (!context) {
                 throw new InvalidArgumentException(`No browsing context with id ${params.context}`);
             }
+            if (!context.isTopLevelContext()) {
+                throw new InvalidArgumentException('Traversing history is only supported on the top-level context');
+            }
             await context.traverseHistory(params.delta);
             return {};
         }
@@ -4445,10 +4448,14 @@
                     return this.#browserProcessor.close();
                 case 'browser.createUserContext':
                     return await this.#browserProcessor.createUserContext(command.params);
+                case 'browser.getClientWindows':
+                    throw new UnknownErrorException(`Method ${command.method} is not implemented.`);
                 case 'browser.getUserContexts':
                     return await this.#browserProcessor.getUserContexts();
                 case 'browser.removeUserContext':
                     return await this.#browserProcessor.removeUserContext(this.#parser.parseRemoveUserContextParams(command.params));
+                case 'browser.setClientWindowState':
+                    throw new UnknownErrorException(`Method ${command.method} is not implemented.`);
                 // keep-sorted end
                 // Browsing Context domain
                 // keep-sorted start block=yes
@@ -4802,6 +4809,11 @@
                 deepSerializedValue.internalId = internalIdMap.get(weakLocalObjectReference);
                 delete deepSerializedValue['weakLocalObjectReference'];
             }
+            if (deepSerializedValue.type === 'node' &&
+                Object.hasOwn(deepSerializedValue?.value, 'frameId')) {
+                // `frameId` is not needed in BiDi as it is not yet specified.
+                delete deepSerializedValue.value['frameId'];
+            }
             // Platform object is a special case. It should have only `{type: object}`
             // without `value` field.
             if (deepSerializedValue.type === 'platformobject') {
@@ -5671,6 +5683,8 @@
                 url: this.url,
                 userContext: this.userContext,
                 originalOpener: this.#originalOpener ?? null,
+                // TODO(#2646): Implement Client Window correctly
+                clientWindow: '',
                 children: maxDepth > 0
                     ? this.directChildren.map((c) => c.serializeToBidiValue(maxDepth - 1, false))
                     : null,
@@ -6997,6 +7011,19 @@
         }
         return "info" /* Log.Level.Info */;
     }
+    function getLogMethod(consoleApiType) {
+        switch (consoleApiType) {
+            case 'warning':
+                return 'warn';
+            case 'startGroup':
+                return 'group';
+            case 'startGroupCollapsed':
+                return 'groupCollapsed';
+            case 'endGroup':
+                return 'groupEnd';
+        }
+        return consoleApiType;
+    }
     class LogManager {
         #eventManager;
         #realmStorage;
@@ -7077,8 +7104,7 @@
                                 timestamp: Math.round(params.timestamp),
                                 stackTrace: getBidiStackTrace(params.stackTrace),
                                 type: 'console',
-                                // Console method is `warn`, not `warning`.
-                                method: params.type === 'warning' ? 'warn' : params.type,
+                                method: getLogMethod(params.type),
                                 args,
                             },
                         },
@@ -7877,9 +7903,9 @@
         /** Returns the HTTP status code associated with this request if any. */
         get #statusCode() {
             return (this.#responseOverrides?.statusCode ??
-                this.#response.info?.status ??
+                this.#response.paused?.responseStatusCode ??
                 this.#response.extraInfo?.statusCode ??
-                this.#response.paused?.responseStatusCode);
+                this.#response.info?.status);
         }
         get #requestHeaders() {
             let headers = [];
@@ -14336,8 +14362,11 @@
     const BrowserCommandSchema = z.lazy(() => z.union([
         Browser$1.CloseSchema,
         Browser$1.CreateUserContextSchema,
+        Browser$1.GetClientWindowsSchema,
         Browser$1.GetUserContextsSchema,
         Browser$1.RemoveUserContextSchema,
+        Browser$1.SetClientWindowStateSchema,
+        z.object({}),
     ]));
     z.lazy(() => z.union([
         Browser$1.CreateUserContextResultSchema,
@@ -14345,6 +14374,20 @@
     ]));
     var Browser$1;
     (function (Browser) {
+        Browser.ClientWindowSchema = z.lazy(() => z.string());
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
+        Browser.ClientWindowInfoSchema = z.lazy(() => z.object({
+            active: z.boolean(),
+            clientWindow: Browser.ClientWindowSchema,
+            height: JsUintSchema,
+            state: z.enum(['fullscreen', 'maximized', 'minimized', 'normal']),
+            width: JsUintSchema,
+            x: JsIntSchema,
+            y: JsIntSchema,
+        }));
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
         Browser.UserContextSchema = z.lazy(() => z.string());
     })(Browser$1 || (Browser$1 = {}));
     (function (Browser) {
@@ -14368,6 +14411,17 @@
         Browser.CreateUserContextResultSchema = z.lazy(() => Browser.UserContextInfoSchema);
     })(Browser$1 || (Browser$1 = {}));
     (function (Browser) {
+        Browser.GetClientWindowsSchema = z.lazy(() => z.object({
+            method: z.literal('browser.getClientWindows'),
+            params: EmptyParamsSchema,
+        }));
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
+        Browser.GetClientWindowsResultSchema = z.lazy(() => z.object({
+            clientWindows: z.array(Browser.ClientWindowInfoSchema),
+        }));
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
         Browser.GetUserContextsSchema = z.lazy(() => z.object({
             method: z.literal('browser.getUserContexts'),
             params: EmptyParamsSchema,
@@ -14389,6 +14443,36 @@
             userContext: Browser.UserContextSchema,
         }));
     })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
+        Browser.SetClientWindowStateSchema = z.lazy(() => z.object({
+            method: z.literal('browser.setClientWindowState'),
+            params: Browser.SetClientWindowStateParametersSchema,
+        }));
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
+        Browser.SetClientWindowStateParametersSchema = z.lazy(() => z.union([
+            z
+                .object({
+                clientWindow: Browser.ClientWindowSchema,
+            })
+                .and(Browser.ClientWindowNamedStateSchema),
+            Browser.ClientWindowRectStateSchema,
+        ]));
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
+        Browser.ClientWindowNamedStateSchema = z.lazy(() => z.object({
+            state: z.enum(['fullscreen', 'maximized', 'minimized']),
+        }));
+    })(Browser$1 || (Browser$1 = {}));
+    (function (Browser) {
+        Browser.ClientWindowRectStateSchema = z.lazy(() => z.object({
+            state: z.literal('normal'),
+            width: JsUintSchema.optional(),
+            height: JsUintSchema.optional(),
+            x: JsIntSchema.optional(),
+            y: JsIntSchema.optional(),
+        }));
+    })(Browser$1 || (Browser$1 = {}));
     const BrowsingContextCommandSchema = z.lazy(() => z.union([
         BrowsingContext$1.ActivateSchema,
         BrowsingContext$1.CaptureScreenshotSchema,
@@ -14435,6 +14519,7 @@
     (function (BrowsingContext) {
         BrowsingContext.InfoSchema = z.lazy(() => z.object({
             children: z.union([BrowsingContext.InfoListSchema, z.null()]),
+            clientWindow: Browser$1.ClientWindowSchema,
             context: BrowsingContext.BrowsingContextSchema,
             originalOpener: z.union([
                 BrowsingContext.BrowsingContextSchema,
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 9ce0ddb..d84fb9c 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -380,7 +380,6 @@
     "web/web_searchable_form_data.h",
     "web/web_security_policy.h",
     "web/web_select_element.h",
-    "web/web_select_list_element.h",
     "web/web_selector.h",
     "web/web_serialized_script_value.h",
     "web/web_serialized_script_value_version.h",
diff --git a/third_party/blink/public/blink_resources.grd b/third_party/blink/public/blink_resources.grd
index e0494d65..28ab9d02 100644
--- a/third_party/blink/public/blink_resources.grd
+++ b/third_party/blink/public/blink_resources.grd
@@ -21,7 +21,6 @@
       <include name="IDR_UASTYLE_PERMISSION_ELEMENT_CSS" file="../renderer/core/html/resources/permission.css" flattenhtml="true" type="BINDATA" compress="brotli"/>
       <include name="IDR_UASTYLE_THEME_INPUT_MULTIPLE_FIELDS_CSS" file="../renderer/core/html/resources/input_multiple_fields.css" type="BINDATA" compress="brotli"/>
       <include name="IDR_UASTYLE_THEME_FORCED_COLORS_CSS" file="../renderer/core/html/resources/forced_colors.css" type="BINDATA" compress="brotli"/>
-      <include name="IDR_UASTYLE_SELECTLIST_CSS" file="../renderer/core/html/resources/selectlist.css" flattenhtml="true" type="BINDATA" compress="brotli"/>
       <include name="IDR_UASTYLE_CUSTOMIZABLE_SELECT_CSS" file="../renderer/core/html/resources/customizable_select.css" type="BINDATA" compress="brotli"/>
       <include name="IDR_UASTYLE_CUSTOMIZABLE_SELECT_LINUX_CSS" file="../renderer/core/html/resources/customizable_select_linux.css" type="BINDATA" compress="brotli"/>
       <include name="IDR_UASTYLE_CUSTOMIZABLE_SELECT_FORCED_COLORS_CSS" file="../renderer/core/html/resources/customizable_select_forced_colors.css" type="BINDATA" compress="brotli"/>
diff --git a/third_party/blink/public/mojom/forms/form_control_type.mojom b/third_party/blink/public/mojom/forms/form_control_type.mojom
index 681535a..9f5a4b3 100644
--- a/third_party/blink/public/mojom/forms/form_control_type.mojom
+++ b/third_party/blink/public/mojom/forms/form_control_type.mojom
@@ -11,7 +11,6 @@
   kButtonButton,
   kButtonSubmit,
   kButtonReset,
-  kButtonSelectList,
   kButtonPopover,
   // https://html.spec.whatwg.org/multipage/form-elements.html#dom-fieldset-type
   kFieldset,
@@ -43,7 +42,6 @@
   // https://html.spec.whatwg.org/multipage/form-elements.html#dom-select-type
   kSelectOne,
   kSelectMultiple,
-  kSelectList,
   // https://html.spec.whatwg.org/multipage/form-elements.html#dom-textarea-type
   kTextArea,
 };
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
index d6f09a1..35da956 100644
--- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
+++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3117,7 +3117,7 @@
   kInsertHTMLCommandOnReadWritePlainText = 3808,
   kCSSAtRuleCounterStyle = 3809,
   kCanvasUseColorSpace = 3810,
-  kSelectListElement = 3811,
+  kOBSOLETE_SelectListElement = 3811,
   kOBSOLETE_RTCPeerConnectionSdpSemanticsPlanBWithReverseOriginTrial = 3812,
   kWebAppManifestCaptureLinks = 3813,
   kSanitizerAPICreated = 3814,
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 33ffb44..5d1497c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_it.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_it.xtb
@@ -28,6 +28,7 @@
 <translation id="2746543609216772311">Il valore deve essere <ph name="MINIMUM_DATE_OR_TIME" /> o successivo.</translation>
 <translation id="2761667185364618470">Seleziona questa casella se intendi procedere.</translation>
 <translation id="2908441821576996758">Inserisci un elenco di indirizzi email separati da virgola.</translation>
+<translation id="2940013921954129954">Posizione esatta consentita</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY" /> MB</translation>
 <translation id="3075154866155599887">Inserisci un valore valido. Il campo è incompleto o presenta una data non valida.</translation>
 <translation id="310520048233152454">Inserisci un URL.</translation>
@@ -77,6 +78,7 @@
 <translation id="6709570249143506788">Scarsa qualità di riproduzione</translation>
 <translation id="6790428901817661496">Riproduci</translation>
 <translation id="6820355525329141109">Impossibile caricare il plug-in</translation>
+<translation id="688706781007114099">Usa posizione</translation>
 <translation id="6919891270253167948">1,5</translation>
 <translation id="6989848892321993519">Prolunga questo testo a <ph name="MIN_CHARACTERS" /> o più caratteri (al momento stai utilizzando 1 carattere).</translation>
 <translation id="709897737746224366">Rispetta il formato richiesto.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ky.xtb b/third_party/blink/public/strings/translations/blink_strings_ky.xtb
index 87298dca..8eebd9d 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ky.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ky.xtb
@@ -28,6 +28,7 @@
 <translation id="2746543609216772311">Маани <ph name="MINIMUM_DATE_OR_TIME" /> же андан жаңыраак болушу керек.</translation>
 <translation id="2761667185364618470">Уланткыңыз келсе бул кутуну белгилеңиз.</translation>
 <translation id="2908441821576996758">Электрондук почта даректеринин тизмесин үтүр менен бөлүп киргизиңиз.</translation>
+<translation id="2940013921954129954">Так дарекке уруксат берилет</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY" /> Мб</translation>
 <translation id="3075154866155599887">Жарактуу маанини киргизиңиз. Талаа толук эмес же күнү жараксыз.</translation>
 <translation id="310520048233152454">URL жазыңыз.</translation>
@@ -77,6 +78,7 @@
 <translation id="6709570249143506788">Ойнотуу сапаты начар</translation>
 <translation id="6790428901817661496">Ойнотуу</translation>
 <translation id="6820355525329141109">Плагин жүктөлбөй койду.</translation>
+<translation id="688706781007114099">Жайгашкан жерди аныктоо</translation>
 <translation id="6919891270253167948">1,5</translation>
 <translation id="6989848892321993519">Бул текстти <ph name="MIN_CHARACTERS" /> белгиге же андан көбүрөөк кылып узартыңыз (учурда 1 белги турат).</translation>
 <translation id="709897737746224366">Суралган форматка туураланыз.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lt.xtb b/third_party/blink/public/strings/translations/blink_strings_lt.xtb
index 33caa11..89698fe9 100644
--- a/third_party/blink/public/strings/translations/blink_strings_lt.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_lt.xtb
@@ -28,6 +28,7 @@
 <translation id="2746543609216772311">Vertė turi būti <ph name="MINIMUM_DATE_OR_TIME" /> ar vėlesnė data.</translation>
 <translation id="2761667185364618470">Jei norite tęsti, pažymėkite šį laukelį.</translation>
 <translation id="2908441821576996758">Įveskite kableliais atskirtą el. pašto adresų sąrašą.</translation>
+<translation id="2940013921954129954">Tiksli vietovė leidžiama</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY" /> MB</translation>
 <translation id="3075154866155599887">Įveskite tinkamą vertę. Laukas užpildytas nevisiškai arba įvesta netinkama data.</translation>
 <translation id="310520048233152454">Įveskite URL.</translation>
@@ -77,6 +78,7 @@
 <translation id="6709570249143506788">Prasta atkūrimo kokybė</translation>
 <translation id="6790428901817661496">Žaisti</translation>
 <translation id="6820355525329141109">Nepavyko įkelti papildinio.</translation>
+<translation id="688706781007114099">Naudoti vietovę</translation>
 <translation id="6919891270253167948">1,5</translation>
 <translation id="6989848892321993519">Pailginkite šį tekstą iki <ph name="MIN_CHARACTERS" /> simb. ar daugiau (šiuo metu naudojate 1 simbolį).</translation>
 <translation id="709897737746224366">Priderinkite reikalaujamą formatą.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_vi.xtb b/third_party/blink/public/strings/translations/blink_strings_vi.xtb
index 5be5164c..82bc35d 100644
--- a/third_party/blink/public/strings/translations/blink_strings_vi.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_vi.xtb
@@ -28,6 +28,7 @@
 <translation id="2746543609216772311">Giá trị phải là <ph name="MINIMUM_DATE_OR_TIME" /> hoặc muộn hơn.</translation>
 <translation id="2761667185364618470">Vui lòng chọn hộp kiểm này nếu bạn muốn tiếp tục.</translation>
 <translation id="2908441821576996758">Vui lòng nhập danh sách địa chỉ email được phân cách bằng dấu phẩy.</translation>
+<translation id="2940013921954129954">Được phép truy cập thông tin vị trí chính xác</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY" /> MB</translation>
 <translation id="3075154866155599887">Vui lòng nhập một giá trị hợp lệ. Trường không hoàn chỉnh hoặc có giá trị không hợp lệ.</translation>
 <translation id="310520048233152454">Vui lòng nhập URL.</translation>
@@ -77,6 +78,7 @@
 <translation id="6709570249143506788">Chất lượng phát kém</translation>
 <translation id="6790428901817661496">Phát</translation>
 <translation id="6820355525329141109">Không thể tải plugin.</translation>
+<translation id="688706781007114099">Sử dụng thông tin vị trí</translation>
 <translation id="6919891270253167948">1,5</translation>
 <translation id="6989848892321993519">Vui lòng kéo dài văn bản này thành <ph name="MIN_CHARACTERS" /> ký tự trở lên (bạn hiện đang sử dụng 1 ký tự).</translation>
 <translation id="709897737746224366">Vui lòng khớp với định dạng được yêu cầu.</translation>
diff --git a/third_party/blink/public/web/web_autofill_client.h b/third_party/blink/public/web/web_autofill_client.h
index 855703e..ca3e28c6 100644
--- a/third_party/blink/public/web/web_autofill_client.h
+++ b/third_party/blink/public/web/web_autofill_client.h
@@ -71,8 +71,7 @@
   virtual void SelectControlDidChange(const WebFormControlElement&) {}
 
   // Called when the options of a select control change.
-  virtual void SelectOrSelectListFieldOptionsChanged(
-      const WebFormControlElement&) {}
+  virtual void SelectFieldOptionsChanged(const WebFormControlElement&) {}
 
   // Called when the user interacts with the page after a load.
   virtual void UserGestureObserved() {}
diff --git a/third_party/blink/public/web/web_select_list_element.h b/third_party/blink/public/web/web_select_list_element.h
deleted file mode 100644
index 19a4fb1..0000000
--- a/third_party/blink/public/web/web_select_list_element.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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.
-
-#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SELECT_LIST_ELEMENT_H_
-#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SELECT_LIST_ELEMENT_H_
-
-#include "third_party/blink/public/platform/web_common.h"
-#include "third_party/blink/public/platform/web_vector.h"
-#include "third_party/blink/public/web/web_form_control_element.h"
-#include "third_party/blink/public/web/web_option_element.h"
-
-namespace blink {
-
-class HTMLSelectListElement;
-
-// Provides readonly access to some properties of a DOM selectlist element
-// node.
-class BLINK_EXPORT WebSelectListElement final : public WebFormControlElement {
- public:
-  WebSelectListElement() = default;
-  WebSelectListElement(const WebSelectListElement& element) = default;
-
-  WebSelectListElement& operator=(const WebSelectListElement& element) {
-    WebFormControlElement::Assign(element);
-    return *this;
-  }
-  void Assign(const WebSelectListElement& element) {
-    WebFormControlElement::Assign(element);
-  }
-
-  // Returns list of WebOptionElement which are direct children of the
-  // WebSelectListElement.
-  WebVector<WebElement> GetListItems() const;
-
-  // Returns whether a child element in one of the selectlist's slots is
-  // focusable.
-  bool HasFocusableChild() const;
-
-#if INSIDE_BLINK
-  explicit WebSelectListElement(HTMLSelectListElement*);
-  WebSelectListElement& operator=(HTMLSelectListElement*);
-  explicit operator HTMLSelectListElement*() const;
-#endif
-};
-
-DECLARE_WEB_NODE_TYPE_CASTS(WebSelectListElement);
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SELECT_LIST_ELEMENT_H_
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni
index fadad57f..ad0231f 100644
--- a/third_party/blink/renderer/bindings/generated_in_core.gni
+++ b/third_party/blink/renderer/bindings/generated_in_core.gni
@@ -1092,8 +1092,6 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_script_element.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_select_element.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_select_element.h",
-  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_select_list_element.cc",
-  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_select_list_element.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_selected_option_element.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_selected_option_element.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_html_slot_element.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_core.gni b/third_party/blink/renderer/bindings/idl_in_core.gni
index d3e0ac29..d1136e8 100644
--- a/third_party/blink/renderer/bindings/idl_in_core.gni
+++ b/third_party/blink/renderer/bindings/idl_in_core.gni
@@ -390,7 +390,6 @@
   "//third_party/blink/renderer/core/html/forms/html_options_collection.idl",
   "//third_party/blink/renderer/core/html/forms/html_output_element.idl",
   "//third_party/blink/renderer/core/html/forms/html_select_element.idl",
-  "//third_party/blink/renderer/core/html/forms/html_select_list_element.idl",
   "//third_party/blink/renderer/core/html/forms/html_selected_option_element.idl",
   "//third_party/blink/renderer/core/html/forms/html_text_area_element.idl",
   "//third_party/blink/renderer/core/html/forms/radio_node_list.idl",
diff --git a/third_party/blink/renderer/core/css/css_default_style_sheets.cc b/third_party/blink/renderer/core/css/css_default_style_sheets.cc
index b2b85dc4..7c73078a 100644
--- a/third_party/blink/renderer/core/css/css_default_style_sheets.cc
+++ b/third_party/blink/renderer/core/css/css_default_style_sheets.cc
@@ -40,7 +40,6 @@
 #include "third_party/blink/renderer/core/execution_context/security_context.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/html_anchor_element.h"
 #include "third_party/blink/renderer/core/html/html_html_element.h"
 #include "third_party/blink/renderer/core/html/html_image_element.h"
@@ -140,7 +139,6 @@
   text_track_style_sheet_.Clear();
   forced_colors_style_sheet_.Clear();
   fullscreen_style_sheet_.Clear();
-  selectlist_style_sheet_.Clear();
   customizable_select_style_sheet_.Clear();
   customizable_select_forced_colors_style_sheet_.Clear();
   marker_style_sheet_.Clear();
@@ -378,16 +376,6 @@
     }
   }
 
-  if (!selectlist_style_sheet_ && IsA<HTMLSelectListElement>(element)) {
-    // TODO: We should assert that this sheet only contains rules for
-    // <selectlist>.
-    CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-    selectlist_style_sheet_ = ParseUASheet(
-        UncompressResourceAsASCIIString(IDR_UASTYLE_SELECTLIST_CSS));
-    AddRulesToDefaultStyleSheets(selectlist_style_sheet_, NamespaceType::kHTML);
-    changed_default_style = true;
-  }
-
   if (!customizable_select_style_sheet_ && IsA<HTMLSelectElement>(element) &&
       RuntimeEnabledFeatures::CustomizableSelectEnabled()) {
     // TODO(crbug.com/1511354): Merge customizable_select.css into html.css and
@@ -552,7 +540,6 @@
   visitor->Trace(text_track_style_sheet_);
   visitor->Trace(forced_colors_style_sheet_);
   visitor->Trace(fullscreen_style_sheet_);
-  visitor->Trace(selectlist_style_sheet_);
   visitor->Trace(customizable_select_style_sheet_);
   visitor->Trace(customizable_select_forced_colors_style_sheet_);
   visitor->Trace(marker_style_sheet_);
diff --git a/third_party/blink/renderer/core/css/css_default_style_sheets.h b/third_party/blink/renderer/core/css/css_default_style_sheets.h
index aa56aa9..fb10a3df 100644
--- a/third_party/blink/renderer/core/css/css_default_style_sheets.h
+++ b/third_party/blink/renderer/core/css/css_default_style_sheets.h
@@ -84,9 +84,6 @@
 
   StyleSheetContents* DefaultStyleSheet() { return default_style_sheet_.Get(); }
   StyleSheetContents* QuirksStyleSheet() { return quirks_style_sheet_.Get(); }
-  StyleSheetContents* SelectListStyleSheet() {
-    return selectlist_style_sheet_.Get();
-  }
   StyleSheetContents* CustomizableSelectStyleSheet() {
     return customizable_select_style_sheet_.Get();
   }
@@ -178,7 +175,6 @@
   Member<StyleSheetContents> permission_element_style_sheet_;
   Member<StyleSheetContents> text_track_style_sheet_;
   Member<StyleSheetContents> fullscreen_style_sheet_;
-  Member<StyleSheetContents> selectlist_style_sheet_;
   Member<StyleSheetContents> customizable_select_style_sheet_;
   Member<StyleSheetContents> customizable_select_forced_colors_style_sheet_;
   Member<StyleSheetContents> marker_style_sheet_;
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc
index 5b738d1..9d5c778 100644
--- a/third_party/blink/renderer/core/css/css_selector.cc
+++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -1571,7 +1571,12 @@
           GetPseudoType() == kPseudoPlaceholder ||
           GetPseudoType() == kPseudoFileSelectorButton ||
           GetPseudoType() == kPseudoBackdrop ||
-          GetPseudoType() == kPseudoPicker);
+          GetPseudoType() == kPseudoPicker ||
+          GetPseudoType() == kPseudoViewTransition ||
+          GetPseudoType() == kPseudoViewTransitionGroup ||
+          GetPseudoType() == kPseudoViewTransitionImagePair ||
+          GetPseudoType() == kPseudoViewTransitionOld ||
+          GetPseudoType() == kPseudoViewTransitionNew);
 }
 
 bool CSSSelector::IsAllowedAfterPart() const {
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
index f286ee0c..387a5fd 100644
--- a/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
+++ b/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
@@ -176,10 +176,12 @@
                               "::-webkit-volume-slider:not(:hover)",
                               "::-webkit-scrollbar:not(:horizontal)",
                               "::slotted(span)::before",
-                              "::slotted(div)::after"};
+                              "::slotted(div)::after",
+                              "::slotted(div)::view-transition"};
 
   HeapVector<CSSSelector> arena;
   for (StringView test_case : test_cases) {
+    SCOPED_TRACE(test_case);
     CSSParserTokenStream stream(test_case);
     base::span<CSSSelector> vector = CSSSelectorParser::ParseSelector(
         stream,
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 6c95ee9..08b898a 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -810,11 +810,6 @@
   // but this is also used for VTT) that are exposed as pseudos ("shadow
   // pseudos") are never exposed as parts, the rules from a particular scope
   // can only be used for one of the states below.
-  //
-  // The one semi-exception to this is the deprecated <selectlist> element,
-  // which exposes a few things as -internal-* shadow pseudos to the UA sheet
-  // and as ::part() to authors.  Because of this, and since this code is only
-  // used for author rules, we prioritize part below when setting state.
   enum class MatchingState {
     kDone,
     kShadowPseudo,
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc
index 5eed8b7..7d55938 100644
--- a/third_party/blink/renderer/core/css/selector_checker.cc
+++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -1937,9 +1937,7 @@
       }
       return false;
     case CSSSelector::kPseudoOpen:
-      if (auto* selectlist = DynamicTo<HTMLSelectListElement>(element)) {
-        return selectlist->open();
-      } else if (auto* dialog = DynamicTo<HTMLDialogElement>(element)) {
+      if (auto* dialog = DynamicTo<HTMLDialogElement>(element)) {
         return dialog->FastHasAttribute(html_names::kOpenAttr);
       } else if (auto* details = DynamicTo<HTMLDetailsElement>(element)) {
         return details->FastHasAttribute(html_names::kOpenAttr);
@@ -1948,9 +1946,7 @@
       }
       return false;
     case CSSSelector::kPseudoClosed:
-      if (auto* selectlist = DynamicTo<HTMLSelectListElement>(element)) {
-        return !selectlist->open();
-      } else if (auto* dialog = DynamicTo<HTMLDialogElement>(element)) {
+      if (auto* dialog = DynamicTo<HTMLDialogElement>(element)) {
         return !dialog->FastHasAttribute(html_names::kOpenAttr);
       } else if (auto* details = DynamicTo<HTMLDetailsElement>(element)) {
         return !details->FastHasAttribute(html_names::kOpenAttr);
@@ -2195,12 +2191,6 @@
   }
   HTMLFormControlElement* form_control_element =
       DynamicTo<HTMLFormControlElement>(&element);
-  if (auto* button = DynamicTo<HTMLButtonElement>(&element)) {
-    if (auto* selectlist = button->OwnerSelectList()) {
-      form_control_element = selectlist;
-    }
-  }
-
   if (!form_control_element) {
     return false;
   }
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
index d0ca4ba..8572dca 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_context.cc
+++ b/third_party/blink/renderer/core/display_lock/display_lock_context.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/display_lock/display_lock_context.h"
 
 #include <string>
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.h b/third_party/blink/renderer/core/display_lock/display_lock_context.h
index 32ce9df4..f207780d 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_context.h
+++ b/third_party/blink/renderer/core/display_lock/display_lock_context.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_DISPLAY_LOCK_DISPLAY_LOCK_CONTEXT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_DISPLAY_LOCK_DISPLAY_LOCK_CONTEXT_H_
 
+#include <array>
 #include <utility>
 
 #include "third_party/blink/renderer/core/core_export.h"
@@ -514,8 +515,9 @@
   void NotifyRenderAffectingStateChanged();
   const char* RenderAffectingStateName(int state) const;
 
-  bool render_affecting_state_[static_cast<int>(
-      RenderAffectingState::kNumRenderAffectingStates)] = {false};
+  std::array<bool,
+             static_cast<int>(RenderAffectingState::kNumRenderAffectingStates)>
+      render_affecting_state_ = {false};
   int keep_unlocked_count_ = 0;
 
   bool had_lifecycle_update_since_last_unlock_ = false;
diff --git a/third_party/blink/renderer/core/dom/dataset_dom_string_map.cc b/third_party/blink/renderer/core/dom/dataset_dom_string_map.cc
index e05e22ff..499df4d 100644
--- a/third_party/blink/renderer/core/dom/dataset_dom_string_map.cc
+++ b/third_party/blink/renderer/core/dom/dataset_dom_string_map.cc
@@ -23,11 +23,6 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "third_party/blink/renderer/core/dom/dataset_dom_string_map.h"
 
 #include "third_party/blink/renderer/core/dom/attribute.h"
@@ -73,28 +68,31 @@
 }
 
 template <typename CharType1, typename CharType2>
-static bool PropertyNameMatchesAttributeName(const CharType1* property_name,
-                                             const CharType2* attribute_name,
-                                             unsigned property_length,
-                                             unsigned attribute_length) {
-  unsigned a = 5;
-  unsigned p = 0;
+static bool PropertyNameMatchesAttributeName(
+    base::span<const CharType1> property_name,
+    base::span<const CharType2> attribute_name) {
+  size_t a = 5;
+  size_t p = 0;
   bool word_boundary = false;
-  while (a < attribute_length && p < property_length) {
-    if (attribute_name[a] == '-' && a + 1 < attribute_length &&
+  while (a < attribute_name.size() && p < property_name.size()) {
+    const CharType2 current_attribute_char = attribute_name[a];
+    if (current_attribute_char == '-' && a + 1 < attribute_name.size() &&
         IsASCIILower(attribute_name[a + 1])) {
       word_boundary = true;
     } else {
-      if ((word_boundary ? ToASCIIUpper(attribute_name[a])
-                         : attribute_name[a]) != property_name[p])
+      const CharType2 current_attribute_char_to_compare =
+          word_boundary ? ToASCIIUpper(current_attribute_char)
+                        : current_attribute_char;
+      if (current_attribute_char_to_compare != property_name[p]) {
         return false;
+      }
       p++;
       word_boundary = false;
     }
     a++;
   }
 
-  return (a == attribute_length && p == property_length);
+  return (a == attribute_name.size() && p == property_name.size());
 }
 
 static bool PropertyNameMatchesAttributeName(const String& property_name,
@@ -102,26 +100,21 @@
   if (!attribute_name.StartsWith("data-"))
     return false;
 
-  unsigned property_length = property_name.length();
-  unsigned attribute_length = attribute_name.length();
-
   if (property_name.Is8Bit()) {
-    if (attribute_name.Is8Bit())
-      return PropertyNameMatchesAttributeName(
-          property_name.Characters8(), attribute_name.Characters8(),
-          property_length, attribute_length);
-    return PropertyNameMatchesAttributeName(property_name.Characters8(),
-                                            attribute_name.Characters16(),
-                                            property_length, attribute_length);
+    if (attribute_name.Is8Bit()) {
+      return PropertyNameMatchesAttributeName(property_name.Span8(),
+                                              attribute_name.Span8());
+    }
+    return PropertyNameMatchesAttributeName(property_name.Span8(),
+                                            attribute_name.Span16());
   }
 
-  if (attribute_name.Is8Bit())
-    return PropertyNameMatchesAttributeName(property_name.Characters16(),
-                                            attribute_name.Characters8(),
-                                            property_length, attribute_length);
-  return PropertyNameMatchesAttributeName(property_name.Characters16(),
-                                          attribute_name.Characters16(),
-                                          property_length, attribute_length);
+  if (attribute_name.Is8Bit()) {
+    return PropertyNameMatchesAttributeName(property_name.Span16(),
+                                            attribute_name.Span8());
+  }
+  return PropertyNameMatchesAttributeName(property_name.Span16(),
+                                          attribute_name.Span16());
 }
 
 static bool IsValidPropertyName(const String& name) {
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 0475190..69317cc 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -155,7 +155,6 @@
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_options_collection.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/html_anchor_element.h"
 #include "third_party/blink/renderer/core/html/html_area_element.h"
 #include "third_party/blink/renderer/core/html/html_body_element.h"
diff --git a/third_party/blink/renderer/core/dom/popover_data.h b/third_party/blink/renderer/core/dom/popover_data.h
index 40180db..61f419a4 100644
--- a/third_party/blink/renderer/core/dom/popover_data.h
+++ b/third_party/blink/renderer/core/dom/popover_data.h
@@ -10,7 +10,6 @@
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/core/dom/element_rare_data_field.h"
 #include "third_party/blink/renderer/core/html/closewatcher/close_watcher.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html_element_type_helpers.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/core/editing/commands/editing_command_type.h b/third_party/blink/renderer/core/editing/commands/editing_command_type.h
index 4562e52..6187469 100644
--- a/third_party/blink/renderer/core/editing/commands/editing_command_type.h
+++ b/third_party/blink/renderer/core/editing/commands/editing_command_type.h
@@ -192,7 +192,6 @@
   // InsertInputText (not supported)
   // InsertMarquee (not supported)
   // InsertSelectDropDown (not supported)
-  // InsertSelectListBox (not supported)
   // InsertTextArea (not supported)
   // LiveResize (not supported)
   // MultipleSelection (not supported)
diff --git a/third_party/blink/renderer/core/exported/build.gni b/third_party/blink/renderer/core/exported/build.gni
index 770e6b0..b837f899 100644
--- a/third_party/blink/renderer/core/exported/build.gni
+++ b/third_party/blink/renderer/core/exported/build.gni
@@ -58,7 +58,6 @@
   "web_searchable_form_data.cc",
   "web_security_policy.cc",
   "web_select_element.cc",
-  "web_select_list_element.cc",
   "web_selector.cc",
   "web_serialized_script_value.cc",
   "web_settings_impl.cc",
diff --git a/third_party/blink/renderer/core/exported/web_form_control_element.cc b/third_party/blink/renderer/core/exported/web_form_control_element.cc
index 980bf72..97639a59 100644
--- a/third_party/blink/renderer/core/exported/web_form_control_element.cc
+++ b/third_party/blink/renderer/core/exported/web_form_control_element.cc
@@ -43,7 +43,6 @@
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
 #include "third_party/blink/renderer/core/input_type_names.h"
 #include "third_party/blink/renderer/platform/keyboard_codes.h"
@@ -217,15 +216,6 @@
     select->SetAutofillValue(value, autofill_state);
     if (!Focused())
       DispatchBlurEvent();
-  } else if (auto* selectlist =
-                 ::blink::DynamicTo<HTMLSelectListElement>(*private_)) {
-    if (!Focused()) {
-      DispatchFocusEvent();
-    }
-    selectlist->SetAutofillValue(value, autofill_state);
-    if (!Focused()) {
-      DispatchBlurEvent();
-    }
   }
 }
 
@@ -236,9 +226,6 @@
     return textarea->Value();
   if (auto* select = ::blink::DynamicTo<HTMLSelectElement>(*private_))
     return select->Value();
-  if (auto* selectlist = ::blink::DynamicTo<HTMLSelectListElement>(*private_)) {
-    return selectlist->value();
-  }
   return WebString();
 }
 
@@ -250,9 +237,6 @@
     textarea->SetSuggestedValue(value);
   } else if (auto* select = ::blink::DynamicTo<HTMLSelectElement>(*private_)) {
     select->SetSuggestedValue(value);
-  } else if (auto* selectlist =
-                 ::blink::DynamicTo<HTMLSelectListElement>(*private_)) {
-    selectlist->SetSuggestedValue(value);
   }
 }
 
@@ -263,9 +247,6 @@
     return textarea->SuggestedValue();
   if (auto* select = ::blink::DynamicTo<HTMLSelectElement>(*private_))
     return select->SuggestedValue();
-  if (auto* selectlist = ::blink::DynamicTo<HTMLSelectListElement>(*private_)) {
-    return selectlist->SuggestedValue();
-  }
   return WebString();
 }
 
diff --git a/third_party/blink/renderer/core/exported/web_form_control_element_test.cc b/third_party/blink/renderer/core/exported/web_form_control_element_test.cc
index ff0c67c..eeb98b4 100644
--- a/third_party/blink/renderer/core/exported/web_form_control_element_test.cc
+++ b/third_party/blink/renderer/core/exported/web_form_control_element_test.cc
@@ -73,10 +73,6 @@
           <option value="Bar">Bar</option>
           <option value="Foo">Foo</option>
         </select>
-        <selectlist id="selectlist_id">
-          <option value="Bar">Bar</option>
-          <option value="Foo">Foo</option>
-        </selectlist>
         <input id="reset" type="reset">
       </form>
     </body>
@@ -86,22 +82,17 @@
       DynamicTo<HTMLFormControlElement>(GetElementById("text_id")));
   WebFormControlElement select(
       DynamicTo<HTMLFormControlElement>(GetElementById("select_id")));
-  WebFormControlElement selectlist(
-      DynamicTo<HTMLFormControlElement>(GetElementById("selectlist_id")));
 
   text.SetUserHasEditedTheField(true);
   select.SetUserHasEditedTheField(true);
-  selectlist.SetUserHasEditedTheField(true);
 
   EXPECT_TRUE(text.UserHasEditedTheField());
   EXPECT_TRUE(select.UserHasEditedTheField());
-  EXPECT_TRUE(selectlist.UserHasEditedTheField());
 
   To<HTMLFormControlElement>(GetElementById("reset"))->click();
 
   EXPECT_FALSE(text.UserHasEditedTheField());
   EXPECT_FALSE(select.UserHasEditedTheField());
-  EXPECT_FALSE(selectlist.UserHasEditedTheField());
 }
 
 class WebFormControlElementSetAutofillValueTest
@@ -174,20 +165,4 @@
   EXPECT_EQ(element.Value().Ascii(), "value");
 }
 
-// <button type=selectlist> should not be confused with <selectlist> for
-// autofill.
-TEST_F(WebFormControlElementTest, ButtonTypeSelectlist) {
-  GetDocument().documentElement()->setInnerHTML(
-      "<button id=selectbutton type=selectlist>button</button>"
-      "<button id=normalbutton type=button>button</button>");
-  auto selectbutton = WebFormControlElement(To<HTMLFormControlElement>(
-      GetDocument().getElementById(AtomicString("selectbutton"))));
-  auto normalbutton = WebFormControlElement(To<HTMLFormControlElement>(
-      GetDocument().getElementById(AtomicString("normalbutton"))));
-  EXPECT_EQ(normalbutton.FormControlTypeForAutofill(),
-            FormControlType::kButtonButton);
-  EXPECT_EQ(selectbutton.FormControlTypeForAutofill(),
-            FormControlType::kButtonSelectList);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/exported/web_select_list_element.cc b/third_party/blink/renderer/core/exported/web_select_list_element.cc
deleted file mode 100644
index cfb3479..0000000
--- a/third_party/blink/renderer/core/exported/web_select_list_element.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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.
-
-#include "third_party/blink/public/web/web_select_list_element.h"
-
-#include "third_party/blink/public/platform/web_string.h"
-#include "third_party/blink/renderer/core/html/forms/html_option_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
-#include "third_party/blink/renderer/core/html_names.h"
-
-namespace blink {
-
-WebVector<WebElement> WebSelectListElement::GetListItems() const {
-  HTMLSelectListElement::ListItems option_list =
-      ConstUnwrap<HTMLSelectListElement>()->GetListItems();
-  WebVector<WebElement> items;
-  for (const Member<HTMLOptionElement>& option : option_list) {
-    items.emplace_back(option.Get());
-  }
-  return items;
-}
-
-bool WebSelectListElement::HasFocusableChild() const {
-  return blink::To<HTMLSelectListElement>(private_.Get())->GetFocusableArea();
-}
-
-WebSelectListElement::WebSelectListElement(HTMLSelectListElement* element)
-    : WebFormControlElement(element) {}
-
-DEFINE_WEB_NODE_TYPE_CASTS(WebSelectListElement,
-                           IsA<HTMLSelectListElement>(ConstUnwrap<Node>()))
-
-WebSelectListElement& WebSelectListElement::operator=(
-    HTMLSelectListElement* element) {
-  private_ = element;
-  return *this;
-}
-
-WebSelectListElement::operator HTMLSelectListElement*() const {
-  return blink::To<HTMLSelectListElement>(private_.Get());
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/build.gni b/third_party/blink/renderer/core/html/build.gni
index aca0c284..df7e647 100644
--- a/third_party/blink/renderer/core/html/build.gni
+++ b/third_party/blink/renderer/core/html/build.gni
@@ -175,8 +175,6 @@
   "forms/html_label_element.h",
   "forms/html_legend_element.cc",
   "forms/html_legend_element.h",
-  "forms/html_listbox_element.cc",
-  "forms/html_listbox_element.h",
   "forms/html_opt_group_element.cc",
   "forms/html_opt_group_element.h",
   "forms/html_option_element.cc",
@@ -187,12 +185,8 @@
   "forms/html_output_element.h",
   "forms/html_select_element.cc",
   "forms/html_select_element.h",
-  "forms/html_select_list_element.cc",
-  "forms/html_select_list_element.h",
   "forms/html_selected_option_element.cc",
   "forms/html_selected_option_element.h",
-  "forms/select_list_part_traversal.cc",
-  "forms/select_list_part_traversal.h",
   "forms/html_text_area_element.cc",
   "forms/html_text_area_element.h",
   "forms/image_input_type.cc",
@@ -667,11 +661,9 @@
   "forms/html_output_element_test.cc",
   "forms/html_select_element_test.cc",
   "forms/html_option_element_test.cc",
-  "forms/html_select_list_element_test.cc",
   "forms/html_text_area_element_test.cc",
   "forms/internal_popup_menu_test.cc",
   "forms/option_list_test.cc",
-  "forms/select_list_part_traversal_test.cc",
   "forms/step_range_test.cc",
   "forms/text_control_element_test.cc",
   "forms/type_ahead_test.cc",
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.cc b/third_party/blink/renderer/core/html/forms/html_button_element.cc
index 6c95e2d..359aad4d 100644
--- a/third_party/blink/renderer/core/html/forms/html_button_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_button_element.cc
@@ -35,9 +35,7 @@
 #include "third_party/blink/renderer/core/frame/web_feature.h"
 #include "third_party/blink/renderer/core/html/forms/form_data.h"
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html_names.h"
 #include "third_party/blink/renderer/core/layout/layout_block_flow.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
@@ -90,13 +88,6 @@
       DEFINE_STATIC_LOCAL(const AtomicString, reset, ("reset"));
       return reset;
     }
-    case Type::kSelectlist: {
-      if (RuntimeEnabledFeatures::HTMLSelectListElementEnabled()) {
-        DEFINE_STATIC_LOCAL(const AtomicString, selectlist, ("selectlist"));
-        return selectlist;
-      }
-      break;
-    }
   }
   NOTREACHED();
 }
@@ -119,9 +110,6 @@
       type_ = kReset;
     } else if (EqualIgnoringASCIICase(params.new_value, "button")) {
       type_ = kButton;
-    } else if (RuntimeEnabledFeatures::HTMLSelectListElementEnabled() &&
-               EqualIgnoringASCIICase(params.new_value, "selectlist")) {
-      type_ = kSelectlist;
     } else {
       if (!params.new_value.IsNull()) {
         if (params.new_value.empty()) {
@@ -159,13 +147,6 @@
     }
   }
 
-  if (type_ == kSelectlist) {
-    CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-    if (auto* selectlist = OwnerSelectList()) {
-      selectlist->HandleButtonEvent(event);
-    }
-  }
-
   if (auto* select = OwnerSelect()) {
     CHECK(RuntimeEnabledFeatures::CustomizableSelectEnabled());
     // For native popups, use HTMLSelectElement's codepath. For <datalist>
@@ -182,9 +163,7 @@
     }
   }
 
-  // type=selectlist should not open the listbox when enter is pressed, which
-  // HandleKeyboardActivation would do via simulated click.
-  if (type_ != kSelectlist && HandleKeyboardActivation(event)) {
+  if (HandleKeyboardActivation(event)) {
     return;
   }
 
@@ -278,22 +257,6 @@
                                             source_capabilities);
 }
 
-HTMLSelectListElement* HTMLButtonElement::OwnerSelectList() const {
-  if (type_ != kSelectlist) {
-    return nullptr;
-  }
-  for (auto& ancestor : FlatTreeTraversal::AncestorsOf(*this)) {
-    if (IsA<HTMLListboxElement>(ancestor)) {
-      // Buttons inside listboxes are excluded from triggering the listbox.
-      return nullptr;
-    }
-    if (auto* selectlist = DynamicTo<HTMLSelectListElement>(ancestor)) {
-      return selectlist;
-    }
-  }
-  return nullptr;
-}
-
 HTMLSelectElement* HTMLButtonElement::OwnerSelect() const {
   if (!RuntimeEnabledFeatures::CustomizableSelectEnabled()) {
     return nullptr;
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.h b/third_party/blink/renderer/core/html/forms/html_button_element.h
index e469ad7a..ed855b79 100644
--- a/third_party/blink/renderer/core/html/forms/html_button_element.h
+++ b/third_party/blink/renderer/core/html/forms/html_button_element.h
@@ -29,8 +29,6 @@
 
 namespace blink {
 
-class HTMLSelectListElement;
-
 class CORE_EXPORT HTMLButtonElement final : public HTMLFormControlElement {
   DEFINE_WRAPPERTYPEINFO();
 
@@ -47,9 +45,6 @@
                          mojom::blink::FocusType,
                          InputDeviceCapabilities*) override;
 
-  // This returns a <selectlist> if this button has type=selectlist and is a
-  // descendant of a <selectlist>.
-  HTMLSelectListElement* OwnerSelectList() const;
   // This returns a <select> if this button has type=select and is a direct
   // child of a <select>.
   HTMLSelectElement* OwnerSelect() const;
@@ -63,8 +58,6 @@
     kSubmit = base::to_underlying(mojom::blink::FormControlType::kButtonSubmit),
     kReset = base::to_underlying(mojom::blink::FormControlType::kButtonReset),
     kButton = base::to_underlying(mojom::blink::FormControlType::kButtonButton),
-    kSelectlist =
-        base::to_underlying(mojom::blink::FormControlType::kButtonSelectList)
   };
 
   mojom::blink::FormControlType FormControlType() const override;
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
index 5b743f0..374043d 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
@@ -41,9 +41,7 @@
 #include "third_party/blink/renderer/core/html/forms/html_button_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_data_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/listed_element.h"
 #include "third_party/blink/renderer/core/html/forms/validity_state.h"
 #include "third_party/blink/renderer/core/html/html_element.h"
@@ -349,17 +347,6 @@
   target_element = GetElementAttributeResolvingReferenceTarget(
       html_names::kPopovertargetAttr);
 
-  // The selectlist element's button which opens its listbox forms an implicit
-  // popover trigger for the listbox in order to function properly with light
-  // dismiss.
-  if (!target_element && RuntimeEnabledFeatures::HTMLSelectListElementEnabled(
-                             GetDocument().GetExecutionContext())) {
-    if (auto* button = DynamicTo<HTMLButtonElement>(this)) {
-      if (auto* selectlist = button->OwnerSelectList()) {
-        target_element = selectlist->ListBoxPart();
-      }
-    }
-  }
 
   if (!target_element) {
     return no_element;
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc b/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc
index 95f534c..47003e4a 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc
@@ -186,9 +186,6 @@
                         "type=submit",
                         FormControlType::kButtonSubmit),
         std::make_tuple("button", "type=reset", FormControlType::kButtonReset),
-        std::make_tuple("button",
-                        "type=selectlist",
-                        FormControlType::kButtonSelectList),
         std::make_tuple("fieldset", "", FormControlType::kFieldset),
         std::make_tuple("input", "", FormControlType::kInputText),
         std::make_tuple("input", "type=button", FormControlType::kInputButton),
@@ -225,7 +222,6 @@
         std::make_tuple("output", "", FormControlType::kOutput),
         std::make_tuple("select", "", FormControlType::kSelectOne),
         std::make_tuple("select", "multiple", FormControlType::kSelectMultiple),
-        std::make_tuple("selectlist", "", FormControlType::kSelectList),
         std::make_tuple("textarea", "", FormControlType::kTextArea)));
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_listbox_element.cc b/third_party/blink/renderer/core/html/forms/html_listbox_element.cc
deleted file mode 100644
index 01221f5..0000000
--- a/third_party/blink/renderer/core/html/forms/html_listbox_element.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.
-
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
-
-#include "third_party/blink/renderer/core/dom/popover_data.h"
-#include "third_party/blink/renderer/core/dom/shadow_root.h"
-
-namespace blink {
-
-HTMLListboxElement::HTMLListboxElement(Document& document)
-    : HTMLElement(html_names::kListboxTag, document) {
-  CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-}
-
-Node::InsertionNotificationRequest HTMLListboxElement::InsertedInto(
-    ContainerNode& parent) {
-  if (OwnerSelectList()) {
-    EnsurePopoverData()->setType(PopoverValueType::kAuto);
-  }
-  return HTMLElement::InsertedInto(parent);
-}
-
-void HTMLListboxElement::RemovedFrom(ContainerNode& insertion_point) {
-  HTMLElement::RemovedFrom(insertion_point);
-
-  // Clean up the popover data we set in InsertedInto. If this listbox is still
-  // considered selectlist-associated, then UpdatePopoverAttribute will early
-  // out.
-  UpdatePopoverAttribute(FastGetAttribute(html_names::kPopoverAttr));
-}
-
-HTMLSelectListElement* HTMLListboxElement::OwnerSelectList() const {
-  if (auto* selectlist = DynamicTo<HTMLSelectListElement>(parentNode())) {
-    return selectlist;
-  }
-  if (auto* shadowroot = DynamicTo<ShadowRoot>(GetTreeScope())) {
-    if (auto* selectlist =
-            DynamicTo<HTMLSelectListElement>(shadowroot->host())) {
-      CHECK(shadowroot->IsUserAgent());
-      CHECK_EQ(ShadowPseudoId(), "-internal-selectlist-listbox");
-      return selectlist;
-    }
-  }
-  return nullptr;
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_listbox_element.h b/third_party/blink/renderer/core/html/forms/html_listbox_element.h
deleted file mode 100644
index 5f7ee81..0000000
--- a/third_party/blink/renderer/core/html/forms/html_listbox_element.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// 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.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_HTML_LISTBOX_ELEMENT_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_HTML_LISTBOX_ELEMENT_H_
-
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/html/html_element.h"
-
-namespace blink {
-
-class CORE_EXPORT HTMLListboxElement : public HTMLElement {
- public:
-  explicit HTMLListboxElement(Document&);
-
-  InsertionNotificationRequest InsertedInto(ContainerNode&) override;
-  void RemovedFrom(ContainerNode& insertion_point) override;
-
-  HTMLSelectListElement* OwnerSelectList() const;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_HTML_LISTBOX_ELEMENT_H_
diff --git a/third_party/blink/renderer/core/html/forms/html_option_element.cc b/third_party/blink/renderer/core/html/forms/html_option_element.cc
index a2c9cb4..5a29915 100644
--- a/third_party/blink/renderer/core/html/forms/html_option_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_option_element.cc
@@ -43,7 +43,6 @@
 #include "third_party/blink/renderer/core/html/forms/html_data_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/html_slot_element.h"
 #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
 #include "third_party/blink/renderer/core/html_names.h"
@@ -133,10 +132,6 @@
 
 FocusableState HTMLOptionElement::SupportsFocus(
     UpdateBehavior update_behavior) const {
-  if (is_descendant_of_select_list_) {
-    return IsDisabledFormControl() ? FocusableState::kNotFocusable
-                                   : FocusableState::kFocusable;
-  }
   HTMLSelectElement* select = OwnerSelectElement();
   if (select && select->UsesMenuList()) {
     if (select->IsAppearanceBasePicker()) {
@@ -227,10 +222,6 @@
   if (name == html_names::kValueAttr) {
     if (HTMLDataListElement* data_list = OwnerDataListElement()) {
       data_list->OptionElementChildrenChanged();
-    } else if (is_descendant_of_select_list_) [[unlikely]] {
-      if (HTMLSelectListElement* select_list = OwnerSelectList()) {
-        select_list->OptionElementValueChanged(*this);
-      }
     }
   } else if (name == html_names::kDisabledAttr) {
     if (params.old_value.IsNull() != params.new_value.IsNull()) {
@@ -276,8 +267,6 @@
 
   if (HTMLSelectElement* select = OwnerSelectElement()) {
     select->OptionSelectionStateChanged(this, selected);
-  } else if (HTMLSelectListElement* select_list = OwnerSelectList()) {
-    select_list->OptionSelectionStateChanged(this, selected);
   }
 }
 
@@ -359,9 +348,6 @@
   if (HTMLSelectElement* select = OwnerSelectElement()) {
     select->OptionElementChildrenChanged(*this);
   }
-  if (HTMLSelectListElement* select_list = OwnerSelectList()) {
-    select_list->OptionElementChildrenChanged(*this);
-  }
   UpdateLabel();
 }
 
@@ -396,18 +382,6 @@
   return nullptr;
 }
 
-HTMLSelectListElement* HTMLOptionElement::OwnerSelectList() const {
-  if (!RuntimeEnabledFeatures::HTMLSelectListElementEnabled()) {
-    return nullptr;
-  }
-  for (auto& ancestor : FlatTreeTraversal::AncestorsOf(*this)) {
-    if (auto* selectlist = DynamicTo<HTMLSelectListElement>(ancestor)) {
-      return selectlist;
-    }
-  }
-  return nullptr;
-}
-
 String HTMLOptionElement::label() const {
   const AtomicString& label = FastGetAttribute(html_names::kLabelAttr);
   if (!label.IsNull())
@@ -473,11 +447,6 @@
 }
 
 void HTMLOptionElement::UpdateLabel() {
-  // For <selectlist> the label should not replace descendants for the visual
-  // in order to allow to render arbitrary content.
-  if (is_descendant_of_select_list_) {
-    return;
-  }
   // For appearance:base-select <select> we also need to render all children. We
   // only check UsesMenuList and not computed style because we don't want to
   // change DOM content based on computed style and because appearance:auto/none
@@ -613,10 +582,6 @@
     return;
   }
 
-  if (is_descendant_of_select_list_) {
-    return;
-  }
-
 #if DCHECK_IS_ON()
   {
     // Double-check to make sure that we are setting the correct state according
@@ -649,39 +614,6 @@
   }
 }
 
-void HTMLOptionElement::OptionInsertedIntoSelectListElement() {
-  CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-  CHECK(!is_descendant_of_select_list_);
-
-  ShadowRoot* root = UserAgentShadowRoot();
-  DCHECK(root);
-
-  is_descendant_of_select_list_ = true;
-  // TODO(crbug.com/1196022) Refine the content that an option can render.
-  // Enable the option element to render arbitrary content.
-  root->RemoveChildren();
-  Document& document = GetDocument();
-  auto* default_slot = MakeGarbageCollected<HTMLSlotElement>(document);
-  root->AppendChild(default_slot);
-}
-
-void HTMLOptionElement::OptionRemovedFromSelectListElement() {
-  CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-
-  if (!is_descendant_of_select_list_) {
-    // See the comments in HTMLOptionElement::RemovedFrom which explain when
-    // this can happen.
-    return;
-  }
-
-  ShadowRoot* root = UserAgentShadowRoot();
-  DCHECK(root);
-
-  is_descendant_of_select_list_ = false;
-  root->RemoveChildren();
-  UpdateLabel();
-}
-
 bool HTMLOptionElement::SpatialNavigationFocused() const {
   HTMLSelectElement* select = OwnerSelectElement();
   if (!select || !select->IsFocused())
@@ -765,11 +697,7 @@
 
     if (key == keywords::kTab &&
         !(keyboard_event->GetModifiers() & tab_ignore_modifiers)) {
-      if (auto* selectlist = OwnerSelectList()) {
-        selectlist->CloseListbox();
-        event.SetDefaultHandled();
-        return;
-      } else if (select) {
+      if (select) {
         // TODO(http://crbug.com/1511354): Consider focusing something in this
         // case. https://github.com/openui/open-ui/issues/1016
         select->HidePopup();
diff --git a/third_party/blink/renderer/core/html/forms/html_option_element.h b/third_party/blink/renderer/core/html/forms/html_option_element.h
index b699808..d2fc622 100644
--- a/third_party/blink/renderer/core/html/forms/html_option_element.h
+++ b/third_party/blink/renderer/core/html/forms/html_option_element.h
@@ -79,7 +79,6 @@
 
   HTMLDataListElement* OwnerDataListElement() const;
   HTMLSelectElement* OwnerSelectElement() const;
-  HTMLSelectListElement* OwnerSelectList() const;
 
   String label() const;
   void setLabel(const AtomicString&);
@@ -117,19 +116,12 @@
 
   // These methods mutate the shadowroot to switch between rendering all
   // children or only text content. SetTextOnlyRendering is used for
-  // appearance:base-select, and the *SelectList* ones are used for
-  // <selectlist>. The mechanism by which these methods render all children or
-  // only text content is that the UA shadowroot has a manually updated text
-  // node for text-only mode or a slot element which just slots all nodes into
-  // it for the render everything mode. SetTextOnlyRendering switches the
-  // ShadowRoot state based on the provided argument.
-  // OptionInsertedIntoSelectListElement removes all children from the
-  // ShadowRoot and adds the slot for render everything mode.
-  // OptionRemovedFromSelectListElement removes all children from the ShadowRoot
-  // and adds the text node for text-only mode.
+  // appearance:base-select. The mechanism by which these methods render all
+  // children or only text content is that the UA shadowroot has a manually
+  // updated text node for text-only mode or a slot element which just slots all
+  // nodes into it for the render everything mode. SetTextOnlyRendering switches
+  // the ShadowRoot state based on the provided argument.
   void SetTextOnlyRendering(bool);
-  void OptionInsertedIntoSelectListElement();
-  void OptionRemovedFromSelectListElement();
 
   // Callback for OptionTextObserver.
   void DidChangeTextContent();
@@ -167,10 +159,6 @@
   // OptionInserted() is not called yet.
   bool was_option_inserted_called_ = false;
 
-  // This flag is necessary to detect when an option is a descendant of
-  // <selectlist> in order to be able to render arbitrary content.
-  bool is_descendant_of_select_list_ = false;
-
   friend class HTMLOptionElementTest;
 };
 
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc
index dbba047c..590642f 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -913,7 +913,7 @@
       .GetFrame()
       ->GetPage()
       ->GetChromeClient()
-      .SelectOrSelectListFieldOptionsChanged(*this);
+      .SelectFieldOptionsChanged(*this);
 }
 
 void HTMLSelectElement::OptionRemoved(HTMLOptionElement& option) {
@@ -940,7 +940,7 @@
       .GetFrame()
       ->GetPage()
       ->GetChromeClient()
-      .SelectOrSelectListFieldOptionsChanged(*this);
+      .SelectFieldOptionsChanged(*this);
 }
 
 void HTMLSelectElement::OptGroupInsertedOrRemoved(
diff --git a/third_party/blink/renderer/core/html/forms/html_select_list_element.cc b/third_party/blink/renderer/core/html/forms/html_select_list_element.cc
deleted file mode 100644
index 4073476..0000000
--- a/third_party/blink/renderer/core/html/forms/html_select_list_element.cc
+++ /dev/null
@@ -1,1537 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
-
-#include "third_party/blink/public/strings/grit/blink_strings.h"
-#include "third_party/blink/renderer/core/css/properties/longhand.h"
-#include "third_party/blink/renderer/core/css/properties/longhands.h"
-#include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
-#include "third_party/blink/renderer/core/dom/events/event.h"
-#include "third_party/blink/renderer/core/dom/flat_tree_traversal.h"
-#include "third_party/blink/renderer/core/dom/focus_params.h"
-#include "third_party/blink/renderer/core/dom/shadow_root.h"
-#include "third_party/blink/renderer/core/dom/synchronous_mutation_observer.h"
-#include "third_party/blink/renderer/core/dom/text.h"
-#include "third_party/blink/renderer/core/events/keyboard_event.h"
-#include "third_party/blink/renderer/core/execution_context/execution_context.h"
-#include "third_party/blink/renderer/core/frame/local_frame.h"
-#include "third_party/blink/renderer/core/frame/web_feature.h"
-#include "third_party/blink/renderer/core/html/forms/form_controller.h"
-#include "third_party/blink/renderer/core/html/forms/form_data.h"
-#include "third_party/blink/renderer/core/html/forms/html_button_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_form_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_option_element.h"
-#include "third_party/blink/renderer/core/html/forms/select_list_part_traversal.h"
-#include "third_party/blink/renderer/core/html/html_collection.h"
-#include "third_party/blink/renderer/core/html/html_div_element.h"
-#include "third_party/blink/renderer/core/html/html_slot_element.h"
-#include "third_party/blink/renderer/core/html_names.h"
-#include "third_party/blink/renderer/core/inspector/console_message.h"
-#include "third_party/blink/renderer/core/keywords.h"
-#include "third_party/blink/renderer/core/page/chrome_client.h"
-#include "third_party/blink/renderer/core/page/page.h"
-#include "third_party/blink/renderer/core/style/computed_style.h"
-#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/keyboard_codes.h"
-#include "third_party/blink/renderer/platform/text/platform_locale.h"
-#include "third_party/blink/renderer/platform/wtf/text/unicode.h"
-
-namespace blink {
-
-using mojom::blink::FormControlType;
-
-namespace {
-class PreviewPopoverInnerElement : public HTMLDivElement {
- public:
-  explicit PreviewPopoverInnerElement(Document& document)
-      : HTMLDivElement(document) {
-    SetHasCustomStyleCallbacks();
-  }
-
- private:
-  const ComputedStyle* CustomStyleForLayoutObject(
-      const StyleRecalcContext& style_recalc_context) override {
-    HTMLSelectListElement* selectlist =
-        DynamicTo<HTMLSelectListElement>(OwnerShadowHost());
-    if (!selectlist || !selectlist->ButtonPart() ||
-        !selectlist->ButtonPart()->GetComputedStyle()) {
-      return HTMLDivElement::CustomStyleForLayoutObject(style_recalc_context);
-    }
-
-    const ComputedStyle& button_style =
-        selectlist->ButtonPart()->ComputedStyleRef();
-    const ComputedStyle* original_style =
-        OriginalStyleForLayoutObject(style_recalc_context);
-    ComputedStyleBuilder style_builder(*original_style);
-    if (button_style.HasAuthorBorderRadius()) {
-      style_builder.SetBorderBottomLeftRadius(
-          button_style.BorderBottomLeftRadius());
-      style_builder.SetBorderBottomRightRadius(
-          button_style.BorderBottomRightRadius());
-      style_builder.SetBorderTopLeftRadius(button_style.BorderTopLeftRadius());
-      style_builder.SetBorderTopRightRadius(
-          button_style.BorderTopRightRadius());
-    }
-    if (button_style.HasAuthorBorder()) {
-      style_builder.SetBorderColorFrom(button_style);
-
-      style_builder.SetBorderBottomWidth(button_style.BorderBottomWidth());
-      style_builder.SetBorderLeftWidth(button_style.BorderLeftWidth());
-      style_builder.SetBorderRightWidth(button_style.BorderRightWidth());
-      style_builder.SetBorderTopWidth(button_style.BorderTopWidth());
-
-      style_builder.SetBorderBottomStyle(button_style.BorderBottomStyle());
-      style_builder.SetBorderLeftStyle(button_style.BorderLeftStyle());
-      style_builder.SetBorderRightStyle(button_style.BorderRightStyle());
-      style_builder.SetBorderTopStyle(button_style.BorderTopStyle());
-    }
-
-    style_builder.SetPaddingBottom(button_style.PaddingBottom());
-    style_builder.SetPaddingLeft(button_style.PaddingLeft());
-    style_builder.SetPaddingRight(button_style.PaddingRight());
-    style_builder.SetPaddingTop(button_style.PaddingTop());
-
-    return style_builder.TakeStyle();
-  }
-};
-
-}  // anonymous namespace
-
-class HTMLSelectListElement::SelectMutationCallback
-    : public GarbageCollected<HTMLSelectListElement::SelectMutationCallback>,
-      public SynchronousMutationObserver {
- public:
-  explicit SelectMutationCallback(HTMLSelectListElement& select);
-
-  // SynchronousMutationObserver:
-  void DidChangeChildren(const ContainerNode& container,
-                         const ContainerNode::ChildrenChange& change) final;
-  void AttributeChanged(const Element& target,
-                        const QualifiedName& name,
-                        const AtomicString& old_value,
-                        const AtomicString& new_value) final;
-
-  void Trace(Visitor* visitor) const override;
-
- private:
-  template <typename StringType>
-  void PartInserted(const StringType& part_name, HTMLElement* element);
-
-  template <typename StringType>
-  void PartRemoved(const StringType& part_name, HTMLElement* element);
-
-  template <typename StringType>
-  void SlotChanged(const StringType& slot_name);
-
-  Member<HTMLSelectListElement> select_;
-};
-
-HTMLSelectListElement::SelectMutationCallback::SelectMutationCallback(
-    HTMLSelectListElement& select)
-    : select_(select) {
-  SetDocument(&select_->GetDocument());
-}
-
-void HTMLSelectListElement::SelectMutationCallback::Trace(
-    Visitor* visitor) const {
-  visitor->Trace(select_);
-  SynchronousMutationObserver::Trace(visitor);
-}
-
-void HTMLSelectListElement::SelectMutationCallback::DidChangeChildren(
-    const ContainerNode& container,
-    const ContainerNode::ChildrenChange& change) {
-  if (!select_->IsShadowIncludingInclusiveAncestorOf(container))
-    return;
-
-  if (change.type == ChildrenChangeType::kElementInserted) {
-    auto* root_node = change.sibling_changed;
-    for (auto* node = root_node; node != nullptr;
-         node = SelectListPartTraversal::Next(*node, root_node)) {
-      if (auto* element = DynamicTo<HTMLElement>(node)) {
-        const AtomicString& part =
-            element->getAttribute(html_names::kBehaviorAttr);
-        PartInserted(part, element);
-        SlotChanged(element->SlotName());
-
-        if (element->HasTagName(html_names::kSelectedoptionTag)) {
-          select_->UpdateSelectedValuePart();
-        } else if (IsA<HTMLListboxElement>(element)) {
-          select_->UpdateListboxPart();
-        }
-      }
-    }
-  } else if (change.type == ChildrenChangeType::kElementRemoved) {
-    auto* root_node = change.sibling_changed;
-    for (auto* node = root_node; node != nullptr;
-         node = SelectListPartTraversal::Next(*node, root_node)) {
-      if (auto* element = DynamicTo<HTMLElement>(node)) {
-        const AtomicString& part =
-            element->getAttribute(html_names::kBehaviorAttr);
-        PartRemoved(part, element);
-        SlotChanged(element->SlotName());
-      }
-    }
-  } else if (change.type == ChildrenChangeType::kAllChildrenRemoved) {
-    select_->EnsureButtonPartIsValid();
-    select_->EnsureSelectedValuePartIsValid();
-    select_->EnsureListboxPartIsValid();
-  }
-}
-
-void HTMLSelectListElement::SelectMutationCallback::AttributeChanged(
-    const Element& target,
-    const QualifiedName& name,
-    const AtomicString& old_value,
-    const AtomicString& new_value) {
-  if (old_value == new_value ||
-      !select_->IsShadowIncludingInclusiveAncestorOf(target)) {
-    return;
-  }
-  if (auto* element = DynamicTo<HTMLElement>(const_cast<Element*>(&target))) {
-    if (name == html_names::kBehaviorAttr) {
-      PartRemoved(old_value, element);
-      PartInserted(new_value, element);
-    } else if (name == html_names::kSlotAttr) {
-      if (auto* option = DynamicTo<HTMLOptionElement>(element)) {
-        if (!select_->IsValidOptionPart(element, /*show_warning=*/false)) {
-          select_->OptionPartRemoved(option);
-        } else {
-          select_->OptionPartInserted(option);
-        }
-      } else {
-        SlotChanged(old_value);
-        SlotChanged(new_value);
-      }
-    } else if (name == html_names::kPopoverAttr) {
-      // We unconditionally update the listbox part here, because this popover
-      // attribute change could either be on the existing listbox part, or on
-      // an earlier child of the <selectlist> which makes
-      // FirstValidListboxPart() return a different element.
-      select_->UpdateListboxPart();
-    }
-  }
-}
-
-template <typename StringType>
-void HTMLSelectListElement::SelectMutationCallback::PartInserted(
-    const StringType& part_name,
-    HTMLElement* element) {
-  if (part_name == kButtonPartName) {
-    select_->ButtonPartInserted(element);
-  } else if (part_name == kSelectedValuePartName) {
-    select_->SelectedValuePartInserted(element);
-  } else if (part_name == kListboxPartName) {
-    select_->ListboxPartInserted(element);
-  } else if (auto* options_element = DynamicTo<HTMLOptionElement>(element)) {
-    select_->OptionPartInserted(options_element);
-  }
-}
-
-template <typename StringType>
-void HTMLSelectListElement::SelectMutationCallback::PartRemoved(
-    const StringType& part_name,
-    HTMLElement* element) {
-  if (part_name == kButtonPartName) {
-    select_->ButtonPartRemoved(element);
-  } else if (part_name == kSelectedValuePartName) {
-    select_->SelectedValuePartRemoved(element);
-  } else if (part_name == kListboxPartName) {
-    select_->ListboxPartRemoved(element);
-  } else if (auto* options_element = DynamicTo<HTMLOptionElement>(element)) {
-    select_->OptionPartRemoved(options_element);
-  }
-}
-
-template <typename StringType>
-void HTMLSelectListElement::SelectMutationCallback::SlotChanged(
-    const StringType& slot_name) {
-  if (slot_name == kListboxPartName) {
-    select_->UpdateListboxPart();
-  } else if (slot_name == kButtonPartName) {
-    select_->UpdateButtonPart();
-    select_->UpdateSelectedValuePart();
-  }
-}
-
-HTMLSelectListElement::HTMLSelectListElement(Document& document)
-    : HTMLFormControlElementWithState(html_names::kSelectlistTag, document),
-      type_ahead_(this) {
-  DCHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-  UseCounter::Count(document, WebFeature::kSelectListElement);
-
-  EnsureUserAgentShadowRoot(SlotAssignmentMode::kManual);
-  select_mutation_callback_ =
-      MakeGarbageCollected<HTMLSelectListElement::SelectMutationCallback>(
-          *this);
-
-  // A selectlist is the implicit anchor of its listbox and of the autofill
-  // preview.
-  IncrementImplicitlyAnchoredElementCount();
-  IncrementImplicitlyAnchoredElementCount();
-}
-
-namespace {
-bool HasOptionElementDescendant(Element* element) {
-  for (auto& descendant : ElementTraversal::DescendantsOf(*element)) {
-    if (DynamicTo<HTMLOptionElement>(descendant)) {
-      return true;
-    }
-  }
-  return false;
-}
-}  // namespace
-
-void HTMLSelectListElement::ManuallyAssignSlots() {
-  Element* explicit_button = nullptr;
-  VectorOf<Node> button_nodes;
-  Element* listbox = nullptr;
-  Element* selected_value = nullptr;
-  Element* marker = nullptr;
-  VectorOf<Node> options;
-  for (Node& node : NodeTraversal::ChildrenOf(*this)) {
-    if (auto* element = DynamicTo<Element>(node)) {
-      if (!explicit_button && element->SlotName() == kButtonPartName) {
-        explicit_button = element;
-      } else if (!listbox && (element->SlotName() == kListboxPartName ||
-                              IsA<HTMLListboxElement>(element))) {
-        listbox = element;
-      } else if (!selected_value &&
-                 element->SlotName() == kSelectedValuePartName) {
-        selected_value = element;
-      } else if (!marker && element->SlotName() == kMarkerPartName) {
-        marker = element;
-      } else if (auto* option = DynamicTo<HTMLOptionElement>(element)) {
-        options.push_back(option);
-      } else if (auto* optgroup = DynamicTo<HTMLOptGroupElement>(element)) {
-        options.push_back(optgroup);
-      } else if (HasOptionElementDescendant(element)) {
-        options.push_back(element);
-      } else {
-        button_nodes.push_back(element);
-      }
-    } else if (auto* text = DynamicTo<Text>(node)) {
-      if (!text->ContainsOnlyWhitespaceOrEmpty()) {
-        button_nodes.push_back(node);
-      }
-    }
-  }
-
-  if (explicit_button) {
-    button_slot_->Assign(explicit_button);
-  } else {
-    button_slot_->Assign(button_nodes);
-  }
-  listbox_slot_->Assign(listbox);
-  selected_value_slot_->Assign(selected_value);
-  marker_slot_->Assign(marker);
-  options_slot_->Assign(options);
-}
-
-HTMLSelectListElement::PartType HTMLSelectListElement::AssignedPartType(
-    Node* node) const {
-  if (node == button_part_) {
-    return PartType::kButton;
-  } else if (node == listbox_part_) {
-    return PartType::kListBox;
-  } else if (auto* option_element = DynamicTo<HTMLOptionElement>(node);
-             option_element && option_parts_.Contains(option_element)) {
-    return PartType::kOption;
-  }
-
-  return PartType::kNone;
-}
-
-const HTMLSelectListElement::ListItems& HTMLSelectListElement::GetListItems()
-    const {
-  if (should_recalc_list_items_) {
-    RecalcListItems();
-  }
-  return list_items_;
-}
-
-void HTMLSelectListElement::DidAddUserAgentShadowRoot(ShadowRoot& root) {
-  DCHECK(IsShadowHost(this));
-
-  root.SetDelegatesFocus(true);
-
-  Document& document = GetDocument();
-
-  AtomicString button_part(kButtonPartName);
-  button_slot_ = MakeGarbageCollected<HTMLSlotElement>(document);
-  button_slot_->setAttribute(html_names::kNameAttr, button_part);
-
-  button_part_ = MakeGarbageCollected<HTMLButtonElement>(document);
-  button_part_->setAttribute(html_names::kTypeAttr, AtomicString("selectlist"));
-  button_part_->setAttribute(html_names::kPartAttr, button_part);
-  button_part_->SetShadowPseudoId(AtomicString("-internal-selectlist-button"));
-  button_part_listener_ =
-      MakeGarbageCollected<HTMLSelectListElement::ButtonPartEventListener>(
-          this);
-  button_part_listener_->AddEventListeners(button_part_);
-
-  AtomicString selected_value_part(kSelectedValuePartName);
-  selected_value_slot_ = MakeGarbageCollected<HTMLSlotElement>(document);
-  selected_value_slot_->setAttribute(html_names::kNameAttr,
-                                     selected_value_part);
-
-  selected_value_part_ = MakeGarbageCollected<HTMLElement>(
-      html_names::kSelectedoptionTag, document);
-  selected_value_part_->setAttribute(html_names::kPartAttr,
-                                     selected_value_part);
-  selected_value_part_->SetShadowPseudoId(
-      AtomicString("-internal-selectlist-selected-value"));
-
-  AtomicString marker_part(kMarkerPartName);
-  marker_slot_ = MakeGarbageCollected<HTMLSlotElement>(document);
-  marker_slot_->setAttribute(html_names::kNameAttr, marker_part);
-
-  auto* marker_icon = MakeGarbageCollected<HTMLDivElement>(document);
-  marker_icon->SetShadowPseudoId(
-      AtomicString("-internal-selectlist-button-icon"));
-  marker_icon->setAttribute(html_names::kPartAttr, marker_part);
-
-  AtomicString listbox_part(kListboxPartName);
-  listbox_slot_ = MakeGarbageCollected<HTMLSlotElement>(document);
-  listbox_slot_->setAttribute(html_names::kNameAttr, listbox_part);
-
-  default_listbox_ = MakeGarbageCollected<HTMLListboxElement>(document);
-  default_listbox_->setAttribute(html_names::kPartAttr, listbox_part);
-  default_listbox_->SetShadowPseudoId(
-      AtomicString("-internal-selectlist-listbox"));
-
-  options_slot_ = MakeGarbageCollected<HTMLSlotElement>(document);
-
-  button_part_->AppendChild(selected_value_slot_);
-  button_part_->AppendChild(marker_slot_);
-
-  selected_value_slot_->AppendChild(selected_value_part_);
-
-  marker_slot_->AppendChild(marker_icon);
-
-  button_slot_->AppendChild(button_part_);
-
-  default_listbox_->appendChild(options_slot_);
-  listbox_slot_->appendChild(default_listbox_);
-
-  root.AppendChild(button_slot_);
-  root.AppendChild(listbox_slot_);
-
-  SetListboxPart(default_listbox_);
-
-  option_part_listener_ =
-      MakeGarbageCollected<HTMLSelectListElement::OptionPartEventListener>(
-          this);
-
-  suggested_option_popover_ =
-      MakeGarbageCollected<PreviewPopoverInnerElement>(document);
-  suggested_option_popover_->setAttribute(html_names::kPopoverAttr,
-                                          keywords::kManual);
-  suggested_option_popover_->SetInternalImplicitAnchor(this);
-  suggested_option_popover_->SetShadowPseudoId(
-      AtomicString("-internal-selectlist-preview"));
-  root.AppendChild(suggested_option_popover_);
-}
-
-void HTMLSelectListElement::DidMoveToNewDocument(Document& old_document) {
-  HTMLFormControlElementWithState::DidMoveToNewDocument(old_document);
-  select_mutation_callback_->SetDocument(&GetDocument());
-
-  // Since we're observing the lifecycle updates, ensure that we listen to the
-  // right document's view.
-  if (queued_check_for_missing_parts_) {
-    if (old_document.View())
-      old_document.View()->UnregisterFromLifecycleNotifications(this);
-
-    if (GetDocument().View())
-      GetDocument().View()->RegisterForLifecycleNotifications(this);
-    else
-      queued_check_for_missing_parts_ = false;
-  }
-}
-
-void HTMLSelectListElement::DisabledAttributeChanged() {
-  HTMLFormControlElementWithState::DisabledAttributeChanged();
-  if (GetShadowRoot()) {
-    // Clear "delegates focus" property to make selectlist unfocusable.
-    GetShadowRoot()->SetDelegatesFocus(!IsDisabledFormControl());
-  }
-}
-
-String HTMLSelectListElement::value() const {
-  if (HTMLOptionElement* option = selectedOption()) {
-    return option->value();
-  }
-  return "";
-}
-
-void HTMLSelectListElement::setValueForBinding(const String& value) {
-  String old_value = this->value();
-  bool was_autofilled = IsAutofilled();
-  bool value_changed = old_value != value;
-  setValue(value, /*send_events=*/false,
-           was_autofilled && !value_changed ? WebAutofillState::kAutofilled
-                                            : WebAutofillState::kNotFilled);
-  if (Page* page = GetDocument().GetPage(); page && value_changed) {
-    page->GetChromeClient().JavaScriptChangedValue(*this, old_value,
-                                                   was_autofilled);
-  }
-}
-
-void HTMLSelectListElement::setValue(const String& value,
-                                     bool send_events,
-                                     WebAutofillState autofill_state) {
-  // Find the option with value matching the given parameter and make it the
-  // current selection.
-  HTMLOptionElement* selected_option = nullptr;
-  for (auto& option : option_parts_) {
-    if (option->value() == value) {
-      selected_option = option;
-      break;
-    }
-  }
-  SetSuggestedOption(nullptr);
-  SetSelectedOption(selected_option, send_events, autofill_state);
-}
-
-bool HTMLSelectListElement::open() const {
-  // TODO(crbug.com/1121840) listbox_part_ can be null if
-  // the author has filled the listbox slot without including
-  // a replacement listbox part. Instead of null checks like this,
-  // we should consider refusing to render the control at all if
-  // either of the key parts (button or listbox) are missing.
-  if (!listbox_part_)
-    return false;
-  return listbox_part_->HasPopoverAttribute() && listbox_part_->popoverOpen();
-}
-
-void HTMLSelectListElement::SetAutofillValue(const String& value,
-                                             WebAutofillState autofill_state) {
-  auto interacted_state = interacted_state_;
-  setValue(value, /*send_events=*/true, autofill_state);
-  interacted_state_ = interacted_state;
-}
-
-String HTMLSelectListElement::SuggestedValue() const {
-  return suggested_option_ ? suggested_option_->value() : "";
-}
-
-void HTMLSelectListElement::SetSuggestedValue(const String& value) {
-  if (value.IsNull()) {
-    SetSuggestedOption(nullptr);
-    return;
-  }
-
-  for (auto& option : option_parts_) {
-    if (option->value() == value) {
-      SetSuggestedOption(option);
-      return;
-    }
-  }
-
-  SetSuggestedOption(nullptr);
-}
-
-void HTMLSelectListElement::OpenListbox() {
-  if (listbox_part_ && !open()) {
-    listbox_part_->showPopover(ASSERT_NO_EXCEPTION);
-    PseudoStateChanged(CSSSelector::kPseudoClosed);
-    PseudoStateChanged(CSSSelector::kPseudoOpen);
-    if (selectedOption()) {
-      selectedOption()->Focus(FocusParams(FocusTrigger::kUserGesture));
-    }
-    selected_option_when_listbox_opened_ = selectedOption();
-  }
-}
-
-void HTMLSelectListElement::CloseListbox() {
-  if (listbox_part_ && open()) {
-    // TODO(http://crbug.com/1121840): listbox_part_ should always have a
-    // popover attribute. This should probably be a CHECK, and may have been a
-    // remnant of the behavior attribute.
-    if (listbox_part_->HasPopoverAttribute()) {
-      // We will handle focus directly.
-      listbox_part_->HidePopoverInternal(
-          HidePopoverFocusBehavior::kNone,
-          HidePopoverTransitionBehavior::kFireEventsAndWaitForTransitions,
-          /*exception_state=*/nullptr);
-    }
-    type_ahead_.ResetSession();
-  }
-}
-
-bool HTMLSelectListElement::TypeAheadFind(const KeyboardEvent& event,
-                                          int charCode) {
-  if (event.ctrlKey() || event.altKey() || event.metaKey() ||
-      !WTF::unicode::IsPrintableChar(charCode)) {
-    return false;
-  }
-
-  int index = type_ahead_.HandleEvent(
-      event, charCode, TypeAhead::kMatchPrefix | TypeAhead::kCycleFirstChar);
-  if (index < 0) {
-    return false;
-  }
-
-  SetSelectedOption(OptionAtListIndex(index), /*send_events=*/true);
-  if (open() && selectedOption()) {
-    selectedOption()->Focus(FocusParams(FocusTrigger::kUserGesture));
-  }
-
-  selected_option_->SetDirty(true);
-  return true;
-}
-
-void HTMLSelectListElement::ListboxWasClosed() {
-  PseudoStateChanged(CSSSelector::kPseudoClosed);
-  PseudoStateChanged(CSSSelector::kPseudoOpen);
-  if (button_part_) {
-    button_part_->Focus(FocusParams(FocusTrigger::kUserGesture));
-  }
-  if (selectedOption() != selected_option_when_listbox_opened_) {
-    DispatchChangeEvent();
-  }
-}
-
-void HTMLSelectListElement::ResetTypeAheadSessionForTesting() {
-  type_ahead_.ResetSession();
-}
-
-bool HTMLSelectListElement::SetListboxPart(HTMLElement* new_listbox_part) {
-  if (listbox_part_ == new_listbox_part)
-    return false;
-
-  if (listbox_part_) {
-    listbox_part_->SetInternalImplicitAnchor(nullptr);
-  }
-
-  if (new_listbox_part) {
-    new_listbox_part->SetInternalImplicitAnchor(this);
-  } else {
-    QueueCheckForMissingParts();
-  }
-
-  listbox_part_ = new_listbox_part;
-  return true;
-}
-
-bool HTMLSelectListElement::IsValidButtonPart(const Node* node,
-                                              bool show_warning) const {
-  auto* element = DynamicTo<Element>(node);
-  if (!element) {
-    return false;
-  }
-  auto* button = DynamicTo<HTMLButtonElement>(node);
-
-  // TODO(http://crbug.com/1121840): When the old architecture is fully removed,
-  // this behavior attribute check can be removed and we can just have the
-  // <button type=selectlist> check instead.
-  if (!(button && button->type() == "selectlist") &&
-      element->getAttribute(html_names::kBehaviorAttr) != kButtonPartName) {
-    return false;
-  }
-
-  bool is_valid_tree_position =
-      !listbox_part_ ||
-      !FlatTreeTraversal::IsDescendantOf(*element, *listbox_part_);
-  if (!is_valid_tree_position && show_warning) {
-    GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-        mojom::blink::ConsoleMessageSource::kRendering,
-        mojom::blink::ConsoleMessageLevel::kWarning,
-        "To receive button part controller code, an element labeled as a "
-        "button must not be a descendant of the <selectlist>'s listbox "
-        "part. This <selectlist> will not be fully functional."));
-  }
-
-  return is_valid_tree_position;
-}
-
-bool HTMLSelectListElement::IsValidListboxPart(const Node* node,
-                                               bool show_warning) const {
-  auto* element = DynamicTo<HTMLElement>(node);
-  if (!element) {
-    return false;
-  }
-
-  if (node == default_listbox_) {
-    return true;
-  }
-
-  if (IsA<HTMLListboxElement>(element) && element->parentNode() == this) {
-    return true;
-  }
-
-  if (element->getAttribute(html_names::kBehaviorAttr) != kListboxPartName) {
-    return false;
-  }
-
-  if (!element->HasPopoverAttribute()) {
-    if (show_warning) {
-      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-          mojom::blink::ConsoleMessageSource::kRendering,
-          mojom::blink::ConsoleMessageLevel::kWarning,
-          "Found non-popover element labeled as listbox under "
-          "<selectlist>, which is not allowed. The <selectlist>'s "
-          "listbox element must have a valid value set for the 'popover' "
-          "attribute. This <selectlist> will not be fully functional."));
-    }
-    return false;
-  }
-
-  if (button_part_ &&
-      FlatTreeTraversal::IsDescendantOf(*element, *button_part_)) {
-    if (show_warning) {
-      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-          mojom::blink::ConsoleMessageSource::kRendering,
-          mojom::blink::ConsoleMessageLevel::kWarning,
-          "To receive listbox part controller code, an element labeled as a "
-          "listbox must not be a descendant of the <selectlist>'s button "
-          "part. This <selectlist> will not be fully functional."));
-    }
-    return false;
-  }
-
-  // We only get here if behavior=listbox.
-  return true;
-}
-
-bool HTMLSelectListElement::IsValidOptionPart(const Node* node,
-                                              bool show_warning) const {
-  auto* element = DynamicTo<HTMLElement>(node);
-  if (!element || !IsA<HTMLOptionElement>(element)) {
-    return false;
-  }
-
-  bool is_valid_tree_position =
-      listbox_part_ &&
-      SelectListPartTraversal::IsDescendantOf(*element, *listbox_part_);
-  if (!is_valid_tree_position && show_warning) {
-    GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-        mojom::blink::ConsoleMessageSource::kRendering,
-        mojom::blink::ConsoleMessageLevel::kWarning,
-        "To receive option part controller code, an element labeled as an "
-        "option must be a descendant of the <selectlist>'s listbox "
-        "part. This <selectlist> will not be fully functional."));
-  }
-  return is_valid_tree_position;
-}
-
-HTMLElement* HTMLSelectListElement::FirstValidButtonPart() const {
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidButtonPart(node, /*show_warning=*/false)) {
-      return DynamicTo<HTMLElement>(node);
-    }
-  }
-
-  return nullptr;
-}
-
-void HTMLSelectListElement::SetButtonPart(HTMLElement* new_button_part) {
-  if (button_part_ == new_button_part)
-    return;
-
-  if (button_part_) {
-    button_part_listener_->RemoveEventListeners(button_part_);
-  }
-
-  if (new_button_part) {
-    button_part_listener_->AddEventListeners(new_button_part);
-  } else {
-    QueueCheckForMissingParts();
-  }
-
-  button_part_ = new_button_part;
-}
-
-void HTMLSelectListElement::ButtonPartInserted(HTMLElement* new_button_part) {
-  if (!IsValidButtonPart(new_button_part, /*show_warning=*/true)) {
-    return;
-  }
-
-  UpdateButtonPart();
-}
-
-void HTMLSelectListElement::ButtonPartRemoved(HTMLElement* button_part) {
-  if (button_part != button_part_) {
-    return;
-  }
-
-  UpdateButtonPart();
-}
-
-void HTMLSelectListElement::UpdateButtonPart() {
-  SetButtonPart(FirstValidButtonPart());
-}
-
-void HTMLSelectListElement::EnsureButtonPartIsValid() {
-  if (!button_part_ ||
-      !SelectListPartTraversal::IsDescendantOf(*button_part_, *this) ||
-      !IsValidButtonPart(button_part_, /*show_warning*/ false)) {
-    UpdateButtonPart();
-  }
-}
-
-HTMLElement* HTMLSelectListElement::FirstValidSelectedValuePart() const {
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    auto* element = DynamicTo<HTMLElement>(node);
-    if (!element) {
-      continue;
-    }
-
-    if (element->getAttribute(html_names::kBehaviorAttr) ==
-            kSelectedValuePartName ||
-        element->HasTagName(html_names::kSelectedoptionTag)) {
-      return element;
-    }
-  }
-  return nullptr;
-}
-
-void HTMLSelectListElement::SelectedValuePartInserted(
-    HTMLElement* new_selected_value_part) {
-  UpdateSelectedValuePart();
-}
-
-void HTMLSelectListElement::SelectedValuePartRemoved(
-    HTMLElement* selected_value_part) {
-  if (selected_value_part != selected_value_part_) {
-    return;
-  }
-  UpdateSelectedValuePart();
-}
-
-void HTMLSelectListElement::UpdateSelectedValuePart() {
-  selected_value_part_ = FirstValidSelectedValuePart();
-}
-
-void HTMLSelectListElement::EnsureSelectedValuePartIsValid() {
-  if (!selected_value_part_ ||
-      selected_value_part_->getAttribute(html_names::kBehaviorAttr) !=
-          kSelectedValuePartName ||
-      !selected_value_part_->HasTagName(html_names::kSelectedoptionTag) ||
-      !SelectListPartTraversal::IsDescendantOf(*selected_value_part_, *this)) {
-    UpdateSelectedValuePart();
-  }
-}
-
-HTMLElement* HTMLSelectListElement::FirstValidListboxPart() const {
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidListboxPart(node, /*show_warning=*/false)) {
-      return DynamicTo<HTMLElement>(node);
-    }
-  }
-  return nullptr;
-}
-
-void HTMLSelectListElement::ListboxPartInserted(HTMLElement* new_listbox_part) {
-  if (!IsValidListboxPart(new_listbox_part, /*show_warning=*/true)) {
-    return;
-  }
-  UpdateListboxPart();
-}
-
-void HTMLSelectListElement::ListboxPartRemoved(HTMLElement* listbox_part) {
-  if (listbox_part_ != listbox_part) {
-    return;
-  }
-  UpdateListboxPart();
-}
-
-void HTMLSelectListElement::UpdateListboxPart() {
-  if (!SetListboxPart(FirstValidListboxPart()))
-    return;
-  ResetOptionParts();
-}
-
-void HTMLSelectListElement::EnsureListboxPartIsValid() {
-  if (!listbox_part_ ||
-      !SelectListPartTraversal::IsDescendantOf(*listbox_part_, *this) ||
-      !IsValidListboxPart(listbox_part_, /*show_warning*/ false)) {
-    UpdateListboxPart();
-  } else {
-    HeapLinkedHashSet<Member<HTMLOptionElement>> invalid_option_parts;
-    for (auto& option : option_parts_) {
-      if (!IsValidOptionPart(option.Get(), /*show_warning=*/false)) {
-        invalid_option_parts.insert(option.Get());
-      }
-    }
-    for (auto& invalid_option : invalid_option_parts) {
-      OptionPartRemoved(invalid_option.Get());
-    }
-  }
-}
-
-void HTMLSelectListElement::QueueCheckForMissingParts() {
-  if (!queued_check_for_missing_parts_ && GetDocument().View()) {
-    queued_check_for_missing_parts_ = true;
-    GetDocument().View()->RegisterForLifecycleNotifications(this);
-  }
-}
-
-void HTMLSelectListElement::ResetOptionParts() {
-  // Remove part status from all current option parts
-  while (!option_parts_.empty()) {
-    OptionPartRemoved(option_parts_.back());
-  }
-
-  // Find new option parts under the new listbox
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidOptionPart(node, /*show_warning=*/false)) {
-      OptionPartInserted(DynamicTo<HTMLOptionElement>(node));
-    }
-  }
-}
-
-void HTMLSelectListElement::DispatchInputAndChangeEventsIfNeeded() {
-  DispatchInputEvent();
-  if (!open()) {
-    // Only fire change if the listbox is already closed, because if it's open
-    // we'll  fire change later when the listbox closes.
-    DispatchChangeEvent();
-  }
-}
-
-void HTMLSelectListElement::OptionPartInserted(
-    HTMLOptionElement* new_option_part) {
-  if (!IsValidOptionPart(new_option_part, /*show_warning=*/true)) {
-    return;
-  }
-
-  if (option_parts_.Contains(new_option_part)) {
-    return;
-  }
-
-  new_option_part->OptionInsertedIntoSelectListElement();
-  option_part_listener_->AddEventListeners(new_option_part);
-
-  // TODO(crbug.com/1191131) The option part list should match the flat tree
-  // order.
-  option_parts_.insert(new_option_part);
-
-  if (!selected_option_ || new_option_part->Selected()) {
-    SetSelectedOption(new_option_part);
-  }
-  SetNeedsValidityCheck();
-  should_recalc_list_items_ = true;
-
-  if (GetDocument().IsActive()) {
-    GetDocument()
-        .GetFrame()
-        ->GetPage()
-        ->GetChromeClient()
-        .SelectOrSelectListFieldOptionsChanged(*this);
-  }
-}
-
-void HTMLSelectListElement::OptionPartRemoved(HTMLOptionElement* option_part) {
-  if (!option_parts_.Contains(option_part)) {
-    return;
-  }
-
-  option_part->OptionRemovedFromSelectListElement();
-  option_part_listener_->RemoveEventListeners(option_part);
-  option_parts_.erase(option_part);
-
-  if (selected_option_ == option_part) {
-    ResetToDefaultSelection();
-  }
-  if (suggested_option_ == option_part) {
-    SetSuggestedOption(nullptr);
-  }
-  SetNeedsValidityCheck();
-  should_recalc_list_items_ = true;
-
-  if (GetDocument().IsActive()) {
-    GetDocument()
-        .GetFrame()
-        ->GetPage()
-        ->GetChromeClient()
-        .SelectOrSelectListFieldOptionsChanged(*this);
-  }
-}
-
-HTMLOptionElement* HTMLSelectListElement::FirstOptionPart() const {
-  // TODO(crbug.com/1121840) This is going to be replaced by an option part
-  // list iterator, or we could reuse OptionListIterator if we decide that just
-  // <option>s are supported as option parts.
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidOptionPart(node, /*show_warning=*/false)) {
-      return DynamicTo<HTMLOptionElement>(node);
-    }
-  }
-
-  return nullptr;
-}
-
-void HTMLSelectListElement::OptionSelectionStateChanged(
-    HTMLOptionElement* option,
-    bool option_is_selected) {
-  DCHECK(option_parts_.Contains(option));
-  if (option_is_selected) {
-    SetSelectedOption(option);
-  } else if (selectedOption() == option) {
-    ResetToDefaultSelection();
-  }
-}
-
-void HTMLSelectListElement::DidFinishLifecycleUpdate(
-    const LocalFrameView& local_frame_view) {
-  Document* document = local_frame_view.GetFrame().GetDocument();
-  if (document->Lifecycle().GetState() <
-      DocumentLifecycle::kAfterPerformLayout) {
-    return;
-  }
-
-  DCHECK(queued_check_for_missing_parts_);
-  queued_check_for_missing_parts_ = false;
-  document->View()->UnregisterFromLifecycleNotifications(this);
-
-  if (!button_part_) {
-    GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-        mojom::blink::ConsoleMessageSource::kRendering,
-        mojom::blink::ConsoleMessageLevel::kWarning,
-        "A <selectlist>'s default button was removed and a new one was not "
-        "provided. This <selectlist> will not be fully functional."));
-  }
-
-  if (!listbox_part_) {
-    GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
-        mojom::blink::ConsoleMessageSource::kRendering,
-        mojom::blink::ConsoleMessageLevel::kWarning,
-        "A <selectlist>'s default listbox was removed and a new one was not "
-        "provided. This <selectlist> will not be fully functional."));
-  }
-}
-
-int HTMLSelectListElement::IndexOfSelectedOption() const {
-  int index = 0;
-  for (const auto& item : GetListItems()) {
-    auto* option_element = DynamicTo<HTMLOptionElement>(item.Get());
-    if (option_element && option_element->Selected()) {
-      return index;
-    }
-    ++index;
-  }
-  return -1;
-}
-
-int HTMLSelectListElement::OptionCount() const {
-  return GetListItems().size();
-}
-
-String HTMLSelectListElement::OptionAtIndex(int index) const {
-  HTMLOptionElement* option = OptionAtListIndex(index);
-  if (!option || option->IsDisabledFormControl()) {
-    return String();
-  }
-  return option->DisplayLabel();
-}
-
-HTMLOptionElement* HTMLSelectListElement::selectedOption() const {
-  DCHECK(!selected_option_ ||
-         IsValidOptionPart(selected_option_, /*show_warning=*/false));
-  return selected_option_;
-}
-
-void HTMLSelectListElement::SetSelectedOption(
-    HTMLOptionElement* selected_option,
-    bool send_events,
-    WebAutofillState autofill_state) {
-  SetAutofillState(selected_option ? autofill_state
-                                   : WebAutofillState::kNotFilled);
-
-  if (selected_option_ == selected_option)
-    return;
-
-  if (selected_option_)
-    selected_option_->SetSelectedState(false);
-
-  selected_option_ = selected_option;
-
-  if (selected_option_)
-    selected_option_->SetSelectedState(true);
-
-  UpdateSelectedValuePartContents();
-  SetNeedsValidityCheck();
-  if (send_events) {
-    DispatchInputAndChangeEventsIfNeeded();
-  }
-  NotifyFormStateChanged();
-
-  if (!RuntimeEnabledFeatures::AllowJavaScriptToResetAutofillStateEnabled()) {
-    // We set the Autofill state again because setting the autofill value
-    // triggers JavaScript events and the site may override the autofilled
-    // value, which resets the Autofilled state. Even if the website modifies
-    // the from control element's content during the autofill operation, we want
-    // the state to show as autofilled.
-    SetAutofillState(selected_option ? autofill_state
-                                     : WebAutofillState::kNotFilled);
-  }
-}
-
-void HTMLSelectListElement::OptionElementChildrenChanged(
-    const HTMLOptionElement& option) {
-  if (selected_option_ == &option) {
-    SetNeedsValidityCheck();
-    NotifyFormStateChanged();
-    UpdateSelectedValuePartContents();
-  }
-}
-
-void HTMLSelectListElement::OptionElementValueChanged(
-    const HTMLOptionElement& option) {
-  if (selected_option_ == &option) {
-    SetNeedsValidityCheck();
-    NotifyFormStateChanged();
-  }
-}
-
-void HTMLSelectListElement::SelectNextOption() {
-  auto* starting_option = selectedOption();
-  auto* focused_element = GetDocument().FocusedElement();
-  if (IsValidOptionPart(focused_element, /*show_warning=*/false)) {
-    starting_option = To<HTMLOptionElement>(focused_element);
-  }
-  for (Node* node = SelectListPartTraversal::Next(*starting_option, this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidOptionPart(node, /*show_warning=*/false)) {
-      auto* element = DynamicTo<HTMLOptionElement>(node);
-      if (element->IsDisabledFormControl())
-        continue;
-      element->Focus(FocusParams(FocusTrigger::kUserGesture));
-      DispatchInputAndChangeEventsIfNeeded();
-      return;
-    }
-  }
-}
-
-void HTMLSelectListElement::SelectPreviousOption() {
-  auto* starting_option = selectedOption();
-  auto* focused_element = GetDocument().FocusedElement();
-  if (IsValidOptionPart(focused_element, /*show_warning=*/false)) {
-    starting_option = To<HTMLOptionElement>(focused_element);
-  }
-  for (Node* node = SelectListPartTraversal::Previous(*starting_option, this);
-       node; node = SelectListPartTraversal::Previous(*node, this)) {
-    if (IsValidOptionPart(node, /*show_warning=*/false)) {
-      auto* element = DynamicTo<HTMLOptionElement>(node);
-      if (element->IsDisabledFormControl())
-        continue;
-      element->Focus(FocusParams(FocusTrigger::kUserGesture));
-      DispatchInputAndChangeEventsIfNeeded();
-      return;
-    }
-  }
-}
-
-void HTMLSelectListElement::SetSuggestedOption(HTMLOptionElement* option) {
-  if (suggested_option_ == option) {
-    return;
-  }
-
-  SetAutofillState(option ? WebAutofillState::kPreviewed
-                          : WebAutofillState::kNotFilled);
-  suggested_option_ = option;
-
-  if (suggested_option_) {
-    suggested_option_popover_->showPopover(ASSERT_NO_EXCEPTION);
-    suggested_option_popover_->setInnerText(option->label());
-  } else if (suggested_option_popover_->popoverOpen()) {
-    suggested_option_popover_->HidePopoverInternal(
-        HidePopoverFocusBehavior::kNone,
-        HidePopoverTransitionBehavior::kNoEventsNoWaiting,
-        /*exception_state=*/nullptr);
-  }
-}
-
-void HTMLSelectListElement::UpdateSelectedValuePartContents() {
-  // Null-check here because the selected-value part is optional; the author
-  // might replace the button contents and not provide a selected-value part if
-  // they want to show something in the button other than the current value of
-  // the <selectlist>.
-  if (selected_value_part_) {
-    // TODO(crbug.com/1121840): when we remove the old architecture, this
-    // should be a CHECK that selected_value_part_ is a <selectedoption>.
-    if (selected_value_part_->HasTagName(html_names::kSelectedoptionTag) &&
-        selected_value_part_->ShadowPseudoId() !=
-            AtomicString("-internal-selectlist-selected-value") &&
-        selected_option_) {
-      // TODO(crbug.com/1121840): should the label attribute be used instead if
-      // it is specified?
-      auto* clone = selected_option_->cloneNode(/*deep=*/true);
-      VectorOf<Node> nodes;
-      for (Node& child : NodeTraversal::ChildrenOf(*clone)) {
-        nodes.push_back(child);
-      }
-      // TODO(crbug.com/1121840): This can likely throw an exception due to
-      // custom element constructors, script elements, etc. What should we do
-      // about it?
-      selected_value_part_->ReplaceChildren(nodes, ASSERT_NO_EXCEPTION);
-    } else {
-      selected_value_part_->setTextContent(
-          selected_option_ ? selected_option_->innerText() : "");
-    }
-  }
-}
-
-void HTMLSelectListElement::RecalcListItems() const {
-  list_items_.clear();
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidOptionPart(node, /*show_warning=*/false)) {
-      list_items_.push_back(To<HTMLOptionElement>(node));
-    }
-  }
-}
-
-HTMLOptionElement* HTMLSelectListElement::OptionAtListIndex(
-    int list_index) const {
-  if (list_index < 0) {
-    return nullptr;
-  }
-  const ListItems& items = GetListItems();
-  if (static_cast<wtf_size_t>(list_index) >= items.size()) {
-    return nullptr;
-  }
-
-  return DynamicTo<HTMLOptionElement>(items[list_index].Get());
-}
-
-void HTMLSelectListElement::ButtonPartEventListener::Invoke(ExecutionContext*,
-                                                            Event* event) {
-  select_list_element_->HandleButtonEvent(*event);
-}
-
-void HTMLSelectListElement::HandleButtonEvent(Event& event) {
-  if (event.defaultPrevented()) {
-    return;
-  }
-
-  if (event.type() == event_type_names::kBlur) {
-    type_ahead_.ResetSession();
-  } else if (event.IsKeyboardEvent()) {
-    auto* keyboard_event = DynamicTo<KeyboardEvent>(event);
-    if (!keyboard_event) {
-      return;
-    }
-
-    if (!open() && !IsDisabledFormControl() &&
-        HandleButtonKeyboardEvent(*keyboard_event)) {
-      event.SetDefaultHandled();
-    }
-  }
-}
-
-void HTMLSelectListElement::ButtonPartEventListener::AddEventListeners(
-    HTMLElement* button_part) {
-  button_part->addEventListener(event_type_names::kClick, this,
-                                /*use_capture=*/false);
-  button_part->addEventListener(event_type_names::kBlur, this,
-                                /*use_capture=*/false);
-
-  // Observe keydown and keyup in order to override default HTMLButtonElement
-  // handling in HTMLElement::HandleKeyboardActivation() for VKEY_SPACE.
-  button_part->addEventListener(event_type_names::kKeydown, this,
-                                /*use_capture=*/false);
-  button_part->addEventListener(event_type_names::kKeyup, this,
-                                /*use_capture=*/false);
-  button_part->addEventListener(event_type_names::kKeypress, this,
-                                /*use_capture=*/false);
-}
-
-void HTMLSelectListElement::ButtonPartEventListener::RemoveEventListeners(
-    HTMLElement* button_part) {
-  button_part->removeEventListener(event_type_names::kClick, this,
-                                   /*use_capture=*/false);
-  button_part->removeEventListener(event_type_names::kBlur, this,
-                                   /*use_capture=*/false);
-  button_part->removeEventListener(event_type_names::kKeydown, this,
-                                   /*use_capture=*/false);
-  button_part->removeEventListener(event_type_names::kKeyup, this,
-                                   /*use_capture=*/false);
-  button_part->removeEventListener(event_type_names::kKeypress, this,
-                                   /*use_capture=*/false);
-}
-
-bool HTMLSelectListElement::HandleButtonKeyboardEvent(KeyboardEvent& event) {
-  if (event.keyCode() == VKEY_SPACE) {
-    if (event.type() == event_type_names::kKeydown) {
-      if (type_ahead_.HasActiveSession(event)) {
-        TypeAheadFind(event, ' ');
-      } else {
-        OpenListbox();
-      }
-    }
-    // Override default HTMLButtonElement handling in
-    // HTMLElement::HandleKeyboardActivation().
-    return true;
-  }
-  if (event.keyCode() == VKEY_RETURN &&
-      event.type() == event_type_names::kKeydown) {
-    // Attempt to submit the form if there is one, otherwise do nothing.
-    if (Form()) {
-      Form()->PrepareForSubmission(&event, this);
-      return true;
-    }
-    return false;
-  }
-  if (event.type() == event_type_names::kKeydown &&
-      (event.keyCode() == VKEY_UP || event.keyCode() == VKEY_DOWN ||
-       event.keyCode() == VKEY_RIGHT || event.keyCode() == VKEY_LEFT)) {
-    OpenListbox();
-    return true;
-  }
-  // Handled in event_type_names::kKeypress event handler because
-  // KeyboardEvent::charCode() == 0 for event_type_names::kKeydown.
-  return event.type() == event_type_names::kKeypress &&
-         TypeAheadFind(event, event.charCode());
-}
-
-void HTMLSelectListElement::OptionPartEventListener::Invoke(ExecutionContext*,
-                                                            Event* event) {
-  if (event->defaultPrevented())
-    return;
-
-  if (event->type() == event_type_names::kClick) {
-    auto* target_element =
-        DynamicTo<HTMLOptionElement>(event->currentTarget()->ToNode());
-    DCHECK(target_element);
-    DCHECK(select_list_element_->option_parts_.Contains(target_element));
-    if (target_element != select_list_element_->selectedOption()) {
-      select_list_element_->SetSelectedOption(target_element);
-      select_list_element_->DispatchInputEvent();
-    }
-    select_list_element_->CloseListbox();
-  } else if (event->IsKeyboardEvent()) {
-    auto* keyboard_event = DynamicTo<KeyboardEvent>(event);
-    if (keyboard_event && HandleKeyboardEvent(*keyboard_event)) {
-      event->stopPropagation();
-      event->SetDefaultHandled();
-    }
-  }
-}
-
-void HTMLSelectListElement::OptionPartEventListener::AddEventListeners(
-    HTMLOptionElement* option_part) {
-  option_part->addEventListener(event_type_names::kClick, this,
-                                /*use_capture=*/false);
-  option_part->addEventListener(event_type_names::kKeydown, this,
-                                /*use_capture=*/false);
-  option_part->addEventListener(event_type_names::kKeypress, this,
-                                /*use_capture=*/false);
-}
-
-void HTMLSelectListElement::OptionPartEventListener::RemoveEventListeners(
-    HTMLOptionElement* option_part) {
-  option_part->removeEventListener(event_type_names::kClick, this,
-                                   /*use_capture=*/false);
-  option_part->removeEventListener(event_type_names::kKeydown, this,
-                                   /*use_capture=*/false);
-  option_part->removeEventListener(event_type_names::kKeypress, this,
-                                   /*use_capture=*/false);
-}
-
-bool HTMLSelectListElement::OptionPartEventListener::HandleKeyboardEvent(
-    const KeyboardEvent& event) {
-  if (event.type() == event_type_names::kKeydown) {
-    switch (event.keyCode()) {
-      case VKEY_RETURN: {
-        auto* target_element =
-            DynamicTo<HTMLOptionElement>(event.currentTarget()->ToNode());
-        DCHECK(target_element);
-        DCHECK(select_list_element_->option_parts_.Contains(target_element));
-        if (target_element != select_list_element_->selectedOption()) {
-          select_list_element_->SetSelectedOption(target_element);
-          select_list_element_->DispatchInputEvent();
-        }
-        select_list_element_->CloseListbox();
-        return true;
-      }
-      case VKEY_SPACE: {
-        select_list_element_->TypeAheadFind(event, ' ');
-        // Prevent the default behavior of scrolling the page on spacebar
-        // that would cause the listbox to close.
-        return true;
-      }
-      case VKEY_UP: {
-        select_list_element_->SelectPreviousOption();
-        return true;
-      }
-      case VKEY_DOWN: {
-        select_list_element_->SelectNextOption();
-        return true;
-      }
-    }
-  } else if (event.type() == event_type_names::kKeypress) {
-    // Handled in event_type_names::kKeypress event handler because
-    // KeyboardEvent::charCode() == 0 for event_type_names::kKeydown.
-    return select_list_element_->TypeAheadFind(event, event.charCode());
-  }
-
-  return false;
-}
-
-FormControlType HTMLSelectListElement::FormControlType() const {
-  return FormControlType::kSelectList;
-}
-
-const AtomicString& HTMLSelectListElement::FormControlTypeAsString() const {
-  DEFINE_STATIC_LOCAL(const AtomicString, selectlist, ("selectlist"));
-  return selectlist;
-}
-
-void HTMLSelectListElement::DefaultEventHandler(Event& event) {
-  if (!GetLayoutObject()) {
-    return;
-  }
-
-  if (event.type() == event_type_names::kChange) {
-    SetUserHasEditedTheField();
-  }
-}
-
-bool HTMLSelectListElement::MayTriggerVirtualKeyboard() const {
-  return true;
-}
-
-void HTMLSelectListElement::AppendToFormData(FormData& form_data) {
-  if (!GetName().empty())
-    form_data.AppendFromElement(GetName(), value());
-}
-
-FormControlState HTMLSelectListElement::SaveFormControlState() const {
-  return FormControlState(value());
-}
-
-void HTMLSelectListElement::RestoreFormControlState(
-    const FormControlState& state) {
-  setValue(state[0]);
-}
-
-bool HTMLSelectListElement::IsRequiredFormControl() const {
-  return IsRequired();
-}
-
-bool HTMLSelectListElement::IsOptionalFormControl() const {
-  return !IsRequiredFormControl();
-}
-
-bool HTMLSelectListElement::IsLabelable() const {
-  return true;
-}
-
-bool HTMLSelectListElement::ValueMissing() const {
-  if (!IsRequired())
-    return false;
-
-  if (auto* selected_option = selectedOption()) {
-    // If a non-placeholder label option is selected, it's not value-missing.
-    // https://html.spec.whatwg.org/multipage/form-elements.html#placeholder-label-option
-    return selected_option == FirstOptionPart() &&
-           selected_option->value().empty();
-  }
-
-  return true;
-}
-
-void HTMLSelectListElement::CloneNonAttributePropertiesFrom(
-    const Element& source,
-    NodeCloningData& data) {
-  const auto& source_element =
-      static_cast<const HTMLSelectListElement&>(source);
-  interacted_state_ = source_element.interacted_state_;
-  HTMLFormControlElement::CloneNonAttributePropertiesFrom(source, data);
-}
-
-// https://html.spec.whatwg.org/C/#ask-for-a-reset
-void HTMLSelectListElement::ResetImpl() {
-  for (auto& option : option_parts_) {
-    option->SetSelectedState(
-        option->FastHasAttribute(html_names::kSelectedAttr));
-    option->SetDirty(false);
-  }
-  ResetToDefaultSelection();
-  SetNeedsValidityCheck();
-  HTMLFormControlElementWithState::ResetImpl();
-}
-
-// https://html.spec.whatwg.org/C#selectedness-setting-algorithm
-void HTMLSelectListElement::ResetToDefaultSelection() {
-  HTMLOptionElement* first_enabled_option = nullptr;
-  HTMLOptionElement* last_selected_option = nullptr;
-
-  for (Node* node = SelectListPartTraversal::FirstChild(*this); node;
-       node = SelectListPartTraversal::Next(*node, this)) {
-    if (IsValidOptionPart(node, /*show_warning=*/false)) {
-      auto* option = DynamicTo<HTMLOptionElement>(node);
-      if (option->Selected()) {
-        if (last_selected_option) {
-          last_selected_option->SetSelectedState(false);
-        }
-        last_selected_option = option;
-      }
-      if (!first_enabled_option && !option->IsDisabledFormControl()) {
-        first_enabled_option = option;
-      }
-    }
-  }
-
-  // If no option is selected, set the selection to the first non-disabled
-  // option if it exists, or null otherwise.
-  //
-  // If two or more options are selected, set the selection to the last
-  // selected option. ResetImpl() can temporarily select multiple options.
-  if (last_selected_option) {
-    SetSelectedOption(last_selected_option);
-  } else {
-    SetSelectedOption(first_enabled_option);
-  }
-}
-
-String HTMLSelectListElement::validationMessage() const {
-  if (!willValidate())
-    return String();
-  if (CustomError())
-    return CustomValidationMessage();
-  if (ValueMissing()) {
-    return GetLocale().QueryString(IDS_FORM_VALIDATION_VALUE_MISSING_SELECT);
-  }
-  return String();
-}
-
-void HTMLSelectListElement::Trace(Visitor* visitor) const {
-  visitor->Trace(button_part_listener_);
-  visitor->Trace(option_part_listener_);
-  visitor->Trace(select_mutation_callback_);
-  visitor->Trace(button_part_);
-  visitor->Trace(selected_value_part_);
-  visitor->Trace(listbox_part_);
-  visitor->Trace(option_parts_);
-  visitor->Trace(button_slot_);
-  visitor->Trace(listbox_slot_);
-  visitor->Trace(marker_slot_);
-  visitor->Trace(selected_value_slot_);
-  visitor->Trace(options_slot_);
-  visitor->Trace(default_listbox_);
-  visitor->Trace(selected_option_);
-  visitor->Trace(selected_option_when_listbox_opened_);
-  visitor->Trace(suggested_option_);
-  visitor->Trace(suggested_option_popover_);
-  visitor->Trace(list_items_);
-  HTMLFormControlElementWithState::Trace(visitor);
-}
-
-constexpr char HTMLSelectListElement::kButtonPartName[];
-constexpr char HTMLSelectListElement::kSelectedValuePartName[];
-constexpr char HTMLSelectListElement::kListboxPartName[];
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_select_list_element.h b/third_party/blink/renderer/core/html/forms/html_select_list_element.h
deleted file mode 100644
index 2ad287e1..0000000
--- a/third_party/blink/renderer/core/html/forms/html_select_list_element.h
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright 2021 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_HTML_FORMS_HTML_SELECT_LIST_ELEMENT_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_HTML_SELECT_LIST_ELEMENT_H_
-
-#include "third_party/blink/public/web/web_autofill_state.h"
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/dom/events/native_event_listener.h"
-#include "third_party/blink/renderer/core/frame/local_frame_view.h"
-#include "third_party/blink/renderer/core/html/forms/html_form_control_element_with_state.h"
-#include "third_party/blink/renderer/core/html/forms/type_ahead.h"
-#include "third_party/blink/renderer/platform/wtf/vector.h"
-
-namespace blink {
-
-class Document;
-
-// The HTMLSelectListElement implements the <selectlist> HTML element.
-// The <selectlist> element is similar to <select>, but allows site authors
-// freedom to customize the element's appearance and shadow DOM structure.
-// This feature is still under development, and is not part of the HTML
-// standard. It can be enabled by passing
-// --enable-blink-features=HTMLSelectListElement. See
-// https://groups.google.com/u/1/a/chromium.org/g/blink-dev/c/9TcfjaOs5zg/m/WAiv6WpUAAAJ
-// for more details.
-class CORE_EXPORT HTMLSelectListElement final
-    : public HTMLFormControlElementWithState,
-      public LocalFrameView::LifecycleNotificationObserver,
-      public TypeAheadDataSource {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  explicit HTMLSelectListElement(Document&);
-
-  void ManuallyAssignSlots() override;
-
-  // LocalFrameView::LifecycleNotificationObserver
-  void DidFinishLifecycleUpdate(const LocalFrameView&) override;
-
-  // TypeAheadDataSource:
-  int IndexOfSelectedOption() const override;
-  int OptionCount() const override;
-  String OptionAtIndex(int index) const override;
-
-  HTMLOptionElement* selectedOption() const;
-  String value() const;
-  void setValue(const String&,
-                bool send_events = false,
-                WebAutofillState autofill_state = WebAutofillState::kNotFilled);
-  String valueForBinding() const { return value(); }
-  void setValueForBinding(const String&);
-  bool open() const;
-
-  void SetAutofillValue(const String& value, WebAutofillState autofill_state);
-
-  String SuggestedValue() const;
-
-  // Sets the suggested value and puts the element into
-  // WebAutofillState::kPreviewed state if the value exists, or
-  // WebAutofillState::kNotFilled otherwise.
-  void SetSuggestedValue(const String& value);
-
-  // For ValidityState
-  String validationMessage() const override;
-  bool ValueMissing() const override;
-
-  void CloneNonAttributePropertiesFrom(const Element&,
-                                       NodeCloningData&) override;
-  void ResetImpl() override;
-
-  void Trace(Visitor*) const override;
-
-  enum class PartType { kNone, kButton, kListBox, kOption };
-
-  // For use in the implementation of HTMLOptionElement.
-  void OptionSelectionStateChanged(HTMLOptionElement*, bool option_is_selected);
-  void OptionElementChildrenChanged(const HTMLOptionElement& option);
-  void OptionElementValueChanged(const HTMLOptionElement& option);
-
-  PartType AssignedPartType(Node* node) const;
-
-  HTMLElement* ButtonPart() const { return button_part_.Get(); }
-  HTMLElement* ListBoxPart() const { return listbox_part_.Get(); }
-  HTMLElement* SuggestedOptionPopoverForTesting() const {
-    return suggested_option_popover_.Get();
-  }
-
-  bool IsRichlyEditableForAccessibility() const override { return false; }
-
-  using ListItems = HeapVector<Member<HTMLOptionElement>>;
-
-  // Returns list of HTMLOptionElements which are direct children of the
-  // HTMLSelectListElement.
-  // TODO(http://crbug.com/1422027): Expose iterator similar to
-  // HTMLSelectElement::GetOptionList().
-  const ListItems& GetListItems() const;
-
-  void OpenListbox();
-  void CloseListbox();
-  void ListboxWasClosed();
-
-  void ResetTypeAheadSessionForTesting();
-
-  void HandleButtonEvent(Event&);
-
- private:
-  class SelectMutationCallback;
-
-  void DidAddUserAgentShadowRoot(ShadowRoot&) override;
-  void DidMoveToNewDocument(Document& old_document) override;
-  void DisabledAttributeChanged() override;
-  bool TypeAheadFind(const KeyboardEvent& event, int charCode);
-
-  HTMLOptionElement* FirstOptionPart() const;
-  HTMLElement* FirstValidButtonPart() const;
-  HTMLElement* FirstValidListboxPart() const;
-  HTMLElement* FirstValidSelectedValuePart() const;
-  void EnsureButtonPartIsValid();
-  void EnsureSelectedValuePartIsValid();
-  void EnsureListboxPartIsValid();
-  void SetSelectedOption(HTMLOptionElement* selected_option,
-                         bool send_events = false,
-                         WebAutofillState = WebAutofillState::kNotFilled);
-  void SelectNextOption();
-  void SelectPreviousOption();
-  void SetSuggestedOption(HTMLOptionElement* option);
-  void UpdateSelectedValuePartContents();
-
-  void RecalcListItems() const;
-  HTMLOptionElement* OptionAtListIndex(int list_index) const;
-
-  void ButtonPartInserted(HTMLElement*);
-  void ButtonPartRemoved(HTMLElement*);
-  void UpdateButtonPart();
-  void SelectedValuePartInserted(HTMLElement*);
-  void SelectedValuePartRemoved(HTMLElement*);
-  void UpdateSelectedValuePart();
-  void ListboxPartInserted(HTMLElement*);
-  void ListboxPartRemoved(HTMLElement*);
-  void UpdateListboxPart();
-  void OptionPartInserted(HTMLOptionElement*);
-  void OptionPartRemoved(HTMLOptionElement*);
-  void QueueCheckForMissingParts();
-  void ResetOptionParts();
-  void ResetToDefaultSelection();
-  void DispatchInputAndChangeEventsIfNeeded();
-
-  bool IsValidButtonPart(const Node* node, bool show_warning) const;
-  bool IsValidListboxPart(const Node* node, bool show_warning) const;
-  bool IsValidOptionPart(const Node* node, bool show_warning) const;
-
-  void SetButtonPart(HTMLElement* new_button_part);
-  // Returns true if the listbox part actually changed to something different.
-  bool SetListboxPart(HTMLElement* new_listbox_part);
-
-  bool IsRequiredFormControl() const override;
-  bool IsOptionalFormControl() const override;
-
-  bool IsEnumeratable() const override { return true; }
-  bool IsLabelable() const override;
-
-  // HTMLFormControlElementWithState overrides:
-  mojom::blink::FormControlType FormControlType() const override;
-  const AtomicString& FormControlTypeAsString() const override;
-  void DefaultEventHandler(Event&) override;
-  bool MayTriggerVirtualKeyboard() const override;
-  bool AlwaysCreateUserAgentShadowRoot() const override { return false; }
-  void AppendToFormData(FormData&) override;
-  FocusableState SupportsFocus(UpdateBehavior) const override {
-    return FocusableState::kNotFocusable;
-  }
-  FormControlState SaveFormControlState() const override;
-  void RestoreFormControlState(const FormControlState&) override;
-
-  bool HandleButtonKeyboardEvent(KeyboardEvent&);
-
-  class ButtonPartEventListener : public NativeEventListener {
-   public:
-    explicit ButtonPartEventListener(HTMLSelectListElement* select_list_element)
-        : select_list_element_(select_list_element) {}
-    void Invoke(ExecutionContext*, Event*) override;
-
-    void Trace(Visitor* visitor) const override {
-      visitor->Trace(select_list_element_);
-      NativeEventListener::Trace(visitor);
-    }
-
-    void AddEventListeners(HTMLElement* button_part);
-    void RemoveEventListeners(HTMLElement* button_part);
-
-   private:
-    Member<HTMLSelectListElement> select_list_element_;
-  };
-
-  class OptionPartEventListener : public NativeEventListener {
-   public:
-    explicit OptionPartEventListener(HTMLSelectListElement* select_list_element)
-        : select_list_element_(select_list_element) {}
-    void Invoke(ExecutionContext*, Event*) override;
-
-    void Trace(Visitor* visitor) const override {
-      visitor->Trace(select_list_element_);
-      NativeEventListener::Trace(visitor);
-    }
-
-    void AddEventListeners(HTMLOptionElement* option_part);
-    void RemoveEventListeners(HTMLOptionElement* option_part);
-    bool HandleKeyboardEvent(const KeyboardEvent& event);
-
-   private:
-    Member<HTMLSelectListElement> select_list_element_;
-  };
-
-  static constexpr char kButtonPartName[] = "button";
-  static constexpr char kSelectedValuePartName[] = "selected-value";
-  static constexpr char kListboxPartName[] = "listbox";
-  static constexpr char kMarkerPartName[] = "marker";
-
-  TypeAhead type_ahead_;
-
-  Member<ButtonPartEventListener> button_part_listener_;
-  Member<OptionPartEventListener> option_part_listener_;
-
-  Member<SelectMutationCallback> select_mutation_callback_;
-
-  Member<HTMLElement> button_part_;
-  Member<HTMLElement> selected_value_part_;
-  Member<HTMLElement> listbox_part_;
-  HeapLinkedHashSet<Member<HTMLOptionElement>> option_parts_;
-  Member<HTMLSlotElement> button_slot_;
-  Member<HTMLSlotElement> listbox_slot_;
-  Member<HTMLSlotElement> marker_slot_;
-  Member<HTMLSlotElement> selected_value_slot_;
-  Member<HTMLSlotElement> options_slot_;
-  Member<HTMLListboxElement> default_listbox_;
-  Member<HTMLOptionElement> selected_option_;
-  Member<HTMLOptionElement> selected_option_when_listbox_opened_;
-  Member<HTMLOptionElement> suggested_option_;
-  Member<HTMLElement> suggested_option_popover_;
-  bool queued_check_for_missing_parts_{false};
-
-  bool should_recalc_list_items_{true};
-
-  // Initialized lazily. Use GetListItems() to get up to date value.
-  mutable ListItems list_items_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_HTML_SELECT_LIST_ELEMENT_H_
diff --git a/third_party/blink/renderer/core/html/forms/html_select_list_element.idl b/third_party/blink/renderer/core/html/forms/html_select_list_element.idl
deleted file mode 100644
index a1ef6ecc..0000000
--- a/third_party/blink/renderer/core/html/forms/html_select_list_element.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-[Exposed=Window,HTMLConstructor,RuntimeEnabled=HTMLSelectListElement]
-interface HTMLSelectListElement : HTMLElement {
-  readonly attribute boolean open;
-
-  [SameObject] readonly attribute HTMLOptionElement? selectedOption;
-  [ImplementedAs=valueForBinding] attribute DOMString value;
-  // TODO(crbug.com/1121840) Fill this out.
-  // Open question: do we want to replicate the interface of
-  // <select> as closely as possible?
-  // Or should we try to improve, simplify, or extend it?
-  [CEReactions, Reflect] attribute boolean disabled;
-  [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-  [CEReactions, Reflect] attribute DOMString name;
-  readonly attribute DOMString type;
-  [CEReactions, Reflect] attribute boolean required;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  readonly attribute NodeList labels;
-};
diff --git a/third_party/blink/renderer/core/html/forms/html_select_list_element_test.cc b/third_party/blink/renderer/core/html/forms/html_select_list_element_test.cc
deleted file mode 100644
index a435de74..0000000
--- a/third_party/blink/renderer/core/html/forms/html_select_list_element_test.cc
+++ /dev/null
@@ -1,365 +0,0 @@
-// 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.
-
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
-
-#include "base/run_loop.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/web/web_autofill_state.h"
-#include "third_party/blink/public/web/web_script_source.h"
-#include "third_party/blink/renderer/core/css/properties/longhands.h"
-#include "third_party/blink/renderer/core/dom/node_computed_style.h"
-#include "third_party/blink/renderer/core/frame/local_frame.h"
-#include "third_party/blink/renderer/core/frame/settings.h"
-#include "third_party/blink/renderer/core/html/forms/html_button_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_option_element.h"
-#include "third_party/blink/renderer/core/loader/empty_clients.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/page_test_base.h"
-
-namespace blink {
-namespace {
-
-void CheckOptions(HeapVector<Member<HTMLOptionElement>> options,
-                  const std::vector<std::string>& expected_option_values) {
-  ASSERT_EQ(expected_option_values.size(), options.size());
-  for (wtf_size_t i = 0; i < options.size(); ++i) {
-    EXPECT_EQ(options[i]->value().Utf8(), expected_option_values[i]);
-  }
-}
-
-// ChromeClient which counts invocations of
-// SelectOrSelectListFieldOptionsChanged().
-class OptionsChangedCounterChromeClient : public EmptyChromeClient {
- public:
-  OptionsChangedCounterChromeClient() = default;
-  ~OptionsChangedCounterChromeClient() override = default;
-
-  void SelectOrSelectListFieldOptionsChanged(HTMLFormControlElement&) override {
-    ++option_change_notification_count_;
-  }
-
-  size_t GetOptionChangeNotificationCount() const {
-    return option_change_notification_count_;
-  }
-
- private:
-  size_t option_change_notification_count_{0u};
-};
-
-}  // anonymous namespace
-
-class HTMLSelectListElementTest : public PageTestBase {
- public:
-  void SetUp() override {
-    chrome_client_ = MakeGarbageCollected<OptionsChangedCounterChromeClient>();
-    SetupPageWithClients(chrome_client_);
-    GetDocument().SetMimeType(AtomicString("text/html"));
-    GetFrame().GetSettings()->SetScriptEnabled(true);
-  }
-
-  void ExecuteJs(const std::string& js) {
-    ClassicScript::CreateUnspecifiedScript(WebString::FromUTF8(js))
-        ->RunScript(GetFrame().DomWindow());
-  }
-
- protected:
-  Persistent<OptionsChangedCounterChromeClient> chrome_client_;
-};
-
-// Tests that HtmlSelectListElement::SetAutofillValue() doesn't change the
-// `interacted_state_` attribute of the field.
-TEST_F(HTMLSelectListElementTest, SetAutofillValuePreservesEditedState) {
-  SetHtmlInnerHTML(
-      "<!DOCTYPE HTML><selectlist id='sel'>"
-      "<option value='111' selected>111</option>"
-      "<option value='222'>222</option></selectlist>");
-  HTMLSelectListElement* select_list =
-      To<HTMLSelectListElement>(GetElementById("sel"));
-
-  select_list->ClearUserHasEditedTheField();
-  select_list->SetAutofillValue("222", WebAutofillState::kAutofilled);
-  EXPECT_EQ(select_list->UserHasEditedTheField(), false);
-
-  select_list->SetUserHasEditedTheField();
-  select_list->SetAutofillValue("111", WebAutofillState::kAutofilled);
-  EXPECT_EQ(select_list->UserHasEditedTheField(), true);
-}
-
-// Test that SelectListElement::GetListItems() return value is updated upon
-// adding <option>s.
-TEST_F(HTMLSelectListElementTest, GetListItemsAdd) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-    <option selected>Default</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  CheckOptions(element->GetListItems(), {"Default"});
-
-  ExecuteJs(
-      "let selectlist = document.getElementById('selectlist');"
-      "let option = document.createElement('option');"
-      "option.textContent = 'New';"
-      "selectlist.appendChild(option);");
-  CheckOptions(element->GetListItems(), {"Default", "New"});
-}
-
-// Test that SelectListElement::GetListItems() return value is updated upon
-// removing <option>.
-TEST_F(HTMLSelectListElementTest, GetListItemsRemove) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-    <option selected>First</option>
-    <option id="second_option">Second</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  CheckOptions(element->GetListItems(), {"First", "Second"});
-  ExecuteJs(
-      "let selectlist = document.getElementById('selectlist');"
-      "let second_option = document.getElementById('second_option');"
-      "selectlist.removeChild(second_option);");
-  CheckOptions(element->GetListItems(), {"First"});
-}
-
-// Test that blink::ChromeClient::SelectOrSelectListFieldOptionsChanged() is
-// called when <option> is added to <selectlist>.
-TEST_F(HTMLSelectListElementTest, NotifyClientListItemAdd) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-    <option selected>Default</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  EXPECT_EQ(1u, element->GetListItems().size());
-  size_t num_notifications_before_change =
-      chrome_client_->GetOptionChangeNotificationCount();
-
-  ExecuteJs(
-      "let selectlist = document.getElementById('selectlist');"
-      "let option = document.createElement('option');"
-      "option.textContent = 'New';"
-      "selectlist.appendChild(option);");
-  EXPECT_EQ(2u, element->GetListItems().size());
-
-  EXPECT_EQ(num_notifications_before_change + 1,
-            chrome_client_->GetOptionChangeNotificationCount());
-}
-
-// Test that blink::ChromeClient::SelectOrSelectListFieldOptionsChanged() is
-// called when <option> is removed from <selectlist>.
-TEST_F(HTMLSelectListElementTest, NotifyClientListItemRemove) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-    <option selected>First</option>
-    <option id="second_option">Second</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  EXPECT_EQ(2u, element->GetListItems().size());
-  size_t num_notifications_before_change =
-      chrome_client_->GetOptionChangeNotificationCount();
-
-  ExecuteJs(
-      "let selectlist = document.getElementById('selectlist');"
-      "let second_option = document.getElementById('second_option');"
-      "selectlist.removeChild(second_option);");
-  EXPECT_EQ(1u, element->GetListItems().size());
-
-  EXPECT_EQ(num_notifications_before_change + 1,
-            chrome_client_->GetOptionChangeNotificationCount());
-}
-
-// Test behavior of HTMLSelectListElement::OwnerSelectList() if selectlist uses
-// custom parts.
-TEST_F(HTMLSelectListElementTest, OwnerSelectList_PartsCustomSlots) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-      <button type=selectlist id=selectlist_button>
-        Button
-      </button>
-      <listbox id=selectlist_listbox>
-        <b>
-          <option id="first_option">First</option>
-          <option>Second</option>
-        </b>
-      </listbox>
-    </selectlist>
-  )HTML");
-
-  HTMLSelectListElement* select_list_element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-  EXPECT_EQ(select_list_element,
-            To<HTMLButtonElement>(GetElementById("selectlist_button"))
-                ->OwnerSelectList());
-  EXPECT_EQ(select_list_element,
-            To<HTMLListboxElement>(GetElementById("selectlist_listbox"))
-                ->OwnerSelectList());
-  EXPECT_EQ(select_list_element,
-            To<HTMLOptionElement>(GetElementById("first_option"))
-                ->OwnerSelectList());
-}
-
-// Test that HTMLSelectListElement::SetSuggestedValue() does not affect
-// HTMLSelectListElement::selectedOption().
-TEST_F(HTMLSelectListElementTest, SetSuggestedValue) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-      <option id="first_option" selected>First</option>
-      <option id="second_option">Second</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-  HTMLOptionElement* first_option =
-      To<HTMLOptionElement>(GetElementById("first_option"));
-
-  ASSERT_EQ(first_option, selectlist->selectedOption());
-  selectlist->SetSuggestedValue("Second");
-  EXPECT_EQ("Second", selectlist->SuggestedValue());
-  EXPECT_EQ(blink::WebAutofillState::kPreviewed,
-            selectlist->GetAutofillState());
-  EXPECT_EQ(first_option, selectlist->selectedOption());
-}
-
-// Test that passing an empty string to
-// HTMLSelectListElement::SetSuggestedValue() clears autofill preview state.
-TEST_F(HTMLSelectListElementTest, SetSuggestedValueEmptyString) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-      <option id="first_option" selected>First</option>
-      <option id="second_option">Second</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  selectlist->SetSuggestedValue("Second");
-  EXPECT_EQ("Second", selectlist->SuggestedValue());
-  EXPECT_EQ(blink::WebAutofillState::kPreviewed,
-            selectlist->GetAutofillState());
-
-  selectlist->SetSuggestedValue("");
-  EXPECT_EQ("", selectlist->SuggestedValue());
-  EXPECT_EQ(blink::WebAutofillState::kNotFilled,
-            selectlist->GetAutofillState());
-}
-
-// Test that HTMLSelectListElement::SetSuggestedOption() is a noop if the
-// passed-in value does not match any of the <option>s.
-TEST_F(HTMLSelectListElementTest, SetSuggestedValueNoMatchingOption) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-      <option id="first_option">First</option>
-      <option id="second_option">Second</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  selectlist->SetSuggestedValue("nonexistent");
-  EXPECT_EQ(blink::WebAutofillState::kNotFilled,
-            selectlist->GetAutofillState());
-}
-
-// Test that HTMLSelectListElement::setValue() clears the suggested option.
-TEST_F(HTMLSelectListElementTest, SuggestedValueClearedWhenValueSet) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-      <option selected>First</option>
-      <option>Second</option>
-      <option>Third</option>
-    </selectlist>
-  )HTML");
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-
-  selectlist->SetSuggestedValue("Second");
-  EXPECT_EQ(blink::WebAutofillState::kPreviewed,
-            selectlist->GetAutofillState());
-  selectlist->setValue("Third");
-  EXPECT_EQ(blink::WebAutofillState::kNotFilled,
-            selectlist->GetAutofillState());
-}
-
-Color GetBorderColorForSuggestedOptionPopover(HTMLSelectListElement* element) {
-  const ComputedStyle& popover_style =
-      element->SuggestedOptionPopoverForTesting()->ComputedStyleRef();
-  return popover_style.VisitedDependentColor(GetCSSPropertyBorderTopColor());
-}
-
-// Test HTMLSelectListElement preview popover inherits border color from the
-// button when the <selectlist> button has a custom color.
-TEST_F(HTMLSelectListElementTest, PreviewButtonHasCustomBorder) {
-  SetHtmlInnerHTML(R"HTML(
-    <style>
-      selectlist::part(button) {
-        border-color:#00ff00;
-      }
-    </style>
-    <selectlist id='selectlist'>
-      <option>First</option>
-    </selectlist>
-  )HTML");
-
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-  selectlist->SetSuggestedValue("First");
-
-  EXPECT_EQ(Color::FromRGB(0, 0xff, 0),
-            GetBorderColorForSuggestedOptionPopover(selectlist));
-}
-
-// Test HTMLSelectListElement preview popover inherits border color from the
-// button when the <selectlist> button has an autofill-specific custom color.
-TEST_F(HTMLSelectListElementTest, PreviewButtonHasCustomAutofillBorder) {
-  SetHtmlInnerHTML(R"HTML(
-    <style>
-      selectlist::part(button):autofill {
-        border-color:#00ff00;
-      }
-    </style>
-    <selectlist id='selectlist'>
-      <option>First</option>
-    </selectlist>
-  )HTML");
-
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-  selectlist->SetSuggestedValue("First");
-
-  EXPECT_EQ(Color::FromRGB(0, 0xff, 0),
-            GetBorderColorForSuggestedOptionPopover(selectlist));
-}
-
-// Test HTMLSelectListElement preview popover uses default color and does not
-// inherit color from selectlist button when selectlist button does not specify
-// a custom border color.
-TEST_F(HTMLSelectListElementTest, PreviewButtonHasNoCustomBorder) {
-  SetHtmlInnerHTML(R"HTML(
-    <selectlist id='selectlist'>
-      <option>First</option>
-    </selectlist>
-  )HTML");
-
-  HTMLSelectListElement* selectlist =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
-  selectlist->SetSuggestedValue("First");
-
-  EXPECT_EQ(Color::FromRGBA(0, 0, 0, 0.15 * 255),
-            GetBorderColorForSuggestedOptionPopover(selectlist));
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_selected_option_element.cc b/third_party/blink/renderer/core/html/forms/html_selected_option_element.cc
index 7513cd5..f800f565 100644
--- a/third_party/blink/renderer/core/html/forms/html_selected_option_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_selected_option_element.cc
@@ -12,8 +12,7 @@
 
 HTMLSelectedOptionElement::HTMLSelectedOptionElement(Document& document)
     : HTMLElement(html_names::kSelectedoptionTag, document) {
-  CHECK(RuntimeEnabledFeatures::CustomizableSelectEnabled() ||
-        RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
+  CHECK(RuntimeEnabledFeatures::CustomizableSelectEnabled());
 }
 
 void HTMLSelectedOptionElement::CloneContentsFromOptionElement(
diff --git a/third_party/blink/renderer/core/html/forms/select_list_part_traversal.cc b/third_party/blink/renderer/core/html/forms/select_list_part_traversal.cc
deleted file mode 100644
index 1e717c8..0000000
--- a/third_party/blink/renderer/core/html/forms/select_list_part_traversal.cc
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/core/html/forms/select_list_part_traversal.h"
-
-#include "third_party/blink/renderer/core/dom/flat_tree_traversal.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
-
-namespace blink {
-
-Node* SelectListPartTraversal::NextSibling(const Node& node) {
-  Node* next = FlatTreeTraversal::NextSibling(node);
-  while (next && SelectListPartTraversal::IsNestedSelectList(*next)) {
-    next = FlatTreeTraversal::NextSibling(*next);
-  }
-  return next;
-}
-
-Node* SelectListPartTraversal::PreviousSibling(const Node& node) {
-  Node* next = FlatTreeTraversal::PreviousSibling(node);
-  while (next && SelectListPartTraversal::IsNestedSelectList(*next)) {
-    next = FlatTreeTraversal::PreviousSibling(*next);
-  }
-  return next;
-}
-
-Node* SelectListPartTraversal::FirstChild(const Node& node) {
-  Node* first = FlatTreeTraversal::FirstChild(node);
-  while (first && SelectListPartTraversal::IsNestedSelectList(*first)) {
-    first = SelectListPartTraversal::NextSibling(*first);
-  }
-  return first;
-}
-
-Node* SelectListPartTraversal::LastChild(const Node& node) {
-  Node* first = FlatTreeTraversal::LastChild(node);
-  while (first && SelectListPartTraversal::IsNestedSelectList(*first)) {
-    first = SelectListPartTraversal::PreviousSibling(*first);
-  }
-  return first;
-}
-
-namespace {
-
-static Node* NextAncestorSibling(const Node& node, const Node* stay_within) {
-  DCHECK(!SelectListPartTraversal::NextSibling(node));
-  DCHECK_NE(node, stay_within);
-  for (Node* parent_node = FlatTreeTraversal::Parent(node); parent_node;
-       parent_node = FlatTreeTraversal::Parent(*parent_node)) {
-    if (parent_node == stay_within)
-      return nullptr;
-    if (Node* next_node = SelectListPartTraversal::NextSibling(*parent_node))
-      return next_node;
-  }
-  return nullptr;
-}
-
-}  // namespace
-
-Node* SelectListPartTraversal::NextSkippingChildren(const Node& node,
-                                                    const Node* stay_within) {
-  if (node == stay_within)
-    return nullptr;
-  if (Node* next_node = NextSibling(node))
-    return next_node;
-  return NextAncestorSibling(node, stay_within);
-}
-
-Node* SelectListPartTraversal::Next(const Node& node, const Node* stay_within) {
-  if (Node* child = FirstChild(node))
-    return child;
-  return NextSkippingChildren(node, stay_within);
-}
-
-Node* SelectListPartTraversal::Previous(const Node& node,
-                                        const Node* stay_within) {
-  if (Node* previous = PreviousSibling(node)) {
-    while (Node* child = LastChild(*previous))
-      previous = child;
-    return previous;
-  }
-  Node* parent = FlatTreeTraversal::Parent(node);
-  return parent != stay_within ? parent : nullptr;
-}
-
-bool SelectListPartTraversal::IsDescendantOf(const Node& node,
-                                             const Node& other) {
-  for (const Node* ancestor = FlatTreeTraversal::Parent(node); ancestor;
-       ancestor = FlatTreeTraversal::Parent(*ancestor)) {
-    if (ancestor == other)
-      return true;
-    if (IsNestedSelectList(*ancestor))
-      return false;
-  }
-  return false;
-}
-
-HTMLSelectListElement* SelectListPartTraversal::NearestSelectListAncestor(
-    const Node& node) {
-  for (Node* ancestor = FlatTreeTraversal::Parent(node); ancestor;
-       ancestor = FlatTreeTraversal::Parent(*ancestor)) {
-    if (auto* select_list = DynamicTo<HTMLSelectListElement>(ancestor)) {
-      return select_list;
-    }
-    if (IsA<HTMLSelectElement>(ancestor))
-      return nullptr;
-  }
-
-  return nullptr;
-}
-
-bool SelectListPartTraversal::IsNestedSelectList(const Node& node) {
-  // When searching for parts of a given <selectlist>, don't look
-  // inside nested <selectlist> or <select> elements.
-  return IsA<HTMLSelectListElement>(node) || IsA<HTMLSelectElement>(node);
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/select_list_part_traversal.h b/third_party/blink/renderer/core/html/forms/select_list_part_traversal.h
deleted file mode 100644
index 47bcf35f..0000000
--- a/third_party/blink/renderer/core/html/forms/select_list_part_traversal.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2021 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_HTML_FORMS_SELECT_LIST_PART_TRAVERSAL_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_SELECT_LIST_PART_TRAVERSAL_H_
-
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
-
-namespace blink {
-
-class HTMLSelectListElement;
-class Node;
-
-// Used by <selectlist> to find child parts. The <selectlist> parts search
-// pierces into shadow roots, but ignores all children of nested <selectlist>
-// and <select> elements. So this traversal is similar to a FlatTreeTraversal,
-// except that when a <selectlist> or <select> element is encountered, that
-// element and its children are skipped over.
-class CORE_EXPORT SelectListPartTraversal {
-  STATIC_ONLY(SelectListPartTraversal);
-
- public:
-  // Returns the first non-<select> or <selectlist> child of node in a flat tree
-  // traversal.
-  static Node* FirstChild(const Node& node);
-  // Returns the last non-<select> or <selectlist> child of node in a flat tree
-  // traversal.
-  static Node* LastChild(const Node& node);
-  // Returns the next non-<select> or <selectlist> sibling of node in a flat
-  // tree traversal.
-  static Node* NextSibling(const Node& node);
-  // Returns the previous non-<select> or <selectlist> sibling of node in a flat
-  // tree traversal.
-  static Node* PreviousSibling(const Node& node);
-  // Returns the next Node in a flat tree pre-order traversal that skips
-  // <select> and <selectemenu> elements and their children.
-  static Node* Next(const Node& node, const Node* stay_within);
-  // Returns the previous Node in a flat tree pre-order traversal that skips
-  // <select> and <selectemenu> elements and their children.
-  static Node* Previous(const Node& node, const Node* stay_within);
-
-  // Returns true if other is an ancestor of node, and there are no <select> or
-  // <selectlist> ancestors in the parent chain between node and other.
-  static bool IsDescendantOf(const Node& node, const Node& other);
-
-  // Returns the nearest ancestor of node that is a <selectlist>, stopping when
-  // a <select> is encountered before a <selectlist> in the ancestor chain.
-  static HTMLSelectListElement* NearestSelectListAncestor(const Node& node);
-
- private:
-  static Node* NextSkippingChildren(const Node&, const Node* stay_within);
-  static bool IsNestedSelectList(const Node& node);
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_SELECT_LIST_PART_TRAVERSAL_H_
diff --git a/third_party/blink/renderer/core/html/forms/select_list_part_traversal_test.cc b/third_party/blink/renderer/core/html/forms/select_list_part_traversal_test.cc
deleted file mode 100644
index 8d9b154..0000000
--- a/third_party/blink/renderer/core/html/forms/select_list_part_traversal_test.cc
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/core/html/forms/select_list_part_traversal.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/renderer/core/dom/document.h"
-#include "third_party/blink/renderer/core/dom/element.h"
-#include "third_party/blink/renderer/core/dom/node_traversal.h"
-#include "third_party/blink/renderer/core/dom/text.h"
-#include "third_party/blink/renderer/core/html/html_element.h"
-#include "third_party/blink/renderer/core/testing/page_test_base.h"
-
-namespace blink {
-
-namespace {
-
-template <class T>
-HeapVector<Member<Node>> CollectFromIterable(T iterable) {
-  HeapVector<Member<Node>> nodes;
-  for (auto& node : iterable)
-    nodes.push_back(&node);
-  return nodes;
-}
-
-void RemoveWhiteSpaceOnlyTextNodes(ContainerNode& container) {
-  for (Node* descendant :
-       CollectFromIterable(NodeTraversal::InclusiveDescendantsOf(container))) {
-    if (auto* text = DynamicTo<Text>(descendant)) {
-      if (text->ContainsOnlyWhitespaceOrEmpty())
-        text->remove();
-    }
-  }
-}
-
-}  // namespace
-
-class SelectListPartTraversalTest : public PageTestBase {
- public:
-  SelectListPartTraversalTest() = default;
-
- protected:
-  void SetupSampleHTML(const char* main_html);
-};
-
-void SelectListPartTraversalTest::SetupSampleHTML(const char* html) {
-  Element* body = GetDocument().body();
-  SetBodyInnerHTML(String::FromUTF8(html));
-  RemoveWhiteSpaceOnlyTextNodes(*body);
-}
-
-TEST_F(SelectListPartTraversalTest, Siblings) {
-  SetupSampleHTML(R"(
-    <select></select>
-    <selectlist></selectlist>
-    <div id='c0'></div>
-    <select></select>
-    <selectlist></selectlist>
-    <div id='c1'></div>
-    <div id='c2'></div>
-    <select></select>
-    <selectlist></selectlist>)");
-
-  Element* body = GetDocument().body();
-  Element* c0 = body->QuerySelector(AtomicString("#c0"));
-  Element* c1 = body->QuerySelector(AtomicString("#c1"));
-  Element* c2 = body->QuerySelector(AtomicString("#c2"));
-
-  EXPECT_EQ(c0, SelectListPartTraversal::FirstChild(*body));
-  EXPECT_EQ(c2, SelectListPartTraversal::LastChild(*body));
-
-  EXPECT_EQ(c1, SelectListPartTraversal::NextSibling(*c0));
-  EXPECT_EQ(c2, SelectListPartTraversal::NextSibling(*c1));
-  EXPECT_EQ(nullptr, SelectListPartTraversal::NextSibling(*c2));
-
-  EXPECT_EQ(c1, SelectListPartTraversal::PreviousSibling(*c2));
-  EXPECT_EQ(c0, SelectListPartTraversal::PreviousSibling(*c1));
-  EXPECT_EQ(nullptr, SelectListPartTraversal::PreviousSibling(*c0));
-}
-
-TEST_F(SelectListPartTraversalTest, IsDescendantOf) {
-  SetupSampleHTML(R"(
-    <selectlist>
-        <div id='c0'></div>
-    </selectlist>
-    <div id='c1'></div>
-    <div id='c2'>
-      <div id='c3'></div>
-    </div>
-    <select>
-        <option id='c4'></option>
-    </select>)");
-
-  Element* body = GetDocument().body();
-  Element* c0 = body->QuerySelector(AtomicString("#c0"));
-  Element* c1 = body->QuerySelector(AtomicString("#c1"));
-  Element* c2 = body->QuerySelector(AtomicString("#c2"));
-  Element* c3 = body->QuerySelector(AtomicString("#c3"));
-  Element* c4 = body->QuerySelector(AtomicString("#c4"));
-
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*body, *body));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*c0, *body));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*body, *c0));
-
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*c0, *c1));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*c1, *c0));
-
-  EXPECT_TRUE(SelectListPartTraversal::IsDescendantOf(*c1, *body));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*body, *c1));
-
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*c1, *c2));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*c2, *c1));
-
-  EXPECT_TRUE(SelectListPartTraversal::IsDescendantOf(*c3, *body));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*body, *c3));
-
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*c4, *body));
-  EXPECT_FALSE(SelectListPartTraversal::IsDescendantOf(*body, *c4));
-}
-
-TEST_F(SelectListPartTraversalTest, NextPrevious) {
-  SetupSampleHTML(R"(
-    <selectlist>
-        <div id='c0'></div>
-    </selectlist>
-    <div id='c1'></div>
-    <div id='c2'>
-      <div id='c3'></div>
-        <select>
-          <option id='c4'></option>
-        </select>
-    </div>)");
-
-  Element* body = GetDocument().body();
-  Element* c1 = body->QuerySelector(AtomicString("#c1"));
-  Element* c2 = body->QuerySelector(AtomicString("#c2"));
-  Element* c3 = body->QuerySelector(AtomicString("#c3"));
-
-  EXPECT_EQ(nullptr, SelectListPartTraversal::Previous(*c1, body));
-  EXPECT_EQ(body, SelectListPartTraversal::Previous(*c1, nullptr));
-  EXPECT_EQ(*c2, SelectListPartTraversal::Next(*c1, body));
-  EXPECT_EQ(*c1, SelectListPartTraversal::Previous(*c2, body));
-  EXPECT_EQ(*c3, SelectListPartTraversal::Next(*c2, body));
-  EXPECT_EQ(*c2, SelectListPartTraversal::Previous(*c3, body));
-  EXPECT_EQ(nullptr, SelectListPartTraversal::Next(*c3, body));
-  EXPECT_EQ(nullptr, SelectListPartTraversal::Next(*c3, nullptr));
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc
index 05f7a5b..668e6f274 100644
--- a/third_party/blink/renderer/core/html/html_element.cc
+++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -92,7 +92,6 @@
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_label_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
 #include "third_party/blink/renderer/core/html/forms/labels_node_list.h"
 #include "third_party/blink/renderer/core/html/forms/text_control_element.h"
 #include "third_party/blink/renderer/core/html/html_bdi_element.h"
@@ -1205,14 +1204,6 @@
 }  // namespace
 
 void HTMLElement::UpdatePopoverAttribute(const AtomicString& value) {
-  if (auto* listbox = DynamicTo<HTMLListboxElement>(this)) {
-    if (listbox->OwnerSelectList()) {
-      CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled());
-      // Selectlist listboxes manage their own popover state.
-      return;
-    }
-  }
-
   PopoverValueType type = GetPopoverTypeFromAttributeValue(value);
   if (type == PopoverValueType::kManual &&
       !EqualIgnoringASCIICase(value, keywords::kManual)) {
@@ -1320,9 +1311,7 @@
     }
   };
 
-  auto* listbox = DynamicTo<HTMLListboxElement>(this);
-  bool is_selectlist_listbox = listbox && listbox->OwnerSelectList();
-  if (!HasPopoverAttribute() && !is_selectlist_listbox) {
+  if (!HasPopoverAttribute()) {
     maybe_throw_exception(DOMExceptionCode::kNotSupportedError,
                           "Not supported on elements that do not have a valid "
                           "value for the 'popover' attribute.");
@@ -1919,15 +1908,6 @@
     }
   }
 
-  if (auto* selectlist =
-          DynamicTo<HTMLSelectListElement>(internalImplicitAnchor())) {
-    // internalImplicitAnchor() is set on both the <selectlist> listbox
-    // and the <selectlist> autofill preview popover.
-    if (selectlist->ListBoxPart() == this) {
-      selectlist->ListboxWasClosed();
-    }
-  }
-
   if (auto* close_watcher = GetPopoverData()->closeWatcher()) {
     close_watcher->destroy();
     GetPopoverData()->setCloseWatcher(nullptr);
@@ -2356,8 +2336,7 @@
 }
 
 void HTMLElement::SetInternalImplicitAnchor(HTMLElement* element) {
-  CHECK(RuntimeEnabledFeatures::HTMLSelectListElementEnabled() ||
-        RuntimeEnabledFeatures::CustomizableSelectEnabled());
+  CHECK(RuntimeEnabledFeatures::CustomizableSelectEnabled());
   CHECK(HasPopoverAttribute());
   GetPopoverData()->setInternalImplicitAnchor(element);
 }
@@ -2436,31 +2415,10 @@
         /*exception_state=*/nullptr);
     return true;
   } else if (can_show) {
-    // TODO(crbug.com/1121840)
-    // HandleCommandInternal is called for both `popovertarget` and
-    // `commandfor`. `popovertarget` has one small additional behavior
-    // though; a `<selectlist>` can have a `popovertarget` button. The behavior
-    // for `<selectlist>` for `commandfor` should be handled in
-    // `HTMLSelectListElement::HandleCommandInternal`, but the `popovertarget`
-    // logic follows a slightly different path, and so for now lives here.
-    // The logic checks to see if the invoker was a popovertarget invoker that
-    // is intending to invoke a selectlist element, and opens the ListBox in
-    // that case.
-    auto* button = DynamicTo<HTMLButtonElement>(invoker);
-    HTMLSelectListElement* selectlist =
-        button && button->popoverTargetElement().popover &&
-                RuntimeEnabledFeatures::HTMLSelectListElementEnabled()
-            ? button->OwnerSelectList()
-            : nullptr;
-    if (selectlist) {
-      if (!selectlist->IsDisabledFormControl()) {
-        selectlist->OpenListbox();
-        return true;
-      }
-    } else {
-      InvokePopover(invoker);
-      return true;
-    }
+    // TODO(crbug.com/1121840) HandleCommandInternal is called for both
+    // `popovertarget` and `commandfor`.
+    InvokePopover(invoker);
+    return true;
   }
 
   if (!RuntimeEnabledFeatures::HTMLInvokeActionsV2Enabled()) {
diff --git a/third_party/blink/renderer/core/html/html_element.h b/third_party/blink/renderer/core/html/html_element.h
index e5c2110..f3e26cb3d 100644
--- a/third_party/blink/renderer/core/html/html_element.h
+++ b/third_party/blink/renderer/core/html/html_element.h
@@ -44,7 +44,6 @@
 class ExceptionState;
 class FormAssociated;
 class HTMLFormElement;
-class HTMLSelectListElement;
 class KeyboardEvent;
 class TextControlElement;
 class V8UnionStringLegacyNullToEmptyStringOrTrustedScript;
diff --git a/third_party/blink/renderer/core/html/html_tag_names.json5 b/third_party/blink/renderer/core/html/html_tag_names.json5
index 8251350..ededa36 100644
--- a/third_party/blink/renderer/core/html/html_tag_names.json5
+++ b/third_party/blink/renderer/core/html/html_tag_names.json5
@@ -303,12 +303,6 @@
       constructorNeedsCreateElementFlags: true,
     },
     {
-      name: "listbox",
-      interfaceName: "HTMLListboxElement",
-      runtimeEnabled: "HTMLSelectListElement",
-      interfaceHeaderDir: "third_party/blink/renderer/core/html/forms",
-    },
-    {
       name: "listing",
       interfaceName: "HTMLPreElement",
     },
@@ -454,12 +448,6 @@
       runtimeEnabled: "CustomizableSelect",
     },
     {
-      name: "selectlist",
-      interfaceName: "HTMLSelectListElement",
-      runtimeEnabled: "HTMLSelectListElement",
-      interfaceHeaderDir: "third_party/blink/renderer/core/html/forms",
-    },
-    {
       name: "slot",
       interfaceName: "HTMLSlotElement",
     },
diff --git a/third_party/blink/renderer/core/html/resources/selectlist.css b/third_party/blink/renderer/core/html/resources/selectlist.css
deleted file mode 100644
index 5b3790c..0000000
--- a/third_party/blink/renderer/core/html/resources/selectlist.css
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright 2022 The Chromium Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * The default style sheet used to render <selectlist> elements
- * (HTMLSelectListElement enabled).
- */
-
-@namespace "http://www.w3.org/1999/xhtml";
-
-selectlist {
-  display: inline-flex;
-  font-family: sans-serif;
-  font-size: .875em;
-  user-select: none;
-}
-
-selectlist::-internal-selectlist-button {
-  color: FieldText;
-  background-color: Field;
-  appearance: none;
-  padding: 0.25em;
-  border: 1px solid ButtonBorder;
-  border-radius: 0.25em;
-  cursor: default;
-  font-size:inherit;
-  text-align: inherit;
-  display: inline-flex;
-  flex-grow:1;
-  flex-shrink:1;
-  align-items: center;
-  overflow-x:hidden;
-  overflow-y:hidden;
-}
-
-selectlist::-internal-selectlist-selected-value {
-  color: inherit;
-  min-width:0px;
-  max-height:100%;
-  flex-grow:1;
-  flex-shrink:1;
-  overflow-x:hidden;
-  overflow-y:hidden;
-}
-
-selectlist option {
-  font-size: .875em;
-  padding: 0.25em;
-}
-
-selectlist option:hover {
-  color: SelectedItemText;
-  background-color: SelectedItem;
-  cursor: default;
-  user-select: none;
-}
-
-selectlist optgroup {
-  padding-bottom: 0.75em;
-}
-
-selectlist optgroup:last-child {
-  padding-bottom: 0;
-}
-
-selectlist optgroup > option {
-  padding-left: 0.75em;
-}
-
-selectlist::-internal-selectlist-button-icon {
-  background-image: light-dark(url(images/selectlist_button_icon.svg), url(images/selectlist_button_icon_white.svg));
-  background-origin: content-box;
-  background-repeat: no-repeat;
-  background-size: contain;
-  height: 1.0em;
-  margin-inline-start: 4px;
-  opacity: 1;
-  outline: none;
-  padding-bottom: 2px;
-  padding-inline-start: 3px;
-  padding-inline-end: 3px;
-  padding-top: 2px;
-  width: 1.2em;
-  min-width: 1.2em;
-  max-width: 1.2em;
-}
-
-selectlist:-internal-autofill-selected::-internal-selectlist-button {
-  background-image:none !important;
-  background-color: light-dark(#E8F0FE, rgba(70,90,126,0.4)) !important;
-  color: FieldText !important;
-}
-
-selectlist:disabled::-internal-selectlist-button {
-  color: light-dark(rgba(16, 16, 16, 0.3), rgba(255, 255, 255, 0.3));
-  background-color: light-dark(rgba(239, 239, 239, 0.3), rgba(59, 59, 59, 0.3));
-  border-color: light-dark(rgba(118, 118, 118, 0.3), rgba(195, 195, 195, 0.3));
-  opacity: 0.7;
-}
-
-selectlist option:disabled {
-  color: GrayText;
-  background-color: initial;
-}
-
-/* remove highlight on disabled options, making them visually un-selectable  */
-selectlist option:disabled:hover {
-  background-color: transparent;
-}
-
-selectlist option:checked:disabled {
-  background-color: light-dark(rgb(176, 176, 176), rgba(59, 59, 59, 0.3));
-}
-
-selectlist::-internal-selectlist-listbox,
-/* The [popover] part is added to increase specificity to make the border below
-   override the border set by the [popover] rule in html.css */
-selectlist::-internal-selectlist-preview[popover],
-selectlist > listbox {
-  box-shadow: 0px 12.8px 28.8px rgba(0, 0, 0, 0.13), 0px 0px 9.2px rgba(0, 0, 0, 0.11);
-  box-sizing: border-box;
-  overflow: auto;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  border-radius: 0.25em;
-  padding: 0.25em 0;
-}
-
-selectlist::-internal-selectlist-listbox,
-selectlist > listbox {
-  background-color: Field;
-}
-
-/* TODO(github.com/openui/open-ui/issues/645): We need a better way to correctly
- * select author-provided listboxes. This doesn't work if the listbox is
- * provided from an outer tree scope. */
-selectlist [behavior=listbox],
-selectlist::-internal-selectlist-listbox,
-selectlist::-internal-selectlist-preview,
-selectlist > listbox {
-  margin: 0;
-  inset: auto;
-  min-inline-size: anchor-size(self-inline);
-}
-
-selectlist [behavior=listbox],
-selectlist::-internal-selectlist-listbox,
-selectlist > listbox {
-  min-block-size: 1lh;
-  inset-block-start: anchor(self-end);
-  inset-inline-start: anchor(self-start);
-  position-try:
-    -internal-selectlist-listbox-reverse-block,
-    -internal-selectlist-listbox-reverse-inline,
-    -internal-selectlist-listbox-reverse-both,
-    -internal-selectlist-listbox-default-fill,
-    -internal-selectlist-listbox-reverse-block-fill,
-    -internal-selectlist-listbox-reverse-inline-fill,
-    -internal-selectlist-listbox-reverse-both-fill;
-}
-
-/* TODO(crbug.com/40279608): Use automatic fallbacks */
-/* Fallbacks without vertical scrolling */
-@position-try -internal-selectlist-listbox-reverse-block {
-  inset: auto;
-  /* Reverse block axis */
-  inset-block-end: anchor(self-start);
-  inset-inline-start: anchor(self-start);
-}
-@position-try -internal-selectlist-listbox-reverse-inline {
-  inset: auto;
-  /* Reverse inline axis */
-  inset-block-start: anchor(self-end);
-  inset-inline-end: anchor(self-end);
-}
-@position-try -internal-selectlist-listbox-reverse-both {
-  inset: auto;
-  /* Reverse both axes */
-  inset-block-end: anchor(self-start);
-  inset-inline-end: anchor(self-end);
-}
-/* Fallbacks with vertical scrolling */
-@position-try -internal-selectlist-listbox-default-fill {
-  inset: auto;
-  inset-block-start: anchor(self-end);
-  inset-inline-start: anchor(self-start);
-  block-size: -webkit-fill-available;
-}
-@position-try -internal-selectlist-listbox-reverse-block-fill {
-  inset: auto;
-  /* Reverse block axis */
-  inset-block-end: anchor(self-start);
-  inset-inline-start: anchor(self-start);
-  block-size: -webkit-fill-available;
-}
-@position-try -internal-selectlist-listbox-reverse-inline-fill {
-  inset: auto;
-  /* Reverse inline axis */
-  inset-block-start: anchor(self-end);
-  inset-inline-end: anchor(self-end);
-  block-size: -webkit-fill-available;
-}
-@position-try -internal-selectlist-listbox-reverse-both-fill {
-  inset: auto;
-  /* Reverse both axes */
-  inset-block-end: anchor(self-start);
-  inset-inline-end: anchor(self-end);
-  block-size: -webkit-fill-available;
-}
-
-selectlist::-internal-selectlist-preview {
-  min-block-size: anchor-size(self-block);
-  inset-block-start: anchor(self-start);
-  inset-inline-start: anchor(self-start);
-  position-try:
-    -internal-selectlist-preview-reverse-block,
-    -internal-selectlist-preview-reverse-inline,
-    -internal-selectlist-preview-reverse-both;
-  background-color: light-dark(#E8F0FE, rgba(70, 90, 126, 0.4));
-}
-
-/* TODO(crbug.com/40279608): Use automatic fallbacks */
-@position-try -internal-selectlist-preview-reverse-block {
-  inset: auto;
-  /* Reverse block axis */
-  inset-block-end: anchor(self-end);
-  inset-inline-start: anchor(self-start);
-}
-@position-try -internal-selectlist-preview-reverse-inline {
-  inset: auto;
-  /* Reverse inline axis */
-  inset-block-start: anchor(self-start);
-  inset-inline-end: anchor(self-end);
-}
-@position-try -internal-selectlist-preview-reverse-both {
-  inset: auto;
-  /* Reverse both axes */
-  inset-block-end: anchor(self-end);
-  inset-inline-end: anchor(self-end);
-}
-
-/* this is a copy of the [popover] styles from html.css. When this gets
- * merged with html.css, the rules can be combined. */
-selectlist::-internal-selectlist-listbox,
-selectlist > listbox {
-  position: fixed;
-  width: fit-content;
-  height: fit-content;
-  margin: 0;
-  border: solid;
-  padding: 0.25em;
-  overflow: auto;
-  color: CanvasText;
-  background-color: Canvas;
-}
-selectlist::-internal-selectlist-listbox:not(:popover-open),
-selectlist > listbox:not(:popover-open) {
-  display: none;
-}
-selectlist::-internal-selectlist-listbox,
-selectlist > listbox:popover-open {
-  overlay: auto !important;
-}
-selectlist::-internal-selectlist-listbox:-internal-popover-in-top-layer::backdrop,
-selectlist > listbox:-internal-popover-in-top-layer::backdrop {
-  /* From the (modified) fullscreen spec: https://fullscreen.spec.whatwg.org/#user-agent-level-style-sheet-defaults: */
-  position: fixed;
-  inset: 0;
-  /* Specific to [popover]: */
-  pointer-events: none !important;
-  background-color: transparent;
-}
diff --git a/third_party/blink/renderer/core/page/chrome_client.h b/third_party/blink/renderer/core/page/chrome_client.h
index a5f757da..4d77c94 100644
--- a/third_party/blink/renderer/core/page/chrome_client.h
+++ b/third_party/blink/renderer/core/page/chrome_client.h
@@ -516,7 +516,7 @@
   // https://html.spec.whatwg.org/multipage/interaction.html#tracking-user-activation
   virtual void DidChangeSelectionInSelectControl(HTMLFormControlElement&) {}
 
-  virtual void SelectOrSelectListFieldOptionsChanged(HTMLFormControlElement&) {}
+  virtual void SelectFieldOptionsChanged(HTMLFormControlElement&) {}
   virtual void AjaxSucceeded(LocalFrame*) {}
   // Called when the value of `element` has been changed by JavaScript.
   // `old_value` contains the value before being changed.
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.cc b/third_party/blink/renderer/core/page/chrome_client_impl.cc
index 1536a0c..81d3ec5 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl.cc
+++ b/third_party/blink/renderer/core/page/chrome_client_impl.cc
@@ -1333,12 +1333,11 @@
     fill_client->SelectControlDidChange(WebFormControlElement(&element));
 }
 
-void ChromeClientImpl::SelectOrSelectListFieldOptionsChanged(
+void ChromeClientImpl::SelectFieldOptionsChanged(
     HTMLFormControlElement& element) {
   Document& doc = element.GetDocument();
   if (auto* fill_client = AutofillClientFromFrame(doc.GetFrame())) {
-    fill_client->SelectOrSelectListFieldOptionsChanged(
-        WebFormControlElement(&element));
+    fill_client->SelectFieldOptionsChanged(WebFormControlElement(&element));
   }
 }
 
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.h b/third_party/blink/renderer/core/page/chrome_client_impl.h
index 14970dad..b099f2e 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl.h
+++ b/third_party/blink/renderer/core/page/chrome_client_impl.h
@@ -268,7 +268,7 @@
   void OpenTextDataListChooser(HTMLInputElement&) override;
   void TextFieldDataListChanged(HTMLInputElement&) override;
   void DidChangeSelectionInSelectControl(HTMLFormControlElement&) override;
-  void SelectOrSelectListFieldOptionsChanged(HTMLFormControlElement&) override;
+  void SelectFieldOptionsChanged(HTMLFormControlElement&) override;
   void AjaxSucceeded(LocalFrame*) override;
   void JavaScriptChangedValue(HTMLFormControlElement&,
                               const String& old_value,
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl_test.cc b/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
index 087c3d7..475f927 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
+++ b/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
@@ -60,7 +60,6 @@
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
 #include "third_party/blink/renderer/core/html/forms/mock_file_chooser.h"
 #include "third_party/blink/renderer/core/html/forms/text_control_element.h"
@@ -411,11 +410,6 @@
         <option value='autofilled_select'>b</option>
         <option value='overridden'>c</option>
       </select>
-      <selectlist id='selectlist'>
-        <option value='initial' selected>a</option>
-        <option value='autofilled_selectlist'>b</option>
-        <option value='overridden'>c</option>
-      </selectlist>
       <input id='not_autofilled_text'>
     </form>
   )HTML");
@@ -423,8 +417,6 @@
   auto* text_element = To<HTMLInputElement>(GetElementById("text"));
   auto* textarea_element = To<HTMLTextAreaElement>(GetElementById("textarea"));
   auto* select_element = To<HTMLSelectElement>(GetElementById("select"));
-  auto* selectlist_element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
   auto* not_autofilled_text =
       To<HTMLInputElement>(GetElementById("not_autofilled_text"));
 
@@ -432,8 +424,6 @@
   textarea_element->SetAutofillValue("autofilled_textarea");
   select_element->SetAutofillValue("autofilled_select",
                                    WebAutofillState::kAutofilled);
-  selectlist_element->SetAutofillValue("autofilled_selectlist",
-                                       WebAutofillState::kAutofilled);
 
   EXPECT_THAT(text_element->Value(), Eq("autofilled_text"));
   EXPECT_THAT(text_element->GetAutofillState(),
@@ -465,16 +455,6 @@
   EXPECT_THAT(chrome_client_->GetAndResetLastEvent(),
               ::testing::ElementsAre("select", "autofilled_select"));
 
-  EXPECT_THAT(selectlist_element->value(), Eq("autofilled_selectlist"));
-  EXPECT_THAT(selectlist_element->GetAutofillState(),
-              Eq(WebAutofillState::kAutofilled));
-  ExecuteScript("document.getElementById('selectlist').value = 'overridden';");
-  EXPECT_THAT(selectlist_element->value(), Eq("overridden"));
-  EXPECT_THAT(selectlist_element->GetAutofillState(),
-              Eq(WebAutofillState::kNotFilled));
-  EXPECT_THAT(chrome_client_->GetAndResetLastEvent(),
-              ::testing::ElementsAre("selectlist", "autofilled_selectlist"));
-
   // Even for elements that are not in state "autofilled", the chrome client is
   // informed about the change.
   EXPECT_THAT(not_autofilled_text->Value().IsNull(), ::testing::IsTrue());
@@ -501,16 +481,11 @@
         <option value='autofilled_select'>b</option>
         <option value='overridden'>c</option>
       </select>
-      <selectlist id='selectlist'>
-        <option value='initial' selected>a</option>
-        <option value='autofilled_selectlist'>b</option>
-        <option value='overridden'>c</option>
-      </selectlist>
     </form>
   )HTML");
 
   ExecuteScript(R"JS(
-    for (const id of ['text', 'textarea', 'select', 'selectlist']) {
+    for (const id of ['text', 'textarea', 'select']) {
       document.getElementById(id).addEventListener('change', () => {
         document.getElementById(id).value = 'overridden';
       });
@@ -520,8 +495,6 @@
   auto* text_element = To<HTMLInputElement>(GetElementById("text"));
   auto* textarea_element = To<HTMLTextAreaElement>(GetElementById("textarea"));
   auto* select_element = To<HTMLSelectElement>(GetElementById("select"));
-  auto* selectlist_element =
-      To<HTMLSelectListElement>(GetElementById("selectlist"));
   text_element->SetAutofillValue("autofilled_text");
   EXPECT_THAT(text_element->Value(), Eq("overridden"));
   // Note that we expect WebAutofillState::kAutofilled. This is a product
@@ -556,15 +529,6 @@
       !RuntimeEnabledFeatures::AllowJavaScriptToResetAutofillStateEnabled());
   EXPECT_THAT(chrome_client_->GetAndResetLastEvent(),
               ::testing::ElementsAre("select", "autofilled_select"));
-
-  selectlist_element->SetAutofillValue("autofilled_selectlist",
-                                       WebAutofillState::kAutofilled);
-  EXPECT_THAT(selectlist_element->value(), Eq("overridden"));
-  EXPECT_EQ(
-      selectlist_element->GetAutofillState() == WebAutofillState::kAutofilled,
-      !RuntimeEnabledFeatures::AllowJavaScriptToResetAutofillStateEnabled());
-  EXPECT_THAT(chrome_client_->GetAndResetLastEvent(),
-              ::testing::ElementsAre("selectlist", "autofilled_selectlist"));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc
index 4327d7d..8b131e8 100644
--- a/third_party/blink/renderer/core/testing/internals.cc
+++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -111,7 +111,6 @@
 #include "third_party/blink/renderer/core/html/forms/form_controller.h"
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
 #include "third_party/blink/renderer/core/html/forms/text_control_inner_elements.h"
 #include "third_party/blink/renderer/core/html/html_iframe_element.h"
@@ -3322,12 +3321,6 @@
   select->ResetTypeAheadSessionForTesting();
 }
 
-void Internals::resetSelectListTypeAheadSession(
-    HTMLSelectListElement* selectlist) {
-  DCHECK(selectlist);
-  selectlist->ResetTypeAheadSessionForTesting();
-}
-
 void Internals::forceCompositingUpdate(Document* document,
                                        ExceptionState& exception_state) {
   DCHECK(document);
diff --git a/third_party/blink/renderer/core/testing/internals.h b/third_party/blink/renderer/core/testing/internals.h
index d584fea8..c4984ea 100644
--- a/third_party/blink/renderer/core/testing/internals.h
+++ b/third_party/blink/renderer/core/testing/internals.h
@@ -61,7 +61,6 @@
 class HTMLInputElement;
 class HTMLMediaElement;
 class HTMLSelectElement;
-class HTMLSelectListElement;
 class HTMLVideoElement;
 class HitTestLayerRectList;
 class HitTestLocation;
@@ -451,8 +450,6 @@
   int selectPopupItemStyleFontHeight(Node*, int);
   void resetTypeAheadSession(HTMLSelectElement*);
 
-  void resetSelectListTypeAheadSession(HTMLSelectListElement*);
-
   StaticSelection* getDragCaret();
   StaticSelection* getSelectionInFlatTree(DOMWindow*, ExceptionState&);
   Node* visibleSelectionAnchorNode();
diff --git a/third_party/blink/renderer/core/testing/internals.idl b/third_party/blink/renderer/core/testing/internals.idl
index d03fdb2..9c58a54 100644
--- a/third_party/blink/renderer/core/testing/internals.idl
+++ b/third_party/blink/renderer/core/testing/internals.idl
@@ -283,8 +283,6 @@
     long selectPopupItemStyleFontHeight(Node select, long itemIndex);
     void resetTypeAheadSession(HTMLSelectElement select);
 
-    void resetSelectListTypeAheadSession(HTMLSelectListElement selectlist);
-
     StaticSelection getDragCaret();
     [RaisesException] StaticSelection getSelectionInFlatTree(Window window);
     // TODO(editing-dev): We should change |visibleSelection*| to
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
index f6551d4..8dfcd93 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -85,12 +85,10 @@
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_label_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_legend_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_listbox_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_option_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_output_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
-#include "third_party/blink/renderer/core/html/forms/html_select_list_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
 #include "third_party/blink/renderer/core/html/forms/labels_node_list.h"
 #include "third_party/blink/renderer/core/html/forms/radio_input_type.h"
@@ -1994,16 +1992,6 @@
   if (GetNode()->IsTextNode())
     return ax::mojom::blink::Role::kStaticText;
 
-  if (auto* button = DynamicTo<HTMLButtonElement>(GetNode())) {
-    if (button->OwnerSelectList()) {
-      return ax::mojom::blink::Role::kComboBoxMenuButton;
-    }
-  }
-
-  if (IsA<HTMLListboxElement>(GetNode())) {
-    return ax::mojom::blink::Role::kListBox;
-  }
-
   if (IsA<HTMLImageElement>(GetNode()))
     return ax::mojom::blink::Role::kImage;
 
@@ -2688,8 +2676,7 @@
     return false;
   }
 
-  // TODO(crbug.com/369219144): Should this be DynamicTo<HTMLAnchorElementBase>?
-  if (auto* anchor = DynamicTo<HTMLAnchorElement>(AnchorElement())) {
+  if (auto* anchor = DynamicTo<HTMLAnchorElementBase>(AnchorElement())) {
     return !anchor->Href().IsEmpty();
   }
   return false;
@@ -3382,8 +3369,7 @@
   // submitted, and could also be overridden by a "formTarget" attribute on e.g.
   // a form's submit button. However, screen reader users have no need to know
   // to which target (browser context) a form would be submitted.
-  // TODO(crbug.com/369219144): Should this be DynamicTo<HTMLAnchorElementBase>?
-  const auto* anchor = DynamicTo<HTMLAnchorElement>(GetNode());
+  const auto* anchor = DynamicTo<HTMLAnchorElementBase>(GetNode());
   if (anchor) {
     const AtomicString self_value("_self");
     const AtomicString& effective_target = anchor->GetEffectiveTarget();
@@ -4341,24 +4327,6 @@
   }
 
   if (RoleValue() == ax::mojom::blink::Role::kComboBoxMenuButton) {
-    // An HTML <selectlist>'s button gets its value from the selected option.
-    if (auto* button = DynamicTo<HTMLButtonElement>(node)) {
-      if (auto* select_list = button->OwnerSelectList()) {
-        if (HTMLOptionElement* selected = select_list->selectedOption()) {
-          // TODO(accessibility) Because these <option> elements can contain
-          // anything, we need to create an AXObject for the selected option,
-          // and use ax_selected_option->ComputedName(). However, for now, the
-          // AXObject is not created because AXObject::IsRelevantSlotElement()
-          // returns false for the invisible slot parent. Also, strangely,
-          // selected->innerText()/GetInnerTextWithoutUpdate() are returning "".
-          // See the following content_browsertest:
-          // All/DumpAccessibilityTreeTest.AccessibilitySelectList/blink.
-          return selected->textContent();
-        }
-        return String();
-      }
-    }
-
     // An ARIA combobox can get value from inner contents.
     return TextFromDescendants(visited, nullptr, false);
   }
diff --git a/third_party/blink/renderer/modules/content_index/content_description_type_converter.cc b/third_party/blink/renderer/modules/content_index/content_description_type_converter.cc
index 1dbf0b1..67a696d2 100644
--- a/third_party/blink/renderer/modules/content_index/content_description_type_converter.cc
+++ b/third_party/blink/renderer/modules/content_index/content_description_type_converter.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/content_index/content_description_type_converter.h"
 
 #include "third_party/blink/public/mojom/content_index/content_index.mojom-blink.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_content_category.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_content_icon_definition.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
@@ -13,35 +14,38 @@
 
 namespace {
 
-blink::mojom::ContentCategory GetContentCategory(const WTF::String& category) {
-  if (category == "")
-    return blink::mojom::ContentCategory::NONE;
-  if (category == "homepage")
-    return blink::mojom::ContentCategory::HOME_PAGE;
-  if (category == "article")
-    return blink::mojom::ContentCategory::ARTICLE;
-  if (category == "video")
-    return blink::mojom::ContentCategory::VIDEO;
-  if (category == "audio")
-    return blink::mojom::ContentCategory::AUDIO;
-
-  NOTREACHED_IN_MIGRATION();
-  return blink::mojom::ContentCategory::NONE;
+blink::mojom::blink::ContentCategory GetContentCategory(
+    blink::V8ContentCategory::Enum category) {
+  switch (category) {
+    case blink::V8ContentCategory::Enum::k:
+      return blink::mojom::blink::ContentCategory::NONE;
+    case blink::V8ContentCategory::Enum::kHomepage:
+      return blink::mojom::blink::ContentCategory::HOME_PAGE;
+    case blink::V8ContentCategory::Enum::kArticle:
+      return blink::mojom::blink::ContentCategory::ARTICLE;
+    case blink::V8ContentCategory::Enum::kVideo:
+      return blink::mojom::blink::ContentCategory::VIDEO;
+    case blink::V8ContentCategory::Enum::kAudio:
+      return blink::mojom::blink::ContentCategory::AUDIO;
+  }
+  NOTREACHED();
 }
 
-WTF::String GetContentCategory(blink::mojom::ContentCategory category) {
+blink::V8ContentCategory::Enum GetContentCategory(
+    blink::mojom::blink::ContentCategory category) {
   switch (category) {
-    case blink::mojom::ContentCategory::NONE:
-      return "";
-    case blink::mojom::ContentCategory::HOME_PAGE:
-      return "homepage";
-    case blink::mojom::ContentCategory::ARTICLE:
-      return "article";
-    case blink::mojom::ContentCategory::VIDEO:
-      return "video";
-    case blink::mojom::ContentCategory::AUDIO:
-      return "audio";
+    case blink::mojom::blink::ContentCategory::NONE:
+      return blink::V8ContentCategory::Enum::k;
+    case blink::mojom::blink::ContentCategory::HOME_PAGE:
+      return blink::V8ContentCategory::Enum::kHomepage;
+    case blink::mojom::blink::ContentCategory::ARTICLE:
+      return blink::V8ContentCategory::Enum::kArticle;
+    case blink::mojom::blink::ContentCategory::VIDEO:
+      return blink::V8ContentCategory::Enum::kVideo;
+    case blink::mojom::blink::ContentCategory::AUDIO:
+      return blink::V8ContentCategory::Enum::kAudio;
   }
+  NOTREACHED();
 }
 
 }  // namespace
@@ -54,7 +58,7 @@
   result->id = description->id();
   result->title = description->title();
   result->description = description->description();
-  result->category = GetContentCategory(description->category());
+  result->category = GetContentCategory(description->category().AsEnum());
   for (const auto& icon : description->icons()) {
     result->icons.push_back(blink::mojom::blink::ContentIconDefinition::New(
         icon->src(), icon->hasSizes() ? icon->sizes() : String(),
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc
index 52373d0..9026c14 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_gamepad_effect_parameters.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_gamepad_haptic_effect_type.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_gamepad_haptics_result.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/modules/gamepad/gamepad_dispatcher.h"
@@ -24,21 +25,15 @@
 using device::mojom::GamepadHapticsResult;
 using device::mojom::GamepadHapticEffectType;
 
-const char kGamepadHapticActuatorTypeVibration[] = "vibration";
-const char kGamepadHapticActuatorTypeDualRumble[] = "dual-rumble";
-
-const char kGamepadHapticEffectTypeDualRumble[] = "dual-rumble";
-const char kGamepadHapticEffectTypeTriggerRumble[] = "trigger-rumble";
-
-GamepadHapticEffectType EffectTypeFromString(const String& type) {
-  if (type == kGamepadHapticEffectTypeDualRumble)
-    return GamepadHapticEffectType::GamepadHapticEffectTypeDualRumble;
-
-  if (type == kGamepadHapticEffectTypeTriggerRumble)
-    return GamepadHapticEffectType::GamepadHapticEffectTypeTriggerRumble;
-
-  NOTREACHED_IN_MIGRATION();
-  return GamepadHapticEffectType::GamepadHapticEffectTypeDualRumble;
+GamepadHapticEffectType EffectTypeFromEnum(
+    V8GamepadHapticEffectType::Enum type) {
+  switch (type) {
+    case V8GamepadHapticEffectType::Enum::kDualRumble:
+      return GamepadHapticEffectType::GamepadHapticEffectTypeDualRumble;
+    case V8GamepadHapticEffectType::Enum::kTriggerRumble:
+      return GamepadHapticEffectType::GamepadHapticEffectTypeTriggerRumble;
+  }
+  NOTREACHED();
 }
 
 V8GamepadHapticsResult ResultToV8(GamepadHapticsResult result) {
@@ -77,25 +72,25 @@
   supported_effects_.clear();
   switch (type) {
     case device::GamepadHapticActuatorType::kVibration:
-      type_ = kGamepadHapticActuatorTypeVibration;
+      type_ = V8GamepadHapticActuatorType::Enum::kVibration;
       break;
     // Currently devices that have trigger rumble support, also have dual-rumble
     // support.
     case device::GamepadHapticActuatorType::kTriggerRumble:
-      supported_effects_.push_back(kGamepadHapticEffectTypeTriggerRumble);
+      supported_effects_.push_back(V8GamepadHapticEffectType(
+          V8GamepadHapticEffectType::Enum::kTriggerRumble));
       [[fallthrough]];
     case device::GamepadHapticActuatorType::kDualRumble:
-      supported_effects_.push_back(kGamepadHapticEffectTypeDualRumble);
-      type_ = kGamepadHapticActuatorTypeDualRumble;
+      supported_effects_.push_back(V8GamepadHapticEffectType(
+          V8GamepadHapticEffectType::Enum::kDualRumble));
+      type_ = V8GamepadHapticActuatorType::Enum::kDualRumble;
       break;
-    default:
-      NOTREACHED_IN_MIGRATION();
   }
 }
 
 ScriptPromise<V8GamepadHapticsResult> GamepadHapticActuator::playEffect(
     ScriptState* script_state,
-    const String& type,
+    const V8GamepadHapticEffectType& type,
     const GamepadEffectParameters* params) {
   auto* resolver =
       MakeGarbageCollected<ScriptPromiseResolver<V8GamepadHapticsResult>>(
@@ -128,7 +123,7 @@
                                 WrapPersistent(this), WrapPersistent(resolver));
 
   gamepad_dispatcher_->PlayVibrationEffectOnce(
-      pad_index_, EffectTypeFromString(type),
+      pad_index_, EffectTypeFromEnum(type.AsEnum()),
       device::mojom::blink::GamepadEffectParameters::New(
           params->duration(), params->startDelay(), params->strongMagnitude(),
           params->weakMagnitude(), params->leftTrigger(),
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.h b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.h
index a2e8e500..ac1abf9f 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.h
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.h
@@ -9,6 +9,7 @@
 #include "device/gamepad/public/mojom/gamepad.mojom-blink-forward.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_gamepad_haptic_actuator_type.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
@@ -23,6 +24,7 @@
 class GamepadEffectParameters;
 enum class GamepadHapticActuatorType;
 class ScriptState;
+class V8GamepadHapticEffectType;
 class V8GamepadHapticsResult;
 
 class GamepadHapticActuator final : public ScriptWrappable,
@@ -35,13 +37,19 @@
                         device::GamepadHapticActuatorType type);
   ~GamepadHapticActuator() override;
 
-  const Vector<String>& effects() const { return supported_effects_; }
+  const Vector<V8GamepadHapticEffectType>& effects() const {
+    return supported_effects_;
+  }
 
-  const String& type() const { return type_; }
+  V8GamepadHapticActuatorType type() const {
+    return V8GamepadHapticActuatorType(type_);
+  }
   void SetType(device::GamepadHapticActuatorType);
 
-  ScriptPromise<V8GamepadHapticsResult>
-  playEffect(ScriptState*, const String&, const GamepadEffectParameters*);
+  ScriptPromise<V8GamepadHapticsResult> playEffect(
+      ScriptState*,
+      const V8GamepadHapticEffectType&,
+      const GamepadEffectParameters*);
 
   ScriptPromise<V8GamepadHapticsResult> reset(ScriptState*);
 
@@ -55,9 +63,9 @@
   void ResetVibrationIfNotPreempted();
 
   int pad_index_;
-  String type_;
+  V8GamepadHapticActuatorType::Enum type_;
   bool should_reset_ = false;
-  Vector<String> supported_effects_;
+  Vector<V8GamepadHapticEffectType> supported_effects_;
 
   Member<GamepadDispatcher> gamepad_dispatcher_;
 };
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.cc b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
index 7a3e24d..e5d0c31 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
@@ -532,16 +532,6 @@
   return !!owning_thread_data_.client_shared_image;
 }
 
-void CanvasResourceSharedImage::BeginReadAccess() {
-  RasterInterface()->BeginSharedImageAccessDirectCHROMIUM(
-      GetTextureIdForReadAccess(), GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
-}
-
-void CanvasResourceSharedImage::EndReadAccess() {
-  RasterInterface()->EndSharedImageAccessDirectCHROMIUM(
-      GetTextureIdForReadAccess());
-}
-
 void CanvasResourceSharedImage::BeginWriteAccess() {
   RasterInterface()->BeginSharedImageAccessDirectCHROMIUM(
       GetTextureIdForWriteAccess(),
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.h b/third_party/blink/renderer/platform/graphics/canvas_resource.h
index 9e4438f..d865fd0f 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource.h
@@ -336,8 +336,6 @@
   bool OriginClean() const final { return is_origin_clean_; }
   void SetOriginClean(bool value) final { is_origin_clean_ = value; }
   void NotifyResourceLost() final;
-  void BeginReadAccess();
-  void EndReadAccess();
   void BeginWriteAccess();
   void EndWriteAccess();
   GrBackendTexture CreateGrTexture() const;
@@ -350,9 +348,6 @@
   }
 
   void WillDraw();
-  bool HasReadAccess() const {
-    return owning_thread_data().bitmap_image_read_refs > 0u;
-  }
   bool IsLost() const { return owning_thread_data().is_lost; }
   void CopyRenderingResultsToGpuMemoryBuffer(const sk_sp<SkImage>& image);
   bool UsesClientSharedImage() override { return true; }
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 579ffb5..ce72761 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -551,47 +551,32 @@
       resource_ = NewOrRecycledResource();
       DCHECK(IsResourceUsable(resource_.get()));
 
-      auto* raster_interface = RasterInterface();
-      if (raster_interface) {
-        if (!use_oop_rasterization_)
-          TearDownSkSurface();
+      if (!use_oop_rasterization_) {
+        TearDownSkSurface();
+      }
 
-        if (mode_ == SkSurface::kRetain_ContentChangeMode) {
-          auto old_mailbox =
-              old_resource_shared_image->GetClientSharedImage()->mailbox();
-          auto mailbox = resource()->GetClientSharedImage()->mailbox();
+      if (mode_ == SkSurface::kRetain_ContentChangeMode) {
+        auto old_mailbox =
+            old_resource_shared_image->GetClientSharedImage()->mailbox();
+        auto mailbox = resource()->GetClientSharedImage()->mailbox();
 
-          raster_interface->CopySharedImage(
-              old_mailbox, mailbox,
-              resource()->GetClientSharedImage()->GetTextureTarget(), 0, 0, 0,
-              0, Size().width(), Size().height(), false /* unpack_flip_y */,
-              false /* unpack_premultiply_alpha */);
-        } else if (use_oop_rasterization_) {
-          // If we're not copying over the previous contents, we need to ensure
-          // that the image is cleared on the next BeginRasterCHROMIUM.
-          is_cleared_ = false;
-        }
+        RasterInterface()->CopySharedImage(
+            old_mailbox, mailbox,
+            resource()->GetClientSharedImage()->GetTextureTarget(), 0, 0, 0, 0,
+            Size().width(), Size().height(), false /* unpack_flip_y */,
+            false /* unpack_premultiply_alpha */);
+      } else if (use_oop_rasterization_) {
+        // If we're not copying over the previous contents, we need to ensure
+        // that the image is cleared on the next BeginRasterCHROMIUM.
+        is_cleared_ = false;
+      }
 
-        // In non-OOPR mode we need to update the client side SkSurface with the
-        // copied texture. Recreating SkSurface here matches the GPU process
-        // behaviour that will happen in OOPR mode.
-        if (!use_oop_rasterization_) {
-          EnsureWriteAccess();
-          GetSkSurface();
-        }
-      } else {
+      // In non-OOPR mode we need to update the client side SkSurface with the
+      // copied texture. Recreating SkSurface here matches the GPU process
+      // behaviour that will happen in OOPR mode.
+      if (!use_oop_rasterization_) {
         EnsureWriteAccess();
-        if (surface_) {
-          // Take read access to the outgoing resource for the skia copy below.
-          if (!old_resource_shared_image->HasReadAccess()) {
-            old_resource_shared_image->BeginReadAccess();
-          }
-          surface_->replaceBackendTexture(CreateGrTextureForResource(),
-                                          GetGrSurfaceOrigin(), mode_);
-          if (!old_resource_shared_image->HasReadAccess()) {
-            old_resource_shared_image->EndReadAccess();
-          }
-        }
+        GetSkSurface();
       }
       UMA_HISTOGRAM_BOOLEAN("Blink.Canvas.ContentChangeMode",
                             mode_ == SkSurface::kRetain_ContentChangeMode);
diff --git a/third_party/blink/renderer/platform/image-decoders/segment_stream.h b/third_party/blink/renderer/platform/image-decoders/segment_stream.h
index fff1e216..fa2a4663 100644
--- a/third_party/blink/renderer/platform/image-decoders/segment_stream.h
+++ b/third_party/blink/renderer/platform/image-decoders/segment_stream.h
@@ -43,6 +43,14 @@
  private:
   scoped_refptr<SegmentReader> reader_;
   size_t position_ = 0;
+
+  // Offset inside the wrapped `reader_` where `this` `SkStream` begins.  This
+  // is useful in scenarios where we want an `SkCodec` to decode an image
+  // embedded in a middle of another data stream - one specific example is PNG
+  // images embedded inside ICO or BMP images.
+  //
+  // Note: the only reason this field is not `const` is supporting mutation in
+  // the implementation of `operator=`.
   size_t reading_offset_ = 0;
 };
 
diff --git a/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.h b/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.h
index 057e494..21f4589c 100644
--- a/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.h
+++ b/third_party/blink/renderer/platform/image-decoders/skia/skia_image_decoder_base.h
@@ -81,6 +81,10 @@
   int prior_frame_ = SkCodec::kNoFrame;
   base::flat_set<wtf_size_t> decode_failed_frames_;
 
+  // Offset inside `segment_stream_` where `this` decoder should start decoding
+  // an image.  This is useful in scenarios where we want an `SkCodec` to decode
+  // an image embedded in a middle of another data stream - one specific example
+  // is PNG images embedded inside ICO or BMP images.
   const wtf_size_t reading_offset_ = 0;
 };
 
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
index 3abf5f1d..f448c49 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
@@ -861,6 +861,9 @@
                    scoped_refptr<RefCountedWritableSharedMemoryMapping>>>
       output_buffers_;
 
+  // The number of input buffers requested by hardware video encoder.
+  size_t input_buffers_requested_count_{0};
+
   // The number of frames that are sent to a hardware video encoder by Encode()
   // and the encoder holds them.
   size_t frames_in_encoder_count_{0};
@@ -1074,6 +1077,52 @@
     return;
   }
 
+// On Windows it is possible that RtcVideoEncoder is configured to only accept
+// native inputs, but the incoming frame is not backed by GpuMemoryBuffer and
+// is not a black frame.
+#if BUILDFLAG(IS_WIN)
+  {
+    // Check if the incoming frame is backed by unowned memory. This could
+    // happen when: 1. Zero-copy capture feature is turned on but device does
+    // not support MediaFoundation; 2. The video track gets disabled so black
+    // frames are sent.
+    scoped_refptr<media::VideoFrame> frame;
+    rtc::scoped_refptr<webrtc::VideoFrameBuffer> frame_buffer =
+        frame_chunk.video_frame_buffer;
+    // For black frames their handling will depend on the current
+    // |use_native_input_| state. As a result we don't toggle
+    // |use_native_input_| flag here for them.
+    if (frame_buffer->type() == webrtc::VideoFrameBuffer::Type::kNative) {
+      frame = static_cast<WebRtcVideoFrameAdapter*>(frame_buffer.get())
+                  ->getMediaVideoFrame();
+      if (frame->storage_type() == media::VideoFrame::STORAGE_UNOWNED_MEMORY) {
+        if (use_native_input_) {
+          use_native_input_ = false;
+          // VEA previously worked with imported frames. Now they need input
+          // buffers when handling non-imported frames.
+          if (input_buffers_.empty()) {
+            input_buffers_free_.resize(input_buffers_requested_count_);
+            input_buffers_.resize(input_buffers_requested_count_);
+            for (wtf_size_t i = 0; i < input_buffers_requested_count_; i++) {
+              input_buffers_free_[i] = i;
+              input_buffers_[i] = nullptr;
+            }
+          }
+        }
+      } else if (frame->storage_type() ==
+                 media::VideoFrame::STORAGE_GPU_MEMORY_BUFFER) {
+        if (!use_native_input_) {
+          use_native_input_ = true;
+          // VEA previously worked with input buffers. Now they need imported
+          // frames, so get rid of those buffers.
+          input_buffers_free_.clear();
+          input_buffers_.clear();
+        }
+      }
+    }
+  }
+#endif
+
   if (use_native_input_) {
     DCHECK(pending_frames_.empty());
     EncodeOneFrameWithNativeInput(std::move(frame_chunk));
@@ -1293,13 +1342,13 @@
     return;
 
   input_frame_coded_size_ = input_coded_size;
+  input_buffers_requested_count_ = input_count + kInputBufferExtraCount;
 
   // |input_buffers_| is only needed in non import mode.
   if (!use_native_input_) {
-    const wtf_size_t num_input_buffers = input_count + kInputBufferExtraCount;
-    input_buffers_free_.resize(num_input_buffers);
-    input_buffers_.resize(num_input_buffers);
-    for (wtf_size_t i = 0; i < num_input_buffers; i++) {
+    input_buffers_free_.resize(input_buffers_requested_count_);
+    input_buffers_.resize(input_buffers_requested_count_);
+    for (wtf_size_t i = 0; i < input_buffers_requested_count_; i++) {
       input_buffers_free_[i] = i;
       input_buffers_[i] = nullptr;
     }
@@ -1961,6 +2010,7 @@
 
   frames_in_encoder_count_++;
   DVLOG(3) << "frames_in_encoder_count=" << frames_in_encoder_count_;
+
   video_encoder_->Encode(frame, frame_chunk.force_keyframe);
 }
 
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
index ebdd56d0..bf6df4a5 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
@@ -37,11 +37,15 @@
 #include "media/video/mock_video_encode_accelerator.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/renderer/platform/testing/video_frame_utils.h"
+#include "third_party/blink/renderer/platform/webrtc/testing/mock_webrtc_video_frame_adapter_shared_resources.h"
 #include "third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 #include "third_party/libyuv/include/libyuv/planar_functions.h"
 #include "third_party/webrtc/api/video/i420_buffer.h"
+#include "third_party/webrtc/api/video/video_frame_buffer.h"
 #include "third_party/webrtc/api/video_codecs/video_encoder.h"
+#include "third_party/webrtc/common_video/include/video_frame_buffer.h"
 #include "third_party/webrtc/modules/video_coding/include/video_codec_interface.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
 #include "third_party/webrtc/rtc_base/time_utils.h"
@@ -68,6 +72,7 @@
 using ::testing::WithArgs;
 
 using SpatialLayer = media::VideoEncodeAccelerator::Config::SpatialLayer;
+using Type = webrtc::VideoFrameBuffer::Type;
 
 namespace blink {
 
@@ -115,6 +120,47 @@
   EncodedCallback encoded_callback_;
 };
 
+class FakeNativeBufferI420 : public blink::WebRtcVideoFrameAdapter {
+ public:
+  FakeNativeBufferI420(int width, int height, bool allow_to_i420)
+      : blink::WebRtcVideoFrameAdapter(
+            media::VideoFrame::CreateBlackFrame(gfx::Size(480, 360))),
+        width_(width),
+        height_(height),
+        allow_to_i420_(allow_to_i420) {}
+
+  Type type() const override { return Type::kNative; }
+  int width() const override { return width_; }
+  int height() const override { return height_; }
+
+  rtc::scoped_refptr<webrtc::I420BufferInterface> ToI420() override {
+    if (allow_to_i420_) {
+      return webrtc::I420Buffer::Create(width_, height_);
+    } else {
+      return nullptr;
+    }
+  }
+
+  scoped_refptr<media::VideoFrame> getMediaVideoFrame() const override {
+    const gfx::Size kSize360p(480, 360);
+    const gfx::Rect kRect360p(0, 0, 480, 360);
+
+    // The strictness of the mock ensures zero copy.
+    auto resources =
+        base::MakeRefCounted<testing::StrictMock<MockSharedResources>>();
+
+    return CreateTestFrame(kSize360p, kRect360p, kSize360p,
+                           media::VideoFrame::STORAGE_OWNED_MEMORY,
+                           media::VideoPixelFormat::PIXEL_FORMAT_NV12,
+                           base::TimeDelta());
+  }
+
+ private:
+  const int width_;
+  const int height_;
+  const bool allow_to_i420_;
+};
+
 class RTCVideoEncoderWrapper : public webrtc::VideoEncoder {
  public:
   static std::unique_ptr<RTCVideoEncoderWrapper> Create(
@@ -1061,6 +1107,38 @@
                                  &frame_types));
 }
 
+// On Windows we allow native input that is mappable.
+#if BUILDFLAG(IS_WIN)
+TEST_F(RTCVideoEncoderEncodeTest, NoSoftwareFallbackOnMappableNativeInput) {
+  // Make RTCVideoEncoder expect native input.
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kVideoCaptureUseGpuMemoryBuffer);
+
+  const webrtc::VideoCodecType codec_type = webrtc::kVideoCodecH264;
+  CreateEncoder(codec_type);
+  webrtc::VideoCodec codec = GetDefaultCodec();
+  ExpectCreateInitAndDestroyVEA(
+      media::PIXEL_FORMAT_NV12,
+      media::VideoEncodeAccelerator::Config::StorageType::kGpuMemoryBuffer);
+  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
+            rtc_encoder_->InitEncode(&codec, kVideoEncoderSettings));
+
+  rtc::scoped_refptr<webrtc::VideoFrameBuffer> mapped_buffer(
+      rtc::make_ref_counted<FakeNativeBufferI420>(480, 360,
+                                                  /*allow_to_i420=*/false));
+
+  std::vector<webrtc::VideoFrameType> frame_types;
+  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
+            rtc_encoder_->Encode(webrtc::VideoFrame::Builder()
+                                     .set_video_frame_buffer(mapped_buffer)
+                                     .set_rtp_timestamp(0)
+                                     .set_timestamp_us(0)
+                                     .set_rotation(webrtc::kVideoRotation_0)
+                                     .build(),
+                                 &frame_types));
+}
+#endif  // BUILDFLAG(IS_WIN)
+
 TEST_F(RTCVideoEncoderEncodeTest, SoftwareFallbackOnBadEncodeInput) {
   // Make RTCVideoEncoder expect native input.
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 3ec2970..8dd3a111 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -2340,10 +2340,6 @@
       status: "stable",
     },
     {
-      name: "HTMLSelectListElement",
-      status: "experimental",
-    },
-    {
       // According to spec, text transforms should not affect the content
       // of plain text copy and paste -
       // https://www.w3.org/TR/css-text-3/#text-transform
diff --git a/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc b/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc
index ead0dfc1..9001f956 100644
--- a/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc
+++ b/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc
@@ -490,6 +490,10 @@
           video_frame_init_data.ready_buffer->info->is_premapped
               ? const_cast<uint8_t*>(buffer_context->data())
               : nullptr;
+      size_t premapped_data_size =
+          video_frame_init_data.ready_buffer->info->is_premapped
+              ? buffer_context->data_size()
+              : 0;
 
       // Clone the GpuMemoryBuffer and wrap it in a VideoFrame.
       std::unique_ptr<gfx::GpuMemoryBuffer> buffer =
@@ -499,7 +503,7 @@
               buffer_context->GetGpuMemoryBuffer()->GetFormat(),
               gfx::BufferUsage::SCANOUT_VEA_CPU_READ, base::DoNothing(),
               gpu_factories_->GpuMemoryBufferManager(), pool_,
-              base::span<uint8_t>(premapped_data, buffer_context->data_size()));
+              base::span<uint8_t>(premapped_data, premapped_data_size));
       if (!buffer) {
         LOG(ERROR) << "Failed to open GpuMemoryBuffer handle";
         return std::nullopt;
diff --git a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h
index c3b02ee..2e21a6d 100644
--- a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h
+++ b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h
@@ -188,7 +188,9 @@
       scoped_refptr<media::VideoFrame> frame,
       scoped_refptr<SharedResources> shared_resources);
 
-  scoped_refptr<media::VideoFrame> getMediaVideoFrame() const { return frame_; }
+  virtual scoped_refptr<media::VideoFrame> getMediaVideoFrame() const {
+    return frame_;
+  }
 
   // Regardless of the pixel format used internally, kNative is returned
   // indicating that GetMappedFrameBuffer() or ToI420() is required to obtain
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index c59fca9..3327a21 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -1463,6 +1463,8 @@
 
 crbug.com/328501805 external/wpt/html/semantics/interactive-elements/the-summary-element/interactive-content.html [ Slow ]
 
+crbug.com/363342597 shadow-dom/focus-navigation/focus-scroller-activeElement-on-event.html [ Slow ]
+
 # Slow because the test is huge
 crbug.com/352097024 external/wpt/service-workers/service-worker/same-site-cookies.https.html [ Slow ]
 crbug.com/352097024 virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/same-site-cookies.https.html [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 249f0a0..a2a5e71 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -8151,21 +8151,6 @@
 # These will not pass until the linked task is resolved.
 crbug.com/368038561 external/wpt/css/css-scroll-snap-2/scroll-start-target/* [ Failure ]
 
-# Temporarily disable to land crrev.com/c/5823431
-crbug.com/345248263 http/tests/devtools/console/console-big-array.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-call-getter-on-proto.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-dir-es6.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-format-array-prototype.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-format-classes.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-format-es6-2.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-functions.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/console-log-short-hand-method.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/viewport-testing/console-clicking-messages.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/console/viewport-testing/console-key-links.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/sources/debugger-async/async-callstack-in-console.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/sources/debugger/async-callstack-network-initiator.js [ Failure Pass ]
-crbug.com/345248263 http/tests/devtools/sources/debugger/properties-special.js [ Failure Pass ]
-
 # Gardener 2024-09-30
 crbug.com/626703 [ Release Win ] external/wpt/selection/contenteditable/initial-selection-on-focus.tentative.html?div [ Failure ]
 crbug.com/370303484 [ Debug Win10.20h2 ] external/wpt/selection/contenteditable/initial-selection-on-focus.tentative.html?div [ Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/listed-form-element-reset.html b/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/listed-form-element-reset.html
new file mode 100644
index 0000000..29f524dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/moveBefore/tentative/listed-form-element-reset.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>Form owner is reset when new form is moved before a listed form element</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+
+<form id=form1></form>
+<button form=form1></button>
+
+<script>
+test(t => {
+  const form = document.querySelector('form');
+  const button = document.querySelector('button');
+
+  assert_equals(button.form, form, "button.form is correctly associated");
+  const form2 = document.createElement('form');
+  form2.id = 'form1';
+  document.body.append(form2);
+  assert_equals(button.form, form,
+      "button.form is still associated with the original form, after form2 " +
+      "(with a competing ID) is inserted into the DOM");
+
+  // Atomically moving `form2` closer before `button` must reset `button`'s
+  // `form` IDL attribute's return value, to the new "moved" `form2`.
+  document.body.moveBefore(form2, form);
+  assert_equals(button.form, form2, "button.form is correctly reset to form2");
+}, "Listed form element form owner is reset when a new form is moved closer " +
+   "before the listed element");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/fledge/tentative/TODO b/third_party/blink/web_tests/external/wpt/fledge/tentative/TODO
index 09cda1b..e05fe65 100644
--- a/third_party/blink/web_tests/external/wpt/fledge/tentative/TODO
+++ b/third_party/blink/web_tests/external/wpt/fledge/tentative/TODO
@@ -100,3 +100,6 @@
 * Test input with invalid https origin in web platform tests for both trusted bidding
   and scoring signals coordinators.
 * Test selectable buyer and seller reporting ids with k-anonymity enforcement.
+* Test that service workers cannot see update urls.
+    * This was attempted in [here](https://chromium-review.googlesource.com/c/chromium/src/+/5512083),
+      but needed to be reverted because it kept timing out, [see here](https://g-issues.chromium.org/issues/339048485)
diff --git a/third_party/blink/web_tests/external/wpt/fledge/tentative/resources/service-worker-helper.js b/third_party/blink/web_tests/external/wpt/fledge/tentative/resources/service-worker-helper.js
new file mode 100644
index 0000000..cc001813
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fledge/tentative/resources/service-worker-helper.js
@@ -0,0 +1,21 @@
+"use strict;"
+
+// Service workers, once activated, will use 'clients.claim()'
+// so that clients loaded in the same scope do not need to be reloaded
+// before their fetches will go through this service worker.
+// (https://developer.mozilla.org/en-US/docs/Web/API/Clients/claim)
+self.addEventListener("activate", (event) => {
+  event.waitUntil(clients.claim());
+});
+
+// The service worker intercepts fetch calls and posts a message with the url to the
+// 'requests-test' broadcast channel, which the test should be listening for.
+self.addEventListener('fetch', (event) => {
+  const requestChannel = new BroadcastChannel('requests-test');
+  var url = event.request.url;
+
+  requestChannel.postMessage({
+    url: url,
+    message: "Service worker saw this URL: " + url
+  });
+});
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/fledge/tentative/resources/service-worker-helper.js.headers b/third_party/blink/web_tests/external/wpt/fledge/tentative/resources/service-worker-helper.js.headers
new file mode 100644
index 0000000..98dfc8c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fledge/tentative/resources/service-worker-helper.js.headers
@@ -0,0 +1 @@
+Service-Worker-Allowed: /fledge/tentative/
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/fledge/tentative/service-worker-request-visibility.https.window.js b/third_party/blink/web_tests/external/wpt/fledge/tentative/service-worker-request-visibility.https.window.js
new file mode 100644
index 0000000..91214f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fledge/tentative/service-worker-request-visibility.https.window.js
@@ -0,0 +1,161 @@
+// META: script=/resources/testdriver.js
+// META: script=/common/utils.js
+// META: script=resources/fledge-util.sub.js
+// META: script=/common/subset-tests.js
+// META: timeout=long
+// META: variant=?1-last
+
+"use strict;"
+
+const SERVICE_WORKER_SCRIPT = "resources/service-worker-helper.js";
+
+// List of URL fragments that uniquely identify private requests.
+// These are used to detect if a service worker has inadvertently
+// accessed any of these private requests, which should not be visible to it.
+const PRIVATE_REQUEST_FILE_NAMES = [
+  'trusted-bidding-signals.py',
+  'update-url.py', // This requires another test, since it takes a while,
+  // see TODO file for more info.
+  'wasm-helper.py',
+  'bidding-logic.py',
+  'decision-logic.py',
+  'trusted-scoring-signals.py',
+  'trusted-bidding-signals.py',
+  'bidder_report',
+  'seller_report'
+];
+
+// List of URL fragments that uniquely identify public requests.
+// These are used to verify that a service worker can correctly
+// access and intercept these public requests as expected.
+const PUBLIC_REQUEST_FILE_NAMES = [
+  'direct-from-seller-signals.py',
+];
+
+const COMPLETE_TEST_URL = 'complete-test'
+
+const CURRENT_SCOPE = "/fledge/tentative/"
+
+async function registerAndActivateServiceWorker(test) {
+  // Unregister existing service worker (if any)
+  const existingRegistration = await navigator.serviceWorker.getRegistration(CURRENT_SCOPE);
+  if (existingRegistration) {
+    await existingRegistration.unregister();
+  }
+
+  // Register new service worker
+  var newRegistration = await navigator.serviceWorker.register(`./${SERVICE_WORKER_SCRIPT}`, { scope: CURRENT_SCOPE });
+
+  test.add_cleanup(async () => {
+    await newRegistration.unregister();
+  });
+
+  await navigator.serviceWorker.ready;
+
+  // Wait for the page to be controlled by the service worker.
+  // This is needed as navigator.serviceWorker.ready does not
+  // guarantee that the page is being controlled.
+  // See https://github.com/slightlyoff/ServiceWorker/issues/799.
+  await new Promise(resolve => {
+    if (navigator.serviceWorker.controller) {
+      resolve();
+    } else {
+      navigator.serviceWorker.addEventListener('controllerchange', resolve);
+    }
+  });
+
+  // Validate the service worker
+  if (!navigator.serviceWorker.controller.scriptURL.includes(SERVICE_WORKER_SCRIPT)) {
+    throw new Error('Failed to register service worker');
+  }
+}
+
+async function setUpServiceWorkerAndGetBroadcastChannel(test) {
+  await registerAndActivateServiceWorker(test);
+  return new BroadcastChannel("requests-test");
+}
+
+// Waits for a service worker to observe specific URL filenames via a BroadcastChannel.
+// Resolves when all expected URL filenames are seen.
+function awaitServiceWorkerURLPromise(broadcastChannel, expectedURLFileNames,
+  unexpectedURLFileNames) {
+  const seenURLs = new Set();
+  return new Promise((resolve, reject) => {
+    broadcastChannel.addEventListener('message', (event) => {
+      var url = event.data.url;
+      var fileName = url.substring(url.lastIndexOf('/') + 1);
+      if (expectedURLFileNames.includes(fileName)) {
+        seenURLs.add(fileName);
+      }
+      if (unexpectedURLFileNames.includes(fileName)) {
+        reject(`unexpected result: ${fileName}`);
+      }
+      // Resolve when all `expectedURLs` have been seen.
+      if (seenURLs.size === expectedURLFileNames.length) {
+        resolve();
+      }
+    });
+  });
+}
+
+// Tests that public requests are seen by the service worker.
+// Specifically anything that contains:
+// - 'direct-from-seller-signals.py'
+
+// This test works by having the service worker send a message over
+// the broadcastChannel, if it sees a request that contains any of
+// the following strings above, it will send a 'passed' result and
+// also change the variable 'finish_test', to true, so that guarantees
+// that the request was seen before we complete the test.
+subsetTest(promise_test, async test => {
+  const broadcastChannel = await setUpServiceWorkerAndGetBroadcastChannel(test);
+  let finishTest = awaitServiceWorkerURLPromise(
+    broadcastChannel,
+    PUBLIC_REQUEST_FILE_NAMES,
+    PRIVATE_REQUEST_FILE_NAMES);
+
+  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
+  await finishTest;
+}, "Make sure service workers do see public requests.");
+
+// Tests that private requests are not seen by the service worker.
+// Specifically anything that contains:
+// - 'resources/trusted-bidding-signals.py'
+// - 'resources/trusted-scoring-signals.py'
+// - 'wasm-helper.py'
+// - 'bidding-logic.py'
+// - 'decision-logic.py'
+// - 'seller_report'
+// - 'bidder_report'
+
+// This test works by having the service worker send a message
+// over the broadcastChannel, if it sees a request that contains
+// any of the following strings above, it will send a 'failed'
+// result which will cause assert_false case to fail.
+subsetTest(promise_test, async test => {
+  const uuid = generateUuid(test);
+  const broadcastChannel = await setUpServiceWorkerAndGetBroadcastChannel(test);
+
+  let finishTest = awaitServiceWorkerURLPromise(
+    broadcastChannel,
+    /*expectedURLFileNames=*/[COMPLETE_TEST_URL],
+    PRIVATE_REQUEST_FILE_NAMES)
+
+  let interestGroupOverrides = {
+    biddingWasmHelperURL: `${RESOURCE_PATH}wasm-helper.py`,
+    trustedBiddingSignalsURL: TRUSTED_BIDDING_SIGNALS_URL,
+    trustedScoringSignalsURL: TRUSTED_SCORING_SIGNALS_URL,
+  };
+
+  await joinInterestGroup(test, uuid, interestGroupOverrides);
+  await runBasicFledgeAuctionAndNavigate(test, uuid);
+  // By verifying that these requests are observed we can assume
+  // none of the other requests were seen by the service-worker.
+  await waitForObservedRequests(
+    uuid,
+    [createBidderReportURL(uuid), createSellerReportURL(uuid)]);
+
+  // We use this fetch to complete the test.
+  await fetch(COMPLETE_TEST_URL);
+  await finishTest;
+}, "Make sure service workers do not see private requests");
diff --git a/third_party/blink/web_tests/external/wpt/preload/prefetch-headers.https.html b/third_party/blink/web_tests/external/wpt/preload/prefetch-headers.https.html
index 0a475c7d..74f654a 100644
--- a/third_party/blink/web_tests/external/wpt/preload/prefetch-headers.https.html
+++ b/third_party/blink/web_tests/external/wpt/preload/prefetch-headers.https.html
@@ -8,7 +8,7 @@
 <script>
 
 promise_test(async t => {
-    const {href} = await prefetch({"type": "image/png", file: "../../images/green.png"}, t);
+    const {href} = await prefetch({"type": "image/png", file: "green.png"}, t);
     const [info] = await get_prefetch_info(href);
     const {headers} = info;
     assert_equals(headers["sec-fetch-dest"], "empty");
@@ -17,7 +17,7 @@
 }, "Prefetch should include Sec-Purpose=prefetch and Sec-Fetch-Dest=empty headers");
 
 promise_test(async t => {
-    const {href} = await prefetch({"type": "image/png", file: "../../images/green.png"}, t);
+    const {href} = await prefetch({"type": "image/png", file: "green.png"}, t);
     const [info] = await get_prefetch_info(href);
     const {headers} = info;
     assert_false("purpose" in headers);
@@ -25,11 +25,11 @@
 }, "Prefetch should not include proprietary headers (X-moz/Purpose)");
 
 promise_test(async t => {
-    const {href} = await prefetch({"type": "image/png", file: "../../images/green.png", crossOrigin: "anonymous"}, t);
+    const {href} = await prefetch({"type": "image/png", file: "green.png", crossOrigin: "anonymous"}, t);
     const [info] = await get_prefetch_info(href);
     const {headers} = info;
     assert_equals(headers["origin"], document.origin);
 }, "Prefetch should respect CORS mode");
 
 </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/preload/prefetch-types.https.html b/third_party/blink/web_tests/external/wpt/preload/prefetch-types.https.html
index 276439e..da03425 100644
--- a/third_party/blink/web_tests/external/wpt/preload/prefetch-types.https.html
+++ b/third_party/blink/web_tests/external/wpt/preload/prefetch-types.https.html
@@ -15,7 +15,7 @@
         load: fetch
     },
     image: {
-        file: '../../images/green.png',
+        file: 'green.png',
         type: 'image/png',
         load: href => {
             const image = document.createElement('img');
@@ -70,4 +70,4 @@
 }
 
 </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/preload/resources/green.png b/third_party/blink/web_tests/external/wpt/preload/resources/green.png
new file mode 100644
index 0000000..28a1faa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/preload/resources/green.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-big-array-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-big-array-expected.txt
index 446c43d..a7d0eda6 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-big-array-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-big-array-expected.txt
@@ -49,6 +49,8 @@
         100: 100
     length: 101
     [[Prototype]]: Array(0)
+
+
 console-big-array.js:28 Array(10)
     0: undefined
     1: undefined
@@ -62,6 +64,8 @@
     9: undefined
     length: 10
     [[Prototype]]: Array(0)
+
+
 console-big-array.js:34 Array(101)
     0: 0
     1: 1
@@ -76,6 +80,8 @@
     100: 100
     length: 101
     [[Prototype]]: Array(0)
+
+
 console-big-array.js:39 Array(405)
     [0 … 399]
         [0 … 19]
@@ -106,6 +112,8 @@
         404: 404
     length: 405
     [[Prototype]]: Array(0)
+
+
 console-big-array.js:52 Array(124)
     0: 0
     1: 1
@@ -127,6 +135,8 @@
     NaN: NaN
     length: 124
     [[Prototype]]: Array(0)
+
+
 console-big-array.js:62 Array(4294967295)
     [0 … 19]
         0: 0
@@ -184,6 +194,8 @@
     8589934592: 8589934592
     length: 4294967295
     [[Prototype]]: Array(0)
+
+
 console-big-array.js:65 Uint8Array(64160003)
     [0 … 63999999]
         [0 … 3199999]
@@ -225,3 +237,5 @@
     Symbol(Symbol.toStringTag): "Uint8Array"
     [[Prototype]]: TypedArray
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-call-getter-on-proto-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-call-getter-on-proto-expected.txt
index 1cda37e..3aec9df 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-call-getter-on-proto-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-call-getter-on-proto-expected.txt
@@ -12,3 +12,5 @@
             get foo: ƒ foo()
             [[Prototype]]: Object
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-dir-es6-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-dir-es6-expected.txt
index 5773280..45675200 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-dir-es6-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-dir-es6-expected.txt
@@ -7,34 +7,50 @@
     Symbol(a): 3
     Symbol(a): Symbol(Symbol.iterator)
     [[Prototype]]: Object
+
+
 console-dir-es6.js:25 Symbol()
+
+
 console-dir-es6.js:29 Map(1)
     [[Entries]]
         0: {Object => Object}
     size: 1
     [[Prototype]]: Map
+
+
 console-dir-es6.js:29 WeakMap
     [[Entries]]
         0: {Object => Object}
     [[Prototype]]: WeakMap
+
+
 console-dir-es6.js:33 Set(1)
     [[Entries]]
         0: Object
     size: 1
     [[Prototype]]: Set
+
+
 console-dir-es6.js:33 WeakSet
     [[Entries]]
         0: Object
     [[Prototype]]: WeakSet
+
+
 console-dir-es6.js:41 Set(1)
     [[Entries]]
         0: Set(1)
     size: 1
     [[Prototype]]: Set
+
+
 console-dir-es6.js:44 WeakMap
     [[Entries]]
         No properties
     [[Prototype]]: WeakMap
+
+
 console-dir-es6.js:52 MapIterator
     [[Entries]]
         0: Object
@@ -43,6 +59,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "keys"
+
+
 console-dir-es6.js:53 MapIterator
     [[Entries]]
         0: Object
@@ -51,6 +69,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-dir-es6.js:54 MapIterator
     [[Entries]]
         0: {Object => Object}
@@ -59,6 +79,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "entries"
+
+
 console-dir-es6.js:52 SetIterator
     [[Entries]]
         0: Object
@@ -67,6 +89,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-dir-es6.js:53 SetIterator
     [[Entries]]
         0: Object
@@ -75,6 +99,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-dir-es6.js:54 SetIterator
     [[Entries]]
         0: {Object => Object}
@@ -83,6 +109,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "entries"
+
+
 console-dir-es6.js:92 Array(27)
     0: class 
     1: class classWithWhitespace
@@ -113,6 +141,8 @@
     26: ƒ (c = ")", {a: b})
     length: 27
     [[Prototype]]: Array(0)
+
+
 console-dir-es6.js:100 Array(4)
     0: badArrow(x = a => {…}
     1: ƒ (a = ")
@@ -121,3 +151,5 @@
     length: 4
     [[Prototype]]: Array(0)
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-format-array-prototype-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-format-array-prototype-expected.txt
index df3690c2..ba9d56d 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-format-array-prototype-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-format-array-prototype-expected.txt
@@ -2,35 +2,79 @@
 
 a0
 []
+
+
 console-format-array-prototype.js:16 []
+
+
 a1
 [empty]
+
+
 console-format-array-prototype.js:16 [empty]
+
+
 a2
 (5) [empty × 5]
+
+
 console-format-array-prototype.js:16 (5) [empty × 5]
+
+
 a3
 (3) [empty, 2, 3]
+
+
 console-format-array-prototype.js:16 (3) [empty, 2, 3]
+
+
 a4
 (15) [empty × 15]
+
+
 console-format-array-prototype.js:16 (15) [empty × 15]
+
+
 a5
 (15) [empty × 8, 8, empty × 6]
+
+
 console-format-array-prototype.js:16 (15) [empty × 8, 8, empty × 6]
+
+
 a6
 (15) [0, empty × 9, 10, empty × 4]
+
+
 console-format-array-prototype.js:16 (15) [0, empty × 9, 10, empty × 4]
+
+
 a7
 (15) [3: 4, index0: 0, index1: 1, index2: 2, index3: 3, index4: 4, …]
+
+
 console-format-array-prototype.js:16 (15) [3: 4, index0: 0, index1: 1, index2: 2, index3: 3, index4: 4, …]
+
+
 a8
 (10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+
 console-format-array-prototype.js:16 (10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+
 a9
 (11) [empty, 1, 2, 3, 4, empty, 6, 7, 8, 9, empty, foo: 'bar']
+
+
 console-format-array-prototype.js:16 (11) [empty, 1, 2, 3, 4, empty, 6, 7, 8, 9, empty, foo: 'bar']
+
+
 a10
 Array {}
+
+
 console-format-array-prototype.js:16 Array {}
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-format-classes-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-format-classes-expected.txt
index 7a03dec3..ec2ebcc9 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-format-classes-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-format-classes-expected.txt
@@ -4,172 +4,261 @@
     at console-format-classes.js:22:9 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          object-value-error source-code
-            devtools-link text-button link-style
-            devtools-link text-button link-style
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              object-value-error source-code
+                devtools-link text-button link-style
+                formatted-stack-frame
+                  devtools-link text-button link-style
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:32 (6) [1, empty × 2, 2, (...), empty] 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-array source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-description
-              object-properties-preview
-                object-value-number
-                object-value-undefined
-                object-value-number
-                object-value-accessor
-                object-value-undefined
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-array source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-description
+                  object-properties-preview
+                    object-value-number
+                    object-value-undefined
+                    object-value-number
+                    object-value-accessor
+                    object-value-undefined
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:32 {a: 1} 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-object source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-properties-preview
-                name
-                object-value-number
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-object source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-properties-preview
+                    name
+                    object-value-number
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:32 {str: '', nan: NaN, posInf: Infinity, negInf: -Infinity, negZero: -0} 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-object source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-properties-preview
-                name
-                object-value-string
-                name
-                object-value-number
-                name
-                object-value-number
-                name
-                object-value-number
-                name
-                object-value-number
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-object source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-properties-preview
+                    name
+                    object-value-string
+                    name
+                    object-value-number
+                    name
+                    object-value-number
+                    name
+                    object-value-number
+                    name
+                    object-value-number
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:32 {null: null, undef: undefined, re: /^[regexp]$/g, constructedRe: /foo\/bar/, bool: false} 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-object source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-properties-preview
-                name
-                object-value-null
-                name
-                object-value-undefined
-                name
-                object-value-regexp
-                name
-                object-value-regexp
-                name
-                object-value-boolean
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-object source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-properties-preview
+                    name
+                    object-value-null
+                    name
+                    object-value-undefined
+                    name
+                    object-value-regexp
+                    name
+                    object-value-regexp
+                    name
+                    object-value-boolean
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:32 Proxy(Object) {a: 1} 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-proxy source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-description
-              object-properties-preview
-                name
-                object-value-number
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-proxy source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-description
+                  object-properties-preview
+                    name
+                    object-value-number
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:32 HTMLAllCollection(4) [html, head, base, body] 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-array source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-description
-              object-properties-preview
-                object-value-node
-                  webkit-html-tag-name
-                object-value-node
-                  webkit-html-tag-name
-                object-value-node
-                  webkit-html-tag-name
-                object-value-node
-                  webkit-html-tag-name
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-array source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-description
+                  object-properties-preview
+                    object-value-node
+                      webkit-html-tag-name
+                    object-value-node
+                      webkit-html-tag-name
+                    object-value-node
+                      webkit-html-tag-name
+                    object-value-node
+                      webkit-html-tag-name
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 console-format-classes.js:36 (7) [Error: custom error with link www.chromium.org
     at test://evaluations/0/console-format-classes.j…, Array(6), {…}, {…}, {…}, Proxy(Object), HTMLAllCollection(4)] 
   console-row-wrapper
     console-message
-      source-code
-        console-message-anchor
-          devtools-link text-button link-style
-        console-message-text
-          console-view-object-properties-section object-value-array source-code
-            tree-outline-disclosure tree-outline-disclosure-hide-overflow
-              tree-outline hide-selection-when-blurred source-code object-properties-section
-                parent object-properties-section-root-element
-                  selection fill
-            console-object console-object-preview
-              object-description
-              object-properties-preview
-                object-value-error
-                object-value-array
-                object-value-object
-                object-value-object
-                object-value-object
-                object-value-proxy
-                object-value-array
-              object-state-note info-note
-                children
+      console-message-stack-trace-toggle
+        console-message-stack-trace-wrapper
+          source-code
+            console-message-anchor
+              devtools-link text-button link-style
+            console-message-text
+              console-view-object-properties-section object-value-array source-code
+                tree-outline-disclosure tree-outline-disclosure-hide-overflow
+                  tree-outline hide-selection-when-blurred source-code object-properties-section
+                    parent object-properties-section-root-element
+                      selection fill
+                console-object console-object-preview
+                  object-description
+                  object-properties-preview
+                    object-value-error
+                    object-value-array
+                    object-value-object
+                    object-value-object
+                    object-value-object
+                    object-value-proxy
+                    object-value-array
+                  object-state-note info-note
+                    children
+          hidden-stack-trace
+            monospace stack-preview-container width-constrained
+              stack-preview-container width-constrained
+                show-all-link
+                  link
+                    css-inserted-text
+                show-less-link
+                  link
+                    css-inserted-text
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-format-es6-2-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-format-es6-2-expected.txt
index a7a12091..777b8d26 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-format-es6-2-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-format-es6-2-expected.txt
@@ -1,37 +1,85 @@
 Tests that console properly displays information about ES6 features.
 
 console-format-es6-2.js:17 MapIterator {41, {…}}
+
+
 console-format-es6-2.js:18 [MapIterator]
+
+
 globals[0]
 MapIterator {41, {…}}
+
+
 console-format-es6-2.js:17 MapIterator {42, {…}}
+
+
 console-format-es6-2.js:18 [MapIterator]
+
+
 globals[1]
 MapIterator {42, {…}}
+
+
 console-format-es6-2.js:17 MapIterator {41 => 42, {…} => {…}}
+
+
 console-format-es6-2.js:18 [MapIterator]
+
+
 globals[2]
 MapIterator {41 => 42, {…} => {…}}
+
+
 console-format-es6-2.js:17 SetIterator {41, {…}}
+
+
 console-format-es6-2.js:18 [SetIterator]
+
+
 globals[3]
 SetIterator {41, {…}}
+
+
 console-format-es6-2.js:17 SetIterator {41, {…}}
+
+
 console-format-es6-2.js:18 [SetIterator]
+
+
 globals[4]
 SetIterator {41, {…}}
+
+
 console-format-es6-2.js:17 SetIterator {41 => 41, {…} => {…}}
+
+
 console-format-es6-2.js:18 [SetIterator]
+
+
 globals[5]
 SetIterator {41 => 41, {…} => {…}}
+
+
 console-format-es6-2.js:17 MapIterator {{…}}
+
+
 console-format-es6-2.js:18 [MapIterator]
+
+
 globals[6]
 MapIterator {{…}}
+
+
 console-format-es6-2.js:17 SetIterator {{…}}
+
+
 console-format-es6-2.js:18 [SetIterator]
+
+
 globals[7]
 SetIterator {{…}}
+
+
 Expanded all messages
 console-format-es6-2.js:17 MapIterator {41, {…}}
     [[Entries]]
@@ -42,10 +90,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "keys"
+
+
 console-format-es6-2.js:18 [MapIterator]
     0: MapIterator {41, {…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[0]
 MapIterator {41, {…}}
     [[Entries]]
@@ -56,6 +108,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "keys"
+
+
 console-format-es6-2.js:17 MapIterator {42, {…}}
     [[Entries]]
         0: 42
@@ -65,10 +119,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:18 [MapIterator]
     0: MapIterator {42, {…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[1]
 MapIterator {42, {…}}
     [[Entries]]
@@ -79,6 +137,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:17 MapIterator {41 => 42, {…} => {…}}
     [[Entries]]
         0: {41 => 42}
@@ -88,10 +148,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "entries"
+
+
 console-format-es6-2.js:18 [MapIterator]
     0: MapIterator {41 => 42, {…} => {…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[2]
 MapIterator {41 => 42, {…} => {…}}
     [[Entries]]
@@ -102,6 +166,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "entries"
+
+
 console-format-es6-2.js:17 SetIterator {41, {…}}
     [[Entries]]
         0: 41
@@ -111,10 +177,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:18 [SetIterator]
     0: SetIterator {41, {…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[3]
 SetIterator {41, {…}}
     [[Entries]]
@@ -125,6 +195,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:17 SetIterator {41, {…}}
     [[Entries]]
         0: 41
@@ -134,10 +206,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:18 [SetIterator]
     0: SetIterator {41, {…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[4]
 SetIterator {41, {…}}
     [[Entries]]
@@ -148,6 +224,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:17 SetIterator {41 => 41, {…} => {…}}
     [[Entries]]
         0: {41 => 41}
@@ -157,10 +235,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "entries"
+
+
 console-format-es6-2.js:18 [SetIterator]
     0: SetIterator {41 => 41, {…} => {…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[5]
 SetIterator {41 => 41, {…} => {…}}
     [[Entries]]
@@ -171,6 +253,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 0
     [[IteratorKind]]: "entries"
+
+
 console-format-es6-2.js:17 MapIterator {{…}}
     [[Entries]]
         0: Object
@@ -179,10 +263,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 1
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:18 [MapIterator]
     0: MapIterator {{…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[6]
 MapIterator {{…}}
     [[Entries]]
@@ -192,6 +280,8 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 1
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:17 SetIterator {{…}}
     [[Entries]]
         0: Object
@@ -200,10 +290,14 @@
     [[IteratorHasMore]]: true
     [[IteratorIndex]]: 1
     [[IteratorKind]]: "values"
+
+
 console-format-es6-2.js:18 [SetIterator]
     0: SetIterator {{…}}
     length: 1
     [[Prototype]]: Array(0)
+
+
 globals[7]
 SetIterator {{…}}
     [[Entries]]
@@ -214,3 +308,5 @@
     [[IteratorIndex]]: 1
     [[IteratorKind]]: "values"
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-functions-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-functions-expected.txt
index 255d079..aac7dbe 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-functions-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-functions-expected.txt
@@ -1,6 +1,8 @@
 Tests that console logging different types of functions correctly.
 
 console-functions.js:29 ƒ simple() {}
+
+
 console-functions.js:30 ƒ simple()
     arguments: null
     caller: null
@@ -10,7 +12,11 @@
     [[FunctionLocation]]: console-functions.js:15
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 async ƒ asyncSimple() {}
+
+
 console-functions.js:30 async ƒ asyncSimple()
     length: 0
     name: "asyncSimple"
@@ -19,7 +25,11 @@
     [[FunctionLocation]]: console-functions.js:16
     [[Prototype]]: AsyncFunction
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ* genSimple() {}
+
+
 console-functions.js:30 ƒ* genSimple()
     length: 0
     name: "genSimple"
@@ -30,7 +40,11 @@
     [[IsGenerator]]: true
     [[Prototype]]: GeneratorFunction
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ (){}
+
+
 console-functions.js:30 ƒ anonymous()
     arguments: null
     caller: null
@@ -40,7 +54,11 @@
     [[FunctionLocation]]: console-functions.js:18
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ (x, y){}
+
+
 console-functions.js:30 ƒ anonymous(x, y)
     arguments: null
     caller: null
@@ -50,7 +68,11 @@
     [[FunctionLocation]]: console-functions.js:19
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ namedArgs(x) {}
+
+
 console-functions.js:30 ƒ namedArgs(x)
     arguments: null
     caller: null
@@ -60,7 +82,11 @@
     [[FunctionLocation]]: console-functions.js:20
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ namedArgs2(x, y) {}
+
+
 console-functions.js:30 ƒ namedArgs2(x, y)
     arguments: null
     caller: null
@@ -70,7 +96,11 @@
     [[FunctionLocation]]: console-functions.js:21
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ ({}) {}
+
+
 console-functions.js:30 ƒ anonymous({})
     arguments: null
     caller: null
@@ -80,7 +110,11 @@
     [[FunctionLocation]]: console-functions.js:22
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 ƒ *    whitespace   (  x  )    {   }
+
+
 console-functions.js:30 ƒ *    whitespace(  x  )
     length: 1
     name: "whitespace"
@@ -91,7 +125,11 @@
     [[IsGenerator]]: true
     [[Prototype]]: GeneratorFunction
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:29 async ƒ whitespace2   (  x  ,  y  ,  z  )    {   }
+
+
 console-functions.js:30 async ƒ whitespace2(  x  ,  y  ,  z  )
     length: 3
     name: "whitespace2"
@@ -100,6 +138,8 @@
     [[FunctionLocation]]: console-functions.js:24
     [[Prototype]]: AsyncFunction
     [[Scopes]]: Scopes[1]
+
+
 console-functions.js:33 {func0: ƒ, func1: ƒ, func2: ƒ, func3: ƒ, func4: ƒ, …}
     func0: ƒ simple()
     func1: async ƒ asyncSimple()
@@ -112,6 +152,8 @@
     func8: ƒ *    whitespace(  x  )
     func9: async ƒ whitespace2(  x  ,  y  ,  z  )
     [[Prototype]]: Object
+
+
 console-functions.js:34 Object
     func0: ƒ simple()
     func1: async ƒ asyncSimple()
@@ -125,3 +167,5 @@
     func9: async ƒ whitespace2(  x  ,  y  ,  z  )
     [[Prototype]]: Object
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-log-short-hand-method-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-log-short-hand-method-expected.txt
index 1fd183f4..4e2be9b9 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-log-short-hand-method-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-log-short-hand-method-expected.txt
@@ -9,3 +9,5 @@
     set baz: ƒ baz(x)
     [[Prototype]]: Object
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-clicking-messages.js b/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-clicking-messages.js
index a736ed9a..eaae36c 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-clicking-messages.js
+++ b/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-clicking-messages.js
@@ -110,8 +110,8 @@
 
   function dumpFocus() {
     const firstMessage = consoleView.visibleViewMessages[0];
-    const hasTrace = !!firstMessage.element().querySelector('.console-message-stack-trace-toggle');
-    const hasHiddenStackTrace = firstMessage.element().querySelector('.console-message-stack-trace-wrapper > div.hidden');
+    const hasTrace = !!firstMessage.element().querySelector('.console-message-stack-trace-toggle .console-message-expand-icon');
+    const hasHiddenStackTrace = firstMessage.element().querySelector('.console-message-stack-trace-wrapper > div.hidden-stack-trace');
     const hasCollapsedObject = firstMessage.element().querySelector('.console-view-object-properties-section.hidden');
     const hasExpandedObject = firstMessage.element().querySelector('.console-view-object-properties-section:not(.hidden)');
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-key-links.js b/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-key-links.js
index b313497..64fd6b1 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-key-links.js
+++ b/third_party/blink/web_tests/http/tests/devtools/console/viewport-testing/console-key-links.js
@@ -144,8 +144,8 @@
 
   function dumpFocus(activeElement, messageIndex = 0, skipObjectCheck) {
     const firstMessage = consoleView.visibleViewMessages[messageIndex];
-    const hasTrace = !!firstMessage.element().querySelector('.console-message-stack-trace-toggle');
-    const hasHiddenStackTrace = firstMessage.element().querySelector('.console-message-stack-trace-wrapper > div.hidden');
+    const hasTrace = !!firstMessage.element().querySelector('.console-message-stack-trace-toggle .console-message-expand-icon');
+    const hasHiddenStackTrace = firstMessage.element().querySelector('.console-message-stack-trace-wrapper > div.hidden-stack-trace');
     const hasCollapsedObject = firstMessage.element().querySelector('.console-view-object-properties-section:not(.expanded)');
     const hasExpandedObject = firstMessage.element().querySelector('.console-view-object-properties-section.expanded');
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/debugger-async/async-callstack-in-console-expected.txt b/third_party/blink/web_tests/http/tests/devtools/sources/debugger-async/async-callstack-in-console-expected.txt
index 7529786..76d26181 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/debugger-async/async-callstack-in-console-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/debugger-async/async-callstack-in-console-expected.txt
@@ -2,6 +2,8 @@
 
 Set timer for test function.
 Console was cleared
+
+
 async-callstack-in-console.js:28 console.trace
 
 timeout1 @ async-callstack-in-console.js:28
@@ -9,6 +11,8 @@
 setTimeout
 
 testFunction @ async-callstack-in-console.js:23
+
+
 async-callstack-in-console.js:35 Uncaught Error: foo
     at timeout2 (async-callstack-in-console.js:35:17)
 
@@ -21,6 +25,8 @@
 setTimeout
 
 testFunction @ async-callstack-in-console.js:23
+
+
 async-callstack-in-console.js:40 console.trace
 
 timeout3 @ async-callstack-in-console.js:40
@@ -36,6 +42,8 @@
 setTimeout
 
 testFunction @ async-callstack-in-console.js:23
+
+
 async-callstack-in-console.js:48 Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('http://www.example.com') does not match the recipient window's origin ('http://127.0.0.1:8000').
 
 tryPostMessage @ async-callstack-in-console.js:48
@@ -54,3 +62,5 @@
 
 testFunction @ async-callstack-in-console.js:23
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/async-callstack-network-initiator-expected.txt b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/async-callstack-network-initiator-expected.txt
index 12e87a3..5eae3f2 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/async-callstack-network-initiator-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/async-callstack-network-initiator-expected.txt
@@ -2,6 +2,8 @@
 
 Set timer for test function.
 Console was cleared
+
+
 async-callstack-network-initiator.js:36 POST http://127.0.0.1:8000/failure/foo 404 (Not Found)
 
 sendXHR @ async-callstack-network-initiator.js:36
@@ -16,3 +18,5 @@
 
 testFunction @ async-callstack-network-initiator.js:19
 
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/properties-special-expected.txt b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/properties-special-expected.txt
index d76a06c2..850720e 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/properties-special-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/properties-special-expected.txt
@@ -2,6 +2,8 @@
 properties-special.js:13 Boolean
     [[Prototype]]: Boolean
     [[PrimitiveValue]]: true
+
+
 properties-special.js:14 ƒ anonymous(a,b)
     arguments: null
     caller: null
@@ -11,6 +13,8 @@
     [[FunctionLocation]]: properties-special.js:14
     [[Prototype]]: ƒ ()
     [[Scopes]]: Scopes[1]
+
+
 properties-special.js:15 ƒ bound ()
     length: 1
     name: "bound "
@@ -20,6 +24,8 @@
     [[TargetFunction]]: ƒ (a,b)
     [[BoundThis]]: Object
     [[BoundArgs]]: Array(1)
+
+
 properties-special.js:16 ƒ* anonymous()
     length: 0
     name: ""
@@ -31,3 +37,5 @@
     [[Prototype]]: GeneratorFunction
     [[Scopes]]: Scopes[1]
 
+
+
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index 09e4231..80bc48e 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -850,7 +850,6 @@
     property sizes
     property target
     property type
-html element listbox
 html element listing
     property width
 html element main
@@ -1029,22 +1028,6 @@
     property value
     property willValidate
 html element selectedoption
-html element selectlist
-    property checkValidity
-    property disabled
-    property form
-    property labels
-    property name
-    property open
-    property reportValidity
-    property required
-    property selectedOption
-    property setCustomValidity
-    property type
-    property validationMessage
-    property validity
-    property value
-    property willValidate
 html element slot
     property assign
     property assignedElements
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 42169e6e..329b686 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -5066,28 +5066,6 @@
     setter selectedOptionElement
     setter size
     setter value
-interface HTMLSelectListElement : HTMLElement
-    attribute @@toStringTag
-    getter disabled
-    getter form
-    getter labels
-    getter name
-    getter open
-    getter required
-    getter selectedOption
-    getter type
-    getter validationMessage
-    getter validity
-    getter value
-    getter willValidate
-    method checkValidity
-    method constructor
-    method reportValidity
-    method setCustomValidity
-    setter disabled
-    setter name
-    setter required
-    setter value
 interface HTMLSelectedOptionElement : HTMLElement
     attribute @@toStringTag
     method constructor
diff --git a/third_party/crossbench b/third_party/crossbench
index b5c5775..de2d0bb 160000
--- a/third_party/crossbench
+++ b/third_party/crossbench
@@ -1 +1 @@
-Subproject commit b5c57759e53875c8756b659a82d8643635978f04
+Subproject commit de2d0bbb34999a3266e0c02af50ca51a1480cd4d
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal
index 4b9fa64..51db6cf 160000
--- a/third_party/devtools-frontend-internal
+++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@
-Subproject commit 4b9fa640bc42f38524f48c27b280b81d93369501
+Subproject commit 51db6cf38207673d6bfa25c8e136277c3cfb6e9c
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index 45fcf96..5fea877 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit 45fcf9641a5a9ec8565ef4e4dcba324bd147e12c
+Subproject commit 5fea877e0b17578765cd4520857b5b3b172b5199
diff --git a/third_party/perfetto b/third_party/perfetto
index 074514f..077bb36 160000
--- a/third_party/perfetto
+++ b/third_party/perfetto
@@ -1 +1 @@
-Subproject commit 074514fc06ccc3da014e8912117a7465fefd4aa4
+Subproject commit 077bb360edecb33551e88c8097035e4b8cef245b
diff --git a/third_party/skia b/third_party/skia
index 44d45ac4..5218f67 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit 44d45ac4de6f86ba7c1006f67e3af1690ad565f4
+Subproject commit 5218f67ec716edb39f5d005ddaf6e9d70eca7cc9
diff --git a/third_party/swiftshader b/third_party/swiftshader
index 8580e3a..72ca200 160000
--- a/third_party/swiftshader
+++ b/third_party/swiftshader
@@ -1 +1 @@
-Subproject commit 8580e3a98e50357e295a792a984a06cc0bb500ad
+Subproject commit 72ca2005cd3242a961ce0de120fe916d25d42281
diff --git a/tools/android/avd/proto/android_28_google_apis_x86.textpb b/tools/android/avd/proto/android_28_google_apis_x86.textpb
index f8b4ff3..5d4730c 100644
--- a/tools/android/avd/proto/android_28_google_apis_x86.textpb
+++ b/tools/android/avd/proto/android_28_google_apis_x86.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_28_google_apis_x86"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86"
-  # Created in https://ci.chromium.org/ui/b/8740055568560541329
+  # Created in https://ci.chromium.org/ui/b/8735716928436784161
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "5fp2V9JimAOUMQfgeyYrMk_gryTWemDaC_SiE77P8WEC"
+  version: "4ZAU1LOIDDo3l2FcZ7vd4Ry9A4xJg_XfygyhoZpGGDYC"
   dest_path: "android_28_google_apis_x86"
 }
 avd_name: "android_28_google_apis_x86"
diff --git a/tools/android/avd/proto/android_29_google_apis_x86.textpb b/tools/android/avd/proto/android_29_google_apis_x86.textpb
index ca4a015..e488bed4 100644
--- a/tools/android/avd/proto/android_29_google_apis_x86.textpb
+++ b/tools/android/avd/proto/android_29_google_apis_x86.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_29_google_apis_x86"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-29/google_apis/x86"
-  # Created in https://ci.chromium.org/ui/b/8740055568560541329
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "r1g5fXK3d5oKR8o3_hyzX5G0xRGFTJ2ZLDedOOQkfSEC"
+  version: "n1P6ShNDsBKCdLy2niUKtlra2IJJoGN3k3L2LoVHjVcC"
   dest_path: "android_29_google_apis_x86"
 }
 avd_name: "android_29_google_apis_x86"
diff --git a/tools/android/avd/proto/android_30_google_apis_x86.textpb b/tools/android/avd/proto/android_30_google_apis_x86.textpb
index 70b607cd..e2ee6fe 100644
--- a/tools/android/avd/proto/android_30_google_apis_x86.textpb
+++ b/tools/android/avd/proto/android_30_google_apis_x86.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "fS1J2VhqKvbfzOX-30B8DEbVTfSF-CR5G0epjSFDa_QC"  # 34.2.15
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_30_google_apis_x86"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-30/google_apis/x86"
-  # Created in https://ci.chromium.org/ui/b/8741031598871909201
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "aIbsEcOTMsXaqBAD4Hpv1ow8YcElPj-DKPV-uCaX_1UC"
+  version: "iO6OJ3LM8Zz1lTnrKJn7qi0cjijnUw4L51Q2MXqYGwIC"
   dest_path: "android_30_google_apis_x86"
 }
 avd_name: "android_30_google_apis_x86"
diff --git a/tools/android/avd/proto/android_31_google_apis_x64.textpb b/tools/android/avd/proto/android_31_google_apis_x64.textpb
index ff55b42..399c053 100644
--- a/tools/android/avd/proto/android_31_google_apis_x64.textpb
+++ b/tools/android/avd/proto/android_31_google_apis_x64.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_31_google_apis_x64"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-31/google_apis/x86_64"
-  # Created in https://ci.chromium.org/ui/b/8740226725265950241
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "NiiDDP8whU5SPk1PHbfUqBZVRAc9naEg7xhc0qdlXzkC"
+  version: "tdIM612NIcS1k7tZ4FD_0mDIb4Zz4xjRYfoqU-Zeq6EC"
   dest_path: "android_31_google_apis_x64"
 }
 avd_name: "android_31_google_apis_x64"
diff --git a/tools/android/avd/proto/android_32_google_apis_x64_foldable.textpb b/tools/android/avd/proto/android_32_google_apis_x64_foldable.textpb
index 2ce668c..adae16e 100644
--- a/tools/android/avd/proto/android_32_google_apis_x64_foldable.textpb
+++ b/tools/android/avd/proto/android_32_google_apis_x64_foldable.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_32_google_apis_x64_foldable"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-32/google_apis/x86_64"
-  # Created in https://ci.chromium.org/ui/b/8740226725265950241
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "Lf6kuojYsLzo9mPmzHTtGKXn-Ieg_rtDCLT8Cr1p9KcC"
+  version: "Uz9_H4xQPMkWRFtmUJKSvZGLuEVimRmDuJezRXxIk70C"
   dest_path: "android_32_google_apis_x64_foldable"
 }
 avd_name: "android_32_google_apis_x64_foldable"
diff --git a/tools/android/avd/proto/android_32_google_apis_x64_foldable_landscape.textpb b/tools/android/avd/proto/android_32_google_apis_x64_foldable_landscape.textpb
index 2ac8df8..6708218 100644
--- a/tools/android/avd/proto/android_32_google_apis_x64_foldable_landscape.textpb
+++ b/tools/android/avd/proto/android_32_google_apis_x64_foldable_landscape.textpb
@@ -7,7 +7,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_32_google_apis_x64_foldable_landscape"
 }
 
@@ -20,9 +20,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-32/google_apis/x86_64"
-  # Created in https://ci.chromium.org/ui/b/8740226725265950241
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "bQpKArqXeleddqIoChPsjw7E7uAbBHWOV1U3BXdf18QC"
+  version: "Ggu6SCWhbO7GLyFjZgU3xfOkziQGFE6e0hfWY9a8A9kC"
   dest_path: "android_32_google_apis_x64_foldable_landscape"
 }
 avd_name: "android_32_google_apis_x64_foldable_landscape"
diff --git a/tools/android/avd/proto/android_33_google_apis_x64.textpb b/tools/android/avd/proto/android_33_google_apis_x64.textpb
index 65889705..b11f605 100644
--- a/tools/android/avd/proto/android_33_google_apis_x64.textpb
+++ b/tools/android/avd/proto/android_33_google_apis_x64.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_33_google_apis_x64"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-33/google_apis/x86_64"
-  # Created in https://ci.chromium.org/ui/b/8740055568560541329
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "5RbPXtXRFZ_norw0s0y8ZBq_nAUD6hGItzAfsSfV6ZQC"
+  version: "Ee3kRDaGcJ0kQ4GP7TUNOGswwt_Xj6uGe9gUzP7axPwC"
   dest_path: "android_33_google_apis_x64"
 }
 avd_name: "android_33_google_apis_x64"
diff --git a/tools/android/avd/proto/android_34_desktop_x64.textpb b/tools/android/avd/proto/android_34_desktop_x64.textpb
index 0187d55..afba60fd 100644
--- a/tools/android/avd/proto/android_34_desktop_x64.textpb
+++ b/tools/android/avd/proto/android_34_desktop_x64.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_34_desktop_x64"
 }
 
@@ -19,7 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-34/android-desktop/x86_64"
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
+  # Patched gmscore version 24.26.32 in https://crrev.com/c/5825749
+  version: "BSB1cKODRgf7Mv_MLDcOg_O_1uryGzbVsrOMOHzQEDMC"
   dest_path: "android_34_desktop_x64"
-  version: "IR6frwuYI5aynXZcIs_5r3E2VXJN4zJvyJq8KFBV2iIC"
 }
 avd_name: "android_34_desktop_x64"
diff --git a/tools/android/avd/proto/android_34_google_apis_x64.textpb b/tools/android/avd/proto/android_34_google_apis_x64.textpb
index 54788370..fa6b3b2 100644
--- a/tools/android/avd/proto/android_34_google_apis_x64.textpb
+++ b/tools/android/avd/proto/android_34_google_apis_x64.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_34_google_apis_x64"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-34/google_apis/x86_64"
-  # Created in https://ci.chromium.org/ui/b/8738961021166858465
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "STmgxg2fs0n3cFy2kedzRcdY7lOdoF1CcJivBJLycFIC"
+  version: "zCxd4WbL6GbWd6GEN35XW9-U7mN9UpEPrhZw7R2Tr4UC"
   dest_path: "android_34_google_apis_x64"
 }
 avd_name: "android_34_google_apis_x64"
diff --git a/tools/android/avd/proto/android_35_google_apis_x64.textpb b/tools/android/avd/proto/android_35_google_apis_x64.textpb
index 92b881c..98ac0f8 100644
--- a/tools/android/avd/proto/android_35_google_apis_x64.textpb
+++ b/tools/android/avd/proto/android_35_google_apis_x64.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "android_35_google_apis_x64"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-35/google_apis/x86_64"
-  # Created in https://ci.chromium.org/ui/b/8738153483134684913
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "IFO4uI1VCMvYQU-0l__xEftbBT1X8Tdpxzp9WOl6QwYC"
+  version: "g78c3lisaEy84MSSH_dCGDrWQsyK6TAAgzMpYmOFpRcC"
   dest_path: "android_35_google_apis_x64"
 }
 avd_name: "android_35_google_apis_x64"
diff --git a/tools/android/avd/proto/generic_android26.textpb b/tools/android/avd/proto/generic_android26.textpb
index 3132695..e8c167fe 100644
--- a/tools/android/avd/proto/generic_android26.textpb
+++ b/tools/android/avd/proto/generic_android26.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "generic_android26"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-26/google_apis/x86"
-  # Created in https://ci.chromium.org/ui/b/8740055568560541329
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "HtggaPAZzykP9IphLkx88P0IiQReXLdRkGd0_FDZbTUC"
+  version: "JosHLGXxYKPijl7veVFtwP0Ce5Ipur28ZuKspdZKYv4C"
   dest_path: "generic_android26"
 }
 avd_name: "android_26_google_apis_x86"
diff --git a/tools/android/avd/proto/generic_android27.textpb b/tools/android/avd/proto/generic_android27.textpb
index 4c08d12..3dff1aa 100644
--- a/tools/android/avd/proto/generic_android27.textpb
+++ b/tools/android/avd/proto/generic_android27.textpb
@@ -6,7 +6,7 @@
 
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
-  version: "5biVQLkXXVm61beRTyVfmPBrmjEJFBJTpdzAUcXY378C"  # 34.2.16 (Stable)
+  version: "XS__KK27esI_4qZkc_Ybb_ooYjPfcIQ7DDOPUZGYW5wC"  # 35.1.21 (Stable)
   dest_path: "generic_android27"
 }
 
@@ -19,9 +19,9 @@
 
 avd_package {
   package_name: "chromium/third_party/android_sdk/public/avds/android-27/google_apis/x86"
-  # Created in https://ci.chromium.org/ui/b/8740055568560541329
+  # Created in https://ci.chromium.org/ui/b/8735783234873256961
   # Patched gmscore version 24.26.32 in https://crrev.com/c/5735581
-  version: "CVDrDcEetqG4BgqKafLfdsj97I3VMf_0iIqP7-SxpOUC"
+  version: "Ip9_NGCR8JWFuL-ZxlRuGVetosu4L2MYWWxcLv2_XioC"
   dest_path: "generic_android27"
 }
 avd_name: "android_27_google_apis_x86"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 248650c..33bd97b 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -1048,7 +1048,6 @@
   <int value="10" label="InputUrl"/>
   <int value="11" label="SelectOne"/>
   <int value="12" label="SelectMultiple"/>
-  <int value="13" label="SelectList"/>
   <int value="14" label="TextArea"/>
 </enum>
 
@@ -9582,7 +9581,7 @@
   <int value="3808" label="InsertHTMLCommandOnReadWritePlainText"/>
   <int value="3809" label="CSSAtRuleCounterStyle"/>
   <int value="3810" label="CanvasUseColorSpace"/>
-  <int value="3811" label="SelectListElement"/>
+  <int value="3811" label="OBSOLETE_SelectListElement"/>
   <int value="3812"
       label="OBSOLETE_RTCPeerConnectionSdpSemanticsPlanBWithReverseOriginTrial"/>
   <int value="3813" label="WebAppManifestCaptureLinks"/>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 47b1b56e..575def63 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -6469,7 +6469,7 @@
 </histogram>
 
 <histogram name="Android.WebView.OriginsVisited" units="origins"
-    expires_after="2024-11-14">
+    expires_after="2025-10-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
   <summary>
@@ -6783,7 +6783,7 @@
 </histogram>
 
 <histogram name="Android.WebView.SitesVisitedWeekly" units="sites"
-    expires_after="2024-11-14">
+    expires_after="2025-10-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
   <summary>
@@ -7069,7 +7069,7 @@
 </histogram>
 
 <histogram name="Android.WebView.Visibility.Global" enum="WebViewVisibility"
-    expires_after="2024-11-14">
+    expires_after="2025-10-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
@@ -7085,7 +7085,7 @@
 </histogram>
 
 <histogram name="Android.WebView.Visibility.PerWebView"
-    enum="WebViewVisibility" expires_after="2024-11-14">
+    enum="WebViewVisibility" expires_after="2025-10-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
@@ -7103,7 +7103,7 @@
 </histogram>
 
 <histogram name="Android.WebView.VisibleScheme.Global" enum="WebViewUrlScheme"
-    expires_after="2024-11-14">
+    expires_after="2025-10-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
@@ -7117,7 +7117,7 @@
 </histogram>
 
 <histogram name="Android.WebView.VisibleScheme.PerWebView"
-    enum="WebViewUrlScheme" expires_after="2024-11-14">
+    enum="WebViewUrlScheme" expires_after="2025-10-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
@@ -7131,7 +7131,7 @@
 </histogram>
 
 <histogram name="Android.WebView.VisibleScreenCoverage.Global" units="%"
-    expires_after="2024-11-14">
+    expires_after="2025-10-01">
   <owner>mvanouwerkerk@google.com</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
@@ -7147,7 +7147,7 @@
 </histogram>
 
 <histogram name="Android.WebView.VisibleScreenCoverage.PerWebView" units="%"
-    expires_after="2024-11-14">
+    expires_after="2025-10-01">
   <owner>mvanouwerkerk@google.com</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
@@ -7162,7 +7162,7 @@
 </histogram>
 
 <histogram name="Android.WebView.VisibleScreenCoverage.PerWebView.{scheme}"
-    units="%" expires_after="2024-11-14">
+    units="%" expires_after="2025-10-01">
   <owner>mvanouwerkerk@google.com</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index ada8c1a..9004f254 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -332,7 +332,7 @@
 
 <variants name="Autofill.TimingPrecise.Caller">
   <variant name="ApplyFieldsAction"/>
-  <variant name="BatchSelectOrSelectListOptionChange"/>
+  <variant name="BatchSelectOptionChange"/>
   <variant name="DidChangeScrollOffsetImpl"/>
   <variant name="ExtractForm"/>
   <variant name="FocusedElementChanged"/>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
index 7404fc8..7f55ccc 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -852,8 +852,7 @@
 </histogram>
 
 <histogram name="TrustedWebActivity.ExtraCommandSuccess.{command}"
-    enum="BooleanSuccess" expires_after="2024-11-14">
-  <owner>mvanouwerkerk@google.com</owner>
+    enum="BooleanSuccess" expires_after="2025-10-01">
   <owner>peconn@chromium.org</owner>
   <owner>
     src/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OWNERS
@@ -869,8 +868,7 @@
 </histogram>
 
 <histogram name="TrustedWebActivity.Notification.PermissionRequestResult"
-    enum="ContentSetting" expires_after="2024-11-14">
-  <owner>mvanouwerkerk@chromium.org</owner>
+    enum="ContentSetting" expires_after="2025-10-01">
   <owner>peconn@chromium.org</owner>
   <owner>
     src/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OWNERS
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index ad51ddb..241a4ae 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -4117,7 +4117,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos" enum="IOSSaveToPhotosType"
-    expires_after="2025-02-23">
+    expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4129,7 +4129,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.AccountPicker"
-    enum="IOSSaveToPhotosAccountPickerType" expires_after="2024-08-18">
+    enum="IOSSaveToPhotosAccountPickerType" expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4141,7 +4141,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.ContextMenu"
-    enum="IOSSaveToPhotosContextMenuType" expires_after="2025-02-23">
+    enum="IOSSaveToPhotosContextMenuType" expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4151,7 +4151,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.GTLRErrorObjectDomainErrorCode"
-    enum="HttpResponseCode" expires_after="2024-08-18">
+    enum="HttpResponseCode" expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4162,7 +4162,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.Settings" enum="IOSSaveToPhotosSettingsType"
-    expires_after="2025-02-10">
+    expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4175,7 +4175,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.UploadFailureLatency" units="ms"
-    expires_after="2024-06-02">
+    expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4190,7 +4190,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.UploadFailureType"
-    enum="IOSPhotosServiceUploadFailureType" expires_after="2024-06-02">
+    enum="IOSPhotosServiceUploadFailureType" expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
@@ -4200,7 +4200,7 @@
 </histogram>
 
 <histogram name="IOS.SaveToPhotos.UploadSuccessLatency" units="ms"
-    expires_after="2025-02-23">
+    expires_after="2025-10-01">
   <owner>qpubert@google.com</owner>
   <owner>djean@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/navigation/enums.xml b/tools/metrics/histograms/metadata/navigation/enums.xml
index b43e8c5..a0ee78e6 100644
--- a/tools/metrics/histograms/metadata/navigation/enums.xml
+++ b/tools/metrics/histograms/metadata/navigation/enums.xml
@@ -45,6 +45,7 @@
   <int value="14" label="Detached From Window"/>
   <int value="15" label="Root Window Visibility Changed"/>
   <int value="16" label="Compositor Detached"/>
+  <int value="17" label="Animation Manager Destroyed"/>
 </enum>
 
 <enum name="AutomaticBeaconOutcome">
diff --git a/tools/metrics/histograms/metadata/net/enums.xml b/tools/metrics/histograms/metadata/net/enums.xml
index cf14ffcd..af3f894 100644
--- a/tools/metrics/histograms/metadata/net/enums.xml
+++ b/tools/metrics/histograms/metadata/net/enums.xml
@@ -526,6 +526,14 @@
   <int value="3" label="3G"/>
 </enum>
 
+<enum name="IpProtectionJobResult">
+  <int value="0" label="IP Protection was not attempted"/>
+  <int value="1"
+      label="The request was IP Protected and carried via IP Protection
+             proxies or, if the direct-only parameter is true, made directly"/>
+  <int value="2" label="The request was IP Protected, but fell back to direct"/>
+</enum>
+
 <enum name="JobProtocolErrorLocation">
   <int value="0" label="kSessionStartReadingFailedAsync"/>
   <int value="1" label="kSessionStartReadingFailedSync"/>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml
index f1fca4b..8d570bed 100644
--- a/tools/metrics/histograms/metadata/net/histograms.xml
+++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -1911,6 +1911,24 @@
   </summary>
 </histogram>
 
+<histogram name="Net.HttpJob.IpProtection.JobResult"
+    enum="IpProtectionJobResult" expires_after="2025-01-19">
+  <owner>djmitche@chromium.org</owner>
+  <owner>src/components/ip_protection/OWNERS</owner>
+  <summary>
+    Result of a UrlRequestHttpJob with respect to IP Protection: not protected,
+    successfully protected, or fallback on protection failure. This does not
+    measure the result of the request to the destination, so for example a 500
+    from the destination is still considered success.
+
+    When either of the `MaskedDomainList` or `EnableIpPrivacyProxy` features are
+    disabled, this will always be `kProtectionNotAttempted`.
+
+    This histogram is emitted for every request handled by `UrlRequestHttpJob`
+    that is not aborted.
+  </summary>
+</histogram>
+
 <histogram name="Net.HttpJob.IpProtection.PrefilterBytesRead.Net" units="bytes"
     expires_after="2025-03-23">
   <owner>aakallam@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/network/enums.xml b/tools/metrics/histograms/metadata/network/enums.xml
index 96339d5..4001af38 100644
--- a/tools/metrics/histograms/metadata/network/enums.xml
+++ b/tools/metrics/histograms/metadata/network/enums.xml
@@ -651,6 +651,19 @@
   <int value="1" label="Proxy B"/>
 </enum>
 
+<enum name="IpProtectionProxyResolutionResult">
+  <int value="0"
+      label="The MDL is not populated, so an eligility decision could not be
+             made"/>
+  <int value="1" label="The request did not match the MDL"/>
+  <int value="2" label="The EnableIpProtectionProxy feature is not enabled"/>
+  <int value="3" label="The IP Protection setting is disabled"/>
+  <int value="4" label="Had proxy list, but no tokens for the current geo"/>
+  <int value="5" label="Had tokens for the current geo, but no proxy list"/>
+  <int value="6" label="Had neither proxy list nor tokens for the current geo"/>
+  <int value="7" label="The request was resolved to the IP Protection proxies"/>
+</enum>
+
 <enum name="IpProtectionTokenBatchRequestError">
   <int value="58877100" label="Failed to read timestamp"/>
   <int value="354921842" label="At least one extension is required"/>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml
index b94fbdf1..0cb40dba 100644
--- a/tools/metrics/histograms/metadata/network/histograms.xml
+++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -5143,6 +5143,25 @@
   </summary>
 </histogram>
 
+<histogram name="NetworkService.IpProtection.ProxyResolution"
+    enum="IpProtectionProxyResolutionResult" expires_after="2025-01-02">
+  <owner>djmitche@chromium.org</owner>
+  <owner>src/components/ip_protection/OWNERS</owner>
+  <summary>
+    The result of IpProtectionProxyDelegate::OnResolveProxy's analysis of a
+    request. The enum values are in the order the checks occur, so for example
+    if the request does not match the MDL and the feature is not enabled,
+    `kNoMdlMatch` will be recorded, as that is checked first.
+
+    When the `MaskedDomainList` feature is disabled, this will always be
+    `kMdlNotPopulated`. Otherwise, when `EnableIpPrivacyProxy` is disabled, this
+    will be `kNoMdlMatch` or `kFeatureDisabled`, depending on whether the
+    request matches the MDL.
+
+    This histogram is emitted for every request that undergoes proxy resolution.
+  </summary>
+</histogram>
+
 <histogram name="NetworkService.IpProtection.RequestIsEligibleForProtection"
     enum="IpProtectionEligibility" expires_after="2025-02-10">
   <owner>ashleynewson@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/session/histograms.xml b/tools/metrics/histograms/metadata/session/histograms.xml
index 62042a75..aa437c68 100644
--- a/tools/metrics/histograms/metadata/session/histograms.xml
+++ b/tools/metrics/histograms/metadata/session/histograms.xml
@@ -1092,7 +1092,7 @@
 </histogram>
 
 <histogram name="Session.WebStates.SerializedCertPolicyCacheSize" units="KB"
-    expires_after="2024-10-08">
+    expires_after="2025-10-08">
   <owner>ajuma@chromium.org</owner>
   <owner>justincohen@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml
index c216e14c..acfc895 100644
--- a/tools/metrics/histograms/metadata/signin/histograms.xml
+++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -1305,6 +1305,16 @@
   </summary>
 </histogram>
 
+<histogram name="Signin.IdentitySnackbarHadUserName" enum="BooleanAvailable"
+    expires_after="2025-10-01">
+  <owner>arthurmilchior@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <summary>
+    Recorded when the identity snackbar is displayed. It records whether the
+    name was available to display. iOS only.
+  </summary>
+</histogram>
+
 <histogram name="Signin.Intercept.BubbleDismissReason{Type}"
     enum="SigninInterceptionDismissReason" expires_after="2025-02-02">
   <owner>rsult@google.com</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 9e7ce56..eed86a5 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -6,7 +6,7 @@
         },
         "win": {
             "hash": "066fdeeadeb913dc99cd6cb19916237ccf804d49",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/b05b609c278f429aef8c32286ffa8c2e1f018f1f/trace_processor_shell.exe"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/ca467edc9dd2d58b6cfdf616cd69f0d457c15096/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "bb963e5488d9a76861165256126830c7ae523733",
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "a970025e2d93c368de68982b257f43c28cd3d4c5",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/b05b609c278f429aef8c32286ffa8c2e1f018f1f/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/ca467edc9dd2d58b6cfdf616cd69f0d457c15096/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 9886844..046208539 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -19,6 +19,7 @@
 <translation id="115443833402798225">Hangul ahnmate</translation>
 <translation id="1155759005174418845">katalonski</translation>
 <translation id="1168100932582989117">Google serveri naziva</translation>
+<translation id="1170788066030116158">Datum snimanja</translation>
 <translation id="1172970565351728681">Preostalo je oko <ph name="REMAINING_TIME" /></translation>
 <translation id="1173894706177603556">Preimenuj</translation>
 <translation id="1173916544412572294"><ph name="NETWORK_INDEX" />. mreža od <ph name="NETWORK_COUNT" />, <ph name="PHONE_NAME" />, <ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, baterija telefona <ph name="BATTERY_STATUS" />%, detalji</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index d3707c5c..ea3cac68 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -19,6 +19,7 @@
 <translation id="115443833402798225">Хангул ахнмате</translation>
 <translation id="1155759005174418845">каталонски</translation>
 <translation id="1168100932582989117">Google сервери назива</translation>
+<translation id="1170788066030116158">Датум снимања</translation>
 <translation id="1172970565351728681">Преостало је око <ph name="REMAINING_TIME" /></translation>
 <translation id="1173894706177603556">Преименуј</translation>
 <translation id="1173916544412572294"><ph name="NETWORK_INDEX" />. мрежа од <ph name="NETWORK_COUNT" />, <ph name="PHONE_NAME" />, <ph name="CONNECTION_STATUS" />, јачина сигнала <ph name="SIGNAL_STRENGTH" />%, батерија телефона <ph name="BATTERY_STATUS" />%, детаљи</translation>
diff --git a/v8 b/v8
index 5be7a6b..0e9d96c 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit 5be7a6bb31b5fca6e842f8aa66774cf3a65945f4
+Subproject commit 0e9d96c8d5d7422ed6256456365031f474643843